Okay I have not yet cleaned this stuff up, also few of my functions are not working which even more causes this to be messy. But lets get started.
Random objectives
On the mission editor I place gamelogic's called pmc_<NUMBER>, then I run my PMC_targets.sqf on them to create PMC_targets array.
This is my basic server init script:
Code: Select all
private
[
"_ran",
"_tlogic",
"_tmp"
];
// WAIT for objective creation for clients
PMC_create_objectives = false;
publicVariable "PMC_create_objectives";
PMC_target1 = false;
PMC_target2 = false;
publicVariable "PMC_target1";
publicVariable "PMC_target2";
// collect targets from pmc_? gamelogics
_tmp = [] execVM "PMC\PMC_targets.sqf";
waitUntil
{
scriptDone _tmp;
};
publicVariable "PMC_opfor_starts";
publicVariable "PMC_blufor_starts";
publicVariable "PMC_targets";
// make the array
PMC_array = [];
// randomize the targets and choose one for the array.
_ran = (floor random (count PMC_targets));
_tlogic = (PMC_targets select _ran);
PMC_array = PMC_array + [_tlogic];
publicVariable "PMC_array";
// Give green light for objective creation for clients
PMC_create_objectives = true;
publicVariable "PMC_create_objectives";
I told you it was messy...
Also on this reference purpose I didn't see the need to include PMC_targets.sqf code as "you'll get the point" what it does.
Then on clients we run PMC_create_task.sqf script, this again is very messy and un-optimized.
Client script:
Code: Select all
private
[
"_markerobj",
"_targetpoint",
"_triggerArea",
"_triggerTimeout",
"_z"
];
// I dont think we need to do this?
publicVariable "PMC_create_objectives";
publicVariable "PMC_target1";
publicVariable "PMC_target2";
publicVariable "PMC_array";
player sidechat "PMC_create_task waiting...";
// waits until server gives go ahead to create objective for client.
waitUntil {PMC_create_objectives};
player sidechat "PMC_create_task start!";
// size of trigger area
_triggerArea = 50;
// timeout for trigger to activate
_triggerTimeout = 60;
// create tasks in reverse order :)
// objective 2
if (!PMC_target2) then
{
_targetpoint = getPos (PMC_array select 1);
_z = createTrigger ["EmptyDetector", _targetpoint];
_z setTriggerActivation ["WEST SEIZED", "PRESENT", true];
_z setTriggerArea [_triggerArea, _triggerArea, 0, true];
_z setTriggerTimeout [0, (_triggerTimeout/2), _triggerTimeout, true];
_z setTriggerStatements ["this", "'PMC_target2' setMarkerColorLocal 'ColorGreen'; 'PMC_target2' setMarkerTypeLocal 'dot'; PMC_target2 = true; publicVariable 'PMC_target2'; PMC_objective2 setTaskState 'succeeded';", ""];
_markerobj = createMarkerLocal ["pmc_target2", _targetpoint];
_markerobj setMarkerShapeLocal "ELLIPSE";
_markerobj setMarkerColorLocal "ColorRed";
_markerobj setMarkerBrushLocal "Solid";
_markerobj setMarkerSizeLocal [_triggerArea, _triggerArea];
PMC_objective2 = player createSimpleTask ["Clear objective 2"];
PMC_objective2 setSimpleTaskDescription ["Clear <marker name='pmc_target2'>objective 2</marker>","Clear objective 2","Clear objective 2"];
PMC_objective2 setSimpleTaskDestination (getMarkerPos "pmc_target2");
}
// objective 2 has been completed!
else
{
_targetpoint = getPos (PMC_array select 1);
_markerobj = createMarkerLocal ["pmc_target2", _targetpoint];
_markerobj setMarkerShapeLocal "dot";
_markerobj setMarkerColorLocal "ColorGreen";
PMC_objective2 = player createSimpleTask ["Clear objective 2"];
PMC_objective2 setSimpleTaskDescription ["Clear <marker name='pmc_target2'>objective 2</marker>","Clear objective 2","Clear objective 2"];
PMC_objective2 setSimpleTaskDestination (getMarkerPos "pmc_target2");
PMC_objective2 setTaskState "succeeded";
};
// objective 1
if (!PMC_target1) then
{
_targetpoint = getPos (PMC_array select 0);
_z = createTrigger ["EmptyDetector", _targetpoint];
_z setTriggerActivation ["WEST SEIZED", "PRESENT", true];
_z setTriggerArea [_triggerArea, _triggerArea, 0, true];
_z setTriggerTimeout [0, (_triggerTimeout/2), _triggerTimeout, true];
_z setTriggerStatements ["this", "'PMC_target1' setMarkerColorLocal 'ColorGreen'; 'PMC_target1' setMarkerTypeLocal 'dot'; PMC_target1 = true; publicVariable 'PMC_target1'; PMC_objective1 setTaskState 'succeeded';", ""];
_markerobj = createMarkerLocal ["pmc_target1", _targetpoint];
_markerobj setMarkerShapeLocal "ELLIPSE";
_markerobj setMarkerColorLocal "ColorRed";
_markerobj setMarkerBrushLocal "Solid";
_markerobj setMarkerSizeLocal [_triggerArea, _triggerArea];
PMC_objective1 = player createSimpleTask ["Clear objective 1"];
PMC_objective1 setSimpleTaskDescription ["Clear <marker name='pmc_target1'>objective 1</marker>","Clear objective 1","Clear objective 1"];
PMC_objective1 setSimpleTaskDestination (getMarkerPos "pmc_target1");
player setCurrentTask PMC_objective1;
}
// objective 1 has been completed!
else
{
_targetpoint = getPos (PMC_array select 0);
_markerobj = createMarkerLocal ["pmc_target1", _targetpoint];
_markerobj setMarkerShapeLocal "dot";
_markerobj setMarkerColorLocal "ColorGreen";
PMC_objective1 = player createSimpleTask ["Clear objective 1"];
PMC_objective1 setSimpleTaskDescription ["Clear <marker name='pmc_target1'>objective 1</marker>","Clear objective 1","Clear objective 1"];
PMC_objective1 setSimpleTaskDestination (getMarkerPos "pmc_target1");
PMC_objective1 setTaskState "succeeded";
};
In all of this, there is one major flaw, there is no broadcasting triggers to make objectives show when changed, in the players currently in the mission. Sure all JIP joiners get correct information, but the guys in-game do not.
So in the next improvement I need to add the triggers and publicVariables for them. I just wanted to post what I got now, so you guys don't think this topic is nothing but hot air without anything to show for.