mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
104 lines
4.7 KiB
Plaintext
104 lines
4.7 KiB
Plaintext
/**
|
|
* fn_performStitching.sqf
|
|
* @Descr: N/A
|
|
* @Author: Glowbal
|
|
*
|
|
* @Arguments: []
|
|
* @Return:
|
|
* @PublicAPI: false
|
|
*/
|
|
|
|
#include "script_component.hpp"
|
|
|
|
#define WAITING_TIME_SMALL 2.5
|
|
#define WAITING_TIME_MEDIUM 3.5
|
|
#define WAITING_TIME_LARGE 4.5
|
|
|
|
#define WAITING_TIMES_WOUNDS [WAITING_TIME_SMALL, WAITING_TIME_MEDIUM, WAITING_TIME_LARGE]
|
|
|
|
private ["_injuredPerson", "_treatingPerson", "_selectionName", "_removeItem", "_prevAnim", "_bandagedWounds", "_bodyPartN", "_allWounds", "_totalWoundsCount", "_totalTime", "_startTimeOfStitching", "_indexStitch", "_woundstoStitchOf", "_afterStitchingWoundsCount", "_waitingTime", "_i", "_startTime", "_messageSend"];
|
|
_caller = _this select 0;
|
|
_target = _this select 1;
|
|
_selectionName = _this select 2;
|
|
_removeItem = _this select 3;
|
|
_prevAnim = _this select 4;
|
|
|
|
[_caller,"STR_ACE_STITCHING","STR_ACE_START_STITCHING_INJURIES", 0, [[_injuredPerson] call EFUNC(common,getName),_selectionName]] call EFUNC(gui,sendDisplayMessageTo);
|
|
|
|
_bandagedWounds = [_injuredPerson,QGVAR(bandagedWounds)] call EFUNC(common,getDefinedVariable);
|
|
_bodyPartN = [_selectionName] call FUNC(getBodyPartNumber);
|
|
|
|
_allWounds = _bandagedWounds select _bodyPartN;
|
|
_totalTime = ((_allWounds select 0) * WAITING_TIME_MEDIUM) + ((_allWounds select 1) * WAITING_TIME_MEDIUM) + ((_allWounds select 2) * WAITING_TIME_MEDIUM);
|
|
|
|
|
|
// Get the current position for the treatment person
|
|
_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller];
|
|
|
|
_caller setvariable [QGVAR(lastStichPerformed), diag_tickTime];
|
|
[{
|
|
private ["_caller","_target", "_selectionName", "_prevAnim", "_removeItem","_args"];
|
|
_args = _this select 0;
|
|
_caller = _args select 0;
|
|
_target = _args select 1;
|
|
_selectionName = _args select 2;
|
|
_removeItem = _args select 3;
|
|
_prevAnim = _args select 4;
|
|
|
|
if ((vehicle _caller != _caller) || ((getPos _caller) distance (_caller getvariable GVAR(ORIGINAL_POSITION_PLAYER))) >= 1) then {
|
|
[(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo);
|
|
|
|
if (_prevAnim != "") then {
|
|
[_caller,_prevAnim, 0] call EFUNC(common,doAnimation);
|
|
};
|
|
[QGVAR(treatmentIconID), false, QUOTE(PATHTOF(data\icons\icon_advanced_treatment.paa)), [1,1,1,1]] call EFUNC(gui,displayIcon);
|
|
["Medical_handleTreatment_Stitching", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent;
|
|
["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent;
|
|
|
|
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
|
};
|
|
|
|
if (diag_tickTime - (_caller getvariable [QGVAR(lastStichPerformed), diag_tickTime - WAITING_TIME_MEDIUM]) >= WAITING_TIME_MEDIUM) then {
|
|
_caller setvariable [QGVAR(lastStichPerformed), diag_tickTime];
|
|
|
|
_bandagedWounds = [_target,QGVAR(bandagedWounds)] call EFUNC(common,getDefinedVariable);
|
|
_allWounds = _bandagedWounds select _bodyPartN;
|
|
{
|
|
if (_x > 0) exitwith {
|
|
_value = _x - 1;
|
|
if (_value < 0) then {
|
|
_value = 0;
|
|
};
|
|
|
|
_allWounds set[_foreachIndex, _value];
|
|
};
|
|
}foreach _allWounds;
|
|
|
|
_bandagedWounds set [_bodyPartN, _allWounds];
|
|
[_target, QGVAR(bandagedWounds), _bandagedWounds] call EFUNC(common,setDefinedVariable);
|
|
|
|
if (((_allWounds select 0) * 2.5) + ((_allWounds select 1) * 3.5) + ((_allWounds select 2) * 4.5) <= 0) then {
|
|
[_target,"treatment",format["%1 has stitched up some bandages wounds",[_caller] call EFUNC(common,getName)]] call FUNC(addActivityToLog);
|
|
|
|
if (_prevAnim != "") then {
|
|
[_caller,_prevAnim, 0] call EFUNC(common,doAnimation);
|
|
};
|
|
[QGVAR(treatmentIconID), false, QUOTE(PATHTOF(data\icons\icon_advanced_treatment.paa)), [1,1,1,1]] call EFUNC(gui,displayIcon);
|
|
["Medical_handleTreatment_Stitching", [_caller, _target, _selectionName, _removeItem, true]] call ace_common_fnc_localEvent;
|
|
["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent;
|
|
|
|
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
|
};
|
|
};
|
|
}, 0.1, [_caller, _target, _selectionName, _removeItem, _prevAnim] ] call CBA_fnc_addPerFrameHandler;
|
|
|
|
|
|
// Necessary for showing the loading bar along side
|
|
[_totalTime, // the time to wait
|
|
{_caller = _this select 0; ((vehicle _caller != _caller) ||((getPos _caller) distance GVAR(ORIGINAL_POSITION_PLAYER)) < 1)}, // the condition, called every frame
|
|
{}, // on success
|
|
{}, // on failure
|
|
[_caller] // arguments
|
|
] call EFUNC(gui,loadingBar);
|
|
|
|
true; |