Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Placing aed #18

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 29 additions & 19 deletions addons/circulation/CfgVehicles.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ class CfgVehicles {
ace_cargo_canLoad = 1;
};

class kat_AEDItem: Item_Base_F {
class ThingX;
class kat_AEDItem: ThingX {
scope = 2;
scopeCurator = 2;
displayName = CSTRING(AED_DISPLAYNAME);
Expand All @@ -31,58 +32,67 @@ class CfgVehicles {

ACEGVAR(dragging,canDrag) = 1;
ACEGVAR(dragging,canCarry) = 1;
ACEGVAR(dragging,dragPosition)[] = {0,1.1,1};
ACEGVAR(dragging,dragPosition)[] = {0,1.1,0};
ACEGVAR(dragging,carryPosition)[] = {0,1.1,1};

class ACE_Actions {
class ACE_MainActions {
selection = "interaction_point";
distance = 4;
distance = 4.2;
displayName = "AED";
condition = "true";
class KAT_AED_AnalyzeRhythm {
displayName = CSTRING(AnalyzeRhythm);
condition = QUOTE([ARR_2(_player,GVAR(medLvl_AED))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,2)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player,GVAR(medLvl_AED))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,2)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE([ARR_2(_player,(_target getVariable [ARR_2(QQGVAR(Defibrillator_Patient),nil)]))] call FUNC(AED_Analyze));
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_shock.paa);
};
class KAT_AED_Shock {
displayName = CSTRING(Defibrillator_Action_Shock);
condition = QUOTE([ARR_2(_player,GVAR(medLvl_AED))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,3)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player,GVAR(medLvl_AED))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,3)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE((_target getVariable [ARR_2(QQGVAR(Defibrillator_Patient),nil)]) setVariable [ARR_3(QQGVAR(Defibrillator_Charged),false,true)]);
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_shock.paa);
};
class KAT_AED_PlacePads {
displayName = CSTRING(AED_Action_PlacePads);
condition = QUOTE([ARR_2(_player,GVAR(medLvl_AED))] call ACEFUNC(medical_treatment,isMedic) && [ARR_2(_player,_target)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player,GVAR(medLvl_AED))] call ACEFUNC(medical_treatment,isMedic) && [ARR_2(_player,_target)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = "";
insertChildren = QUOTE([ARR_2(_player,_target)] call FUNC(addDefibrillatorActions));
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_pads.paa);
};
class KAT_AED_RemovePads: KAT_AED_PlacePads {
displayName = CSTRING(Defibrillator_Action_RemovePads);
condition = QUOTE([ARR_2(_player,GVAR(medLvl_AED))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,4)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player,GVAR(medLvl_AED))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,4)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE([ARR_4(_player,(_target getVariable [ARR_2(QQGVAR(Defibrillator_Patient),nil)]),'body','DefibrillatorRemovePads')] call ace_medical_treatment_fnc_treatment);
insertChildren = "";
};
};
};
};

