From f4dbe5229e67e9d32975b2096b626ca941b46b0b Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Tue, 8 Oct 2019 16:44:36 +0100 Subject: [PATCH] Medical - Option for treatment to require holstering/lowering weapon. (#7063) * Option for medical treatment to require holstering/lowering weapon, with an option for examine category items to still be available. * Vehicles cause holster settings to be ignored. Unsure whether to expand this into it's own setting (disallow all medical in vehicles? only allow if both medic and patient are in the same vehicle? what about people in the back of transports healing those in the cab?), but just going to leave it as is for now. * Replace !isEqualTo with != in for performance reasons. Resolves line 33 PR review. * Merge settings, short circuit * move logic to new file --- addons/medical_treatment/XEH_PREP.hpp | 1 + .../functions/fnc_canTreat.sqf | 1 + .../functions/fnc_canTreat_holsterCheck.sqf | 27 +++++++++++++++++++ addons/medical_treatment/initSettings.sqf | 11 ++++++++ addons/medical_treatment/stringtable.xml | 18 +++++++++++++ 5 files changed, 58 insertions(+) create mode 100644 addons/medical_treatment/functions/fnc_canTreat_holsterCheck.sqf diff --git a/addons/medical_treatment/XEH_PREP.hpp b/addons/medical_treatment/XEH_PREP.hpp index 7bdd1eff36..7d82ef7c9a 100644 --- a/addons/medical_treatment/XEH_PREP.hpp +++ b/addons/medical_treatment/XEH_PREP.hpp @@ -10,6 +10,7 @@ PREP(canSplint); PREP(canStitch); PREP(canTreat); PREP(canTreatCached); +PREP(canTreat_holsterCheck); PREP(checkBloodPressure); PREP(checkBloodPressureLocal); PREP(checkItems); diff --git a/addons/medical_treatment/functions/fnc_canTreat.sqf b/addons/medical_treatment/functions/fnc_canTreat.sqf index d8905626c9..938e8a356d 100644 --- a/addons/medical_treatment/functions/fnc_canTreat.sqf +++ b/addons/medical_treatment/functions/fnc_canTreat.sqf @@ -26,6 +26,7 @@ isClass _config && {_patient isKindOf "CAManBase"} && {_medic != _patient || {GET_NUMBER_ENTRY(_config >> "allowSelfTreatment") == 1}} && {[_medic, GET_NUMBER_ENTRY(_config >> "medicRequired")] call FUNC(isMedic)} +&& {[_medic, _patient, _config] call FUNC(canTreat_holsterCheck)} && { private _selections = getArray (_config >> "allowedSelections") apply {toLower _x}; "all" in _selections || {_bodyPart in _selections} diff --git a/addons/medical_treatment/functions/fnc_canTreat_holsterCheck.sqf b/addons/medical_treatment/functions/fnc_canTreat_holsterCheck.sqf new file mode 100644 index 0000000000..96f498c258 --- /dev/null +++ b/addons/medical_treatment/functions/fnc_canTreat_holsterCheck.sqf @@ -0,0 +1,27 @@ +#include "script_component.hpp" +/* + * Author: ddm999 + * Handle holster settings [disabled, lowered, loweredExam, holster, holsterExam] + * + * Arguments: + * 0: Medic + * 1: Patient + * 2: Treatment Config + * + * Return Value: + * Can Treat + * + * Example: + * [player, cursorObject, cfg] call ace_medical_treatment_fnc_canTreat_holsterCheck + * + * Public: No + */ + +params ["_medic", "_patient", "_config"]; + +GVAR(holsterRequired) == 0 +|| {vehicle _medic != _medic} // medic is in a vehicle, so weapon is considered holstered +|| {vehicle _patient != _patient} // patient is in a vehicle, ^ +|| {(GVAR(holsterRequired) in [2,4]) && {getText (_config >> "category") == "examine"}} // if examine bypass is on +|| {currentWeapon _medic isEqualTo ""} // weapon is holstered +|| {(GVAR(holsterRequired) <= 2) && {weaponLowered _medic}} // if just lowered is allowed diff --git a/addons/medical_treatment/initSettings.sqf b/addons/medical_treatment/initSettings.sqf index 3da65f8816..f2956877f2 100644 --- a/addons/medical_treatment/initSettings.sqf +++ b/addons/medical_treatment/initSettings.sqf @@ -200,3 +200,14 @@ [-1, 3600, 600, 0], true ] call CBA_settings_fnc_init; + +[ + QGVAR(holsterRequired), + "LIST", + [LSTRING(HolsterRequired_DisplayName), LSTRING(HolsterRequired_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory_Treatment)], + [[0, 1, 2, 3, 4], [ELSTRING(common,Disabled), LSTRING(HolsterRequired_Lowered), LSTRING(HolsterRequired_LoweredExam), LSTRING(HolsterRequired_Holstered), LSTRING(HolsterRequired_HolsteredExam)], 0], + true +] call CBA_settings_fnc_init; + + diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 61bdd5a784..a4c75679e6 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -426,6 +426,24 @@ Техника и госпитали Veículos e Instalações Médicas + + Holster Required + + + Controls whether weapons must be holstered / lowered in order to perform medical actions.\nExcept Exam - Allows examination actions (checking pulse, blood pressure, response) at all times regardless of Holster Required setting. + + + Lowered or Holstered + + + Lowered or Holstered (Except Exam) + + + Holstered only + + + Holstered only (Except Exam) + [ACE] Medical Supply Crate (Basic) [ACE] Ящик с медикаментами (базовая медицина)