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 : Tout sélectionner
//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 {};