From e36a0727df4f72bdc5cf7f74c93a491de035b33e Mon Sep 17 00:00:00 2001 From: McPedr0 <87615439+McPedr0@users.noreply.github.com> Date: Mon, 13 Nov 2023 20:29:13 +0100 Subject: [PATCH] Updated Ace medical with AI and Suturekit changes (#183) --- .../ACE_Medical_Treatment_Actions.hpp | 9 -- addons/ace_tweaks/XEH_PREP.sqf | 5 -- addons/ace_tweaks/config.cpp | 1 - addons/ace_tweaks/fnc_canStitch.sqf | 33 -------- addons/ace_tweaks/fnc_getStitchTime.sqf | 45 ---------- addons/ace_tweaks/fnc_surgicalKitProgress.sqf | 83 ------------------- addons/ace_tweaks/fnc_surgicalKitSuccess.sqf | 32 ------- .../cba_settings_userconfig/cba_settings.sqf | 2 +- addons/tmf_loadouts/macros.inc | 3 +- 9 files changed, 3 insertions(+), 210 deletions(-) delete mode 100644 addons/ace_tweaks/ACE_Medical_Treatment_Actions.hpp delete mode 100644 addons/ace_tweaks/fnc_canStitch.sqf delete mode 100644 addons/ace_tweaks/fnc_getStitchTime.sqf delete mode 100644 addons/ace_tweaks/fnc_surgicalKitProgress.sqf delete mode 100644 addons/ace_tweaks/fnc_surgicalKitSuccess.sqf diff --git a/addons/ace_tweaks/ACE_Medical_Treatment_Actions.hpp b/addons/ace_tweaks/ACE_Medical_Treatment_Actions.hpp deleted file mode 100644 index 1da0145..0000000 --- a/addons/ace_tweaks/ACE_Medical_Treatment_Actions.hpp +++ /dev/null @@ -1,9 +0,0 @@ -class ace_medical_treatment_actions { - class FieldDressing; - class SurgicalKit: FieldDressing { - treatmentTime = QFUNC(getStitchTime); - condition = QFUNC(canStitch); - callbackSuccess = QFUNC(surgicalKitSuccess); - callbackProgress = QFUNC(surgicalKitProgress); - }; -}; diff --git a/addons/ace_tweaks/XEH_PREP.sqf b/addons/ace_tweaks/XEH_PREP.sqf index 857520a..2cc3482 100644 --- a/addons/ace_tweaks/XEH_PREP.sqf +++ b/addons/ace_tweaks/XEH_PREP.sqf @@ -1,6 +1 @@ PREP(handleVehicleDeath); - -PREP(canStitch); -PREP(getStitchTime); -PREP(surgicalKitProgress); -PREP(surgicalKitSuccess); diff --git a/addons/ace_tweaks/config.cpp b/addons/ace_tweaks/config.cpp index 2f59ad6..c6dcf2e 100644 --- a/addons/ace_tweaks/config.cpp +++ b/addons/ace_tweaks/config.cpp @@ -40,7 +40,6 @@ class ace_medical_replacementItems { }; #include "ACE_detector.hpp" -#include "ACE_Medical_Treatment_Actions.hpp" #include "CfgEventHandlers.hpp" #include "CfgWeapons.hpp" #include "Cfg3DEN.hpp" diff --git a/addons/ace_tweaks/fnc_canStitch.sqf b/addons/ace_tweaks/fnc_canStitch.sqf deleted file mode 100644 index f979013..0000000 --- a/addons/ace_tweaks/fnc_canStitch.sqf +++ /dev/null @@ -1,33 +0,0 @@ -#include "script_component.hpp" -#define MAINPREFIX z -#define PREFIX ace -#define COMPONENT medical_treatment -/* - * Author: Katalam, mharis001 - * Checks if the patient can be stitched. - * - * Arguments: - * 0: Medic (not used) - * 1: Patient - * - * ReturnValue: - * Can Stitch - * - * Example: - * [player, cursorTarget] call ace_medical_treatment_fnc_canStitch - * - * Public: No - */ - -params ["", "_patient"]; - -(_patient call FUNC(getStitchableWounds) isNotEqualTo []) || -{ // Allow stitching if "Clear Trauma" is set to "After Stitch", - // but wound reopening is disabled - GVAR(clearTrauma) isEqualTo 1 && - {!IS_BLEEDING(_patient)} && - {(_patient getVariable [ - QEGVAR(medical,bodyPartDamage), - [0,0,0,0,0,0] - ]) isNotEqualTo [0,0,0,0,0,0]} -} diff --git a/addons/ace_tweaks/fnc_getStitchTime.sqf b/addons/ace_tweaks/fnc_getStitchTime.sqf deleted file mode 100644 index 9cc60ac..0000000 --- a/addons/ace_tweaks/fnc_getStitchTime.sqf +++ /dev/null @@ -1,45 +0,0 @@ -#include "script_component.hpp" -#define MAINPREFIX z -#define PREFIX ace -#define COMPONENT medical_treatment -/* - * Author: mharis001 - * Calculates the Surgical Kit treatment time based on the amount of stitchable wounds. - * - * Arguments: - * 0: Medic (not used) - * 1: Patient - * - * Return Value: - * Treatment Time - * - * Example: - * [player, cursorObject] call ace_medical_treatment_fnc_getStitchTime - * - * Public: No - */ - -params ["", "_patient"]; -private _time = 0; - -if (GVAR(advancedBandages) == 2) then { - _time = count (_patient call FUNC(getStitchableWounds)) * GVAR(woundStitchTime); -} else { - // Allow stitching if "Clear Trauma" is set to "After Stitch", - // but wound reopening is disabled - if (GVAR(clearTrauma) == 1) then { - private _bodyPartDamage = _patient getVariable [ - QEGVAR(medical,bodyPartDamage), - [0,0,0,0,0,0] - ]; - - { - ADD(_time, _x); - } forEach _bodyPartDamage; - - _time = (_time max 1) * GVAR(woundStitchTime); - }; -}; - -_time - diff --git a/addons/ace_tweaks/fnc_surgicalKitProgress.sqf b/addons/ace_tweaks/fnc_surgicalKitProgress.sqf deleted file mode 100644 index 48a374f..0000000 --- a/addons/ace_tweaks/fnc_surgicalKitProgress.sqf +++ /dev/null @@ -1,83 +0,0 @@ -#include "script_component.hpp" -#define MAINPREFIX z -#define PREFIX ace -#define COMPONENT medical_treatment -/* - * Author: BaerMitUmlaut, mharis001 - * Handles the surgical kit treatment by periodically closing bandaged wounds. - * - * Arguments: - * 0: Arguments - * 0: Medic (not used) - * 1: Patient - * 1: Elapsed Time - * 2: Total Time - * - * Return Value: - * Continue Treatment - * - * Example: - * [[objNull, player], 5, 10] call ace_medical_treatment_fnc_surgicalKitProgress - * - * Public: No - */ - -params ["_args", "_elapsedTime", "_totalTime"]; -_args params ["", "_patient"]; - -private _stitchableWounds = _patient call FUNC(getStitchableWounds); - -// Stop treatment if there are no wounds that can be stitched remaining, -// except when clear trauma on stitch is enabled -if (_stitchableWounds isEqualTo []) exitWith {GVAR(clearTrauma) == 1}; - -// Not enough time has elapsed to stitch a wound -if (_totalTime - _elapsedTime > (count _stitchableWounds - 1) * GVAR(woundStitchTime)) exitWith {true}; - -private _bandagedWounds = GET_BANDAGED_WOUNDS(_patient); -private _stitchedWounds = GET_STITCHED_WOUNDS(_patient); - -// Remove the first stitchable wound from the bandaged wounds -private _treatedWound = _bandagedWounds deleteAt (_bandagedWounds find (_stitchableWounds select 0)); -_treatedWound params ["_treatedID", "_treatedBodyPartN", "_treatedAmountOf", "", "_treatedDamageOf"]; - -// Check if we need to add a new stitched wound or increase the amount of an existing one -private _woundIndex = _stitchedWounds findIf { - _x params ["_classID", "_bodyPartN"]; - - _classID == _treatedID && {_bodyPartN == _treatedBodyPartN} -}; - -if (_woundIndex == -1) then { - _stitchedWounds pushBack _treatedWound; -} else { - private _wound = _stitchedWounds select _woundIndex; - _wound set [2, (_wound select 2) + _treatedAmountOf]; -}; - -if (GVAR(clearTrauma) == 1) then { - TRACE_2("clearTrauma - clearing trauma after stitching",_partIndex,_treatedWound); - private _bodyPartDamage = _patient getVariable [QEGVAR(medical,bodyPartDamage), []]; - _bodyPartDamage set [_treatedBodyPartN, (_bodyPartDamage select _treatedBodyPartN) - _treatedDamageOf]; - _patient setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true]; - TRACE_2("clearTrauma - healed damage",_partIndex,_treatedDamageOf); - - switch (_treatedBodyPartN) do { - case 0: { [_patient, true, false, false, false] call EFUNC(medical_engine,updateBodyPartVisuals); }; - case 1: { [_patient, false, true, false, false] call EFUNC(medical_engine,updateBodyPartVisuals); }; - case 2; - case 3: { [_patient, false, false, true, false] call EFUNC(medical_engine,updateBodyPartVisuals); }; - default { [_patient, false, false, false, true] call EFUNC(medical_engine,updateBodyPartVisuals); }; - }; -}; - -_patient setVariable [VAR_BANDAGED_WOUNDS, _bandagedWounds, true]; -_patient setVariable [VAR_STITCHED_WOUNDS, _stitchedWounds, true]; - -// Check if we fixed limping by stitching this wound (only for leg wounds) -if (EGVAR(medical,limping) == 2 && {_patient getVariable [QEGVAR(medical,isLimping), false]} && {_treatedBodyPartN > 3}) then { - TRACE_3("Updating damage effects",_patient,_treatedBodyPartN,local _patient); - [QEGVAR(medical_engine,updateDamageEffects), _patient, _patient] call CBA_fnc_targetEvent; -}; - -true diff --git a/addons/ace_tweaks/fnc_surgicalKitSuccess.sqf b/addons/ace_tweaks/fnc_surgicalKitSuccess.sqf deleted file mode 100644 index 9d43961..0000000 --- a/addons/ace_tweaks/fnc_surgicalKitSuccess.sqf +++ /dev/null @@ -1,32 +0,0 @@ -#include "script_component.hpp" -#define MAINPREFIX z -#define PREFIX ace -#define COMPONENT medical_treatment -/* - * Author: Freddo - * Handles the surgical kit treatment by resetting bodypart damage. - * - * Arguments: - * 0: Medic (not used) - * 1: Patient - * - * Return Value: - * None - * - * Example: - * [player, player] call ace_medical_treatment_fnc_surgicalKitSuccess - * - * Public: No - */ - -params ["_medic", "_patient"]; - -if (GVAR(clearTrauma) == 1 && {GVAR(advancedBandages) != 2}) then { - TRACE_2("clearTrauma - clearing trauma after stitching (no reopening)",_medic,_patient); - _patient setVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0], true]; - - [_patient, true, true, true, true] call EFUNC(medical_engine,updateBodyPartVisuals); -}; - - -nil diff --git a/addons/cba_settings_userconfig/cba_settings.sqf b/addons/cba_settings_userconfig/cba_settings.sqf index d3daf8a..69e813e 100644 --- a/addons/cba_settings_userconfig/cba_settings.sqf +++ b/addons/cba_settings_userconfig/cba_settings.sqf @@ -173,7 +173,7 @@ force ace_medical_painCoefficient = 1; force ace_medical_playerDamageThreshold = 1; force ace_medical_spontaneousWakeUpChance = 0.5; force ace_medical_spontaneousWakeUpEpinephrineBoost = 2; -force ace_medical_statemachine_AIUnconsciousness = true; +force ace_medical_statemachine_AIUnconsciousness = false; force ace_medical_statemachine_cardiacArrestBleedoutEnabled = true; force ace_medical_statemachine_cardiacArrestTime = 30; force ace_medical_statemachine_fatalInjuriesAI = 0; diff --git a/addons/tmf_loadouts/macros.inc b/addons/tmf_loadouts/macros.inc index 8423084..4fe39a0 100644 --- a/addons/tmf_loadouts/macros.inc +++ b/addons/tmf_loadouts/macros.inc @@ -19,7 +19,8 @@ LIST_5("ACE_salineIV_250"), \ LIST_2("ACE_bodyBag"), \ LIST_10("ACE_splint"), \ LIST_5("ACE_salineIV"), \ -"ACE_surgicalKit" +"ACE_surgicalKit", \ +LIST_20("ACE_suture") #define MTR_GEAR \ "ACE_RangeTable_82mm", \