Added shorad units on frontline

This commit is contained in:
Khopa 2020-12-22 23:23:32 +01:00
parent df948bde9d
commit 12bf26223d
75 changed files with 462 additions and 265 deletions

View File

@ -10,6 +10,7 @@
## Fixes:
* **[Factions]** AI would never buy artillery units for the frontline - fixed
* **[Factions]** Removed the F-111 unit from the NATO desert storm faction. (Recruiting it would cause crashes in DCS, since it is not a valid unit)
* **[Units]** Fixed SPG_Stryker_M1128_MGS not being in db
# 2.3.2

View File

@ -385,6 +385,7 @@ PRICES = {
Armor.ATGM_M1045_HMMWV_TOW: 8,
Armor.IFV_M2A2_Bradley: 12,
Armor.APC_M1126_Stryker_ICV: 10,
Armor.SPG_M1128_Stryker_MGS: 14,
Armor.ATGM_M1134_Stryker: 12,
Armor.MBT_M60A3_Patton: 16,
Armor.MBT_M1A2_Abrams: 25,
@ -755,6 +756,7 @@ UNIT_BY_TASK = {
Armor.APC_M1126_Stryker_ICV,
Armor.APC_M1126_Stryker_ICV,
Armor.APC_M1126_Stryker_ICV,
Armor.SPG_M1128_Stryker_MGS,
Armor.IFV_MCV_80,
Armor.IFV_MCV_80,
Armor.IFV_MCV_80,
@ -837,6 +839,23 @@ UNIT_BY_TASK = {
Artillery.M12_GMC,
Artillery.Sturmpanzer_IV_Brummbär,
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.AAA_ZU_23_Insurgent_on_Ural_375,
AirDefence.AAA_ZSU_57_2,
AirDefence.SPAAA_ZSU_23_4_Shilka,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_9_Strela_1_9P31,
AirDefence.SAM_SA_13_Strela_10M3_9A35M3,
AirDefence.SAM_SA_15_Tor_9A331,
AirDefence.SAM_SA_19_Tunguska_2S6,
AirDefence.SPAAA_Gepard,
AirDefence.AAA_Vulcan_M163,
AirDefence.SAM_Linebacker_M6,
AirDefence.SAM_Chaparral_M48,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Roland_ADS,
AirDefence.HQ_7_Self_Propelled_LN,
frenchpack.DIM__TOYOTA_BLUE,
frenchpack.DIM__TOYOTA_DESERT,
frenchpack.DIM__TOYOTA_GREEN,
@ -862,23 +881,6 @@ UNIT_BY_TASK = {
],
AirDefence: [
# those are listed multiple times here to balance prioritization more into lower tier AAs
AirDefence.AAA_Vulcan_M163,
AirDefence.AAA_Vulcan_M163,
AirDefence.AAA_Vulcan_M163,
AirDefence.SAM_Linebacker_M6,
AirDefence.SPAAA_ZSU_23_4_Shilka,
AirDefence.AAA_ZU_23_Closed,
AirDefence.SAM_SA_9_Strela_1_9P31,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_19_Tunguska_2S6,
AirDefence.SAM_SA_6_Kub_LN_2P25,
AirDefence.SAM_SA_3_S_125_LN_5P73,
AirDefence.SAM_Hawk_PCP,
AirDefence.SAM_SA_2_LN_SM_90,
AirDefence.SAM_SA_11_Buk_LN_9A310M1,
],
Reconnaissance: [Unarmed.Transport_M818, Unarmed.Transport_Ural_375, Unarmed.Transport_UAZ_469],
Nothing: [Infantry.Infantry_M4, Infantry.Soldier_AK, ],

View File

@ -1,16 +1,16 @@
from __future__ import annotations
from dataclasses import dataclass
import math
import random
from dataclasses import dataclass
from typing import Iterator, List, Optional, TYPE_CHECKING, Type
from dcs.task import CAP, CAS
from dcs.unittype import FlyingType, UnitType, VehicleType
from dcs.unittype import FlyingType, VehicleType
from game import db
from game.factions.faction import Faction
from game.theater import ControlPoint, MissionTarget
from game.theater import ControlPoint, MissionTarget, TYPE_SHORAD
from gen.flights.ai_flight_planner_db import (
capable_aircraft_for_task,
preferred_aircraft_for_task,
@ -74,9 +74,19 @@ class ProcurementAi:
return budget
def random_affordable_ground_unit(
self, budget: int) -> Optional[Type[VehicleType]]:
self, budget: int, cp: ControlPoint) -> Optional[Type[VehicleType]]:
affordable_units = [u for u in self.faction.frontline_units + self.faction.artillery_units if
db.PRICES[u] <= budget]
total_number_aa = cp.base.total_frontline_aa + cp.pending_frontline_aa_deliveries_count
total_non_aa = cp.base.total_armor + cp.pending_deliveries_count - total_number_aa
max_aa = math.ceil(total_non_aa/8)
# Limit the number of AA units the AI will buy
if not total_number_aa < max_aa:
for unit in [u for u in affordable_units if u in TYPE_SHORAD]:
affordable_units.remove(unit)
if not affordable_units:
return None
return random.choice(affordable_units)
@ -91,7 +101,7 @@ class ProcurementAi:
break
cp = random.choice(candidates)
unit = self.random_affordable_ground_unit(budget)
unit = self.random_affordable_ground_unit(budget, cp)
if unit is None:
# Can't afford any more units.
break

View File

@ -9,6 +9,7 @@ from dcs.unittype import FlyingType, UnitType, VehicleType
from dcs.vehicles import AirDefence, Armor
from game import db
from gen.ground_forces.ai_ground_planner_db import TYPE_SHORAD
STRENGTH_AA_ASSEMBLE_MIN = 0.2
PLANES_SCRAMBLE_MIN_BASE = 2
@ -36,6 +37,10 @@ class Base:
def total_armor(self) -> int:
return sum(self.armor.values())
@property
def total_frontline_aa(self) -> int:
return sum([v for k, v in self.armor.items() if k in TYPE_SHORAD])
@property
def total_aa(self) -> int:
return sum(self.aa.values())

View File

@ -20,6 +20,7 @@ from dcs.terrain.terrain import Airport, ParkingSlot
from dcs.unittype import FlyingType
from game import db
from gen.ground_forces.ai_ground_planner_db import TYPE_SHORAD
from gen.runways import RunwayAssigner, RunwayData
from gen.ground_forces.combat_stance import CombatStance
from .base import Base
@ -457,6 +458,26 @@ class ControlPoint(MissionTarget, ABC):
u.position.x = u.position.x + delta.x
u.position.y = u.position.y + delta.y
@property
def pending_frontline_aa_deliveries_count(self):
"""
Get number of pending frontline aa units
"""
if self.pending_unit_deliveries:
return sum([v for k,v in self.pending_unit_deliveries.units.items() if k in TYPE_SHORAD])
else:
return 0
@property
def pending_deliveries_count(self):
"""
Get number of pending units
"""
if self.pending_unit_deliveries:
return sum([v for k, v in self.pending_unit_deliveries.units.items()])
else:
return 0
class Airfield(ControlPoint):

View File

@ -3,180 +3,14 @@ from enum import Enum
from typing import Dict, List
from dcs.unittype import VehicleType
from dcs.vehicles import Armor, Artillery, Infantry, Unarmed
import pydcs_extensions.frenchpack.frenchpack as frenchpack
from game.theater import ControlPoint
from gen.ground_forces.ai_ground_planner_db import *
from gen.ground_forces.combat_stance import CombatStance
TYPE_TANKS = [
Armor.MBT_T_55,
Armor.MBT_T_72B,
Armor.MBT_T_72B3,
Armor.MBT_T_80U,
Armor.MBT_T_90,
Armor.MBT_Leopard_2,
Armor.MBT_Leopard_1A3,
Armor.MBT_Leclerc,
Armor.MBT_Challenger_II,
Armor.MBT_M1A2_Abrams,
Armor.MBT_M60A3_Patton,
Armor.MBT_Merkava_Mk__4,
Armor.ZTZ_96B,
# WW2
Armor.MT_Pz_Kpfw_V_Panther_Ausf_G,
Armor.MT_Pz_Kpfw_IV_Ausf_H,
Armor.HT_Pz_Kpfw_VI_Tiger_I,
Armor.HT_Pz_Kpfw_VI_Ausf__B_Tiger_II,
Armor.MT_M4_Sherman,
Armor.MT_M4A4_Sherman_Firefly,
Armor.StuG_IV,
Armor.CT_Centaur_IV,
Armor.CT_Cromwell_IV,
Armor.HIT_Churchill_VII,
Armor.LT_Mk_VII_Tetrarch,
# Mods
frenchpack.DIM__TOYOTA_BLUE,
frenchpack.DIM__TOYOTA_GREEN,
frenchpack.DIM__TOYOTA_DESERT,
frenchpack.DIM__KAMIKAZE,
frenchpack.AMX_10RCR,
frenchpack.AMX_10RCR_SEPAR,
frenchpack.AMX_30B2,
frenchpack.Leclerc_Serie_XXI,
]
TYPE_ATGM = [
Armor.ATGM_M1045_HMMWV_TOW,
Armor.ATGM_M1134_Stryker,
Armor.IFV_BMP_2,
# WW2 (Tank Destroyers)
Armor.M30_Cargo_Carrier,
Armor.TD_Jagdpanzer_IV,
Armor.TD_Jagdpanther_G1,
Armor.TD_M10_GMC,
# Mods
frenchpack.VBAE_CRAB_MMP,
frenchpack.VAB_MEPHISTO,
frenchpack.TRM_2000_PAMELA,
]
TYPE_IFV = [
Armor.IFV_BMP_3,
Armor.IFV_BMP_2,
Armor.IFV_BMP_1,
Armor.IFV_Marder,
Armor.IFV_MCV_80,
Armor.IFV_LAV_25,
Armor.AC_Sd_Kfz_234_2_Puma,
Armor.IFV_M2A2_Bradley,
Armor.IFV_BMD_1,
Armor.ZBD_04A,
# WW2
Armor.AC_Sd_Kfz_234_2_Puma,
Armor.LAC_M8_Greyhound,
Armor.Daimler_Armoured_Car,
# Mods
frenchpack.ERC_90,
frenchpack.VBAE_CRAB,
frenchpack.VAB_T20_13
]
TYPE_APC = [
Armor.APC_M1043_HMMWV_Armament,
Armor.APC_M1126_Stryker_ICV,
Armor.APC_M113,
Armor.APC_BTR_80,
Armor.APC_BTR_82A,
Armor.APC_MTLB,
Armor.APC_M2A1,
Armor.APC_Cobra,
Armor.APC_Sd_Kfz_251,
Armor.APC_AAV_7,
Armor.TPz_Fuchs,
Armor.ARV_BRDM_2,
Armor.ARV_BTR_RD,
Armor.FDDM_Grad,
# WW2
Armor.APC_M2A1,
Armor.APC_Sd_Kfz_251,
# Mods
frenchpack.VAB__50,
frenchpack.VBL__50,
frenchpack.VBL_AANF1,
]
TYPE_ARTILLERY = [
Artillery.MLRS_9A52_Smerch,
Artillery.SPH_2S1_Gvozdika,
Artillery.SPH_2S3_Akatsia,
Artillery.MLRS_BM_21_Grad,
Artillery.MLRS_9K57_Uragan_BM_27,
Artillery.SPH_M109_Paladin,
Artillery.MLRS_M270,
Artillery.SPH_2S9_Nona,
Artillery.SpGH_Dana,
Artillery.SPH_2S19_Msta,
Artillery.MLRS_FDDM,
# WW2
Artillery.Sturmpanzer_IV_Brummbär,
Artillery.M12_GMC
]
TYPE_LOGI = [
Unarmed.Transport_M818,
Unarmed.Transport_KAMAZ_43101,
Unarmed.Transport_Ural_375,
Unarmed.Transport_GAZ_66,
Unarmed.Transport_GAZ_3307,
Unarmed.Transport_GAZ_3308,
Unarmed.Transport_Ural_4320_31_Armored,
Unarmed.Transport_Ural_4320T,
Unarmed.Blitz_3_6_6700A,
Unarmed.Kübelwagen_82,
Unarmed.Sd_Kfz_7,
Unarmed.Sd_Kfz_2,
Unarmed.Willys_MB,
Unarmed.Land_Rover_109_S3,
Unarmed.Land_Rover_101_FC,
# Mods
frenchpack.VBL,
frenchpack.VAB,
]
TYPE_INFANTRY = [
Infantry.Infantry_Soldier_Insurgents,
Infantry.Soldier_AK,
Infantry.Infantry_M1_Garand,
Infantry.Infantry_Mauser_98,
Infantry.Infantry_SMLE_No_4_Mk_1,
Infantry.Georgian_soldier_with_M4,
Infantry.Infantry_Soldier_Rus,
Infantry.Paratrooper_AKS,
Infantry.Paratrooper_RPG_16,
Infantry.Soldier_M249,
Infantry.Infantry_M4,
Infantry.Soldier_RPG,
]
MAX_COMBAT_GROUP_PER_CP = 10
class CombatGroupRole(Enum):
TANK = 1
APC = 2
@ -224,6 +58,7 @@ class CombatGroup:
s += "UNITS " + self.units[0].name + " * " + str(len(self.units))
return s
class GroundPlanner:
def __init__(self, cp:ControlPoint, game):
@ -243,7 +78,6 @@ class GroundPlanner:
self.units_per_cp[cp.id] = []
self.reserve: List[CombatGroup] = []
def plan_groundwar(self):
if hasattr(self.cp, 'stance'):
@ -275,6 +109,9 @@ class GroundPlanner:
elif key in TYPE_ATGM:
collection = self.atgm_group
role = CombatGroupRole.ATGM
elif key in TYPE_SHORAD:
collection = self.shorad_groups
role = CombatGroupRole.SHORAD
else:
print("Warning unit type not handled by ground generator")
print(key)
@ -282,12 +119,16 @@ class GroundPlanner:
available = self.cp.base.armor[key]
while available > 0:
n = random.choice(group_size_choice)
if n > available:
if available >= 2:
n = 2
else:
n = 1
if role == CombatGroupRole.SHORAD:
n = 1
else:
n = random.choice(group_size_choice)
if n > available:
if available >= 2:
n = 2
else:
n = 1
available -= n
group = CombatGroup(role)

View File

@ -0,0 +1,197 @@
from dcs.vehicles import AirDefence, Infantry, Unarmed, Artillery, Armor
from pydcs_extensions.frenchpack import frenchpack
TYPE_TANKS = [
Armor.MBT_T_55,
Armor.MBT_T_72B,
Armor.MBT_T_72B3,
Armor.MBT_T_80U,
Armor.MBT_T_90,
Armor.MBT_Leopard_2,
Armor.MBT_Leopard_1A3,
Armor.MBT_Leclerc,
Armor.MBT_Challenger_II,
Armor.MBT_M1A2_Abrams,
Armor.MBT_M60A3_Patton,
Armor.MBT_Merkava_Mk__4,
Armor.ZTZ_96B,
# WW2
Armor.MT_Pz_Kpfw_V_Panther_Ausf_G,
Armor.MT_Pz_Kpfw_IV_Ausf_H,
Armor.HT_Pz_Kpfw_VI_Tiger_I,
Armor.HT_Pz_Kpfw_VI_Ausf__B_Tiger_II,
Armor.MT_M4_Sherman,
Armor.MT_M4A4_Sherman_Firefly,
Armor.StuG_IV,
Armor.CT_Centaur_IV,
Armor.CT_Cromwell_IV,
Armor.HIT_Churchill_VII,
Armor.LT_Mk_VII_Tetrarch,
# Mods
frenchpack.DIM__TOYOTA_BLUE,
frenchpack.DIM__TOYOTA_GREEN,
frenchpack.DIM__TOYOTA_DESERT,
frenchpack.DIM__KAMIKAZE,
frenchpack.AMX_10RCR,
frenchpack.AMX_10RCR_SEPAR,
frenchpack.AMX_30B2,
frenchpack.Leclerc_Serie_XXI,
]
TYPE_ATGM = [
Armor.ATGM_M1045_HMMWV_TOW,
Armor.ATGM_M1134_Stryker,
Armor.IFV_BMP_2,
# WW2 (Tank Destroyers)
Armor.M30_Cargo_Carrier,
Armor.TD_Jagdpanzer_IV,
Armor.TD_Jagdpanther_G1,
Armor.TD_M10_GMC,
# Mods
frenchpack.VBAE_CRAB_MMP,
frenchpack.VAB_MEPHISTO,
frenchpack.TRM_2000_PAMELA,
]
TYPE_IFV = [
Armor.IFV_BMP_3,
Armor.IFV_BMP_2,
Armor.IFV_BMP_1,
Armor.IFV_Marder,
Armor.IFV_MCV_80,
Armor.IFV_LAV_25,
Armor.SPG_M1128_Stryker_MGS,
Armor.AC_Sd_Kfz_234_2_Puma,
Armor.IFV_M2A2_Bradley,
Armor.IFV_BMD_1,
Armor.ZBD_04A,
# WW2
Armor.AC_Sd_Kfz_234_2_Puma,
Armor.LAC_M8_Greyhound,
Armor.Daimler_Armoured_Car,
# Mods
frenchpack.ERC_90,
frenchpack.VBAE_CRAB,
frenchpack.VAB_T20_13
]
TYPE_APC = [
Armor.APC_M1043_HMMWV_Armament,
Armor.APC_M1126_Stryker_ICV,
Armor.APC_M113,
Armor.APC_BTR_80,
Armor.APC_BTR_82A,
Armor.APC_MTLB,
Armor.APC_M2A1,
Armor.APC_Cobra,
Armor.APC_Sd_Kfz_251,
Armor.APC_AAV_7,
Armor.TPz_Fuchs,
Armor.ARV_BRDM_2,
Armor.ARV_BTR_RD,
Armor.FDDM_Grad,
# WW2
Armor.APC_M2A1,
Armor.APC_Sd_Kfz_251,
# Mods
frenchpack.VAB__50,
frenchpack.VBL__50,
frenchpack.VBL_AANF1,
]
TYPE_ARTILLERY = [
Artillery.MLRS_9A52_Smerch,
Artillery.SPH_2S1_Gvozdika,
Artillery.SPH_2S3_Akatsia,
Artillery.MLRS_BM_21_Grad,
Artillery.MLRS_9K57_Uragan_BM_27,
Artillery.SPH_M109_Paladin,
Artillery.MLRS_M270,
Artillery.SPH_2S9_Nona,
Artillery.SpGH_Dana,
Artillery.SPH_2S19_Msta,
Artillery.MLRS_FDDM,
# WW2
Artillery.Sturmpanzer_IV_Brummbär,
Artillery.M12_GMC
]
TYPE_LOGI = [
Unarmed.Transport_M818,
Unarmed.Transport_KAMAZ_43101,
Unarmed.Transport_Ural_375,
Unarmed.Transport_GAZ_66,
Unarmed.Transport_GAZ_3307,
Unarmed.Transport_GAZ_3308,
Unarmed.Transport_Ural_4320_31_Armored,
Unarmed.Transport_Ural_4320T,
Unarmed.Blitz_3_6_6700A,
Unarmed.Kübelwagen_82,
Unarmed.Sd_Kfz_7,
Unarmed.Sd_Kfz_2,
Unarmed.Willys_MB,
Unarmed.Land_Rover_109_S3,
Unarmed.Land_Rover_101_FC,
# Mods
frenchpack.VBL,
frenchpack.VAB,
]
TYPE_INFANTRY = [
Infantry.Infantry_Soldier_Insurgents,
Infantry.Soldier_AK,
Infantry.Infantry_M1_Garand,
Infantry.Infantry_Mauser_98,
Infantry.Infantry_SMLE_No_4_Mk_1,
Infantry.Georgian_soldier_with_M4,
Infantry.Infantry_Soldier_Rus,
Infantry.Paratrooper_AKS,
Infantry.Paratrooper_RPG_16,
Infantry.Soldier_M249,
Infantry.Infantry_M4,
Infantry.Soldier_RPG,
]
TYPE_SHORAD = [
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.AAA_ZU_23_Insurgent_on_Ural_375,
AirDefence.AAA_ZSU_57_2,
AirDefence.SPAAA_ZSU_23_4_Shilka,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_9_Strela_1_9P31,
AirDefence.SAM_SA_13_Strela_10M3_9A35M3,
AirDefence.SAM_SA_15_Tor_9A331,
AirDefence.SAM_SA_19_Tunguska_2S6,
AirDefence.SPAAA_Gepard,
AirDefence.AAA_Vulcan_M163,
AirDefence.SAM_Linebacker_M6,
AirDefence.SAM_Chaparral_M48,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Roland_ADS,
AirDefence.HQ_7_Self_Propelled_LN,
AirDefence.AAA_8_8cm_Flak_18,
AirDefence.AAA_8_8cm_Flak_41,
AirDefence.AAA_Bofors_40mm,
AirDefence.AAA_M1_37mm,
AirDefence.AA_gun_QF_3_7,
]

View File

@ -47,7 +47,7 @@ class QMapObject(QGraphicsRectItem):
object_details_action.triggered.connect(self.on_click)
menu.addAction(object_details_action)
# Not all locations have valid objetives. Off-map spawns, for example,
# Not all locations have valid objectives. Off-map spawns, for example,
# have no mission types.
if list(self.mission_target.mission_types(for_player=True)):
new_package_action = QAction(f"New package")

View File

@ -46,7 +46,8 @@
"IFV_MCV_80",
"MBT_Challenger_II",
"MBT_M60A3_Patton",
"SPG_M1128_Stryker_MGS"
"SPG_M1128_Stryker_MGS",
"SAM_Avenger_M1097"
],
"artillery_units": [
"MLRS_M270",

View File

@ -25,7 +25,9 @@
"LAC_M8_Greyhound",
"TD_M10_GMC",
"Daimler_Armoured_Car",
"LT_Mk_VII_Tetrarch"
"LT_Mk_VII_Tetrarch",
"AA_gun_QF_3_7",
"AAA_Bofors_40mm"
],
"artillery_units": [
"M12_GMC"

View File

@ -15,7 +15,8 @@
],
"frontline_units": [
"MT_M4_Sherman",
"APC_M2A1"
"APC_M2A1",
"AAA_Bofors_40mm"
],
"artillery_units": [
],

View File

@ -25,7 +25,8 @@
],
"frontline_units": [
"MBT_M60A3_Patton",
"APC_M113"
"APC_M113",
"SAM_Chaparral_M48"
],
"artillery_units": [
"SPH_M109_Paladin"

View File

@ -26,7 +26,8 @@
],
"frontline_units": [
"MBT_M60A3_Patton",
"APC_M113"
"APC_M113",
"SAM_Chaparral_M48"
],
"artillery_units": [
"SPH_M109_Paladin"

View File

@ -27,7 +27,8 @@
],
"frontline_units": [
"MBT_M60A3_Patton",
"APC_M113"
"APC_M113",
"SAM_Chaparral_M48"
],
"artillery_units": [
"SPH_M109_Paladin"

View File

@ -43,7 +43,9 @@
"IFV_Marder",
"IFV_LAV_25",
"APC_M1043_HMMWV_Armament",
"ATGM_M1045_HMMWV_TOW"
"ATGM_M1045_HMMWV_TOW",
"SAM_Linebacker_M6",
"SAM_Avenger_M1097"
],
"artillery_units": [
"MLRS_M270",

View File

@ -20,7 +20,8 @@
"MBT_Leopard_2",
"IFV_LAV_25",
"APC_M113",
"IFV_MCV_80"
"IFV_MCV_80",
"SAM_Avenger_M1097"
],
"artillery_units": [
],

View File

@ -22,7 +22,8 @@
"ZTZ_96B",
"MBT_T_55",
"ZBD_04A",
"IFV_BMP_1"
"IFV_BMP_1",
"HQ_7_Self_Propelled_LN"
],
"artillery_units": [
"MLRS_9A52_Smerch",

View File

@ -24,7 +24,8 @@
"ATGM_M1134_Stryker",
"IFV_LAV_25",
"APC_M1043_HMMWV_Armament",
"ATGM_M1045_HMMWV_TOW"
"ATGM_M1045_HMMWV_TOW",
"SAM_Roland_ADS"
],
"artillery_units": [
"MLRS_M270",

View File

@ -31,7 +31,8 @@
"VBAE_CRAB",
"VBAE_CRAB_MMP",
"AMX_30B2",
"Leclerc_Serie_XXI"
"Leclerc_Serie_XXI",
"SAM_Roland_ADS"
],
"artillery_units": [
"MLRS_M270",

View File

@ -34,7 +34,8 @@
"VBAE_CRAB",
"VBAE_CRAB_MMP",
"AMX_30B2",
"Leclerc_Serie_XXI"
"Leclerc_Serie_XXI",
"SAM_Roland_ADS"
],
"artillery_units": [
"MLRS_M270",

View File

@ -17,7 +17,8 @@
"IFV_BMP_1",
"IFV_BMP_2",
"MBT_T_72B",
"MBT_T_55"
"MBT_T_55",
"SAM_SA_13_Strela_10M3_9A35M3"
],
"artillery_units": [
"MLRS_BM_21_Grad",

View File

@ -13,7 +13,8 @@
"MT_Pz_Kpfw_IV_Ausf_H",
"APC_Sd_Kfz_251",
"AC_Sd_Kfz_234_2_Puma",
"TD_Jagdpanzer_IV"
"TD_Jagdpanzer_IV",
"AAA_8_8cm_Flak_18"
],
"artillery_units": [
"Sturmpanzer_IV_Brummbär"

View File

@ -18,7 +18,9 @@
"AC_Sd_Kfz_234_2_Puma",
"Sd_Kfz_184_Elefant",
"TD_Jagdpanther_G1",
"TD_Jagdpanzer_IV"
"TD_Jagdpanzer_IV",
"AAA_8_8cm_Flak_18",
"AAA_8_8cm_Flak_41"
],
"artillery_units": [
"Sturmpanzer_IV_Brummbär"

View File

@ -10,7 +10,8 @@
],
"frontline_units": [
"MT_Pz_Kpfw_IV_Ausf_H",
"APC_Sd_Kfz_251"
"APC_Sd_Kfz_251",
"AAA_8_8cm_Flak_18"
],
"artillery_units": [
],

