From 4be122e11a9d86a39cc05cf3f08f44106b72062e Mon Sep 17 00:00:00 2001 From: MetalStormGhost Date: Sun, 17 Sep 2023 13:09:02 +0300 Subject: [PATCH] Split the Pretense zone definition generation into separate methods: generate_pretense_zone_land() for land control points and generate_pretense_zone_sea() for carriers/LHAs. --- game/pretense/pretenseluagenerator.py | 622 +++++++++++++++++--------- 1 file changed, 418 insertions(+), 204 deletions(-) diff --git a/game/pretense/pretenseluagenerator.py b/game/pretense/pretenseluagenerator.py index a5e6b86e..966724ef 100644 --- a/game/pretense/pretenseluagenerator.py +++ b/game/pretense/pretenseluagenerator.py @@ -54,6 +54,420 @@ class PretenseLuaGenerator(LuaGenerator): self.mission.triggerrules.triggers.remove(t) self.mission.triggerrules.triggers.append(t) + def generate_pretense_zone_land(self, cp_name: str, cp_side: int) -> str: + lua_string_zones = "" + cp_name_trimmed = "".join([i for i in cp_name.lower() if i.isalnum()]) + + lua_string_zones += f"zones.{cp_name_trimmed}:defineUpgrades(" + "{\n" + lua_string_zones += " [1] = { --red side\n" + lua_string_zones += " presets.upgrades.basic.tent:extend({\n" + lua_string_zones += f" name='{cp_name_trimmed}-tent-red',\n" + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.special.red.infantry:extend({ name='" + + cp_name_trimmed + + "-defense-red'})\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " presets.upgrades.basic.comPost:extend({\n" + lua_string_zones += f" name = '{cp_name_trimmed}-com-red',\n" + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.special.red.infantry:extend({ name='" + + cp_name_trimmed + + "-defense-red'}),\n" + ) + lua_string_zones += ( + " presets.defenses.red.infantry:extend({ name='" + + cp_name_trimmed + + "-garrison-red' })\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " },\n" + lua_string_zones += " [2] = --blue side\n" + lua_string_zones += " {\n" + lua_string_zones += " presets.upgrades.basic.tent:extend({\n" + lua_string_zones += f" name='{cp_name_trimmed}-tent-blue',\n" + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.special.blue.infantry:extend({ name='" + + cp_name_trimmed + + "-defense-blue'})\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " presets.upgrades.basic.comPost:extend({\n" + lua_string_zones += f" name = '{cp_name_trimmed}-com-blue',\n" + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.special.blue.infantry:extend({ name='" + + cp_name_trimmed + + "-defense-blue'}),\n" + ) + lua_string_zones += ( + " presets.defenses.blue.infantry:extend({ name='" + + cp_name_trimmed + + "-garrison-blue' })\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " presets.upgrades.supply.fuelTank:extend({\n" + lua_string_zones += ( + " name = '" + cp_name_trimmed + "-fueltank-blue',\n" + ) + lua_string_zones += " products = {\n" + for ground_group in self.game.pretense_ground_supply[cp_side][cp_name_trimmed]: + lua_string_zones += ( + " presets.missions.supply.convoy:extend({ name='" + + ground_group + + "'}),\n" + ) + for ground_group in self.game.pretense_ground_assault[cp_side][cp_name_trimmed]: + lua_string_zones += ( + " presets.missions.attack.surface:extend({ name='" + + ground_group + + "'}),\n" + ) + for mission_type in self.game.pretense_air[cp_side][cp_name_trimmed]: + if mission_type == FlightType.AIR_ASSAULT.name: + mission_name = "supply.helo" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "'}),\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " presets.upgrades.airdef.comCenter:extend({\n" + lua_string_zones += ( + f" name = '{cp_name_trimmed}-mission-command-blue',\n" + ) + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.defenses.blue.shorad:extend({ name='" + + cp_name_trimmed + + "-sam-blue' }),\n" + ) + for mission_type in self.game.pretense_air[cp_side][cp_name_trimmed]: + if mission_type == FlightType.SEAD.name: + mission_name = "attack.sead" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=25000, expend=AI.Task.WeaponExpend.ALL}),\n" + ) + elif mission_type == FlightType.CAS.name: + mission_name = "attack.cas" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=15000, expend=AI.Task.WeaponExpend.ONE}),\n" + ) + elif mission_type == FlightType.BAI.name: + mission_name = "attack.bai" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=10000, expend=AI.Task.WeaponExpend.ONE}),\n" + ) + elif mission_type == FlightType.STRIKE.name: + mission_name = "attack.strike" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=20000, expend=AI.Task.WeaponExpend.ALL}),\n" + ) + elif mission_type == FlightType.BARCAP.name: + mission_name = "patrol.aircraft" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=25000, range=25}),\n" + ) + elif mission_type == FlightType.REFUELING.name: + mission_name = "support.tanker" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + tanker_freq = 257.0 + tanker_tacan = 37.0 + for tanker in self.mission_data.tankers: + if tanker.group_name == air_group: + tanker_freq = tanker.freq.hertz / 1000000 + tanker_tacan = tanker.tacan.number + if tanker.variant == "KC-135 Stratotanker": + tanker_variant = "Boom" + else: + tanker_variant = "Drogue" + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', freq='" + + str(tanker_freq) + + "', tacan='" + + str(tanker_tacan) + + "', variant='" + + tanker_variant + + "'}),\n" + ) + elif mission_type == FlightType.AEWC.name: + mission_name = "support.awacs" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + awacs_freq = 257.5 + for awacs in self.mission_data.awacs: + if awacs.group_name == air_group: + awacs_freq = awacs.freq.hertz / 1000000 + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', freq=" + + str(awacs_freq) + + "}),\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " })\n" + lua_string_zones += " }\n" + lua_string_zones += "})\n" + + return lua_string_zones + + def generate_pretense_zone_sea(self, cp_name: str, cp_side: int) -> str: + lua_string_zones = "" + cp_name_trimmed = "".join([i for i in cp_name.lower() if i.isalnum()]) + + lua_string_zones += f"zones.{cp_name_trimmed}:defineUpgrades(" + "{\n" + lua_string_zones += " [1] = { --red side\n" + lua_string_zones += " presets.upgrades.basic.tent:extend({\n" + lua_string_zones += f" name='{cp_name_trimmed}-tent-red',\n" + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.special.red.infantry:extend({ name='" + + cp_name_trimmed + + "-defense-red'})\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " presets.upgrades.basic.comPost:extend({\n" + lua_string_zones += f" name = '{cp_name_trimmed}-com-red',\n" + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.special.red.infantry:extend({ name='" + + cp_name_trimmed + + "-defense-red'}),\n" + ) + lua_string_zones += ( + " presets.defenses.red.infantry:extend({ name='" + + cp_name_trimmed + + "-garrison-red' })\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " },\n" + lua_string_zones += " [2] = --blue side\n" + lua_string_zones += " {\n" + lua_string_zones += " presets.upgrades.basic.tent:extend({\n" + lua_string_zones += f" name='{cp_name_trimmed}-tent-blue',\n" + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.special.blue.infantry:extend({ name='" + + cp_name_trimmed + + "-defense-blue'})\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " presets.upgrades.basic.comPost:extend({\n" + lua_string_zones += f" name = '{cp_name_trimmed}-com-blue',\n" + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.special.blue.infantry:extend({ name='" + + cp_name_trimmed + + "-defense-blue'}),\n" + ) + lua_string_zones += ( + " presets.defenses.blue.infantry:extend({ name='" + + cp_name_trimmed + + "-garrison-blue' })\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " presets.upgrades.supply.fuelTank:extend({\n" + lua_string_zones += ( + " name = '" + cp_name_trimmed + "-fueltank-blue',\n" + ) + lua_string_zones += " products = {\n" + for ground_group in self.game.pretense_ground_supply[cp_side][cp_name_trimmed]: + lua_string_zones += ( + " presets.missions.supply.convoy:extend({ name='" + + ground_group + + "'}),\n" + ) + for ground_group in self.game.pretense_ground_assault[cp_side][cp_name_trimmed]: + lua_string_zones += ( + " presets.missions.attack.surface:extend({ name='" + + ground_group + + "'}),\n" + ) + for mission_type in self.game.pretense_air[cp_side][cp_name_trimmed]: + if mission_type == FlightType.AIR_ASSAULT.name: + mission_name = "supply.helo" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "'}),\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " }),\n" + lua_string_zones += " presets.upgrades.airdef.comCenter:extend({\n" + lua_string_zones += ( + f" name = '{cp_name_trimmed}-mission-command-blue',\n" + ) + lua_string_zones += " products = {\n" + lua_string_zones += ( + " presets.defenses.blue.shorad:extend({ name='" + + cp_name_trimmed + + "-sam-blue' }),\n" + ) + for mission_type in self.game.pretense_air[cp_side][cp_name_trimmed]: + if mission_type == FlightType.SEAD.name: + mission_name = "attack.sead" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=25000, expend=AI.Task.WeaponExpend.ALL}),\n" + ) + elif mission_type == FlightType.CAS.name: + mission_name = "attack.cas" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=15000, expend=AI.Task.WeaponExpend.ONE}),\n" + ) + elif mission_type == FlightType.BAI.name: + mission_name = "attack.bai" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=10000, expend=AI.Task.WeaponExpend.ONE}),\n" + ) + elif mission_type == FlightType.STRIKE.name: + mission_name = "attack.strike" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=20000, expend=AI.Task.WeaponExpend.ALL}),\n" + ) + elif mission_type == FlightType.BARCAP.name: + mission_name = "patrol.aircraft" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', altitude=25000, range=25}),\n" + ) + elif mission_type == FlightType.REFUELING.name: + mission_name = "support.tanker" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + tanker_freq = 257.0 + tanker_tacan = 37.0 + for tanker in self.mission_data.tankers: + if tanker.group_name == air_group: + tanker_freq = tanker.freq.hertz / 1000000 + tanker_tacan = tanker.tacan.number + if tanker.variant == "KC-135 Stratotanker": + tanker_variant = "Boom" + else: + tanker_variant = "Drogue" + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', freq='" + + str(tanker_freq) + + "', tacan='" + + str(tanker_tacan) + + "', variant='" + + tanker_variant + + "'}),\n" + ) + elif mission_type == FlightType.AEWC.name: + mission_name = "support.awacs" + for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ + mission_type + ]: + awacs_freq = 257.5 + for awacs in self.mission_data.awacs: + if awacs.group_name == air_group: + awacs_freq = awacs.freq.hertz / 1000000 + lua_string_zones += ( + f" presets.missions.{mission_name}:extend" + + "({name='" + + air_group + + "', freq=" + + str(awacs_freq) + + "}),\n" + ) + lua_string_zones += " }\n" + lua_string_zones += " })\n" + lua_string_zones += " }\n" + lua_string_zones += "})\n" + + return lua_string_zones + def generate_plugin_data(self) -> None: self.mission.triggerrules.triggers.clear() @@ -105,210 +519,10 @@ class PretenseLuaGenerator(LuaGenerator): lua_string_zones += ( f"zones.{cp_name_trimmed}.maxResource = {max_resource}\n" ) - lua_string_zones += f"zones.{cp_name_trimmed}:defineUpgrades(" + "{\n" - lua_string_zones += " [1] = { --red side\n" - lua_string_zones += " presets.upgrades.basic.tent:extend({\n" - lua_string_zones += f" name='{cp_name_trimmed}-tent-red',\n" - lua_string_zones += " products = {\n" - lua_string_zones += ( - " presets.special.red.infantry:extend({ name='" - + cp_name_trimmed - + "-defense-red'})\n" - ) - lua_string_zones += " }\n" - lua_string_zones += " }),\n" - lua_string_zones += " presets.upgrades.basic.comPost:extend({\n" - lua_string_zones += f" name = '{cp_name_trimmed}-com-red',\n" - lua_string_zones += " products = {\n" - lua_string_zones += ( - " presets.special.red.infantry:extend({ name='" - + cp_name_trimmed - + "-defense-red'}),\n" - ) - lua_string_zones += ( - " presets.defenses.red.infantry:extend({ name='" - + cp_name_trimmed - + "-garrison-red' })\n" - ) - lua_string_zones += " }\n" - lua_string_zones += " }),\n" - lua_string_zones += " },\n" - lua_string_zones += " [2] = --blue side\n" - lua_string_zones += " {\n" - lua_string_zones += " presets.upgrades.basic.tent:extend({\n" - lua_string_zones += f" name='{cp_name_trimmed}-tent-blue',\n" - lua_string_zones += " products = {\n" - lua_string_zones += ( - " presets.special.blue.infantry:extend({ name='" - + cp_name_trimmed - + "-defense-blue'})\n" - ) - lua_string_zones += " }\n" - lua_string_zones += " }),\n" - lua_string_zones += " presets.upgrades.basic.comPost:extend({\n" - lua_string_zones += f" name = '{cp_name_trimmed}-com-blue',\n" - lua_string_zones += " products = {\n" - lua_string_zones += ( - " presets.special.blue.infantry:extend({ name='" - + cp_name_trimmed - + "-defense-blue'}),\n" - ) - lua_string_zones += ( - " presets.defenses.blue.infantry:extend({ name='" - + cp_name_trimmed - + "-garrison-blue' })\n" - ) - lua_string_zones += " }\n" - lua_string_zones += " }),\n" - lua_string_zones += " presets.upgrades.supply.fuelTank:extend({\n" - lua_string_zones += ( - " name = '" + cp_name_trimmed + "-fueltank-blue',\n" - ) - lua_string_zones += " products = {\n" - for ground_group in self.game.pretense_ground_supply[cp_side][ - cp_name_trimmed - ]: - lua_string_zones += ( - " presets.missions.supply.convoy:extend({ name='" - + ground_group - + "'}),\n" - ) - for ground_group in self.game.pretense_ground_assault[cp_side][ - cp_name_trimmed - ]: - lua_string_zones += ( - " presets.missions.attack.surface:extend({ name='" - + ground_group - + "'}),\n" - ) - for mission_type in self.game.pretense_air[cp_side][cp_name_trimmed]: - if mission_type == FlightType.AIR_ASSAULT.name: - mission_name = "supply.helo" - for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ - mission_type - ]: - lua_string_zones += ( - f" presets.missions.{mission_name}:extend" - + "({name='" - + air_group - + "'}),\n" - ) - lua_string_zones += " }\n" - lua_string_zones += " }),\n" - lua_string_zones += " presets.upgrades.airdef.comCenter:extend({\n" - lua_string_zones += ( - f" name = '{cp_name_trimmed}-mission-command-blue',\n" - ) - lua_string_zones += " products = {\n" - lua_string_zones += ( - " presets.defenses.blue.shorad:extend({ name='" - + cp_name_trimmed - + "-sam-blue' }),\n" - ) - for mission_type in self.game.pretense_air[cp_side][cp_name_trimmed]: - if mission_type == FlightType.SEAD.name: - mission_name = "attack.sead" - for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ - mission_type - ]: - lua_string_zones += ( - f" presets.missions.{mission_name}:extend" - + "({name='" - + air_group - + "', altitude=25000, expend=AI.Task.WeaponExpend.ALL}),\n" - ) - elif mission_type == FlightType.CAS.name: - mission_name = "attack.cas" - for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ - mission_type - ]: - lua_string_zones += ( - f" presets.missions.{mission_name}:extend" - + "({name='" - + air_group - + "', altitude=15000, expend=AI.Task.WeaponExpend.ONE}),\n" - ) - elif mission_type == FlightType.BAI.name: - mission_name = "attack.bai" - for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ - mission_type - ]: - lua_string_zones += ( - f" presets.missions.{mission_name}:extend" - + "({name='" - + air_group - + "', altitude=10000, expend=AI.Task.WeaponExpend.ONE}),\n" - ) - elif mission_type == FlightType.STRIKE.name: - mission_name = "attack.strike" - for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ - mission_type - ]: - lua_string_zones += ( - f" presets.missions.{mission_name}:extend" - + "({name='" - + air_group - + "', altitude=20000, expend=AI.Task.WeaponExpend.ALL}),\n" - ) - elif mission_type == FlightType.BARCAP.name: - mission_name = "patrol.aircraft" - for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ - mission_type - ]: - lua_string_zones += ( - f" presets.missions.{mission_name}:extend" - + "({name='" - + air_group - + "', altitude=25000, range=25}),\n" - ) - elif mission_type == FlightType.REFUELING.name: - mission_name = "support.tanker" - for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ - mission_type - ]: - tanker_freq = 257.0 - tanker_tacan = 37.0 - for tanker in self.mission_data.tankers: - if tanker.group_name == air_group: - tanker_freq = tanker.freq.hertz / 1000000 - tanker_tacan = tanker.tacan.number - if tanker.variant == "KC-135 Stratotanker": - tanker_variant = "Boom" - else: - tanker_variant = "Drogue" - lua_string_zones += ( - f" presets.missions.{mission_name}:extend" - + "({name='" - + air_group - + "', freq='" - + str(tanker_freq) - + "', tacan='" - + str(tanker_tacan) - + "', variant='" - + tanker_variant - + "'}),\n" - ) - elif mission_type == FlightType.AEWC.name: - mission_name = "support.awacs" - for air_group in self.game.pretense_air[cp_side][cp_name_trimmed][ - mission_type - ]: - awacs_freq = 257.5 - for awacs in self.mission_data.awacs: - if awacs.group_name == air_group: - awacs_freq = awacs.freq.hertz / 1000000 - lua_string_zones += ( - f" presets.missions.{mission_name}:extend" - + "({name='" - + air_group - + "', freq=" - + str(awacs_freq) - + "}),\n" - ) - lua_string_zones += " }\n" - lua_string_zones += " })\n" - lua_string_zones += " }\n" - lua_string_zones += "})\n" + if cp.is_fleet: + lua_string_zones += self.generate_pretense_zone_sea(cp.name, cp_side) + else: + lua_string_zones += self.generate_pretense_zone_land(cp.name, cp_side) lua_string_connman = " cm = ConnectionManager:new()\n"