Skip to content

Commit

Permalink
Battle Group Spawning + AI
Browse files Browse the repository at this point in the history
Originally from: KillahPotatoes#942

Co-Authored-By: some-evil-kitty <[email protected]>
  • Loading branch information
2 people authored and ralreegorganon committed Dec 2, 2023
1 parent 1e5474e commit c8b7606
Show file tree
Hide file tree
Showing 9 changed files with 73 additions and 57 deletions.
1 change: 1 addition & 0 deletions Missionframework/CfgFunctions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class KPLIB {
class isCapitalActive {};
class isClassUAV {};
class isRadio {};
class lambs_enableReinforcements{};
class log {};
class potatoScan {};
class protectObject {};
Expand Down
27 changes: 27 additions & 0 deletions Missionframework/functions/fn_LAMBS_enableReinforcements.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
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];
4 changes: 2 additions & 2 deletions Missionframework/functions/fn_spawnVehicle.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
File: fn_spawnVehicle.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-12-03
Last Update: 2023-05-11
Last Update: 2023-11-14
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
Expand All @@ -27,7 +27,7 @@ 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};
//if (!canSuspend) exitWith {_this spawn KPLIB_fnc_spawnVehicle};

private _newvehicle = objNull;
private _spawnpos = [];
Expand Down
61 changes: 21 additions & 40 deletions Missionframework/scripts/server/ai/battlegroup_ai.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -3,51 +3,32 @@ 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;

[_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);};
{doStop _x; _x doFollow leader group _x} 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 []) && (KPLIB_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: 10 additions & 12 deletions Missionframework/scripts/server/battlegroup/spawn_battlegroup.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,18 @@ if !(_spawn_marker isEqualTo "") then {

// 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 [KPLIB_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 [KPLIB_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;
};
_bg_groups pushBack _grp;
{
[_x] spawn battlegroup_ai;
} forEach _bg_groups;
[_grp] call KPLIB_fnc_LAMBS_enableReinforcements;
[_grp] call battlegroup_ai;
_grp setVariable ["KPLIB_isBattleGroup",true];
};
} else {
private _vehicle_pool = [KPLIB_o_battleGrpVehicles, KPLIB_o_battleGrpVehiclesLight] select (KPLIB_enemyReadiness < 50);

Expand All @@ -57,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 KPLIB_o_troopTransports) && ([] call KPLIB_fnc_getOpforCap < KPLIB_cap_battlegroup)) then {
if (_vehicle isKindOf "Air") then {
Expand Down
9 changes: 9 additions & 0 deletions Missionframework/scripts/server/init_server.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,12 @@ execVM "scripts\server\offloading\group_diag.sqf";
if (KPLIB_param_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 + _KPLIB_enemyReadiness_increase
KPLIB_sectors_player pushback _liberated_sector; publicVariable "KPLIB_sectors_player";
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 KPLIB_sectors_factory) then {
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ if ( KPLIB_endgame == 0 ) then {
sleep 3;
KPLIB_sectors_fob = KPLIB_sectors_fob - [_thispos];
publicVariable "KPLIB_sectors_fob";
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 ( KPLIB_endgame == 0 ) then {
KPLIB_sectors_player = KPLIB_sectors_player - [ _sector ];
publicVariable "KPLIB_sectors_player";
[_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 c8b7606

Please sign in to comment.