Increased offset for attack points.

This commit is contained in:
Khopa 2020-07-20 21:32:49 +02:00
parent c580979fee
commit 9c7689f9b5

View File

@ -1,4 +1,7 @@
from dcs.action import AITaskPush
from dcs.condition import TimeAfter
from dcs.task import * from dcs.task import *
from dcs.triggers import TriggerOnce, Event
from gen import namegen from gen import namegen
from gen.ground_forces.ai_ground_planner import CombatGroupRole, DISTANCE_FROM_FRONTLINE from gen.ground_forces.ai_ground_planner import CombatGroupRole, DISTANCE_FROM_FRONTLINE
@ -17,10 +20,12 @@ AGGRESIVE_MOVE_DISTANCE = 16000
FIGHT_DISTANCE = 3500 FIGHT_DISTANCE = 3500
RANDOM_OFFSET_ATTACK = 250
class GroundConflictGenerator: class GroundConflictGenerator:
def __init__(self, mission: Mission, conflict: Conflict, game, player_planned_combat_groups, enemy_planned_combat_groups, player_stance): def __init__(self, mission: Mission, conflict: Conflict, game, player_planned_combat_groups, enemy_planned_combat_groups, player_stance):
self.m = mission self.mission = mission
self.conflict = conflict self.conflict = conflict
self.enemy_planned_combat_groups = enemy_planned_combat_groups self.enemy_planned_combat_groups = enemy_planned_combat_groups
self.player_planned_combat_groups = player_planned_combat_groups self.player_planned_combat_groups = player_planned_combat_groups
@ -58,7 +63,7 @@ class GroundConflictGenerator:
if final_position is not None: if final_position is not None:
g = self._generate_group( g = self._generate_group(
side=self.m.country(self.game.player_country), side=self.mission.country(self.game.player_country),
unit=group.units[0], unit=group.units[0],
heading=self.conflict.heading+90, heading=self.conflict.heading+90,
count=len(group.units), count=len(group.units),
@ -66,7 +71,7 @@ class GroundConflictGenerator:
g.set_skill(self.game.settings.player_skill) g.set_skill(self.game.settings.player_skill)
player_groups.append((g,group)) player_groups.append((g,group))
self.gen_infantry_group_for_group(g, True, self.m.country(self.game.player_country), self.conflict.heading + 90) self.gen_infantry_group_for_group(g, True, self.mission.country(self.game.player_country), self.conflict.heading + 90)
# Create enemy groups at random position # Create enemy groups at random position
for group in self.enemy_planned_combat_groups: for group in self.enemy_planned_combat_groups:
@ -78,7 +83,7 @@ class GroundConflictGenerator:
if final_position is not None: if final_position is not None:
g = self._generate_group( g = self._generate_group(
side=self.m.country(self.game.enemy_country), side=self.mission.country(self.game.enemy_country),
unit=group.units[0], unit=group.units[0],
heading=self.conflict.heading - 90, heading=self.conflict.heading - 90,
count=len(group.units), count=len(group.units),
@ -86,7 +91,7 @@ class GroundConflictGenerator:
g.set_skill(self.game.settings.enemy_vehicle_skill) g.set_skill(self.game.settings.enemy_vehicle_skill)
enemy_groups.append((g, group)) enemy_groups.append((g, group))
self.gen_infantry_group_for_group(g, False, self.m.country(self.game.enemy_country), self.conflict.heading - 90) self.gen_infantry_group_for_group(g, False, self.mission.country(self.game.enemy_country), self.conflict.heading - 90)
# Plan combat actions for groups # Plan combat actions for groups
@ -118,7 +123,7 @@ class GroundConflictGenerator:
return return
u = random.choice(possible_infantry_units) u = random.choice(possible_infantry_units)
self.m.vehicle_group( self.mission.vehicle_group(
side, side,
namegen.next_infantry_name(side, cp, u), u, namegen.next_infantry_name(side, cp, u), u,
position=infantry_position, position=infantry_position,
@ -129,7 +134,7 @@ class GroundConflictGenerator:
for i in range(randint(3, 10)): for i in range(randint(3, 10)):
u = random.choice(possible_infantry_units) u = random.choice(possible_infantry_units)
position = infantry_position.random_point_within(55, 5) position = infantry_position.random_point_within(55, 5)
self.m.vehicle_group( self.mission.vehicle_group(
side, side,
namegen.next_infantry_name(side, cp, u), u, namegen.next_infantry_name(side, cp, u), u,
position=position, position=position,
@ -149,14 +154,22 @@ class GroundConflictGenerator:
if self.game.settings.perf_artillery: if self.game.settings.perf_artillery:
target = self.get_artillery_target_in_range(dcs_group, group, enemy_groups) target = self.get_artillery_target_in_range(dcs_group, group, enemy_groups)
if target is not None: if target is not None:
dcs_group.points[0].tasks.append(FireAtPoint(target, len(group.units) * 10, 100))
# Artillery strike random start
artillery_trigger = TriggerOnce(Event.NoEvent,
"ArtilleryFireTask #" + str(dcs_group.id))
artillery_trigger.add_condition(TimeAfter(seconds=random.randint(1, 45)* 60))
dcs_group.add_trigger_action(FireAtPoint(target, len(group.units) * 10, 100))
artillery_trigger.add_action(AITaskPush(dcs_group.id, len(dcs_group.tasks)))
self.mission.triggerrules.triggers.append(artillery_trigger)
elif group.role in [CombatGroupRole.TANK, CombatGroupRole.IFV]: elif group.role in [CombatGroupRole.TANK, CombatGroupRole.IFV]:
if stance == CombatStance.AGGRESIVE: if stance == CombatStance.AGGRESIVE:
# Attack nearest enemy if any # Attack nearest enemy if any
# Then move forward OR Attack enemy base if it is not too far away # Then move forward OR Attack enemy base if it is not too far away
target = self.find_nearest_enemy_group(dcs_group, enemy_groups) target = self.find_nearest_enemy_group(dcs_group, enemy_groups)
if target is not None: if target is not None:
rand_offset = Point(random.randint(-50, 50), random.randint(-50, 50)) rand_offset = Point(random.randint(-RANDOM_OFFSET_ATTACK, RANDOM_OFFSET_ATTACK), random.randint(-RANDOM_OFFSET_ATTACK, RANDOM_OFFSET_ATTACK))
dcs_group.add_waypoint(target.points[0].position + rand_offset, PointAction.OffRoad) dcs_group.add_waypoint(target.points[0].position + rand_offset, PointAction.OffRoad)
dcs_group.points[1].tasks.append(AttackGroup(target.id)) dcs_group.points[1].tasks.append(AttackGroup(target.id))
@ -179,7 +192,7 @@ class GroundConflictGenerator:
targets = self.find_n_nearest_enemy_groups(dcs_group, enemy_groups, 3) targets = self.find_n_nearest_enemy_groups(dcs_group, enemy_groups, 3)
i = 1 i = 1
for target in targets: for target in targets:
rand_offset = Point(random.randint(-50, 50), random.randint(-50, 50)) rand_offset = Point(random.randint(-RANDOM_OFFSET_ATTACK, RANDOM_OFFSET_ATTACK), random.randint(-RANDOM_OFFSET_ATTACK, RANDOM_OFFSET_ATTACK))
dcs_group.add_waypoint(target.points[0].position+rand_offset,PointAction.OffRoad) dcs_group.add_waypoint(target.points[0].position+rand_offset,PointAction.OffRoad)
dcs_group.points[i].tasks.append(AttackGroup(target.id)) dcs_group.points[i].tasks.append(AttackGroup(target.id))
i = i + 1 i = i + 1
@ -310,7 +323,7 @@ class GroundConflictGenerator:
cp = self.conflict.to_cp cp = self.conflict.to_cp
logging.info("armorgen: {} for {}".format(unit, side.id)) logging.info("armorgen: {} for {}".format(unit, side.id))
group = self.m.vehicle_group( group = self.mission.vehicle_group(
side, side,
namegen.next_unit_name(side, cp.id, unit), unit, namegen.next_unit_name(side, cp.id, unit), unit,
position=self._group_point(at), position=self._group_point(at),