SHK taskmaster

Les scripts et les missions des [V]Vétérans

Vous pouvez poser vos questions et poster vos scripts, le forum est ouvert à tous.
Avatar de l’utilisateur
wollfen
Membre des [V]Vétérans
Messages : 1145
Inscription : 05 juin 2014, 21:58
Localisation : http://steamcommunity.com/id/wollfen

SHK taskmaster

Message par wollfen » 07 avr. 2019, 12:45

bonjour,

dans un soucie d'aller plus loin dans nos missions et de donner une autre dimension à celles-ci, je me suis lancé dans la persistance des données et sauvegarder en fin de partie :

- la position des joueurs
- leur dotation
- les forces ennemies et alliés présentes
- les taches accomplies et à accomplir

les 3 premiers points sont géré par Alive, seul le quatrième point posait problème...problème en passe d'être résolu avec l'utilisation du Inidbi 2 et du Shk_taskmaster.

Je passe sur inidbi 2 pour me focaliser sur Shk.

fonctionnement :

Shk utilise une variable de type global pour y stocker une ou plusieurs taches de la manière suivante :

["nom_ de_la_ tache","titre_de_la_tache","Description",Condition,[Marqueur],"etat"]

- nom de la tache : nom de référence
- titre : titre de la tache s'affichant sur le menu map
- description : description de la tache s'affichant en haut à gauche du menu map
- condition : spécifie qui est concerné par la tache, par défaut "tout le monde"
- marqueur : information sur le marqueur s'affichant sur map, qui contient plusieurs paramètres

Nom : nom du marqueur
Position : position du marqueur
Type : aspect du marqueur, par défaut "selector_selectedMission".
Couleur : couleur du marqueur, par défaut "rouge",
texte : texte du marqueur
zone : icone, elipse ou rectangle
taille : taille de la zone à l'affichage, par defaut, il utilise cette valeur pour X et Y

- etat : etat de la tache (succeeded, failed, canceled, assigned ou created).

exemples :

tache simple :

["tache_1", "attaquer","attaquer le village"]

tache simple avec condition :

["tache_1", "attaquer","attaquer le village","WEST"]; -----> tache visible que par le bloc ouest
["tache_1", "attaquer","attaquer le village","wollfen"]; ----> tache visible que par....moi !

tache simple avec marqueur :

["tache_1", "attaquer","attaquer le village",["marqueur sur carte",getmarkerpos "marqueur"]] ----> affiche le marqueur par défaut à la position getmarkerpos marqueur.

["tache_1", "attaquer","attaquer le village",["marqueur sur carte",getmarkerpos "marqueur","mil_flag","ColorGreen"] ]-----> affiche un marqueur de type drapeau vert à la position getmarkerpos marqueur.

tache simple avec marqueur de zone :

["tache_1", "attaquer","attaquer le village",["marqueur sur carte",getmarkerpos "marqueur","","ColorOrange","","Ellipse",[100,200]]]----> affiche une elipse orange à la position getmarkerpos marqueur.

en pratique :

Dans un premier temps, lors de l'édition de la mission, placer un ou plusieurs marqueurs invisibles : ces marqueurs vont servir de point d'affichage et doivent avoir le même nom que celui utiliser dans le getmarkerpos de la tache auquel il se rapporte.

dans l'init de la mission, inscrire la tache de départ et appeler le script du SHK : dans mon script, ça donne ceci :


// ----------------------------------------------------definition de la task de départ-----------------------------------------------------------------------
_TaskName = "task1";
_Title = "Capturer";
_Description = "Capturer les installations enemies";
_Condition = "";
_Marker = ["objectif",getmarkerpos "marqueur","mil_start","ColorGreen","","",""];
_state = "assigned";
_Destination = "";

// infos.............................[NoteTitle,NoteText,Condition]

_NoteTitle ="test";
_NoteText="test 2";
_Note_Condition ="";

SHK_Tasks=[_TaskName,_Title,_Description,_Condition,_Marker,_state,_Destination]; // taches



SHK_Infos=[_NoteTitle,_NoteText,_Note_Condition]; // notes

[SHK_Tasks,SHK_Infos] call compile preprocessfilelinenumbers "shk_taskmaster.sqf"; //------- envoie vers le script SHK

Au load de la mission, la tache "capturer" va s'activer...et ensuite ?

Ensuite, c'est là que tout prends son sens, SHK fonctionne uniquement sur déclencheur à l'aide de différente fonction.

déclencheur

en plaçant, un déclencheur, SHK permet de valider une tache, de changer son statut, d'en créer une ou plusieurs autres, etc...

exemple par rapport à l'exemple précédent :

sur l'activation du déclencheur : ["Task1","succeeded"] call SHK_Taskmaster_upd; -----> la tache passe en statut "succes"...

on peut également créer de nouvelles taches :

Toujours sur activation d'un déclencheur : ["Task2","Extraction","évacuez vers la plage !"] call SHK_Taskmaster_add;

