Remove the randomness from SAM group size.

This commit is contained in:
Florian 2021-06-24 00:42:13 +02:00 committed by Dan Albert
parent 4e6659e7e8
commit 3f65928e9d
30 changed files with 164 additions and 165 deletions

View File

@ -12,8 +12,9 @@ Saves from 4.0.0 are compatible with 4.1.0.
## Features/Improvements ## Features/Improvements
* **[Plugins]** Increased time JTAC Autolase messages stay visible on the UI. * **[Campaign]** Air defense sites now generate a fixed number of launchers per type.
* **[Mission Generation]** Improvements for better support of the Skynet Plugin and long range SAMs are now acting as EWR * **[Mission Generation]** Improvements for better support of the Skynet Plugin and long range SAMs are now acting as EWR
* **[Plugins]** Increased time JTAC Autolase messages stay visible on the UI.
* **[UI]** Added ability to take notes and have those notes appear as a kneeboard page. * **[UI]** Added ability to take notes and have those notes appear as a kneeboard page.
* **[UI]** Hovering over the weather information now dispalys the cloud base (meters and feet). * **[UI]** Hovering over the weather information now dispalys the cloud base (meters and feet).
* **[UI]** Google search link added to unit information when there is no information provided. * **[UI]** Google search link added to unit information when there is no information provided.

View File

@ -17,20 +17,17 @@ class BoforsGenerator(AirDefenseGroupGenerator):
price = 75 price = 75
def generate(self): def generate(self):
grid_x = random.randint(2, 3)
grid_y = random.randint(2, 3)
spacing = random.randint(10, 40)
index = 0 index = 0
for i in range(grid_x): for i in range(4):
for j in range(grid_y): spacing_x = random.randint(10, 40)
spacing_y = random.randint(10, 40)
index = index + 1 index = index + 1
self.add_unit( self.add_unit(
AirDefence.Bofors40, AirDefence.Bofors40,
"AAA#" + str(index), "AAA#" + str(index),
self.position.x + spacing * i, self.position.x + spacing_x * i,
self.position.y + spacing * j, self.position.y + spacing_y * i,
self.heading, self.heading,
) )

View File

@ -26,23 +26,19 @@ class FlakGenerator(AirDefenseGroupGenerator):
price = 135 price = 135
def generate(self): def generate(self):
grid_x = random.randint(2, 3)
grid_y = random.randint(2, 3)
spacing = random.randint(20, 35)
index = 0 index = 0
mixed = random.choice([True, False]) mixed = random.choice([True, False])
unit_type = random.choice(GFLAK) unit_type = random.choice(GFLAK)
for i in range(grid_x): for i in range(4):
for j in range(grid_y):
index = index + 1 index = index + 1
spacing_x = random.randint(10, 40)
spacing_y = random.randint(10, 40)
self.add_unit( self.add_unit(
unit_type, unit_type,
"AAA#" + str(index), "AAA#" + str(index),
self.position.x + spacing * i + random.randint(1, 5), self.position.x + spacing_x * i + random.randint(1, 5),
self.position.y + spacing * j + random.randint(1, 5), self.position.y + spacing_y * i + random.randint(1, 5),
self.heading, self.heading,
) )
@ -86,8 +82,8 @@ class FlakGenerator(AirDefenseGroupGenerator):
) )
# Some Opel Blitz trucks # Some Opel Blitz trucks
for i in range(int(max(1, grid_x / 2))): for i in range(int(max(1, 2))):
for j in range(int(max(1, grid_x / 2))): for j in range(int(max(1, 2))):
self.add_unit( self.add_unit(
Unarmed.Blitz_36_6700A, Unarmed.Blitz_36_6700A,
"BLITZ#" + str(index), "BLITZ#" + str(index),

View File

@ -16,9 +16,6 @@ class KS19Generator(AirDefenseGroupGenerator):
price = 98 price = 98
def generate(self): def generate(self):
spacing = random.randint(10, 40)
self.add_unit( self.add_unit(
highdigitsams.AAA_SON_9_Fire_Can, highdigitsams.AAA_SON_9_Fire_Can,
"TR", "TR",
@ -28,14 +25,15 @@ class KS19Generator(AirDefenseGroupGenerator):
) )
index = 0 index = 0
for i in range(3): for i in range(4):
for j in range(3): spacing_x = random.randint(10, 40)
spacing_y = random.randint(10, 40)
index = index + 1 index = index + 1
self.add_unit( self.add_unit(
highdigitsams.AAA_100mm_KS_19, highdigitsams.AAA_100mm_KS_19,
"AAA#" + str(index), "AAA#" + str(index),
self.position.x + spacing * i, self.position.x + spacing_x * i,
self.position.y + spacing * j, self.position.y + spacing_y * i,
self.heading, self.heading,
) )

View File

@ -15,7 +15,7 @@ class ZSU57Generator(AirDefenseGroupGenerator):
price = 60 price = 60
def generate(self): def generate(self):
num_launchers = 5 num_launchers = 4
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=110, coverage=360 num_launchers, launcher_distance=110, coverage=360
) )

