Change split medical in two components

- medical component is responsible for the injuries and common functionality
- medical_treatment component is responsible for offering treatment functionality
This commit is contained in:
Glowbal 2016-06-13 17:00:56 +02:00
parent 295ad3b037
commit a8831a0d16
81 changed files with 3126 additions and 1799 deletions

File diff suppressed because it is too large Load Diff

View File

@ -515,55 +515,6 @@ class CfgVehicles {
class HitPoints {
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_DEFAULT,ARM_LEG_ARMOR_DEFAULT)
};
class ACE_SelfActions {
#include "ACE_Medical_SelfActions.hpp"
};
class ACE_Actions {
// Include actions in body parts for treatment while in the open
#define EXCEPTIONS exceptions[] = {};
#define ACTION_CONDITION condition = QUOTE(GVAR(menuTypeStyle) == 0);
#include "ACE_Medical_Actions.hpp"
// Create a consolidates medical menu for treatment while boarded
class ACE_MainActions {
class Medical {
displayName = CSTRING(Actions_Medical);
runOnHover = 1;
exceptions[] = {"isNotInside"};
condition = QUOTE((vehicle _target != _target && vehicle _target == vehicle _player) || GVAR(menuTypeStyle) == 1);
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
icon = QPATHTOF(UI\icons\medical_cross.paa);
#undef EXCEPTIONS
#undef ACTION_CONDITION
#define EXCEPTIONS exceptions[] = {"isNotInside"};
#define ACTION_CONDITION condition = "true";
#include "ACE_Medical_Actions.hpp"
};
class GVAR(loadPatient) {
displayName = CSTRING(LoadPatient);
distance = 5;
condition = QUOTE(_target getVariable[ARR_2(QUOTE(QUOTE(ACE_isUnconscious)),false)] && vehicle _target == _target);
statement = QUOTE([ARR_2(_player, _target)] call DFUNC(actionLoadUnit));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\medical_cross.paa);
exceptions[] = {"isNotDragging", "isNotCarrying"};
};
class GVAR(UnLoadPatient) {
displayName = CSTRING(UnloadPatient);
distance = 5;
condition = QUOTE(_target getVariable[ARR_2(QUOTE(QUOTE(ACE_isUnconscious)),false)] && vehicle _target != _target);
statement = QUOTE([ARR_2(_player, _target)] call DFUNC(actionUnloadUnit));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\medical_cross.paa);
exceptions[] = {"isNotDragging", "isNotCarrying", "isNotInside"};
};
};
};
};
class SoldierWB: CAManBase {};

View File

@ -1,19 +1,6 @@
PREP(actionCheckBloodPressure);
PREP(actionCheckBloodPressureLocal);
PREP(actionCheckPulse);
PREP(actionCheckPulseLocal);
PREP(actionCheckResponse);
PREP(actionDiagnose);
PREP(actionPlaceInBodyBag);
PREP(actionRemoveTourniquet);
PREP(actionLoadUnit);
PREP(actionUnloadUnit);
PREP(addDamageToUnit);
PREP(addHeartRateAdjustment);
PREP(addToInjuredCollection);
PREP(addToLog);
PREP(addToTriageCard);
PREP(addUnconsciousCondition);
PREP(addUnloadPatientActions);
PREP(addVitalLoop);
@ -44,8 +31,6 @@ PREP(handleUnitVitals);
PREP(handleKilled);
PREP(handleLocal);
PREP(handleBandageOpening);
PREP(hasItem);
PREP(hasItems);
PREP(hasMedicalEnabled);
PREP(hasTourniquetAppliedTo);
PREP(init);
@ -59,7 +44,6 @@ PREP(isInStableCondition);
PREP(itemCheck);
PREP(medicationEffectLoop);
PREP(modifyMedicalAction);
PREP(onMedicationUsage);
PREP(parseConfigForInjuries);
PREP(playInjuredSound);
PREP(reviveStateLoop);
@ -75,27 +59,6 @@ PREP(translateSelections);
PREP(treatment);
PREP(treatment_failure);
PREP(treatment_success);
PREP(treatmentAdvanced_bandage);
PREP(treatmentAdvanced_bandageLocal);
PREP(treatmentAdvanced_CPR);
PREP(treatmentAdvanced_CPRLocal);
PREP(treatmentAdvanced_fullHeal);
PREP(treatmentAdvanced_fullHealLocal);
PREP(treatmentAdvanced_fullHealTreatmentTime);
PREP(treatmentAdvanced_medication);
PREP(treatmentAdvanced_medicationLocal);
PREP(treatmentAdvanced_surgicalKit_onProgress);
PREP(treatmentBasic_bloodbag);
PREP(treatmentBasic_bloodbagLocal);
PREP(treatmentBasic_epipen);
PREP(treatmentBasic_morphine);
PREP(treatmentBasic_morphineLocal);
PREP(treatmentIV);
PREP(treatmentIVLocal);
PREP(treatmentTourniquet);
PREP(treatmentTourniquetLocal);
PREP(useItem);
PREP(useItems);
PREP(vitalLoop);
PREP(displayPatientInformation);
PREP(displayTriageCard);

View File