View File

@ -22,7 +22,8 @@
"TPz_Fuchs",
"MBT_Leopard_1A3",
"MBT_Leopard_2",
"IFV_Marder"
"IFV_Marder",
"SPAAA_Gepard"
],
"artillery_units": [
],

View File

@ -22,7 +22,8 @@
"frontline_units": [
"MBT_T_90",
"MBT_T_72B",
"IFV_BMP_2"
"IFV_BMP_2",
"SAM_SA_19_Tunguska_2S6"
],
"artillery_units": [
"MLRS_9K57_Uragan_BM_27",

View File

@ -0,0 +1,39 @@
{
"country": "Insurgents",
"name": "Insurgents",
"authors": "Khopa",
"description": "<p>Insurgents faction.</p>",
"aircrafts": [
],
"frontline_units": [
"ATGM_M1045_HMMWV_TOW",
"APC_M1043_HMMWV_Armament",
"ARV_BRDM_2",
"APC_BTR_80",
"ARV_BTR_RD",
"IFV_BMP_1",
"MBT_T_55",
"AAA_ZU_23_Insurgent_on_Ural_375",
"AAA_ZSU_57_2",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_BM_21_Grad",
"SPH_2S19_Msta"
],
"logistics_units": [
"Transport_Ural_375",
"Transport_UAZ_469"
],
"infantry_units": [
"Infantry_Soldier_Insurgents",
"Soldier_RPG",
"SAM_SA_18_Igla_MANPADS"
],
"air_defenses": [
"SA9Generator",
"ZSU57Generator",
"ZU23Generator",
"ZU23UralInsurgentGenerator"
]
}

View File

@ -27,7 +27,9 @@
"APC_BTR_80",
"MBT_M60A3_Patton",
"IFV_BMP_1",
"MBT_T_72B"
"MBT_T_72B",
"SPAAA_ZSU_23_4_Shilka",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_BM_21_Grad",

View File

@ -33,7 +33,8 @@
"APC_BTR_80",
"ARV_BRDM_2",
"SPH_2S1_Gvozdika",
"AAA_ZSU_57_2"
"AAA_ZSU_57_2",
"SPAAA_ZSU_23_4_Shilka"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -15,7 +15,8 @@
"MT_M4A4_Sherman_Firefly",
"APC_M2A1",
"MT_M4_Sherman",
"LAC_M8_Greyhound"
"LAC_M8_Greyhound",
"AAA_Bofors_40mm"
],
"artillery_units": [
],