View File

@ -17,20 +17,16 @@ class ZU23InsurgentGenerator(AirDefenseGroupGenerator):
price = 56 price = 56
def generate(self): def generate(self):
grid_x = random.randint(2, 3)
grid_y = random.randint(2, 3)
spacing = random.randint(10, 40)
index = 0 index = 0
for i in range(grid_x): for i in range(4):
for j in range(grid_y):
index = index + 1 index = index + 1
spacing_x = random.randint(10, 40)
spacing_y = random.randint(10, 40)
self.add_unit( self.add_unit(
AirDefence.ZU_23_Closed_Insurgent, AirDefence.ZU_23_Closed_Insurgent,
"AAA#" + str(index), "AAA#" + str(index),
self.position.x + spacing * i, self.position.x + spacing_x * i,
self.position.y + spacing * j, self.position.y + spacing_y * i,
self.heading, self.heading,
) )

View File

@ -17,7 +17,7 @@ class AvengerGenerator(AirDefenseGroupGenerator):
price = 62 price = 62
def generate(self): def generate(self):
num_launchers = random.randint(2, 3) num_launchers = 2
self.add_unit( self.add_unit(
Unarmed.M_818, Unarmed.M_818,

View File

@ -17,7 +17,7 @@ class ChaparralGenerator(AirDefenseGroupGenerator):
price = 66 price = 66
def generate(self): def generate(self):
num_launchers = random.randint(2, 4) num_launchers = 2
self.add_unit( self.add_unit(
Unarmed.M_818, Unarmed.M_818,

View File

@ -17,20 +17,18 @@ class GepardGenerator(AirDefenseGroupGenerator):
price = 50 price = 50
def generate(self): def generate(self):
self.add_unit( num_launchers = 2
AirDefence.Gepard,
"SPAAA", positions = self.get_circular_position(
self.position.x, num_launchers, launcher_distance=120, coverage=180
self.position.y,
self.heading,
) )
if random.randint(0, 1) == 1: for i, position in enumerate(positions):
self.add_unit( self.add_unit(
AirDefence.Gepard, AirDefence.Gepard,
"SPAAA2", "SPAA#" + str(i),
self.position.x, position[0],
self.position.y, position[1],
self.heading, position[2],
) )
self.add_unit( self.add_unit(
Unarmed.M_818, Unarmed.M_818,

View File

@ -51,7 +51,7 @@ class HawkGenerator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(3, 6) num_launchers = 6
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=180 num_launchers, launcher_distance=120, coverage=180
) )

View File

@ -26,13 +26,6 @@ class HQ7Generator(AirDefenseGroupGenerator):
self.position.y, self.position.y,
self.heading, self.heading,
) )
self.add_unit(
AirDefence.HQ_7_LN_SP,
"LN",
self.position.x + 20,
self.position.y,
self.heading,
)
# Triple A for close range defense # Triple A for close range defense
aa_group = self.add_auxiliary_group(SkynetRole.NoSkynetBehavior) aa_group = self.add_auxiliary_group(SkynetRole.NoSkynetBehavior)
@ -51,7 +44,7 @@ class HQ7Generator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(0, 3) num_launchers = 2
if num_launchers > 0: if num_launchers > 0:
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=360 num_launchers, launcher_distance=120, coverage=360

View File

@ -17,7 +17,7 @@ class LinebackerGenerator(AirDefenseGroupGenerator):
price = 75 price = 75
def generate(self): def generate(self):
num_launchers = random.randint(2, 4) num_launchers = 2
self.add_unit( self.add_unit(
Unarmed.M_818, Unarmed.M_818,

View File

@ -1,5 +1,3 @@
import random
from dcs.mapping import Point from dcs.mapping import Point
from dcs.vehicles import AirDefence from dcs.vehicles import AirDefence
@ -56,10 +54,7 @@ class PatriotGenerator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(3, 4) positions = self.get_circular_position(8, launcher_distance=120, coverage=360)
positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=360
)
for i, position in enumerate(positions): for i, position in enumerate(positions):
self.add_unit( self.add_unit(
AirDefence.Patriot_ln, AirDefence.Patriot_ln,
@ -71,10 +66,7 @@ class PatriotGenerator(AirDefenseGroupGenerator):
# Short range protection for high value site # Short range protection for high value site
aa_group = self.add_auxiliary_group(SkynetRole.NoSkynetBehavior) aa_group = self.add_auxiliary_group(SkynetRole.NoSkynetBehavior)
num_launchers = random.randint(3, 4) positions = self.get_circular_position(2, launcher_distance=200, coverage=360)
positions = self.get_circular_position(
num_launchers, launcher_distance=200, coverage=360
)
for i, (x, y, heading) in enumerate(positions): for i, (x, y, heading) in enumerate(positions):
self.add_unit_to_group( self.add_unit_to_group(
aa_group, aa_group,
@ -83,6 +75,15 @@ class PatriotGenerator(AirDefenseGroupGenerator):
Point(x, y), Point(x, y),
heading, heading,
) )
positions = self.get_circular_position(2, launcher_distance=300, coverage=360)
for i, (x, y, heading) in enumerate(positions):
self.add_unit_to_group(
aa_group,
AirDefence.M1097_Avenger,
f"Avenger#{i}",
Point(x, y),
heading,
)
@classmethod @classmethod
def range(cls) -> AirDefenseRange: def range(cls) -> AirDefenseRange:

View File

@ -33,7 +33,7 @@ class RapierGenerator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(3, 6) num_launchers = 2
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=80, coverage=240 num_launchers, launcher_distance=80, coverage=240
) )

View File

@ -16,6 +16,7 @@ class RolandGenerator(AirDefenseGroupGenerator):
price = 40 price = 40
def generate(self): def generate(self):
num_launchers = 2
self.add_unit( self.add_unit(
AirDefence.Roland_Radar, AirDefence.Roland_Radar,
"EWR", "EWR",
@ -23,12 +24,17 @@ class RolandGenerator(AirDefenseGroupGenerator):
self.position.y, self.position.y,
self.heading, self.heading,
) )
positions = self.get_circular_position(
num_launchers, launcher_distance=80, coverage=240
)
for i, position in enumerate(positions):
self.add_unit( self.add_unit(
AirDefence.Roland_ADS, AirDefence.Roland_ADS,
"ADS", "ADS#" + str(i),
self.position.x, position[0],
self.position.y, position[1],
self.heading, position[2],
) )
self.add_unit( self.add_unit(
Unarmed.M_818, Unarmed.M_818,

View File

@ -1,5 +1,3 @@
import random
from dcs.mapping import Point from dcs.mapping import Point
from dcs.vehicles import AirDefence from dcs.vehicles import AirDefence
@ -45,17 +43,13 @@ class SA10Generator(AirDefenseGroupGenerator):
# Command Post # Command Post
self.add_unit(self.cp, "CP", self.position.x, self.position.y, self.heading) self.add_unit(self.cp, "CP", self.position.x, self.position.y, self.heading)
# 2 Tracking radars # 1 Tracking radar
self.add_unit( self.add_unit(
self.tr1, "TR1", self.position.x - 40, self.position.y - 40, self.heading self.tr1, "TR1", self.position.x - 40, self.position.y - 40, self.heading
) )
self.add_unit(
self.tr2, "TR2", self.position.x + 40, self.position.y - 40, self.heading
)
# 2 different launcher type (C & D) # 2 different launcher type (C & D)
num_launchers = random.randint(6, 8) num_launchers = 6
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=100, coverage=360 num_launchers, launcher_distance=100, coverage=360
) )
@ -78,7 +72,7 @@ class SA10Generator(AirDefenseGroupGenerator):
def generate_defensive_groups(self) -> None: def generate_defensive_groups(self) -> None:
# AAA for defending against close targets. # AAA for defending against close targets.
aa_group = self.add_auxiliary_group(SkynetRole.NoSkynetBehavior) aa_group = self.add_auxiliary_group(SkynetRole.NoSkynetBehavior)
num_launchers = random.randint(6, 8) num_launchers = 2
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=210, coverage=360 num_launchers, launcher_distance=210, coverage=360
) )
@ -103,7 +97,7 @@ class Tier2SA10Generator(SA10Generator):
# SA-15 for both shorter range targets and point defense. # SA-15 for both shorter range targets and point defense.
pd_group = self.add_auxiliary_group(SkynetRole.PointDefense) pd_group = self.add_auxiliary_group(SkynetRole.PointDefense)
num_launchers = random.randint(2, 4) num_launchers = 2
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=140, coverage=360 num_launchers, launcher_distance=140, coverage=360
) )
@ -125,7 +119,7 @@ class Tier3SA10Generator(SA10Generator):
def generate_defensive_groups(self) -> None: def generate_defensive_groups(self) -> None:
# AAA for defending against close targets. # AAA for defending against close targets.
aa_group = self.add_auxiliary_group(SkynetRole.NoSkynetBehavior) aa_group = self.add_auxiliary_group(SkynetRole.NoSkynetBehavior)
num_launchers = random.randint(6, 8) num_launchers = 2
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=210, coverage=360 num_launchers, launcher_distance=210, coverage=360
) )
@ -140,7 +134,7 @@ class Tier3SA10Generator(SA10Generator):
# SA-15 for both shorter range targets and point defense. # SA-15 for both shorter range targets and point defense.
pd_group = self.add_auxiliary_group(SkynetRole.PointDefense) pd_group = self.add_auxiliary_group(SkynetRole.PointDefense)
num_launchers = random.randint(2, 4) num_launchers = 2
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=140, coverage=360 num_launchers, launcher_distance=140, coverage=360
) )

