diff --git a/game/db.py b/game/db.py index f584c3ac..0c8a01d1 100644 --- a/game/db.py +++ b/game/db.py @@ -151,8 +151,10 @@ PRICES = { AirDefence.SAM_SA_19_Tunguska_2S6: 15, AirDefence.SAM_SA_6_Kub_LN_2P25: 22, AirDefence.SAM_SA_8_Osa_9A33: 12, - AirDefence.SAM_SA_3_S_125_LN_5P73: 35, + AirDefence.SAM_SA_3_S_125_LN_5P73: 20, + AirDefence.SAM_SA_2_LN_SM_90: 15, AirDefence.SAM_SA_11_Buk_LN_9A310M1: 25, + AirDefence.SAM_Hawk_PCP: 20, # ship CV_1143_5_Admiral_Kuznetsov: 100, @@ -299,14 +301,16 @@ UNIT_BY_TASK = { 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.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_SA_11_Buk_LN_9A310M1, + 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, ], @@ -327,6 +331,8 @@ SAM_BAN = [ AirDefence.SAM_SA_6_Kub_LN_2P25, AirDefence.SAM_SA_8_Osa_9A33, 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, ] @@ -344,11 +350,15 @@ SAM_CONVERT = { AirDefence.SAM_SA_10_S_300PS_TR_30N6: AirDefence.SAM_SA_10_S_300PS_LN_5P85C, AirDefence.SAM_SA_10_S_300PS_CP_54K6: AirDefence.SAM_SA_10_S_300PS_LN_5P85C, AirDefence.SAM_SA_10_S_300PS_SR_64H6E: AirDefence.SAM_SA_10_S_300PS_CP_54K6, + AirDefence.SAM_Hawk_TR_AN_MPQ_46: AirDefence.SAM_Hawk_PCP, + AirDefence.SAM_Hawk_SR_AN_MPQ_50: AirDefence.SAM_Hawk_PCP, + AirDefence.SAM_Hawk_LN_M192: AirDefence.SAM_Hawk_PCP, 'except': { # this radar is shared between the two S300's. if we attempt to find a SAM site at a base and can't find one # model, we can safely assume the other was deployed # well, perhaps not safely, but we'll make the assumption anyway :p AirDefence.SAM_SA_10_S_300PS_TR_30N6: AirDefence.SAM_SA_10_S_300PS_CP_54K6, + AirDefence.SAM_SR_P_19: AirDefence.SAM_SA_2_LN_SM_90 } } @@ -609,6 +619,54 @@ FACTIONS = { ] }, + "Iran 2015": { + "country": "Russia", + "side": "red", + "units": [ + + MiG_29A, + F_4E, + F_14B, + F_5E_3, + + MiG_21Bis, + Su_24M, + Su_25, + Su_17M4, + + IL_76MD, + IL_78M, + An_26B, + An_30M, + Yak_40, + + A_50, + + Mi_28N, + Mi_24V, + + AirDefence.AAA_ZU_23_Closed, + AirDefence.AAA_ZU_23_Insurgent_on_Ural_375, + AirDefence.SPAAA_ZSU_23_4_Shilka, + AirDefence.SAM_Hawk_PCP, + AirDefence.SAM_SA_2_LN_SM_90, + + Armor.APC_M113, + Armor.APC_BTR_80, + Armor.MBT_M60A3_Patton, + Armor.MBT_T_72B, + + Unarmed.Transport_Ural_375, + Unarmed.Transport_UAZ_469, + Infantry.Soldier_AK, + + CV_1143_5_Admiral_Kuznetsov, + Bulk_cargo_ship_Yakushev, + Dry_cargo_ship_Ivanov, + Tanker_Elnya_160 + ] + }, + "USA 1955": { "country": "USA", "side": "blue", @@ -959,6 +1017,7 @@ def unit_task(unit: UnitType) -> Task: if unit in SAM_CONVERT: return unit_task(SAM_CONVERT[unit]) + print(unit.name + " cause issue") assert False diff --git a/gen/aaa.py b/gen/aaa.py index 67d9633c..f3fdbdc1 100644 --- a/gen/aaa.py +++ b/gen/aaa.py @@ -33,6 +33,12 @@ def num_sam_dead(sam_type, destroyed_count): AirDefence.SAM_SA_3_S_125_LN_5P73: 4, AirDefence.SAM_SA_6_Kub_LN_2P25: 6, AirDefence.SAM_SA_10_S_300PS_LN_5P85C: 8, + AirDefence.SAM_SA_2_LN_SM_90:4, + AirDefence.SAM_SA_2_TR_SNR_75_Fan_Song: 1, + AirDefence.SAM_Hawk_PCP: 1, + AirDefence.SAM_Hawk_LN_M192: 4, + AirDefence.SAM_Hawk_SR_AN_MPQ_50: 1, + AirDefence.SAM_Hawk_TR_AN_MPQ_46: 1 } return int(destroyed_count / sam_threshold[sam_type]) @@ -192,6 +198,7 @@ def aaa_vehicle_group(self, country, name, _type: unittype.VehicleType, position v.position.y = center_y v.heading = heading vg.add_unit(v) + # command center v = self.vehicle( name + " Unit #{nr}-c".format(nr=i), @@ -251,6 +258,7 @@ def aaa_vehicle_group(self, country, name, _type: unittype.VehicleType, position v.position.y = center_y v.heading = heading vg.add_unit(v) + # command center v = self.vehicle( name + " Unit #{nr}-c".format(nr=i), @@ -278,6 +286,107 @@ def aaa_vehicle_group(self, country, name, _type: unittype.VehicleType, position AirDefence.SAM_SA_10_S_300PS_LN_5P85D, ) + v.position.x = plop_positions[x][0] + v.position.y = plop_positions[x][1] + v.heading = plop_positions[x][2] + vg.add_unit(v) + elif _type == AirDefence.SAM_Hawk_PCP: + # 4 launchers (180 degrees all facing the same direction), 1 SR, 1 TR, 1 PCP + num_launchers = 4 + + # search radar + v = self.vehicle( + name + " Unit #{nr}-sr".format(nr=i), + AirDefence.SAM_Hawk_SR_AN_MPQ_50, + ) + v.position.x = position.x + v.position.y = position.y + (i - 1) * 20 + v.heading = heading + vg.add_unit(v) + + + # track radar + v = self.vehicle( + name + " Unit #{nr}-tr".format(nr=i), + AirDefence.SAM_Hawk_TR_AN_MPQ_46, + ) + center_x = position.x + randint(20, 40) + center_y = position.y + (i - 1) * 20 + v.position.x = center_x + v.position.y = center_y + v.heading = heading + vg.add_unit(v) + + # PCP + v = self.vehicle( + name + " Unit #{nr}-pcp".format(nr=i), + AirDefence.SAM_Hawk_PCP, + ) + + center_x = position.x + randint(60, 80) + center_y = position.y + 20 + v.position.x = center_x + v.position.y = center_y + v.heading = heading + vg.add_unit(v) + + plop_positions = determine_positions( + position, + heading, + num_launchers, + launcher_distance=100, + coverage=180, + ) + for x in range(0, num_launchers): + v = self.vehicle( + name + " Unit #{nr}-{x}".format(nr=i, x=x), + AirDefence.SAM_Hawk_LN_M192, + ) + + v.position.x = plop_positions[x][0] + v.position.y = plop_positions[x][1] + v.heading = plop_positions[x][2] + vg.add_unit(v) + elif _type == AirDefence.SAM_SA_2_LN_SM_90: + # 4 launchers (180 degrees all facing the same direction), 1 SR, 1 TR + num_launchers = 4 + + # search radar + v = self.vehicle( + name + " Unit #{nr}-sr".format(nr=i), + AirDefence.SAM_SR_P_19, + ) + v.position.x = position.x + v.position.y = position.y + (i - 1) * 20 + v.heading = heading + vg.add_unit(v) + + + # track radar + v = self.vehicle( + name + " Unit #{nr}-tr".format(nr=i), + AirDefence.SAM_SA_2_TR_SNR_75_Fan_Song, + ) + center_x = position.x + randint(20, 40) + center_y = position.y + (i - 1) * 20 + v.position.x = center_x + v.position.y = center_y + v.heading = heading + vg.add_unit(v) + + plop_positions = determine_positions( + position, + heading, + num_launchers, + launcher_distance=100, + coverage=180, + ) + for x in range(0, num_launchers): + v = self.vehicle( + name + " Unit #{nr}-{x}".format(nr=i, x=x), + AirDefence.SAM_SA_2_LN_SM_90, + ) + v.position.x = plop_positions[x][0] v.position.y = plop_positions[x][1] v.heading = plop_positions[x][2] diff --git a/theater/base.py b/theater/base.py index 65e8b473..0c01b7d4 100644 --- a/theater/base.py +++ b/theater/base.py @@ -168,12 +168,13 @@ class Base: except KeyError: modified_sam_site = db.SAM_CONVERT[sam_site]['except'] - self.aa[modified_sam_site] = max( - self.aa[modified_sam_site] - dead_count, - 0 - ) - if self.aa[modified_sam_site] == 0: - del self.aa[modified_sam_site] + if modified_sam_site in self.aa: + self.aa[modified_sam_site] = max( + self.aa[modified_sam_site] - dead_count, + 0 + ) + if self.aa[modified_sam_site] == 0: + del self.aa[modified_sam_site] def affect_strength(self, amount): self.strength += amount