From 374a5b632f2b7e392b1bbfcf5025b978438ce774 Mon Sep 17 00:00:00 2001
From: GhostIsSpooky <69561145+Salluci@users.noreply.github.com>
Date: Tue, 12 Oct 2021 05:08:10 -0300
Subject: [PATCH] Medical - Refactor Clear Trauma Setting (#8345)
* Refactor Clear Trauma
Add in setting for clearing trauma after stitching a wound, make clearing trauma after bandage clear trauma of individual wounds as they're bandaged instead of all at once when fully bandaged.
* Make git diff slightly prettier.
* Update fnc_bandageLocal.sqf
* Style pass
* once more for the diff
* fix stupid
* Ddd trauma/visuals on bandage reopening
---
.../functions/fnc_bandageLocal.sqf | 34 +++++++++----------
.../functions/fnc_handleBandageOpening.sqf | 18 ++++++++++
.../functions/fnc_surgicalKitProgress.sqf | 18 +++++++++-
addons/medical_treatment/initSettings.sqf | 8 ++---
addons/medical_treatment/stringtable.xml | 34 ++++++-------------
5 files changed, 66 insertions(+), 46 deletions(-)
diff --git a/addons/medical_treatment/functions/fnc_bandageLocal.sqf b/addons/medical_treatment/functions/fnc_bandageLocal.sqf
index 61f1d695b5..d02ab8f749 100644
--- a/addons/medical_treatment/functions/fnc_bandageLocal.sqf
+++ b/addons/medical_treatment/functions/fnc_bandageLocal.sqf
@@ -55,25 +55,25 @@ if (EGVAR(medical,limping) == 1 && {_partIndex > 3} && {_amountOf <= 0} && {_pat
[_patient] call EFUNC(medical_engine,updateDamageEffects);
};
-if (GVAR(clearTraumaAfterBandage)) then {
- TRACE_2("clearTraumaAfterBandage - checking open wounds",_partIndex,_openWounds);
- if ((_openWounds findIf {
- _x params ["", "_xBodyPartN", "_xAmountOf"];
- (_partIndex ==_xBodyPartN) && {_xAmountOf > 0}
- }) == -1) then {
-
- private _bodyPartDamage = _patient getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+if (GVAR(clearTrauma) == 2) then {
+ TRACE_2("clearTrauma - clearing trauma after bandage",_partIndex,_openWounds);
+ private _treatedDamageOf = (_wound select 4) * _impact;
+ private _bodyPartDamage = _patient getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+ private _newDam = (_bodyPartDamage select _partIndex) - _treatedDamageOf;
+ if (_newDam < 0.05) then { // Prevent obscenely small damage from lack of floating precision
_bodyPartDamage set [_partIndex, 0];
- _patient setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true];
- TRACE_2("fully healed",_partIndex,_bodyPartDamage);
+ } else {
+ _bodyPartDamage set [_partIndex, _newDam];
+ };
+ _patient setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true];
+ TRACE_2("clearTrauma - healed damage",_partIndex,_treatedDamageOf);
- switch (_partIndex) 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); };
- };
+ switch (_partIndex) 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); };
};
};
diff --git a/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf b/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf
index daa8b5f2ef..31affbb311 100644
--- a/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf
+++ b/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf
@@ -118,6 +118,24 @@ if (random 1 <= _reopeningChance * GVAR(woundReopenChance)) then {
[_target] call EFUNC(medical_status,updateWoundBloodLoss);
+ // Re-add trauma and damage visuals
+ if (GVAR(clearTrauma) == 2) then {
+ private _injuryDamage = (_selectedInjury select 4) * _impact;
+ private _bodyPartDamage = _target getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+ private _newDam = (_bodyPartDamage select _selBodyPart) + _injuryDamage;
+ _bodyPartDamage set [_selBodyPart, _newDam];
+
+ _target setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true];
+
+ switch (_selBodyPart) do {
+ case 0: { [_target, true, false, false, false] call EFUNC(medical_engine,updateBodyPartVisuals); };
+ case 1: { [_target, false, true, false, false] call EFUNC(medical_engine,updateBodyPartVisuals); };
+ case 2;
+ case 3: { [_target, false, false, true, false] call EFUNC(medical_engine,updateBodyPartVisuals); };
+ default { [_target, false, false, false, true] call EFUNC(medical_engine,updateBodyPartVisuals); };
+ };
+ };
+
// Check if we gained limping from this wound re-opening
if ((EGVAR(medical,limping) == 1) && {_bodyPartN > 3}) then {
[_target] call EFUNC(medical_engine,updateDamageEffects);
diff --git a/addons/medical_treatment/functions/fnc_surgicalKitProgress.sqf b/addons/medical_treatment/functions/fnc_surgicalKitProgress.sqf
index 14e11df259..9928936f30 100644
--- a/addons/medical_treatment/functions/fnc_surgicalKitProgress.sqf
+++ b/addons/medical_treatment/functions/fnc_surgicalKitProgress.sqf
@@ -35,7 +35,7 @@ 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"];
+_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 {
@@ -51,6 +51,22 @@ if (_woundIndex == -1) then {
_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];
diff --git a/addons/medical_treatment/initSettings.sqf b/addons/medical_treatment/initSettings.sqf
index e529f871bd..c101390afe 100644
--- a/addons/medical_treatment/initSettings.sqf
+++ b/addons/medical_treatment/initSettings.sqf
@@ -35,11 +35,11 @@
] call CBA_fnc_addSetting;
[
- QGVAR(clearTraumaAfterBandage),
- "CHECKBOX",
- [LSTRING(ClearTraumaAfterBandage_DisplayName), LSTRING(ClearTraumaAfterBandage_Description)],
+ QGVAR(clearTrauma),
+ "LIST",
+ [LSTRING(ClearTrauma_DisplayName), LSTRING(ClearTrauma_Description)],
[ELSTRING(medical,Category), LSTRING(SubCategory_Treatment)],
- false,
+ [[0, 1, 2], [ELSTRING(common,Never), LSTRING(ClearTrauma_AfterStitch), LSTRING(ClearTrauma_AfterBandage)], 1],
true
] call CBA_fnc_addSetting;
diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml
index ebae37a243..64b614a79f 100644
--- a/addons/medical_treatment/stringtable.xml
+++ b/addons/medical_treatment/stringtable.xml
@@ -150,31 +150,17 @@
Yaranın yeniden açılma şansını kontrol etme katsayısı. Son yeniden açılma şansı, bu değerin kullanılan yara tipi ve bandaj için spesifik yeniden açılma şansı ile çarpılmasıyla belirlenir.
Coeficiente que controla la probabilidad de reapertura de heridas. La probabilidad final de reapertura de heridas queda determinada multiplicando este valor por la probabilidad específica del tipo de herida y venda usada.
-
- Clear Trauma After Bandage
- 治療後に外傷を削除
- 包紮即痊癒
- Guérir les blessures pansées
- Odebrat úraz po obvázání
- Usuń uraz po zabandażowaniu
- Rimozione ferite bendate
- Entferne Trauma nach Bandagierung.
- Удалять травму после перевязки
- Bandaj Sonrası Travmayı Temizle
- Quitar trauma despues de vendaje
+
+ Clear Trauma
-
- Controls whether fully bandaged body parts are healed.
- 全ての傷に対して包帯を巻いた部分を治癒するかどうかを決定します。
- Kontroluje czy w pełni zabandażowane części ciała są uleczone.
- Définit s'il faut guérir les parties du corps entièrement bandées.
- Controlla se le parti del corpo completamente bendate sono guarite.
- Kontrolliert, ob voll bandagierte Körperteile geheilt werden.
- 控制說當傷口處理好的時候是否直接痊癒。
- Nastavuje zda jsou plně obvázané části těla vyléčena.
- Контролирует то, что полностью перевязанные раны целиком исцеляют часть тела.
- Tamamen sargılı vücut kısımlarının iyileşip iyileşmediğini kontrol eder.
- Controla si las partes del cuerpo completamente vendadas se curan.
+
+ Controls when hitpoint damage from wounds is healed.
+
+
+ After Bandage
+
+
+ After Stitch
Locations Boost Training