View File

@ -32,7 +32,7 @@ class SA11Generator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(2, 4) num_launchers = 4
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=140, coverage=180 num_launchers, launcher_distance=140, coverage=180
) )

View File

@ -32,7 +32,7 @@ class SA13Generator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(2, 3) num_launchers = 2
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=360 num_launchers, launcher_distance=120, coverage=360
) )

View File

@ -15,12 +15,17 @@ class SA15Generator(AirDefenseGroupGenerator):
price = 55 price = 55
def generate(self): def generate(self):
num_launchers = 2
positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=360
)
for i, position in enumerate(positions):
self.add_unit( self.add_unit(
AirDefence.Tor_9A331, AirDefence.Tor_9A331,
"ADS", "ADS#" + str(i),
self.position.x, position[0],
self.position.y, position[1],
self.heading, position[2],
) )
self.add_unit( self.add_unit(
Unarmed.UAZ_469, Unarmed.UAZ_469,

View File

@ -17,7 +17,7 @@ class SA19Generator(AirDefenseGroupGenerator):
price = 90 price = 90
def generate(self): def generate(self):
num_launchers = random.randint(1, 3) num_launchers = 2
if num_launchers == 1: if num_launchers == 1:
self.add_unit( self.add_unit(

View File

@ -32,7 +32,7 @@ class SA2Generator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(3, 6) num_launchers = 6
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=180 num_launchers, launcher_distance=120, coverage=180
) )

View File

@ -32,7 +32,7 @@ class SA3Generator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(3, 6) num_launchers = 4
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=180 num_launchers, launcher_distance=120, coverage=180
) )

