From c903f168bd8ed4222da3a7f0048fcf7c8fc929ed Mon Sep 17 00:00:00 2001 From: Drofseh Date: Thu, 28 Sep 2023 20:08:09 -0700 Subject: [PATCH 1/4] add grave digging to body bags --- addons/medical_treatment/XEH_postInit.sqf | 31 +++++++++++++++++-- .../functions/fnc_placeInBodyBagOrGrave.sqf | 13 ++++++-- .../functions/fnc_placeInGrave.sqf | 1 - 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/addons/medical_treatment/XEH_postInit.sqf b/addons/medical_treatment/XEH_postInit.sqf index e943b0c8c3a..67809f84cc0 100644 --- a/addons/medical_treatment/XEH_postInit.sqf +++ b/addons/medical_treatment/XEH_postInit.sqf @@ -62,6 +62,27 @@ if (isServer) then { } forEach (configProperties [configFile >> QEGVAR(medical,replacementItems), "isArray _x"]); }] call CBA_fnc_addEventHandler; + +private _buryBodyBag = [ + QGVAR(buryBodyBag), + LLSTRING(DigGrave), + QPATHTOEF(medical_gui,ui\cross_grave.paa), + { + [ + QGVAR(treatmentTimeGrave), + _this, + { + [[_this#1, _this#0], missionNameSpace getVariable [QGVAR(graveClassname), "Land_Grave_dirt_F"], [0,0,0], missionNameSpace getVariable [QGVAR(graveRotation), -90]] call FUNC(placeInBodyBagOrGrave); + }, + {}, + LLSTRING(DiggingGrave) + ] call EFUNC(common,progressBar); + }, + {[_this#1] call FUNC(canDigGrave)} +] call EFUNC(interact_menu,createAction); + +["ACE_bodyBagObject", 0, ["ACE_MainActions"], _buryBodyBag] call EFUNC(interact_menu,addActionToClass); + if (["ace_trenches"] call EFUNC(common,isModLoaded)) then { if (hasInterface) then { private _checkHeadstoneAction = [ @@ -80,7 +101,7 @@ if (["ace_trenches"] call EFUNC(common,isModLoaded)) then { [1.05, 0.02, 0.3] //position in centre of cross ] call EFUNC(interact_menu,createAction); - ["Land_Grave_dirt_F", 0, [], _checkHeadstoneAction] call EFUNC(interact_menu,addActionToClass); + [missionNameSpace getVariable [QGVAR(graveClassname), "Land_Grave_dirt_F"], 0, [], _checkHeadstoneAction] call EFUNC(interact_menu,addActionToClass); }; if (isServer) then { @@ -88,7 +109,13 @@ if (["ace_trenches"] call EFUNC(common,isModLoaded)) then { params ["_target", "_restingPlace"]; TRACE_2("ace_placedInBodyBag eh",_target,_restingPlace); - private _targetName = [_target, false, true] call EFUNC(common,getName); + private _targetName = ""; + if (typeOf _target == "ACE_bodyBagObject") then { + _targetName = _target getVariable [QGVAR(headstoneData), ""]; + } else { + _targetName = [_target, false, true] call EFUNC(common,getName); + }; + _restingPlace setVariable [QGVAR(headstoneData), _targetName, true]; }] call CBA_fnc_addEventHandler; }; diff --git a/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf b/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf index 33a577da81b..3b978bb345a 100644 --- a/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf +++ b/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf @@ -34,10 +34,17 @@ if (alive _patient) then { [_patient, "buried_alive", _medic] call EFUNC(medical_status,setDead); }; -private _headPos = _patient modelToWorldVisual (_patient selectionPosition "head"); -private _spinePos = _patient modelToWorldVisual (_patient selectionPosition "Spine3"); -private _direction = (_headPos vectorFromTo _spinePos) call CBA_fnc_vectDir; private _position = getPosASL _patient; +private _direction = 0; + +if (typeOf _patient == "ACE_bodyBagObject") then { + _direction getDir _patient; +} else { + private _headPos = _patient modelToWorldVisual (_patient selectionPosition "head"); + private _spinePos = _patient modelToWorldVisual (_patient selectionPosition "Spine3"); + _direction = (_headPos vectorFromTo _spinePos) call CBA_fnc_vectDir; +}; + // apply adjustments _position = _position vectorAdd _offset; _direction = _direction + _rotation; diff --git a/addons/medical_treatment/functions/fnc_placeInGrave.sqf b/addons/medical_treatment/functions/fnc_placeInGrave.sqf index f9ebf582f3f..9b47fcf4694 100644 --- a/addons/medical_treatment/functions/fnc_placeInGrave.sqf +++ b/addons/medical_treatment/functions/fnc_placeInGrave.sqf @@ -28,4 +28,3 @@ private _graveClassname = missionNameSpace getVariable [QGVAR(graveClassname), " private _graveRotation = missionNameSpace getVariable [QGVAR(graveRotation), 90]; [_this, _graveClassname, [0,0,0], _graveRotation] call FUNC(placeInBodyBagOrGrave); - From b187328fa5d9bf644c2e55f2b4865b12c3569300 Mon Sep 17 00:00:00 2001 From: Drofseh Date: Fri, 29 Sep 2023 13:56:15 -0700 Subject: [PATCH 2/4] move buryBodyBag action to config, change grave ui icon to headstone --- addons/medical_gui/ui/grave.paa | Bin 0 -> 5625 bytes .../ACE_Medical_Treatment_Actions.hpp | 2 +- addons/medical_treatment/CfgVehicles.hpp | 7 ++++ addons/medical_treatment/XEH_postInit.sqf | 32 +++--------------- .../functions/fnc_placeBodyBagInGrave.sqf | 30 ++++++++++++++++ .../functions/fnc_placeInBodyBagOrGrave.sqf | 2 +- 6 files changed, 43 insertions(+), 30 deletions(-) create mode 100644 addons/medical_gui/ui/grave.paa create mode 100644 addons/medical_treatment/functions/fnc_placeBodyBagInGrave.sqf diff --git a/addons/medical_gui/ui/grave.paa b/addons/medical_gui/ui/grave.paa new file mode 100644 index 0000000000000000000000000000000000000000..ccd786d73c867343793e8e35c9f4a61822bfe9e6 GIT binary patch literal 5625 zcmeHLK}-`t6#ZM-NDrhnx?BvQi5v_@Pll`87+NtjF4!@6D;ICAwE}CnlHx zXrU#o3^XtU8Vt<#cxQV!2Vkt9osT&24JUp@Vx~XK5boGOqCajj z1lD!EQMn;|7=Bf~anStqqyA>hKhk&t_#?hQ%|G>H_^tRGQ~>V$7p)Pd@~@cxn)^GA zBcUx`-UU24{&oK4U|~=CqZ-J11E*h^t-4plf9m@mhIOL)uX6O18d~w6&He9`rn}0l zn16ibrS+z1jEP0IxF5XhEDsktIFZYojj8l90OM1QhG(H`TM#t>zJU^O8e#unHSBb}L zj-Qc-x0F7(LVCT1Q9LcG|j{HniE{K{Uv z{9t49k9=z0<+ctpxb4gMFf5c32Ah(9uBcx(pF1Fccf~<(fNuC4|p+fOkj5C#AM literal 0 HcmV?d00001 diff --git a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp index 9ed1b2998e2..b7fd0ac3bd1 100644 --- a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp +++ b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp @@ -256,7 +256,7 @@ class GVAR(actions) { class Grave: BodyBag { displayName = CSTRING(DigGrave); displayNameProgress = CSTRING(DiggingGrave); - icon = QPATHTOEF(medical_gui,ui\cross_grave.paa); + icon = QPATHTOEF(medical_gui,ui\grave.paa); treatmentTime = QGVAR(treatmentTimeGrave); condition = QFUNC(canDigGrave); callbackSuccess = QFUNC(placeInGrave); diff --git a/addons/medical_treatment/CfgVehicles.hpp b/addons/medical_treatment/CfgVehicles.hpp index bb9ea8054ff..dd99ab176df 100644 --- a/addons/medical_treatment/CfgVehicles.hpp +++ b/addons/medical_treatment/CfgVehicles.hpp @@ -29,6 +29,13 @@ class CfgVehicles { statement = ""; icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa"; selection = ""; + class GVAR(buryBodyBag) { + displayName = CSTRING(DigGrave); + distance = HANDCUFFS_DISTANCE; + condition = QUOTE([_this#1] call FUNC(canDigGrave)); + statement = QUOTE(_this call FUNC(placeBodyBagInGrave)); + icon = QPATHTOEF(medical_gui,ui\grave.paa); + }; }; }; }; diff --git a/addons/medical_treatment/XEH_postInit.sqf b/addons/medical_treatment/XEH_postInit.sqf index 67809f84cc0..a456ef3cd23 100644 --- a/addons/medical_treatment/XEH_postInit.sqf +++ b/addons/medical_treatment/XEH_postInit.sqf @@ -62,46 +62,22 @@ if (isServer) then { } forEach (configProperties [configFile >> QEGVAR(medical,replacementItems), "isArray _x"]); }] call CBA_fnc_addEventHandler; - -private _buryBodyBag = [ - QGVAR(buryBodyBag), - LLSTRING(DigGrave), - QPATHTOEF(medical_gui,ui\cross_grave.paa), - { - [ - QGVAR(treatmentTimeGrave), - _this, - { - [[_this#1, _this#0], missionNameSpace getVariable [QGVAR(graveClassname), "Land_Grave_dirt_F"], [0,0,0], missionNameSpace getVariable [QGVAR(graveRotation), -90]] call FUNC(placeInBodyBagOrGrave); - }, - {}, - LLSTRING(DiggingGrave) - ] call EFUNC(common,progressBar); - }, - {[_this#1] call FUNC(canDigGrave)} -] call EFUNC(interact_menu,createAction); - -["ACE_bodyBagObject", 0, ["ACE_MainActions"], _buryBodyBag] call EFUNC(interact_menu,addActionToClass); - if (["ace_trenches"] call EFUNC(common,isModLoaded)) then { if (hasInterface) then { private _checkHeadstoneAction = [ QGVAR(checkHeadstone), LLSTRING(checkHeadstoneName), - QPATHTOEF(medical_gui,ui\cross_grave.paa), + QPATHTOEF(medical_gui,ui\grave.paa), { [ [_target getVariable QGVAR(headstoneData)], true ] call CBA_fnc_notify; }, - {!isNil {_target getVariable QGVAR(headstoneData)}}, - {}, - [], - [1.05, 0.02, 0.3] //position in centre of cross + {!isNil {_target getVariable QGVAR(headstoneData)}} ] call EFUNC(interact_menu,createAction); - [missionNameSpace getVariable [QGVAR(graveClassname), "Land_Grave_dirt_F"], 0, [], _checkHeadstoneAction] call EFUNC(interact_menu,addActionToClass); + [missionNameSpace getVariable [QGVAR(graveClassname), "ACE_Grave"], 0, [], _checkHeadstoneAction] call EFUNC(interact_menu,addActionToClass); }; if (isServer) then { @@ -110,7 +86,7 @@ if (["ace_trenches"] call EFUNC(common,isModLoaded)) then { TRACE_2("ace_placedInBodyBag eh",_target,_restingPlace); private _targetName = ""; - if (typeOf _target == "ACE_bodyBagObject") then { + if (_patient isKindOf "ACE_bodyBagObject") then { _targetName = _target getVariable [QGVAR(headstoneData), ""]; } else { _targetName = [_target, false, true] call EFUNC(common,getName); diff --git a/addons/medical_treatment/functions/fnc_placeBodyBagInGrave.sqf b/addons/medical_treatment/functions/fnc_placeBodyBagInGrave.sqf new file mode 100644 index 00000000000..87a80a45e36 --- /dev/null +++ b/addons/medical_treatment/functions/fnc_placeBodyBagInGrave.sqf @@ -0,0 +1,30 @@ +#include "..\script_component.hpp" +/* + * Author: drofseh + * Places a body bag inside a grave. + * + * Arguments: + * 0: Medic + * 1: Patient + * + * Return Value: + * None + * + * Example: + * [cursorObject, player] call ace_medical_treatment_fnc_placeBodyBagInGrave + * + * Public: No + */ + +params ["_bodybag"]; +TRACE_1("placeBodyBagInGrave",_bodybag); + +[ + QGVAR(treatmentTimeGrave), + _this, + { + [[_this#1, _this#0], missionNameSpace getVariable [QGVAR(graveClassname), "ACE_Grave"], [0,0,0], missionNameSpace getVariable [QGVAR(graveRotation), 0]] call FUNC(placeInBodyBagOrGrave); + }, + {}, + LLSTRING(DiggingGrave) +] call EFUNC(common,progressBar); diff --git a/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf b/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf index 3b978bb345a..20ba3f087bf 100644 --- a/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf +++ b/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf @@ -37,7 +37,7 @@ if (alive _patient) then { private _position = getPosASL _patient; private _direction = 0; -if (typeOf _patient == "ACE_bodyBagObject") then { +if (_patient isKindOf "ACE_bodyBagObject") then { _direction getDir _patient; } else { private _headPos = _patient modelToWorldVisual (_patient selectionPosition "head"); From a19ff7d5624b36f8301725a37aaeba6e413b765d Mon Sep 17 00:00:00 2001 From: Drofseh Date: Sat, 30 Sep 2023 17:47:01 -0700 Subject: [PATCH 3/4] improvements from code review --- addons/medical_treatment/CfgVehicles.hpp | 1 - addons/medical_treatment/XEH_postInit.sqf | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/medical_treatment/CfgVehicles.hpp b/addons/medical_treatment/CfgVehicles.hpp index dd99ab176df..05a9eda7770 100644 --- a/addons/medical_treatment/CfgVehicles.hpp +++ b/addons/medical_treatment/CfgVehicles.hpp @@ -31,7 +31,6 @@ class CfgVehicles { selection = ""; class GVAR(buryBodyBag) { displayName = CSTRING(DigGrave); - distance = HANDCUFFS_DISTANCE; condition = QUOTE([_this#1] call FUNC(canDigGrave)); statement = QUOTE(_this call FUNC(placeBodyBagInGrave)); icon = QPATHTOEF(medical_gui,ui\grave.paa); diff --git a/addons/medical_treatment/XEH_postInit.sqf b/addons/medical_treatment/XEH_postInit.sqf index a456ef3cd23..70d45e991c6 100644 --- a/addons/medical_treatment/XEH_postInit.sqf +++ b/addons/medical_treatment/XEH_postInit.sqf @@ -86,12 +86,12 @@ if (["ace_trenches"] call EFUNC(common,isModLoaded)) then { TRACE_2("ace_placedInBodyBag eh",_target,_restingPlace); private _targetName = ""; - if (_patient isKindOf "ACE_bodyBagObject") then { + if (_target isKindOf "ACE_bodyBagObject") then { _targetName = _target getVariable [QGVAR(headstoneData), ""]; } else { _targetName = [_target, false, true] call EFUNC(common,getName); }; - + _restingPlace setVariable [QGVAR(headstoneData), _targetName, true]; }] call CBA_fnc_addEventHandler; }; From a19b7d16c778c3e0fc96f88753eb7dea11bf68ed Mon Sep 17 00:00:00 2001 From: Drofseh Date: Sat, 30 Sep 2023 20:10:05 -0700 Subject: [PATCH 4/4] switch direction check to man instead of bodybag, nominally allowing anything to be buried --- .../functions/fnc_placeInBodyBagOrGrave.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf b/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf index 20ba3f087bf..de539262f13 100644 --- a/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf +++ b/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf @@ -37,12 +37,12 @@ if (alive _patient) then { private _position = getPosASL _patient; private _direction = 0; -if (_patient isKindOf "ACE_bodyBagObject") then { - _direction getDir _patient; -} else { +if (_patient isKindOf "CaManBase") then { private _headPos = _patient modelToWorldVisual (_patient selectionPosition "head"); private _spinePos = _patient modelToWorldVisual (_patient selectionPosition "Spine3"); _direction = (_headPos vectorFromTo _spinePos) call CBA_fnc_vectDir; +} else { + _direction getDir _patient; }; // apply adjustments