#include "..\script_component.hpp" /* * Author: IDSolutions * Registers a defuse task * * Arguments: * 0: ID of the task * 1: Amount of entities destroyed to fail the task * 2: Amount of ieds defused to complete the task * 3: Amount of funds the company recieves if the task is successful (default: 0) * 4: Amount of rating the company and player lose if the task is failed (default: 0) * 5: Amount of rating the company and player recieve if the task is successful (default: 0) * 6: Should the mission end (MissionSuccess) if the task is successful (default: false) * 7: Should the mission end (MissionFailed) if the task is failed (default: false) * 8: Equipment rewards (default: []) * 9: Supply rewards (default: []) * 10: Weapon rewards (default: []) * 11: Vehicle rewards (default: []) * 12: Special rewards (default: []) * * Return Value: * None * * Example: * ["task_name", 2, 3, 375000, -75, 300, false, false] spawn forge_server_task_fnc_defuse; * * Public: Yes */ params [ ["_taskID", "", [""]], ["_limitFail", -1, [0]], ["_limitSuccess", -1, [0]], ["_companyFunds", 0, [0]], ["_ratingFail", 0, [0]], ["_ratingSuccess", 0, [0]], ["_endSuccess", false, [false]], ["_endFail", false, [false]], ["_equipmentRewards", [], [[]]], ["_supplyRewards", [], [[]]], ["_weaponRewards", [], [[]]], ["_vehicleRewards", [], [[]]], ["_specialRewards", [], [[]]] ]; private _result = 0; private _ieds = []; waitUntil { sleep 1; _ieds = GVAR(TaskStore) call ["getTaskEntities", ["ieds", _taskID]]; count _ieds > 0 }; _ieds = GVAR(TaskStore) call ["getTaskEntities", ["ieds", _taskID]]; private _entities = GVAR(TaskStore) call ["getTaskEntities", ["entities", _taskID]]; private _requiredDefusals = if (_limitSuccess < 0) then { count _ieds } else { _limitSuccess }; private _maxProtectedLosses = if (_limitFail < 0) then { count _entities } else { _limitFail }; private _entitiesDestroyed = 0; private _defusedCount = 0; private _shouldFail = false; private _shouldSucceed = false; private _done = false; waitUntil { sleep 1; GVAR(TaskStore) call ["trackParticipants", [_taskID, _ieds + _entities, "", 250]]; _entitiesDestroyed = ({ !alive _x } count _entities); _defusedCount = GVAR(TaskStore) call ["getDefuseCount", [_taskID]]; _shouldFail = (_maxProtectedLosses > 0) && { _entitiesDestroyed >= _maxProtectedLosses }; _shouldSucceed = (_requiredDefusals > 0) && { _defusedCount >= _requiredDefusals } && { (_maxProtectedLosses <= 0) || { _entitiesDestroyed < _maxProtectedLosses } }; _done = false; if (_shouldFail) then { _result = 1; }; if ((_result == 1) or _shouldSucceed) then { _done = true; }; _done }; if (_result == 1) then { { deleteVehicle _x } forEach _ieds; { deleteVehicle _x } forEach _entities; [_taskID, "FAILED"] call BFUNC(taskSetState); sleep 1; GVAR(TaskStore) call ["notifyParticipants", [_taskID, "warning", "Tasks", format ["Task failed: %1 reputation", _ratingFail]]]; GVAR(TaskStore) call ["applyRatingOutcome", [_taskID, _ratingFail]]; if (_endFail) then { ["MissionFail", false] remoteExecCall ["BIS_fnc_endMission", playerSide]; }; } else { { deleteVehicle _x } forEach _ieds; { deleteVehicle _x } forEach _entities; private _rewards = createHashMap; _rewards set ["funds", _companyFunds]; if (_equipmentRewards isNotEqualTo []) then { _rewards set ["equipment", _equipmentRewards]; }; if (_supplyRewards isNotEqualTo []) then { _rewards set ["supplies", _supplyRewards]; }; if (_weaponRewards isNotEqualTo []) then { _rewards set ["weapons", _weaponRewards]; }; if (_vehicleRewards isNotEqualTo []) then { _rewards set ["vehicles", _vehicleRewards]; }; if (_specialRewards isNotEqualTo []) then { _rewards set ["special", _specialRewards]; }; [_taskID, _rewards] call FUNC(handleTaskRewards); [_taskID, "SUCCEEDED"] call BFUNC(taskSetState); sleep 1; GVAR(TaskStore) call ["notifyParticipants", [_taskID, "success", "Tasks", format ["Task completed: %1 reputation, $%2 funds", _ratingSuccess, [_companyFunds] call EFUNC(common,formatNumber)]]]; GVAR(TaskStore) call ["applyRatingOutcome", [_taskID, _ratingSuccess]]; if (_endSuccess) then { ["MissionSuccess", true] remoteExecCall ["BIS_fnc_endMission", playerSide]; }; }; GVAR(TaskStore) call ["clearTask", [_taskID]];