6 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
f12355f581 Merge pull request 'spam in logs of "Error Undefined variable in expression: _grp"' (#1) from fix/patrol-spawn into master
All checks were successful
Build Mission PBO / pack (push) Successful in 1m0s
Build Mission PBO / deploy (push) Successful in 6s
Reviewed-on: #1
2026-07-02 14:43:25 +00:00
MrFastwind
91e3099f0e fix(kp-framework): Fixes spam in logs of "Error Undefined variable in
expression: _grp" in \scripts\server\patrols\manage_one_patrol.sqf...,
line 62
2026-07-02 04:08:00 +02:00
5f1d7688c9 Difficulty crank
All checks were successful
Build Mission PBO / pack (push) Successful in 13s
Build Mission PBO / deploy (push) Successful in 6s
2026-06-30 18:10:35 +03:00
5a3643c71a Raising OPFOR unitcap, neutering civs, removing guerillas
All checks were successful
Build Mission PBO / pack (push) Successful in 14s
Build Mission PBO / deploy (push) Successful in 10s
2026-06-28 21:00:07 +03:00
a1e9cef54d Decrease civ amount (+tabs)
All checks were successful
Build Mission PBO / pack (push) Successful in 14s
Build Mission PBO / deploy (push) Successful in 6s
2026-06-28 12:41:21 +03:00
8 changed files with 140 additions and 166 deletions

View File

@@ -211,27 +211,27 @@ KP_liberation_production_interval = 10; // Time
GRLIB_sector_size = 1700; // Range to activate a sector. GRLIB_sector_size = 1700; // Range to activate a sector.
GRLIB_capture_size = 275; // Range to capture a sector. GRLIB_capture_size = 275; // Range to capture a sector.
GRLIB_defended_buildingpos_part = 0.4; // Multiplier for defenders in buildings. GRLIB_defended_buildingpos_part = 1; // Multiplier for defenders in buildings.
GRLIB_battlegroup_size = 8; // Size of enemy battlegroups. GRLIB_battlegroup_size = 16; // Size of enemy battlegroups.
GRLIB_vulnerability_timer = 1800; // Time in seconds how long a captured sector is vulnerable to enemy troops. GRLIB_vulnerability_timer = 1800; // Time in seconds how long a captured sector is vulnerable to enemy troops.
GRLIB_radiotower_size = 3500; // Radio Tower scanning range. GRLIB_radiotower_size = 3500; // Radio Tower scanning range.
GRLIB_surrender_chance = 80; // Chance that enemy infantry will surrender after heavy losses are encountered. GRLIB_surrender_chance = 80; // Chance that enemy infantry will surrender after heavy losses are encountered.
GRLIB_civilians_amount = 0; // Civilian count multiplier. GRLIB_civilians_amount = 0.6; // Civilian count multiplier.
GRLIB_cleanup_delay = 300; // Time in seconds until bodies of dead soldiers are cleaned up. GRLIB_cleanup_delay = 300; // Time in seconds until bodies of dead soldiers are cleaned up.
GRLIB_blufor_cap = 100; // Cap for BLUFOR. GRLIB_blufor_cap = 100; // Cap for BLUFOR.
GRLIB_sector_cap = 180; // Cap for sector defenders. GRLIB_sector_cap = 360; // Cap for sector defenders.
GRLIB_battlegroup_cap = 150; // Cap for enemy battlegroups. GRLIB_battlegroup_cap = 300; // Cap for enemy battlegroups.
GRLIB_patrol_cap = 150; // Cap for enemy patrols. GRLIB_patrol_cap = 300; // Cap for enemy patrols.
KP_liberation_cr_kill_penalty = 5; // Civil Reputation penalty for killing a civilian. KP_liberation_cr_kill_penalty = 1; // Civil Reputation penalty for killing a civilian.
KP_liberation_cr_building_penalty = 0; // Civil Reputation penalty for destroying/damaging a building. KP_liberation_cr_building_penalty = 0; // Civil Reputation penalty for destroying/damaging a building.
KP_liberation_cr_vehicle_penalty = 2; // Civil Reputation penalty for stealing a civilian vehicle. KP_liberation_cr_vehicle_penalty = 2; // Civil Reputation penalty for stealing a civilian vehicle.
KP_liberation_cr_resistance_penalty = 3; // Civil Reputation penalty for killing a friendly resistance soldier. KP_liberation_cr_resistance_penalty = 0; // Civil Reputation penalty for killing a friendly resistance soldier.
KP_liberation_cr_sector_gain = 5; // Civil Reputation gain for liberate a sector. KP_liberation_cr_sector_gain = 5; // Civil Reputation gain for liberate a sector.
KP_liberation_cr_wounded_chance = 35; // Chance (0-100) that there are wounded civilians right after capturing a sector. KP_liberation_cr_wounded_chance = 35; // Chance (0-100) that there are wounded civilians right after capturing a sector.
KP_liberation_cr_wounded_gain = 2; // Civil Reputation gain for providing medical assistance for wounded civilians. KP_liberation_cr_wounded_gain = 1; // Civil Reputation gain for providing medical assistance for wounded civilians.
KP_liberation_civinfo_min = 5400; // Civil Informant minimum spawn time. (seconds) KP_liberation_civinfo_min = 5400; // Civil Informant minimum spawn time. (seconds)
KP_liberation_civinfo_max = 10800; // Civil Informant maximum spawn time. (seconds) KP_liberation_civinfo_max = 10800; // Civil Informant maximum spawn time. (seconds)
@@ -241,14 +241,14 @@ KP_liberation_civinfo_duration = 1200; // Civil
KP_liberation_civinfo_task_chance = 40; // Chance (0-100) that the delivered informant will spawn a time critical task. KP_liberation_civinfo_task_chance = 40; // Chance (0-100) that the delivered informant will spawn a time critical task.
KP_liberation_civinfo_task_duration = 900; // Duration until the task will despawn if no player is near. (seconds) KP_liberation_civinfo_task_duration = 900; // Duration until the task will despawn if no player is near. (seconds)
KP_liberation_convoy_ambush_chance = 2; // Chance that a logistic convoy will be ambushed, when civil reputation is low. KP_liberation_convoy_ambush_chance = 0; // Chance that a logistic convoy will be ambushed, when civil reputation is low.
KP_liberation_convoy_ambush_duration = 1200; // Duration of the convoy ambush event. (seconds) KP_liberation_convoy_ambush_duration = 1200; // Duration of the convoy ambush event. (seconds)
KP_liberation_resistance_tier2 = 30; // At which strength (0-100) the guerilla forces will be at tier 2? KP_liberation_resistance_tier2 = 30; // At which strength (0-100) the guerilla forces will be at tier 2?
KP_liberation_resistance_tier3 = 70; // At which strength (0-100) the guerilla forces will be at tier 3? KP_liberation_resistance_tier3 = 70; // At which strength (0-100) the guerilla forces will be at tier 3?
KP_liberation_resistance_at_chance = 20; // Chance that a guerilla unit has a RPG. (tier 2 and 3) KP_liberation_resistance_at_chance = 0; // Chance that a guerilla unit has a RPG. (tier 2 and 3)
KP_liberation_resistance_sector_chance = 35; // Chance that a guerilla squad will join an ongoing sector attack. KP_liberation_resistance_sector_chance = 0; // Chance that a guerilla squad will join an ongoing sector attack.
KP_liberation_resistance_ambush_chance = 25; // Chance that some guerilla units will spawn in blufor sectors for an ambush, if reputation is low. KP_liberation_resistance_ambush_chance = 0; // Chance that some guerilla units will spawn in blufor sectors for an ambush, if reputation is low.
// Array of worldName values. // Array of worldName values.
// When playing on this map, it'll create a clearance (remove terrain objects) in a 15m radius around the battlegroup/reinforcements spawnpoint. // When playing on this map, it'll create a clearance (remove terrain objects) in a 15m radius around the battlegroup/reinforcements spawnpoint.

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,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. 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 = [
["UA_Azov_forwardobserver",15,0,0], // Rifleman (Light) ["UA_Azov_forwardobserver",15,0,0], // Rifleman (Light)
["UA_Azov_rifleman",20,0,0], // Rifleman ["UA_Azov_rifleman",20,0,0], // Rifleman
["UA_Azov_sapper",30,0,0], // Rifleman (AT) ["UA_Azov_sapper",30,0,0], // Rifleman (AT)
["UA_Azov_grenadier",25,0,0], // Grenadier ["UA_Azov_grenadier",25,0,0], // Grenadier
["UA_Azov_machinegunner",25,0,0], // Autorifleman ["UA_Azov_machinegunner",25,0,0], // Autorifleman
["B_HeavyGunner_F",35,0,0], // Heavygunner ["B_HeavyGunner_F",35,0,0], // Heavygunner
["UA_Azov_gunner",30,0,0], // Marksman ["UA_Azov_gunner",30,0,0], // Marksman
["UA_Azov_rangefinder",40,0,0], // Sharpshooter ["UA_Azov_rangefinder",40,0,0], // Sharpshooter
["UA_Azov_operatoratgm",50,10,0], // AT Specialist ["UA_Azov_operatoratgm",50,10,0], // AT Specialist
["UA_Azov_operatormanpad",50,10,0], // AA Specialist ["UA_Azov_operatormanpad",50,10,0], // AA Specialist
["UA_Azov_riflemancombatlifesaver",30,0,0], // Combat Life Saver ["UA_Azov_riflemancombatlifesaver",30,0,0], // Combat Life Saver
["UA_Azov_driver",30,0,0], // Engineer ["UA_Azov_driver",30,0,0], // Engineer
["UA_SSO_recon",20,0,0], // Recon Scout ["UA_SSO_recon",20,0,0], // Recon Scout
["UA_SSO_reconsapper",30,0,0], // Recon Scout (AT) ["UA_SSO_reconsapper",30,0,0], // Recon Scout (AT)
["UA_SSO_reconradiotelephonist",30,0,0], // Recon Marksman ["UA_SSO_reconradiotelephonist",30,0,0], // Recon Marksman
["UA_SSO_reconsniper",40,0,0], // Recon Sharpshooter ["UA_SSO_reconsniper",40,0,0], // Recon Sharpshooter
["UA_SSO_seniorrecon",30,0,0], // Recon Paramedic ["UA_SSO_seniorrecon",30,0,0], // Recon Paramedic
["UA_SSO_reconoperatoruav",30,0,0], // Recon Demolition Expert ["UA_SSO_reconoperatoruav",30,0,0], // Recon Demolition Expert
["UA_Azov_sniper",70,5,0], // Sniper ["UA_Azov_sniper",70,5,0], // Sniper
["UA_Azov_rangefinder",20,0,0], // Spotter ["UA_Azov_rangefinder",20,0,0], // Spotter
["UA_Azov_driver",10,0,0], // Crewman ["UA_Azov_driver",10,0,0], // Crewman
["UA_DShV_lieutenant",20,0,0], // Para Trooper ["UA_DShV_lieutenant",20,0,0], // Para Trooper
["UA_VVS_helicopterpilot",10,0,0], // Helicopter Crew ["UA_VVS_helicopterpilot",10,0,0], // Helicopter Crew
["UA_VVS_helicopterpilot",10,0,0], // Helicopter Pilot ["UA_VVS_helicopterpilot",10,0,0], // Helicopter Pilot
["UA_VVS_pilot",10,0,0] // Pilot ["UA_VVS_pilot",10,0,0] // Pilot
]; ];
light_vehicles = [ light_vehicles = [
@@ -237,27 +223,27 @@ buildings = [
["Land_Cargo_Patrol_V1_F",0,0,0], ["Land_Cargo_Patrol_V1_F",0,0,0],
["Land_Cargo_Tower_V1_F",0,0,0], ["Land_Cargo_Tower_V1_F",0,0,0],
["Land_AFOU_okop_bunker_01_grass_green_F",0,0,0], ["Land_AFOU_okop_bunker_01_grass_green_F",0,0,0],
["Land_AFOU_okop_med_bunker_01_grass_green_F",0,0,0], ["Land_AFOU_okop_med_bunker_01_grass_green_F",0,0,0],
["Land_AFOU_okop_grass_green_01_F",0,0,0], ["Land_AFOU_okop_grass_green_01_F",0,0,0],
["Land_AFOU_okop_cut90_grass_green_F",0,0,0], ["Land_AFOU_okop_cut90_grass_green_F",0,0,0],
["Land_AFOU_okop_cut90_nakritya_grass_green_F",0,0,0], ["Land_AFOU_okop_cut90_nakritya_grass_green_F",0,0,0],
["Land_AFOU_okop_vhid_01_grass_green_F",0,0,0], ["Land_AFOU_okop_vhid_01_grass_green_F",0,0,0],
["Land_AFOU_okop_odynochna_pozytsiya_grass_green_F",0,0,0], ["Land_AFOU_okop_odynochna_pozytsiya_grass_green_F",0,0,0],
["Land_AFOU_okop_odynochna_pozytsiya_BMP2_Wreck_grass_green_F",0,0,0], ["Land_AFOU_okop_odynochna_pozytsiya_BMP2_Wreck_grass_green_F",0,0,0],
["Land_AFOU_okop_odynochna_pozytsiya_T72_Wreck_grass_green_F",0,0,0], ["Land_AFOU_okop_odynochna_pozytsiya_T72_Wreck_grass_green_F",0,0,0],
["Land_AFOU_okop_osn_grass_green_F",0,0,0], ["Land_AFOU_okop_osn_grass_green_F",0,0,0],
["Land_AFOU_okop_dot_01_grass_green_F",0,0,0], ["Land_AFOU_okop_dot_01_grass_green_F",0,0,0],
["Land_AFOU_okop_T_01_grass_green_F",0,0,0], ["Land_AFOU_okop_T_01_grass_green_F",0,0,0],
["Land_AFOU_okop_T_02_grass_green_F",0,0,0], ["Land_AFOU_okop_T_02_grass_green_F",0,0,0],
["Land_AFOU_okop_T_03_grass_green_F",0,0,0], ["Land_AFOU_okop_T_03_grass_green_F",0,0,0],
["Land_AFOU_okop_T_04_grass_green_F",0,0,0], ["Land_AFOU_okop_T_04_grass_green_F",0,0,0],
["Land_AFOU_okop_T_05_grass_green_F",0,0,0], ["Land_AFOU_okop_T_05_grass_green_F",0,0,0],
["Land_AFOU_okop_bunker_tunel_vhid_grass_green_01_F",0,0,0], ["Land_AFOU_okop_bunker_tunel_vhid_grass_green_01_F",0,0,0],
["Land_AFOU_okop_tehnika_grass_green_F",0,0,0], ["Land_AFOU_okop_tehnika_grass_green_F",0,0,0],
["Land_AFOU_okop_tehnika_sitka_wood_grass_green_F",0,0,0], ["Land_AFOU_okop_tehnika_sitka_wood_grass_green_F",0,0,0],
["Land_AFOU_okop_bunker_tunel_01_grass_green_F",0,0,0], ["Land_AFOU_okop_bunker_tunel_01_grass_green_F",0,0,0],
["Land_AFOU_okop_bunker_perekhrestya_tunel_01_grass_green_F",0,0,0], ["Land_AFOU_okop_bunker_perekhrestya_tunel_01_grass_green_F",0,0,0],
["Land_AFOU_okop_bunker_t_tunel_01_grass_green_F",0,0,0], ["Land_AFOU_okop_bunker_t_tunel_01_grass_green_F",0,0,0],
["Flag_NATO_F",0,0,0], ["Flag_NATO_F",0,0,0],
["Flag_US_F",0,0,0], ["Flag_US_F",0,0,0],
["BWA3_Flag_Ger_F",0,0,0], ["BWA3_Flag_Ger_F",0,0,0],
@@ -368,9 +354,9 @@ support_vehicles = [
["B_Truck_01_Repair_F",325,0,75], // HEMTT Repair ["B_Truck_01_Repair_F",325,0,75], // HEMTT Repair
["B_Truck_01_fuel_F",125,0,275], // HEMTT Fuel ["B_Truck_01_fuel_F",125,0,275], // HEMTT Fuel
["B_Truck_01_ammo_F",125,200,75], // HEMTT Ammo ["B_Truck_01_ammo_F",125,200,75], // HEMTT Ammo
["FA_UAF_Zamak_Repair",325,0,75], // M977A4 Repair ["FA_UAF_Zamak_Repair",325,0,75], // M977A4 Repair
["FA_UAF_Zamak_Fuel",125,0,275], // M978A4 Fuel ["FA_UAF_Zamak_Fuel",125,0,275], // M978A4 Fuel
["UA_KRAZ_6322_ammo",125,200,75], // M977A4 Ammo ["UA_KRAZ_6322_ammo",125,200,75], // M977A4 Ammo
["B_Slingload_01_Repair_F",275,0,0], // Huron Repair ["B_Slingload_01_Repair_F",275,0,0], // Huron Repair
["B_Slingload_01_Fuel_F",75,0,200], // Huron Fuel ["B_Slingload_01_Fuel_F",75,0,200], // Huron Fuel
["B_Slingload_01_Ammo_F",75,200,0] // Huron Ammo ["B_Slingload_01_Ammo_F",75,200,0] // Huron Ammo
@@ -461,8 +447,3 @@ blufor_squad_para = [
"B_soldier_PG_F", "B_soldier_PG_F",
"B_soldier_PG_F" "B_soldier_PG_F"
]; ];

View File

@@ -1,50 +1,42 @@
/*
Needed Mods:
- None
Optional Mods:
- None
*/
// Civilian classnames. // Civilian classnames.
civilians = [ civilians = [
"c_civil_cloth_01", "c_civil_cloth_01",
"c_civil_cloth_02", "c_civil_cloth_02",
"c_civil_cloth_03", "c_civil_cloth_03",
"c_civil_cloth_04", "c_civil_cloth_04",
"c_civil_cloth_05", "c_civil_cloth_05",
"c_civil_cloth_06", "c_civil_cloth_06",
"c_civil_cloth_07", "c_civil_cloth_07",
"c_civil_cloth_08", "c_civil_cloth_08",
"c_civil_cloth_09", "c_civil_cloth_09",
"c_civil_cloth_10", "c_civil_cloth_10",
"c_civil_cloth_11", "c_civil_cloth_11",
"c_civil_cloth_12", "c_civil_cloth_12",
"c_civil_cloth_16", "c_civil_cloth_16",
"c_civil_poloshirt_01", "c_civil_poloshirt_01",
"c_civil_poloshirt_02", "c_civil_poloshirt_02",
"c_civil_poloshirt_03", "c_civil_poloshirt_03",
"c_civil_poloshirt_04", "c_civil_poloshirt_04",
"c_uacivil_medic_red_base", "c_uacivil_medic_red_base",
"c_civil_polopants_01", "c_civil_polopants_01",
"c_civil_polopants_02", "c_civil_polopants_02",
"c_civil_polopants_03", "c_civil_polopants_03",
"c_civil_polopants_04", "c_civil_polopants_04",
"c_civil_formalsuit_vyshiv_01", "c_civil_formalsuit_vyshiv_01",
"c_civil_formalsuit_vyshiv_02" "c_civil_formalsuit_vyshiv_02"
]; ];
// Civilian vehicle classnames. // Civilian vehicle classnames.
civilian_vehicles = [ civilian_vehicles = [
"C_Truck_02_fuel_F", "C_Truck_02_fuel_F",
"C_Hatchback_01_F", "C_Hatchback_01_F",
"c_uacivil_tracktor_01", "c_uacivil_tracktor_01",
"c_civil_ambulance_01", "c_civil_ambulance_01",
"c_uacivil_van01_01", "c_uacivil_van01_01",
"UA_CIV_mitsubishil200", "UA_CIV_mitsubishil200",
"UA_CIV_mitsubishil200cover", "UA_CIV_mitsubishil200cover",
"UA_CIV_gazellenext", "UA_CIV_gazellenext",
"UA_CIV_gazellenextbox", "UA_CIV_gazellenextbox",
"c_volunteer_offroad_medevac_redcross", "c_volunteer_offroad_medevac_redcross",
"c_uadsns_offroad_emergency01" "c_uadsns_offroad_emergency01"
]; ];

View File

@@ -1,27 +1,19 @@
/*
Needed Mods:
- RHS AFRF
Optional Mods:
- None
*/
// Enemy infantry classes // Enemy infantry classes
opfor_officer = "RUS_spn_deputyplatooncommander"; // Officer opfor_officer = "RUS_spn_deputyplatooncommander"; // Officer
opfor_squad_leader = "RUS_spn_platooncommander"; // Squad Leader opfor_squad_leader = "RUS_spn_platooncommander"; // Squad Leader
opfor_team_leader = "RUS_spn_squadcommander"; // Team Leader opfor_team_leader = "RUS_spn_squadcommander"; // Team Leader
opfor_sentry = "RUS_spn_recon"; // Rifleman (Lite) opfor_sentry = "RUS_spn_recon"; // Rifleman (Lite)
opfor_rifleman = "rhs_msv_emr_rifleman"; // Rifleman opfor_rifleman = "rhs_msv_emr_rifleman"; // Rifleman
opfor_rpg = "RUS_spn_recongrenadier"; // Rifleman (LAT) opfor_rpg = "RUS_spn_recongrenadier"; // Rifleman (LAT)
opfor_grenadier = "RUS_spn_seniorrecon"; // Grenadier opfor_grenadier = "RUS_spn_seniorrecon"; // Grenadier
opfor_machinegunner = "RUS_spn_reconmachinegunner"; opfor_machinegunner = "RUS_spn_reconmachinegunner";
opfor_heavygunner = "RUS_spn_reconmachinegunner"; opfor_heavygunner = "RUS_spn_reconmachinegunner";
opfor_marksman = "RUS_spn_reconsniper"; // Marksman opfor_marksman = "RUS_spn_reconsniper"; // Marksman
opfor_sharpshooter = "RUS_spn_reconradiotelephonist"; opfor_sharpshooter = "RUS_spn_reconradiotelephonist";
opfor_sniper = "RUS_spn_reconoperatoruav"; // Sniper opfor_sniper = "RUS_spn_reconoperatoruav"; // Sniper
opfor_at = "RUS_spn_recon"; // AT Specialist opfor_at = "RUS_spn_recon"; // AT Specialist
opfor_aa = "RUS_MSV_operatormanpad"; // AA Specialist opfor_aa = "RUS_MSV_operatormanpad"; // AA Specialist
opfor_medic = "RUS_spn_reconsanitar"; // Combat Life Saver opfor_medic = "RUS_spn_reconsanitar"; // Combat Life Saver
opfor_engineer = "RUS_spn_reconsapper"; opfor_engineer = "RUS_spn_reconsapper";
opfor_paratrooper = "rhs_msv_emr_RShG2"; // Paratrooper opfor_paratrooper = "rhs_msv_emr_RShG2"; // Paratrooper
@@ -31,10 +23,10 @@ opfor_mrap_armed = "rhs_tigr_sts_msv"; // GAZ-2
opfor_transport_helo = "RHS_Mi8mt_Cargo_vvsc"; // Mi-8MT (Cargo) opfor_transport_helo = "RHS_Mi8mt_Cargo_vvsc"; // Mi-8MT (Cargo)
opfor_transport_truck = "RHS_Ural_MSV_01"; // Ural-4320 Transport (Covered) 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_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_fuel_truck = "RUS_MSV_atmz54320"; // Ural-4320 Fuel
opfor_ammo_truck = "rhs_gaz66_ammo_msv"; // GAZ-66 Ammo opfor_ammo_truck = "rhs_gaz66_ammo_msv"; // GAZ-66 Ammo
opfor_fuel_container = "Land_Pod_Heli_Transport_04_fuel_F"; // Taru Fuel Pod opfor_fuel_container = "Land_Pod_Heli_Transport_04_fuel_F"; // Taru Fuel Pod
opfor_ammo_container = "rhs_kamaz5350_ammo_msv"; // 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.
@@ -42,6 +34,7 @@ Therefore, adding the same value twice or three times means they are more likely
/* 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 = [
"RUS_MSV_sr_efreitor", "RUS_MSV_sr_efreitor",
"RUS_MSV_sr_grenadier", "RUS_MSV_sr_grenadier",
@@ -70,7 +63,7 @@ militia_vehicles = [
"RUS_MSV_nsvs", "RUS_MSV_nsvs",
"RUS_MSV_2b14", "RUS_MSV_2b14",
"RUS_MP_kord", "RUS_MP_kord",
"rhs_SPG9M_MSV" // GAZ-233014 (Armed) "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.
@@ -225,6 +218,7 @@ opfor_battlegroup_vehicles_low_intensity = [
/* 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 = [
"RUS_MSV_bmp1", "RUS_MSV_bmp1",
"RUS_MSV_bmp1k", "RUS_MSV_bmp1k",
@@ -237,8 +231,8 @@ opfor_troup_transports = [
"RUS_MSV_mtlb", "RUS_MSV_mtlb",
"RUS_MSV_mtlbvmk", "RUS_MSV_mtlbvmk",
//"tbd_mtlb_6ma2_tkn4g", //"tbd_mtlb_6ma2_tkn4g",
"RUS_VKS_mi8mt", // Mi-8MT (Cargo) "RUS_VKS_mi8mt", // Mi-8MT (Cargo)
"RUS_VKS_mi24p" // Mi-24P (AT) "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.
@@ -252,8 +246,8 @@ opfor_choppers = [
// 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 = [
"RHS_Su25SM_vvs", // 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"

View File

@@ -8,22 +8,10 @@
/* Classnames of the guerilla faction which is friendly or hostile, depending on the civil reputation /* Classnames of the guerilla faction which is friendly or hostile, depending on the civil reputation
Standard loadout of the units will be replaced with a scripted one, which depends on the guerilla strength, after spawn */ Standard loadout of the units will be replaced with a scripted one, which depends on the guerilla strength, after spawn */
KP_liberation_guerilla_units = [ KP_liberation_guerilla_units = [];
"I_G_Soldier_AR_F",
"I_G_engineer_F",
"I_G_officer_F",
"I_G_medic_F",
"I_G_Soldier_F",
"I_G_Soldier_LAT_F",
"I_G_Soldier_M_F",
"I_G_Soldier_SL_F"
];
// Armed vehicles // Armed vehicles
KP_liberation_guerilla_vehicles = [ KP_liberation_guerilla_vehicles = [];
"I_G_Offroad_01_armed_F",
"I_G_Offroad_01_AT_F"
];
/* Guerilla Equipment /* Guerilla Equipment
There are 3 tiers for every category. If the strength of the guerillas will increase, they'll have higher tier equipment. */ There are 3 tiers for every category. If the strength of the guerillas will increase, they'll have higher tier equipment. */

View File

@@ -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;

View File

@@ -1,5 +1,5 @@
params [ "_minimum_readiness", "_is_infantry" ]; params [ "_minimum_readiness", "_is_infantry" ];
private [ "_headless_client" ]; private [ "_headless_client", "_grp", "_spawn_marker", "_sector_spawn_pos", "_started_time", "_patrol_continue" ];
waitUntil { !isNil "blufor_sectors" }; waitUntil { !isNil "blufor_sectors" };
waitUntil { !isNil "combat_readiness" }; waitUntil { !isNil "combat_readiness" };
@@ -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;
@@ -58,6 +62,11 @@ while { GRLIB_endgame == 0 } do {
}; };
while { _patrol_continue } do { while { _patrol_continue } do {
if (isNil "_grp") then {
_patrol_continue = false;
["_grp was nil, but patrol was expected", "MANAGE_ONE_PATROL"] call KPLIB_fnc_log;
break;
};
sleep 60; sleep 60;
if ( count (units _grp) == 0 ) then { if ( count (units _grp) == 0 ) then {
_patrol_continue = false; _patrol_continue = false;
@@ -76,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);
}; };

View File

@@ -155,7 +155,7 @@ switch (GRLIB_civilian_activity) do {
case 1: {GRLIB_civilian_activity = 0.5;}; case 1: {GRLIB_civilian_activity = 0.5;};
case 2: {GRLIB_civilian_activity = 1;}; case 2: {GRLIB_civilian_activity = 1;};
case 3: {GRLIB_civilian_activity = 2;}; case 3: {GRLIB_civilian_activity = 2;};
default {GRLIB_csat_aggressivity = 1;}; default {GRLIB_civilian_activity = 0.5;};
}; };
switch (GRLIB_resources_multiplier) do { switch (GRLIB_resources_multiplier) do {