diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 558982d9c6..d9899e313c 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -17,15 +17,6 @@ 受伤 受傷 - - Lost some blood - - - Lost a lot of blood - - - Lost a large amount of blood - ACE Medical ACE: медицина diff --git a/addons/medical_engine/script_macros_medical.hpp b/addons/medical_engine/script_macros_medical.hpp index 67553e6400..c232531e7d 100644 --- a/addons/medical_engine/script_macros_medical.hpp +++ b/addons/medical_engine/script_macros_medical.hpp @@ -28,7 +28,7 @@ #define BLOOD_VOLUME_CLASS_2_HEMORRHAGE 5.100 // lost more than 15% blood, Class II Hemorrhage #define BLOOD_VOLUME_CLASS_3_HEMORRHAGE 4.200 // lost more than 30% blood, Class III Hemorrhage #define BLOOD_VOLUME_CLASS_4_HEMORRHAGE 3.600 // lost more than 40% blood, Class IV Hemorrhage -#define BLOOD_VOLUME_FATAL 3.0 // Lost more than 50% blood, Fatal +#define BLOOD_VOLUME_FATAL 3.0 // Lost more than 50% blood, Unrecoverable // IV Change per second calculation: // 250 ml should take 60 seconds to fill. 250 ml / 60 s ~ 4.1667 ml/s. diff --git a/addons/medical_gui/functions/fnc_displayPatientInformation.sqf b/addons/medical_gui/functions/fnc_displayPatientInformation.sqf index faf6cb9ce3..643f6c0a94 100644 --- a/addons/medical_gui/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical_gui/functions/fnc_displayPatientInformation.sqf @@ -59,19 +59,20 @@ if (_show == 1) then { // Show more information if advancedDiagnose is enabled if (EGVAR(medical,advancedDiagnose)) then { switch (GET_HEMORRHAGE(_target)) do { - case 1: { - _genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood2), [1, 0.1, 0.1, 1]]; - }; + case 1; case 2: { - _genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood3), [1, 0.1, 0.1, 1]]; + _genericMessages pushBack [LLSTRING(Lost_Blood2), [1, 0.1, 0.1, 1]]; }; case 3: { - _genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood4), [1, 0.1, 0.1, 1]]; + _genericMessages pushBack [LLSTRING(Lost_Blood3), [1, 0.1, 0.1, 1]]; + }; + case 4: { + _genericMessages pushBack [LLSTRING(Lost_Blood4), [1, 0.1, 0.1, 1]]; }; }; } else { - if (GET_HEMORRHAGE(_target) > 1) then { - _genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood), [1, 0.1, 0.1, 1]]; + if (GET_HEMORRHAGE(_target) > 0) then { + _genericMessages pushBack [LLSTRING(Lost_Blood1), [1, 0.1, 0.1, 1]]; }; }; diff --git a/addons/medical_gui/functions/fnc_updateUIInfo.sqf b/addons/medical_gui/functions/fnc_updateUIInfo.sqf index bc150c06ee..3b88abf5b9 100644 --- a/addons/medical_gui/functions/fnc_updateUIInfo.sqf +++ b/addons/medical_gui/functions/fnc_updateUIInfo.sqf @@ -34,19 +34,20 @@ if IS_BLEEDING(_target) then { // Show more information if advancedDiagnose is enabled if (EGVAR(medical,advancedDiagnose)) then { switch (GET_HEMORRHAGE(_target)) do { - case 1: { - _genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood2), [1, 0.1, 0.1, 1]]; - }; + case 1; case 2: { - _genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood3), [1, 0.1, 0.1, 1]]; + _genericMessages pushBack [LLSTRING(Lost_Blood2), [1, 0.1, 0.1, 1]]; }; case 3: { - _genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood4), [1, 0.1, 0.1, 1]]; + _genericMessages pushBack [LLSTRING(Lost_Blood3), [1, 0.1, 0.1, 1]]; + }; + case 4: { + _genericMessages pushBack [LLSTRING(Lost_Blood4), [1, 0.1, 0.1, 1]]; }; }; } else { - if (GET_HEMORRHAGE(_target) > 1) then { - _genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood), [1, 0.1, 0.1, 1]]; + if (GET_HEMORRHAGE(_target) > 0) then { + _genericMessages pushBack [LLSTRING(Lost_Blood1), [1, 0.1, 0.1, 1]]; }; }; diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 3b0451a64c..9ec190173e 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -844,6 +844,34 @@ 大量失血 大量失血 + + + Lost a lot of Blood + Hat eine große Menge Blut verloren + Большая кровопотеря + Mucha sangre perdida + A perdu beaucoup de sang + Stracił dużo krwi + Ztratil hodně krve + Sok vért vesztett + Ha perso parecchio sangue + Perdeu muito sangue + 大量失血している + 많은 양의 혈액을 잃음 + 大量失血中 + 大量失血中 + + + Lost some blood + + + Lost a lot of blood + + + Lost a large amount of blood + Tourniquet [CAT] Tourniquet [CAT] diff --git a/addons/medical_statemachine/Statemachine.hpp b/addons/medical_statemachine/Statemachine.hpp index c3c7d9c490..f9b7d6c0df 100644 --- a/addons/medical_statemachine/Statemachine.hpp +++ b/addons/medical_statemachine/Statemachine.hpp @@ -16,7 +16,7 @@ class ACE_Medical_StateMachine { }; class FatalVitals { targetState = "CardiacArrest"; - events[] = {QEGVAR(medical,FatalVitals)}; + events[] = {QEGVAR(medical,FatalVitals), QEGVAR(medical,Bleedout)}; }; class FatalInjury { targetState = "FatalInjury"; @@ -35,7 +35,7 @@ class ACE_Medical_StateMachine { }; class FatalVitals { targetState = "CardiacArrest"; - events[] = {QEGVAR(medical,FatalVitals)}; + events[] = {QEGVAR(medical,FatalVitals), QEGVAR(medical,Bleedout)}; }; class FatalInjury { targetState = "FatalInjury"; @@ -57,7 +57,7 @@ class ACE_Medical_StateMachine { }; class FatalTransitions { targetState = "CardiacArrest"; - events[] = {QEGVAR(medical,FatalVitals)}; + events[] = {QEGVAR(medical,FatalVitals), QEGVAR(medical,Bleedout)}; }; class FatalInjury { targetState = "FatalInjury"; @@ -105,6 +105,10 @@ class ACE_Medical_StateMachine { condition = QFUNC(conditionExecutionDeath); events[] = {QEGVAR(medical,FatalInjury)}; }; + class Bleedout { + targetState = "Dead"; + events[] = {QEGVAR(medical,Bleedout)}; + }; }; class Dead { // When the unit is killed it's no longer handled by the statemachine diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index c46bde7685..1d9d7ae8bb 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -2113,22 +2113,6 @@ In severe pain Hat starke Schmerzen - - Lost a lot of Blood - Hat eine große Menge Blut verloren - Большая кровопотеря - Mucha sangre perdida - A perdu beaucoup de sang - Stracił dużo krwi - Ztratil hodně krve - Sok vért vesztett - Ha perso parecchio sangue - Perdeu muito sangue - 大量失血している - 많은 양의 혈액을 잃음 - 大量失血中 - 大量失血中 - Tourniquet [CAT] Tourniquet [CAT] diff --git a/addons/medical_vitals/functions/fnc_handleUnitVitals.sqf b/addons/medical_vitals/functions/fnc_handleUnitVitals.sqf index 6ba8549621..4fafbfb9aa 100644 --- a/addons/medical_vitals/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical_vitals/functions/fnc_handleUnitVitals.sqf @@ -40,9 +40,9 @@ _unit setVariable [VAR_BLOOD_VOL, _bloodVolume, _syncValues]; // Set variables for synchronizing information across the net private _hemorrhage = switch (true) do { - case (_bloodVolume < BLOOD_VOLUME_CLASS_4_HEMORRHAGE): { 3 }; - case (_bloodVolume < BLOOD_VOLUME_CLASS_3_HEMORRHAGE): { 2 }; - case (_bloodVolume < BLOOD_VOLUME_CLASS_2_HEMORRHAGE): { 1 }; + case (_bloodVolume < BLOOD_VOLUME_CLASS_4_HEMORRHAGE): { 4 }; + case (_bloodVolume < BLOOD_VOLUME_CLASS_3_HEMORRHAGE): { 3 }; + case (_bloodVolume < BLOOD_VOLUME_CLASS_2_HEMORRHAGE): { 2 }; case (_bloodVolume < BLOOD_VOLUME_CLASS_1_HEMORRHAGE): { 1 }; default {0}; }; @@ -89,9 +89,14 @@ _bloodPressure params ["_bloodPressureL", "_bloodPressureH"]; private _cardiacOutput = [_unit] call EFUNC(medical_status,getCardiacOutput); +// Most lethal events need to be checked first here switch (true) do { case (_bloodVolume < BLOOD_VOLUME_FATAL): { TRACE_3("BloodVolume Fatal",_unit,BLOOD_VOLUME_FATAL,_bloodVolume); + [QEGVAR(medical,Bleedout), _unit] call CBA_fnc_localEvent; + }; + case (_hemorrhage == 4): { + TRACE_3("Class IV Hemorrhage",_unit,_hemorrhage,_bloodVolume); [QEGVAR(medical,FatalVitals), _unit] call CBA_fnc_localEvent; }; case (_heartRate < 20 || {_heartRate > 220}): {