#include "..\script_component.hpp" /* * Author: IDSolutions * Registers an hvt task * * Arguments: * 0: ID of the task * 1: Amount of HVTs KIA to fail the task * 2: Amount of HVTs Captured or KIA to complete the task * 3: Marker name for the extraction zone * 4: Amount of funds the company recieves if the task is successful (default: 0) * 5: Amount of rating the company and player lose if the task is failed (default: 0) * 6: Amount of rating the company and player recieve if the task is successful (default: 0) * 7: Subcategory of task (default: [true, false]) * 8: Should the mission end (MissionSuccess) if the task is successful (default: false) * 9: Should the mission end (MissionFailed) if the task is failed (default: false) * 10: Amount of time before hvt(s) die (default: -1) * 11: Equipment rewards (default: []) * 12: Supply rewards (default: []) * 13: Weapon rewards (default: []) * 14: Vehicle rewards (default: []) * 15: Special rewards (default: []) * * Return Value: * None * * Example: * ["task_name", 1, 1, "marker_name", 500000, -75, 300, [true, false], false, false] spawn forge_client_task_fnc_hvt; * ["task_name", -1, 1, "", 500000, -75, 300, [false, true], false, false] spawn forge_client_task_fnc_hvt; * ["task_name", 1, 1, "marker_name", 500000, -75, 300, [true, false], false, false, 45] spawn forge_client_task_fnc_hvt; * ["task_name", -1, 1, "", 500000, -75, 300, [false, true], false, false, 45] spawn forge_client_task_fnc_hvt; * * Public: Yes */ params [ ["_taskID", "", [""]], ["_limitFail", -1, [0]], ["_limitSuccess", -1, [0]], ["_extZone", "", [""]], ["_companyFunds", 0, [0]], ["_ratingFail", 0, [0]], ["_ratingSuccess", 0, [0]], ["_type", [["_capture", true, [false]], ["_eliminate", false, [false]]]], ["_endSuccess", false, [false]], ["_endFail", false, [false]], ["_time", -1, [0]], ["_equipmentRewards", [], [[]]], ["_supplyRewards", [], [[]]], ["_weaponRewards", [], [[]]], ["_vehicleRewards", [], [[]]], ["_specialRewards", [], [[]]] ]; private _capture = (_this select 7) select 0; private _eliminate = (_this select 7) select 1; private _result = 0; waitUntil { sleep 1; _hvts = GVAR(allHVTs) select { (_x getVariable ["assignedTask", ""]) == _taskID }; count _hvts > 0 }; private _hvts = GVAR(allHVTs) select { (_x getVariable ["assignedTask", ""]) == _taskID }; private _startTime = if (!isNil "_time") then { floor(time) } else { nil }; waitUntil { sleep 1; private _hvtsCaptive = ({ captive _x } count _hvts); private _hvtsKilled = ({ !alive _x } count _hvts); private _hvtsInZone = ({ _x inArea _extZone } count _hvts); if (!isNil "_time") then { private _timeExpired = (floor time - _startTime >= _time); if (_capture && _hvtsKilled >= _limitFail) then { _result = 1; }; if (_capture && _hvtsCaptive < _limitSuccess && _timeExpired) then { _result = 1; }; if (_eliminate && _hvtsKilled < _limitSuccess && _timeExpired) then { _result = 1; }; (_result == 1) or (_capture && (_hvtsInZone >= _limitSuccess) && (_hvtsKilled < _limitFail)) or (_eliminate && (_hvtsKilled >= _limitSuccess)) } else { if (_capture && (_hvtsKilled >= _limitFail)) then { _result = 1; }; (_result == 1) or (_capture && (_hvtsInZone >= _limitSuccess) && (_hvtsKilled < _limitFail)) or (_eliminate && (_hvtsKilled >= _limitSuccess)) }; }; if (_result == 1) then { { deleteVehicle _x } forEach _hvts; private _penalties = createHashMap; _penalties set ["reputation", _ratingFail]; [_taskID, _penalties] call FUNC(handleTaskRewards); sleep 1; { [_x, _ratingFail] remoteExec ["addRating", -2] } forEach allPlayers; [format ["Task failed: %1 reputation", _ratingFail], "warning", 5, "right"] call EFUNC(misc,notify); if (_endFail) then { ["MissionFail", false] remoteExecCall ["BIS_fnc_endMission", playerSide]; }; } else { { deleteVehicle _x } forEach _hvts; private _rewards = createHashMap; _rewards set ["funds", _companyFunds]; _rewards set ["reputation", _ratingSuccess]; if (count _equipmentRewards > 0) then { _rewards set ["equipment", _equipmentRewards]; }; if (count _supplyRewards > 0) then { _rewards set ["supplies", _supplyRewards]; }; if (count _weaponRewards > 0) then { _rewards set ["weapons", _weaponRewards]; }; if (count _vehicleRewards > 0) then { _rewards set ["vehicles", _vehicleRewards]; }; if (count _specialRewards > 0) then { _rewards set ["special", _specialRewards]; }; [_taskID, _rewards] call FUNC(handleTaskRewards); [_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; sleep 1; { [_x, _ratingSuccess] remoteExec ["addRating", -2] } forEach allPlayers; [format ["Task completed: %1 reputation", _ratingSuccess], "success", 5, "right"] call EFUNC(misc,notify); [format ["Task completed: %1 funds", _companyFunds], "success", 5, "right"] call EFUNC(misc,notify); if (_endSuccess) then { ["MissionSuccess", true] remoteExecCall ["BIS_fnc_endMission", playerSide]; }; };