View File

@ -19,7 +19,8 @@
"MT_M4_Sherman",
"APC_M2A1",
"MBT_M60A3_Patton",
"APC_M113"
"APC_M113",
"SAM_Chaparral_M48"
],
"artillery_units": [
],

View File

@ -22,7 +22,8 @@
"frontline_units": [
"APC_M113",
"MBT_M60A3_Patton",
"MBT_Merkava_Mk__4"
"MBT_Merkava_Mk__4",
"AAA_Vulcan_M163"
],
"artillery_units": [
],

View File

@ -23,7 +23,8 @@
"APC_M113",
"APC_M1043_HMMWV_Armament",
"ATGM_M1045_HMMWV_TOW",
"MBT_Merkava_Mk__4"
"MBT_Merkava_Mk__4",
"AAA_Vulcan_M163"
],
"artillery_units": [
"SPH_M109_Paladin",

View File

@ -18,7 +18,8 @@
],
"frontline_units": [
"MBT_Leopard_1A3",
"APC_M113"
"APC_M113",
"SAM_Avenger_M1097"
],
"artillery_units": [
"SPH_M109_Paladin"

View File

@ -19,7 +19,8 @@
],
"frontline_units": [
"MBT_Leopard_1A3",
"APC_M113"
"APC_M113",
"SAM_Avenger_M1097"
],
"artillery_units": [
"SPH_M109_Paladin"

View File

@ -23,7 +23,8 @@
"IFV_Marder",
"TPz_Fuchs",
"IFV_LAV_25",
"APC_M1043_HMMWV_Armament"
"APC_M1043_HMMWV_Armament",
"SPAAA_Gepard"
],
"artillery_units": [
"SPH_M109_Paladin",

View File

@ -20,7 +20,9 @@
"IFV_BMP_1",
"ARV_BRDM_2",
"MBT_T_72B",
"MBT_T_55"
"MBT_T_55",
"SPAAA_ZSU_23_4_Shilka",
"SAM_SA_8_Osa_9A33"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -17,7 +17,8 @@
],
"frontline_units": [
"APC_M113",
"MBT_Leopard_1A3"
"MBT_Leopard_1A3",
"SAM_Avenger_M1097"
],
"artillery_units": [
],

