Tweaked FOB template placing and selection

This commit is contained in:
Wyqer 2019-07-25 13:07:24 +02:00
parent 0e1e2b13c5
commit 8467163d7c
No known key found for this signature in database
GPG Key ID: D7E2F8BD7F1E48FA
2 changed files with 95 additions and 76 deletions

View File

@ -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";
};

View File

@ -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);