mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
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:
parent
295ad3b037
commit
a8831a0d16
File diff suppressed because it is too large
Load Diff
@ -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 {};
|
||||
|
@ -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);
|
||||
|
@ -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"];
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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);
|
||||
};
|
@ -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);
|
||||
};
|
@ -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;
|
@ -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;
|
@ -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
|
||||
};
|
@ -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);
|
||||
|
1
addons/medical_treatment/$PBOPREFIX$
Normal file
1
addons/medical_treatment/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\medical_treatment
|
@ -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
|
@ -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));
|
1065
addons/medical_treatment/ACE_Medical_Treatments.hpp
Normal file
1065
addons/medical_treatment/ACE_Medical_Treatments.hpp
Normal file
File diff suppressed because it is too large
Load Diff
2
addons/medical_treatment/ACE_Settings.hpp
Normal file
2
addons/medical_treatment/ACE_Settings.hpp
Normal file
@ -0,0 +1,2 @@
|
||||
class ACE_Settings {
|
||||
};
|
6
addons/medical_treatment/CfgActions.hpp
Normal file
6
addons/medical_treatment/CfgActions.hpp
Normal file
@ -0,0 +1,6 @@
|
||||
class CfgActions {
|
||||
class None;
|
||||
class Heal: None {
|
||||
show = 0;
|
||||
};
|
||||
};
|
18
addons/medical_treatment/CfgEventHandlers.hpp
Normal file
18
addons/medical_treatment/CfgEventHandlers.hpp
Normal 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));
|
||||
};
|
||||
};
|
58
addons/medical_treatment/CfgVehicles.hpp
Normal file
58
addons/medical_treatment/CfgVehicles.hpp
Normal 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"};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
12
addons/medical_treatment/README.md
Normal file
12
addons/medical_treatment/README.md
Normal 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)
|
52
addons/medical_treatment/XEH_PREP.hpp
Normal file
52
addons/medical_treatment/XEH_PREP.hpp
Normal 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);
|
23
addons/medical_treatment/XEH_postInit.sqf
Normal file
23
addons/medical_treatment/XEH_postInit.sqf
Normal 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;};
|
7
addons/medical_treatment/XEH_preInit.sqf
Normal file
7
addons/medical_treatment/XEH_preInit.sqf
Normal file
@ -0,0 +1,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
ADDON = true;
|
3
addons/medical_treatment/XEH_preStart.sqf
Normal file
3
addons/medical_treatment/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
17
addons/medical_treatment/XEH_respawn.sqf
Normal file
17
addons/medical_treatment/XEH_respawn.sqf
Normal 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;
|
||||
};
|
44
addons/medical_treatment/config.cpp
Normal file
44
addons/medical_treatment/config.cpp
Normal 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);
|
||||
};
|
@ -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);
|
||||
};
|
@ -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);
|
||||
};
|
@ -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;
|
||||
|
46
addons/medical_treatment/functions/fnc_actionDiagnose.sqf
Normal file
46
addons/medical_treatment/functions/fnc_actionDiagnose.sqf
Normal 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;
|
@ -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);
|
@ -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];
|
@ -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";
|
@ -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];
|
||||
};
|
@ -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;
|
@ -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
|
@ -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;
|
97
addons/medical_treatment/functions/fnc_canTreat.sqf
Normal file
97
addons/medical_treatment/functions/fnc_canTreat.sqf
Normal 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;
|
23
addons/medical_treatment/functions/fnc_canTreatCached.sqf
Normal file
23
addons/medical_treatment/functions/fnc_canTreatCached.sqf
Normal 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);
|
@ -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"];
|
||||
};
|
76
addons/medical_treatment/functions/fnc_displayTriageCard.sqf
Normal file
76
addons/medical_treatment/functions/fnc_displayTriageCard.sqf
Normal 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;
|
||||
};
|
@ -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;
|
||||
};
|
28
addons/medical_treatment/functions/fnc_getTriageStatus.sqf
Normal file
28
addons/medical_treatment/functions/fnc_getTriageStatus.sqf
Normal 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
|
120
addons/medical_treatment/functions/fnc_handleBandageOpening.sqf
Normal file
120
addons/medical_treatment/functions/fnc_handleBandageOpening.sqf
Normal 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;
|
||||
};
|
@ -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
|
||||
};
|
||||
|
26
addons/medical_treatment/functions/fnc_isBeingCarried.sqf
Normal file
26
addons/medical_treatment/functions/fnc_isBeingCarried.sqf
Normal 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
|
26
addons/medical_treatment/functions/fnc_isBeingDragged.sqf
Normal file
26
addons/medical_treatment/functions/fnc_isBeingDragged.sqf
Normal 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
|
@ -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;
|
@ -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)];
|
||||
};
|
||||
};
|
@ -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);
|
241
addons/medical_treatment/functions/fnc_treatment.sqf
Normal file
241
addons/medical_treatment/functions/fnc_treatment.sqf
Normal 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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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
|
||||
};
|
@ -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)
|
@ -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;
|
||||
|
@ -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);
|
@ -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
|
@ -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];
|
@ -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];
|
||||
};
|
@ -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
|
@ -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
|
@ -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)
|
||||
};
|
@ -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
|
@ -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];
|
73
addons/medical_treatment/functions/fnc_treatment_failure.sqf
Normal file
73
addons/medical_treatment/functions/fnc_treatment_failure.sqf
Normal 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;
|
91
addons/medical_treatment/functions/fnc_treatment_success.sqf
Normal file
91
addons/medical_treatment/functions/fnc_treatment_success.sqf
Normal 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;
|
@ -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 {
|
1
addons/medical_treatment/functions/script_component.hpp
Normal file
1
addons/medical_treatment/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\medical_treatment\script_component.hpp"
|
19
addons/medical_treatment/script_component.hpp
Normal file
19
addons/medical_treatment/script_component.hpp
Normal 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
|
5
addons/medical_treatment/stringtable.xml
Normal file
5
addons/medical_treatment/stringtable.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Medical_Treatment">
|
||||
</Package>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user