View File

@ -24,7 +24,9 @@
"IFV_BMP_1",
"MBT_T_55",
"MBT_T_72B",
"MBT_T_80U"
"MBT_T_80U",
"AAA_ZSU_57_2",
"SAM_SA_9_Strela_1_9P31"
],
"artillery_units": [
"MLRS_BM_21_Grad",

View File

@ -23,7 +23,8 @@
"MBT_T_55",
"ZBD_04A",
"APC_BTR_80",
"APC_M113"
"APC_M113",
"HQ_7_Self_Propelled_LN"
],
"artillery_units": [
"MLRS_9A52_Smerch",

View File

@ -13,7 +13,8 @@
"frontline_units": [
"APC_Cobra",
"APC_BTR_80",
"ARV_BRDM_2"
"ARV_BRDM_2",
"SAM_SA_13_Strela_10M3_9A35M3"
],
"artillery_units": [
"SPH_2S19_Msta"

View File

@ -11,7 +11,9 @@
],
"frontline_units": [
"APC_M1043_HMMWV_Armament",
"IFV_MCV_80"
"IFV_MCV_80",
"IFV_LAV_25",
"SAM_Avenger_M1097"
],
"artillery_units": [
],

View File

@ -12,7 +12,9 @@
],
"frontline_units": [
"APC_M1043_HMMWV_Armament",
"IFV_MCV_80"
"IFV_MCV_80",
"IFV_LAV_25",
"SAM_Avenger_M1097"
],
"artillery_units": [
],

