Tweaked FOB template placing and selection
This commit is contained in:
parent
0e1e2b13c5
commit
8467163d7c
|
@ -68,6 +68,19 @@ execVM "scripts\server\resources\unit_cap.sqf";
|
|||
execVM "scripts\server\sector\lose_sectors.sqf";
|
||||
execVM "scripts\server\sector\manage_sectors.sqf";
|
||||
|
||||
// Select FOB templates
|
||||
switch (KP_liberation_preset_opfor) do {
|
||||
default {
|
||||
KPLIB_fob_templates = [
|
||||
"scripts\fob_templates\default\template1.sqf",
|
||||
"scripts\fob_templates\default\template2.sqf",
|
||||
"scripts\fob_templates\default\template3.sqf",
|
||||
"scripts\fob_templates\default\template4.sqf",
|
||||
"scripts\fob_templates\default\template5.sqf"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
// Civil Reputation
|
||||
execVM "scripts\server\civrep\init_module.sqf";
|
||||
|
||||
|
@ -81,12 +94,12 @@ execVM "scripts\server\asymmetric\init_module.sqf";
|
|||
execVM "scripts\server\offloading\group_diag.sqf";
|
||||
|
||||
{
|
||||
if ( (_x != player) && (_x distance (getmarkerpos GRLIB_respawn_marker) < 200 ) ) then {
|
||||
deleteVehicle _x;
|
||||
};
|
||||
if ((_x != player) && (_x distance (getmarkerpos GRLIB_respawn_marker) < 200 )) then {
|
||||
deleteVehicle _x;
|
||||
};
|
||||
} foreach allUnits;
|
||||
|
||||
// Server Restart Script from K4s0
|
||||
if (KP_liberation_restart > 0) then {
|
||||
execVM "scripts\server\game\server_restart.sqf";
|
||||
execVM "scripts\server\game\server_restart.sqf";
|
||||
};
|
||||
|
|
|
@ -1,123 +1,129 @@
|
|||
|
||||
_defenders_amount = 15 * ( sqrt ( GRLIB_unitcap ) );
|
||||
if ( _defenders_amount > 15 ) then { _defenders_amount = 15 };
|
||||
_fob_templates = [
|
||||
"scripts\fob_templates\template5.sqf",
|
||||
"scripts\fob_templates\template4.sqf",
|
||||
"scripts\fob_templates\template3.sqf",
|
||||
"scripts\fob_templates\template2.sqf",
|
||||
"scripts\fob_templates\template1.sqf"
|
||||
];
|
||||
_defenders_amount = (15 * (sqrt (GRLIB_unitcap))) min 15;
|
||||
|
||||
_spawn_marker = [2000,999999,false] call F_findOpforSpawnPoint;
|
||||
if ( _spawn_marker == "" ) exitWith { diag_log "[KP LIBERATION] [ERROR] Could not find position for fob hunting mission"; };
|
||||
if (_spawn_marker == "") exitWith {diag_log "[KP LIBERATION] [ERROR] Could not find position for fob hunting mission";};
|
||||
|
||||
used_positions = used_positions + [ _spawn_marker ];
|
||||
used_positions pushBack _spawn_marker;
|
||||
_base_position = markerpos _spawn_marker;
|
||||
_base_objects = [];
|
||||
_base_objectives = [];
|
||||
_base_defenders = [];
|
||||
_template = ([] call (compile preprocessFileLineNumbers (selectRandom _fob_templates)));
|
||||
|
||||
_objects_to_build = _template select 0;
|
||||
_objectives_to_build = _template select 1;
|
||||
_defenders_to_build = _template select 2;
|
||||
_base_corners = _template select 3;
|
||||
([] call (compile preprocessFileLineNumbers (selectRandom KPLIB_fob_templates))) params [
|
||||
"_objects_to_build",
|
||||
"_objectives_to_build",
|
||||
"_defenders_to_build",
|
||||
"_base_corners"
|
||||
];
|
||||
|
||||
private _nextobject = objNull;
|
||||
|
||||
{
|
||||
_nextclass = _x select 0;
|
||||
_nextpos = _x select 1;
|
||||
_nextpos = [((_base_position select 0) + (_nextpos select 0)),((_base_position select 1) + (_nextpos select 1)),0];
|
||||
_nextdir = _x select 2;
|
||||
_x params [
|
||||
"_nextclass",
|
||||
"_nextpos",
|
||||
"_nextdir"
|
||||
];
|
||||
|
||||
_nextobject = _nextclass createVehicle _nextpos;
|
||||
_nextobject setVectorUp [0,0,1];
|
||||
_nextobject setdir _nextdir;
|
||||
_nextobject setpos _nextpos;
|
||||
_nextobject setVectorUp [0,0,1];
|
||||
_nextobject setdir _nextdir;
|
||||
_nextobject setpos _nextpos;
|
||||
_base_objects = _base_objects + [_nextobject];
|
||||
_nextpos = [((_base_position select 0) + (_nextpos select 0)), ((_base_position select 1) + (_nextpos select 1)), 0];
|
||||
|
||||
} foreach _objects_to_build;
|
||||
_nextobject = _nextclass createVehicle _nextpos;
|
||||
_nextobject setVectorUp [0, 0, 1];
|
||||
_nextobject setdir _nextdir;
|
||||
_nextobject setpos _nextpos;
|
||||
_nextobject setVectorUp [0, 0, 1];
|
||||
_nextobject setdir _nextdir;
|
||||
_nextobject setpos _nextpos;
|
||||
|
||||
_base_objects pushBack _nextobject;
|
||||
} forEach _objects_to_build;
|
||||
|
||||
sleep 1;
|
||||
|
||||
{
|
||||
_nextclass = _x select 0;
|
||||
_nextpos = _x select 1;
|
||||
_nextpos = [((_base_position select 0) + (_nextpos select 0)),((_base_position select 1) + (_nextpos select 1)),0.5];
|
||||
_nextdir = _x select 2;
|
||||
_x params [
|
||||
"_nextclass",
|
||||
"_nextpos",
|
||||
"_nextdir"
|
||||
];
|
||||
|
||||
_nextobject = _nextclass createVehicle [(_nextpos select 0) + (random 500),(_nextpos select 1) + (random 500),0.5];
|
||||
_nextobject setVectorUp [0,0,1];
|
||||
_nextobject setpos _nextpos;
|
||||
_nextobject setdir _nextdir;
|
||||
_nextobject setVectorUp [0,0,1];
|
||||
_nextobject setpos _nextpos;
|
||||
_nextobject setdir _nextdir;
|
||||
_nextobject lock 2;
|
||||
_nextpos = [((_base_position select 0) + (_nextpos select 0)), ((_base_position select 1) + (_nextpos select 1)), 0.5];
|
||||
|
||||
_base_objectives = _base_objectives + [_nextobject];
|
||||
} foreach _objectives_to_build;
|
||||
_nextobject = _nextclass createVehicle [(_nextpos select 0) + (random 500), (_nextpos select 1) + (random 500), 0.5];
|
||||
_nextobject setVectorUp [0, 0, 1];
|
||||
_nextobject setpos _nextpos;
|
||||
_nextobject setdir _nextdir;
|
||||
_nextobject setVectorUp [0, 0, 1];
|
||||
_nextobject setpos _nextpos;
|
||||
_nextobject setdir _nextdir;
|
||||
_nextobject lock 2;
|
||||
|
||||
_base_objects pushBack _nextobject;
|
||||
} forEach _objectives_to_build;
|
||||
|
||||
sleep 1;
|
||||
|
||||
{ _x setDamage 0; } foreach (_base_objectives + _base_objects);
|
||||
{_x setDamage 0;} foreach (_base_objectives + _base_objects);
|
||||
|
||||
_grpdefenders = createGroup [GRLIB_side_enemy, true];
|
||||
_idxselected = [];
|
||||
while { count _idxselected < _defenders_amount } do {
|
||||
_idx = floor (random (count _defenders_to_build));
|
||||
if ( !(_idx in _idxselected) ) then {
|
||||
_idxselected pushback _idx;
|
||||
};
|
||||
|
||||
while {count _idxselected < _defenders_amount} do {
|
||||
_idx = floor (random (count _defenders_to_build));
|
||||
if (!(_idx in _idxselected)) then {
|
||||
_idxselected pushBack _idx;
|
||||
};
|
||||
};
|
||||
|
||||
{
|
||||
_nextentry = _defenders_to_build select _x;
|
||||
_nextclass = _nextentry select 0;
|
||||
_nextpos = _nextentry select 1;
|
||||
_nextpos = [((_base_position select 0) + (_nextpos select 0)),((_base_position select 1) + (_nextpos select 1)),(_nextpos select 2)];
|
||||
_nextdir = _nextentry select 2;
|
||||
_nextclass createUnit [_nextpos, _grpdefenders,"nextdefender = this; this addMPEventHandler [""MPKilled"", {_this spawn kill_manager}]", 0.5, "private"];
|
||||
nextdefender setpos _nextpos;
|
||||
nextdefender setdir _nextdir;
|
||||
[nextdefender] spawn building_defence_ai;
|
||||
} foreach _idxselected;
|
||||
(_defenders_to_build select _x) params [
|
||||
"_nextclass",
|
||||
"_nextpos",
|
||||
"_nextdir"
|
||||
];
|
||||
|
||||
_sentry = ceil ((3 + (floor (random 4))) * ( sqrt ( GRLIB_unitcap ) ) );
|
||||
_nextpos = [((_base_position select 0) + (_nextpos select 0)), ((_base_position select 1) + (_nextpos select 1)), (_nextpos select 2)];
|
||||
_nextclass createUnit [_nextpos, _grpdefenders, "nextdefender = this; this addMPEventHandler [""MPKilled"", {_this spawn kill_manager}]", 0.5, "private"];
|
||||
nextdefender setdir _nextdir;
|
||||
nextdefender setpos _nextpos;
|
||||
[nextdefender] spawn building_defence_ai;
|
||||
} forEach _idxselected;
|
||||
|
||||
private _sentryMax = ceil ((3 + (floor (random 4))) * (sqrt (GRLIB_unitcap)));
|
||||
|
||||
_grpsentry = createGroup [GRLIB_side_enemy, true];
|
||||
_base_sentry_pos = [(_base_position select 0) + ((_base_corners select 0) select 0), (_base_position select 1) + ((_base_corners select 0) select 1),0];
|
||||
for [ {_idx=0},{_idx < _sentry},{_idx=_idx+1} ] do {
|
||||
opfor_sentry createUnit [_base_sentry_pos, _grpsentry,"this addMPEventHandler [""MPKilled"", {_this spawn kill_manager}]", 0.5, "private"];
|
||||
for [{_idx=0}, {_idx < _sentryMax}, {_idx=_idx+1}] do {
|
||||
opfor_sentry createUnit [_base_sentry_pos, _grpsentry,"this addMPEventHandler [""MPKilled"", {_this spawn kill_manager}]", 0.5, "private"];
|
||||
};
|
||||
|
||||
while {(count (waypoints _grpsentry)) != 0} do {deleteWaypoint ((waypoints _grpsentry) select 0);};
|
||||
private _waypoint = [];
|
||||
{
|
||||
_waypoint = _grpsentry addWaypoint [[((_base_position select 0) + (_x select 0)), ((_base_position select 1) + (_x select 1)),0], 0];
|
||||
_waypoint setWaypointType "MOVE";
|
||||
_waypoint setWaypointSpeed "LIMITED";
|
||||
_waypoint setWaypointBehaviour "SAFE";
|
||||
_waypoint setWaypointCompletionRadius 5;
|
||||
} foreach _base_corners;
|
||||
_waypoint = _grpsentry addWaypoint [[((_base_position select 0) + (_x select 0)), ((_base_position select 1) + (_x select 1)),0], 0];
|
||||
_waypoint setWaypointType "MOVE";
|
||||
_waypoint setWaypointSpeed "LIMITED";
|
||||
_waypoint setWaypointBehaviour "SAFE";
|
||||
_waypoint setWaypointCompletionRadius 5;
|
||||
} forEach _base_corners;
|
||||
|
||||
_waypoint = _grpsentry addWaypoint [[(_base_position select 0) + ((_base_corners select 0) select 0), (_base_position select 1) + ((_base_corners select 0) select 1),0], 0];
|
||||
_waypoint = _grpsentry addWaypoint [[(_base_position select 0) + ((_base_corners select 0) select 0), (_base_position select 1) + ((_base_corners select 0) select 1), 0], 0];
|
||||
_waypoint setWaypointType "CYCLE";
|
||||
|
||||
_objectives_alive = true;
|
||||
|
||||
secondary_objective_position = _base_position;
|
||||
secondary_objective_position_marker = [(((secondary_objective_position select 0) + 800) - random 1600),(((secondary_objective_position select 1) + 800) - random 1600),0];
|
||||
secondary_objective_position_marker = [(((secondary_objective_position select 0) + 800) - random 1600), (((secondary_objective_position select 1) + 800) - random 1600), 0];
|
||||
publicVariable "secondary_objective_position_marker";
|
||||
sleep 1;
|
||||
|
||||
GRLIB_secondary_in_progress = 0; publicVariable "GRLIB_secondary_in_progress";
|
||||
[2] remoteExec ["remote_call_intel"];
|
||||
|
||||
waitUntil {
|
||||
sleep 5;
|
||||
( { alive _x } count _base_objectives ) <= 1
|
||||
sleep 5;
|
||||
(_base_objectives select {alive _x}) isEqualTo []
|
||||
};
|
||||
|
||||
combat_readiness = round (combat_readiness * GRLIB_secondary_objective_impact);
|
||||
|
|
Loading…
Reference in New Issue