mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
quick mission debriefing fixed; adjusted constants
This commit is contained in:
parent
05c968edc2
commit
274e08dd8b
@ -79,7 +79,7 @@ class Event:
|
|||||||
|
|
||||||
self.operation.prepare(self.game.theater.terrain, is_quick=False)
|
self.operation.prepare(self.game.theater.terrain, is_quick=False)
|
||||||
self.operation.generate()
|
self.operation.generate()
|
||||||
self.operation.mission.save(persistency.mission_path_for("liberation_nextturn.miz"))
|
self.operation.current_mission.save(persistency.mission_path_for("liberation_nextturn.miz"))
|
||||||
self.environment_settings = self.operation.environment_settings
|
self.environment_settings = self.operation.environment_settings
|
||||||
|
|
||||||
def generate_quick(self):
|
def generate_quick(self):
|
||||||
@ -88,7 +88,7 @@ class Event:
|
|||||||
|
|
||||||
self.operation.prepare(self.game.theater.terrain, is_quick=True)
|
self.operation.prepare(self.game.theater.terrain, is_quick=True)
|
||||||
self.operation.generate()
|
self.operation.generate()
|
||||||
self.operation.mission.save(persistency.mission_path_for("liberation_nextturn_quick.miz"))
|
self.operation.current_mission.save(persistency.mission_path_for("liberation_nextturn_quick.miz"))
|
||||||
|
|
||||||
def commit(self, debriefing: Debriefing):
|
def commit(self, debriefing: Debriefing):
|
||||||
for country, losses in debriefing.destroyed_units.items():
|
for country, losses in debriefing.destroyed_units.items():
|
||||||
|
|||||||
@ -80,7 +80,7 @@ AWACS_BUDGET_COST = 4
|
|||||||
# Initial budget value
|
# Initial budget value
|
||||||
PLAYER_BUDGET_INITIAL = 170
|
PLAYER_BUDGET_INITIAL = 170
|
||||||
# Base post-turn bonus value
|
# Base post-turn bonus value
|
||||||
PLAYER_BUDGET_BASE = 17
|
PLAYER_BUDGET_BASE = 14
|
||||||
# Bonus multiplier logarithm base
|
# Bonus multiplier logarithm base
|
||||||
PLAYER_BUDGET_IMPORTANCE_LOG = 2
|
PLAYER_BUDGET_IMPORTANCE_LOG = 2
|
||||||
|
|
||||||
|
|||||||
@ -37,13 +37,13 @@ class BaseAttackOperation(Operation):
|
|||||||
self.attackers_starting_position = None
|
self.attackers_starting_position = None
|
||||||
|
|
||||||
conflict = Conflict.capture_conflict(
|
conflict = Conflict.capture_conflict(
|
||||||
attacker=self.mission.country(self.attacker_name),
|
attacker=self.current_mission.country(self.attacker_name),
|
||||||
defender=self.mission.country(self.defender_name),
|
defender=self.current_mission.country(self.defender_name),
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
to_cp=self.to_cp,
|
to_cp=self.to_cp,
|
||||||
theater=self.game.theater
|
theater=self.game.theater
|
||||||
)
|
)
|
||||||
self.initialize(mission=self.mission,
|
self.initialize(mission=self.current_mission,
|
||||||
conflict=conflict)
|
conflict=conflict)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|||||||
@ -26,14 +26,14 @@ class FrontlineAttackOperation(Operation):
|
|||||||
self.defenders_starting_position = None
|
self.defenders_starting_position = None
|
||||||
|
|
||||||
conflict = Conflict.frontline_cas_conflict(
|
conflict = Conflict.frontline_cas_conflict(
|
||||||
attacker=self.mission.country(self.attacker_name),
|
attacker=self.current_mission.country(self.attacker_name),
|
||||||
defender=self.mission.country(self.defender_name),
|
defender=self.current_mission.country(self.defender_name),
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
to_cp=self.to_cp,
|
to_cp=self.to_cp,
|
||||||
theater=self.game.theater
|
theater=self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
self.initialize(mission=self.mission,
|
self.initialize(mission=self.current_mission,
|
||||||
conflict=conflict)
|
conflict=conflict)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|||||||
@ -32,14 +32,14 @@ class FrontlinePatrolOperation(Operation):
|
|||||||
self.defenders_starting_position = None
|
self.defenders_starting_position = None
|
||||||
|
|
||||||
conflict = Conflict.frontline_cap_conflict(
|
conflict = Conflict.frontline_cap_conflict(
|
||||||
attacker=self.mission.country(self.attacker_name),
|
attacker=self.current_mission.country(self.attacker_name),
|
||||||
defender=self.mission.country(self.defender_name),
|
defender=self.current_mission.country(self.defender_name),
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
to_cp=self.to_cp,
|
to_cp=self.to_cp,
|
||||||
theater=self.game.theater
|
theater=self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
self.initialize(mission=self.mission,
|
self.initialize(mission=self.current_mission,
|
||||||
conflict=conflict)
|
conflict=conflict)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|||||||
@ -15,14 +15,14 @@ class InfantryTransportOperation(Operation):
|
|||||||
super(InfantryTransportOperation, self).prepare(terrain, is_quick)
|
super(InfantryTransportOperation, self).prepare(terrain, is_quick)
|
||||||
|
|
||||||
conflict = Conflict.transport_conflict(
|
conflict = Conflict.transport_conflict(
|
||||||
attacker=self.mission.country(self.attacker_name),
|
attacker=self.current_mission.country(self.attacker_name),
|
||||||
defender=self.mission.country(self.defender_name),
|
defender=self.current_mission.country(self.defender_name),
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
to_cp=self.to_cp,
|
to_cp=self.to_cp,
|
||||||
theater=self.game.theater
|
theater=self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
self.initialize(mission=self.mission,
|
self.initialize(mission=self.current_mission,
|
||||||
conflict=conflict)
|
conflict=conflict)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|||||||
@ -17,14 +17,14 @@ class InsurgentAttackOperation(Operation):
|
|||||||
super(InsurgentAttackOperation, self).prepare(terrain, is_quick)
|
super(InsurgentAttackOperation, self).prepare(terrain, is_quick)
|
||||||
|
|
||||||
conflict = Conflict.ground_attack_conflict(
|
conflict = Conflict.ground_attack_conflict(
|
||||||
attacker=self.mission.country(self.attacker_name),
|
attacker=self.current_mission.country(self.attacker_name),
|
||||||
defender=self.mission.country(self.defender_name),
|
defender=self.current_mission.country(self.defender_name),
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
to_cp=self.to_cp,
|
to_cp=self.to_cp,
|
||||||
theater=self.game.theater
|
theater=self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
self.initialize(mission=self.mission,
|
self.initialize(mission=self.current_mission,
|
||||||
conflict=conflict)
|
conflict=conflict)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|||||||
@ -28,14 +28,14 @@ class InterceptOperation(Operation):
|
|||||||
self.attackers_starting_position = None
|
self.attackers_starting_position = None
|
||||||
|
|
||||||
conflict = Conflict.intercept_conflict(
|
conflict = Conflict.intercept_conflict(
|
||||||
attacker=self.mission.country(self.attacker_name),
|
attacker=self.current_mission.country(self.attacker_name),
|
||||||
defender=self.mission.country(self.defender_name),
|
defender=self.current_mission.country(self.defender_name),
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
to_cp=self.to_cp,
|
to_cp=self.to_cp,
|
||||||
theater=self.game.theater
|
theater=self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
self.initialize(mission=self.mission,
|
self.initialize(mission=self.current_mission,
|
||||||
conflict=conflict)
|
conflict=conflict)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|||||||
@ -23,14 +23,14 @@ class NavalInterceptionOperation(Operation):
|
|||||||
self.attackers_starting_position = None
|
self.attackers_starting_position = None
|
||||||
|
|
||||||
conflict = Conflict.naval_intercept_conflict(
|
conflict = Conflict.naval_intercept_conflict(
|
||||||
attacker=self.mission.country(self.attacker_name),
|
attacker=self.current_mission.country(self.attacker_name),
|
||||||
defender=self.mission.country(self.defender_name),
|
defender=self.current_mission.country(self.defender_name),
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
to_cp=self.to_cp,
|
to_cp=self.to_cp,
|
||||||
theater=self.game.theater
|
theater=self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
self.initialize(self.mission, conflict)
|
self.initialize(self.current_mission, conflict)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
self.prepare_carriers(db.unitdict_from(self.strikegroup))
|
self.prepare_carriers(db.unitdict_from(self.strikegroup))
|
||||||
|
|||||||
@ -11,7 +11,9 @@ class Operation:
|
|||||||
attackers_starting_position = None # type: db.StartingPosition
|
attackers_starting_position = None # type: db.StartingPosition
|
||||||
defenders_starting_position = None # type: db.StartingPosition
|
defenders_starting_position = None # type: db.StartingPosition
|
||||||
|
|
||||||
mission = None # type: dcs.Mission
|
current_mission = None # type: dcs.Mission
|
||||||
|
regular_mission = None # type: dcs.Mission
|
||||||
|
quick_mission = None # type: dcs.Mission
|
||||||
conflict = None # type: Conflict
|
conflict = None # type: Conflict
|
||||||
armorgen = None # type: ArmorConflictGenerator
|
armorgen = None # type: ArmorConflictGenerator
|
||||||
airgen = None # type: AircraftConflictGenerator
|
airgen = None # type: AircraftConflictGenerator
|
||||||
@ -51,7 +53,7 @@ class Operation:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def initialize(self, mission: Mission, conflict: Conflict):
|
def initialize(self, mission: Mission, conflict: Conflict):
|
||||||
self.mission = mission
|
self.current_mission = mission
|
||||||
self.conflict = conflict
|
self.conflict = conflict
|
||||||
self.armorgen = ArmorConflictGenerator(mission, conflict)
|
self.armorgen = ArmorConflictGenerator(mission, conflict)
|
||||||
self.airgen = AircraftConflictGenerator(mission, conflict, self.game.settings)
|
self.airgen = AircraftConflictGenerator(mission, conflict, self.game.settings)
|
||||||
@ -72,8 +74,13 @@ class Operation:
|
|||||||
with open("resources/default_options.lua", "r") as f:
|
with open("resources/default_options.lua", "r") as f:
|
||||||
options_dict = loads(f.read())["options"]
|
options_dict = loads(f.read())["options"]
|
||||||
|
|
||||||
self.mission = dcs.Mission(terrain)
|
self.current_mission = dcs.Mission(terrain)
|
||||||
self.mission.options.load_from_dict(options_dict)
|
if is_quick:
|
||||||
|
self.quick_mission = self.current_mission
|
||||||
|
else:
|
||||||
|
self.regular_mission = self.current_mission
|
||||||
|
|
||||||
|
self.current_mission.options.load_from_dict(options_dict)
|
||||||
self.is_quick = is_quick
|
self.is_quick = is_quick
|
||||||
|
|
||||||
if is_quick:
|
if is_quick:
|
||||||
@ -107,11 +114,11 @@ class Operation:
|
|||||||
self.briefinggen.append_frequency("AWACS", "133 MHz AM")
|
self.briefinggen.append_frequency("AWACS", "133 MHz AM")
|
||||||
|
|
||||||
# combined arms
|
# combined arms
|
||||||
self.mission.groundControl.pilot_can_control_vehicles = self.ca_slots > 0
|
self.current_mission.groundControl.pilot_can_control_vehicles = self.ca_slots > 0
|
||||||
if self.game.player in [country.name for country in self.mission.coalition["blue"].countries.values()]:
|
if self.game.player in [country.name for country in self.current_mission.coalition["blue"].countries.values()]:
|
||||||
self.mission.groundControl.blue_tactical_commander = self.ca_slots
|
self.current_mission.groundControl.blue_tactical_commander = self.ca_slots
|
||||||
else:
|
else:
|
||||||
self.mission.groundControl.red_tactical_commander = self.ca_slots
|
self.current_mission.groundControl.red_tactical_commander = self.ca_slots
|
||||||
|
|
||||||
# ground infrastructure
|
# ground infrastructure
|
||||||
self.groundobjectgen.generate()
|
self.groundobjectgen.generate()
|
||||||
|
|||||||
@ -24,14 +24,14 @@ class StrikeOperation(Operation):
|
|||||||
self.attackers_starting_position = None
|
self.attackers_starting_position = None
|
||||||
|
|
||||||
conflict = Conflict.strike_conflict(
|
conflict = Conflict.strike_conflict(
|
||||||
attacker=self.mission.country(self.attacker_name),
|
attacker=self.current_mission.country(self.attacker_name),
|
||||||
defender=self.mission.country(self.defender_name),
|
defender=self.current_mission.country(self.defender_name),
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
to_cp=self.to_cp,
|
to_cp=self.to_cp,
|
||||||
theater=self.game.theater
|
theater=self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
self.initialize(mission=self.mission,
|
self.initialize(mission=self.current_mission,
|
||||||
conflict=conflict)
|
conflict=conflict)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|||||||
@ -16,7 +16,7 @@ from gen.airsupportgen import AirSupportConflictGenerator
|
|||||||
from gen import *
|
from gen import *
|
||||||
|
|
||||||
PUSH_TRIGGER_SIZE = 3000
|
PUSH_TRIGGER_SIZE = 3000
|
||||||
PUSH_TRIGGER_ACTIVATION_AGL = 100
|
PUSH_TRIGGER_ACTIVATION_AGL = 25
|
||||||
|
|
||||||
REGROUP_ZONE_DISTANCE = 12000
|
REGROUP_ZONE_DISTANCE = 12000
|
||||||
REGROUP_ALT = 5000
|
REGROUP_ALT = 5000
|
||||||
@ -25,7 +25,7 @@ TRIGGER_WAYPOINT_OFFSET = 2
|
|||||||
TRIGGER_MIN_DISTANCE_FROM_START = 10000
|
TRIGGER_MIN_DISTANCE_FROM_START = 10000
|
||||||
TRIGGER_RADIUS_MINIMUM = 20000
|
TRIGGER_RADIUS_MINIMUM = 20000
|
||||||
|
|
||||||
TRIGGER_RADIUS_SMALL = 30000
|
TRIGGER_RADIUS_SMALL = 50000
|
||||||
TRIGGER_RADIUS_MEDIUM = 100000
|
TRIGGER_RADIUS_MEDIUM = 100000
|
||||||
TRIGGER_RADIUS_LARGE = 150000
|
TRIGGER_RADIUS_LARGE = 150000
|
||||||
|
|
||||||
|
|||||||
@ -194,6 +194,12 @@ class EventMenu(Menu):
|
|||||||
self.error_label["text"] = "Need at least one player in flight {}".format(self.event.flight_name(task))
|
self.error_label["text"] = "Need at least one player in flight {}".format(self.event.flight_name(task))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if isinstance(self.event, FrontlineAttackEvent) or isinstance(self.event, FrontlinePatrolEvent):
|
||||||
|
if tasks_scramble_counts.get(PinpointStrike, 0) == 0:
|
||||||
|
self.error_label["text"] = "No ground vehicles assigned to attack!"
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
if self.game.is_player_attack(self.event):
|
if self.game.is_player_attack(self.event):
|
||||||
self.event.player_attacking(flights)
|
self.event.player_attacking(flights)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -99,12 +99,14 @@ class EventResultsMenu(Menu):
|
|||||||
Label(self.frame, text="{}".format(count), **STYLES["widget"]).grid(column=1, row=row)
|
Label(self.frame, text="{}".format(count), **STYLES["widget"]).grid(column=1, row=row)
|
||||||
row += 1
|
row += 1
|
||||||
|
|
||||||
Button(self.frame, text="Okay", command=self.dismiss, **STYLES["btn-primary"]).grid(columnspan=1, row=row);
|
Button(self.frame, text="Okay", command=self.dismiss, **STYLES["btn-primary"]).grid(columnspan=1, row=row)
|
||||||
row += 1
|
row += 1
|
||||||
|
|
||||||
def process_debriefing(self, debriefing: Debriefing):
|
def process_debriefing(self, debriefing: Debriefing):
|
||||||
self.debriefing = debriefing
|
self.debriefing = debriefing
|
||||||
debriefing.calculate_units(mission=self.event.operation.mission,
|
|
||||||
|
debriefing.calculate_units(regular_mission=self.event.operation.regular_mission,
|
||||||
|
quick_mission=self.event.operation.quick_mission,
|
||||||
player_name=self.game.player,
|
player_name=self.game.player,
|
||||||
enemy_name=self.game.enemy)
|
enemy_name=self.game.enemy)
|
||||||
|
|
||||||
|
|||||||
@ -60,11 +60,12 @@ def parse_mutliplayer_debriefing(contents: str):
|
|||||||
|
|
||||||
|
|
||||||
class Debriefing:
|
class Debriefing:
|
||||||
def __init__(self, dead_units):
|
def __init__(self, dead_units, trigger_state):
|
||||||
self.destroyed_units = {} # type: typing.Dict[str, typing.Dict[UnitType, int]]
|
self.destroyed_units = {} # type: typing.Dict[str, typing.Dict[UnitType, int]]
|
||||||
self.alive_units = {} # type: typing.Dict[str, typing.Dict[UnitType, int]]
|
self.alive_units = {} # type: typing.Dict[str, typing.Dict[UnitType, int]]
|
||||||
self.destroyed_objects = [] # type: typing.List[str]
|
self.destroyed_objects = [] # type: typing.List[str]
|
||||||
|
|
||||||
|
self._trigger_state = trigger_state
|
||||||
self._dead_units = dead_units
|
self._dead_units = dead_units
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -99,18 +100,11 @@ class Debriefing:
|
|||||||
if event_type in ["crash", "dead"]:
|
if event_type in ["crash", "dead"]:
|
||||||
parse_dead_object(event)
|
parse_dead_object(event)
|
||||||
|
|
||||||
"""
|
trigger_state = table.get("debriefing", {}).get("triggers_state", {})
|
||||||
initiator_components = event["initiator"].split("|")
|
|
||||||
|
|
||||||
if initiator_components[0] in CATEGORY_MAP:
|
return Debriefing(dead_units, trigger_state)
|
||||||
parse_dead_object(event)
|
|
||||||
else:
|
|
||||||
parse_dead_unit(event)
|
|
||||||
"""
|
|
||||||
|
|
||||||
return Debriefing(dead_units)
|
def calculate_units(self, regular_mission: Mission, quick_mission: Mission, player_name: str, enemy_name: str):
|
||||||
|
|
||||||
def calculate_units(self, mission: Mission, player_name: str, enemy_name: str):
|
|
||||||
def count_groups(groups: typing.List[UnitType]) -> typing.Dict[UnitType, int]:
|
def count_groups(groups: typing.List[UnitType]) -> typing.Dict[UnitType, int]:
|
||||||
result = {}
|
result = {}
|
||||||
for group in groups:
|
for group in groups:
|
||||||
@ -129,6 +123,8 @@ class Debriefing:
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
mission = regular_mission if len(self._trigger_state) else quick_mission
|
||||||
|
|
||||||
player = mission.country(player_name)
|
player = mission.country(player_name)
|
||||||
enemy = mission.country(enemy_name)
|
enemy = mission.country(enemy_name)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user