View File

@ -17,7 +17,8 @@
"FDDM_Grad",
"APC_MTLB",
"MBT_T_55",
"AAA_ZU_23_on_Ural_375"
"AAA_ZU_23_on_Ural_375",
"AAA_8_8cm_Flak_18"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -21,7 +21,9 @@
"ARV_BTR_RD",
"IFV_BMD_1",
"IFV_BMP_1",
"MBT_T_55"
"MBT_T_55",
"AAA_ZU_23_on_Ural_375",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -14,7 +14,8 @@
"APC_BTR_80",
"IFV_BMD_1",
"IFV_BMP_1",
"MBT_T_55"
"MBT_T_55",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_BM_21_Grad",

View File

@ -25,7 +25,8 @@
"APC_BTR_80",
"IFV_BMD_1",
"IFV_BMP_1",
"MBT_T_55"
"MBT_T_55",
"SAM_SA_8_Osa_9A33"
],
"artillery_units": [
"MLRS_BM_21_Grad",

View File

@ -29,7 +29,8 @@
"IFV_BMP_1",
"IFV_BMP_2",
"MBT_T_72B",
"MBT_T_80U"
"MBT_T_80U",
"SAM_SA_13_Strela_10M3_9A35M3"
],
"artillery_units": [
"MLRS_9K57_Uragan_BM_27",

View File

@ -34,7 +34,8 @@
"APC_BTR_82A",
"MBT_T_90",
"MBT_T_80U",
"MBT_T_72B3"
"MBT_T_72B3",
"SAM_SA_19_Tunguska_2S6"
],
"artillery_units": [
"MLRS_9K57_Uragan_BM_27",

View File

@ -32,7 +32,8 @@
"IFV_BMP_3",
"MBT_T_90",
"MBT_T_80U",
"MBT_T_72B"
"MBT_T_72B",
"SAM_SA_19_Tunguska_2S6"
],
"artillery_units": [
"MLRS_9K57_Uragan_BM_27",

View File

@ -11,7 +11,8 @@
"MT_M4_Sherman",
"APC_M2A1",
"Daimler_Armoured_Car",
"LT_Mk_VII_Tetrarch"
"LT_Mk_VII_Tetrarch",
"AAA_Bofors_40mm"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -20,7 +20,8 @@
"frontline_units": [
"MBT_M60A3_Patton",
"MBT_Leopard_2",
"APC_M113"
"APC_M113",
"SAM_Avenger_M1097"
],
"artillery_units": [
],

View File

@ -18,7 +18,8 @@
"frontline_units": [
"IFV_MCV_80",
"MBT_Leopard_2",
"APC_M1126_Stryker_ICV"
"APC_M1126_Stryker_ICV",
"SAM_Chaparral_M48"
],
"artillery_units": [
],
@ -32,7 +33,6 @@
"air_defenses": [
"ChaparralGenerator",
"EarlyColdWarFlakGenerator",
"AvengerGenerator",
"HawkGenerator",
"VulcanGenerator"
],

View File

@ -17,7 +17,8 @@
"frontline_units": [
"IFV_MCV_80",
"MBT_Leopard_2",
"APC_M1126_Stryker_ICV"
"APC_M1126_Stryker_ICV",
"SAM_Avenger_M1097"
],
"artillery_units": [
],

View File

@ -11,7 +11,8 @@
"AC_Sd_Kfz_234_2_Puma",
"APC_Sd_Kfz_251",
"MT_Pz_Kpfw_IV_Ausf_H",
"MT_M4_Sherman"
"MT_M4_Sherman",
"AAA_Bofors_40mm"
],
"artillery_units": [
],

