Skip to content

Commit

Permalink
battlegroup ai fix. PR KillahPotatoes#942
Browse files Browse the repository at this point in the history
  • Loading branch information
Crowdedlight committed Mar 4, 2024
1 parent 4f56f4a commit 0ba542d
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 56 deletions.
1 change: 1 addition & 0 deletions Missionframework/CfgFunctions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ class KPLIB {
class isBigtownActive {};
class isClassUAV {};
class isRadio {};
class lambs_enableReinforcements{};
class log {};
class potatoScan {};
class protectObject {};
Expand Down
24 changes: 24 additions & 0 deletions Missionframework/functions/fn_LAMBS_enableReinforcements.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
File: fn_LAMBS_enableReinforcements.sqf
Author: Jenna
Date: 2023-10-21
Last Update: 2023-10-21
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
Enables LAMBS reinforcements + radio on a given group
Parameter(s):
_grp - Group to enable features on [Group, defaults to grpNull]
Returns:
Nothing
*/

params [
["_grp", grpNull, [grpNull]]
];

if (isNull _grp) exitwith {
["Attempted to set LAMBS Reinforcements on null group.", "ERROR"] remoteExecCall ["KPLIB_fnc_log", 2];
};

(leader _grp) setVariable ["lambs_danger_dangerRadio", true,true];
_grp setVariable ["lambs_danger_enableGroupReinforce", true, true];
3 changes: 1 addition & 2 deletions Missionframework/functions/fn_spawnVehicle.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ params [

if (_pos isEqualTo [0, 0, 0]) exitWith {["No or zero pos given"] call BIS_fnc_error; objNull};
if (_classname isEqualTo "") exitWith {["Empty string given"] call BIS_fnc_error; objNull};
if (!canSuspend) exitWith {_this spawn KPLIB_fnc_spawnVehicle};

private _newvehicle = objNull;
private _spawnpos = [];
Expand All @@ -41,7 +40,7 @@ if (_precise) then {
while {_spawnPos isEqualTo []} do {
_i = _i + 1;
_spawnpos = (_pos getPos [random 150, random 360]) findEmptyPosition [10, 100, _classname];
if (_i isEqualTo 10) exitWith {};
if (_i isEqualTo 10) exitWith {_spawnPos = zeroPos};
};
};

Expand Down
60 changes: 20 additions & 40 deletions Missionframework/scripts/server/ai/battlegroup_ai.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@ params [
];

if (isNull _grp) exitWith {};
if (isNil "reset_battlegroups_ai") then {reset_battlegroups_ai = false};

sleep (5 + (random 5));

private _objPos = [getPos (leader _grp)] call KPLIB_fnc_getNearestBluforObjective;

Expand All @@ -14,40 +11,23 @@ private _objPos = [getPos (leader _grp)] call KPLIB_fnc_getNearestBluforObjectiv
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 "AWARE";
_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;
};

waitUntil {
sleep 5;
(((units _grp) select {alive _x}) isEqualTo []) || reset_battlegroups_ai
};

sleep (5 + (random 5));
reset_battlegroups_ai = false;

if (!((units _grp) isEqualTo []) && (GRLIB_endgame == 0)) then {
[_grp] spawn battlegroup_ai;
};
{ deleteWaypoint _x } forEachReversed waypoints _grp;
{_x doFollow leader _grp} forEach units _grp;

_startpos = getPos (leader _grp);

_waypoint = _grp addWaypoint [_objPos, 100];
_waypoint setWaypointType "MOVE";
_waypoint setWaypointSpeed "NORMAL";
_waypoint setWaypointBehaviour "AWARE";
_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";
22 changes: 11 additions & 11 deletions Missionframework/scripts/server/battlegroup/spawn_battlegroup.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,22 @@ if !(_spawn_marker isEqualTo "") then {

if (_infOnly) then {
// Infantry units to choose from
private _infClasses = [KPLIB_o_inf_classes, militia_squad] select (combat_readiness < 50);
private _infClasses = [KPLIB_o_inf_classes, KPLIB_o_militiaInfantry] select (KPLIB_enemyReadiness < 50);

// Adjust target size for infantry
_target_size = 12 max (_target_size * 4);
private _squadNumber = round (_target_size/8);

for "_i" from 1 to _squadNumber do {
// Create infantry groups with up to 8 units per squad
private _grp = createGroup [GRLIB_side_enemy, true];
for "_i" from 0 to (_target_size - 1) do {
if (_i > 0 && {(_i % 8) isEqualTo 0}) then {
_bg_groups pushBack _grp;
_grp = createGroup [GRLIB_side_enemy, true];
};
private _grp = createGroup [kplib_side_enemy, true];
for "_i" from 0 to 7 do {
[selectRandom _infClasses, markerPos _spawn_marker, _grp] call KPLIB_fnc_createManagedUnit;
};
[_grp] spawn battlegroup_ai;
_bg_groups pushBack _grp;
[_grp] call KPLIB_fnc_LAMBS_enableReinforcements;
[_grp] call battlegroup_ai;
_grp setVariable ["KPLIB_isBattleGroup",true];
};
} else {
private _vehicle_pool = [opfor_battlegroup_vehicles, opfor_battlegroup_vehicles_low_intensity] select (combat_readiness < 50);

Expand All @@ -55,8 +55,8 @@ if !(_spawn_marker isEqualTo "") then {
sleep 0.5;

(crew _vehicle) joinSilent _nextgrp;
[_nextgrp] spawn battlegroup_ai;
_bg_groups pushback _nextgrp;
[_nextgrp] call battlegroup_ai;
_nextgrp setVariable ["KPLIB_isBattleGroup",true];

if ((_x in opfor_troup_transports) && ([] call KPLIB_fnc_getOpforCap < GRLIB_battlegroup_cap)) then {
if (_vehicle isKindOf "Air") then {
Expand Down
8 changes: 8 additions & 0 deletions Missionframework/scripts/server/init_server.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,11 @@ execVM "scripts\server\offloading\group_diag.sqf";
if (KP_liberation_restart > 0) then {
execVM "scripts\server\game\server_restart.sqf";
};

["KPLIB_ResetBattleGroups", {
{
if (_x getVariable ["KPLIB_isBattleGroup",false]) then {
[_x] call battlegroup_ai;
}
} foreach allGroups;
}] call CBA_fnc_addEventHandler;
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ stats_readiness_earned = stats_readiness_earned + _combat_readiness_increase;
blufor_sectors pushback _liberated_sector; publicVariable "blufor_sectors";
stats_sectors_liberated = stats_sectors_liberated + 1;

reset_battlegroups_ai = true; publicVariable "reset_battlegroups_ai";
["KPLIB_ResetBattleGroups"] call CBA_fnc_serverEvent;

if (_liberated_sector in sectors_factory) then {
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ if ( GRLIB_endgame == 0 ) then {
sleep 3;
GRLIB_all_fobs = GRLIB_all_fobs - [_thispos];
publicVariable "GRLIB_all_fobs";
reset_battlegroups_ai = true;
["KPLIB_ResetBattleGroups"] call CBA_fnc_serverEvent;
[_thispos] call KPLIB_fnc_destroyFob;
[] spawn KPLIB_fnc_doSave;
stats_fobs_lost = stats_fobs_lost + 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ if ( GRLIB_endgame == 0 ) then {
blufor_sectors = blufor_sectors - [ _sector ];
publicVariable "blufor_sectors";
[_sector, 2] remoteExec ["remote_call_sector"];
reset_battlegroups_ai = true;
["KPLIB_ResetBattleGroups"] call CBA_fnc_serverEvent;
[] spawn KPLIB_fnc_doSave;
stats_sectors_lost = stats_sectors_lost + 1;
{
Expand Down

0 comments on commit 0ba542d

Please sign in to comment.