PortailAccueilCalendrierRechercherTrombinoscopeS'enregistrerConnexionFAQ

Partagez | 
 

 Template de briefing qui marche (presque)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
=[TTK]= Memphis007
Grand Manitou
Grand Manitou


Nombre de messages : 738
Age : 36
Localisation : /dev/null
Humeur : Frak !
Date d'inscription : 13/04/2009

MessageSujet: Template de briefing qui marche (presque)   Jeu 12 Nov - 2:12

Donc après plusieurs tests et corrections je vous donne ma solution pour le briefing dans le cas d'un respawn "GROUP".

Ce briefing résout tous les problèmes pour les joueurs connectés en début de partie (le briefing est bien présent tout au long de la mission et ce même après de multiples respawn,, les objectifs sont cochés correctement et l'objectif en cour reste bien défini.)

Le seul petit détail qui reste encore à régler est au niveau du Join In Progress, en effet, les joueurs qui se connectent en cours de partie sont susceptibles de connaitre des bugs (objectifs qui apparaissent en double puis ça disparait, problèmes de statut des objectifs)

J'essaierai de parfaire ce schéma en début de semaine prochaine, en attendant si vous avez des idées...

briefing.sqf :

Code:
//on attend que les joueurs prennent possession de leurs corps
waitUntil { !isNil {player} };
waitUntil { player == player };

// ----- Notes -----
player createDiaryRecord ["Diary", ["Renseignements", "Il se pourrait qu'il y ai des patrouilles dans les forêts qui bordent la côte nord est. Vous devrez, dans un second temps, vérifier cette information et, le cas échéant, éliminer ces buveurs de vodka."]];

player createDiaryRecord ["Diary", ["Situation", "Le Sergeant Valjeant trouve que nous nous glandons depuis bien trop longtemps, la base avançée au nord de l'île est toujours sous contrôle Russe, afin de mener à bien nos opérations dans la région Tchernarusse nous devons l'investir au plus vite. Alors, arrêtez la binouse, le pastis et Go Go Go Go !!"]];

//on définit ici autant de variables locales que d'objectifs
_tskObj1_old    = nil;
_tskObj2_old    = nil;
_tskObj3_old    = nil;

// ----- Objectifs -----

//les 3 lignes supplémentaires ici servent à cocher les objectifs de façon approprié

if (!isNil "Obj2") then {_tskObj2_old = taskstate Obj2;};

obj2 = player createSimpleTask["Prendre la base avançée"];

obj2 setSimpleTaskDescription["Prendre la base avançée <br/><br/>La <marker name='m_obj2'>base avançée</marker> est sous le contrôle Russe. Vous devez la nettoyer afin d'en prendre le contrôle", "Prendre la base avançée", "Base avançée"];

obj2 setSimpleTaskDestination (getMarkerPos "m_obj2");

if (!isNil "_tskObj2_old") then {Obj2 setTaskState _tskObj2_old;};

if (TaskState obj2 == "Assigned") then {player SetCurrentTask obj2};


if (!isNil "Obj1") then {_tskObj1_old = taskstate Obj1;};

obj1 = player createSimpleTask["Rejoindre le dépôt d'armes"];

obj1 setSimpleTaskDescription["Rejoindre le dépôt d'armes <br/><br/>Afin de vous équipper correctement vous devrez rejoindre <marker name='m_obj1'>le dépôt d'armes</marker>.", "Rejoindre le dépôt d'armes", "Rejoindre le dépôt d'armes"];

obj1 setSimpleTaskDestination (getMarkerPos "m_obj1");

if (!isNil "_tskObj1_old") then {Obj1 setTaskState _tskObj1_old;};

if (TaskState obj1 == "Assigned") then {player SetCurrentTask obj1};


// si des objectifs sont déclarés pendant la mission, il faut les rappeler ici (ob2=true; publicVariable "ob2"; lorsque obj2 est réussi)

if (!isnil "ob2") then {

  if (!isNil "Obj3") then {_tskObj3_old = taskstate Obj3;};

  obj3 = player createSimpleTask["Nettoyez les Forêts"];

  obj3 setSimpleTaskDescription["Nettoyez les Forêts <br/><br/>Faites vous plaisir maintenant, allez nettoyez les forêts qui longent la route au nord est de l'île", "Nettoyez les forêts", "Nettoyez les forêts"];

  if (!isNil "_tskObj3_old") then {Obj3 setTaskState _tskObj3_old;};

  if (TaskState obj3 == "Assigned") then {player SetCurrentTask obj3};

};


//vérifie l'état de l'objectif 1, si il n'est pas réalisé, alors on le définit comme tâche actuelle (ob1=true; publicVariable "ob1"; lorsque obj1 est réussi)
if (isNil "ob1") then {player setcurrenttask obj1};


//envoyer le briefing au respawn et au Join In Progress
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 {};

_________________
Pour halloween, un vrai geek met un masque de sous réseau.

So Say We All ! - LCDAQFLR

Revenir en haut Aller en bas
=[TTK]= FreshMeat
Manitou
Manitou


Nombre de messages : 153
Date d'inscription : 20/07/2009

MessageSujet: Re: Template de briefing qui marche (presque)   Jeu 12 Nov - 11:10

Une autre idée à creuser serait de déclarer dans l'init du server autant de variables contenant le statut de chaque objectif et de s'en servir dans le briefing.

Dans l'init :

if (isserver)
then {
obj1_state = "CREATED";
Publicvariable "obj1_state";
obj2_state = "NONE";
Publicvariable "obj2_state";
}
else
{
waituntil (!isnil(obj1_state));
waituntil (!isnil(obj2_state));
};

_briefing = execvm "briefing.sqf";

Dans le briefing :

if (!isnil(obj1_state)) then {
if (obj1_state != "NONE") then {
// création de l'objectif 1 et affectation du statut obj1_state
};
};
if (!isnil(obj2_state)) then {
if (obj2_state != "NONE") then {
// création de l'objectif 1 et affectation du statut obj1_state
};
};

//envoyer le briefing au respawn et au Join In Progress
if ( isNil{player getVariable "mk_killedEHadded"} ) then
{
player addEventHandler ["killed",
{
[] spawn {
waitUntil { alive player };
execVM "briefing.sqf";
};
}];
player setVariable ["mk_killedEHadded", true];
};


Au changement de statut de chaque objectif ajouter :
if (isserver && obj1_state != "SUCCEEDED") then {obj1_state = "SUCCEEDED";Publicvariable "obj1_state";};

La question étant : est-ce que les variables publiques sont connues au moment lors du respawn ou de la connexion en jeu?

_________________
Les gens n'accordent guère d'importance à la vie, la preuve : quand ils la perdent, ils ne la réclament jamais.
[Jean Deluca]

Revenir en haut Aller en bas
=[TTK]= Memphis007
Grand Manitou
Grand Manitou


Nombre de messages : 738
Age : 36
Localisation : /dev/null
Humeur : Frak !
Date d'inscription : 13/04/2009

MessageSujet: Re: Template de briefing qui marche (presque)   Jeu 12 Nov - 11:46

je me pose la même question en ce qui concerne le JIP. pour le respawn pas de soucis

Et j'avais pensez creuser ta méthode

_________________
Pour halloween, un vrai geek met un masque de sous réseau.

So Say We All ! - LCDAQFLR

Revenir en haut Aller en bas
=[TTK]= FreshMeat
Manitou
Manitou


Nombre de messages : 153
Date d'inscription : 20/07/2009

MessageSujet: Re: Template de briefing qui marche (presque)   Jeu 12 Nov - 12:08

ben en fait, je pense que pour résoudre l'absence de variable publique, il faut un bête script qui tourne en permanance sur le serveur, par exemple lancé depuis un déclencheur avec une condition 'true', voir directement depuis l'init, après l'initialisation des variables.

Dans l'init :

if (isserver) then {
obj1_state = "CREATED";
obj2_state = "NONE";
_states = execvm "states.sqf";
};


_briefing = execvm "briefing.sqf";


states.sqf :

if (isserver) then {
while {true} do {
publicvariable "obj1_state";
publicvariable "obj2_state";
sleep 5;
};
};



Et remettre les waituntil(!isnil(obj...)) directement dans le briefing ....


waituntil (!isnil(obj1_state));
if (obj1_state != "NONE") then {
// création de l'objectif 1 et affectation du statut obj1_state
};

waituntil (!isnil(obj2_state));
if (obj2_state != "NONE") then {
// création de l'objectif 1 et affectation du statut obj1_state
};


//envoyer le briefing au respawn et au Join In Progress
if ( isNil{player getVariable "mk_killedEHadded"} ) then
{
player addEventHandler ["killed",
{
[] spawn {
waitUntil { alive player };
execVM "briefing.sqf";
};
}];
player setVariable ["mk_killedEHadded", true];
};

Au changement de statut de chaque objectif ajouter, en fonction du nouveau statut :
if (isserver) then {obj1_state = "SUCCEEDED";publicvariable "obj1_state";};

On conserver le mise à jour avec publicvariable juste après le changement de statut afin de limiter au maximum les risques de respawn entre le moment où un objectif est atteint et la mise à jour de la varibiable objX_state

_________________
Les gens n'accordent guère d'importance à la vie, la preuve : quand ils la perdent, ils ne la réclament jamais.
[Jean Deluca]

Revenir en haut Aller en bas
=[TTK]= Clem
Manitou
Manitou


Nombre de messages : 232
Date d'inscription : 12/04/2009

MessageSujet: Re: Template de briefing qui marche (presque)   Ven 27 Nov - 11:09

ta essayer en rajoutant switch (side player) do { }; si ca change quelque chose ?



Code:
// on attend que les joueurs prennent possession de leurs corps
waitUntil { !isNil {player} };
waitUntil { player == player };
 
 
switch (side player) do
{
   
   case WEST: // BLUFOR briefing goes here
   {
                      // ----- Notes -----
player createDiaryRecord ["Diary", ["Renseignements", "Il se pourrait qu'il y ai des patrouilles dans les forêts qui bordent la côte nord est. Vous devrez, dans un second temps, vérifier cette information et, le cas échéant, éliminer ces buveurs de vodka."]];

player createDiaryRecord ["Diary", ["Situation", "Le Sergeant Valjeant trouve que nous nous glandons depuis bien trop longtemps, la base avançée au nord de l'île est toujours sous contrôle Russe, afin de mener à bien nos opérations dans la région Tchernarusse nous devons l'investir au plus vite. Alors, arrêtez la binouse, le pastis et Go Go Go Go !!"]];

//on définit ici autant de variables locales que d'objectifs
_tskObj1_old    = nil;
_tskObj2_old    = nil;
_tskObj3_old    = nil;

// ----- Objectifs -----

//les 3 lignes supplémentaires ici servent à cocher les objectifs de façon approprié

if (!isNil "Obj2") then {_tskObj2_old = taskstate Obj2;};

obj2 = player createSimpleTask["Prendre la base avançée"];

obj2 setSimpleTaskDescription["Prendre la base avançée <br/><br/>La <marker name='m_obj2'>base avançée</marker> est sous le contrôle Russe. Vous devez la nettoyer afin d'en prendre le contrôle", "Prendre la base avançée", "Base avançée"];

obj2 setSimpleTaskDestination (getMarkerPos "m_obj2");

if (!isNil "_tskObj2_old") then {Obj2 setTaskState _tskObj2_old;};

if (TaskState obj2 == "Assigned") then {player SetCurrentTask obj2};


if (!isNil "Obj1") then {_tskObj1_old = taskstate Obj1;};

obj1 = player createSimpleTask["Rejoindre le dépôt d'armes"];

obj1 setSimpleTaskDescription["Rejoindre le dépôt d'armes <br/><br/>Afin de vous équipper correctement vous devrez rejoindre <marker name='m_obj1'>le dépôt d'armes</marker>.", "Rejoindre le dépôt d'armes", "Rejoindre le dépôt d'armes"];

obj1 setSimpleTaskDestination (getMarkerPos "m_obj1");

if (!isNil "_tskObj1_old") then {Obj1 setTaskState _tskObj1_old;};

if (TaskState obj1 == "Assigned") then {player SetCurrentTask obj1};


// si des objectifs sont déclarés pendant la mission, il faut les rappeler ici (ob2=true; publicVariable "ob2"; lorsque obj2 est réussi)

if (!isnil "ob2") then {

  if (!isNil "Obj3") then {_tskObj3_old = taskstate Obj3;};

  obj3 = player createSimpleTask["Nettoyez les Forêts"];

  obj3 setSimpleTaskDescription["Nettoyez les Forêts <br/><br/>Faites vous plaisir maintenant, allez nettoyez les forêts qui longent la route au nord est de l'île", "Nettoyez les forêts", "Nettoyez les forêts"];

  if (!isNil "_tskObj3_old") then {Obj3 setTaskState _tskObj3_old;};

  if (TaskState obj3 == "Assigned") then {player SetCurrentTask obj3};
  };
   
   
   case EAST: // REDFOR briefing goes here
   {
      
      
   };
   
   
   case RESISTANCE: // RESISTANCE/INDEPENDENT briefing goes here
   {
      
      
   };
   
   
   case CIVILIAN: // CIVILIAN briefing goes here
   {
      
      
   };
};



// run this file again when respawning (only setup the killed EH once though)
if ( isNil{player getVariable "mk_killedEHadded"} ) then
{
   player addEventHandler ["killed",
   {
      [] spawn {
         waitUntil { alive player }; // waitUntil player has respawned
         execVM "briefing.sqf";
      };   
   }];
   player setVariable ["mk_killedEHadded", true];
};

_________________
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Template de briefing qui marche (presque)   

Revenir en haut Aller en bas
 
Template de briefing qui marche (presque)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Connexion qui marche presque... hé non
» Petite marche tranquille (enfin presque).
» Arknöt-Moine-Marche-Vent- (dps)
» La perte de PA, ça marche comment ?
» Template Tilset A, A1, A2...

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
=[TTK]= Team TranKilou  :: Le Quartier Précis :: Edition :: Edition ArmA 2-
Sauter vers: