Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Secondary Objective 'Humanitarian Aid' #894

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Missionframework/kp_liberation_config.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,9 @@ GRLIB_color_enemy_bright = "ColorRED"; // Enemy

GRLIB_fob_range = 125; // Build range around the main FOB building.
GRLIB_halo_altitude = 2500; // Altitude in metres for the HALO jump.
GRLIB_secondary_missions_costs = [15, 10, 8]; // Intel price for the secondary missions [FOB hunting, Convoy ambush, SAR].
GRLIB_secondary_missions_costs = [15, 10, 8, 5]; // Intel price for the secondary missions [FOB hunting, Convoy ambush, SAR, Humanitarian Aid].
GRLIB_secondary_objective_impact = 0.6; // The percentage impact against enemy combat readiness for a successful FOB hunt.
KP_liberation_civ_supplies_impact = 5; // The percentage increase received when completing a Humanitarian Aid secondary objective
GRLIB_recycling_percentage = 0.5; // Percentage of resources you get back from recycling.
KP_liberation_production_interval = 30; // Time in minutes until a production process is finished, when resources multiplier is set to 1.

Expand Down
Binary file added Missionframework/res/secondary/hum_aid.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 changes: 28 additions & 0 deletions Missionframework/scripts/client/remotecall/remote_call_intel.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -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 + ( GRLIB_secondary_missions_costs select 3);
};
default {[format ["remote_call_intel.sqf -> no valid value for _notiftype: %1", _notiftype], "ERROR"] remoteExecCall ["KPLIB_fnc_log", 2];};
};
9 changes: 6 additions & 3 deletions Missionframework/scripts/client/ui/secondary_ui.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,24 @@ waitUntil { dialog };
} foreach [
"STR_SECONDARY_MISSION0",
"STR_SECONDARY_MISSION1",
"STR_SECONDARY_MISSION2"
"STR_SECONDARY_MISSION2",
"STR_SECONDARY_MISSION3"
];

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;
Expand Down
1 change: 1 addition & 0 deletions Missionframework/scripts/server/init_server.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ send_paratroopers = compileFinal preprocessFileLineNumbers "scripts\server\patro
fob_hunting = compileFinal preprocessFileLineNumbers "scripts\server\secondary\fob_hunting.sqf";
convoy_hijack = compileFinal preprocessFileLineNumbers "scripts\server\secondary\convoy_hijack.sqf";
search_and_rescue = compileFinal preprocessFileLineNumbers "scripts\server\secondary\search_and_rescue.sqf";
civ_supplies = compileFinal preprocessFileLineNumbers "scripts\server\secondary\civ_supplies.sqf";

// Sector
attack_in_progress_fob = compileFinal preprocessFileLineNumbers "scripts\server\sector\attack_in_progress_fob.sqf";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ resources_intel = resources_intel - ( GRLIB_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;};

GRLIB_secondary_starting = false; publicVariable "GRLIB_secondary_starting";

Expand Down
99 changes: 99 additions & 0 deletions Missionframework/scripts/server/secondary/civ_supplies.sqf
Original file line number Diff line number Diff line change
@@ -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):
GRLIB_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 == 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
GRLIB_secondary_in_progress = 3; publicVariable "GRLIB_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 == 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 == KP_liberation_supply_crate && 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
GRLIB_secondary_in_progress = -1; publicVariable "GRLIB_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];
Loading