class kat_X_AEDItem: kat_AEDItem {
class kat_X_AEDItem: Item_Base_F {
scope = 2;
scopeCurator = 2;
displayName = CSTRING(X_Display);
author = "Katalam";
vehicleClass = "Items";
model = QPATHTOF(models\aedx\aedx.p3d);
class TransportItems {
MACRO_ADDITEM(kat_X_AED,1);
};

ACEGVAR(dragging,canDrag) = 1;
ACEGVAR(dragging,canCarry) = 1;
ACEGVAR(dragging,dragPosition)[] = {0,1.1,0};
ACEGVAR(dragging,carryPosition)[] = {0,1.1,1};

class ACE_Actions {
class ACE_MainActions {
selection = "interaction_point";
distance = 4;
distance = 4.2;
displayName = CSTRING(X_Display);
condition = "true";
class KAT_AED_X_ViewMonitor {
Expand All @@ -94,69 +104,69 @@ class CfgVehicles {
};
class KAT_AED_X_ManualCharge {
displayName = CSTRING(Defibrillator_Action_Charge);
condition = QUOTE([ARR_3(_player,_target,7)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,7)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE([ARR_2(_player,(_target getVariable [ARR_2(QQGVAR(Defibrillator_Patient),nil)]))] call FUNC(Defibrillator_ManualCharge));
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_shock.paa);
};
class KAT_AED_X_CancelCharge {
displayName = CSTRING(Defibrillator_Action_CancelCharge);
condition = QUOTE([ARR_3(_player,_target,8)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,8)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE((_target getVariable [ARR_2(QQGVAR(Defibrillator_Patient),nil)]) setVariable [ARR_3(QQGVAR(DefibrillatorInUse),false,true)]; (_target getVariable [ARR_2(QQGVAR(Defibrillator_Patient),nil)]) setVariable [ARR_3(QQGVAR(Defibrillator_Charged),false,true)]);
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_shock.paa);
};
class KAT_AED_X_Shock {
displayName = CSTRING(Defibrillator_Action_Shock);
condition = QUOTE([ARR_3(_player,_target,3)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,3)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE((_target getVariable QQGVAR(Defibrillator_Patient)) setVariable [ARR_3(QQGVAR(Defibrillator_Charged),false,true)]);
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_shock.paa);
};
class KAT_AED_X_AnalyzeRhythm {
displayName = CSTRING(AnalyzeRhythm);
condition = QUOTE([ARR_3(_player,_target,2)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,2)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE([ARR_3(_player,(_target getVariable [ARR_2(QQGVAR(Defibrillator_Patient),nil)]),'AEDX')] call FUNC(AED_Analyze));
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_shock.paa);
};
class KAT_AED_X_PlacePads {
displayName = CSTRING(AEDX_Action_PlacePads);
condition = QUOTE([ARR_3(_player,_target,1)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,1)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE([ARR_5(_player,(_target getVariable QQGVAR(AED_X_VitalsMonitor_Patient)),'body','AEDXStationPlacePads',[_target])] call EFUNC(misc,treatment));
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_pads.paa);
};
class KAT_AED_X_PlacePadsTo: KAT_AED_X_PlacePads {
displayName = CSTRING(AEDX_Action_PlacePads);
condition = QUOTE([ARR_2(_player,_target)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_2(_player,_target)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = "";
insertChildren = QUOTE([ARR_3(_player,_target,1)] call FUNC(addDefibrillatorActions));
};
class KAT_AED_X_RemovePads: KAT_AED_X_PlacePads {
displayName = CSTRING(Defibrillator_Action_RemovePads);
condition = QUOTE([ARR_3(_player,_target,4)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,4)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE([ARR_4(_player,(_target getVariable [ARR_2(QQGVAR(Defibrillator_Patient),nil)]),'body','DefibrillatorRemovePads')] call EFUNC(misc,treatment));
insertChildren = "";
icon = QPATHTOF(ui\icon_aed_pads.paa);
};
class KAT_AED_X_ConnectMonitor {
displayName = CSTRING(AEDX_Action_ConnectMonitor);
condition = QUOTE([ARR_3(_player,_target,5)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,5)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE([ARR_5(_player,(_target getVariable QQGVAR(Defibrillator_Patient)),'rightarm','AEDXStationConnectVitalsMonitor',[_target])] call EFUNC(misc,treatment));
insertChildren = QUOTE([ARR_3(_player,_target,3)] call FUNC(addDefibrillatorActions));
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_pads.paa);
};
class KAT_AED_X_ConnectMonitorTo: KAT_AED_X_ConnectMonitor {
displayName = CSTRING(AEDX_Action_ConnectMonitor);
condition = QUOTE([ARR_2(_player,_target)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_2(_player,_target)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = "";
insertChildren = QUOTE([ARR_3(_player,_target,2)] call FUNC(addDefibrillatorActions));
};
class KAT_AED_X_DisconnectMonitor {
displayName = CSTRING(AEDX_Action_DisconnectMonitor);
condition = QUOTE([ARR_3(_player,_target,6)] call FUNC(AEDXPlaced_CheckCondition));
condition = QUOTE([ARR_2(_player, GVAR(medLvl_AED_X))] call ACEFUNC(medical_treatment,isMedic) && [ARR_3(_player,_target,6)] call FUNC(DefibrillatorPlaced_CheckCondition));
statement = QUOTE([ARR_4(_player,(_target getVariable QQGVAR(AED_X_VitalsMonitor_Patient)),'rightarm','AEDXDisconnectVitalsMonitor')] call EFUNC(misc,treatment));
showDisabled = 0;
icon = QPATHTOF(ui\icon_aed_pads.paa);
Expand Down
3 changes: 2 additions & 1 deletion addons/circulation/XEH_PREP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ PREP(AED_Charge);
PREP(AED_Shock);
PREP(AEDX_VitalsMonitor_CheckCondition);
PREP(AEDX_VitalsMonitor);
PREP(AEDXPlaced_CheckCondition);
PREP(DefibrillatorPlaced_CheckCondition);
PREP(AEDXPlaced_VitalsMonitor_SetVolume);
PREP(bloodType);
PREP(canDraw);
Expand Down Expand Up @@ -32,6 +32,7 @@ PREP(handleTreatment);
PREP(init);
PREP(measureBloodPressure);
PREP(onCloseDialog);
PREP(placeAED_PickUpAction);
PREP(placeAED);
PREP(removeLog);
PREP(treatmentAdvanced_IV);
Expand Down
4 changes: 3 additions & 1 deletion addons/circulation/XEH_postInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@ GVAR(AEDX_MonitorTarget) = objNull;
params ["_unit"];

[QACEGVAR(medical,FatalVitals), _unit] call CBA_fnc_localEvent;
}] call CBA_fnc_addEventHandler;
}] call CBA_fnc_addEventHandler;

[QGVAR(placeAED_initAction), LINKFUNC(placeAED_PickUpAction)] call CBA_fnc_addEventHandler;
2 changes: 1 addition & 1 deletion addons/circulation/XEH_preInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ PREP_RECOMPILE_END;
true
] call CBA_settings_fnc_init;

//Sets medical level required to pick up/use placed AED/X Station
//Sets medical level required to pick up placed AED/X Station
[
QGVAR(medLvl_AED_Station_Interact),
"LIST",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "..\script_component.hpp"
/*
* Author: Blue
* Checks if placed AED-X can be used (ace actions).
* Checks if placed AED can be used (ace actions).
*
* Arguments:
* 0: Medic <OBJECT>
Expand All @@ -12,7 +12,7 @@
* Can use defibrillator <BOOL>
*
* Example:
* [player, cursorObject, 0] call kat_circulation_fnc_AEDXPlaced_CheckCondition;
* [player, cursorObject, 0] call kat_circulation_fnc_DefibrillatorPlaced_CheckCondition;
*
* Public: No
*/
Expand Down Expand Up @@ -55,4 +55,4 @@ switch (_check) do {
};
};

_condition && [_medic, GVAR(medLvl_AED_X)] call ACEFUNC(medical_treatment,isMedic) && {!(_patient getVariable [QEGVAR(airway,recovery), false]) && (isNull objectParent _patient) && {["",_patient] call ACEFUNC(medical_treatment,canCPR)}};
_condition && {!(_patient getVariable [QEGVAR(airway,recovery), false]) && (isNull objectParent _patient) && {["",_patient] call ACEFUNC(medical_treatment,canCPR)}};
74 changes: 6 additions & 68 deletions addons/circulation/functions/fnc_placeAED.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,15 @@ _unit removeItem _AEDClassName;
private _AED = ([_AEDClassName,"Item"] joinString "") createVehicle (position _unit);

// startCarry
if (stance _unit != "STAND") then {
_AED attachTo [_unit, [0,1.1,1]];
[_unit, _AED] call ACEFUNC(dragging,dropObject_carry);
if (stance _unit == "STAND") then {
[_unit, _AED] call ACEFUNC(dragging,startCarry);
} else {
_AED attachTo [_unit, [0,0.4,0]];
_AED attachTo [_unit, [0,1.1,0.1]];
_unit setVariable [QACEGVAR(dragging,isCarrying), true, true];
[ACEFUNC(dragging,startCarryPFH), 0.2, [_unit, _AED, (CBA_missionTime + 1)]] call CBA_fnc_addPerFrameHandler;
_unit setVariable [QACEGVAR(dragging,carriedObject), _AED, true];
[_unit, _AED] call ACEFUNC(dragging,dropObject_carry);
};

private _pickUpText = LLSTRING(PickUpAED);

private _patient = _unit getVariable [QGVAR(MedicDefibrillator_Patient), objNull];

if !(_patient isEqualTo objNull) then {
Expand All @@ -47,8 +45,6 @@ if !(_patient isEqualTo objNull) then {
};

if (_AEDClassName == "kat_X_AED") then {
_pickUpText = LLSTRING(PickUpAEDX);

private _monitorPatient = _unit getVariable [QGVAR(AED_X_MedicVitalsMonitor_Patient), objNull];

if !(_monitorPatient isEqualTo objNull) then {
Expand All @@ -71,62 +67,4 @@ if (_AEDClassName == "kat_X_AED") then {
};
};

private _action = ["AED_pickupAction",
_pickUpText,
"",
{
params ["_AED", "_medic", "_args"];
_args params ["_AEDClassName"];

_AED setVariable [QGVAR(DefibrillatorInUse), false, true];

private _patient = _AED getVariable [QGVAR(Defibrillator_Patient), objNull];


if !(_patient isEqualTo objNull) then {
[_medic, _patient, true] call FUNC(Defibrillator_RemovePads);

[{
params ["_medic", "_patient", "_AEDClassName"];

[_medic, _patient, 0, _AEDClassName, [], true] call FUNC(Defibrillator_AttachPads);
}, [_medic, _patient, _AEDClassName], 0.1] call CBA_fnc_waitAndExecute;
};

if (_AEDClassName == "kat_X_AED") then {
_AED setVariable [QGVAR(AED_X_VitalsMonitor), false, true];
_medic setVariable [QGVAR(AED_X_VitalsMonitor_Volume), _AED getVariable [QGVAR(AED_X_VitalsMonitor_Volume), false], true];

private _patientMonitor = _AED getVariable [QGVAR(AED_X_VitalsMonitor_Patient), objNull];

if !(_patientMonitor isEqualTo objNull) then {
private _monitorBodyPart = ALL_BODY_PARTS select ((_patientMonitor getVariable [QGVAR(AED_X_VitalsMonitor_Provider), [objNull, -1, 3]]) select 2);

[_medic, _patientMonitor, true] call FUNC(AEDX_DisconnectVitalsMonitor);

[{
params ["_medic", "_patientMonitor", "_monitorBodyPart"];

[_medic, _patientMonitor, _monitorBodyPart, 0, [], true] call FUNC(AEDX_ConnectVitalsMonitor);
}, [_medic, _patientMonitor, _monitorBodyPart], 0.15] call CBA_fnc_waitAndExecute;
};
};

deleteVehicle _AED;
if (_medic canAddItemToUniform _AEDClassName || _medic canAddItemToVest _AEDClassName || _medic canAddItemToBackpack _AEDClassName) then {
_medic addItem _AEDClassName;
} else {
private _droppedAED = createVehicle ["Weapon_Empty", getPosATL _medic, [], 0, "CAN_COLLIDE"];
_droppedAED addItemCargo [_AEDClassName, 1];
[ACELLSTRING(Common,Inventory_Full), 1.5, _medic] call ACEFUNC(common,displayTextStructured);
};
},
{
params ["_AED", "_unit"];

[_unit, GVAR(medLvl_AED_Station_Interact)] call ACEFUNC(medical_treatment,isMedic) && !((_AED getVariable [QGVAR(Defibrillator_Patient), objNull]) getVariable [QGVAR(DefibrillatorInUse), false]);
},
{},
[_AEDClassName]
] call ACEFUNC(interact_menu,createAction);
[_AED, 0, ["ACE_MainActions"], _action] call ACEFUNC(interact_menu,addActionToObject);
[QGVAR(placeAED_initAction), [_AED, _AEDClassName]] call CBA_fnc_globalEvent;
Loading
Loading