diff --git a/Missionframework/KPLIB_config.sqf b/Missionframework/KPLIB_config.sqf index 50a0ea766..13cedd575 100644 --- a/Missionframework/KPLIB_config.sqf +++ b/Missionframework/KPLIB_config.sqf @@ -2,7 +2,7 @@ File: KPLIB_config.sqf Author: KP Liberation Dev Team - https://github.com/KillahPotatoes Date: 2017-10-16 - Last Update: 2020-08-06 + Last Update: 2023-03-02 License: MIT License - http://www.opensource.org/licenses/MIT Description: @@ -260,8 +260,8 @@ KPLIB_cr_wounded_gain = 2; ------------------------------------------------------------ */ -// Intel price for the secondary missions. [FOB hunting, Convoy ambush, SAR] -KPLIB_secondary_missions_costs = [15, 10, 8]; +// Intel price for the secondary missions. [FOB hunting, Convoy ambush, SAR, CIV] +KPLIB_secondary_missions_costs = [15, 10, 8, 5]; // Proportionate reduction of the actual (!) enemy combat readiness for a successful FOB hunt. (e.g. 0.4 -> reduction of 24 by an actual value of 60) KPLIB_secondary_objective_impact = 0.4; diff --git a/Missionframework/res/secondary/hum_aid.jpg b/Missionframework/res/secondary/hum_aid.jpg new file mode 100644 index 000000000..1e2867833 Binary files /dev/null and b/Missionframework/res/secondary/hum_aid.jpg differ diff --git a/Missionframework/scripts/client/remotecall/remote_call_intel.sqf b/Missionframework/scripts/client/remotecall/remote_call_intel.sqf index 1c0352d96..9880ae3ab 100644 --- a/Missionframework/scripts/client/remotecall/remote_call_intel.sqf +++ b/Missionframework/scripts/client/remotecall/remote_call_intel.sqf @@ -55,5 +55,33 @@ switch (_notiftype) do { deleteMarkerLocal "secondarymarkerzone"; secondary_objective_position_marker = []; }; + // civ-supplies mission + case 9: { + waitUntil {!isNil "secondary_objective_position_marker"}; + waitUntil {count secondary_objective_position_marker > 0}; + waitUntil {secondary_objective_position_marker distance zeropos > 1000}; + ["lib_intel_civ_supplies", [markertext ([10000, secondary_objective_position_marker] call KPLIB_fnc_getNearestSector)]] call BIS_fnc_showNotification; + _secondary_marker = createMarkerLocal ["secondarymarker", secondary_objective_position_marker]; + _secondary_marker setMarkerColorLocal "ColorGREEN"; + _secondary_marker setMarkerTypeLocal "hd_end"; + + _secondary_marker_zone = createMarkerLocal ["secondarymarkerzone", secondary_objective_position_marker]; + _secondary_marker_zone setMarkerColorLocal "ColorGREEN"; + _secondary_marker_zone setMarkerShapeLocal "ELLIPSE"; + _secondary_marker_zone setMarkerBrushLocal "FDiagonal"; + _secondary_marker_zone setMarkerSizeLocal [50,50]; + }; + case 10: { + ["lib_secondary_civ_supplies_complete"] call BIS_fnc_showNotification; + deleteMarkerLocal "secondarymarker"; + deleteMarkerLocal "secondarymarkerzone"; + secondary_objective_position_marker = []; + }; + case 11: { + //notify there are no friendly towns + ["lib_secondary_civ_supplies_no_room"] call BIS_fnc_showNotification; + //return intel points used + resources_intel = resources_intel + ( KPLIB_secondary_missions_costs select 3); + }; default {[format ["remote_call_intel.sqf -> no valid value for _notiftype: %1", _notiftype], "ERROR"] remoteExecCall ["KPLIB_fnc_log", 2];}; }; diff --git a/Missionframework/scripts/client/ui/secondary_ui.sqf b/Missionframework/scripts/client/ui/secondary_ui.sqf index 84e9cab19..a906b421e 100644 --- a/Missionframework/scripts/client/ui/secondary_ui.sqf +++ b/Missionframework/scripts/client/ui/secondary_ui.sqf @@ -11,7 +11,8 @@ waitUntil { dialog }; } foreach [ "STR_SECONDARY_MISSION0", "STR_SECONDARY_MISSION1", - "STR_SECONDARY_MISSION2" + "STR_SECONDARY_MISSION2", + "STR_SECONDARY_MISSION3" ]; private [ "_oldchoice", "_images", "_briefings", "_missioncost" ]; @@ -19,13 +20,15 @@ private [ "_oldchoice", "_images", "_briefings", "_missioncost" ]; _images = [ "res\secondary\fob_hunting.jpg", "res\secondary\convoy_hijack.jpg", - "res\secondary\sar.jpg" + "res\secondary\sar.jpg", + "res\secondary\hum_aid.jpg" ]; _briefings = [ "STR_SECONDARY_BRIEFING0", "STR_SECONDARY_BRIEFING1", - "STR_SECONDARY_BRIEFING2" + "STR_SECONDARY_BRIEFING2", + "STR_SECONDARY_BRIEFING3" ]; _oldchoice = -1; diff --git a/Missionframework/scripts/server/init_server.sqf b/Missionframework/scripts/server/init_server.sqf index b4644d92d..d16a5450c 100644 --- a/Missionframework/scripts/server/init_server.sqf +++ b/Missionframework/scripts/server/init_server.sqf @@ -24,6 +24,7 @@ send_paratroopers = compile preprocessFileLineNumbers "scripts\server\patrols\se fob_hunting = compile preprocessFileLineNumbers "scripts\server\secondary\fob_hunting.sqf"; convoy_hijack = compile preprocessFileLineNumbers "scripts\server\secondary\convoy_hijack.sqf"; search_and_rescue = compile preprocessFileLineNumbers "scripts\server\secondary\search_and_rescue.sqf"; +civ_supplies = compile preprocessFileLineNumbers "scripts\server\secondary\civ_supplies.sqf"; // Sector attack_in_progress_fob = compile preprocessFileLineNumbers "scripts\server\sector\attack_in_progress_fob.sqf"; diff --git a/Missionframework/scripts/server/remotecall/start_secondary_remote_call.sqf b/Missionframework/scripts/server/remotecall/start_secondary_remote_call.sqf index 5d926c8b9..0a8e0189f 100644 --- a/Missionframework/scripts/server/remotecall/start_secondary_remote_call.sqf +++ b/Missionframework/scripts/server/remotecall/start_secondary_remote_call.sqf @@ -17,6 +17,7 @@ resources_intel = resources_intel - ( KPLIB_secondary_missions_costs select _mis if (_mission_index == 0) then {[] spawn fob_hunting;}; if (_mission_index == 1) then {[] spawn convoy_hijack;}; if (_mission_index == 2) then {[] spawn search_and_rescue;}; +if (_mission_index == 3) then {[] spawn civ_supplies;}; KPLIB_secondary_starting = false; publicVariable "KPLIB_secondary_starting"; diff --git a/Missionframework/scripts/server/secondary/civ_supplies.sqf b/Missionframework/scripts/server/secondary/civ_supplies.sqf new file mode 100644 index 000000000..12112d908 --- /dev/null +++ b/Missionframework/scripts/server/secondary/civ_supplies.sqf @@ -0,0 +1,99 @@ +/* + Creates a secondary objective mission to allow players to bring 2x supply crates to a + random friendly town in order to raise civilian rep. + + Configurable options (kp_liberation_config): + KPLIB_secondary_missions_costs select 3 = intel cost for mission (default 5) + KP_liberation_civ_supplies_impact = % increase in civilian rep (default 5) +*/ + +_supplies_present = false; + +//select random blufor owned town (capture) + +_blufor_towns = []; + +//check if blufor_sectors item is contained within sectors_capture and push into array +{ + if (_x in sectors_capture) then { + _blufor_towns pushBack _x; + }; +} forEach blufor_sectors; + +// Check if town array is empty +if(count _blufor_towns isEqualTo 0) exitWith { + //if empty, throw error in log and call proper intel notification + ["There are no friendly towns to spawn supplies at!", "ERROR"] call KPLIB_fnc_log; + [11] remoteExec ["remote_call_intel"]; +}; + +_objective_town = selectRandom _blufor_towns; + + +//create 50m radius marker at town +secondary_objective_position = getMarkerPos _objective_town; +secondary_objective_position_marker = secondary_objective_position; +publicVariable "secondary_objective_position_marker"; +sleep 1; + +//start secondary mission +KPLIB_secondary_in_progress = 3; publicVariable "KPLIB_secondary_in_progress"; +[9] remoteExec ["remote_call_intel"]; + +//create note in log +diag_log format ["Starting Humanitarian Aid objective in %1",_objective_town]; + +//while loop to wait until 2x supply crates have been brought to within 50m of objective +while {_supplies_present isEqualTo false} do { + + _supplies_in_zone = []; + _objects_to_check = []; + + //get list of all objects in marker area + _objects_to_check = vehicles inAreaArray [secondary_objective_position, 50, 50]; + + + { + //loop through all objects and check if they are the correct supply crates and not currently sitting inside vics + if (typeOf _x isEqualTo KPLIB_b_crateSupply && isNull attachedTo _x) then { + + //if they are the right crate, add to the supplies array to be counted + _supplies_in_zone pushBack _x; + }; + + } forEach _objects_to_check; + + //if there are 2 or more of the correct crates, delete them and leave the mission while loop + if (count _supplies_in_zone > 1) then { + + { + deleteVehicle _x; + } forEach _supplies_in_zone; + + _supplies_present = true; + + //if not, wait 5 seconds and check again + } else { + sleep 5; + }; + +}; + +//add civ rep for a completed mission based on value in kp_liberation_config +[KP_liberation_civ_supplies_impact] spawn F_cr_changeCR; + +//display end notificaiton +[10] remoteExec ["remote_call_intel"]; + +//add +1 completed secondary mission for the campaign end screen +stats_secondary_objectives = stats_secondary_objectives + 1; + +//declare secondary mission completed +KPLIB_secondary_in_progress = -1; publicVariable "KPLIB_secondary_in_progress"; + +//execute a save +sleep 1; +[] spawn KPLIB_fnc_doSave; + +//create note in log +diag_log format ["Humanitarian Aid secondary objective complete at %1. Increasing civ rep by %2",_objective_town, KP_liberation_civ_supplies_impact]; \ No newline at end of file diff --git a/Missionframework/stringtable.xml b/Missionframework/stringtable.xml index dbd98a68d..5a37becfd 100644 --- a/Missionframework/stringtable.xml +++ b/Missionframework/stringtable.xml @@ -2,11 +2,11 @@