@ -9,26 +9,10 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"];
["ace_interactMenuClosed", {[objNull, false] call FUNC(displayPatientInformation); }] call CBA_fnc_addEventHandler;
//Treatment EventHandlers:
[QGVAR(actionCheckBloodPressureLocal), DFUNC(actionCheckBloodPressureLocal)] call CBA_fnc_addEventHandler;
[QGVAR(actionCheckPulseLocal), DFUNC(actionCheckPulseLocal)] call CBA_fnc_addEventHandler;
[QGVAR(addVitalLoop), DFUNC(addVitalLoop)] call CBA_fnc_addEventHandler;
[QGVAR(addToMedicalLog), DFUNC(addToLog)] call CBA_fnc_addEventHandler;
[QGVAR(addToTriageCard), DFUNC(addToTriageCard)] call CBA_fnc_addEventHandler;
[QGVAR(setDead), DFUNC(setDead)] call CBA_fnc_addEventHandler;
[QGVAR(setHitPointDamage), DFUNC(setHitPointDamage)] call CBA_fnc_addEventHandler;
[QGVAR(setUnconscious), DFUNC(setUnconscious)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentAdvanced_bandageLocal), DFUNC(treatmentAdvanced_bandageLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentAdvanced_CPRLocal), DFUNC(treatmentAdvanced_CPRLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentAdvanced_fullHealLocal), DFUNC(treatmentAdvanced_fullHealLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentAdvanced_medicationLocal), DFUNC(treatmentAdvanced_medicationLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentBasic_bloodbagLocal), DFUNC(treatmentBasic_bloodbagLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentBasic_morphineLocal), DFUNC(treatmentBasic_morphineLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentIVLocal), DFUNC(treatmentIVLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentTourniquetLocal), DFUNC(treatmentTourniquetLocal)] call CBA_fnc_addEventHandler;
[QGVAR(actionPlaceInBodyBag), FUNC(actionPlaceInBodyBag)] call CBA_fnc_addEventHandler;
//Handle Deleting Bodies on Server:
if (isServer) then {["ace_placedInBodyBag", FUNC(serverRemoveBody)] call CBA_fnc_addEventHandler;};
["ace_unconscious", {
params ["_unit", "_status"];

View File

@ -28,28 +28,11 @@ class CfgPatches {
class ACE_newEvents {
medical_onUnconscious = "ace_unconscious";
medical_treatmentSuccess = "ace_treatmentSuccess";
medical_onSetDead = "ace_killed";
Medical_onEnteredCardiacArrest = "ace_enteredCardiacArrest";
Medical_onItemAddedToTriageCard = "ace_itemAddedToTriageCard";
medical_onLogEntryAdded = "ace_medicalLogEntryAdded";
Medical_onHeartRateAdjustmentAdded = "ace_addedHeartRateAdjustment";
placedInBodyBag = "ace_placedInBodyBag";
actionPlaceInBodyBag = QGVAR(actionPlaceInBodyBag);
treatmentTourniquetLocal = QGVAR(treatmentTourniquetLocal);
treatmentIVLocal = QGVAR(treatmentIVLocal);
treatmentBasic_morphineLocal = QGVAR(treatmentBasic_morphineLocal);
treatmentBasic_bloodbagLocal = QGVAR(treatmentBasic_bloodbagLocal);
treatmentAdvanced_medicationLocal = QGVAR(treatmentAdvanced_medicationLocal);
treatmentAdvanced_fullHealLocal = QGVAR(treatmentAdvanced_fullHealLocal);
treatmentAdvanced_CPRLocal = QGVAR(treatmentAdvanced_CPRLocal);
treatmentAdvanced_bandageLocal = QGVAR(treatmentAdvanced_bandageLocal);
setUnconscious = QGVAR(setUnconscious);
setHitPointDamage = QGVAR(setHitPointDamage);
setDead = QGVAR(setDead);
addToTriageCard = QGVAR(addToTriageCard);
addToMedicalLog = QGVAR(addToMedicalLog);
actionCheckPulseLocal = QGVAR(actionCheckPulseLocal);
actionCheckBloodPressureLocal = QGVAR(actionCheckBloodPressureLocal);
addVitalLoop = QGVAR(addVitalLoop);
};

View File

@ -1,64 +0,0 @@
/*
* Author: Glowbal
* Local callback for checking the blood pressure of a patient
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_caller", "_target", "_selectionName"];
private _bloodPressure = if (!alive _target) then {
[0,0]
} else {
[_target] call FUNC(getBloodPressure)
};
_bloodPressure params [ "_bloodPressureLow", "_bloodPressureHigh"];
private _output = "";
private _logOutPut = "";
if ([_caller] call FUNC(isMedic)) then {
_output = LSTRING(Check_Bloodpressure_Output_1);
_logOutPut = format["%1/%2",round(_bloodPressureHigh),round(_bloodPressureLow)];
} else {
if (_bloodPressureHigh > 20) then {
_output = LSTRING(Check_Bloodpressure_Output_2);
_logOutPut = LSTRING(Check_Bloodpressure_Low);
if (_bloodPressureHigh > 100) then {
_output = LSTRING(Check_Bloodpressure_Output_3);
_logOutPut = LSTRING(Check_Bloodpressure_Normal);
if (_bloodPressureHigh > 160) then {
_output = LSTRING(Check_Bloodpressure_Output_4);
_logOutPut = LSTRING(Check_Bloodpressure_High);
};
};
} else {
if (random(10) > 3) then {
_output = LSTRING(Check_Bloodpressure_Output_5);
_logOutPut = LSTRING(Check_Bloodpressure_NoBloodpressure);
} else {
_output = LSTRING(Check_Bloodpressure_Output_6);
//Fail to find pressure, no logoutput
};
};
};
if (_selectionName in ["hand_l","hand_r"] && {[_unit, _selectionName] call FUNC(hasTourniquetAppliedTo)}) then {
_output = LSTRING(Check_Bloodpressure_Output_6);
_logOutPut = "";
};
[QEGVAR(common,displayTextStructured), [[_output, [_target] call EFUNC(common,getName), round(_bloodPressureHigh),round(_bloodPressureLow)], 1.75, _caller], [_caller]] call CBA_fnc_targetEvent;
if (_logOutPut != "") then {
[_target,"activity", LSTRING(Check_Bloodpressure_Log), [[_caller, false, true] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog);
[_target,"quick_view", LSTRING(Check_Bloodpressure_Log), [[_caller, false, true] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog);
};

View File

@ -1,56 +0,0 @@
/*
* Author: Glowbal
* Local callback for checking the pulse of a patient
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_caller", "_unit", "_selectionName"];
private _heartRate = _unit getVariable [QGVAR(heartRate), 80];
if (!alive _unit) then {
_heartRate = 0;
};
private _heartRateOutput = LSTRING(Check_Pulse_Output_5);
private _logOutPut = LSTRING(Check_Pulse_None);
if (_heartRate > 1.0) then {
if ([_caller] call FUNC(isMedic)) then {
_heartRateOutput = LSTRING(Check_Pulse_Output_1);
_logOutPut = format["%1",round(_heartRate)];
} else {
// non medical personel will only find a pulse/HR
_heartRateOutput = LSTRING(Check_Pulse_Output_2);
_logOutPut = LSTRING(Check_Pulse_Weak);
if (_heartRate > 60) then {
if (_heartRate > 100) then {
_heartRateOutput = LSTRING(Check_Pulse_Output_3);
_logOutPut = LSTRING(Check_Pulse_Strong);
} else {
_heartRateOutput = LSTRING(Check_Pulse_Output_4);
_logOutPut = LSTRING(Check_Pulse_Normal);
};
};
};
};
if (_selectionName in ["hand_l","hand_r"] && {[_unit, _selectionName] call FUNC(hasTourniquetAppliedTo)}) then {
_heartRateOutput = LSTRING(Check_Pulse_Output_5);
_logOutPut = LSTRING(Check_Pulse_None);
};
[QEGVAR(common,displayTextStructured), [[_heartRateOutput, [_unit] call EFUNC(common,getName), round(_heartRate)], 1.5, _caller], [_caller]] call CBA_fnc_targetEvent;
if (_logOutPut != "") then {
[_unit,"activity", LSTRING(Check_Pulse_Log),[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog);
[_unit,"quick_view", LSTRING(Check_Pulse_Log),[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog);
};

View File

@ -1,46 +0,0 @@
/*
* Author: Glowbal
* Action for diagnosing in basic medical
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
private "_genericMessages";
params ["_caller", "_target"];
private _genericMessages = [LSTRING(diagnoseMessage), [_target] call EFUNC(common,getName)];
if (alive _target) then {
_genericMessages pushBack LSTRING(diagnoseAlive);
} else {
_genericMessages pushBack LSTRING(diagnoseDead);
};
if (_target getVariable[QGVAR(hasLostBlood), 0] > 0) then {
if (_target getVariable[QGVAR(hasLostBlood), 0] > 1) then {
_genericMessages pushBack LSTRING(lostBloodALot);
} else {
_genericMessages pushBack LSTRING(lostBlood);
};
} else {
_genericMessages pushBack LSTRING(noBloodloss);
};
if (alive _target) then {
if (_target getVariable[QGVAR(hasPain), false]) then {
_genericMessages pushBack LSTRING(inPain);
} else {
_genericMessages pushBack LSTRING(noPain);
};
};
[QEGVAR(common,displayTextStructured), [_genericMessages, 3.0, _caller], [_caller]] call CBA_fnc_targetEvent;

View File

@ -1,35 +0,0 @@
/*
* Author: Glowbal
* local Callback for the CPR treatment action on success.
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* Succesful treatment started <BOOL>
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_caller","_target"];
if (_target getVariable [QGVAR(inReviveState), false]) then {
private _reviveStartTime = _target getVariable [QGVAR(reviveStartTime),0];
if (_reviveStartTime > 0) then {
_target setVariable [QGVAR(reviveStartTime), (_reviveStartTime + random(20)) min CBA_missionTime];
};
};
if (GVAR(level) > 1 && {(random 1) >= 0.6}) then {
_target setVariable [QGVAR(inCardiacArrest), nil,true];
_target setVariable [QGVAR(heartRate), 40];
_target setVariable [QGVAR(bloodPressure), [50,70]];
};
[_target, "activity", LSTRING(Activity_CPR), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_CPR), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
true;

View File

@ -1,72 +0,0 @@
/**
* fn_healLocal.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
#include "script_component.hpp"
params ["_caller", "_target"];
if (alive _target) exitWith {
_target setVariable [QGVAR(pain), 0, true];
_target setVariable [QGVAR(morphine), 0, true];
_target setVariable [QGVAR(bloodVolume), 100, true];
// tourniquets
_target setVariable [QGVAR(tourniquets), [0,0,0,0,0,0], true];
// wounds and injuries
_target setVariable [QGVAR(openWounds), [], true];
_target setVariable [QGVAR(bandagedWounds), [], true];
_target setVariable [QGVAR(internalWounds), [], true];
// vitals
_target setVariable [QGVAR(heartRate), 80];
_target setVariable [QGVAR(heartRateAdjustments), []];
_target setVariable [QGVAR(bloodPressure), [80, 120]];
_target setVariable [QGVAR(peripheralResistance), 100];
// fractures
_target setVariable [QGVAR(fractures), []];
// IVs
_target setVariable [QGVAR(salineIVVolume), 0];
_target setVariable [QGVAR(plasmaIVVolume), 0];
_target setVariable [QGVAR(bloodIVVolume), 0];
// damage storage
_target setVariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0], true];
// airway
_target setVariable [QGVAR(airwayStatus), 100, true];
_target setVariable [QGVAR(airwayOccluded), false, true];
_target setVariable [QGVAR(airwayCollapsed), false, true];
// generic medical admin
_target setVariable [QGVAR(addedToUnitLoop), false, true];
_target setVariable [QGVAR(inCardiacArrest), false, true];
_target setVariable [QGVAR(inReviveState), false, true];
_target setVariable ["ACE_isUnconscious", false, true];
_target setVariable [QGVAR(hasLostBlood), 0, true];
_target setVariable [QGVAR(isBleeding), false, true];
_target setVariable [QGVAR(hasPain), false, true];
_target setVariable [QGVAR(painSuppress), 0, true];
// medication
private _allUsedMedication = _target getVariable [QGVAR(allUsedMedication), []];
{
_target setVariable [_x select 0, nil];
} forEach _allUsedMedication;
// Resetting damage
_target setDamage 0;
[_target, "activity", LSTRING(Activity_fullHeal), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_fullHeal), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
};

View File

@ -5,7 +5,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_medical"};
requiredAddons[] = {"ace_medical_treatment"};
author = ECSTRING(common,ACETeam);
authors[] = {"Glowbal"};
url = ECSTRING(main,URL);

View File

@ -0,0 +1 @@
z\ace\addons\medical_treatment

View File

@ -1,92 +1,92 @@
class ACE_Head {
displayName = CSTRING(Head);
displayName = ECSTRING(medical,Head);
runOnHover = 1;
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
ACTION_CONDITION
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
EXCEPTIONS
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class CheckPulse: fieldDressing {
displayName = CSTRING(Actions_CheckPulse);
displayName = ECSTRING(medical,Actions_CheckPulse);
condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(treatment));
EXCEPTIONS
icon = "";
};
class CheckBloodPressure: CheckPulse {
displayName = CSTRING(Actions_CheckBloodPressure);
displayName = ECSTRING(medical,Actions_CheckBloodPressure);
condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(treatment));
EXCEPTIONS
};
class CheckResponse: CheckPulse {
displayName = CSTRING(Check_Response);
displayName = ECSTRING(medical,Check_Response);
condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment));
EXCEPTIONS
};
class Diagnose: CheckPulse {
displayName = CSTRING(Actions_Diagnose);
displayName = ECSTRING(medical,Actions_Diagnose);
condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment));
EXCEPTIONS
};
};
class ACE_Torso {
displayName = CSTRING(Torso);
displayName = ECSTRING(medical,Torso);
runOnHover = 1;
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
ACTION_CONDITION
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction));
EXCEPTIONS
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(treatment));
@ -94,10 +94,10 @@ class ACE_Torso {
showDisabled = 1;
priority = 2;
enableInside = 1;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PlaceInBodyBag {
displayName = CSTRING(PlaceInBodyBag);
displayName = ECSTRING(medical,PlaceInBodyBag);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'BodyBag')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'BodyBag')] call DFUNC(treatment));
@ -107,7 +107,7 @@ class ACE_Torso {
enableInside = 1;
};
class TriageCard {
displayName = CSTRING(Actions_TriageCard);
displayName = ECSTRING(medical,Actions_TriageCard);
distance = 2.0;
condition = "true";
statement = QUOTE([ARR_2(_target, true)] call DFUNC(displayTriageCard));
@ -115,10 +115,10 @@ class ACE_Torso {
showDisabled = 1;
priority = 2;
enableInside = 1;
icon = QPATHTOF(UI\icons\triageCard.paa);
icon = QPATHTOEF(medical,UI\icons\triageCard.paa);
};
class Diagnose {
displayName = CSTRING(Actions_Diagnose);
displayName = ECSTRING(medical,Actions_Diagnose);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'Diagnose')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'Diagnose')] call DFUNC(treatment));
@ -130,7 +130,7 @@ class ACE_Torso {
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(treatment));
@ -138,45 +138,45 @@ class ACE_Torso {
showDisabled = 0;
priority = 2;
enableInside = 1;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class SurgicalKit: fieldDressing {
displayName = CSTRING(Use_SurgicalKit);
displayName = ECSTRING(medical,Use_SurgicalKit);
condition = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\surgicalKit.paa);
icon = QPATHTOEF(medical,UI\icons\surgicalKit.paa);
};
class PersonalAidKit: fieldDressing {
displayName = CSTRING(Use_Aid_Kit);
displayName = ECSTRING(medical,Use_Aid_Kit);
condition = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(treatment));
EXCEPTIONS
icon = "";
};
class CPR: fieldDressing {
displayName = CSTRING(Actions_CPR);
displayName = ECSTRING(medical,Actions_CPR);
condition = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(treatment));
EXCEPTIONS
@ -190,157 +190,157 @@ class ACE_ArmLeft {
ACTION_CONDITION
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
EXCEPTIONS
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Actions_Tourniquet);
displayName = ECSTRING(medical,Actions_Tourniquet);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\tourniquet.paa);
icon = QPATHTOEF(medical,UI\icons\tourniquet.paa);
};
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayName = ECSTRING(medical,Inject_Morphine);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Morphine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Morphine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Adenosine: Morphine {
displayName = CSTRING(Inject_Adenosine);
displayName = ECSTRING(medical,Inject_Adenosine);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Adenosine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Adenosine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Atropine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Atropine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Atropine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Epinephrine: Morphine {
displayName = CSTRING(Inject_Epinephrine);
displayName = ECSTRING(medical,Inject_Epinephrine);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Epinephrine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Epinephrine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class BloodIV: fieldDressing {
displayName = CSTRING(Actions_Blood4_1000);
displayName = ECSTRING(medical,Actions_Blood4_1000);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\iv.paa);
icon = QPATHTOEF(medical,UI\icons\iv.paa);
};
class BloodIV_500: BloodIV {
displayName = CSTRING(Actions_Blood4_500);
displayName = ECSTRING(medical,Actions_Blood4_500);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class BloodIV_250: BloodIV {
displayName = CSTRING(Actions_Blood4_250);
displayName = ECSTRING(medical,Actions_Blood4_250);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV: BloodIV {
displayName = CSTRING(Actions_Plasma4_1000);
displayName = ECSTRING(medical,Actions_Plasma4_1000);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV_500: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_500);
displayName = ECSTRING(medical,Actions_Plasma4_500);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV_250: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_250);
displayName = ECSTRING(medical,Actions_Plasma4_250);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV: BloodIV {
displayName = CSTRING(Actions_Saline4_1000);
displayName = ECSTRING(medical,Actions_Saline4_1000);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV_500: SalineIV {
displayName = CSTRING(Actions_Saline4_500);
displayName = ECSTRING(medical,Actions_Saline4_500);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV_250: SalineIV {
displayName = CSTRING(Actions_Saline4_250);
displayName = ECSTRING(medical,Actions_Saline4_250);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class CheckPulse: fieldDressing {
displayName = CSTRING(Actions_CheckPulse);
displayName = ECSTRING(medical,Actions_CheckPulse);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(treatment));
EXCEPTIONS
icon = "";
};
class CheckBloodPressure: CheckPulse {
displayName = CSTRING(Actions_CheckBloodPressure);
displayName = ECSTRING(medical,Actions_CheckBloodPressure);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(treatment));
EXCEPTIONS
};
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
displayName = ECSTRING(medical,Actions_RemoveTourniquet);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(treatment));
EXCEPTIONS
@ -353,154 +353,154 @@ class ACE_ArmRight {
ACTION_CONDITION
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
EXCEPTIONS
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(treatment));
EXCEPTIONS
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(treatment));
EXCEPTIONS
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Actions_Tourniquet);
displayName = ECSTRING(medical,Actions_Tourniquet);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\tourniquet.paa);
icon = QPATHTOEF(medical,UI\icons\tourniquet.paa);
};
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayName = ECSTRING(medical,Inject_Morphine);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Morphine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Morphine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Adenosine: Morphine {
displayName = CSTRING(Inject_Adenosine);
displayName = ECSTRING(medical,Inject_Adenosine);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Adenosine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Adenosine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Atropine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Atropine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Atropine')] call DFUNC(treatment));
EXCEPTIONS
};
class Epinephrine: Morphine {
displayName = CSTRING(Inject_Epinephrine);
displayName = ECSTRING(medical,Inject_Epinephrine);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Epinephrine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Epinephrine')] call DFUNC(treatment));
EXCEPTIONS
};
class BloodIV: fieldDressing {
displayName = CSTRING(Actions_Blood4_1000);
displayName = ECSTRING(medical,Actions_Blood4_1000);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\iv.paa);
icon =QPATHTOEF(medical,UI\icons\iv.paa);
};
class BloodIV_500: BloodIV {
displayName = CSTRING(Actions_Blood4_500);
displayName = ECSTRING(medical,Actions_Blood4_500);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class BloodIV_250: BloodIV {
displayName = CSTRING(Actions_Blood4_250);
displayName = ECSTRING(medical,Actions_Blood4_250);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV: BloodIV {
displayName = CSTRING(Actions_Plasma4_1000);
displayName = ECSTRING(medical,Actions_Plasma4_1000);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV_500: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_500);
displayName = ECSTRING(medical,Actions_Plasma4_500);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV_250: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_250);
displayName = ECSTRING(medical,Actions_Plasma4_250);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV: BloodIV {
displayName = CSTRING(Actions_Saline4_1000);
displayName = ECSTRING(medical,Actions_Saline4_1000);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV_500: SalineIV {
displayName = CSTRING(Actions_Saline4_500);
displayName = ECSTRING(medical,Actions_Saline4_500);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV_250: SalineIV {
displayName = CSTRING(Actions_Saline4_250);
displayName = ECSTRING(medical,Actions_Saline4_250);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class CheckPulse: fieldDressing {
displayName = CSTRING(Actions_CheckPulse);
displayName = ECSTRING(medical,Actions_CheckPulse);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(treatment));
EXCEPTIONS
icon = "";
};
class CheckBloodPressure: CheckPulse {
displayName = CSTRING(Actions_CheckBloodPressure);
displayName = ECSTRING(medical,Actions_CheckBloodPressure);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(treatment));
EXCEPTIONS
};
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
displayName = ECSTRING(medical,Actions_RemoveTourniquet);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(treatment));
EXCEPTIONS
@ -514,142 +514,142 @@ class ACE_LegLeft {
ACTION_CONDITION
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
EXCEPTIONS
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(treatment));
EXCEPTIONS
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(treatment));
EXCEPTIONS
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Actions_Tourniquet);
displayName = ECSTRING(medical,Actions_Tourniquet);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\tourniquet.paa);
icon = QPATHTOEF(medical,UI\icons\tourniquet.paa);
};
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayName = ECSTRING(medical,Inject_Morphine);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Morphine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Morphine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Adenosine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Adenosine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Adenosine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Atropine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Atropine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Atropine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Epinephrine: Morphine {
displayName = CSTRING(Inject_Epinephrine);
displayName = ECSTRING(medical,Inject_Epinephrine);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Epinephrine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Epinephrine')] call DFUNC(treatment));
EXCEPTIONS
};
class BloodIV: fieldDressing {
displayName = CSTRING(Actions_Blood4_1000);
displayName = ECSTRING(medical,Actions_Blood4_1000);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\iv.paa);
icon = QPATHTOEF(medical,UI\icons\iv.paa);
};
class BloodIV_500: BloodIV {
displayName = CSTRING(Actions_Blood4_500);
displayName = ECSTRING(medical,Actions_Blood4_500);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class BloodIV_250: BloodIV {
displayName = CSTRING(Actions_Blood4_250);
displayName = ECSTRING(medical,Actions_Blood4_250);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV: BloodIV {
displayName = CSTRING(Actions_Plasma4_1000);
displayName = ECSTRING(medical,Actions_Plasma4_1000);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV_500: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_500);
displayName = ECSTRING(medical,Actions_Plasma4_500);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV_250: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_250);
displayName = ECSTRING(medical,Actions_Plasma4_250);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV: BloodIV {
displayName = CSTRING(Actions_Saline4_1000);
displayName = ECSTRING(medical,Actions_Saline4_1000);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV_500: SalineIV {
displayName = CSTRING(Actions_Saline4_500);
displayName = ECSTRING(medical,Actions_Saline4_500);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV_250: SalineIV {
displayName = CSTRING(Actions_Saline4_250);
displayName = ECSTRING(medical,Actions_Saline4_250);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
displayName = ECSTRING(medical,Actions_RemoveTourniquet);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(treatment));
EXCEPTIONS
@ -662,141 +662,142 @@ class ACE_LegRight {
ACTION_CONDITION
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
EXCEPTIONS
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(treatment));
EXCEPTIONS
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(treatment));
EXCEPTIONS
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(treatment));
EXCEPTIONS
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Actions_Tourniquet);
displayName = ECSTRING(medical,Actions_Tourniquet);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\tourniquet.paa);
icon = QPATHTOEF(medical,UI\icons\tourniquet.paa);
};
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayName = ECSTRING(medical,Inject_Morphine);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Morphine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Morphine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Adenosine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Adenosine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Adenosine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Atropine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Atropine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Atropine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Epinephrine: Morphine {
displayName = CSTRING(Inject_Epinephrine);
displayName = ECSTRING(medical,Inject_Epinephrine);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Epinephrine')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Epinephrine')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class BloodIV: fieldDressing {
displayName = CSTRING(Actions_Blood4_1000);
displayName = ECSTRING(medical,Actions_Blood4_1000);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(treatment));
EXCEPTIONS
icon = QPATHTOF(UI\icons\iv.paa);
icon = QPATHTOEF(medical,UI\icons\iv.paa);
};
class BloodIV_500: BloodIV {
displayName = CSTRING(Actions_Blood4_500);
displayName = ECSTRING(medical,Actions_Blood4_500);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class BloodIV_250: BloodIV {
displayName = CSTRING(Actions_Blood4_250);
displayName = ECSTRING(medical,Actions_Blood4_250);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV: BloodIV {
displayName = CSTRING(Actions_Plasma4_1000);
displayName = ECSTRING(medical,Actions_Plasma4_1000);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV_500: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_500);
displayName = ECSTRING(medical,Actions_Plasma4_500);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class PlasmaIV_250: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_250);
displayName = ECSTRING(medical,Actions_Plasma4_250);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV: BloodIV {
displayName = CSTRING(Actions_Saline4_1000);
displayName = ECSTRING(medical,Actions_Saline4_1000);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV_500: SalineIV {
displayName = CSTRING(Actions_Saline4_500);
displayName = ECSTRING(medical,Actions_Saline4_500);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_500')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_500')] call DFUNC(treatment));
EXCEPTIONS
};
class SalineIV_250: SalineIV {
displayName = CSTRING(Actions_Saline4_250);
displayName = ECSTRING(medical,Actions_Saline4_250);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_250')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_250')] call DFUNC(treatment));
EXCEPTIONS
};
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
displayName = ECSTRING(medical,Actions_RemoveTourniquet);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(treatment));
EXCEPTIONS

View File

@ -1,14 +1,14 @@
class Medical {
displayName = CSTRING(Actions_Medical);
displayName = ECSTRING(medical,Actions_Medical);
runOnHover = 1;
exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
condition = "true";
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
class ACE_Head {
displayName = CSTRING(Head);
icon = QPATHTOF(UI\icons\medical_cross.paa);
displayName = ECSTRING(medical,Head);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
@ -16,63 +16,63 @@ class Medical {
runOnHover = 1;
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(treatment));
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(treatment));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class CheckPulse: fieldDressing {
displayName = CSTRING(Actions_CheckPulse);
displayName = ECSTRING(medical,Actions_CheckPulse);
condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(treatment));
icon = "";
};
class CheckBloodPressure: CheckPulse {
displayName = CSTRING(Actions_CheckBloodPressure);
displayName = ECSTRING(medical,Actions_CheckBloodPressure);
condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(treatment));
};
};
class ACE_Torso {
displayName = CSTRING(Torso);
displayName = ECSTRING(medical,Torso);
distance = 5.0;
condition = "true";
runOnHover = 1;
@ -81,61 +81,61 @@ class Medical {
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction));
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(treatment));
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class TriageCard {
displayName = CSTRING(Actions_TriageCard);
displayName = ECSTRING(medical,Actions_TriageCard);
distance = 2.0;
condition = "true";
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_2(_target, true)] call DFUNC(displayTriageCard));
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\triageCard.paa);
icon = QPATHTOEF(medical,UI\icons\triageCard.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(treatment));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
};
class ACE_ArmLeft {
@ -145,101 +145,101 @@ class Medical {
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
condition = "true";
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(treatment));
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(treatment));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Actions_Tourniquet);
displayName = ECSTRING(medical,Actions_Tourniquet);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\tourniquet.paa);
icon = QPATHTOEF(medical,UI\icons\tourniquet.paa);
};
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayName = ECSTRING(medical,Inject_Morphine);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Morphine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Morphine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Adenosine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Adenosine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Adenosine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Atropine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Atropine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Atropine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Epinephrine: Morphine {
displayName = CSTRING(Inject_Epinephrine);
displayName = ECSTRING(medical,Inject_Epinephrine);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Epinephrine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Epinephrine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class CheckPulse: fieldDressing {
displayName = CSTRING(Actions_CheckPulse);
displayName = ECSTRING(medical,Actions_CheckPulse);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(treatment));
icon = "";
};
class CheckBloodPressure: CheckPulse {
displayName = CSTRING(Actions_CheckBloodPressure);
displayName = ECSTRING(medical,Actions_CheckBloodPressure);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(treatment));
};
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
displayName = ECSTRING(medical,Actions_RemoveTourniquet);
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(treatment));
@ -252,97 +252,97 @@ class Medical {
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
condition = "true";
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(treatment));
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(treatment));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(treatment));
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(treatment));
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Actions_Tourniquet);
displayName = ECSTRING(medical,Actions_Tourniquet);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\tourniquet.paa);
icon = QPATHTOEF(medical,UI\icons\tourniquet.paa);
};
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayName = ECSTRING(medical,Inject_Morphine);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Morphine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Morphine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Adenosine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Adenosine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Adenosine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Atropine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Atropine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Atropine')] call DFUNC(treatment));
};
class Epinephrine: Morphine {
displayName = CSTRING(Inject_Epinephrine);
displayName = ECSTRING(medical,Inject_Epinephrine);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Epinephrine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Epinephrine')] call DFUNC(treatment));
};
class CheckPulse: fieldDressing {
displayName = CSTRING(Actions_CheckPulse);
displayName = ECSTRING(medical,Actions_CheckPulse);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(treatment));
icon = "";
};
class CheckBloodPressure: CheckPulse {
displayName = CSTRING(Actions_CheckBloodPressure);
displayName = ECSTRING(medical,Actions_CheckBloodPressure);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(treatment));
};
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
displayName = ECSTRING(medical,Actions_RemoveTourniquet);
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(treatment));
@ -355,86 +355,86 @@ class Medical {
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
condition = "true";
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(treatment));
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(treatment));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(treatment));
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(treatment));
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Actions_Tourniquet);
displayName = ECSTRING(medical,Actions_Tourniquet);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\tourniquet.paa);
icon = QPATHTOEF(medical,UI\icons\tourniquet.paa);
};
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayName = ECSTRING(medical,Inject_Morphine);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Morphine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Morphine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Adenosine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Adenosine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Adenosine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Atropine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Atropine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Atropine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Epinephrine: Morphine {
displayName = CSTRING(Inject_Epinephrine);
displayName = ECSTRING(medical,Inject_Epinephrine);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Epinephrine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Epinephrine')] call DFUNC(treatment));
};
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
displayName = ECSTRING(medical,Actions_RemoveTourniquet);
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(treatment));
@ -447,85 +447,85 @@ class Medical {
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
condition = "true";
icon = QPATHTOF(UI\icons\medical_cross.paa);
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
class Bandage {
displayName = CSTRING(Bandage);
displayName = ECSTRING(medical,Bandage);
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(treatment));
showDisabled = 1;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
// Advanced medical
class FieldDressing {
displayName = CSTRING(Actions_FieldDressing);
displayName = ECSTRING(medical,Actions_FieldDressing);
distance = 5.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(treatment));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\icons\bandage.paa);
icon = QPATHTOEF(medical,UI\icons\bandage.paa);
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
displayName = ECSTRING(medical,Actions_PackingBandage);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\packingBandage.paa);
icon = QPATHTOEF(medical,UI\icons\packingBandage.paa);
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
displayName = ECSTRING(medical,Actions_ElasticBandage);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(treatment));
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
displayName = ECSTRING(medical,Actions_QuikClot);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(treatment));
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Actions_Tourniquet);
displayName = ECSTRING(medical,Actions_Tourniquet);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\tourniquet.paa);
icon = QPATHTOEF(medical,UI\icons\tourniquet.paa);
};
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayName = ECSTRING(medical,Inject_Morphine);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Morphine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Morphine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Adenosine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Adenosine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Adenosine')] call DFUNC(treatment));
icon = QPATHTOF(UI\icons\autoInjector.paa);
icon = QPATHTOEF(medical,UI\icons\autoInjector.paa);
};
class Atropine: Morphine {
displayName = CSTRING(Inject_Atropine);
displayName = ECSTRING(medical,Inject_Atropine);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Atropine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Atropine')] call DFUNC(treatment));
};
class Epinephrine: Morphine {
displayName = CSTRING(Inject_Epinephrine);
displayName = ECSTRING(medical,Inject_Epinephrine);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Epinephrine')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Epinephrine')] call DFUNC(treatment));
};
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
displayName = ECSTRING(medical,Actions_RemoveTourniquet);
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(treatment));

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,2 @@
class ACE_Settings {
};

View File

@ -0,0 +1,6 @@
class CfgActions {
class None;
class Heal: None {
show = 0;
};
};

View File

@ -0,0 +1,18 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};

View File

@ -0,0 +1,58 @@
#define MEDICAL_ACTION_DISTANCE 1.75
class CBA_Extended_EventHandlers;
class CfgVehicles {
class Man;
class CAManBase: Man {
class ACE_SelfActions {
#include "ACE_Medical_SelfActions.hpp"
};
class ACE_Actions {
// Include actions in body parts for treatment while in the open
#define EXCEPTIONS exceptions[] = {};
#define ACTION_CONDITION condition = QUOTE(EGVAR(medical,menuTypeStyle) == 0);
#include "ACE_Medical_Actions.hpp"
// Create a consolidates medical menu for treatment while boarded
class ACE_MainActions {
class Medical {
displayName = ECSTRING(medical,Actions_Medical);
runOnHover = 1;
exceptions[] = {"isNotInside"};
condition = QUOTE((vehicle _target != _target && vehicle _target == vehicle _player) || EGVAR(medical,menuTypeStyle)== 1);
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
#undef EXCEPTIONS
#undef ACTION_CONDITION
#define EXCEPTIONS exceptions[] = {"isNotInside"};
#define ACTION_CONDITION condition = "true";
#include "ACE_Medical_Actions.hpp"
};
class GVAR(loadPatient) {
displayName = ECSTRING(medical,LoadPatient);
distance = 5;
condition = QUOTE(_target getVariable[ARR_2(QUOTE(QUOTE(ACE_isUnconscious)),false)] && vehicle _target == _target);
statement = QUOTE([ARR_2(_player, _target)] call DFUNC(actionLoadUnit));
showDisabled = 0;
priority = 2;
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
exceptions[] = {"isNotDragging", "isNotCarrying"};
};
class GVAR(UnLoadPatient) {
displayName = ECSTRING(medical,UnloadPatient);
distance = 5;
condition = QUOTE(_target getVariable[ARR_2(QUOTE(QUOTE(ACE_isUnconscious)),false)] && vehicle _target != _target);
statement = QUOTE([ARR_2(_player, _target)] call DFUNC(actionUnloadUnit));
showDisabled = 0;
priority = 2;
icon = QPATHTOEF(medical,UI\icons\medical_cross.paa);
exceptions[] = {"isNotDragging", "isNotCarrying", "isNotInside"};
};
};
};
};
};

View File

@ -0,0 +1,12 @@
ace_medical_treatment
===============
Provides a basic and advanced medical system.
## Maintainers
The people responsible for merging changes to this component or answering potential questions.
- [Glowbal](https://github.com/Glowbal)
- [KoffeinFlummi](https://github.com/KoffeinFlummi)

View File

@ -0,0 +1,52 @@
PREP(actionCheckBloodPressure);
PREP(actionCheckBloodPressureLocal);
PREP(actionCheckPulse);
PREP(actionCheckPulseLocal);
PREP(actionCheckResponse);
PREP(actionDiagnose);
PREP(actionLoadUnit);
PREP(actionPlaceInBodyBag);
PREP(actionRemoveTourniquet);
PREP(actionUnloadUnit);
PREP(addToLog);
PREP(addToTriageCard);
PREP(addUnloadPatientActions);
PREP(canAccessMedicalEquipment);
PREP(canTreat);
PREP(canTreatCached);
PREP(displayPatientInformation);
PREP(displayTriageCard);
PREP(dropDownTriageCard);
PREP(getTriageStatus);
PREP(handleBandageOpening);
PREP(hasItem);
PREP(hasItems);
PREP(isBeingCarried);
PREP(isBeingDragged);
PREP(medicationEffectLoop);
PREP(modifyMedicalAction);
PREP(onMedicationUsage);
PREP(treatment);
PREP(treatmentAdvanced_CPR);
PREP(treatmentAdvanced_CPRLocal);
PREP(treatmentAdvanced_bandage);
PREP(treatmentAdvanced_bandageLocal);
PREP(treatmentAdvanced_fullHeal);
PREP(treatmentAdvanced_fullHealLocal);
PREP(treatmentAdvanced_fullHealTreatmentTime);
PREP(treatmentAdvanced_medication);
PREP(treatmentAdvanced_medicationLocal);
PREP(treatmentAdvanced_surgicalKit_onProgress);
PREP(treatmentBasic_bloodbag);
PREP(treatmentBasic_bloodbagLocal);
PREP(treatmentBasic_epipen);
PREP(treatmentBasic_morphine);
PREP(treatmentBasic_morphineLocal);
PREP(treatmentIV);
PREP(treatmentIVLocal);
PREP(treatmentTourniquet);
PREP(treatmentTourniquetLocal);
PREP(treatment_failure);
PREP(treatment_success);
PREP(useItem);
PREP(useItems);

View File

@ -0,0 +1,23 @@
// ACE Medical System Visual Loop
#include "script_component.hpp"
["ace_interactMenuClosed", {[objNull, false] call FUNC(displayPatientInformation); }] call CBA_fnc_addEventHandler;
//Treatment EventHandlers:
[QGVAR(actionCheckBloodPressureLocal), DFUNC(actionCheckBloodPressureLocal)] call CBA_fnc_addEventHandler;
[QGVAR(actionCheckPulseLocal), DFUNC(actionCheckPulseLocal)] call CBA_fnc_addEventHandler;
[QGVAR(addToMedicalLog), DFUNC(addToLog)] call CBA_fnc_addEventHandler;
[QGVAR(addToTriageCard), DFUNC(addToTriageCard)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentAdvanced_bandageLocal), DFUNC(treatmentAdvanced_bandageLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentAdvanced_CPRLocal), DFUNC(treatmentAdvanced_CPRLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentAdvanced_fullHealLocal), DFUNC(treatmentAdvanced_fullHealLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentAdvanced_medicationLocal), DFUNC(treatmentAdvanced_medicationLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentBasic_bloodbagLocal), DFUNC(treatmentBasic_bloodbagLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentBasic_morphineLocal), DFUNC(treatmentBasic_morphineLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentIVLocal), DFUNC(treatmentIVLocal)] call CBA_fnc_addEventHandler;
[QGVAR(treatmentTourniquetLocal), DFUNC(treatmentTourniquetLocal)] call CBA_fnc_addEventHandler;
[QGVAR(actionPlaceInBodyBag), FUNC(actionPlaceInBodyBag)] call CBA_fnc_addEventHandler;
//Handle Deleting Bodies on Server:
if (isServer) then {["ace_placedInBodyBag", FUNC(serverRemoveBody)] call CBA_fnc_addEventHandler;};

View File

@ -0,0 +1,7 @@
#include "script_component.hpp"
ADDON = false;
#include "XEH_PREP.hpp"
ADDON = true;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -0,0 +1,17 @@
#include "script_component.hpp"
params ["_unit"];
// reset all variables. @todo GROUP respawn?
[_unit] call FUNC(init);
// Reset captive status for respawning unit
if (!(_unit getVariable ["ACE_isUnconscious", false])) then {
[_unit, "setCaptive", "ace_unconscious", false] call EFUNC(common,statusEffect_set);
};
// Remove maximum unconsciousness time handler
_maxUnconHandle = _unit getVariable [QGVAR(maxUnconTimeHandle), -1];
if (_maxUnconHandle > 0) then {
[_maxUnconHandle] call CBA_fnc_removePerFrameHandler;
};

View File

@ -0,0 +1,44 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_medical"};
author = ECSTRING(common,ACETeam);
authors[] = {"Glowbal", "KoffeinFlummi"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
};
#include "CfgActions.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "ACE_Medical_Treatments.hpp"
#include "ACE_Settings.hpp"
// TODO validate and check
class ACE_newEvents {
medical_treatmentSuccess = "ace_treatmentSuccess";
Medical_onItemAddedToTriageCard = "ace_itemAddedToTriageCard";
medical_onLogEntryAdded = "ace_medicalLogEntryAdded";
Medical_onHeartRateAdjustmentAdded = "ace_addedHeartRateAdjustment";
placedInBodyBag = "ace_placedInBodyBag";
actionPlaceInBodyBag = QGVAR(actionPlaceInBodyBag);
treatmentTourniquetLocal = QGVAR(treatmentTourniquetLocal);
treatmentIVLocal = QGVAR(treatmentIVLocal);
treatmentBasic_morphineLocal = QGVAR(treatmentBasic_morphineLocal);
treatmentBasic_bloodbagLocal = QGVAR(treatmentBasic_bloodbagLocal);
treatmentAdvanced_medicationLocal = QGVAR(treatmentAdvanced_medicationLocal);
treatmentAdvanced_fullHealLocal = QGVAR(treatmentAdvanced_fullHealLocal);
treatmentAdvanced_CPRLocal = QGVAR(treatmentAdvanced_CPRLocal);
treatmentAdvanced_bandageLocal = QGVAR(treatmentAdvanced_bandageLocal);
addToTriageCard = QGVAR(addToTriageCard);
addToMedicalLog = QGVAR(addToMedicalLog);
actionCheckPulseLocal = QGVAR(actionCheckPulseLocal);
actionCheckBloodPressureLocal = QGVAR(actionCheckBloodPressureLocal);
};

View File

@ -0,0 +1,64 @@
/*
* Author: Glowbal
* Local callback for checking the blood pressure of a patient
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_caller", "_target", "_selectionName"];
private _bloodPressure = if (!alive _target) then {
[0,0]
} else {
[_target] call EFUNC(medical,getBloodPressure)
};
_bloodPressure params [ "_bloodPressureLow", "_bloodPressureHigh"];
private _output = "";
private _logOutPut = "";
if ([_caller] call EFUNC(medical,isMedic)) then {
_output = ELSTRING(medical,Check_Bloodpressure_Output_1);
_logOutPut = format["%1/%2",round(_bloodPressureHigh),round(_bloodPressureLow)];
} else {
if (_bloodPressureHigh > 20) then {
_output = ELSTRING(medical,Check_Bloodpressure_Output_2);
_logOutPut = ELSTRING(medical,Check_Bloodpressure_Low);
if (_bloodPressureHigh > 100) then {
_output = ELSTRING(medical,Check_Bloodpressure_Output_3);
_logOutPut = ELSTRING(medical,Check_Bloodpressure_Normal);
if (_bloodPressureHigh > 160) then {
_output = ELSTRING(medical,Check_Bloodpressure_Output_4);
_logOutPut = ELSTRING(medical,Check_Bloodpressure_High);
};
};
} else {
if (random(10) > 3) then {
_output = ELSTRING(medical,Check_Bloodpressure_Output_5);
_logOutPut = ELSTRING(medical,Check_Bloodpressure_NoBloodpressure);
} else {
_output = ELSTRING(medical,Check_Bloodpressure_Output_6);
//Fail to find pressure, no logoutput
};
};
};
if (_selectionName in ["hand_l","hand_r"] && {[_unit, _selectionName] call EFUNC(medical,hasTourniquetAppliedTo)}) then {
_output = ELSTRING(medical,Check_Bloodpressure_Output_6);
_logOutPut = "";
};
[QEGVAR(common,displayTextStructured), [[_output, [_target] call EFUNC(common,getName), round(_bloodPressureHigh),round(_bloodPressureLow)], 1.75, _caller], [_caller]] call CBA_fnc_targetEvent;
if (_logOutPut != "") then {
[_target,"activity", ELSTRING(medical,Check_Bloodpressure_Log), [[_caller, false, true] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog);
[_target,"quick_view", ELSTRING(medical,Check_Bloodpressure_Log), [[_caller, false, true] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog);
};

View File

@ -0,0 +1,56 @@
/*
* Author: Glowbal
* Local callback for checking the pulse of a patient
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_caller", "_unit", "_selectionName"];
private _heartRate = _unit getVariable [QEGVAR(medical,heartRate), 80];
if (!alive _unit) then {
_heartRate = 0;
};
private _heartRateOutput = ELSTRING(medical,Check_Pulse_Output_5);
private _logOutPut = ELSTRING(medical,Check_Pulse_None);
if (_heartRate > 1.0) then {
if ([_caller] call EFUNC(medical,isMedic)) then {
_heartRateOutput = ELSTRING(medical,Check_Pulse_Output_1);
_logOutPut = format["%1",round(_heartRate)];
} else {
// non medical personel will only find a pulse/HR
_heartRateOutput = ELSTRING(medical,Check_Pulse_Output_2);
_logOutPut = ELSTRING(medical,Check_Pulse_Weak);
if (_heartRate > 60) then {
if (_heartRate > 100) then {
_heartRateOutput = ELSTRING(medical,Check_Pulse_Output_3);
_logOutPut = ELSTRING(medical,Check_Pulse_Strong);
} else {
_heartRateOutput = ELSTRING(medical,Check_Pulse_Output_4);
_logOutPut = ELSTRING(medical,Check_Pulse_Normal);
};
};
};
};
if (_selectionName in ["hand_l","hand_r"] && {[_unit, _selectionName] call EFUNC(medical,hasTourniquetAppliedTo)}) then {
_heartRateOutput = ELSTRING(medical,Check_Pulse_Output_5);
_logOutPut = ELSTRING(medical,Check_Pulse_None);
};
[QEGVAR(common,displayTextStructured), [[_heartRateOutput, [_unit] call EFUNC(common,getName), round(_heartRate)], 1.5, _caller], [_caller]] call CBA_fnc_targetEvent;
if (_logOutPut != "") then {
[_unit,"activity", ELSTRING(medical,Check_Pulse_Log),[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog);
[_unit,"quick_view", ELSTRING(medical,Check_Pulse_Log),[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog);
};

View File

@ -16,7 +16,7 @@
params ["_caller", "_target"];
private _output = [LSTRING(Check_Response_Unresponsive), LSTRING(Check_Response_Responsive)] select ([_target] call EFUNC(common,isAwake));
private _output = [ELSTRING(medical,Check_Response_Unresponsive), ELSTRING(medical,Check_Response_Responsive)] select ([_target] call EFUNC(common,isAwake));
[QEGVAR(common,displayTextStructured), [[_output, [_target] call EFUNC(common,getName)], 2, _caller], [_caller]] call CBA_fnc_targetEvent;

View File

@ -0,0 +1,46 @@
/*
* Author: Glowbal
* Action for diagnosing in basic medical
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
private "_genericMessages";
params ["_caller", "_target"];
private _genericMessages = [ELSTRING(medical,diagnoseMessage), [_target] call EFUNC(common,getName)];
if (alive _target) then {
_genericMessages pushBack ELSTRING(medical,diagnoseAlive);
} else {
_genericMessages pushBack ELSTRING(medical,diagnoseDead);
};
if (_target getVariable[QEGVAR(medical,hasLostBlood), 0] > 0) then {
if (_target getVariable[QEGVAR(medical,hasLostBlood), 0] > 1) then {
_genericMessages pushBack ELSTRING(medical,lostBloodALot);
} else {
_genericMessages pushBack ELSTRING(medical,lostBlood);
};
} else {
_genericMessages pushBack ELSTRING(medical,noBloodloss);
};
if (alive _target) then {
if (_target getVariable[QEGVAR(medical,hasPain), false]) then {
_genericMessages pushBack ELSTRING(medical,inPain);
} else {
_genericMessages pushBack ELSTRING(medical,noPain);
};
};
[QEGVAR(common,displayTextStructured), [_genericMessages, 3.0, _caller], [_caller]] call CBA_fnc_targetEvent;

View File

@ -18,7 +18,7 @@ private "_vehicle";
params ["_caller", "_target"];
if ([_target] call EFUNC(common,isAwake)) exitWith {
[QEGVAR(common,displayTextStructured), [[LSTRING(CanNotLoaded), [_target] call EFUNC(common,getName)], 1.5, _caller], [_caller]] call CBA_fnc_targetEvent;
[QEGVAR(common,displayTextStructured), [[ELSTRING(medical,CanNotLoaded), [_target] call EFUNC(common,getName)], 1.5, _caller], [_caller]] call CBA_fnc_targetEvent;
};
if ([_target] call FUNC(isBeingCarried)) then {
[_caller, _target] call EFUNC(dragging,dropObject_carry);

View File

@ -28,7 +28,7 @@ if (!local _target) exitWith {
if (alive _target) then {
TRACE_1("manually killing with setDead",_target);
[_target, true] call FUNC(setDead);
[_target, true] call EFUNC(medical,setDead);
};
private _position = (getPosASL _target) vectorAdd [0, 0, 0.2];

View File

@ -19,17 +19,17 @@ params ["_caller", "_target", "_selectionName"];
TRACE_3("params",_caller,_target,_selectionName);
// grab the required data
private _part = [_selectionName] call FUNC(selectionNameToNumber);
private _tourniquets = _target getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]];
private _part = [_selectionName] call EFUNC(medical,selectionNameToNumber);
private _tourniquets = _target getVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0]];
// Check if there is a tourniquet on this bodypart
if ((_tourniquets select _part) == 0) exitWith {
[QEGVAR(common,displayTextStructured), [LSTRING(noTourniquetOnBodyPart), 1.5, _caller], [_caller]] call CBA_fnc_targetEvent;
[QEGVAR(common,displayTextStructured), [ELSTRING(medical,noTourniquetOnBodyPart), 1.5, _caller], [_caller]] call CBA_fnc_targetEvent;
};
// Removing the tourniquet
_tourniquets set [_part, 0];
_target setVariable [QGVAR(tourniquets), _tourniquets, true];
_target setVariable [QEGVAR(medical,tourniquets), _tourniquets, true];
// Adding the tourniquet item to the caller
_caller addItem "ACE_tourniquet";

View File

@ -25,7 +25,7 @@ if (!local _unit) exitWith {
date params ["", "", "", "_hour", "_minute"];
private _moment = format [ (["%1:%2", "%1:0%2"] select (_minute < 10)), _hour, _minute];
private _logVarName = format[QGVAR(logFile_%1), _type];
private _logVarName = format[QEGVAR(medical,logFile_%1), _type];
private _log = _unit getVariable [_logVarName, []];
if (count _log >= 8) then {
@ -43,8 +43,8 @@ _log pushBack [_message, _moment, _type, _arguments];
_unit setVariable [_logVarName, _log, true];
["ace_medicalLogEntryAdded", [_unit, _type, _message, _arguments]] call CBA_fnc_localEvent;
private _logs = _unit getVariable [QGVAR(allLogs), []];
private _logs = _unit getVariable [QEGVAR(medical,allLogs), []];
if !(_logVarName in _logs) then {
_logs pushBack _logVarName;
_unit setVariable [QGVAR(allLogs), _logs, true];
_unit setVariable [QEGVAR(medical,allLogs), _logs, true];
};

View File

@ -20,7 +20,7 @@ if (!local _unit) exitWith {
[QGVAR(addToTriageCard), _this, _unit] call CBA_fnc_targetEvent;
};
private _log = _unit getVariable [QGVAR(triageCard), []];
private _log = _unit getVariable [QEGVAR(medical,triageCard), []];
private _inList = false;
private _amount = 1;
{
@ -38,5 +38,5 @@ private _amount = 1;
if (!_inList) then {
_log pushBack [_newItem, 1, CBA_missionTime];
};
_unit setVariable [QGVAR(triageCard), _log, true];
_unit setVariable [QEGVAR(medical,triageCard), _log, true];
["ace_itemAddedToTriageCard", [_unit, _newItem, _amount]] call CBA_fnc_localEvent;

View File

@ -0,0 +1,40 @@
/*
* Author: esteldunedain
* Create one unload action per unconscious passenger
*
* Argument:
* 0: Vehicle <OBJECT>
* 1: Player <OBJECT>
* 3: Parameters <ARRAY>
*
* Return value:
* Children actions <ARRAY>
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle", "_player", "_parameters"];
private _actions = [];
{
private _unit = _x;
if (_unit != _player && {(alive _unit) && {_unit getVariable ["ACE_isUnconscious", false]}}) then {
_actions pushBack
[
[
str(_unit),
[_unit, true] call EFUNC(common,getName),
"",
{[_player, (_this select 2) select 0] call FUNC(actionUnloadUnit);},
{true},
{},
[_unit]
] call EFUNC(interact_menu,createAction),
[],
_unit
];
};
} forEach crew _vehicle;
_actions

View File

@ -0,0 +1,29 @@
/*
* Author: Glowbal
* Check if caller can access targets medical equipment, based upon accessLevel.
*
* Arguments:
* 0: The caller <OBJECT>
* 1: The target <OBJECT>
*
* ReturnValue:
* Can Treat <BOOL>
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_caller", "_target"];
private _accessLevel = _target getVariable [QGVAR(allowSharedEquipmentAccess), -1];
private _return = false;
if (_accessLevel >= 0) then {
if (_accessLevel == 0) exitWith { _return = true; };
if (_accessLevel == 1) exitWith { _return = (side _target == side _caller); };
if (_accessLevel == 2) exitWith { _return = (group _target == group _caller); };
};
_return;

View File

@ -0,0 +1,97 @@
/*
* Author: Glowbal
* Check if the treatment action can be performed.
*
* Arguments:
* 0: The caller <OBJECT>
* 1: The target <OBJECT>
* 2: Selection name <STRING>
* 3: ACE_Medical_Treatments Classname <STRING>
*
* ReturnValue:
* Can Treat <BOOL>
*
* Example:
* [player, cursorTarget, "Head", "SurgicalKit"] call ace_medical_fnc_canTreat
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_caller", "_target", "_selectionName", "_className"];
if !(_target isKindOf "CAManBase") exitWith { false };
private _config = (ConfigFile >> "ACE_Medical_Actions" >> (["Basic", "Advanced"] select (EGVAR(medical,level)>=2)) >> _className);
if !(isClass _config) exitwith {false};
// Allow self treatment check
if (_caller == _target && {getNumber (_config >> "allowSelfTreatment") == 0}) exitwith {false};
private _medicRequired = if (isNumber (_config >> "requiredMedic")) then {
getNumber (_config >> "requiredMedic");
} else {
// Check for required class
if (isText (_config >> "requiredMedic")) exitwith {
missionNamespace getVariable [(getText (_config >> "requiredMedic")), 0]
};
0;
};
if !([_caller, _medicRequired] call EFUNC(medical,isMedic)) exitwith { false };
private _items = getArray (_config >> "items");
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith { false };
private _allowedSelections = getArray (_config >> "allowedSelections");
if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith { false };
private _return = true;
if (getText (_config >> "condition") != "") then {
private _condition = getText (_config >> "condition");
if (isnil _condition) then {
_condition = compile _condition;
} else {
_condition = missionNamespace getVariable _condition;
};
if (_condition isEqualType false) then {
_return = _condition;
} else {
_return = [_caller, _target, _selectionName, _className] call _condition;
};
};
if (!_return) exitwith { false };
private _patientStateCondition = if (isText(_config >> "patientStateCondition")) then {
missionNamespace getVariable [getText(_config >> "patientStateCondition"), 0]
} else {
getNumber(_config >> "patientStateCondition")
};
if (_patientStateCondition == 1 && {!([_target] call EFUNC(medical,isInStableCondition))}) exitwith {false};
private _locations = getArray (_config >> "treatmentLocations");
if ("All" in _locations) exitwith { true };
private _medFacility = {([_caller] call EFUNC(medical,isInMedicalFacility)) || ([_target] call EFUNC(medical,isInMedicalFacility))};
private _medVeh = {([_caller] call EFUNC(medical,isInMedicalVehicle)) || ([_target] call EFUNC(medical,isInMedicalVehicle))};
{
if (_x == "field") exitwith {_return = true;};
if (_x == "MedicalFacility" && _medFacility) exitwith {_return = true;};
if (_x == "MedicalVehicle" && _medVeh) exitwith {_return = true;};
if !(isnil _x) exitwith {
private _val = missionNamespace getVariable _x;
if (_val isEqualType 0) then {
_return = switch (_val) do {
case 0: {true}; //AdvancedMedicalSettings_anywhere
case 1: {call _medVeh}; //AdvancedMedicalSettings_vehicle
case 2: {call _medFacility}; //AdvancedMedicalSettings_facility
case 3: {(call _medFacility) || {call _medVeh}}; //AdvancedMedicalSettings_vehicleAndFacility
default {false}; //Disabled
};
};
};
} foreach _locations;
_return;

View File

@ -0,0 +1,23 @@
/*
* Author: Glowbal
* Cached Check if the treatment action can be performed.
*
* Arguments:
* 0: The caller <OBJECT>
* 1: The target <OBJECT>
* 2: Selection name <STRING>
* 3: ACE_Medical_Treatments Classname <STRING>
*
* ReturnValue:
* Can Treat <BOOL>
*
* Public: No
*/
#include "script_component.hpp"
#define MAX_DURATION_CACHE 2
params ["", "_target", "_selection", "_classname"];
// parameters, function, namespace, uid
[_this, DFUNC(canTreat), _target, format [QGVAR(canTreat_%1_%2), _selection, _classname], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall);

View File

@ -0,0 +1,193 @@
/*
* Author: Glowbal
* Displays the patient information for given unit.
*
* Arguments:
* 0: The Unit <OBJECT>
* 1: Show <BOOL> (default: true)
* 2: Selection <NUMBER> (default: 0)
*
* ReturnValue:
* None
*
* Public: No
*/
#include "script_component.hpp"
#define MAX_DISTANCE 10
// Exit for basic medical
if (EGVAR(medical,level) < 2) exitWith {};
params ["_target", ["_show", true], ["_selectionN", 0]];
GVAR(currentSelectedSelectionN) = [0, _selectionN] select (IS_SCALAR(_selectionN));
GVAR(displayPatientInformationTarget) = [ObjNull, _target] select _show;
if (_show) then {
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutRsc [QGVAR(DisplayInformation),"PLAIN"];
[{
private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"];
params ["_args", "_idPFH"];
_args params ["_target", "_selectionN"];
if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
if (ACE_player distance _target > MAX_DISTANCE) exitwith {
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
[_idPFH] call CBA_fnc_removePerFrameHandler;
[QEGVAR(common,displayTextStructured), [[ELSTRING(medical,DistanceToFar), [_target] call EFUNC(common,getName)], 1.75, ACE_player], [ACE_player]] call CBA_fnc_targetEvent;
};
disableSerialization;
private _display = uiNamespace getVariable QGVAR(DisplayInformation);
if (isnil "_display") exitwith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
private _allInjuryTexts = [];
private _genericMessages = [];
private _partText = [ELSTRING(medical,Head), ELSTRING(medical,Torso), ELSTRING(medical,LeftArm) ,ELSTRING(medical,RightArm) ,ELSTRING(medical,LeftLeg), ELSTRING(medical,RightLeg)] select _selectionN;
_genericMessages pushback [localize _partText, [1, 1, 1, 1]];
if (_target getVariable[QEGVAR(medical,isBleeding), false]) then {
_genericMessages pushback [localize ELSTRING(medical,Status_Bleeding), [1, 0.1, 0.1, 1]];
};
if (_target getVariable[QEGVAR(medical,hasLostBlood), 0] > 1) then {
_genericMessages pushback [localize ELSTRING(medical,Status_Lost_Blood), [1, 0.1, 0.1, 1]];
};
if (((_target getVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0]]) select _selectionN) > 0) then {
_genericMessages pushback [localize ELSTRING(medical,Status_Tourniquet_Applied), [0.77, 0.51, 0.08, 1]];
};
if (_target getVariable[QEGVAR(medical,hasPain), false]) then {
_genericMessages pushback [localize ELSTRING(medical,Status_Pain), [1, 1, 1, 1]];
};
private _totalIvVolume = 0;
{
private _value = _target getVariable _x;
if !(isnil "_value") then {
_totalIvVolume = _totalIvVolume + (_target getVariable [_x, 0]);
};
} foreach EGVAR(medical,IVBags);
if (_totalIvVolume >= 1) then {
_genericMessages pushback [format[localize ELSTRING(medical,receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]];
};
private _damaged = [false, false, false, false, false, false];
private _selectionBloodLoss = [0,0,0,0,0,0];
private _openWounds = _target getVariable [QEGVAR(medical,openWounds), []];
{
_x params ["", "_x1", "_selectionX", "_amountOf", "_x4"];
// Find how much this bodypart is bleeding
if (_amountOf > 0) then {
_damaged set [_selectionX, true];
_selectionBloodLoss set [_selectionX, (_selectionBloodLoss select _selectionX) + (20 * (_x4 * _amountOf))];
if (_selectionN == _selectionX) then {
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
if (_amountOf >= 1) then {
// TODO localization
_allInjuryTexts pushback [format["%2x %1", (EGVAR(medical,AllWoundInjuryTypes) select _x1) select 6, ceil _amountOf], [1,1,1,1]];
} else {
// TODO localization
_allInjuryTexts pushback [format["Partial %1", (EGVAR(medical,AllWoundInjuryTypes) select _x1) select 6], [1,1,1,1]];
};
};
};
} foreach _openWounds;
private _bandagedwounds = _target getVariable [QEGVAR(medical,bandagedWounds), []];
{
_x params ["", "", "_selectionX", "_amountOf", "_x4"];
// Find how much this bodypart is bleeding
if !(_damaged select _selectionX) then {
_selectionBloodLoss set [_selectionX, (_selectionBloodLoss select _selectionX) + (20 * (_x4 * _amountOf))];
};
if (_selectionN == _selectionX) then {
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
if (_amountOf > 0) then {
if (_amountOf >= 1) then {
// TODO localization
_allInjuryTexts pushback [format["[B] %2x %1", (EGVAR(medical,AllWoundInjuryTypes) select (_x select 1)) select 6, ceil _amountOf], [0.88,0.7,0.65,1]];
} else {
// TODO localization
_allInjuryTexts pushback [format["[B] Partial %1", (EGVAR(medical,AllWoundInjuryTypes) select (_x select 1)) select 6], [0.88,0.7,0.65,1]];
};
};
};
} foreach _bandagedwounds;
// Handle the body image coloring
private _availableSelections = [50,51,52,53,54,55];
{
private _total = _x;
private _red = 1;
private _green = 1;
private _blue = 1;
if (_total > 0) then {
if (_damaged select _forEachIndex) then {
_green = (0.9 - _total) max 0;
_blue = _green;
} else {
_green = (0.9 - _total) max 0;
_red = _green;
//_blue = _green;
};
};
(_display displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0];
} foreach _selectionBloodLoss;
private _lbCtrl = (_display displayCtrl 200);
lbClear _lbCtrl;
{
_x params ["_add", "_color"];
_lbCtrl lbAdd _add;
_lbCtrl lbSetColor [_foreachIndex, _color];
} foreach _genericMessages;
private _amountOfGeneric = count _genericMessages;
{
_x params ["_add", "_color"];
_lbCtrl lbAdd _add;
_lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _color];
} foreach _allInjuryTexts;
if (count _allInjuryTexts == 0) then {
_lbCtrl lbAdd (localize ELSTRING(medical,NoInjuriesBodypart));
};
private _logCtrl = (_display displayCtrl 302);
lbClear _logCtrl;
private _logs = _target getVariable [QGVAR(logFile_Activity), []];
{
_x params ["_message", "_moment", "_type", "_arguments"];
if (isLocalized _message) then {
_message = localize _message;
};
{
if (_x isEqualType "" && {isLocalized _x}) then {
_arguments set [_foreachIndex, localize _x];
};
} foreach _arguments;
_message = format([_message] + _arguments);
_logCtrl lbAdd format["%1 %2", _moment, _message];
} foreach _logs;
private _triageStatus = [_target] call FUNC(getTriageStatus);
(_display displayCtrl 303) ctrlSetText (_triageStatus select 0);
(_display displayCtrl 303) ctrlSetBackgroundColor (_triageStatus select 2);
}, 0, [_target, GVAR(currentSelectedSelectionN)]] call CBA_fnc_addPerFrameHandler;
} else {
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
};

View File

@ -0,0 +1,76 @@
/*
* Author: Glowbal
* Display triage card for a unit
*
* Arguments:
* 0: The unit <OBJECT>
* 1: Show <BOOL> (default: true)
*
* Return Value:
* None
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_target", ["_show", true]];
GVAR(TriageCardTarget) = if (_show) then {_target} else {ObjNull};
if (_show) then {
//("ACE_MedicalTriageCard" call BIS_fnc_rscLayer) cutRsc [QGVAR(triageCard),"PLAIN"];
createDialog QGVAR(triageCard);
[{
params ["_args", "_idPFH"];
_args params ["_target"];
if (GVAR(TriageCardTarget) != _target) exitWith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
disableSerialization;
private _display = uiNamespace getVariable QGVAR(triageCard);
if (isNil "_display") exitWith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
private _triageCardTexts = [];
// TODO fill the lb with the appropiate information for the patient
private _lbCtrl = (_display displayCtrl 200);
lbClear _lbCtrl;
private _log = _target getVariable [QGVAR(triageCard), []];
{
_x params ["_item", "_amount"];
private _message = _item;
if (isClass(configFile >> "CfgWeapons" >> _item)) then {
_message = getText(configFile >> "CfgWeapons" >> _item >> "DisplayName");
} else {
if (isLocalized _message) then {
_message = localize _message;
};
};
_triageCardTexts pushBack format["%1x - %2", _amount, _message];
} forEach _log;
if (count _triageCardTexts == 0) then {
_lbCtrl lbAdd (localize ELSTRING(medical,TriageCard_NoEntry));
};
{
_lbCtrl lbAdd _x;
} forEach _triageCardTexts;
private _triageStatus = [_target] call FUNC(getTriageStatus);
_triageStatus params ["_text", "", "_color"];
(_display displayCtrl 2000) ctrlSetText _text;
(_display displayCtrl 2000) ctrlSetBackgroundColor _color;
}, 0, [_target]] call CBA_fnc_addPerFrameHandler;
} else {
//("ACE_MedicalTriageCard" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
closeDialog 7010;
};

View File

@ -0,0 +1,31 @@
/*
* Author: Glowbal
* Display triage card for a unit
*
* Arguments:
* 0: Show <BOOL>
*
* Return Value:
* None
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_show"];
disableSerialization;
private _display = uiNamespace getVariable QGVAR(triageCard);
if (isNil "_display") exitWith {};
private _pos = [0,0,0,0];
if (_show) then {
_pos = ctrlPosition (_display displayCtrl 2001);
};
for "_idc" from 2002 to 2006 step 1 do {
_pos set [1, (_pos select 1) + (_pos select 3)];
private _ctrl = (_display displayCtrl _idc);
_ctrl ctrlSetPosition _pos;
_ctrl ctrlCommit 0;
};

View File

@ -0,0 +1,28 @@
/*
* Author: Glowbal
* Get the triage status and information from a unit
*
* Arguments:
* 0: The unit <OBJECT>
*
* Return Value:
* 0: Name <STRING>
* 1: Status ID <NUMBER>
* 2: Color <ARRAY <NUMBER>>
*
* Public: Yes
*/
#include "script_component.hpp"
private ["_unit","_return","_status"];
params ["_unit"];
_status = _unit getVariable [QEGVAR(medical,triageLevel), -1];
_return = switch (_status) do {
case 1: {[localize ELSTRING(medical,Triage_Status_Minor), 1, [0, 0.5, 0, 0.9]]};
case 2: {[localize ELSTRING(medical,Triage_Status_Delayed), 2, [0.7, 0.5, 0, 0.9]]};
case 3: {[localize ELSTRING(medical,Triage_Status_Immediate), 3, [0.4, 0.07, 0.07, 0.9]]};
case 4: {[localize ELSTRING(medical,Triage_Status_Deceased), 4, [0, 0, 0, 0.9]]};
default {[localize ELSTRING(medical,Triage_Status_None), 0, [0, 0, 0, 0.9]]};
};
_return

View File

@ -0,0 +1,120 @@
/*
* Author: Glowbal
* Handles the bandage of a patient.
*
* Arguments:
* 0: The target <OBJECT>
* 1: The impact <NUMBER>
* 2: Selection part number <NUMBER>
* 3: Injury index <NUMBER>
* 4: Injury <ARRAY>
* 5: Used Bandage type <STRING>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
private ["_className", "_reopeningChance", "_reopeningMinDelay", "_reopeningMaxDelay", "_config", "_woundTreatmentConfig", "_bandagedWounds", "_exist", "_injuryId", "_existingInjury", "_delay", "_openWounds", "_selectedInjury", "_bandagedInjury"];
params ["_target", "_impact", "_part", "_injuryIndex", "_injury", "_bandage"];
private _classID = _injury select 1;
private _className = EGVAR(medical,woundClassNames) select _classID;
// default, just in case..
private _reopeningChance = 0.1;
private _reopeningMinDelay = 120;
private _reopeningMaxDelay = 200;
// Get the default values for the used bandage
private _config = (ConfigFile >> "ace_medical_treatment" >> "Bandaging");
if (isClass (_config >> _bandage)) then {
_config = (_config >> _bandage);
_reopeningChance = getNumber (_config >> "reopeningChance");
_reopeningMinDelay = getNumber (_config >> "reopeningMinDelay");
_reopeningMaxDelay = getNumber (_config >> "reopeningMaxDelay") max _reopeningMinDelay;
} else {
ACE_LOGWARNING_2("No config for bandage [%1] config base [%2]", _bandage, _config);
};
if (isClass (_config >> _className)) then {
private _woundTreatmentConfig = (_config >> _className);
if (isNumber (_woundTreatmentConfig >> "reopeningChance")) then {
_reopeningChance = getNumber (_woundTreatmentConfig >> "reopeningChance");
};
if (isNumber (_woundTreatmentConfig >> "reopeningMinDelay")) then {
_reopeningMinDelay = getNumber (_woundTreatmentConfig >> "reopeningMinDelay");
};
if (isNumber (_woundTreatmentConfig >> "reopeningMaxDelay")) then {
_reopeningMaxDelay = getNumber (_woundTreatmentConfig >> "reopeningMaxDelay") max _reopeningMinDelay;
};
} else {
ACE_LOGWARNING_2("No config for wound type [%1] config base [%2]", _className, _config);
};
TRACE_5("configs",_bandage,_className,_reopeningChance,_reopeningMinDelay,_reopeningMaxDelay);
private _bandagedWounds = _target getVariable [QEGVAR(medical,bandagedWounds), []];
private _injuryType = _injury select 1;
private _exist = false;
private _bandagedInjury = [];
{
if ((_x select 1) == _injuryType && (_x select 2) == (_injury select 2)) exitwith {
_exist = true;
_existingInjury = _x;
_existingInjury set [3, (_existingInjury select 3) + _impact];
_bandagedWounds set [_foreachIndex, _existingInjury];
_bandagedInjury = _existingInjury;
};
} foreach _bandagedWounds;
if !(_exist) then {
// [ID, classID, bodypart, percentage treated, bloodloss rate]
_bandagedInjury = [_injury select 0, _injury select 1, _injury select 2, _impact, _injury select 4];
_bandagedWounds pushback _bandagedInjury;
};
_target setVariable [QEGVAR(medical,bandagedWounds), _bandagedWounds, true];
TRACE_1("",_reopeningChance);
// Check if we are ever going to reopen this
if (random(1) <= _reopeningChance) then {
_delay = _reopeningMinDelay + random(_reopeningMaxDelay - _reopeningMinDelay);
TRACE_1("Will open",_delay);
[{
params ["_target", "_impact", "_part", "_injuryIndex", "_injury"];
TRACE_5("params",_target,_impact,_part,_injuryIndex,_injury);
//if (alive _target) then {
private _openWounds = _target getVariable [QEGVAR(medical,openWounds), []];
if ((count _openWounds) - 1 < _injuryIndex) exitwith {};
private _selectedInjury = _openWounds select _injuryIndex;
if (_selectedInjury select 1 == _injury select 1 && (_selectedInjury select 2) == (_injury select 2)) then { // matching the IDs
private _bandagedWounds = _target getVariable [QEGVAR(medical,bandagedWounds), []];
private _exist = false;
private _injuryId = _injury select 1;
{
if ((_x select 1) == _injuryId && (_x select 2) == (_injury select 2)) exitwith {
_exist = true;
_existingInjury = _x;
_existingInjury set [3, ((_existingInjury select 3) - _impact) max 0];
_bandagedWounds set [_foreachIndex, _existingInjury];
};
} foreach _bandagedWounds;
if (_exist) then {
TRACE_2("Reopening Wound",_bandagedWounds,_openWounds);
_selectedInjury set [3, (_selectedInjury select 3) + _impact];
_openWounds set [_injuryIndex, _selectedInjury];
_target setVariable [QEGVAR(medical,bandagedWounds), _bandagedWounds, true];
_target setVariable [QEGVAR(medical,openWounds), _openWounds, true];
};
};
// Otherwise something went wrong, we we don't reopen them..
//};
}, [_target, _impact, _part, _injuryIndex, +_injury], _delay] call CBA_fnc_waitAndExecute;
};

View File

@ -17,10 +17,10 @@
params ["_medic", "_patient", "_item"];
if (isNil QGVAR(setting_allowSharedEquipment)) then {
GVAR(setting_allowSharedEquipment) = true;
if (isNil QEGVAR(medical,setting_allowSharedEquipment)) then {
EGVAR(medical,setting_allowSharedEquipment) = true;
};
if (GVAR(setting_allowSharedEquipment) && {[_patient, _item] call EFUNC(common,hasItem)}) exitWith {
if (EGVAR(medical,setting_allowSharedEquipment) && {[_patient, _item] call EFUNC(common,hasItem)}) exitWith {
true
};

View File

@ -0,0 +1,26 @@
/*
* Author: PabstMirror
* Returns if a target is being carried. (from ace_dragging)
*
* Arguments:
* 0: Target Unit <OBJECT>
*
* Return Value:
* Is being carried <BOOL>
*
* Example:
* [bob] call ace_medical_fnc_isBeingCarried
*
* Public: No
*/
#include "script_component.hpp"
params ["_target"];
private "_owner";
_owner = _target getVariable [QEGVAR(common,owner), objNull];
if (isNull _owner) exitWith {false};
(_owner getVariable [QEGVAR(dragging,carriedObject), objNull]) == _target

View File

@ -0,0 +1,26 @@
/*
* Author: PabstMirror
* Returns if a target is being dragged. (from ace_dragging)
*
* Arguments:
* 0: Target Unit <OBJECT>
*
* Return Value:
* Is being dragged <BOOL>
*
* Example:
* [bob] call ace_medical_fnc_isBeingDragged
*
* Public: No
*/
#include "script_component.hpp"
params ["_target"];
private "_owner";
_owner = _target getVariable [QEGVAR(common,owner), objNull];
if (isNull _owner) exitWith {false};
(_owner getVariable [QEGVAR(dragging,draggedObject), objNull]) == _target

View File

@ -0,0 +1,42 @@
/*
* Author: Glowbal, esteldunedain
* Medication effect loop for an injection.
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Name of the Variable that is affected <STRING>
* 2: Proportion of the effect applied <NUMBER>
* 3: Rate at which the effect is applied <NUMBER>
* 4: Viscosity adjustment rate <NUMBER>
* 5: Pain reduction rate <NUMBER>
*
* ReturnValue:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_unit", "_variableName", "_amountDecreased","_decreaseRate", "_viscosityAdjustmentRate", "_painReduceRate"];
// If the unit died the loop is finished
if (!alive _unit) exitWith {};
// If locality changed finish the local loop
if (!local _unit) exitWith {};
// Apply medicinal effect
private _usedMeds = (_unit getVariable [_variableName, 0]) - _decreaseRate;
_unit setVariable [_variableName, _usedMeds];
// Restore the viscosity while the medication is leaving the system
_unit setVariable [QEGVAR(medical,peripheralResistance), ((_unit getVariable [QEGVAR(medical,peripheralResistance), 100]) - _viscosityAdjustmentRate) max 0];
_unit setVariable [QEGVAR(medical,painSuppress), ((_unit getVariable [QEGVAR(medical,painSuppress), 0]) - _painReduceRate) max 0];
// Exit if the medication has finished it's effect
_amountDecreased = _amountDecreased + _decreaseRate;
if (_amountDecreased >= 1 || (_usedMeds <= 0) || !alive _unit) exitWith {};
// Schedule the loop to be executed again 1 sec later
[DFUNC(medicationEffectLoop), [_unit, _variableName, _amountDecreased, _decreaseRate, _viscosityAdjustmentRate, _painReduceRate], 1] call CBA_fnc_waitAndExecute;

View File

@ -0,0 +1,37 @@
/*
* Author: esteldunedain
* Modify the visuals of a medical action point.
* On Basic medical: modify the icon color based on damage on that body part.
*
* Arguments:
* 0: The Patient Unit <OBJECT>
* 1: The Diagnosing Unit <OBJECT>
* 2: Selection Number <NUMBER>
* 3: The action to modify <OBJECT>
*
* ReturnValue:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_target", "_player", "_partNumber", "_actionData"];
private _bloodLossOnSelection = 0;
// Add all bleeding from wounds on selection
{
_x params ["", "", "_selectionX", "_amountOf", "_percentageOpen"];
if (_selectionX == _partNumber) then {
_bloodLossOnSelection = _bloodLossOnSelection + (_amountOf * _percentageOpen);
};
} forEach (_target getvariable [QEGVAR(medical,openWounds), []]);
if (_bloodLossOnSelection >=1 ) then {
_actionData set [2, QPATHTOEF(medical,UI\icons\medical_crossRed.paa)];
} else {
if (_bloodLossOnSelection > 0 ) then {
_actionData set [2, QPATHTOEF(medical,UI\icons\medical_crossYellow.paa)];
};
};

View File

@ -22,7 +22,7 @@ params ["_target", "_className", "_variable", "_maxDosage", "_timeInSystem", "_i
TRACE_8("params",_target,_className,_variable,_maxDosage,_timeInSystem,_incompatabileMeds,_viscosityChange,_painReduce);
private _foundEntry = false;
private _allUsedMedication = _target getVariable [QGVAR(allUsedMedication), []];
private _allUsedMedication = _target getVariable [QEGVAR(medical,allUsedMedication), []];
{
_x params ["_variableX", "_allMedsFromClassname"];
if (_variableX== _variable) exitWith {
@ -30,7 +30,7 @@ private _allUsedMedication = _target getVariable [QGVAR(allUsedMedication), []];
_allMedsFromClassname pushBack _className;
_x set [1, _allMedsFromClassname];
_allUsedMedication set [_forEachIndex, _x];
_target setVariable [QGVAR(allUsedMedication), _allUsedMedication];
_target setVariable [QEGVAR(medical,allUsedMedication), _allUsedMedication];
};
_foundEntry = true;
};
@ -38,13 +38,13 @@ private _allUsedMedication = _target getVariable [QGVAR(allUsedMedication), []];
if (!_foundEntry) then {
_allUsedMedication pushBack [_variable, [_className]];
_target setVariable [QGVAR(allUsedMedication), _allUsedMedication];
_target setVariable [QEGVAR(medical,allUsedMedication), _allUsedMedication];
};
private _usedMeds = _target getVariable [_variable, 0];
if (_usedMeds >= floor (_maxDosage + round(random(2))) && _maxDosage >= 1 && GVAR(enableOverdosing)) then {
[_target] call FUNC(setDead);
[_target] call EFUNC(medical,setDead);
};
private _hasOverDosed = 0;
@ -59,7 +59,7 @@ private _hasOverDosed = 0;
} forEach _incompatabileMeds;
if (_hasOverDosed > 0 && GVAR(enableOverdosing)) then {
private _medicationConfig = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Medication");
private _medicationConfig = (configFile >> "ace_medical_treatment" >> "Medication");
private _onOverDose = getText (_medicationConfig >> "onOverDose");
if (isClass (_medicationConfig >> _className)) then {
_medicationConfig = (_medicationConfig >> _className);

View File

@ -0,0 +1,241 @@
/*
* Author: Glowbal, KoffeinFlummi
* Starts the treatment process
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
* 2: SelectionName <STRING>
* 3: Treatment classname <STRING>
*
* Return Value:
* Succesful treatment started <BOOL>
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_caller", "_target", "_selectionName", "_className"];
// If the cursorMenu is open, the loading bar will fail. If we execute the function one frame later, it will work fine
if (uiNamespace getVariable [QEGVAR(interact_menu,cursorMenuOpened),false]) exitwith {
[DFUNC(treatment), _this] call CBA_fnc_execNextFrame;
};
if !(_target isKindOf "CAManBase") exitWith {false};
private _config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className);
if (EGVAR(medical,level) >= 2) then {
_config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className);
};
if !(isClass _config) exitwith {false};
// Allow self treatment check
if (_caller == _target && {getNumber (_config >> "allowSelfTreatment") == 0}) exitwith {false};
private _medicRequired = if (isNumber (_config >> "requiredMedic")) then {
getNumber (_config >> "requiredMedic");
} else {
// Check for required class
if (isText (_config >> "requiredMedic")) exitwith {
missionNamespace getVariable [(getText (_config >> "requiredMedic")), 0];
};
0;
};
if !([_caller, _medicRequired] call EFUNC(medical,isMedic)) exitwith {false};
private _allowedSelections = getArray (_config >> "allowedSelections");
if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith {false};
// Check item
private _items = getArray (_config >> "items");
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false};
private _return = true;
if (isText (_config >> "Condition")) then {
private _condition = getText(_config >> "condition");
if (_condition != "") then {
if (isnil _condition) then {
_condition = compile _condition;
} else {
_condition = missionNamespace getVariable _condition;
};
if (_condition isEqualType false) then {
_return = _condition;
} else {
_return = [_caller, _target, _selectionName, _className] call _condition;
};
};
};
if (!_return) exitwith {false};
private _patientStateCondition = if (isText(_config >> "patientStateCondition")) then {
missionNamespace getVariable [getText(_config >> "patientStateCondition"), 0]
} else {
getNumber(_config >> "patientStateCondition")
};
if (_patientStateCondition == 1 && {!([_target] call EFUNC(medical,isInStableCondition))}) exitwith {false};
// Check allowed locations
private _locations = getArray (_config >> "treatmentLocations");
if ("All" in _locations) then {
_return = true;
} else {
private _medFacility = {([_caller] call EFUNC(medical,isInMedicalFacility)) || ([_target] call EFUNC(medical,isInMedicalFacility))};
private _medVeh = {([_caller] call EFUNC(medical,isInMedicalVehicle)) || ([_target] call EFUNC(medical,isInMedicalVehicle))};
{
if (_x == "field") exitwith {_return = true;};
if (_x == "MedicalFacility" && _medFacility) exitwith {_return = true;};
if (_x == "MedicalVehicle" && _medVeh) exitwith {_return = true;};
if !(isnil _x) exitwith {
private _val = missionNamespace getVariable _x;
if (_val isEqualType 0) then {
_return = switch (_val) do {
case 0: {true}; //AdvancedMedicalSettings_anywhere
case 1: {call _medVeh}; //AdvancedMedicalSettings_vehicle
case 2: {call _medFacility}; //AdvancedMedicalSettings_facility
case 3: {(call _medFacility) || {call _medVeh}}; //AdvancedMedicalSettings_vehicleAndFacility
default {false}; //Disabled
};
};
};
} foreach _locations;
};
if !(_return) exitwith {false};
private _usersOfItems = [];
private _consumeItems = if (isNumber (_config >> "itemConsumed")) then {
getNumber (_config >> "itemConsumed");
} else {
// Check for required class
if (isText (_config >> "itemConsumed")) exitwith {
missionNamespace getVariable [(getText (_config >> "itemConsumed")), 0];
};
0;
};
if (_consumeItems > 0) then {
_usersOfItems = ([_caller, _target, _items] call FUNC(useItems)) select 1;
};
// Parse the config for the progress callback
private _callbackProgress = getText (_config >> "callbackProgress");
if (_callbackProgress == "") then {
_callbackProgress = "true";
};
if (isNil _callbackProgress) then {
_callbackProgress = compile _callbackProgress;
} else {
_callbackProgress = missionNamespace getVariable _callbackProgress;
};
// Patient Animation
private _patientAnim = getText (_config >> "animationPatient");
if (_target getVariable ["ACE_isUnconscious", false] && GVAR(allowUnconsciousAnimationOnTreatment)) then {
if !(animationState _target in (getArray (_config >> "animationPatientUnconsciousExcludeOn"))) then {
_patientAnim = getText (_config >> "animationPatientUnconscious");
};
};
if (_caller != _target && {vehicle _target == _target} && {_patientAnim != ""}) then {
if (_target getVariable ["ACE_isUnconscious", false]) then {
[_target, _patientAnim, 2, true] call EFUNC(common,doAnimation);
} else {
[_target, _patientAnim, 1, true] call EFUNC(common,doAnimation);
};
};
// Player Animation
private _callerAnim = [getText (_config >> "animationCaller"), getText (_config >> "animationCallerProne")] select (stance _caller == "PRONE");
if (_caller == _target) then {
_callerAnim = [getText (_config >> "animationCallerSelf"), getText (_config >> "animationCallerSelfProne")] select (stance _caller == "PRONE");
};
_caller setVariable [QGVAR(selectedWeaponOnTreatment), (weaponState _caller)];
// Cannot use secondairy weapon for animation
if (currentWeapon _caller == secondaryWeapon _caller) then {
_caller selectWeapon (primaryWeapon _caller);
};
private _wpn = ["non", "rfl", "pst"] select (1 + ([primaryWeapon _caller, handgunWeapon _caller] find (currentWeapon _caller)));
private _callerAnim = [_callerAnim, "[wpn]", _wpn] call CBA_fnc_replace;
if (vehicle _caller == _caller && {_callerAnim != ""}) then {
if (primaryWeapon _caller == "") then {
_caller addWeapon "ACE_FakePrimaryWeapon";
};
if (currentWeapon _caller == "") then {
_caller selectWeapon (primaryWeapon _caller); // unit always has a primary weapon here
};
if (isWeaponDeployed _caller) then {
TRACE_1("Weapon Deployed, breaking out first",(stance _caller));
[_caller, "", 0] call EFUNC(common,doAnimation);
};
if ((stance _caller) == "STAND") then {
switch (_wpn) do {//If standing, end in a crouched animation based on their current weapon
case ("rfl"): {_caller setVariable [QGVAR(treatmentPrevAnimCaller), "AmovPknlMstpSrasWrflDnon"];};
case ("pst"): {_caller setVariable [QGVAR(treatmentPrevAnimCaller), "AmovPknlMstpSrasWpstDnon"];};
case ("non"): {_caller setVariable [QGVAR(treatmentPrevAnimCaller), "AmovPknlMstpSnonWnonDnon"];};
};
} else {
_caller setVariable [QGVAR(treatmentPrevAnimCaller), animationState _caller];
};
[_caller, _callerAnim] call EFUNC(common,doAnimation);
};
//Get treatment time
private _treatmentTime = if (isNumber (_config >> "treatmentTime")) then {
getNumber (_config >> "treatmentTime");
} else {
if (isText (_config >> "treatmentTime")) exitwith {
private _treatmentTimeConfig = getText(_config >> "treatmentTime");
if (isnil _treatmentTimeConfig) then {
_treatmentTimeConfig = compile _treatmentTimeConfig;
} else {
_treatmentTimeConfig = missionNamespace getVariable _treatmentTimeConfig;
};
if (_treatmentTimeConfig isEqualType 0) exitwith {
_treatmentTimeConfig;
};
[_caller, _target, _selectionName, _className] call _treatmentTimeConfig;
};
0;
};
// Start treatment
[
_treatmentTime,
[_caller, _target, _selectionName, _className, _items, _usersOfItems],
DFUNC(treatment_success),
DFUNC(treatment_failure),
getText (_config >> "displayNameProgress"),
_callbackProgress,
["isnotinside"]
] call EFUNC(common,progressBar);
// Display Icon
private _iconDisplayed = getText (_config >> "actionIconPath");
if (_iconDisplayed != "") then {
[QGVAR(treatmentActionIcon), true, _iconDisplayed, [1,1,1,1], getNumber(_config >> "actionIconDisplayTime")] call EFUNC(common,displayIcon);
};
// handle display of text/hints
private _displayText = "";
if (_target != _caller) then {
_displayText = getText(_config >> "displayTextOther");
} else {
_displayText = getText(_config >> "displayTextSelf");
};
if (_displayText != "") then {
[QEGVAR(common,displayTextStructured), [[_displayText, [_caller] call EFUNC(common,getName), [_target] call EFUNC(common,getName)], 1.5, _caller], [_caller]] call CBA_fnc_targetEvent;
};
true;

View File

@ -18,8 +18,8 @@
params ["_caller", "_target", "_selectionName", "_className", "_items"];
if (alive _target && {(_target getVariable [QGVAR(inCardiacArrest), false] || _target getVariable [QGVAR(inReviveState), false])}) then {
[_target, "activity_view", LSTRING(Activity_cpr), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
if (alive _target && {(_target getVariable [QEGVAR(medical,inCardiacArrest), false] || _target getVariable [QEGVAR(medical,inReviveState), false])}) then {
[_target, "activity_view", ELSTRING(medical,Activity_cpr), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
if (local _target) then {
[QGVAR(treatmentAdvanced_CPRLocal), [_caller, _target]] call CBA_fnc_localEvent;

View File

@ -0,0 +1,35 @@
/*
* Author: Glowbal
* local Callback for the CPR treatment action on success.
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* Succesful treatment started <BOOL>
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_caller","_target"];
if (_target getVariable [QEGVAR(medical,inReviveState), false]) then {
private _reviveStartTime = _target getVariable [QEGVAR(medical,reviveStartTime),0];
if (_reviveStartTime > 0) then {
_target setVariable [QEGVAR(medical,reviveStartTime), (_reviveStartTime + random(20)) min CBA_missionTime];
};
};
if (EGVAR(medical,level) > 1 && {(random 1) >= 0.6}) then {
_target setVariable [QEGVAR(medical,inCardiacArrest), nil,true];
_target setVariable [QEGVAR(medical,heartRate), 40];
_target setVariable [QEGVAR(medical,bloodPressure), [50,70]];
};
[_target, "activity", ELSTRING(medical,Activity_CPR), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", ELSTRING(medical,Activity_CPR), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
true;

View File

@ -20,8 +20,8 @@
params ["_caller", "_target", "_selectionName", "_className", "_items", "", ["_specificSpot", -1]];
[_target, "activity", LSTRING(Activity_bandagedPatient), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_bandagedPatient), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
[_target, "activity", ELSTRING(medical,Activity_bandagedPatient), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", ELSTRING(medical,Activity_bandagedPatient), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
if (local _target) then {
[QGVAR(treatmentAdvanced_bandageLocal), [_target, _className, _selectionName, _specificSpot]] call CBA_fnc_localEvent;

View File

@ -18,19 +18,22 @@
params ["_target", "_bandage", "_selectionName", ["_specificClass", -1]];
// Ensure it is a valid bodypart
private _part = [_selectionName] call FUNC(selectionNameToNumber);
private _part = [_selectionName] call EFUNC(medical,selectionNameToNumber);
if (_part < 0) exitWith {false};
// Get the open wounds for this unit
private _openWounds = _target getVariable [QGVAR(openWounds), []];
private _openWounds = _target getVariable [QEGVAR(medical,openWounds), []];
if (count _openWounds == 0) exitWith {false}; // nothing to do here!
// Get the default effectiveness for the used bandage
private _config = (ConfigFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Bandaging");
private _config = (configFile >> "ace_medical_treatment" >> "Bandaging");
private _effectiveness = getNumber (_config >> "effectiveness");
if (isClass (_config >> _bandage)) then {
systemchat "using class: " + _bandage;
_config = (_config >> _bandage);
if (isNumber (_config >> "effectiveness")) then { _effectiveness = getNumber (_config >> "effectiveness");};
} else {
systemChat format["No bandage avialable"];
};
// Figure out which injury for this bodypart is the best choice to bandage
@ -47,7 +50,7 @@ private _exit = false;
private _woundEffectiveness = _effectiveness;
// Select the classname from the wound classname storage
private _className = GVAR(woundClassNames) select _classID;
private _className = EGVAR(medical,woundClassNames) select _classID;
// Check if this wound type has attributes specified for the used bandage
if (isClass (_config >> _className)) then {
@ -87,10 +90,10 @@ private _impact = if ((_mostEffectiveInjury select 3) >= _effectivenessFound) th
_mostEffectiveInjury set [ 3, ((_mostEffectiveInjury select 3) - _impact) max 0];
_openWounds set [_mostEffectiveSpot, _mostEffectiveInjury];
_target setVariable [QGVAR(openWounds), _openWounds, true];
_target setVariable [QEGVAR(medical,openWounds), _openWounds, true];
// Handle the reopening of bandaged wounds
if (_impact > 0 && {GVAR(level) >= 2} && {GVAR(enableAdvancedWounds)}) then {
if (_impact > 0 && {EGVAR(medical,level) >= 2} && {EGVAR(medical,enableAdvancedWounds)}) then {
[_target, _impact, _part, _mostEffectiveSpot, _mostEffectiveInjury, _bandage] call FUNC(handleBandageOpening);
};
@ -98,9 +101,9 @@ if (_impact > 0 && {GVAR(level) >= 2} && {GVAR(enableAdvancedWounds)}) then {
// so that the body part functions normally and blood is removed from the uniform.
// Arma combines left and right arms into a single body part (HitHands), same with left and right legs (HitLegs).
// Arms are actually hands.
if (GVAR(healHitPointAfterAdvBandage) || {GVAR(level) < 2}) then {
if (EGVAR(medical,healHitPointAfterAdvBandage) || {EGVAR(medical,level) < 2}) then {
// Get the list of the wounds the target is currently suffering from.
private _currentWounds = _target getVariable [QGVAR(openWounds), []];
private _currentWounds = _target getVariable [QEGVAR(medical,openWounds), []];
// Tally of unbandaged wounds to each body part.
private _headWounds = 0;

View File

@ -0,0 +1,72 @@
/**
* fn_healLocal.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
#include "script_component.hpp"
params ["_caller", "_target"];
if (alive _target) exitWith {
_target setVariable [QEGVAR(medical,pain), 0, true];
_target setVariable [QEGVAR(medical,morphine), 0, true];
_target setVariable [QEGVAR(medical,bloodVolume), 100, true];
// tourniquets
_target setVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0], true];
// wounds and injuries
_target setVariable [QEGVAR(medical,openWounds), [], true];
_target setVariable [QEGVAR(medical,bandagedWounds), [], true];
_target setVariable [QEGVAR(medical,internalWounds), [], true];
// vitals
_target setVariable [QEGVAR(medical,heartRate), 80];
_target setVariable [QEGVAR(medical,heartRateAdjustments), []];
_target setVariable [QEGVAR(medical,bloodPressure), [80, 120]];
_target setVariable [QEGVAR(medical,peripheralResistance), 100];
// fractures
_target setVariable [QEGVAR(medical,fractures), []];
// IVs
_target setVariable [QEGVAR(medical,salineIVVolume), 0];
_target setVariable [QEGVAR(medical,plasmaIVVolume), 0];
_target setVariable [QEGVAR(medical,bloodIVVolume), 0];
// damage storage
_target setVariable [QEGVAR(medical,bodyPartStatus), [0,0,0,0,0,0], true];
// airway
_target setVariable [QEGVAR(medical,airwayStatus), 100, true];
_target setVariable [QEGVAR(medical,airwayOccluded), false, true];
_target setVariable [QEGVAR(medical,airwayCollapsed), false, true];
// generic medical admin
_target setVariable [QEGVAR(medical,addedToUnitLoop), false, true];
_target setVariable [QEGVAR(medical,inCardiacArrest), false, true];
_target setVariable [QEGVAR(medical,inReviveState), false, true];
_target setVariable ["ACE_isUnconscious", false, true];
_target setVariable [QEGVAR(medical,hasLostBlood), 0, true];
_target setVariable [QEGVAR(medical,isBleeding), false, true];
_target setVariable [QEGVAR(medical,hasPain), false, true];
_target setVariable [QEGVAR(medical,painSuppress), 0, true];
// medication
private _allUsedMedication = _target getVariable [QEGVAR(medical,allUsedMedication), []];
{
_target setVariable [_x select 0, nil];
} forEach _allUsedMedication;
// Resetting damage
_target setDamage 0;
[_target, "activity", ELSTRING(medical,Activity_fullHeal), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", ELSTRING(medical,Activity_fullHeal), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
};

View File

@ -19,6 +19,6 @@ private _totalDamage = 0;
{
_totalDamage = _totalDamage + _x;
} forEach (_this getVariable [QGVAR(bodyPartStatus), []]);
} forEach (_this getVariable [QEGVAR(medical,bodyPartStatus), []]);
(10 max (_totalDamage * 10) min 120)

View File

@ -20,15 +20,15 @@
params ["_caller", "_target", "_selectionName", "_className", "_items"];
TRACE_5("params",_caller,_target,_selectionName,_className,_items);
private _part = [_selectionName] call FUNC(selectionNameToNumber);
private _part = [_selectionName] call EFUNC(medical,selectionNameToNumber);
[QGVAR(treatmentAdvanced_medicationLocal), [_target, _className, _part], [_target]] call CBA_fnc_targetEvent;
{
if (_x != "") then {
[_target, _x] call FUNC(addToTriageCard);
[_target, "activity", LSTRING(Activity_usedItem), [[_caller, false, true] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _x >> "displayName")]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_usedItem), [[_caller, false, true] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _x >> "displayName")]] call FUNC(addToLog);
[_target, "activity", ELSTRING(medical,Activity_usedItem), [[_caller, false, true] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _x >> "displayName")]] call FUNC(addToLog);
[_target, "activity_view", ELSTRING(medical,Activity_usedItem), [[_caller, false, true] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _x >> "displayName")]] call FUNC(addToLog);
};
} forEach _items;

View File

@ -18,7 +18,7 @@
params ["_target", "_className", "_partNumber"];
TRACE_3("params",_target,_className,_partNumber);
private _tourniquets = _target getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]];
private _tourniquets = _target getVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0]];
if ((_tourniquets select _partNumber) > 0) exitWith {
TRACE_1("unit has tourniquets blocking blood flow on injection site",_tourniquets);
private _delayedMedications = _target getVariable [QGVAR(occludedMedications), []];
@ -33,7 +33,7 @@ private _currentInSystem = _target getVariable [_varName, 0];
_target setVariable [_varName, _currentInSystem + 1];
// Find the proper attributes for the used medication
private _medicationConfig = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Medication");
private _medicationConfig = (configFile >> "ace_medical_treatment" >> "Medication");
private _painReduce = getNumber (_medicationConfig >> "painReduce");
private _hrIncreaseLow = getArray (_medicationConfig >> "hrIncreaseLow");
private _hrIncreaseNorm = getArray (_medicationConfig >> "hrIncreaseNormal");
@ -64,7 +64,7 @@ if (isNil _hrCallback) then {
if (!(_hrCallback isEqualType {})) then {_hrCallback = {TRACE_1("callback was NOT code",_hrCallback)};};
// Adjust the heart rate based upon config entry
private _heartRate = _target getVariable [QGVAR(heartRate), 70];
private _heartRate = _target getVariable [QEGVAR(medical,heartRate), 70];
if (alive _target) then {
if (_heartRate > 0) then {
if (_heartRate <= 45) then {
@ -81,16 +81,16 @@ if (alive _target) then {
if (_painReduce > 0) then {
// Reduce pain
private _painSuppress = _target getVariable [QGVAR(painSuppress), 0];
_target setVariable [QGVAR(painSuppress), (_painSuppress + _painReduce) max 0];
private _painSuppress = _target getVariable [QEGVAR(medical,painSuppress), 0];
_target setVariable [QEGVAR(medical,painSuppress), (_painSuppress + _painReduce) max 0];
if (!GVAR(painIsOnlySuppressed)) then {
_pain = _target getVariable [QGVAR(pain), 0];
_target setVariable [QGVAR(pain), (_pain - _painReduce) max 0, true];
_pain = _target getVariable [QEGVAR(medical,pain), 0];
_target setVariable [QEGVAR(medical,pain), (_pain - _painReduce) max 0, true];
};
};
private _resistance = _target getVariable [QGVAR(peripheralResistance), 100];
_target setVariable [QGVAR(peripheralResistance), (_resistance + _viscosityChange) max 0];
private _resistance = _target getVariable [QEGVAR(medical,peripheralResistance), 100];
_target setVariable [QEGVAR(medical,peripheralResistance), (_resistance + _viscosityChange) max 0];
// Call back to ensure that the medication is decreased over time
[_target, _classname, _varName, _maxDose, _timeInSystem, _inCompatableMedication, _viscosityChange, _painReduce] call FUNC(onMedicationUsage);

View File

@ -21,7 +21,7 @@ private "_bandagedWounds";
params ["_args", "_elapsedTime", "_totalTime"];
_args params ["_caller", "_target"];
_bandagedWounds = _target getVariable [QGVAR(bandagedWounds), []];
_bandagedWounds = _target getVariable [QEGVAR(medical,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 };
@ -29,7 +29,7 @@ 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];
_target setVariable [QEGVAR(medical,bandagedWounds), _bandagedWounds, true];
};
true

View File

@ -23,5 +23,5 @@ private _bloodAdded = switch (true) do {
default {BLOODBAGHEAL};
};
private _blood = ((_target getVariable [QGVAR(bloodVolume), 100]) + _bloodAdded) min 100;
_target setVariable [QGVAR(bloodVolume), _blood, true];
private _blood = ((_target getVariable [QEGVAR(medical,bloodVolume), 100]) + _bloodAdded) min 100;
_target setVariable [QEGVAR(medical,bloodVolume), _blood, true];

View File

@ -19,6 +19,6 @@ params ["_caller", "_target","_className"];
[_target, false] call FUNC(setUnconscious);
if (_target getVariable [QGVAR(inReviveState), false]) then {
_target setVariable [QGVAR(inReviveState), nil, true];
if (_target getVariable [QEGVAR(medical,inReviveState), false]) then {
_target setVariable [QEGVAR(medical,inReviveState), nil, true];
};

View File

@ -18,10 +18,10 @@
params ["_target"];
// reduce pain, pain sensitivity
private _morphine = ((_target getVariable [QGVAR(morphine), 0]) + MORPHINEHEAL) min 1;
_target setVariable [QGVAR(morphine), _morphine, true];
private _morphine = ((_target getVariable [QEGVAR(medical,morphine), 0]) + MORPHINEHEAL) min 1;
_target setVariable [QEGVAR(medical,morphine), _morphine, true];
private _pain = ((_target getVariable [QGVAR(pain), 0]) - MORPHINEHEAL) max 0;
_target setVariable [QGVAR(pain), _pain, true];
private _pain = ((_target getVariable [QEGVAR(medical,pain), 0]) - MORPHINEHEAL) max 0;
_target setVariable [QEGVAR(medical,pain), _pain, true];
// @todo overdose

View File

@ -29,7 +29,7 @@ if (local _target) then {
};
[_target, _removeItem] call FUNC(addToTriageCard);
[_target, "activity", LSTRING(Activity_gaveIV), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_gaveIV), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
[_target, "activity", ELSTRING(medical,Activity_gaveIV), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", ELSTRING(medical,Activity_gaveIV), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
true

View File

@ -17,11 +17,11 @@
params ["_target", "_treatmentClassname"];
private _bloodVolume = _target getVariable [QGVAR(bloodVolume), 100];
private _bloodVolume = _target getVariable [QEGVAR(medical,bloodVolume), 100];
if (_bloodVolume >= 100) exitWith {};
// Find the proper attributes for the used IV
private _config = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "IV");
private _config = (configFile >> "ace_medical_treatment" >> "IV");
private _volumeAdded = getNumber (_config >> "volume");
private _typeOf = getText (_config >> "type");
@ -36,7 +36,7 @@ if (isClass (_config >> _treatmentClassname)) then {
private _varName = format["ACE_Medical_IVVolume_%1",_typeOf];
_target setVariable [_varName, (_target getVariable [_varName, 0]) + _volumeAdded, true];
if !(_varName in GVAR(IVBags)) then {
GVAR(IVBags) pushBack _varName;
publicVariable QGVAR(IVBags);
if !(_varName in EGVAR(medical,IVBags)) then {
EGVAR(medical,IVBags) pushBack _varName;
publicVariable QEGVAR(medical,IVBags)
};

View File

@ -21,13 +21,13 @@ params ["_caller", "_target", "_selectionName", "_className", "_items"];
if (count _items == 0) exitWith {false};
private _part = [_selectionName] call FUNC(selectionNameToNumber);
private _part = [_selectionName] call EFUNC(medical,selectionNameToNumber);
if (_part == 0 || _part == 1) exitWith {
// [QEGVAR(common,displayTextStructured), ["You cannot apply a CAT on this body part!"], [_caller]] call CBA_fnc_targetEvent;
false;
};
private _tourniquets = _target getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]];
private _tourniquets = _target getVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0]];
if ((_tourniquets select _part) > 0) exitWith {
_output = "There is already a tourniquet on this body part!"; // TODO localization
[QEGVAR(common,displayTextStructured), [_output, 1.5, _caller], [_caller]] call CBA_fnc_targetEvent;
@ -42,7 +42,7 @@ if (local _target) then {
};
[_target, _removeItem] call FUNC(addToTriageCard);
[_target, "activity", LSTRING(Activity_appliedTourniquet), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_appliedTourniquet), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
[_target, "activity", ELSTRING(medical,Activity_appliedTourniquet), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", ELSTRING(medical,Activity_appliedTourniquet), [[_caller, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
true

View File

@ -16,11 +16,11 @@
params ["_target", "_tourniquetItem", "_selectionName"];
//If we're not already tracking vitals, start:
[_target] call FUNC(addVitalLoop);
[_target] call EFUNC(medical,addVitalLoop);
private _part = [_selectionName] call FUNC(selectionNameToNumber);
private _part = [_selectionName] call EFUNC(medical,selectionNameToNumber);
// Place a tourniquet on the bodypart
private _tourniquets = _target getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]];
private _tourniquets = _target getVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0]];
_tourniquets set [_part, CBA_missionTime];
_target setVariable [QGVAR(tourniquets), _tourniquets, true];
_target setVariable [QEGVAR(medical,tourniquets), _tourniquets, true];

View File

@ -0,0 +1,73 @@
/*
* Author: KoffeinFlummi, Glowbal
* Callback when the treatment fails
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
* 2: SelectionName <STRING>
* 3: Treatment classname <STRING>
* 4: Items available <ARRAY<STRING>>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_args"];
_args params ["_caller", "_target", "_selectionName", "_className", "_items", "_usersOfItems"];
if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then {
_caller removeWeapon "ACE_FakePrimaryWeapon";
};
if (vehicle _caller == _caller) then {
private _lastAnim = _caller getVariable [QGVAR(treatmentPrevAnimCaller), ""];
//Don't play another medic animation (when player is rapidily treating)
TRACE_2("Reseting to old animation", animationState player, _lastAnim);
switch (toLower _lastAnim) do {
case "ainvpknlmstpslaywrfldnon_medic": {_lastAnim = "AmovPknlMstpSrasWrflDnon"};
case "ainvppnemstpslaywrfldnon_medic": {_lastAnim = "AmovPpneMstpSrasWrflDnon"};
case "ainvpknlmstpslaywnondnon_medic": {_lastAnim = "AmovPknlMstpSnonWnonDnon"};
case "ainvppnemstpslaywpstdnon_medic": {_lastAnim = "AinvPpneMstpSlayWpstDnon"};
case "ainvpknlmstpslaywpstdnon_medic": {_lastAnim = "AmovPknlMstpSrasWpstDnon"};
};
[_caller, _lastAnim, 2] call EFUNC(common,doAnimation);
};
_caller setVariable [QGVAR(treatmentPrevAnimCaller), nil];
private _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnTreatment), []]);
if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") && {_previousWeapon in (weapons _caller)}}) then {
for "_index" from 0 to 99 do {
_caller action ["SwitchWeapon", _caller, _caller, _index];
//Just check weapon, muzzle and mode (ignore ammo in case they were reloading)
if (((weaponState _caller) select [0,3]) isEqualTo (_weaponSelect select [0,3])) exitWith {TRACE_1("Restoring", (weaponState _caller));};
if ((weaponState _caller) isEqualTo ["","","","",0]) exitWith {ERROR("weaponState not found");};
};
} else {
_caller action ["SwitchWeapon", _caller, _caller, 99];
};
{
_x params ["_unit", "_item"];
_unit addItem _item;
} forEach _usersOfItems;
// Record specific callback
private _config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className);
if (EGVAR(medical,level) >= 2) then {
_config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className);
};
private _callback = getText (_config >> "callbackFailure");
_callback = if (isNil _callback) then {
compile _callback
} else {
missionNamespace getVariable _callback
};
if (!(_callback isEqualType {})) then {_callback = {TRACE_1("callback was NOT code",_callback)};};
_args call _callback;

View File

@ -0,0 +1,91 @@
/*
* Author: KoffeinFlummi, Glowbal
* Callback when the treatment is completed
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
* 2: SelectionName <STRING>
* 3: Treatment classname <STRING>
* 4: Items available <ARRAY<STRING>>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_args"];
_args params ["_caller", "_target", "_selectionName", "_className", "_items", "_usersOfItems"];
if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then {
_caller removeWeapon "ACE_FakePrimaryWeapon";
};
if (vehicle _caller == _caller) then {
private _lastAnim = _caller getVariable [QGVAR(treatmentPrevAnimCaller), ""];
//Don't play another medic animation (when player is rapidily treating)
TRACE_2("Reseting to old animation", animationState player, _lastAnim);
switch (toLower _lastAnim) do {
case "ainvpknlmstpslaywrfldnon_medic": {_lastAnim = "AmovPknlMstpSrasWrflDnon"};
case "ainvppnemstpslaywrfldnon_medic": {_lastAnim = "AmovPpneMstpSrasWrflDnon"};
case "ainvpknlmstpslaywnondnon_medic": {_lastAnim = "AmovPknlMstpSnonWnonDnon"};
case "ainvppnemstpslaywpstdnon_medic": {_lastAnim = "AinvPpneMstpSlayWpstDnon"};
case "ainvpknlmstpslaywpstdnon_medic": {_lastAnim = "AmovPknlMstpSrasWpstDnon"};
};
[_caller, _lastAnim, 2] call EFUNC(common,doAnimation);
};
_caller setVariable [QGVAR(treatmentPrevAnimCaller), nil];
private _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnTreatment), []]);
if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") && {_previousWeapon in (weapons _caller)}}) then {
for "_index" from 0 to 99 do {
_caller action ["SwitchWeapon", _caller, _caller, _index];
//Just check weapon, muzzle and mode (ignore ammo in case they were reloading)
if (((weaponState _caller) select [0,3]) isEqualTo (_weaponSelect select [0,3])) exitWith {TRACE_1("Restoring", (weaponState _caller));};
if ((weaponState _caller) isEqualTo ["","","","",0]) exitWith {ERROR("weaponState not found");};
};
} else {
_caller action ["SwitchWeapon", _caller, _caller, 99];
};
// Record specific callback
private _config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className);
if (EGVAR(medical,level) >= 2) then {
_config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className);
};
private _callback = getText (_config >> "callbackSuccess");
if (isNil _callback) then {
_callback = compile _callback;
} else {
_callback = missionNamespace getVariable _callback;
};
if (!(_callback isEqualType {})) then {_callback = {TRACE_1("callback was NOT code",_callback)};};
//Get current blood loose on limb (for "bloody" litter)
private _bloodLossOnSelection = 0;
private _partNumber = ([_selectionName] call EFUNC(medical,selectionNameToNumber)) max 0;
// Add all bleeding from wounds on selection
private _openWounds = _target getvariable [QEGVAR(medical,openWounds), []];
{
_x params ["", "", "_selectionX", "_amountOf", "_percentageOpen"];
if (_selectionX == _partNumber) then {
_bloodLossOnSelection = _bloodLossOnSelection + (_amountOf * _percentageOpen);
};
} forEach _openWounds;
TRACE_1("advanced",_bloodLossOnSelection);
_args call _callback;
_args pushBack _bloodLossOnSelection;
_args call FUNC(createLitter);
//If we're not already tracking vitals, start:
if (!(_target getVariable [QEGVAR(medical,addedToUnitLoop),false])) then {
[_target] call EFUNC(medical,addVitalLoop);
};
["ace_treatmentSuccess", [_caller, _target, _selectionName, _className]] call CBA_fnc_localEvent;

View File

@ -18,11 +18,11 @@
params ["_medic", "_patient", "_item"];
if (isNil QGVAR(setting_allowSharedEquipment)) then {
GVAR(setting_allowSharedEquipment) = true;
if (isNil QEGVAR(medical,setting_allowSharedEquipment)) then {
EGVAR(medical,setting_allowSharedEquipment)= true;
};
if (GVAR(setting_allowSharedEquipment) && {[_patient, _item] call EFUNC(common,hasItem)}) exitWith {
if (EGVAR(medical,setting_allowSharedEquipment) && {[_patient, _item] call EFUNC(common,hasItem)}) exitWith {
if (local _patient) then {
["ace_useItem", [_patient, _item]] call CBA_fnc_localEvent;
} else {

View File

@ -0,0 +1 @@
#include "\z\ace\addons\medical_treatment\script_component.hpp"

View File

@ -0,0 +1,19 @@
#define COMPONENT medical_treatment
#include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_MEDICAL_TREATMENT
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_MEDICAL_TREATMENT
#define DEBUG_SETTINGS DEBUG_SETTINGS_MEDICAL_TREATMENT
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#define USE_WOUND_EVENT_SYNC false

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Medical_Treatment">
</Package>
</Project>