The-Programmer Forum

pos038f a écrit le dernier message :
#8
Bonjour,

Alors moi je peux te proposer ceci :

1) Ouvrir le function.hpp et ajouter dans la class Actions {
[CODE title="Function.hpp"]class healself {};[/CODE]



2) Soit tu va utiliser un vItems déjà existant (Donc tu passe cette étape) ou alors tu en créer un dans le fichier config_vItems.hpp

3)Tu créer un fichier se nommant fn_healself.sqf dans le dossier Core\actions et tu copie colle :
[CODE title="fn_healself.hpp"]#include "..\..\script_macros.hpp"
/*
File: fn_healself.sqf
Author: Thomas SANCHET

Description:
Heal self with VIitems
*/
private ["_heal","_healself","_upp","_ui","_progress","_pgText","_cP","_previousState"];
life_interrupted = false;
_heal = getDammage player;
_healself = _heal - 0.15;
if (_heal == 0) exitWith {hint "Tu est en pleine forme"};
if (!([false,"medikit",1] call life_fnc_handleInv)) exitWith {};
life_action_inUse = true;
_upp = format [localize "STR_ISTR_heal_self"];

//Setup our progress bar.
disableSerialization;
"progressBar" cutRsc ["life_progress","PLAIN"];
_ui = uiNamespace getVariable "life_progress";
_progress = _ui displayCtrl 38201;
_pgText = _ui displayCtrl 38202;
_pgText ctrlSetText format ["%2 (1%1)...","%",_upp];
_progress progressSetPosition 0.01;
_cP = 0.01;

for "_i" from 0 to 1 step 0 do {
if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then {
[player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT];
player switchMove "AinvPknlMstpSnonWnonDnon_medic_1";
player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1";
};
uiSleep 0.2;
if (isNull _ui) then {
"progressBar" cutRsc ["life_progress","PLAIN"];
_ui = uiNamespace getVariable "life_progress";
_progressBar = _ui displayCtrl 38201;
_titleText = _ui displayCtrl 38202;
};
_cP = _cP + 0.01;
_progress progressSetPosition _cP;
_pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp];
if (_cP >= 1) exitWith {};
if (!alive player) exitWith {};
if (life_interrupted) exitWith {};
};
life_action_inUse = false;
"progressBar" cutText ["","PLAIN"];
player playActionNow "stop";
if (!alive player) exitWith {};
if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"];};


switch (true) do {
player setDammage _healself;
};
titleText[format [localize "STR_ISTR_heal_self_Success",_displayName],"PLAIN"];[/CODE]

Attention : Tu soit mettre la class de ton item virtuel à place de "medikit" ligne 14

4) Créer les stringlables suivants :
Code:
STR_ISTR_heal_self //Texte qui va s'affiché dans ta barre de progression
STR_ISTR_heal_self_Success // Texte qui va s'affiché à la fin de l'action

5) Ouvrir le fichier fn_useItem.sqf dans le dossier Core\Pmenu et ajouter en dessous de switch (_item) do { :
[CODE title="fn_useItem.sqf"] case "medikit": {
[] spawn life_fnc_healself;
closeDialog 0;
};[/CODE]


J'ai tester de mon côté et cela est fonctionnel par contre tu n'a pas le côté x point de vie toutes les x secondes ...

Je me suis inspiré des items utilisables de bases telle que les jerrycan d'essence.

PS : C'est régler pour que la personne récupère 15% des points de vie et tu peux le modifier à la ligne 12 du fichier fn_healself.hpp ( 0= néant, 1= récupère la totalité de ça vie)