From e925c487987265ab8f952f149ba125d4ae959d84 Mon Sep 17 00:00:00 2001 From: Githawk Date: Fri, 19 Feb 2016 17:24:32 +0100 Subject: [PATCH] Adding HandleDisconnect EH and deletion of fuel truck --- addons/refuel/XEH_postInit.sqf | 4 +++ addons/refuel/XEH_preInit.sqf | 1 + .../functions/fnc_connectNozzleAction.sqf | 2 +- .../refuel/functions/fnc_handleDisconnect.sqf | 26 +++++++++++++++++++ addons/refuel/functions/fnc_resetLocal.sqf | 2 +- addons/refuel/functions/fnc_returnNozzle.sqf | 2 +- addons/refuel/functions/fnc_takeNozzle.sqf | 22 ++++++++++------ 7 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 addons/refuel/functions/fnc_handleDisconnect.sqf diff --git a/addons/refuel/XEH_postInit.sqf b/addons/refuel/XEH_postInit.sqf index d823fcf039..16c4232457 100644 --- a/addons/refuel/XEH_postInit.sqf +++ b/addons/refuel/XEH_postInit.sqf @@ -1,3 +1,7 @@ #include "script_component.hpp" ["medical_onUnconscious", {_this call FUNC(handleUnconscious)}] call EFUNC(common,addEventHandler); + +if (isServer) then { + addMissionEventHandler ["HandleDisconnect", {_this call FUNC(handleDisconnect)}]; +}; diff --git a/addons/refuel/XEH_preInit.sqf b/addons/refuel/XEH_preInit.sqf index 691df0478d..2972ad57f7 100644 --- a/addons/refuel/XEH_preInit.sqf +++ b/addons/refuel/XEH_preInit.sqf @@ -15,6 +15,7 @@ PREP(connectNozzleAction); PREP(disconnect); PREP(dropNozzle); PREP(getFuel); +PREP(handleDisconnect); PREP(handleKilled); PREP(handleUnconscious); PREP(makeJerryCan); diff --git a/addons/refuel/functions/fnc_connectNozzleAction.sqf b/addons/refuel/functions/fnc_connectNozzleAction.sqf index a4509ae4af..b68983dd81 100644 --- a/addons/refuel/functions/fnc_connectNozzleAction.sqf +++ b/addons/refuel/functions/fnc_connectNozzleAction.sqf @@ -77,7 +77,7 @@ _endPosTestOffset set [2, (_startingOffset select 2)]; { params ["_args"]; _args params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_target", objNull, [objNull]], ["_endPosTestOffset", [0,0,0], [[]], 3]]; - _unit setVariable [QGVAR(nozzle), nil]; + _unit setVariable [QGVAR(nozzle), nil, true]; _unit setVariable [QGVAR(isRefueling), false]; [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); REFUEL_UNHOLSTER_WEAPON diff --git a/addons/refuel/functions/fnc_handleDisconnect.sqf b/addons/refuel/functions/fnc_handleDisconnect.sqf new file mode 100644 index 0000000000..edc3393cb4 --- /dev/null +++ b/addons/refuel/functions/fnc_handleDisconnect.sqf @@ -0,0 +1,26 @@ +/* + * Author: GitHawk + * Cleans up refuel + * + * Arguments: + * 0: Player + * + * Return Value: + * None + * + * Example: + * [player] call ace_refuel_fnc_handleDisconnect + * + * Public: No + */ +#include "script_component.hpp" + +params [["_disconnectedPlayer", objNull, [objNull]]]; + +if (isNull _disconnectedPlayer) exitWith {}; + +private _nozzle = _disconnectedPlayer getVariable [QGVAR(nozzle), objNull]; + +if (isNull _nozzle) exitWith {}; + +[_disconnectedPlayer, _nozzle] call FUNC(dropNozzle); diff --git a/addons/refuel/functions/fnc_resetLocal.sqf b/addons/refuel/functions/fnc_resetLocal.sqf index 599ee61344..2e80ab98d7 100644 --- a/addons/refuel/functions/fnc_resetLocal.sqf +++ b/addons/refuel/functions/fnc_resetLocal.sqf @@ -32,5 +32,5 @@ if (_actionID != -1) then { _unit removeAction _actionID; _unit setVariable [QGVAR(isRefueling), false, true]; _unit setVariable [QGVAR(ReleaseActionID), nil]; - _unit setVariable [QGVAR(nozzle), nil]; + _unit setVariable [QGVAR(nozzle), nil, true]; }; diff --git a/addons/refuel/functions/fnc_returnNozzle.sqf b/addons/refuel/functions/fnc_returnNozzle.sqf index d56b7b731a..32cedb5ac7 100644 --- a/addons/refuel/functions/fnc_returnNozzle.sqf +++ b/addons/refuel/functions/fnc_returnNozzle.sqf @@ -29,7 +29,7 @@ if (isNull _nozzle || {_source != _target}) exitWith {false}; { params ["_args"]; _args params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_target", objNull, [objNull]]]; - _unit setVariable [QGVAR(nozzle), nil]; + _unit setVariable [QGVAR(nozzle), nil, true]; detach _nozzle; [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); REFUEL_UNHOLSTER_WEAPON diff --git a/addons/refuel/functions/fnc_takeNozzle.sqf b/addons/refuel/functions/fnc_takeNozzle.sqf index 96ac5249bb..ecff435dcf 100644 --- a/addons/refuel/functions/fnc_takeNozzle.sqf +++ b/addons/refuel/functions/fnc_takeNozzle.sqf @@ -53,7 +53,7 @@ if (isNull _nozzle) then { // func is called on fuel truck private _newNozzle = "ACE_refuel_fuelNozzle" createVehicle position _unit; _newNozzle attachTo [_unit, [-0.02,0.05,-0.12], "righthandmiddle1"]; - _unit setVariable [QGVAR(nozzle), _newNozzle]; + _unit setVariable [QGVAR(nozzle), _newNozzle, true]; private _rope = ropeCreate [_target, _endPosOffset, _newNozzle, [0, -0.20, 0.12], REFUEL_HOSE_LENGTH]; _newNozzle setVariable [QGVAR(attachPos), _endPosOffset, true]; @@ -95,7 +95,7 @@ if (isNull _nozzle) then { // func is called on fuel truck } else { _nozzle attachTo [_unit, [-0.02,0.05,-0.12], "righthandmiddle1"]; }; - _unit setVariable [QGVAR(nozzle), _nozzle]; + _unit setVariable [QGVAR(nozzle), _nozzle, true]; _unit setVariable [QGVAR(isRefueling), true]; private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; @@ -125,18 +125,24 @@ if (isNull _nozzle) then { // func is called on fuel truck }; if !(_nozzle getVariable [QGVAR(jerryCan), false]) then { [{ - private ["_nozzle"]; params ["_args", "_pfID"]; - _args params ["_unit", "_source", "_endPosOffset"]; - - if (_unit distance (_source modelToWorld _endPosOffset) > (REFUEL_HOSE_LENGTH - 2)) exitWith { - _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; + _args params [["_unit", player, [objNull]], ["_source", objNull, [objNull]], ["_endPosOffset", [0, 0, 0], [[]], 3]]; + _args params ["", "", "", ["_nozzle", _unit getVariable [QGVAR(nozzle), objNull], [objNull]]]; + if (isNull _source || {_unit distance (_source modelToWorld _endPosOffset) > (REFUEL_HOSE_LENGTH - 2)} || {!alive _source}) exitWith { if !(isNull _nozzle) then { [_unit, _nozzle] call FUNC(dropNozzle); REFUEL_UNHOLSTER_WEAPON [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); - [LSTRING(Hint_TooFar), 2, _unit] call EFUNC(common,displayTextStructured); + if (isNull _source || {!alive _source}) then { + private _rope = _nozzle getVariable [QGVAR(rope), objNull]; + if !(isNull _rope) then { + ropeDestroy _rope; + }; + deleteVehicle _nozzle; + } else { + [LSTRING(Hint_TooFar), 2, _unit] call EFUNC(common,displayTextStructured); + }; }; [_pfID] call cba_fnc_removePerFrameHandler; };