diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 9848410c8c3..76bd77b44a0 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -200,8 +200,9 @@ class ACE_Medical_Actions { items[] = {"ACE_surgicalKit"}; treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)}; requiredMedic = QGVAR(medicSetting_SurgicalKit); - treatmentTime = 10; - callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_surgicalKit)); + treatmentTime = "(count ((_this select 1) getVariable ['ACE_Medical_bandagedWounds', []]) * 5)"; + callbackSuccess = ""; + callbackProgress = QUOTE(DFUNC(treatmentAdvanced_surgicalKit_onProgress)); itemConsumed = QGVAR(consumeItem_SurgicalKit); animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; litter[] = { {"All", "", {"ACE_MedicalLitter_gloves"} }}; diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index 4f4ff5bc302..d3c22757514 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -78,6 +78,7 @@ PREP(treatmentAdvanced_fullHeal); PREP(treatmentAdvanced_fullHealLocal); PREP(treatmentAdvanced_medication); PREP(treatmentAdvanced_medicationLocal); +PREP(treatmentAdvanced_surgicalKit_onProgress); PREP(treatmentBasic_bandage); PREP(treatmentBasic_bloodbag); PREP(treatmentBasic_bloodbagLocal); diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index f50ff505e09..a5fde365cf5 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn"]; +private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; @@ -174,8 +174,26 @@ if (vehicle _caller == _caller && {_callerAnim != ""}) then { [_caller, _callerAnim] call EFUNC(common,doAnimation); }; +//Get treatment time +if (isNumber (_config >> "treatmentTime")) then { + _treatmentTime = getNumber (_config >> "treatmentTime"); +} else { + if (isText (_config >> "treatmentTime")) then { + _treatmentTimeConfig = getText(_config >> "treatmentTime"); + if (isnil _treatmentTimeConfig) then { + _treatmentTimeConfig = compile _treatmentTimeConfig; + } else { + _treatmentTimeConfig = missionNamespace getvariable _treatmentTimeConfig; + }; + if (typeName _treatmentTimeConfig == "SCALAR") then { + _treatmentTime = _treatmentTimeConfig; + } else { + _treatmentTime = [_caller, _target, _selectionName, _className] call _treatmentTimeConfig; + }; + }; +}; + // Start treatment -_treatmentTime = getNumber (_config >> "treatmentTime"); [ _treatmentTime, [_caller, _target, _selectionName, _className, _items, _usersOfItems], diff --git a/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf b/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf new file mode 100644 index 00000000000..c0e1037027f --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf @@ -0,0 +1,28 @@ +/* + * Author: BaerMitUmlaut + * Handles treatment via surgical kit per frame. + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_args", "_target", "_caller", "_elapsedTime", "_totalTime", "_bandagedWounds"]; +_args = _this select 0; +_caller = _args select 0; +_target = _args select 1; +_elapsedTime = _this select 1; +_totalTime = _this select 2; + +_bandagedWounds = _target getVariable [QGVAR(bandagedWounds), []]; + +//In case two people stitch up one patient and the last wound has already been closed we can stop already +if (count _bandagedWounds == 0) exitWith {false}; + +//Has enough time elapsed that we can close another wound? +if ((_totalTime - _elapsedTime) <= (((count _bandagedWounds) - 1) * 5)) then { + _bandagedWounds deleteAt 0; + _target setVariable [QGVAR(bandagedWounds), _bandagedWounds, true]; +}; + +true \ No newline at end of file