View File

@ -19,7 +19,9 @@
"frontline_units": [
"ARV_BRDM_2",
"MT_Pz_Kpfw_IV_Ausf_H",
"MBT_T_55"
"MBT_T_55",
"AAA_ZU_23_on_Ural_375",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -22,7 +22,8 @@
"MBT_T_55",
"MT_Pz_Kpfw_IV_Ausf_H",
"StuG_III_Ausf__G",
"TD_Jagdpanzer_IV"
"TD_Jagdpanzer_IV",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -19,7 +19,9 @@
"frontline_units": [
"IFV_BMP_1",
"APC_MTLB",
"MBT_T_55"
"MBT_T_55",
"AAA_ZU_23_on_Ural_375",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -21,7 +21,9 @@
"IFV_BMP_1",
"APC_MTLB",
"MBT_T_55",
"MBT_T_72B"
"MBT_T_72B",
"AAA_ZU_23_on_Ural_375",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_BM_21_Grad"

View File

@ -31,7 +31,8 @@
"APC_Cobra",
"MBT_T_55",
"MBT_T_72B",
"MBT_T_90"
"MBT_T_90",
"AAA_ZSU_57_2"
],
"artillery_units": [
"MLRS_9K57_Uragan_BM_27",

View File

@ -21,7 +21,8 @@
"MBT_Leopard_1A3",
"MBT_M60A3_Patton",
"APC_Cobra",
"APC_BTR_80"
"APC_BTR_80",
"SAM_Avenger_M1097"
],
"artillery_units": [
"SPH_M109_Paladin"

View File

@ -22,7 +22,8 @@
"CT_Centaur_IV",
"HIT_Churchill_VII",
"Daimler_Armoured_Car",
"LT_Mk_VII_Tetrarch"
"LT_Mk_VII_Tetrarch",
"AAA_Bofors_40mm"
],
"artillery_units": [
],

View File

@ -21,7 +21,8 @@
"MBT_Challenger_II",
"IFV_MCV_80",
"APC_M1043_HMMWV_Armament",
"ATGM_M1045_HMMWV_TOW"
"ATGM_M1045_HMMWV_TOW",
"SAM_Avenger_M1097"
],
"artillery_units": [
"MLRS_M270",

View File

@ -25,7 +25,8 @@
"IFV_BMP_2",
"APC_BTR_80",
"MBT_T_80U",
"MBT_T_72B"
"MBT_T_72B",
"SAM_SA_13_Strela_10M3_9A35M3"
],
"artillery_units": [
],

