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: env:
PBO_NAME: "KPLib-Ruha.ruha.pbo" 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: 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: pack:
needs: [lint]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
+2 -5
View File
@@ -51,9 +51,7 @@ KP_liberation_medical_vehicles = [
"uns_ch47a_medevac", "uns_ch47a_medevac",
"uns_H13_medevac_CAV", "uns_H13_medevac_CAV",
"uns_M577_amb", "uns_M577_amb",
"uns_uh1D_med", "uns_uh1D_med"
"tbd_mtlb_ambulance",
"b_afougf_Mi8MTV3_Evac"
]; ];
// Building classnames which also function as ACE medical facilities. // Building classnames which also function as ACE medical facilities.
@@ -796,8 +794,7 @@ vehicle_repair_sources = [
"UNS_Hanger_repair", "UNS_Hanger_repair",
"uns_M113_ENG", "uns_M113_ENG",
"uns_M35A2_repair", "uns_M35A2_repair",
"uns_motorpool1_repair", "uns_motorpool1_repair"
"tbd_mtlb_engineer"
]; ];
vehicle_rearm_sources = [ vehicle_rearm_sources = [
+160 -175
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 --- --- Support classnames ---
Each of these should be unique. Each of these should be unique.
The same classnames for different purposes may cause various unpredictable issues with player actions. The same classnames for different purposes may cause various unpredictable issues with player actions.
Or not, just don't try! Or not, just don't try!
*/ */
FOB_typename = "Land_Cargo_HQ_V1_F"; // This is the main FOB HQ building. 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_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. FOB_truck_typename = "B_Truck_01_box_F"; // This is the FOB as a vehicle.
@@ -49,73 +34,74 @@ 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. 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! IMPORTANT: The last element inside each array must have no comma at the end!
*/ */
infantry_units = [ infantry_units = [
["b_afougf_rifleman_ak74",15,0,0], // Rifleman (Light) ["UA_Azov_forwardobserver",15,0,0], // Rifleman (Light)
["b_afougf_rifleman_gp25",20,0,0], // Rifleman ["UA_Azov_rifleman",20,0,0], // Rifleman
["b_afougf_pt_rpg7",30,0,0], // Rifleman (AT) ["UA_Azov_sapper",30,0,0], // Rifleman (AT)
["b_afougf_pt_maaws",25,0,0], // Grenadier ["UA_Azov_grenadier",25,0,0], // Grenadier
["b_afougf_mg_m240",25,0,0], // Autorifleman ["UA_Azov_machinegunner",25,0,0], // Autorifleman
["b_afougf_mg_mg42",35,0,0], // Heavygunner ["B_HeavyGunner_F",35,0,0], // Heavygunner
["b_afougf_mg_pkm",30,0,0], // Marksman ["UA_Azov_gunner",30,0,0], // Marksman
["b_afougf_ptassist_fgm148",40,0,0], // Sharpshooter ["UA_Azov_rangefinder",40,0,0], // Sharpshooter
["b_afougf_pt_fgm148",50,10,0], // AT Specialist ["UA_Azov_operatoratgm",50,10,0], // AT Specialist
["b_afougf_aa_igla_specialist",50,10,0], // AA Specialist ["UA_Azov_operatormanpad",50,10,0], // AA Specialist
["b_afougf_medic",30,0,0], // Combat Life Saver ["UA_Azov_riflemancombatlifesaver",30,0,0], // Combat Life Saver
["b_afougf_tank_gunner_F",30,0,0], // Engineer ["UA_Azov_driver",30,0,0], // Engineer
["b_afougf_rifleman_ak74",20,0,0], // Recon Scout ["UA_SSO_recon",20,0,0], // Recon Scout
["b_afougf_rifleman_gp25",30,0,0], // Recon Scout (AT) ["UA_SSO_reconsapper",30,0,0], // Recon Scout (AT)
["b_afougf_pt_rpg7",30,0,0], // Recon Marksman ["UA_SSO_reconradiotelephonist",30,0,0], // Recon Marksman
["b_afougf_marksman_m82",40,0,0], // Recon Sharpshooter ["UA_SSO_reconsniper",40,0,0], // Recon Sharpshooter
["b_afougf_marksman_m14",30,0,0], // Recon Paramedic ["UA_SSO_seniorrecon",30,0,0], // Recon Paramedic
["b_afougf_pt_nlaw",30,0,0], // Recon Demolition Expert ["UA_SSO_reconoperatoruav",30,0,0], // Recon Demolition Expert
["b_afougf_marksman_svdm",70,5,0], // Sniper ["UA_Azov_sniper",70,5,0], // Sniper
["b_afougf_grenadier_m32_mgl",20,0,0], // Spotter ["UA_Azov_rangefinder",20,0,0], // Spotter
["b_afougf_tankist_F",10,0,0], // Crewman ["UA_Azov_driver",10,0,0], // Crewman
["b_afougf_teamleader_gp25",20,0,0], // Para Trooper ["UA_DShV_lieutenant",20,0,0], // Para Trooper
["b_afougf_pilot_F",10,0,0], // Helicopter Crew ["UA_VVS_helicopterpilot",10,0,0], // Helicopter Crew
["b_afougf_pilot_F",10,0,0], // Helicopter Pilot ["UA_VVS_helicopterpilot",10,0,0], // Helicopter Pilot
["b_afougf_pilot_F",10,0,0] // Pilot ["UA_VVS_pilot",10,0,0] // Pilot
]; ];
light_vehicles = [ light_vehicles = [
["b_afougf_quadbike_01",50,0,25], ["b_afougf_quadbike_01",50,0,25],
["b_afougf_offroad_armored_01",75,0,50], ["b_afougf_offroad_armored_01",75,0,50],
["b_afougf_offroad_armored_at",75,40,50], ["b_afougf_offroad_armored_at",75,40,50],
["b_afougf_offroad_armored_01_dshkm",75,60,50], ["b_afougf_offroad_armored_01_dshkm",75,60,50],
["b_afougf_uaf_dozor",100,0,50], ["b_afougf_uaf_dozor",100,0,50],
["b_afougf_uaf_dozor_nsvt",100,40,50], ["b_afougf_uaf_dozor_nsvt",100,40,50],
["b_afougf_kozak5_unarmed_F",100,60,50], ["b_afougf_kozak5_unarmed_F",100,60,50],
["b_afougf_kozak5_turret_armored_full_F",100,0,50], ["b_afougf_kozak5_turret_armored_full_F",100,0,50],
["b_afougf_kozak5_turret_armored_F",100,40,50], ["b_afougf_kozak5_turret_armored_F",100,40,50],
["b_afougf_kozak5_turret_F",100,60,50], ["b_afougf_kozak5_turret_F",100,60,50],
["b_afougf_m1151_base",100,0,50], ["b_afougf_m1151_base",100,0,50],
["b_afougf_m1151_m2_v1",100,40,50], ["b_afougf_m1151_m2_v1",100,40,50],
["b_afougf_m1151_mk19_base",100,60,50], ["b_afougf_m1151_mk19_base",100,60,50],
["b_afougf_m1152_base",100,0,50], ["b_afougf_m1152_base",100,0,50],
["b_afougf_m1152_base_dshkm",100,0,50], ["b_afougf_m1152_base_dshkm",100,0,50],
["b_afougf_m1152_base_lcmr",120,0,60], ["b_afougf_m1152_base_lcmr",120,0,60],
["b_afougf_m1151_med",120,40,60], ["b_afougf_m1151_med",120,40,60],
["b_afougf_m998_sicps_base",120,60,60], ["b_afougf_m998_sicps_base",120,60,60],
["uaf_m1151_m2_v2",140,0,60], ["uaf_m1151_m2_v2",140,0,60],
["b_afougf_m998_2dr",140,40,60], ["b_afougf_m998_2dr",140,40,60],
["b_afougf_m998_2dr_dshkm",140,60,60], ["b_afougf_m998_2dr_dshkm",140,60,60],
["b_afougf_m998_2dr_fulltop",100,0,50], ["b_afougf_m998_2dr_fulltop",100,0,50],
["b_afougf_m998_4dr",100,100,50], ["b_afougf_m998_4dr",100,100,50],
["b_afougf_m998_w_s_4dr_fulltop",120,0,60], ["b_afougf_m998_w_s_4dr_fulltop",120,0,60],
["BBM_Varta",120,0,60], ["BBM_Varta",120,0,60],
["BBM_Varta_Turret",120,20,60], ["BBM_Varta_Turret",120,20,60],
["b_afougf_uaf_novator",125,0,75], ["b_afougf_uaf_novator",125,0,75],
["b_afougf_uaf_novator_atgm",125,0,75], ["b_afougf_uaf_novator_atgm",125,0,75],
["b_afougf_offroad_01",100,0,50], ["b_afougf_offroad_01",100,0,50],
["b_afougf_offroad_at",125,0,75], ["b_afougf_offroad_at",125,0,75],
["b_afougf_UAZ_Base",125,40,75], ["b_afougf_UAZ_Base",125,40,75],
["b_afougf_UAZ_open_Base",150,50,50], ["b_afougf_UAZ_open_Base",150,50,50],
["b_afougf_UAZ_AGS30_Base",150,0,50], ["b_afougf_UAZ_AGS30_Base",150,0,50],
["b_afougf_UAZ_DShKM_Base",150,40,50], ["b_afougf_UAZ_DShKM_Base",150,40,50],
["b_afougf_UAZ_SPG9_Base",100,0,25], ["b_afougf_UAZ_SPG9_Base",100,0,25],
["Kraz_Spartan",200,80,75], ["Kraz_Spartan",200,80,75],
["Kraz_Spartan_dshk",250,200,100], ["Kraz_Spartan_dshk",250,200,100],
["vurtual_maxxpro",150,0,50], ["vurtual_maxxpro",150,0,50],
["vurtual_maxxpro_MK19",150,0,50], ["vurtual_maxxpro_MK19",150,0,50],
["rhsusf_m1240a1_usmc_wd",150,0,50], ["rhsusf_m1240a1_usmc_wd",150,0,50],
["rhsusf_m1240a1_m2_usmc_wd",150,0,50], ["rhsusf_m1240a1_m2_usmc_wd",150,0,50],
@@ -131,101 +117,96 @@ light_vehicles = [
]; ];
heavy_vehicles = [ heavy_vehicles = [
//BRDM ["tbd_mtlb_s60",200,40,100],
["b_afougf_BRDM2_HQ",225,100,200], ["tbd_mtlb_vmk",200,60,100],
["b_afougf_BRDM2",250,200,200], ["tbd_mtlb_shturm",200,0,100],
["b_afougf_BRDM2_ATGM",300,400,200], ["tbd_mtlb_s8",200,0,125],
["TSB_BRDM2_ZU23_g",400,300,200], ["tbd_mtlb_pkt",200,75,125],
["rhsusf_M1117_O",300,300,175], ["tbd_mtlb_mt12",200,75,125],
//MT-LB ["tbd_mtlb_engineer",300,100,150],
["tbd_mtlb",250,0,250], ["tbd_mtlb_bmo",300,150,150],
["tbd_mtlb_pkt",200,100,250], ["tbd_mtlb_bm21",300,200,150],
["tbd_mtlb_vmk",200,200,250], ["tbd_mtlb_ambulance",300,225,150],
["tbd_mtlb_6ma1_tkn4g",250,300,250], ["tbd_mtlb_6ma1_tkn4g",300,250,175],
["tbd_mtlb_s60",225,250,250], ["tbd_mtlb",300,250,175],
["tbd_mtlb_mt12",225,300,250], ["rhsusf_M1117_O",300,250,175],
["tbd_mtlb_s8",225,225,250], ["rhsusf_m113_usarmy_medical",300,250,175],
["tbd_mtlb_shturm",300,400,250], ["UAF_M113_MK19",300,250,175],
["tbd_mtlb_bmo",300,375,250], ["UAF_M113_M2",300,250,175],
["tbd_mtlb_engineer",350,0,250], ["b_afougf_m113_unarmed",400,300,200],
//M113 ["TSB_BRDM2_ZU23_g",400,300,200],
["b_afougf_m113_unarmed",275,0,200], ["UF_M2A2_BUSKI",400,300,200],
["UAF_M113_M2",300,150,200], ["UF_M2A2",400,350,225],
["UAF_M113_MK19",300,175,200], ["UAF_bmp_3m",500,350,225],
["rhsusf_m113_usarmy_medical",375,0,200], ["UAF_bmp_3",500,400,250],
["rhsusf_m113_usarmy_supply",375,150,200], ["b_afougf_prp3_Base",500,400,250],
//BTR ["b_afougf_brm1k_Base",500,500,250],
["b_afougf_old_btr70",250,150,225], ["b_afougf_bmp2d",550,550,250],
["b_afougf_btr80_common",300,150,250], ["b_afougf_bmp2",600,1250,300],
["FA_UAF_BTR3",450,650,350], ["b_afougf_bmp1p",600,1250,300],
["FA_UAF_BTR4",550,650,400], ["b_afougf_bmp1",800,1750,400],
//BMP ["b_afougf_bmd2",800,1750,400],
["b_afougf_prp3_Base",325,0,350], ["b_afougf_bmd1",800,1750,400],
["b_afougf_bmd1",300,350,350], ["b_afougf_BRDM2_HQ",800,1750,400],
["b_afougf_bmd2",325,375,350], ["b_afougf_BRDM2_UM",800,1750,400],
["b_afougf_brm1k_Base",325,500,350], ["b_afougf_BRDM2_ATGM",800,1750,400],
["b_afougf_bmp1p",325,350,350], ["b_afougf_BRDM2",800,1750,400],
["b_afougf_bmp2d",350,375,350], ["FA_UAF_BTR4",800,1750,400],
["UAF_bmp_3",400,400,350], ["FA_UAF_BTR3",800,1750,400],
["UAF_bmp_3m",400,400,350], ["FA_UAF_BMP1U",800,1750,400],
["FA_UAF_BMP1U",450,600,325], ["FA_UAF_2S17",800,1750,400],
["UF_M2A2",700,500,300], ["FA_UAF_Zamak_MLRS",800,1750,400],
["UF_M2A2_BUSKI",750,500,300], ["UAF_2s1",800,1750,400],
//Tanks ["uaf_2s3",800,1750,400],
["FA_UAF_T64BV",800,800,600], ["UAF_m109",800,1750,400],
["FA_UAF_T64BM",900,850,650], ["b_afougf_yt_BM21",800,1750,400],
["FA_UAF_T64BM2",925,850,650], ["b_afougf_m142_base",800,1750,400],
["b_afougf_t72bb",750,800,600], ["tbd_mtlb_tundzha",800,1750,400],
["UAF_t72b3",925,850,650], ["tbd_mtlb_nona",800,1750,400],
["t80bv_Ukraine",975,875,600], ["FA_UAF_Leopard2A4",800,1750,400],
["b_afougf_t80u",1000,875,800], ["FA_UAF_Leopard2A4_ERA",800,1750,400],
["FA_UAF_T84M",1000,875,650], ["FA_UAF_T64BM",800,1750,400],
["FA_UAF_Leopard2A4",1250,975,650], ["FA_UAF_T64BM2",800,1750,400],
["FA_UAF_Leopard2A4_ERA",1275,975,650], ["FA_UAF_T64BV",800,1750,400],
["UF_M1A1",1500,1200,1000], ["FA_UAF_T84M",800,1750,400],
//Arty ["b_afougf_t72bb",800,1750,400],
["tbd_mtlb_tundzha",250,225,250], ["t80bv_Ukraine",800,1750,400],
["UAF_2s1",325,450,350], ["b_afougf_t80u",800,1750,400],
["uaf_2s3",400,450,400], ["UAF_t72b3",800,1750,400],
["FA_UAF_2S17",425,475,350], ["UF_M1A1",800,1750,400],
["tbd_mtlb_nona",325,475,250], ["tbd_mtlb_strela_m3",500,500,500],
["UAF_m109",750,875,575], ["b_afougf_zsu234_aa",500,500,500]
["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]
]; ];
air_vehicles = [ air_vehicles = [
["UA_VVS_bayraktartb2",300,300,250], ["UA_VVS_bayraktartb2",75,0,25],
["b_afougf_Mi8MTV3_Cargo",600,0,575], ["RHS_UH60M2",80,0,30],
["b_afougf_Mi8MTV3_Evac",600,0,575], ["RHS_UH60M",200,0,100],
["b_afougf_Mi8MTV3_UPK23",600,650,575], ["b_afougf_Mi8MTV3_UPK23",200,100,100],
["RHS_UH60M2",900,0,525], ["b_afougf_Mi8MTV3_Evac",200,0,100],
["RHS_UH60M",900,400,525], ["b_afougf_Mi8MTV3_Cargo",200,200,100],
["b_afougf_Mi24V_UPK23",750,650,600], ["b_afougf_Mi24V_UPK23",225,0,125],
["b_afougf_Mi24V_AT",750,700,600], ["b_afougf_Mi24V_AT",225,200,125],
["b_afougf_a29",575,800,500], ["b_afougf_a29",225,0,125],
["b_afougf_l39m1",750,550,800], ["b_afougf_l39m1",225,200,125],
["b_afougf_Su25SM",1000,1250,950], ["b_afougf_Su25SM",500,400,200],
["b_afougf_mig29sm",1250,875,1300], ["FA_UAF_F16A",500,500,200],
["FA_UAF_F16A",1550,1125,850], ["b_afougf_mig29sm",750,750,250],
["Su27_ua",1374,975,1400] ["Su27_ua",750,750,250]
]; ];
static_vehicles = [ static_vehicles = [
["b_afougf_AGS30_TriPod",25,40,0], ["b_afougf_AGS30_TriPod",25,40,0],
["b_afougf_DSHKM",25,40,0], ["b_afougf_DSHKM",25,40,0],
["b_afougf_DSHkM_Mini_TriPod",35,40,0], ["b_afougf_DSHkM_Mini_TriPod",35,40,0],
["b_afougf_Stinger_AA_pod",35,60,0], ["b_afougf_Stinger_AA_pod",35,60,0],
["b_afougf_M2_TriPod_high",35,60,0], ["b_afougf_M2_TriPod_high",35,60,0],
["b_afougf_M2_TriPod_low",45,60,0], ["b_afougf_M2_TriPod_low",45,60,0],
["b_afougf_MK19_TriPod",50,100,0], ["b_afougf_MK19_TriPod",50,100,0],
["b_afougf_nsv_tripod",50,100,0], ["b_afougf_nsv_tripod",50,100,0],
["b_afougf_SPG9M",80,150,0], ["b_afougf_SPG9M",80,150,0],
["b_afougf_ZU23",100,200,0], ["b_afougf_ZU23",100,200,0],
["b_afougf_m119",100,200,0], ["b_afougf_m119",100,200,0],
["b_afougf_D30",100,200,0], ["b_afougf_D30",100,200,0],
@@ -233,7 +214,7 @@ static_vehicles = [
["b_afougf_2b14_82mm",100,200,0], ["b_afougf_2b14_82mm",100,200,0],
["tbd_d20",300,300,300], ["tbd_d20",300,300,300],
["tbd_2b9_vasilek",300,300,300], ["tbd_2b9_vasilek",300,300,300],
["tbd_mt12",300,300,300], ["tbd_mt12",300,300,300],
["b_afougf_SAM_System_04_green_F",1000,1000,1000] ["b_afougf_SAM_System_04_green_F",1000,1000,1000]
]; ];
@@ -340,7 +321,7 @@ buildings = [
support_vehicles = [ support_vehicles = [
[Arsenal_typename,100,200,0], [Arsenal_typename,100,200,0],
[Respawn_truck_typename,350,0,250], [Respawn_truck_typename,200,0,100],
[FOB_box_typename,300,500,0], [FOB_box_typename,300,500,0],
[FOB_truck_typename,300,500,75], [FOB_truck_typename,300,500,75],
[KP_liberation_small_storage_building,0,0,0], [KP_liberation_small_storage_building,0,0,0],
@@ -389,7 +370,16 @@ support_vehicles = [
// Light infantry squad. // Light infantry squad.
blufor_squad_inf_light = [ 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. // Heavy infantry squad.
@@ -457,8 +447,3 @@ blufor_squad_para = [
"B_soldier_PG_F", "B_soldier_PG_F",
"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_engineer_win", // Fuchs (Engineer)
"gm_ge_army_fuchsa0_reconnaissance_win", // Fuchs (Recon, MILAN) "gm_ge_army_fuchsa0_reconnaissance_win", // Fuchs (Recon, MILAN)
"gm_ge_army_m113a1g_apc_win", // M113A3 (MG3) "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 "gm_ge_army_ch53g" // CH-53G
]; ];
+208 -159
View File
@@ -1,204 +1,253 @@
// Enemy infantry classes // Enemy infantry classes
opfor_officer = "O_ORussianVDV_Efreitor_01"; // Officer opfor_officer = "RUS_spn_deputyplatooncommander"; // Officer
opfor_squad_leader = "O_ORussianVDV_Machine_Gunner_Asst_01"; // Squad Leader opfor_squad_leader = "RUS_spn_platooncommander"; // Squad Leader
opfor_team_leader = "O_ORussianVDV_Rifleman_01"; // Team Leader opfor_team_leader = "RUS_spn_squadcommander"; // Team Leader
opfor_sentry = "O_ORussianVDV_Rifleman_Ligth_01"; // Rifleman (Lite) opfor_sentry = "RUS_spn_recon"; // Rifleman (Lite)
opfor_rifleman = "O_ORussianVDV_Rifleman_01"; // Rifleman opfor_rifleman = "rhs_msv_emr_rifleman"; // Rifleman
opfor_rpg = "O_ORussianVDV_Rifleman_RPG_26_01"; // Rifleman (LAT) opfor_rpg = "RUS_spn_recongrenadier"; // Rifleman (LAT)
opfor_grenadier = "O_ORussianVDV_Rifleman_GP_25_01"; // Grenadier opfor_grenadier = "RUS_spn_seniorrecon"; // Grenadier
opfor_machinegunner = "O_ORussianVDV_Automatic_Rifleman_01"; // Autorifleman opfor_machinegunner = "RUS_spn_reconmachinegunner";
opfor_heavygunner = "O_ORussianVDV_Autorifleman_PKP_01"; // Heavy Gunner opfor_heavygunner = "RUS_spn_reconmachinegunner";
opfor_marksman = "O_ORussianVDV_Radioman_01"; // Marksman opfor_marksman = "RUS_spn_reconsniper"; // Marksman
opfor_sharpshooter = "O_ORussianVDV_Marksman_01"; // Sharpshooter opfor_sharpshooter = "RUS_spn_reconradiotelephonist";
opfor_sniper = "O_ORussianVDV_Marksman_01"; // Sniper opfor_sniper = "RUS_spn_reconoperatoruav"; // Sniper
opfor_at = "O_ORussianVDV_AT_Specialist_01"; // AT Specialist opfor_at = "RUS_spn_recon"; // AT Specialist
opfor_aa = "O_ORussianVDV_AA_Specilaist_01"; // AA Specialist opfor_aa = "RUS_MSV_operatormanpad"; // AA Specialist
opfor_medic = "O_ORussianVDV_Medic_01"; // Combat Life Saver opfor_medic = "RUS_spn_reconsanitar"; // Combat Life Saver
opfor_engineer = "O_ORussianVDV_Engineer_01"; // Engineer opfor_engineer = "RUS_spn_reconsapper";
opfor_paratrooper = "O_ORussianVDV_Scout_01"; // Paratrooper opfor_paratrooper = "rhs_msv_emr_RShG2"; // Paratrooper
// Enemy vehicles used by secondary objectives. // Enemy vehicles used by secondary objectives.
opfor_mrap = "V_TAG_ASN_233115"; // GAZ-233011 opfor_mrap = "rhs_tigr_msv"; // GAZ-233011
opfor_mrap_armed = "V_TAG_ASN_233115_STS"; // GAZ-233014 (Armed) opfor_mrap_armed = "rhs_tigr_sts_msv"; // GAZ-233014 (Armed)
opfor_transport_helo = "RHS_Mi8mt_Cargo_vdv"; // Mi-8MT (Cargo) opfor_transport_helo = "RHS_Mi8mt_Cargo_vvsc"; // Mi-8MT (Cargo)
opfor_transport_truck = "RHS_Ural_VDV_01"; // Ural-4320 Transport (Covered) opfor_transport_truck = "RHS_Ural_MSV_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_ammobox_transport = "RHS_Ural_Open_MSV_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_fuel_truck = "RUS_MSV_atmz54320"; // Ural-4320 Fuel
opfor_ammo_truck = "V_TAG_ural432031"; // GAZ-66 Ammo opfor_ammo_truck = "rhs_gaz66_ammo_msv"; // GAZ-66 Ammo
opfor_fuel_container = "B_Slingload_01_Fuel_F"; // Taru Fuel Pod opfor_fuel_container = "Land_Pod_Heli_Transport_04_fuel_F"; // Taru Fuel Pod
opfor_ammo_container = "B_Slingload_01_Ammo_F"; // Taru Ammo Pod opfor_ammo_container = "rhs_kamaz5350_ammo_msv"; // Taru Ammo Pod
opfor_flag = "rhs_Flag_Russia_F"; // Flag 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. /* 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. */ 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. /* 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. */ 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 = [ militia_squad = [
"O_ORussianVDV_Efreitor_01", // Rifleman "RUS_MSV_sr_efreitor",
"O_ORussianVDV_Rifleman_GP_25_01", // Rifleman "RUS_MSV_sr_grenadier",
"O_ORussianVDV_Rifleman_01", // Rifleman "RUS_MSV_sr_gunner",
"O_ORussianVDV_Rifleman_RPG_26_01", // Rifleman (AT) "RUS_MSV_sr_juniorsergeant",
"O_ORussianVDV_Automatic_Rifleman_01", // Autorifleman "RUS_MSV_sr_machinegunner",
"O_ORussianVDV_Marksman_01", // Marksman "RUS_MSV_sr_private",
"O_ORussianVDV_Medic_01", // Medic "RUS_MSV_sr_rifleman",
"O_ORussianVDV_Engineer_01" // Engineer "RUS_MSV_sr_riflemangrenadierassistant",
"RUS_MSV_sr_riflemanmachinegunnerassistant"
]; ];
// Militia vehicles. Lightweight vehicle classnames the game will pick from randomly as sector defenders. // Militia vehicles. Lightweight vehicle classnames the game will pick from randomly as sector defenders.
militia_vehicles = [ 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. // Militia vehicles. Lightweight vehicle classnames the game will pick from randomly as sector defenders. Can also be empty for only infantry milita.
opfor_vehicles = [ opfor_vehicles = [
"V_TAG_ASN_233115_STS", // GAZ-233014 (Armed) "rhs_tigr_sts_msv",
"V_TAG_ASN_233115_STS_kmf", // GAZ-233014 (Armed) "TSB_BRDM2_r",
"V_TAG_ASN_233115_STS", // GAZ-233014 (Armed) "rhs_uaz_open_MSV_01",
"V_TAG_bmd2", // BMP-2D "RUS_MSV_uaz469",
"V_TAG_bmp2k", // BMP-2K "rhs_tigr_sts_3camo_msv",
"V_TAG_brm1k", // BRM-1K "RUS_MSV_mtlb",
"rhs_zsu234_aa", // ZSU-23-4V "RUS_MSV_9p135",
"rhs_zsu234_aa", // ZSU-23-4V "RUS_MSV_9p135m",
"MY_TAG_t80bv", // T80 "RUS_MSV_9p151",
"MY_TAG_t80bv", // T80 "RUS_MSV_9p163m1",
"Z_TAG_t90a", // T90A "RUS_MSV_ags17",
"MY_TAG_podnos", "RUS_MSV_nsvs",
"rhs_Metis_9k115_2_msv", "RUS_MSV_2b14",
"rhs_Kornet_9M133_2_msv", "RUS_MP_kord",
"rhs_Igla_AA_pod_msv", "rhs_SPG9M_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"
]; ];
// All enemy vehicles that can spawn as sector defenders and patrols but at a lower enemy combat readiness (aggression levels). // All enemy vehicles that can spawn as sector defenders and patrols but at a lower enemy combat readiness (aggression levels).
opfor_vehicles_low_intensity = [ opfor_vehicles_low_intensity = [
"V_TAG_ASN_233115_STS", // GAZ-233014 (Armed) "RUS_MSV_bmm",
"V_TAG_ASN_233115_STS_kmf", "RUS_MSV_btr80",
"V_TAGa_btr80", "RUS_MSV_btr82a",
"V_TAGa_btr80a", // GAZ-233014 (Armed) "RUS_MSV_mtlb",
"V_TAG_btr80", // BTR-80 "RUS_MSV_mtlbm6mb",
"V_TAG_btr80a", "RUS_MSV_mtlbvmk",
"V_TAG_bmd2", "RUS_MSV_prp3",
"V_TAGa_bmd2", "RUS_MSV_brm1k",
"V_TAGa_bmd2k", "RUS_MSV_9p149",
"V_TAG_bmd2k", "RUS_MSV_9p148",
"rhsgref_BRDM2_msv", //"tbd_mtlb_deva",
"rhsgref_BRDM2_ATGM_msv" //"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). // All enemy vehicles that can spawn as battlegroups, either assaulting or as reinforcements, at high enemy combat readiness (aggression levels).
opfor_battlegroup_vehicles = [ opfor_battlegroup_vehicles = [
"rhs_tigr_sts_msv", // GAZ-233014 (Armed) "RUS_MSV_strela10",
"rhs_tigr_sts_msv", // GAZ-233014 (Armed) (twice) "RUS_MSV_zsu234",
"rhs_tigr_sts_msv", // GAZ-233014 (Armed) (thrice) "RUS_MSV_bmm",
"RHS_Ural_Open_MSV_01", // Ural-4320 Transport "RUS_MSV_btr80",
"RHS_Ural_MSV_01", // Ural-4320 Transport (Covered) "RUS_MSV_btr82a",
"rhs_bmp2d_msv", // BMP-2D "RUS_MSV_mtlb",
"rhs_bmp2k_msv", // BMP-2K "RUS_MSV_mtlbm6mb",
"rhs_brm1k_msv", // BRM-1K "RUS_MSV_mtlbvmk",
"rhs_zsu234_aa", // ZSU-23-4V "RUS_MSV_prp3",
"rhs_zsu234_aa", // ZSU-23-4V (twice) "RUS_MSV_ap2",
"V_TAGa_btr80", "RUS_MSV_asn233115",
"V_TAG_btr80", "RUS_MSV_atmz54320",
"V_TAGa_btr80a", "RUS_MSV_kamaz4310",
"V_TAG_btr80a", "RUS_MSV_mtoat",
"V_TAG_bm21", "RUS_MSV_uaz469",
"Z_TAG_acacia", "RUS_MSV_ural43202",
"V_TAG_Gaz_2330", "RUS_MSV_9p135",
"V_TAG_Gaz_2330_kmf", "RUS_MSV_9p135m",
"V_TAG_ASN_233115_STS", "RUS_MSV_9p151",
"V_TAG_ASN_233115_STS_kmf", "RUS_MSV_9p163m1",
"V_TAG_ASN_233115", "RUS_MSV_ags17",
"V_TAG_ASN_233115_kmf", "RUS_MSV_nsvs",
"V_TAG_bmd2", "RUS_MSV_bmp1",
"V_TAGa_bmd2", "RUS_MSV_bmp1k",
"V_TAGa_bmd2k", "RUS_MSV_bmp2",
"V_TAG_bmd2k", "RUS_MSV_bmp2k",
"V_TAG_bmd4m", "RUS_MSV_bmp3",
"V_TAG_bmp2", "RUS_MSV_bmp3m",
"V_TAG_bmp2k", "RUS_MSV_2b14",
"V_TAG_brm1k", "RUS_MSV_2b17",
"V_TAG_prp3", "RUS_MSV_brm1k",
"Z_TAG_bmp3", "RUS_MSV_2s1",
"Z_TAG_bmp3m", "RUS_MSV_2s3m1",
"MY_TAGa_gvozdika", "RUS_MSV_9p149",
"V_TAG_t72b3", "RUS_MSV_9p148",
"Z_TAG_t72b3m", "RUS_MSV_t72b",
"Z_TAG_t90a", "RUS_MSV_t72b3",
"Z_TAG_t90m", "RUS_MSV_t72b3m",
"MY_TAG_t80bv", "RUS_MSV_t72bm",
"MY_TAG_t80bvk", "RUS_MSV_t80bv",
"MY_TAG_t80u", "RUS_MSV_t80bvk",
"MY_TAG_tric_t80", "RUS_MSV_t80u",
"MY_TAG_t80um", "RUS_MSV_t80u45m",
"MY_TAG_tric_t80um", "RUS_MSV_t80ue1",
"MY_TAG_t80ue", "RUS_MSV_t80uk",
"MY_TAG_tric_t80ue", "RUS_MSV_t90a",
"MY_TAG_t80uk", "RUS_MSV_t90m",
"MY_TAG_tric_t80uk", // T90A "RUS_MSV_zu232",
"V_TAG_Mi_24P", // Mi-24P (AT) "RUS_MSV_2a18m",
"V_TAG_Mi_35", // Mi-24V (AT) "RUS_VDV_bmd2",
"RHS_Mi8mt_Cargo_vdv", // Mi-8MT (Cargo) "RUS_VDV_bmd2k",
"V_TAG_Mi_28UB", "RUS_VDV_bmd4m",
"V_TAG_Ka_52" // Ka-52 "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). // 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 = [ opfor_battlegroup_vehicles_low_intensity = [
"V_TAG_ASN_233115", "RUS_MSV_btr80",
"V_TAG_ASN_233115_kmf", // GAZ-233011 "RUS_MSV_btr82a",
"V_TAG_ASN_233115_STS_kmf", // GAZ-233014 (Armed) "RUS_MSV_bmm",
"V_TAG_ASN_233115_STS", // GAZ-233014 (Armed) "RUS_MSV_btr80",
"RHS_Ural_Open_MSV_01", // Ural-4320 Transport "RUS_MSV_btr82a",
"V_TAGa_btr80", "RUS_MSV_mtlb",
"V_TAG_btr80", // BTR-80 "RUS_MSV_mtlbm6mb",
"V_TAG_btr80a", "RUS_MSV_mtlbvmk"
"V_TAGa_btr80a", // BTR-80A //"tbd_mtlb_deva",
"rhs_zsu234_aa", // ZSU-23-4V //"tbd_mtlb_tundzha",
"V_TAG_Mi_24P", // Mi-24P (AT) //"tbd_mtlb_type63",
"V_TAG_Mi_35", //"tbd_mtlb_mt12",
"V_TAG_bmd2", //"tbd_mtlb_bm21",
"V_TAGa_bmd2", //"tbd_mtlb_2b9",
"V_TAGa_bmd2k", //"tbd_mtlb_6ma2_tkn4g"
"V_TAG_bmd2k", // Mi-24V (AT)
"RHS_Mi8mt_Cargo_vdv",
"rhsgref_BRDM2_msv",
"rhsgref_BRDM2_ATGM_msv" // Mi-8MT (Cargo)
]; ];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers. /* 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. */ If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
opfor_troup_transports = [ opfor_troup_transports = [
"RHS_Ural_Open_MSV_01", // Ural-4320 Transport "RUS_MSV_bmp1",
"RHS_Ural_MSV_01", // Ural-4320 Transport (Covered) "RUS_MSV_bmp1k",
"V_TAGa_btr80", // BTR-80 "RUS_MSV_bmp2",
"V_TAG_btr80a", // BTR-80A "RUS_MSV_bmp2k",
"V_TAG_bmp2", // BMP-2D "RUS_MSV_bmp3",
"RHS_Mi8mt_Cargo_vdv", // Mi-8MT (Cargo) "RUS_MSV_bmm",
"V_TAG_Mi_24P", // Mi-24P (AT) "RUS_MSV_btr80",
"V_TAG_Mi_35" // Mi-24V (AT) "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. // Enemy rotary-wings that will need to spawn in flight.
opfor_choppers = [ opfor_choppers = [
"RHS_Mi8mt_Cargo_vdv", // Mi-8MT (Cargo) "RUS_VKS_ka52",
"V_TAG_Mi_24P", "RUS_VKS_mi24p",
"V_TAG_Mi_35", // Mi-24P (AT) "RUS_VKS_mi28n",
"V_TAG_Mi_28UB", // Mi-24V (AT) "RUS_VKS_mi8mt",
"V_TAG_Ka_52", // Ka-52 "RUS_VKS_mi8mtv2"
"V_TAG_Mi_17AMT"
]; ];
// Enemy fixed-wings that will need to spawn in the air. // Enemy fixed-wings that will need to spawn in the air.
opfor_air = [ opfor_air = [
"V_TAG_su25", // Su-25 "RHS_Su25SM_vvs", // Su-25
"RUS_VKS_su25sm", // Su-25 (KH29) "RUS_VKS_su25sm", // Su-25 (KH29)
"RUS_VKS_mig29s", "RUS_VKS_mig29s",
"RUS_VKS_mig29smt", "RUS_VKS_mig29smt",
"RUS_VKS_tu95ms6" "RUS_VKS_tu95ms6"
+1 -1
View File
@@ -5,7 +5,7 @@ if ( count GRLIB_all_fobs >= GRLIB_maximum_fobs ) exitWith {
}; };
_minfobdist = 1000; _minfobdist = 1000;
_minsectordist = GRLIB_capture_size; _minsectordist = GRLIB_capture_size + GRLIB_fob_range;
_distfob = 1; _distfob = 1;
_clearedtobuildfob = true; _clearedtobuildfob = true;
_distsector = 1; _distsector = 1;
@@ -12,6 +12,7 @@ while {true} do {
}; };
if !(isNil "_owner") then { if !(isNil "_owner") then {
if (_x getVariable ["KPLIB_patrol_group", false]) then {continue;};
if !(isGroupDeletedWhenEmpty _x) then { if !(isGroupDeletedWhenEmpty _x) then {
if (local _x) then { if (local _x) then {
_x deleteGroupWhenEmpty true; _x deleteGroupWhenEmpty true;
@@ -45,6 +45,10 @@ while { GRLIB_endgame == 0 } do {
_grp = group ((crew _vehicle_object) select 0); _grp = group ((crew _vehicle_object) select 0);
}; };
if (!isNull _grp) then {
_grp setVariable ["KPLIB_patrol_group", true, true];
};
[_grp] spawn patrol_ai; [_grp] spawn patrol_ai;
_started_time = time; _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 { if ( !([] call KPLIB_fnc_isBigtownActive) ) then {
sleep (600.0 / GRLIB_difficulty_modifier); sleep (600.0 / GRLIB_difficulty_modifier);
}; };