View File

@ -25,7 +25,7 @@ class SA6Generator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(2, 4) num_launchers = 4
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=360 num_launchers, launcher_distance=120, coverage=360
) )

View File

@ -15,12 +15,18 @@ class SA8Generator(AirDefenseGroupGenerator):
price = 55 price = 55
def generate(self): def generate(self):
num_launchers = 2
positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=180
)
for i, position in enumerate(positions):
self.add_unit( self.add_unit(
AirDefence.Osa_9A33_ln, AirDefence.Osa_9A33_ln,
"OSA", "OSA" + str(i),
self.position.x, position[0],
self.position.y, position[1],
self.heading, position[2],
) )
self.add_unit( self.add_unit(
AirDefence.SA_8_Osa_LD_9T217, AirDefence.SA_8_Osa_LD_9T217,

View File

@ -32,7 +32,7 @@ class SA9Generator(AirDefenseGroupGenerator):
self.heading, self.heading,
) )
num_launchers = random.randint(2, 3) num_launchers = 2
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=360 num_launchers, launcher_distance=120, coverage=360
) )

View File

@ -17,20 +17,18 @@ class VulcanGenerator(AirDefenseGroupGenerator):
price = 25 price = 25
def generate(self): def generate(self):
self.add_unit( num_launchers = 2
AirDefence.Vulcan,
"SPAAA", positions = self.get_circular_position(
self.position.x, num_launchers, launcher_distance=120, coverage=180
self.position.y,
self.heading,
) )
if random.randint(0, 1) == 1: for i, position in enumerate(positions):
self.add_unit( self.add_unit(
AirDefence.Vulcan, AirDefence.Vulcan,
"SPAAA2", "SPAA#" + str(i),
self.position.x, position[0],
self.position.y, position[1],
self.heading, position[2],
) )
self.add_unit( self.add_unit(
Unarmed.M_818, Unarmed.M_818,

View File

@ -1,6 +1,6 @@
import random import random
from dcs.vehicles import AirDefence from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import ( from gen.sam.airdefensegroupgenerator import (
AirDefenseRange, AirDefenseRange,
@ -17,7 +17,7 @@ class ZSU23Generator(AirDefenseGroupGenerator):
price = 50 price = 50
def generate(self): def generate(self):
num_launchers = random.randint(4, 5) num_launchers = 4
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=120, coverage=180 num_launchers, launcher_distance=120, coverage=180
@ -30,6 +30,13 @@ class ZSU23Generator(AirDefenseGroupGenerator):
position[1], position[1],
position[2], position[2],
) )
self.add_unit(
Unarmed.M_818,
"TRUCK",
self.position.x + 80,
self.position.y,
self.heading,
)
@classmethod @classmethod
def range(cls) -> AirDefenseRange: def range(cls) -> AirDefenseRange:

View File

@ -1,6 +1,6 @@
import random import random
from dcs.vehicles import AirDefence from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import ( from gen.sam.airdefensegroupgenerator import (
AirDefenseRange, AirDefenseRange,
@ -17,20 +17,23 @@ class ZU23Generator(AirDefenseGroupGenerator):
price = 54 price = 54
def generate(self): def generate(self):
grid_x = random.randint(2, 3)
grid_y = random.randint(2, 3)
spacing = random.randint(10, 40)
index = 0 index = 0
for i in range(grid_x): for i in range(4):
for j in range(grid_y):
index = index + 1 index = index + 1
spacing_x = random.randint(10, 40)
spacing_y = random.randint(10, 40)
self.add_unit( self.add_unit(
AirDefence.ZU_23_Emplacement_Closed, AirDefence.ZU_23_Emplacement_Closed,
"AAA#" + str(index), "AAA#" + str(index),
self.position.x + spacing * i, self.position.x + spacing_x * i,
self.position.y + spacing * j, self.position.y + spacing_y * i,
self.heading,
)
self.add_unit(
Unarmed.M_818,
"TRUCK",
self.position.x + 80,
self.position.y,
self.heading, self.heading,
) )

View File

@ -17,7 +17,7 @@ class ZU23UralGenerator(AirDefenseGroupGenerator):
price = 64 price = 64
def generate(self): def generate(self):
num_launchers = random.randint(2, 8) num_launchers = 4
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=80, coverage=360 num_launchers, launcher_distance=80, coverage=360

View File

@ -17,7 +17,7 @@ class ZU23UralInsurgentGenerator(AirDefenseGroupGenerator):
price = 64 price = 64
def generate(self): def generate(self):
num_launchers = random.randint(2, 8) num_launchers = 4
positions = self.get_circular_position( positions = self.get_circular_position(
num_launchers, launcher_distance=80, coverage=360 num_launchers, launcher_distance=80, coverage=360