ACE3/addons/refuel/functions/fnc_maxDistanceDropNozzle.sqf

55 lines
1.8 KiB
Plaintext

/*
* Author: GitHawk, Jonpas
* Drops the nozzle at maximum hose distance.
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Fuel Truck <OBJECT>
* 2: End Pos Offset <ARRAY>
* 3: Nozzle <OBJECT> (optional)
*
* Return Value:
* None
*
* Example:
* [player, fuelTruck, [0, 0, 0], nozzle] call ace_refuel_fnc_maxDistanceDropNozzle
*
* Public: No
*/
#include "script_component.hpp"
params ["_unit", "_source", "_endPosOffset", "_nozzle"];
// Exit if jerry can (no maximum distance there as it's not connected to anything)
if (_nozzle getVariable [QGVAR(jerryCan), false]) exitWith {};
// Check distance periodically to drop it at maximum hose length
[{
params ["_args", "_pfID"];
_args params [
["_unit", player, [objNull]],
["_source", objNull, [objNull]],
["_endPosOffset", [0, 0, 0], [[]], 3],
["_nozzle", (_args select 0) 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);
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;
};
}, 0, [_unit, _target, _endPosOffset, _nozzle]] call CBA_fnc_addPerFrameHandler;