et même coupler les 2 sur un même déclencheur : ["Task1","succeeded"] call SHK_Taskmaster_upd;["Task2","Extraction","évacuez vers la plage !"] call SHK_Taskmaster_add;

SHK comprends également des fonctions de contrôle, sur lesquelles je reviendrais comme :

SHK_Taskmaster_isCompleted

voila pour un premier jet, j'ajouterai sous peu des screens pour rendre l'ensemble plus compréhensible

avantage de cette méthode

A quoi ça sert de faire tout ça.... simplement, le fait que toutes les taches et leur avancement soient inscrites dans une variable , nous permet de la stocker à l'issue d'une partie, pour pouvoir être reprise plus tard via le script inidbi 2 :

j'ai pas fini alors soyez indulgents, même si ça fonctionne en l'état





// ------------------récupération de la variable globale

_data = SHK_Taskmaster_Tasks;

//----------------- nom du fichier de sauvegarde

_dataplaymission = missionName;
_now = date;
_year = _now select 0;
_databasename = format ["%1_sauve_task_%2", _dataplaymission,_year];


//------------------------ création de la db

_inidbiUN = ["new", _databasename] call OO_INIDBI;

//------------------------ inscription de la sauvegarde des taches "_data" dans la base de nom "_databasename"

["write", ["INFO", "Name", _databasename]] call _inidbiUN; // nom mission
["write", ["TASK", "task", _data]] call _inidbiUN; // taches
//["write", ["BRIEF", "Infos", _packet select 3]] call _inidbiUN; // infos

hint "enregistrement terminé";

et pour la lecture :



// --------------------------------------------------------------------chargement-----------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------------------------------------------------
_NoteTitle="Mission";
_NoteText="Repousser les forces CSAT de la vallée";
SHK_Infos=[_NoteTitle,_NoteText]; // notes

//----------------- nom du fichier de sauvegarde

_dataplaymission = missionName;
_now = date;
_year = _now select 0;
_databasename = format ["%1_sauve_task_%2",_dataplaymission,_year];


// ----------------------------création de la db

_inidbiUN = ["new", _databasename] call OO_INIDBI;

_databasefind = "exists" call _inidbiUN;

// --------------------------------------------------------fichier de sauvegarde trouvé, chargement et envoie au script SHK---------------------------------------------------
if (_databasefind) then {
"chargement...." remoteExec ["hint"];

_name = ["read", ["INFO", "Name", []]] call _inidbiUN;
_task = ["read", ["TASK", "task", []]] call _inidbiUN;
_Brief = ["read", ["BRIEF", "Infos", []]] call _inidbiUN;


// execution du shk
SHK_Tasks=_task;


} else{

// ----------------------------------------------------pas de fichier de sauvegarde, definition de la task de départ-----------------------------------------------------------------------


SHK_Tasks=[
["task1","Tenir","tenir la position, contrer l'offenfive",true,["objectif",getmarkerpos "marqueur_1","mil_flag","ColorRed","Tenir"],"assigned"]

];

// ------------------------------------------------------------------------------envoie vers le SHK --------------------------------------------------------------

[SHK_Tasks,[SHK_Infos]] call compile preprocessfilelinenumbers "shk_taskmaster.sqf";

};
un_database_check = nil;


voila, en l'etat :)
Image
Momento Mori

Avatar de l’utilisateur
Michel
Membre des [V]Vétérans
Messages : 985
Inscription : 22 oct. 2014, 11:16
Localisation : Toulon Var

Re: SHK taskmaster

Message par Michel » 07 avr. 2019, 13:52

Salut Wollf, ;)

Tu est au top , si tu arrives (je n'en doutes pas) a faire ce que tu prépares , l’équipe va faire un grand bon en avant !
Bwan sera le premier intéressé je suppose !
Tout le monde va prendre du plaisir a faire des longues campagnes a reprendre par épisodes en fonction de l'heure et des objectifs :)
Merci pour ton taf Wollf :D
A bientot tous ;)
Image

Avatar de l’utilisateur
wollfen
Membre des [V]Vétérans
Messages : 1145
Inscription : 05 juin 2014, 21:58
Localisation : http://steamcommunity.com/id/wollfen

Re: SHK taskmaster

Message par wollfen » 16 avr. 2019, 09:50

c'est bon, et c'est officiel, la persistance des taches fonctionnent :)...
Image
Momento Mori

Avatar de l’utilisateur
Max_veteran
Membre des [V]Vétérans
Messages : 999
Inscription : 08 nov. 2013, 22:51

Re: SHK taskmaster

Message par Max_veteran » 16 avr. 2019, 09:58

Aaaaah bien !!!!
Image

"Si vis pacem, para bellum"

Avatar de l’utilisateur
Picouse
Membre des [V]Vétérans
Messages : 1560
Inscription : 13 mai 2013, 16:33

Re: SHK taskmaster

Message par Picouse » 16 avr. 2019, 12:29

bien ça ;)
merci
Image

Répondre