take off silencing WIP; fixes for blufor; fixed SAMs commision on samless campaigns

This commit is contained in:
Vasyl Horbachenko
2018-06-26 03:31:29 +03:00
parent 0b2e76e12b
commit c329c806df
11 changed files with 84 additions and 28 deletions

View File

@@ -57,7 +57,7 @@ class AircraftConflictGenerator:
count -= group_size
client_count -= client_size
def _setup_group(self, group: FlyingGroup, for_task: Task, clients: db.PlaneDict):
def _setup_group(self, group: FlyingGroup, for_task: Task, at: db.StartingPosition, client_count: int):
did_load_loadout = False
unit_type = group.units[0].unit_type
if unit_type in db.PLANE_PAYLOAD_OVERRIDES:
@@ -66,6 +66,9 @@ class AircraftConflictGenerator:
if for_task in db.PLANE_PAYLOAD_OVERRIDES[unit_type]:
group.load_loadout(db.PLANE_PAYLOAD_OVERRIDES[unit_type][for_task])
did_load_loadout = True
elif "_carrier" in db.PLANE_PAYLOAD_OVERRIDES[unit_type] and isinstance(at, ShipGroup):
group.load_loadout(db.PLANE_PAYLOAD_OVERRIDES[unit_type]["_carrier"])
did_load_loadout = True
elif "*" in db.PLANE_PAYLOAD_OVERRIDES[unit_type]:
group.load_loadout(db.PLANE_PAYLOAD_OVERRIDES[unit_type]["*"])
did_load_loadout = True
@@ -80,9 +83,8 @@ class AircraftConflictGenerator:
for unit_instance in group.units:
unit_instance.livery_id = db.PLANE_LIVERY_OVERRIDES[unit_type]
single_client = sum(clients.values()) == 1
client_count = clients.get(unit_type, 0)
for idx in range(min(client_count, len(group.units))):
single_client = client_count == 1
for idx in range(0, min(len(group.units), client_count)):
if single_client:
group.units[idx].set_player()
else:
@@ -135,7 +137,11 @@ class AircraftConflictGenerator:
if isinstance(at, Point):
return self._generate_inflight(name, side, unit_type, count, client_count, at)
elif isinstance(at, ShipGroup):
return self._generate_at_carrier(name, side, unit_type, count, client_count, at)
takeoff_ban = unit_type in db.CARRIER_TAKEOFF_BAN
if not takeoff_ban:
return self._generate_at_carrier(name, side, unit_type, count, client_count, at)
else:
return self._generate_inflight(name, side, unit_type, count, client_count, at.position)
elif issubclass(at, Airport):
takeoff_ban = unit_type in db.TAKEOFF_BAN
ai_ban = client_count == 0 and self.settings.only_player_takeoff
@@ -176,7 +182,7 @@ class AircraftConflictGenerator:
position = group.position # type: Point
wayp = group.add_waypoint(position.point_from_heading(heading, WORKAROUND_WAYP_DIST), CAS_ALTITUDE, WARM_START_AIRSPEED)
self._setup_group(group, CAP, clients)
self._setup_group(group, CAP, at, client_count)
for group in self.escort_targets:
wayp.tasks.append(EscortTaskAction(group.id, engagement_max_dist=ESCORT_MAX_DIST))
@@ -199,7 +205,7 @@ class AircraftConflictGenerator:
group.add_waypoint(self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
group.task = CAS.name
self._setup_group(group, CAS, clients)
self._setup_group(group, CAS, at, client_count)
group.add_waypoint(self.conflict.from_cp.position, RTB_ALTITUDE)
@@ -221,7 +227,7 @@ class AircraftConflictGenerator:
wayp.tasks.append(AttackGroup(target_group.id))
group.task = AntishipStrike.name
self._setup_group(group, AntishipStrike, clients)
self._setup_group(group, AntishipStrike, at, client_count)
group.add_waypoint(self.conflict.from_cp.position, RTB_ALTITUDE)
@@ -255,7 +261,7 @@ class AircraftConflictGenerator:
wayp = group.add_waypoint(self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
wayp.tasks.append(dcs.task.EngageTargets(max_distance=INTERCEPT_MAX_DISTANCE))
wayp.tasks.append(dcs.task.OrbitAction())
self._setup_group(group, CAP, clients)
self._setup_group(group, CAP, at, client_count)
group.add_waypoint(self.conflict.to_cp.position, RTB_ALTITUDE)
@@ -295,7 +301,7 @@ class AircraftConflictGenerator:
wayp = group.add_waypoint(self.conflict.position, 0)
wayp.tasks.append(EngageTargets(max_distance=INTERCEPT_MAX_DISTANCE))
self._setup_group(group, CAP, clients)
self._setup_group(group, CAP, at, client_count)
group.add_waypoint(self.conflict.from_cp.position, RTB_ALTITUDE)
@@ -315,4 +321,4 @@ class AircraftConflictGenerator:
altitude=HELI_ALT,
)
self._setup_group(group, Transport, clients)
self._setup_group(group, Transport, at, client_count)

View File

@@ -38,6 +38,10 @@ RANDOM_WEATHER = {
}
class Silence(Option):
Key = 7
class SettingsGenerator:
def __init__(self, mission: Mission, conflict: Conflict, game):
self.mission = mission
@@ -84,7 +88,7 @@ class SettingsGenerator:
for coalition_name, coalition in self.mission.coalition.items():
for country in coalition.countries.values():
if coalition_name == enemy_coalition:
for plane_group in country.plane_group:
for plane_group in country.plane_group + country.helicopter_group:
plane_group.late_activation = True
activate_by_trigger.append(plane_group)
@@ -108,9 +112,10 @@ class SettingsGenerator:
for coalition_name, coalition in self.mission.coalition.items():
for country in coalition.countries.values():
if coalition_name == player_coalition:
for plane_group in country.plane_group:
for plane_group in country.plane_group + country.helicopter_group:
if plane_group.task == AWACS.name:
continue
regroup_heading = self.conflict.to_cp.position.heading_between_point(self.conflict.from_cp.position)
pos1 = plane_group.position.point_from_heading(regroup_heading, REGROUP_ZONE_DISTANCE)
@@ -124,7 +129,10 @@ class SettingsGenerator:
plane_group.points.insert(1, w2)
plane_group.points.insert(1, w1)
w1.tasks.append(Silence(True))
w2.tasks.append(SwitchWaypoint(from_waypoint=3, to_waypoint=2))
plane_group.points[3].tasks.append(Silence(False))
plane_group.add_trigger_action(SwitchWaypoint(to_waypoint=4))
push_by_trigger.append(plane_group)