Français Solved Comment mettre en place une fonction de régénération progressive de santé ?

  • Auteur de la discussion Auteur de la discussion Zaros
  • Date de début Date de début

Zaros

User
29/12/19
24
2
3
300
Bonjour,

Je vien poser une petite question à vous tous !

J'aimerais créer une petite fonction qui permettrait de régénérer d'1 point de vie toutes les 2.5s ainsi qu'un maximum de 15 pv en + que ceux d'origine exemple :

J'ai 65pv et à la fin j'en ai 70.

Je n'ai tout simplement pas d'idée de comment le mettre en place ? Si quelqu'un en a c'est preneur!
 
Bonjour,

Tu verrai un fonctionnement comment ? Un panneau ? Un objet ? ...

Il faut faire une action ? C'est en continue ? ...
 
Yop !

Dans ton fn_useItem.sqf, en dessous de switch (_item) do { tu peux ajouter :
Code:
    case "class_de_ton_item": {
        if ([false,_item,1] call life_fnc_handleInv) then { // Enlève l'item de l'inventaire
            hint "Regénération de votre santé en cours !";

            [] spawn {
                _curHealth = damage player;
                while {(((_curHealth - (damage player)) < 0.15) && (damage player > 0))} do {
                    player setDamage ((damage player) - 0.01);
                    uiSleep 2.5;
                };
            };
        };
    };

Dis-moi si ça fonctionne :)
 
Yop !

Dans ton fn_useItem.sqf, en dessous de switch (_item) do { tu peux ajouter :
Code:
    case "class_de_ton_item": {
        if ([false,_item,1] call life_fnc_handleInv) then { // Enlève l'item de l'inventaire
            hint "Regénération de votre santé en cours !";

            [] spawn {
                _curHealth = damage player;
                while {(((_curHealth - (damage player)) < 0.15) && (damage player > 0))} do {
                    player setDamage ((damage player) - 0.01);
                    uiSleep 2.5;
                };
            };
        };
    };

Dis-moi si ça fonctionne :)

ça n'a pas l'air de fonctionner :/
 
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)