View File

@ -33,7 +33,8 @@
"ATGM_M1134_Stryker",
"IFV_M2A2_Bradley",
"IFV_LAV_25",
"APC_M1043_HMMWV_Armament"
"APC_M1043_HMMWV_Armament",
"SAM_Avenger_M1097"
],
"artillery_units": [
"MLRS_M270",

View File

@ -19,7 +19,8 @@
"APC_M2A1",
"M30_Cargo_Carrier",
"LAC_M8_Greyhound",
"TD_M10_GMC"
"TD_M10_GMC",
"AA_gun_QF_3_7"
],
"artillery_units": [
"M12_GMC"

View File

@ -12,7 +12,8 @@
"frontline_units": [
"MT_M4_Sherman",
"MBT_M60A3_Patton",
"APC_M2A1"
"APC_M2A1",
"AAA_Bofors_40mm"
],
"artillery_units": [
"M12_GMC"

View File

@ -12,7 +12,8 @@
],
"frontline_units": [
"MBT_M60A3_Patton",
"APC_M113"
"APC_M113",
"AAA_Vulcan_M163"
],
"artillery_units": [
],

View File

@ -11,7 +11,8 @@
],
"frontline_units": [
"MBT_M60A3_Patton",
"APC_M113"
"APC_M113",
"AAA_Vulcan_M163"
],
"artillery_units": [
"SPH_M109_Paladin"

View File

@ -12,7 +12,9 @@
],
"frontline_units": [
"MBT_M60A3_Patton",
"APC_M113"
"APC_M113",
"SAM_Chaparral_M48",
"AAA_Vulcan_M163"
],
"artillery_units": [
"SPH_M109_Paladin"

View File

@ -32,7 +32,8 @@
"IFV_M2A2_Bradley",
"IFV_LAV_25",
"APC_M1043_HMMWV_Armament",
"ATGM_M1045_HMMWV_TOW"
"ATGM_M1045_HMMWV_TOW",
"SAM_Avenger_M1097"
],
"artillery_units": [
"MLRS_M270",

View File

@ -32,7 +32,9 @@
"IFV_M2A2_Bradley",
"IFV_LAV_25",
"APC_M1043_HMMWV_Armament",
"ATGM_M1045_HMMWV_TOW"
"ATGM_M1045_HMMWV_TOW",
"SAM_Avenger_M1097",
"SAM_Linebacker_M6"
],
"artillery_units": [
"MLRS_M270",

View File

@ -33,7 +33,9 @@
"IFV_M2A2_Bradley",
"IFV_LAV_25",
"APC_M1043_HMMWV_Armament",
"ATGM_M1045_HMMWV_TOW"
"ATGM_M1045_HMMWV_TOW",
"SAM_Avenger_M1097",
"SAM_Linebacker_M6"
],
"artillery_units": [
"MLRS_M270",

View File

@ -33,7 +33,9 @@
"IFV_M2A2_Bradley",
"IFV_LAV_25",
"APC_M1043_HMMWV_Armament",
"ATGM_M1045_HMMWV_TOW"
"ATGM_M1045_HMMWV_TOW",
"SAM_Avenger_M1097",
"SAM_Linebacker_M6"
],
"artillery_units": [
"MLRS_M270",

View File

@ -20,7 +20,8 @@
"frontline_units": [
"MBT_M60A3_Patton",
"APC_M113",
"APC_M1025_HMMWV"
"APC_M1025_HMMWV",
"AAA_Vulcan_M163"
],
"artillery_units": [
"SPH_M109_Paladin",