1 Commits
Author SHA1 Message Date
MrFastwind 4ff3e5107f fix: prevent group_diag from prematurely marking patrol groups for deletion
Tags patrol groups (KPLIB_patrol_group) so group_diag skips them, and
cleans up the tag + enables deleteGroupWhenEmpty only once the patrol
lifecycle is complete. Prevents the '_grp was nil' log spam by fixing
the root cause rather than just silencin the symptom.
2026-07-03 16:37:05 +02:00
8 changed files with 386 additions and 382 deletions
-41
View File
@@ -8,50 +8,9 @@ on:
env:
PBO_NAME: "KPLib-Ruha.ruha.pbo"
SQFVM_VERSION: "v2026.04.03-ed9f5f5"
SQFVM_URL: "https://github.com/SQFvm/runtime/releases/download/v2026.04.03-ed9f5f5/sqfvm_linux_x64_gcc.zip"
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download SQFVM
run: |
curl -sL "$SQFVM_URL" -o /tmp/sqfvm.zip
unzip -o /tmp/sqfvm.zip -d /tmp/sqfvm
chmod +x /tmp/sqfvm/sqfvm_linux_x64_gcc/sqfvm
- name: Run SQFVM lint
run: |
SRC="$(realpath src)"
ARGS=()
while IFS= read -r -d '' f; do
ARGS+=(-i "$f")
done < <(find "$SRC" -name "*.sqf" -print0)
# pipefail would kill this step on SQFVM's non-zero exit before we can check the log
/tmp/sqfvm/sqfvm_linux_x64_gcc/sqfvm \
-a --parse-only --no-execute-print \
--input-config "$SRC/description.ext" \
"${ARGS[@]}" 2>&1 | tee lint_output.log || true
# Filter known false positive: SQFVM config parser chokes on & in author string
if grep -v "description.ext" lint_output.log | grep -q "^\[ERR\]"; then
echo "::error::SQFVM found syntax errors"
exit 1
fi
- name: Upload lint log
if: always()
uses: actions/upload-artifact@v3
with:
name: sqfvm-lint.log
path: lint_output.log
if-no-files-found: warn
pack:
needs: [lint]
runs-on: ubuntu-latest
steps:
+2 -5
View File
@@ -51,9 +51,7 @@ KP_liberation_medical_vehicles = [
"uns_ch47a_medevac",
"uns_H13_medevac_CAV",
"uns_M577_amb",
"uns_uh1D_med",
"tbd_mtlb_ambulance",
"b_afougf_Mi8MTV3_Evac"
"uns_uh1D_med"
];
// Building classnames which also function as ACE medical facilities.
@@ -796,8 +794,7 @@ vehicle_repair_sources = [
"UNS_Hanger_repair",
"uns_M113_ENG",
"uns_M35A2_repair",
"uns_motorpool1_repair",
"tbd_mtlb_engineer"
"uns_motorpool1_repair"
];
vehicle_rearm_sources = [
+112 -127
View File
@@ -1,25 +1,10 @@
/*
Needed Mods:
- None
Optional Mods:
- BWMod
- RHSUSAF
- F-15C
- F/A-18
- CUP Weapons
- CUP Vehicles
- USAF Main Pack
- USAF Fighters Pack
- USAF Utility Pack
*/
/*
--- Support classnames ---
Each of these should be unique.
The same classnames for different purposes may cause various unpredictable issues with player actions.
Or not, just don't try!
*/
FOB_typename = "Land_Cargo_HQ_V1_F"; // This is the main FOB HQ building.
FOB_box_typename = "B_Slingload_01_Cargo_F"; // This is the FOB as a container.
FOB_truck_typename = "B_Truck_01_box_F"; // This is the FOB as a vehicle.
@@ -49,32 +34,33 @@ KP_liberation_fuel_crate = "CargoNet_01_barrels_F"; // This
The above example is the NATO IFV-6a Cheetah, it costs 300 supplies, 150 ammunition and 150 fuel to build.
IMPORTANT: The last element inside each array must have no comma at the end!
*/
infantry_units = [
["b_afougf_rifleman_ak74",15,0,0], // Rifleman (Light)
["b_afougf_rifleman_gp25",20,0,0], // Rifleman
["b_afougf_pt_rpg7",30,0,0], // Rifleman (AT)
["b_afougf_pt_maaws",25,0,0], // Grenadier
["b_afougf_mg_m240",25,0,0], // Autorifleman
["b_afougf_mg_mg42",35,0,0], // Heavygunner
["b_afougf_mg_pkm",30,0,0], // Marksman
["b_afougf_ptassist_fgm148",40,0,0], // Sharpshooter
["b_afougf_pt_fgm148",50,10,0], // AT Specialist
["b_afougf_aa_igla_specialist",50,10,0], // AA Specialist
["b_afougf_medic",30,0,0], // Combat Life Saver
["b_afougf_tank_gunner_F",30,0,0], // Engineer
["b_afougf_rifleman_ak74",20,0,0], // Recon Scout
["b_afougf_rifleman_gp25",30,0,0], // Recon Scout (AT)
["b_afougf_pt_rpg7",30,0,0], // Recon Marksman
["b_afougf_marksman_m82",40,0,0], // Recon Sharpshooter
["b_afougf_marksman_m14",30,0,0], // Recon Paramedic
["b_afougf_pt_nlaw",30,0,0], // Recon Demolition Expert
["b_afougf_marksman_svdm",70,5,0], // Sniper
["b_afougf_grenadier_m32_mgl",20,0,0], // Spotter
["b_afougf_tankist_F",10,0,0], // Crewman
["b_afougf_teamleader_gp25",20,0,0], // Para Trooper
["b_afougf_pilot_F",10,0,0], // Helicopter Crew
["b_afougf_pilot_F",10,0,0], // Helicopter Pilot
["b_afougf_pilot_F",10,0,0] // Pilot
["UA_Azov_forwardobserver",15,0,0], // Rifleman (Light)
["UA_Azov_rifleman",20,0,0], // Rifleman
["UA_Azov_sapper",30,0,0], // Rifleman (AT)
["UA_Azov_grenadier",25,0,0], // Grenadier
["UA_Azov_machinegunner",25,0,0], // Autorifleman
["B_HeavyGunner_F",35,0,0], // Heavygunner
["UA_Azov_gunner",30,0,0], // Marksman
["UA_Azov_rangefinder",40,0,0], // Sharpshooter
["UA_Azov_operatoratgm",50,10,0], // AT Specialist
["UA_Azov_operatormanpad",50,10,0], // AA Specialist
["UA_Azov_riflemancombatlifesaver",30,0,0], // Combat Life Saver
["UA_Azov_driver",30,0,0], // Engineer
["UA_SSO_recon",20,0,0], // Recon Scout
["UA_SSO_reconsapper",30,0,0], // Recon Scout (AT)
["UA_SSO_reconradiotelephonist",30,0,0], // Recon Marksman
["UA_SSO_reconsniper",40,0,0], // Recon Sharpshooter
["UA_SSO_seniorrecon",30,0,0], // Recon Paramedic
["UA_SSO_reconoperatoruav",30,0,0], // Recon Demolition Expert
["UA_Azov_sniper",70,5,0], // Sniper
["UA_Azov_rangefinder",20,0,0], // Spotter
["UA_Azov_driver",10,0,0], // Crewman
["UA_DShV_lieutenant",20,0,0], // Para Trooper
["UA_VVS_helicopterpilot",10,0,0], // Helicopter Crew
["UA_VVS_helicopterpilot",10,0,0], // Helicopter Pilot
["UA_VVS_pilot",10,0,0] // Pilot
];
light_vehicles = [
@@ -131,89 +117,84 @@ light_vehicles = [
];
heavy_vehicles = [
//BRDM
["b_afougf_BRDM2_HQ",225,100,200],
["b_afougf_BRDM2",250,200,200],
["b_afougf_BRDM2_ATGM",300,400,200],
["tbd_mtlb_s60",200,40,100],
["tbd_mtlb_vmk",200,60,100],
["tbd_mtlb_shturm",200,0,100],
["tbd_mtlb_s8",200,0,125],
["tbd_mtlb_pkt",200,75,125],
["tbd_mtlb_mt12",200,75,125],
["tbd_mtlb_engineer",300,100,150],
["tbd_mtlb_bmo",300,150,150],
["tbd_mtlb_bm21",300,200,150],
["tbd_mtlb_ambulance",300,225,150],
["tbd_mtlb_6ma1_tkn4g",300,250,175],
["tbd_mtlb",300,250,175],
["rhsusf_M1117_O",300,250,175],
["rhsusf_m113_usarmy_medical",300,250,175],
["UAF_M113_MK19",300,250,175],
["UAF_M113_M2",300,250,175],
["b_afougf_m113_unarmed",400,300,200],
["TSB_BRDM2_ZU23_g",400,300,200],
["rhsusf_M1117_O",300,300,175],
//MT-LB
["tbd_mtlb",250,0,250],
["tbd_mtlb_pkt",200,100,250],
["tbd_mtlb_vmk",200,200,250],
["tbd_mtlb_6ma1_tkn4g",250,300,250],
["tbd_mtlb_s60",225,250,250],
["tbd_mtlb_mt12",225,300,250],
["tbd_mtlb_s8",225,225,250],
["tbd_mtlb_shturm",300,400,250],
["tbd_mtlb_bmo",300,375,250],
["tbd_mtlb_engineer",350,0,250],
//M113
["b_afougf_m113_unarmed",275,0,200],
["UAF_M113_M2",300,150,200],
["UAF_M113_MK19",300,175,200],
["rhsusf_m113_usarmy_medical",375,0,200],
["rhsusf_m113_usarmy_supply",375,150,200],
//BTR
["b_afougf_old_btr70",250,150,225],
["b_afougf_btr80_common",300,150,250],
["FA_UAF_BTR3",450,650,350],
["FA_UAF_BTR4",550,650,400],
//BMP
["b_afougf_prp3_Base",325,0,350],
["b_afougf_bmd1",300,350,350],
["b_afougf_bmd2",325,375,350],
["b_afougf_brm1k_Base",325,500,350],
["b_afougf_bmp1p",325,350,350],
["b_afougf_bmp2d",350,375,350],
["UAF_bmp_3",400,400,350],
["UAF_bmp_3m",400,400,350],
["FA_UAF_BMP1U",450,600,325],
["UF_M2A2",700,500,300],
["UF_M2A2_BUSKI",750,500,300],
//Tanks
["FA_UAF_T64BV",800,800,600],
["FA_UAF_T64BM",900,850,650],
["FA_UAF_T64BM2",925,850,650],
["b_afougf_t72bb",750,800,600],
["UAF_t72b3",925,850,650],
["t80bv_Ukraine",975,875,600],
["b_afougf_t80u",1000,875,800],
["FA_UAF_T84M",1000,875,650],
["FA_UAF_Leopard2A4",1250,975,650],
["FA_UAF_Leopard2A4_ERA",1275,975,650],
["UF_M1A1",1500,1200,1000],
//Arty
["tbd_mtlb_tundzha",250,225,250],
["UAF_2s1",325,450,350],
["uaf_2s3",400,450,400],
["FA_UAF_2S17",425,475,350],
["tbd_mtlb_nona",325,475,250],
["UAF_m109",750,875,575],
["b_afougf_yt_BM21",250,600,150],
["FA_UAF_Zamak_MLRS",300,600,175],
["tbd_mtlb_bm21",350,600,250],
["b_afougf_m142_base",1775,1775,200],
//AA
["tbd_mtlb_strela_m3",400,800,250],
["b_afougf_zsu234_aa",750,600,600]
["UF_M2A2_BUSKI",400,300,200],
["UF_M2A2",400,350,225],
["UAF_bmp_3m",500,350,225],
["UAF_bmp_3",500,400,250],
["b_afougf_prp3_Base",500,400,250],
["b_afougf_brm1k_Base",500,500,250],
["b_afougf_bmp2d",550,550,250],
["b_afougf_bmp2",600,1250,300],
["b_afougf_bmp1p",600,1250,300],
["b_afougf_bmp1",800,1750,400],
["b_afougf_bmd2",800,1750,400],
["b_afougf_bmd1",800,1750,400],
["b_afougf_BRDM2_HQ",800,1750,400],
["b_afougf_BRDM2_UM",800,1750,400],
["b_afougf_BRDM2_ATGM",800,1750,400],
["b_afougf_BRDM2",800,1750,400],
["FA_UAF_BTR4",800,1750,400],
["FA_UAF_BTR3",800,1750,400],
["FA_UAF_BMP1U",800,1750,400],
["FA_UAF_2S17",800,1750,400],
["FA_UAF_Zamak_MLRS",800,1750,400],
["UAF_2s1",800,1750,400],
["uaf_2s3",800,1750,400],
["UAF_m109",800,1750,400],
["b_afougf_yt_BM21",800,1750,400],
["b_afougf_m142_base",800,1750,400],
["tbd_mtlb_tundzha",800,1750,400],
["tbd_mtlb_nona",800,1750,400],
["FA_UAF_Leopard2A4",800,1750,400],
["FA_UAF_Leopard2A4_ERA",800,1750,400],
["FA_UAF_T64BM",800,1750,400],
["FA_UAF_T64BM2",800,1750,400],
["FA_UAF_T64BV",800,1750,400],
["FA_UAF_T84M",800,1750,400],
["b_afougf_t72bb",800,1750,400],
["t80bv_Ukraine",800,1750,400],
["b_afougf_t80u",800,1750,400],
["UAF_t72b3",800,1750,400],
["UF_M1A1",800,1750,400],
["tbd_mtlb_strela_m3",500,500,500],
["b_afougf_zsu234_aa",500,500,500]
];
air_vehicles = [
["UA_VVS_bayraktartb2",300,300,250],
["b_afougf_Mi8MTV3_Cargo",600,0,575],
["b_afougf_Mi8MTV3_Evac",600,0,575],
["b_afougf_Mi8MTV3_UPK23",600,650,575],
["RHS_UH60M2",900,0,525],
["RHS_UH60M",900,400,525],
["b_afougf_Mi24V_UPK23",750,650,600],
["b_afougf_Mi24V_AT",750,700,600],
["b_afougf_a29",575,800,500],
["b_afougf_l39m1",750,550,800],
["b_afougf_Su25SM",1000,1250,950],
["b_afougf_mig29sm",1250,875,1300],
["FA_UAF_F16A",1550,1125,850],
["Su27_ua",1374,975,1400]
["UA_VVS_bayraktartb2",75,0,25],
["RHS_UH60M2",80,0,30],
["RHS_UH60M",200,0,100],
["b_afougf_Mi8MTV3_UPK23",200,100,100],
["b_afougf_Mi8MTV3_Evac",200,0,100],
["b_afougf_Mi8MTV3_Cargo",200,200,100],
["b_afougf_Mi24V_UPK23",225,0,125],
["b_afougf_Mi24V_AT",225,200,125],
["b_afougf_a29",225,0,125],
["b_afougf_l39m1",225,200,125],
["b_afougf_Su25SM",500,400,200],
["FA_UAF_F16A",500,500,200],
["b_afougf_mig29sm",750,750,250],
["Su27_ua",750,750,250]
];
static_vehicles = [
@@ -340,7 +321,7 @@ buildings = [
support_vehicles = [
[Arsenal_typename,100,200,0],
[Respawn_truck_typename,350,0,250],
[Respawn_truck_typename,200,0,100],
[FOB_box_typename,300,500,0],
[FOB_truck_typename,300,500,75],
[KP_liberation_small_storage_building,0,0,0],
@@ -389,7 +370,16 @@ support_vehicles = [
// Light infantry squad.
blufor_squad_inf_light = [
"UA_TRO_efreitor",
"UA_TRO_lieutenant",
"UA_TRO_mainsergeant",
"UA_TRO_radiotelephonist",
"UA_TRO_rifleman",
"UA_TRO_riflemangrenadierassistant",
"UA_TRO_grenadier",
"UA_TRO_juniorsergeant",
"UA_TRO_machinegunner",
"UA_TRO_seniorlieutenant"
];
// Heavy infantry squad.
@@ -457,8 +447,3 @@ blufor_squad_para = [
"B_soldier_PG_F",
"B_soldier_PG_F"
];
+1 -1
View File
@@ -115,7 +115,7 @@ opfor_troup_transports = [
"gm_ge_army_fuchsa0_engineer_win", // Fuchs (Engineer)
"gm_ge_army_fuchsa0_reconnaissance_win", // Fuchs (Recon, MILAN)
"gm_ge_army_m113a1g_apc_win", // M113A3 (MG3)
"gm_ge_army_m113a1g_apc_milan_win", // M113A3 (MILAN)
"gm_ge_army_m113a1g_apc_milan_win" // M113A3 (MILAN)
"gm_ge_army_ch53g" // CH-53G
];
+207 -158
View File
@@ -1,204 +1,253 @@
// Enemy infantry classes
opfor_officer = "O_ORussianVDV_Efreitor_01"; // Officer
opfor_squad_leader = "O_ORussianVDV_Machine_Gunner_Asst_01"; // Squad Leader
opfor_team_leader = "O_ORussianVDV_Rifleman_01"; // Team Leader
opfor_sentry = "O_ORussianVDV_Rifleman_Ligth_01"; // Rifleman (Lite)
opfor_rifleman = "O_ORussianVDV_Rifleman_01"; // Rifleman
opfor_rpg = "O_ORussianVDV_Rifleman_RPG_26_01"; // Rifleman (LAT)
opfor_grenadier = "O_ORussianVDV_Rifleman_GP_25_01"; // Grenadier
opfor_machinegunner = "O_ORussianVDV_Automatic_Rifleman_01"; // Autorifleman
opfor_heavygunner = "O_ORussianVDV_Autorifleman_PKP_01"; // Heavy Gunner
opfor_marksman = "O_ORussianVDV_Radioman_01"; // Marksman
opfor_sharpshooter = "O_ORussianVDV_Marksman_01"; // Sharpshooter
opfor_sniper = "O_ORussianVDV_Marksman_01"; // Sniper
opfor_at = "O_ORussianVDV_AT_Specialist_01"; // AT Specialist
opfor_aa = "O_ORussianVDV_AA_Specilaist_01"; // AA Specialist
opfor_medic = "O_ORussianVDV_Medic_01"; // Combat Life Saver
opfor_engineer = "O_ORussianVDV_Engineer_01"; // Engineer
opfor_paratrooper = "O_ORussianVDV_Scout_01"; // Paratrooper
opfor_officer = "RUS_spn_deputyplatooncommander"; // Officer
opfor_squad_leader = "RUS_spn_platooncommander"; // Squad Leader
opfor_team_leader = "RUS_spn_squadcommander"; // Team Leader
opfor_sentry = "RUS_spn_recon"; // Rifleman (Lite)
opfor_rifleman = "rhs_msv_emr_rifleman"; // Rifleman
opfor_rpg = "RUS_spn_recongrenadier"; // Rifleman (LAT)
opfor_grenadier = "RUS_spn_seniorrecon"; // Grenadier
opfor_machinegunner = "RUS_spn_reconmachinegunner";
opfor_heavygunner = "RUS_spn_reconmachinegunner";
opfor_marksman = "RUS_spn_reconsniper"; // Marksman
opfor_sharpshooter = "RUS_spn_reconradiotelephonist";
opfor_sniper = "RUS_spn_reconoperatoruav"; // Sniper
opfor_at = "RUS_spn_recon"; // AT Specialist
opfor_aa = "RUS_MSV_operatormanpad"; // AA Specialist
opfor_medic = "RUS_spn_reconsanitar"; // Combat Life Saver
opfor_engineer = "RUS_spn_reconsapper";
opfor_paratrooper = "rhs_msv_emr_RShG2"; // Paratrooper
// Enemy vehicles used by secondary objectives.
opfor_mrap = "V_TAG_ASN_233115"; // GAZ-233011
opfor_mrap_armed = "V_TAG_ASN_233115_STS"; // GAZ-233014 (Armed)
opfor_transport_helo = "RHS_Mi8mt_Cargo_vdv"; // Mi-8MT (Cargo)
opfor_transport_truck = "RHS_Ural_VDV_01"; // Ural-4320 Transport (Covered)
opfor_ammobox_transport = "RHS_Ural_Open_Flat_VDV_01"; // Ural-4320 Transport (Open) -> Has to be able to transport resource crates!
opfor_fuel_truck = "RHS_Ural_Fuel_VDV_01"; // Ural-4320 Fuel
opfor_ammo_truck = "V_TAG_ural432031"; // GAZ-66 Ammo
opfor_fuel_container = "B_Slingload_01_Fuel_F"; // Taru Fuel Pod
opfor_ammo_container = "B_Slingload_01_Ammo_F"; // Taru Ammo Pod
opfor_flag = "rhs_Flag_Russia_F"; // Flag
opfor_mrap = "rhs_tigr_msv"; // GAZ-233011
opfor_mrap_armed = "rhs_tigr_sts_msv"; // GAZ-233014 (Armed)
opfor_transport_helo = "RHS_Mi8mt_Cargo_vvsc"; // Mi-8MT (Cargo)
opfor_transport_truck = "RHS_Ural_MSV_01"; // Ural-4320 Transport (Covered)
opfor_ammobox_transport = "RHS_Ural_Open_MSV_01"; // Ural-4320 Transport (Open) -> Has to be able to transport resource crates!
opfor_fuel_truck = "RUS_MSV_atmz54320"; // Ural-4320 Fuel
opfor_ammo_truck = "rhs_gaz66_ammo_msv"; // GAZ-66 Ammo
opfor_fuel_container = "Land_Pod_Heli_Transport_04_fuel_F"; // Taru Fuel Pod
opfor_ammo_container = "rhs_kamaz5350_ammo_msv"; // Taru Ammo Pod
opfor_flag = "rhs_Flag_Russia_F"; // Flag
/* Adding a value to these arrays below will add them to a one out of however many in the array, random pick chance.
Therefore, adding the same value twice or three times means they are more likely to be chosen more often. */
/* Militia infantry. Lightweight soldier classnames the game will pick from randomly as sector defenders.
Think of them like garrison or military police forces, which are more meant to control the local population instead of fighting enemy armies. */
militia_squad = [
"O_ORussianVDV_Efreitor_01", // Rifleman
"O_ORussianVDV_Rifleman_GP_25_01", // Rifleman
"O_ORussianVDV_Rifleman_01", // Rifleman
"O_ORussianVDV_Rifleman_RPG_26_01", // Rifleman (AT)
"O_ORussianVDV_Automatic_Rifleman_01", // Autorifleman
"O_ORussianVDV_Marksman_01", // Marksman
"O_ORussianVDV_Medic_01", // Medic
"O_ORussianVDV_Engineer_01" // Engineer
"RUS_MSV_sr_efreitor",
"RUS_MSV_sr_grenadier",
"RUS_MSV_sr_gunner",
"RUS_MSV_sr_juniorsergeant",
"RUS_MSV_sr_machinegunner",
"RUS_MSV_sr_private",
"RUS_MSV_sr_rifleman",
"RUS_MSV_sr_riflemangrenadierassistant",
"RUS_MSV_sr_riflemanmachinegunnerassistant"
];
// Militia vehicles. Lightweight vehicle classnames the game will pick from randomly as sector defenders.
militia_vehicles = [
"V_TAG_ASN_233115" // GAZ-233014 (Armed)
"rhs_tigr_sts_msv",
"TSB_BRDM2_r",
"rhs_uaz_open_MSV_01",
"RUS_MSV_uaz469",
"rhs_tigr_sts_3camo_msv",
"RUS_MSV_mtlb",
"RUS_MSV_9p135",
"RUS_MSV_9p135m",
"RUS_MSV_9p151",
"RUS_MSV_9p163m1",
"RUS_MSV_ags17",
"RUS_MSV_nsvs",
"RUS_MSV_2b14",
"RUS_MP_kord",
"rhs_SPG9M_MSV" // GAZ-233014 (Armed)
];
// Militia vehicles. Lightweight vehicle classnames the game will pick from randomly as sector defenders. Can also be empty for only infantry milita.
opfor_vehicles = [
"V_TAG_ASN_233115_STS", // GAZ-233014 (Armed)
"V_TAG_ASN_233115_STS_kmf", // GAZ-233014 (Armed)
"V_TAG_ASN_233115_STS", // GAZ-233014 (Armed)
"V_TAG_bmd2", // BMP-2D
"V_TAG_bmp2k", // BMP-2K
"V_TAG_brm1k", // BRM-1K
"rhs_zsu234_aa", // ZSU-23-4V
"rhs_zsu234_aa", // ZSU-23-4V
"MY_TAG_t80bv", // T80
"MY_TAG_t80bv", // T80
"Z_TAG_t90a", // T90A
"MY_TAG_podnos",
"rhs_Metis_9k115_2_msv",
"rhs_Kornet_9M133_2_msv",
"rhs_Igla_AA_pod_msv",
"RHS_AGS30_TriPod_MSV",
"rhs_KORD_MSV",
"rhs_KORD_high_MSV",
"RHS_NSV_TriPod_MSV",
"rhs_SPG9M_MSV",
"MY_TAG_d30a",
"RHS_ZU23_MSV"
"rhs_tigr_sts_msv",
"TSB_BRDM2_r",
"rhs_uaz_open_MSV_01",
"RUS_MSV_uaz469",
"rhs_tigr_sts_3camo_msv",
"RUS_MSV_mtlb",
"RUS_MSV_9p135",
"RUS_MSV_9p135m",
"RUS_MSV_9p151",
"RUS_MSV_9p163m1",
"RUS_MSV_ags17",
"RUS_MSV_nsvs",
"RUS_MSV_2b14",
"RUS_MP_kord",
"rhs_SPG9M_MSV"
];
// All enemy vehicles that can spawn as sector defenders and patrols but at a lower enemy combat readiness (aggression levels).
opfor_vehicles_low_intensity = [
"V_TAG_ASN_233115_STS", // GAZ-233014 (Armed)
"V_TAG_ASN_233115_STS_kmf",
"V_TAGa_btr80",
"V_TAGa_btr80a", // GAZ-233014 (Armed)
"V_TAG_btr80", // BTR-80
"V_TAG_btr80a",
"V_TAG_bmd2",
"V_TAGa_bmd2",
"V_TAGa_bmd2k",
"V_TAG_bmd2k",
"rhsgref_BRDM2_msv",
"rhsgref_BRDM2_ATGM_msv"
"RUS_MSV_bmm",
"RUS_MSV_btr80",
"RUS_MSV_btr82a",
"RUS_MSV_mtlb",
"RUS_MSV_mtlbm6mb",
"RUS_MSV_mtlbvmk",
"RUS_MSV_prp3",
"RUS_MSV_brm1k",
"RUS_MSV_9p149",
"RUS_MSV_9p148",
//"tbd_mtlb_deva",
//"tbd_mtlb_tundzha",
//"tbd_mtlb_type63",
//"tbd_mtlb_mt12",
//"tbd_mtlb_bm21",
//"tbd_mtlb_2b9",
//"tbd_mtlb_6ma2_tkn4g",
"RUS_MSV_9p135",
"RUS_MSV_9p135m",
"RUS_MSV_9p151",
"RUS_MSV_9p163m1",
"RUS_MSV_ags17",
"RUS_MSV_nsvs",
"RUS_MSV_2b14",
"RUS_MP_kord",
"rhs_SPG9M_MSV"
];
// All enemy vehicles that can spawn as battlegroups, either assaulting or as reinforcements, at high enemy combat readiness (aggression levels).
opfor_battlegroup_vehicles = [
"rhs_tigr_sts_msv", // GAZ-233014 (Armed)
"rhs_tigr_sts_msv", // GAZ-233014 (Armed) (twice)
"rhs_tigr_sts_msv", // GAZ-233014 (Armed) (thrice)
"RHS_Ural_Open_MSV_01", // Ural-4320 Transport
"RHS_Ural_MSV_01", // Ural-4320 Transport (Covered)
"rhs_bmp2d_msv", // BMP-2D
"rhs_bmp2k_msv", // BMP-2K
"rhs_brm1k_msv", // BRM-1K
"rhs_zsu234_aa", // ZSU-23-4V
"rhs_zsu234_aa", // ZSU-23-4V (twice)
"V_TAGa_btr80",
"V_TAG_btr80",
"V_TAGa_btr80a",
"V_TAG_btr80a",
"V_TAG_bm21",
"Z_TAG_acacia",
"V_TAG_Gaz_2330",
"V_TAG_Gaz_2330_kmf",
"V_TAG_ASN_233115_STS",
"V_TAG_ASN_233115_STS_kmf",
"V_TAG_ASN_233115",
"V_TAG_ASN_233115_kmf",
"V_TAG_bmd2",
"V_TAGa_bmd2",
"V_TAGa_bmd2k",
"V_TAG_bmd2k",
"V_TAG_bmd4m",
"V_TAG_bmp2",
"V_TAG_bmp2k",
"V_TAG_brm1k",
"V_TAG_prp3",
"Z_TAG_bmp3",
"Z_TAG_bmp3m",
"MY_TAGa_gvozdika",
"V_TAG_t72b3",
"Z_TAG_t72b3m",
"Z_TAG_t90a",
"Z_TAG_t90m",
"MY_TAG_t80bv",
"MY_TAG_t80bvk",
"MY_TAG_t80u",
"MY_TAG_tric_t80",
"MY_TAG_t80um",
"MY_TAG_tric_t80um",
"MY_TAG_t80ue",
"MY_TAG_tric_t80ue",
"MY_TAG_t80uk",
"MY_TAG_tric_t80uk", // T90A
"V_TAG_Mi_24P", // Mi-24P (AT)
"V_TAG_Mi_35", // Mi-24V (AT)
"RHS_Mi8mt_Cargo_vdv", // Mi-8MT (Cargo)
"V_TAG_Mi_28UB",
"V_TAG_Ka_52" // Ka-52
"RUS_MSV_strela10",
"RUS_MSV_zsu234",
"RUS_MSV_bmm",
"RUS_MSV_btr80",
"RUS_MSV_btr82a",
"RUS_MSV_mtlb",
"RUS_MSV_mtlbm6mb",
"RUS_MSV_mtlbvmk",
"RUS_MSV_prp3",
"RUS_MSV_ap2",
"RUS_MSV_asn233115",
"RUS_MSV_atmz54320",
"RUS_MSV_kamaz4310",
"RUS_MSV_mtoat",
"RUS_MSV_uaz469",
"RUS_MSV_ural43202",
"RUS_MSV_9p135",
"RUS_MSV_9p135m",
"RUS_MSV_9p151",
"RUS_MSV_9p163m1",
"RUS_MSV_ags17",
"RUS_MSV_nsvs",
"RUS_MSV_bmp1",
"RUS_MSV_bmp1k",
"RUS_MSV_bmp2",
"RUS_MSV_bmp2k",
"RUS_MSV_bmp3",
"RUS_MSV_bmp3m",
"RUS_MSV_2b14",
"RUS_MSV_2b17",
"RUS_MSV_brm1k",
"RUS_MSV_2s1",
"RUS_MSV_2s3m1",
"RUS_MSV_9p149",
"RUS_MSV_9p148",
"RUS_MSV_t72b",
"RUS_MSV_t72b3",
"RUS_MSV_t72b3m",
"RUS_MSV_t72bm",
"RUS_MSV_t80bv",
"RUS_MSV_t80bvk",
"RUS_MSV_t80u",
"RUS_MSV_t80u45m",
"RUS_MSV_t80ue1",
"RUS_MSV_t80uk",
"RUS_MSV_t90a",
"RUS_MSV_t90m",
"RUS_MSV_zu232",
"RUS_MSV_2a18m",
"RUS_VDV_bmd2",
"RUS_VDV_bmd2k",
"RUS_VDV_bmd4m",
"RUS_MP_kord",
"mkk_tigr_arbalet_dm_msv_f",
"rhs_tigr_sts_3camo_msv",
"rhs_uaz_open_MSV_01",
"rhs_gaz66_zu23_msv",
"RHS_Ural_Zu23_MSV_01",
"RHS_Ural_MSV_01",
"RHS_Ural_Open_Flat_MSV_01",
"rhs_kamaz5350_ammo_msv",
"RHS_Ural_Repair_MSV_01",
"rhs_SPG9M_MSV",
"MMM_KamAZ4386",
"MMM_KamAZ4386_BM30D",
"rhs_bmd4ma_vdv",
"TSB_BRDM2_r",
"TSB_BRDM2_ZU23_r",
"TSB_BRDM2A_r",
"rhs_pchela1t_vvs",
//"tbd_mtlb_deva",
//"tbd_mtlb_tundzha",
//"tbd_mtlb_type63",
//"tbd_mtlb_mt12",
//"tbd_mtlb_bm21",
//"tbd_mtlb_2b9",
//"tbd_mtlb_6ma2_tkn4g",
"rhs_sprut_vdv"
];
// All enemy vehicles that can spawn as battlegroups, either assaulting or as reinforcements, at lower enemy combat readiness (aggression levels).
opfor_battlegroup_vehicles_low_intensity = [
"V_TAG_ASN_233115",
"V_TAG_ASN_233115_kmf", // GAZ-233011
"V_TAG_ASN_233115_STS_kmf", // GAZ-233014 (Armed)
"V_TAG_ASN_233115_STS", // GAZ-233014 (Armed)
"RHS_Ural_Open_MSV_01", // Ural-4320 Transport
"V_TAGa_btr80",
"V_TAG_btr80", // BTR-80
"V_TAG_btr80a",
"V_TAGa_btr80a", // BTR-80A
"rhs_zsu234_aa", // ZSU-23-4V
"V_TAG_Mi_24P", // Mi-24P (AT)
"V_TAG_Mi_35",
"V_TAG_bmd2",
"V_TAGa_bmd2",
"V_TAGa_bmd2k",
"V_TAG_bmd2k", // Mi-24V (AT)
"RHS_Mi8mt_Cargo_vdv",
"rhsgref_BRDM2_msv",
"rhsgref_BRDM2_ATGM_msv" // Mi-8MT (Cargo)
"RUS_MSV_btr80",
"RUS_MSV_btr82a",
"RUS_MSV_bmm",
"RUS_MSV_btr80",
"RUS_MSV_btr82a",
"RUS_MSV_mtlb",
"RUS_MSV_mtlbm6mb",
"RUS_MSV_mtlbvmk"
//"tbd_mtlb_deva",
//"tbd_mtlb_tundzha",
//"tbd_mtlb_type63",
//"tbd_mtlb_mt12",
//"tbd_mtlb_bm21",
//"tbd_mtlb_2b9",
//"tbd_mtlb_6ma2_tkn4g"
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
opfor_troup_transports = [
"RHS_Ural_Open_MSV_01", // Ural-4320 Transport
"RHS_Ural_MSV_01", // Ural-4320 Transport (Covered)
"V_TAGa_btr80", // BTR-80
"V_TAG_btr80a", // BTR-80A
"V_TAG_bmp2", // BMP-2D
"RHS_Mi8mt_Cargo_vdv", // Mi-8MT (Cargo)
"V_TAG_Mi_24P", // Mi-24P (AT)
"V_TAG_Mi_35" // Mi-24V (AT)
"RUS_MSV_bmp1",
"RUS_MSV_bmp1k",
"RUS_MSV_bmp2",
"RUS_MSV_bmp2k",
"RUS_MSV_bmp3",
"RUS_MSV_bmm",
"RUS_MSV_btr80",
"RUS_MSV_btr82a",
"RUS_MSV_mtlb",
"RUS_MSV_mtlbvmk",
//"tbd_mtlb_6ma2_tkn4g",
"RUS_VKS_mi8mt", // Mi-8MT (Cargo)
"RUS_VKS_mi24p" // Mi-24P (AT)
];
// Enemy rotary-wings that will need to spawn in flight.
opfor_choppers = [
"RHS_Mi8mt_Cargo_vdv", // Mi-8MT (Cargo)
"V_TAG_Mi_24P",
"V_TAG_Mi_35", // Mi-24P (AT)
"V_TAG_Mi_28UB", // Mi-24V (AT)
"V_TAG_Ka_52", // Ka-52
"V_TAG_Mi_17AMT"
"RUS_VKS_ka52",
"RUS_VKS_mi24p",
"RUS_VKS_mi28n",
"RUS_VKS_mi8mt",
"RUS_VKS_mi8mtv2"
];
// Enemy fixed-wings that will need to spawn in the air.
opfor_air = [
"V_TAG_su25", // Su-25
"RUS_VKS_su25sm", // Su-25 (KH29)
"RHS_Su25SM_vvs", // Su-25
"RUS_VKS_su25sm", // Su-25 (KH29)
"RUS_VKS_mig29s",
"RUS_VKS_mig29smt",
"RUS_VKS_tu95ms6"
+1 -1
View File
@@ -5,7 +5,7 @@ if ( count GRLIB_all_fobs >= GRLIB_maximum_fobs ) exitWith {
};
_minfobdist = 1000;
_minsectordist = GRLIB_capture_size;
_minsectordist = GRLIB_capture_size + GRLIB_fob_range;
_distfob = 1;
_clearedtobuildfob = true;
_distsector = 1;
@@ -12,6 +12,7 @@ while {true} do {
};
if !(isNil "_owner") then {
if (_x getVariable ["KPLIB_patrol_group", false]) then {continue;};
if !(isGroupDeletedWhenEmpty _x) then {
if (local _x) then {
_x deleteGroupWhenEmpty true;
@@ -45,6 +45,10 @@ while { GRLIB_endgame == 0 } do {
_grp = group ((crew _vehicle_object) select 0);
};
if (!isNull _grp) then {
_grp setVariable ["KPLIB_patrol_group", true, true];
};
[_grp] spawn patrol_ai;
_started_time = time;
@@ -81,6 +85,15 @@ while { GRLIB_endgame == 0 } do {
};
};
if (!isNull _grp) then {
_grp setVariable ["KPLIB_patrol_group", nil, true];
if (local _grp) then {
_grp deleteGroupWhenEmpty true;
} else {
[_grp, true] remoteExecCall ["deleteGroupWhenEmpty", groupOwner _grp];
};
};
if ( !([] call KPLIB_fnc_isBigtownActive) ) then {
sleep (600.0 / GRLIB_difficulty_modifier);
};