Merge pull request #709 from KillahPotatoes/v0.96.7-more_tweaks

V0.96.7 battlegroup tweaks
This commit is contained in:
Christian 2019-11-24 09:17:56 +01:00 committed by GitHub
commit 7a2ab40b52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 233 additions and 196 deletions

View File

@ -1,54 +1,53 @@
_grp = _this select 0;
_infantry = false;
params [
["_grp", grpNull, [grpNull]]
];
if ( count _this == 2 ) then {
_infantry = true;
if (isNull _grp) exitWith {};
if (isNil "reset_battlegroups_ai") then {reset_battlegroups_ai = false};
sleep (5 + (random 5));
private _objPos = ([getPos (leader _grp)] call F_getNearestBluforObjective) select 0;
[_objPos] remoteExec ["remote_call_incoming"];
private _startpos = getPos (leader _grp);
private _waypoint = [];
while {((getPos (leader _grp)) distance _startpos) < 100} do {
while {!((waypoints _grp) isEqualTo [])} do {deleteWaypoint ((waypoints _grp) select 0);};
{_x doFollow leader _grp} forEach units _grp;
_startpos = getPos (leader _grp);
_waypoint = _grp addWaypoint [_objPos, 100];
_waypoint setWaypointType "MOVE";
_waypoint setWaypointSpeed "NORMAL";
_waypoint setWaypointBehaviour "SAFE";
_waypoint setWaypointCombatMode "YELLOW";
_waypoint setWaypointCompletionRadius 30;
_waypoint = _grp addWaypoint [_objPos, 100];
_waypoint setWaypointType "SAD";
_waypoint = _grp addWaypoint [_objPos, 100];
_waypoint setWaypointType "SAD";
_waypoint = _grp addWaypoint [_objPos, 100];
_waypoint setWaypointType "SAD";
_waypoint = _grp addWaypoint [_objPos, 100];
_waypoint setWaypointType "CYCLE";
sleep 90;
};
if (isNil "reset_battlegroups_ai" ) then { reset_battlegroups_ai = false };
waitUntil {
sleep 5;
(((units _grp) select {alive _x}) isEqualTo []) || reset_battlegroups_ai
};
sleep (3 + (random 3));
sleep (5 + (random 5));
reset_battlegroups_ai = false;
while { ( count units _grp != 0 ) && ( GRLIB_endgame == 0 ) } do {
sleep (5 + (random 5));
private _objectivepos = ([getpos (leader _grp)] call F_getNearestBluforObjective) select 0;
[_objectivepos] remoteExec ["remote_call_incoming"];
private _startpos = getpos (leader _grp);
while { ((getpos (leader _grp)) distance _startpos) < 100 } do {
while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
{_x doFollow leader _grp} foreach units _grp;
_startpos = getpos (leader _grp);
private _waypoint = _grp addWaypoint [_objectivepos, 100];
_waypoint setWaypointType "MOVE";
_waypoint setWaypointSpeed "NORMAL";
_waypoint setWaypointBehaviour "SAFE";
_waypoint setWaypointCombatMode "YELLOW";
_waypoint setWaypointCompletionRadius 30;
_waypoint = _grp addWaypoint [_objectivepos, 100];
_waypoint setWaypointType "SAD";
_waypoint = _grp addWaypoint [_objectivepos, 100];
_waypoint setWaypointType "SAD";
_waypoint = _grp addWaypoint [_objectivepos, 100];
_waypoint setWaypointType "SAD";
_waypoint = _grp addWaypoint [_objectivepos, 100];
_waypoint setWaypointType "CYCLE";
sleep 180;
};
waitUntil {
sleep 5;
( { alive _x } count (units _grp) == 0) || reset_battlegroups_ai;
};
sleep (5 + (random 5));
reset_battlegroups_ai = false;
};
if (!((units _grp) isEqualTo []) && (GRLIB_endgame == 0)) then {
[_grp] spawn battlegroup_ai;
};

View File

@ -1,65 +1,74 @@
_troup_transport = _this select 0;
_transport_group = (group (driver _troup_transport));
_start_pos = getpos _troup_transport;
_dat_objective = ([getpos _troup_transport] call F_getNearestBluforObjective) select 0;
_unload_distance = 1000;
params [
["_transVeh", objNull, [objNull]]
];
if (isNull _transVeh) exitWith {};
sleep 1;
_initial_crewcount = count crew _troup_transport;
waitUntil { sleep 0.2; !(alive _troup_transport) || !(alive (driver _troup_transport)) || (((_troup_transport distance _dat_objective) < _unload_distance) && (!(surfaceIsWater (getpos _troup_transport)))) };
private _transGrp = (group (driver _transVeh));
private _start_pos = getpos _transVeh;
private _objPos = ([getpos _transVeh] call F_getNearestBluforObjective) select 0;
private _unload_distance = 500;
private _crewcount = count crew _transVeh;
if ((alive _troup_transport) && (alive (driver _troup_transport))) then {
_troupgrp = createGroup [GRLIB_side_enemy, true];
while {(count (waypoints _troupgrp)) != 0} do {deleteWaypoint ((waypoints _troupgrp) select 0);};
{
[_x, _start_pos, _troupgrp, "PRIVATE", 0.5] call F_createManagedUnit;
} foreach (["army"] call F_getAdaptiveSquadComp);
{ _x moveInCargo _troup_transport } foreach (units _troupgrp);
while {(count (waypoints _troupgrp)) != 0} do {deleteWaypoint ((waypoints _troupgrp) select 0);};
sleep 3;
_transport_waypoint = _transport_group addWaypoint [getpos _troup_transport, 0,0];
_transport_waypoint setWaypointType "TR UNLOAD";
_transport_waypoint setWaypointCompletionRadius 200;
_troops_waypoint = _troupgrp addWaypoint [getpos _troup_transport, 0];
_troops_waypoint setWaypointType "GETOUT";
_troops_waypoint setWaypointCompletionRadius 200;
_troops_waypoint synchronizeWaypoint [_transport_waypoint];
{ unassignVehicle _troup_transport } forEach (units _troupgrp);
_troupgrp leaveVehicle _troup_transport;
(units _troupgrp) allowGetIn false;
_troops_waypoint_2 = _troupgrp addWaypoint [getpos _troup_transport, 250];
_troops_waypoint_2 setWaypointType "MOVE";
_troops_waypoint_2 setWaypointCompletionRadius 5;
waitUntil { sleep 0.3; _initial_crewcount >= count crew _troup_transport };
sleep 5;
while {(count (waypoints _transport_group)) != 0} do {deleteWaypoint ((waypoints _transport_group) select 0);};
_waypoint2 = _transport_group addWaypoint [_dat_objective, 100];
_waypoint2 setWaypointType "SAD";
_waypoint2 setWaypointSpeed "NORMAL";
_waypoint2 setWaypointBehaviour "COMBAT";
_waypoint2 setWaypointCombatMode "RED";
_waypoint2 setWaypointCompletionRadius 30;
_waypoint2 = _transport_group addWaypoint [_dat_objective, 100];
_waypoint2 setWaypointType "SAD";
_waypoint2 = _transport_group addWaypoint [_dat_objective, 100];
_waypoint2 setWaypointType "CYCLE";
sleep 10;
[_troupgrp, true] spawn battlegroup_ai;
waitUntil {
sleep 0.2;
!(alive _transVeh) ||
!(alive (driver _transVeh)) ||
(((_transVeh distance _objPos) < _unload_distance) && !(surfaceIsWater (getpos _transVeh)))
};
if ((alive _transVeh) && (alive (driver _transVeh))) then {
_infGrp = createGroup [GRLIB_side_enemy, true];
{
[_x, _start_pos, _infGrp, "PRIVATE", 0.5] call F_createManagedUnit;
} foreach (["army"] call F_getAdaptiveSquadComp);
{_x moveInCargo _transVeh} forEach (units _infGrp);
while {(count (waypoints _infGrp)) != 0} do {deleteWaypoint ((waypoints _infGrp) select 0);};
sleep 3;
private _transVehWp = _transGrp addWaypoint [getpos _transVeh, 0,0];
_transVehWp setWaypointType "TR UNLOAD";
_transVehWp setWaypointCompletionRadius 200;
private _infWp = _infGrp addWaypoint [getpos _transVeh, 0];
_infWp setWaypointType "GETOUT";
_infWp setWaypointCompletionRadius 200;
_infWp synchronizeWaypoint [_transVehWp];
{unassignVehicle _transVeh} forEach (units _infGrp);
_infGrp leaveVehicle _transVeh;
(units _infGrp) allowGetIn false;
private _infWp_2 = _infGrp addWaypoint [getpos _transVeh, 250];
_infWp_2 setWaypointType "MOVE";
_infWp_2 setWaypointCompletionRadius 5;
waitUntil {sleep 0.5; _crewcount >= count crew _transVeh};
sleep 5;
while {(count (waypoints _transGrp)) != 0} do {deleteWaypoint ((waypoints _transGrp) select 0);};
_transVehWp = _transGrp addWaypoint [_objPos, 100];
_transVehWp setWaypointType "SAD";
_transVehWp setWaypointSpeed "NORMAL";
_transVehWp setWaypointBehaviour "COMBAT";
_transVehWp setWaypointCombatMode "RED";
_transVehWp setWaypointCompletionRadius 30;
_transVehWp = _transGrp addWaypoint [_objPos, 100];
_transVehWp setWaypointType "SAD";
_transVehWp = _transGrp addWaypoint [_objPos, 100];
_transVehWp setWaypointType "CYCLE";
sleep 10;
[_infGrp] spawn battlegroup_ai;
};

View File

@ -1,22 +1,29 @@
private [ "_sleeptime", "_countplayers" ];
private ["_sleeptime"];
sleep ( 900 / GRLIB_csat_aggressivity );
uiSleep (900 / GRLIB_csat_aggressivity);
while {GRLIB_csat_aggressivity > 0.9 && GRLIB_endgame == 0} do {
while { GRLIB_csat_aggressivity > 0.9 && GRLIB_endgame == 0 } do {
_sleeptime = (2100 + (random 2100)) / (([] call F_adaptiveOpforFactor) * GRLIB_csat_aggressivity);
_sleeptime = (2100 + (random 2100)) / (([] call F_adaptiveOpforFactor) * GRLIB_csat_aggressivity);
if (combat_readiness >= 80) then {_sleeptime = _sleeptime * 0.75};
if (combat_readiness >= 90) then {_sleeptime = _sleeptime * 0.75};
if (combat_readiness >= 95) then {_sleeptime = _sleeptime * 0.75};
if ( combat_readiness >= 80 ) then { _sleeptime = _sleeptime * 0.75 };
if ( combat_readiness >= 90 ) then { _sleeptime = _sleeptime * 0.75 };
if ( combat_readiness >= 95 ) then { _sleeptime = _sleeptime * 0.75 };
uiSleep _sleeptime;
sleep _sleeptime;
if (!isNil "GRLIB_last_battlegroup_time") then {
waitUntil {
uiSleep 5;
diag_tickTime > (GRLIB_last_battlegroup_time + (2100 / GRLIB_csat_aggressivity))
};
};
if ( !isNil "GRLIB_last_battlegroup_time" ) then {
waitUntil { sleep 5; time > ( GRLIB_last_battlegroup_time + ( 2100 / GRLIB_csat_aggressivity ) ) };
};
if ((count (allPlayers - entities "HeadlessClient_F") >= (10 / GRLIB_csat_aggressivity)) && ([] call F_opforCap < GRLIB_battlegroup_cap) && (combat_readiness >= 70) && (diag_fps > 15.0)) then {
[] spawn spawn_battlegroup;
};
if (
(count (allPlayers - entities "HeadlessClient_F") >= (10 / GRLIB_csat_aggressivity)) &&
([] call F_opforCap < GRLIB_battlegroup_cap) &&
(combat_readiness >= 70) &&
(diag_fps > 15.0)
) then {
[] spawn spawn_battlegroup;
};
};

View File

@ -1,74 +1,78 @@
if ( GRLIB_endgame == 1 ) exitWith {};
params [
["_spawn_marker", "", [""]]
];
private [ "_bg_groups", "_target_size", "_vehicle_pool" ];
_bg_groups = [];
if (GRLIB_endgame == 1) exitWith {};
last_battlegroup_size = 0;
_spawn_marker = "";
if ( count _this == 1 ) then {
_spawn_marker = [ 2000, 10000, false, _this select 0 ] call F_findOpforSpawnPoint;
if !(_spawn_marker isEqualTo "") then {
_spawn_marker = [2000, 10000, false, _spawn_marker] call F_findOpforSpawnPoint;
} else {
_spawn_marker = [ 2000, 10000, false ] call F_findOpforSpawnPoint;
_spawn_marker = [2000, 10000, false] call F_findOpforSpawnPoint;
};
if !(_spawn_marker isEqualTo "") then {
_vehicle_pool = opfor_battlegroup_vehicles;
if ( combat_readiness < 50 ) then {
_vehicle_pool = opfor_battlegroup_vehicles_low_intensity;
};
GRLIB_last_battlegroup_time = diag_tickTime;
if ( _spawn_marker != "" ) then {
private _bg_groups = [];
private _battlegroup_size = 0;
private _vehicle_pool = [opfor_battlegroup_vehicles, opfor_battlegroup_vehicles_low_intensity] select (combat_readiness < 50);
private _selected_opfor_battlegroup = [];
GRLIB_last_battlegroup_time = time;
private _target_size = GRLIB_battlegroup_size * ([] call F_adaptiveOpforFactor) * (sqrt GRLIB_csat_aggressivity);
if (_target_size >= 16) then {_target_size = 16;};
if (combat_readiness < 60) then {_target_size = round (_target_size * 0.65);};
_selected_opfor_battlegroup = [];
_target_size = GRLIB_battlegroup_size * ([] call F_adaptiveOpforFactor) * (sqrt GRLIB_csat_aggressivity);
if ( _target_size >= 16 ) then { _target_size = 16; };
if ( combat_readiness < 60 ) then { _target_size = round (_target_size * 0.65) };
while { count _selected_opfor_battlegroup < _target_size } do {
_selected_opfor_battlegroup pushback (selectRandom _vehicle_pool);
};
while {count _selected_opfor_battlegroup < _target_size} do {
_selected_opfor_battlegroup pushback (selectRandom _vehicle_pool);
};
[_spawn_marker] remoteExec ["remote_call_battlegroup"];
[_spawn_marker] remoteExec ["remote_call_battlegroup"];
if (worldName in KP_liberation_battlegroup_clearance) then {
[markerpos _spawn_marker, 15] call F_createClearance;
};
{
_nextgrp = createGroup [GRLIB_side_enemy, true];
_vehicle = [markerpos _spawn_marker, _x] call F_libSpawnVehicle;
sleep 0.5;
(crew _vehicle) joinSilent _nextgrp;
[_nextgrp] spawn battlegroup_ai;
_bg_groups pushback _nextgrp;
if ( ( _x in opfor_troup_transports ) && ( [] call F_opforCap < GRLIB_battlegroup_cap ) ) then {
[_vehicle] spawn troup_transport;
};
last_battlegroup_size = last_battlegroup_size + 1;
} foreach _selected_opfor_battlegroup;
private ["_nextgrp", "_vehicle"];
{
_nextgrp = createGroup [GRLIB_side_enemy, true];
_vehicle = [markerpos _spawn_marker, _x] call F_libSpawnVehicle;
if ( GRLIB_csat_aggressivity > 0.9 ) then {
[([markerpos _spawn_marker] call F_getNearestBluforObjective) select 0] spawn spawn_air;
};
sleep 0.5;
sleep 5;
(crew _vehicle) joinSilent _nextgrp;
[_nextgrp] spawn battlegroup_ai;
_bg_groups pushback _nextgrp;
combat_readiness = combat_readiness - (round ((last_battlegroup_size / 2) + (random (last_battlegroup_size / 2))));
if ( combat_readiness < 0 ) then { combat_readiness = 0 };
if ((_x in opfor_troup_transports) && ([] call F_opforCap < GRLIB_battlegroup_cap)) then {
if (_vehicle isKindOf "Air") then {
[([markerPos _spawn_marker] call F_getNearestBluforObjective) select 0, _vehicle] spawn send_paratroopers;
} else {
[_vehicle] spawn troup_transport;
};
};
stats_hostile_battlegroups = stats_hostile_battlegroups + 1;
_battlegroup_size = _battlegroup_size + 1;
} forEach _selected_opfor_battlegroup;
{
if ( local _x ) then {
_headless_client = [] call F_lessLoadedHC;
if ( !isNull _headless_client ) then {
_x setGroupOwner ( owner _headless_client );
};
};
sleep 3;
if (GRLIB_csat_aggressivity > 0.9) then {
[([markerpos _spawn_marker] call F_getNearestBluforObjective) select 0] spawn spawn_air;
};
} foreach _bg_groups;
sleep 5;
combat_readiness = combat_readiness - (round ((_battlegroup_size / 2) + (random (_battlegroup_size / 2))));
if (combat_readiness < 0) then {combat_readiness = 0};
stats_hostile_battlegroups = stats_hostile_battlegroups + 1;
{
if (local _x) then {
_headless_client = [] call F_lessLoadedHC;
if (!isNull _headless_client) then {
_x setGroupOwner (owner _headless_client);
};
};
sleep 3;
} forEach _bg_groups;
};

View File

@ -1,27 +1,42 @@
params ["_targetsector"];
private _targetpos = getMarkerPos _targetsector;
private _spawnsector = ([sectors_airspawn, [_targetpos], {(markerpos _x) distance _input0}, "ASCEND"] call BIS_fnc_sortBy) select 0;
params [
["_targetsector", "", ["",[]]],
["_chopper_type", objNull, [objNull]]
];
private _chopper_type = selectRandom opfor_choppers;
if (_targetsector isEqualTo "") exitWith {};
while {!(_chopper_type in opfor_troup_transports)} do {
_chopper_type = selectRandom opfor_choppers;
private _targetpos = _targetsector;
if (_targetpos isEqualType "") then {
_targetpos = getMarkerPos _targetsector;
};
private _spawnsector = ([sectors_airspawn, [_targetpos], {(markerpos _x) distance _input0}, "ASCEND"] call BIS_fnc_sortBy) select 0;
private _newvehicle = objNull;
private _pilot_group = grpNull;
if (isNull _chopper_type) then {
_chopper_type = selectRandom opfor_choppers;
private _newvehicle = createVehicle [_chopper_type, markerpos _spawnsector, [], 0, "FLY"];
createVehicleCrew _newvehicle;
sleep 0.1;
while {!(_chopper_type in opfor_troup_transports)} do {
_chopper_type = selectRandom opfor_choppers;
};
private _pilot_group = createGroup [GRLIB_side_enemy, true];
(crew _newvehicle) joinSilent _pilot_group;
_newvehicle = createVehicle [_chopper_type, markerpos _spawnsector, [], 0, "FLY"];
createVehicleCrew _newvehicle;
sleep 0.1;
_pilot_group = createGroup [GRLIB_side_enemy, true];
(crew _newvehicle) joinSilent _pilot_group;
_newvehicle addMPEventHandler ["MPKilled", {_this spawn kill_manager}];
{_x addMPEventHandler ["MPKilled", {_this spawn kill_manager}];} forEach (crew _newvehicle);
} else {
_newvehicle = _chopper_type;
_pilot_group = group _newvehicle;
};
private _para_group = createGroup [GRLIB_side_enemy, true];
_newvehicle addMPEventHandler ["MPKilled", {_this spawn kill_manager}];
{_x addMPEventHandler ["MPKilled", {_this spawn kill_manager}];} forEach (crew _newvehicle);
while {(count (units _para_group)) < 8} do {
[opfor_paratrooper, markerPos _spawnsector, _para_group] call F_createManagedUnit;
[opfor_paratrooper, markerPos _spawnsector, _para_group] call F_createManagedUnit;
};
{removeBackpack _x; _x addBackPack "B_parachute"; _x moveInCargo _newvehicle;} forEach (units _para_group);
@ -72,15 +87,15 @@ _pilot_group setCurrentWaypoint [_para_group, 1];
_newvehicle flyInHeight 100;
waitUntil {sleep 1;
!(alive _newvehicle) || (damage _newvehicle > 0.2 ) || (_newvehicle distance _targetpos < 400 )
!(alive _newvehicle) || (damage _newvehicle > 0.2 ) || (_newvehicle distance _targetpos < 400)
};
_newvehicle flyInHeight 100;
{
unassignVehicle _x;
moveout _x;
sleep 0.5;
unassignVehicle _x;
moveout _x;
sleep 0.5;
} forEach (units _para_group);
_newvehicle flyInHeight 100;

View File

@ -195,8 +195,11 @@ class Missions
* Added: Steam UID whitelist in config to grant access to commander actions even if not in that slot.
* Added: Applied mission parameters are logged in server rpt.
* Updated: Updated CUP presets to be inline with October 2019 stable build of CUP mods. Thanks to [Eogos](https://github.com/Eogos)
* Updated: Turkish translation. Thanks to [654wak654](https://github.com/654wak654)
* Tweaked: Default blacklist now only holds the static and tent backpacks.
* Tweaked: Scripted server restart now automatically recognizes the OS of the server. More info in the [Wiki article](https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_FAQ#how-does-the-scripted-server-restart-work)
* Tweaked: Infantry for battlegroup transport vehicles are now spawned closer to the objective.
* Tweaked: Transport helicopters in battlegroups are now correctly dropping paratroopers.
* Fixed: Some CUP presets had free buildable arsenals. Thanks to [Eogos](https://github.com/Eogos)
* Fixed: Wrong boat in CUP USMC Woodland preset. Thanks to [Eogos](https://github.com/Eogos)
* Fixed: Object inits will fire on units not only vehicles.