From 3c267efd542621ed2200aaabeec9e4f829a8ef41 Mon Sep 17 00:00:00 2001 From: Salluci <69561145+Salluci@users.noreply.github.com> Date: Wed, 26 Jan 2022 06:09:05 -0300 Subject: [PATCH 1/5] carry item on unload --- addons/cargo/XEH_PREP.hpp | 1 + addons/cargo/XEH_postInit.sqf | 2 -- .../cargo/functions/fnc_unloadCarryItem.sqf | 29 +++++++++++++++++++ addons/cargo/functions/fnc_unloadItem.sqf | 4 +++ addons/dragging/script_component.hpp | 4 +-- 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 addons/cargo/functions/fnc_unloadCarryItem.sqf diff --git a/addons/cargo/XEH_PREP.hpp b/addons/cargo/XEH_PREP.hpp index aa1600b82db..95fefb4ba02 100644 --- a/addons/cargo/XEH_PREP.hpp +++ b/addons/cargo/XEH_PREP.hpp @@ -19,5 +19,6 @@ PREP(setSize); PREP(setSpace); PREP(startLoadIn); PREP(startUnload); +PREP(unloadCarryItem); PREP(unloadItem); PREP(validateCargoSpace); diff --git a/addons/cargo/XEH_postInit.sqf b/addons/cargo/XEH_postInit.sqf index 6156cce1acb..3ec9801cbc2 100644 --- a/addons/cargo/XEH_postInit.sqf +++ b/addons/cargo/XEH_postInit.sqf @@ -50,8 +50,6 @@ GVAR(interactionParadrop) = false; createDialog QGVAR(menu); }; - - // TOOO maybe drag/carry the unloaded item? }] call CBA_fnc_addEventHandler; [QGVAR(serverUnload), { diff --git a/addons/cargo/functions/fnc_unloadCarryItem.sqf b/addons/cargo/functions/fnc_unloadCarryItem.sqf new file mode 100644 index 00000000000..8a6096a29ab --- /dev/null +++ b/addons/cargo/functions/fnc_unloadCarryItem.sqf @@ -0,0 +1,29 @@ +#include "script_component.hpp" +/* + * Author: GhostIsSpooky + * Dragging integration. Unloader starts carrying unloaded object. + * + * Arguments: + * 0: Item + * 1: Unloader (default: objNull) + * + * Return Value: + * None + * + * Example: + * [object, vehicle] call ace_cargo_fnc_unloadCarryItem + * + * Public: No + */ +params ["_unloader", "_object"]; + +if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {false}; + +switch (true) do { + case ([_unloader, _object] call EFUNC(dragging,canCarry)): { + [_unloader, _object] call EFUNC(dragging,startCarry); + }; + case ([_unloader, _object] call EFUNC(dragging,canDrag)): { + [_unloader, _object] call EFUNC(dragging,startDrag); + }; +}; diff --git a/addons/cargo/functions/fnc_unloadItem.sqf b/addons/cargo/functions/fnc_unloadItem.sqf index 791141c5354..26642c5d81c 100644 --- a/addons/cargo/functions/fnc_unloadItem.sqf +++ b/addons/cargo/functions/fnc_unloadItem.sqf @@ -60,6 +60,10 @@ if (_object isEqualType objNull) then { [QEGVAR(common,fixCollision), _object] call CBA_fnc_localEvent; [QEGVAR(common,fixPosition), _object] call CBA_fnc_localEvent; }; + +// Dragging integration +[_unloader, _object] call FUNC(unloadCarryItem); + // Invoke listenable event ["ace_cargoUnloaded", [_object, _vehicle, "unload"]] call CBA_fnc_globalEvent; true diff --git a/addons/dragging/script_component.hpp b/addons/dragging/script_component.hpp index 12ed8efff3a..a93644327ee 100644 --- a/addons/dragging/script_component.hpp +++ b/addons/dragging/script_component.hpp @@ -2,8 +2,8 @@ #define COMPONENT_BEAUTIFIED Dragging #include "\z\ace\addons\main\script_mod.hpp" -// #define DEBUG_MODE_FULL -// #define DISABLE_COMPILE_CACHE +#define DEBUG_MODE_FULL +#define DISABLE_COMPILE_CACHE // #define ENABLE_PERFORMANCE_COUNTERS #ifdef DEBUG_ENABLED_DRAGGING From 1d383bcb26462b7b5b60aef7a4a79d34351cf0c9 Mon Sep 17 00:00:00 2001 From: Salluci <69561145+Salluci@users.noreply.github.com> Date: Wed, 26 Jan 2022 06:10:45 -0300 Subject: [PATCH 2/5] debug off --- addons/cargo/functions/fnc_unloadCarryItem.sqf | 2 +- addons/dragging/script_component.hpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/cargo/functions/fnc_unloadCarryItem.sqf b/addons/cargo/functions/fnc_unloadCarryItem.sqf index 8a6096a29ab..7478c1a69fb 100644 --- a/addons/cargo/functions/fnc_unloadCarryItem.sqf +++ b/addons/cargo/functions/fnc_unloadCarryItem.sqf @@ -17,7 +17,7 @@ */ params ["_unloader", "_object"]; -if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {false}; +if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {}; switch (true) do { case ([_unloader, _object] call EFUNC(dragging,canCarry)): { diff --git a/addons/dragging/script_component.hpp b/addons/dragging/script_component.hpp index a93644327ee..12ed8efff3a 100644 --- a/addons/dragging/script_component.hpp +++ b/addons/dragging/script_component.hpp @@ -2,8 +2,8 @@ #define COMPONENT_BEAUTIFIED Dragging #include "\z\ace\addons\main\script_mod.hpp" -#define DEBUG_MODE_FULL -#define DISABLE_COMPILE_CACHE +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE // #define ENABLE_PERFORMANCE_COUNTERS #ifdef DEBUG_ENABLED_DRAGGING From 8073b2f13380a9028f6ee34aab72a62398d09f36 Mon Sep 17 00:00:00 2001 From: Salluci <69561145+Salluci@users.noreply.github.com> Date: Wed, 26 Jan 2022 06:12:14 -0300 Subject: [PATCH 3/5] fix function header --- addons/cargo/functions/fnc_unloadCarryItem.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/cargo/functions/fnc_unloadCarryItem.sqf b/addons/cargo/functions/fnc_unloadCarryItem.sqf index 7478c1a69fb..8973bbd743c 100644 --- a/addons/cargo/functions/fnc_unloadCarryItem.sqf +++ b/addons/cargo/functions/fnc_unloadCarryItem.sqf @@ -4,14 +4,14 @@ * Dragging integration. Unloader starts carrying unloaded object. * * Arguments: - * 0: Item - * 1: Unloader (default: objNull) + * 0: Unloader + * 1: Item * * Return Value: * None * * Example: - * [object, vehicle] call ace_cargo_fnc_unloadCarryItem + * [player, object] call ace_cargo_fnc_unloadCarryItem * * Public: No */ From 23d2d67f717f79ef20cd771b1da364a3432ed2ab Mon Sep 17 00:00:00 2001 From: GhostIsSpooky <69561145+Salluci@users.noreply.github.com> Date: Thu, 5 May 2022 19:55:07 -0300 Subject: [PATCH 4/5] ugly nested if blocks instead of superior switch statement Co-authored-by: jonpas --- addons/cargo/functions/fnc_unloadCarryItem.sqf | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/addons/cargo/functions/fnc_unloadCarryItem.sqf b/addons/cargo/functions/fnc_unloadCarryItem.sqf index 8973bbd743c..63d810a4b18 100644 --- a/addons/cargo/functions/fnc_unloadCarryItem.sqf +++ b/addons/cargo/functions/fnc_unloadCarryItem.sqf @@ -19,11 +19,10 @@ params ["_unloader", "_object"]; if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {}; -switch (true) do { - case ([_unloader, _object] call EFUNC(dragging,canCarry)): { - [_unloader, _object] call EFUNC(dragging,startCarry); - }; - case ([_unloader, _object] call EFUNC(dragging,canDrag)): { +if ([_unloader, _object] call EFUNC(dragging,canCarry)) then { + [_unloader, _object] call EFUNC(dragging,startCarry); +} else { + if ([_unloader, _object] call EFUNC(dragging,canDrag)) then { [_unloader, _object] call EFUNC(dragging,startDrag); }; }; From ef05b0449fb1098da086925723a7572d10b5c9de Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 6 May 2022 15:24:44 -0500 Subject: [PATCH 5/5] Add delay for server event to finish --- .../cargo/functions/fnc_unloadCarryItem.sqf | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/addons/cargo/functions/fnc_unloadCarryItem.sqf b/addons/cargo/functions/fnc_unloadCarryItem.sqf index 63d810a4b18..d60904cdc07 100644 --- a/addons/cargo/functions/fnc_unloadCarryItem.sqf +++ b/addons/cargo/functions/fnc_unloadCarryItem.sqf @@ -16,13 +16,24 @@ * Public: No */ params ["_unloader", "_object"]; +TRACE_2("unloadCarryItem-start",_unloader,_object); if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {}; -if ([_unloader, _object] call EFUNC(dragging,canCarry)) then { - [_unloader, _object] call EFUNC(dragging,startCarry); -} else { - if ([_unloader, _object] call EFUNC(dragging,canDrag)) then { +// When unloading attached objects, this code will run before server has finished moving object to the safe position +[{ + params ["_unloader", "_object"]; + (_unloader distance _object) < 10 +}, { + params ["_unloader", "_object"]; + TRACE_2("unloadCarryItem-unloaded",_unloader,_object); + if ([_unloader, _object] call EFUNC(dragging,canCarry)) exitWith { + [_unloader, _object] call EFUNC(dragging,startCarry); + }; + if ([_unloader, _object] call EFUNC(dragging,canDrag)) exitWith { [_unloader, _object] call EFUNC(dragging,startDrag); }; -}; +}, _this, 1.0, { // delay is based on how long it will take server event to trigger and take effect + // not a hard error if this fails, could have just unloaded to other side of vehicle because of findSafePos + TRACE_1("unloadCarryItem-failed to unload nearby player",_this); +}] call CBA_fnc_waitUntilAndExecute;