From 7d0234820cdfc68c55d490d2c59752de785d4441 Mon Sep 17 00:00:00 2001 From: MetalStormGhost Date: Mon, 11 Sep 2023 21:43:29 +0300 Subject: [PATCH] First version of PretenseLuaGenerator, inherited from LuaGenerator --- game/pretense/pretenseluagenerator.py | 104 ++++++++++++++++++++-- game/pretense/pretensemissiongenerator.py | 4 +- 2 files changed, 101 insertions(+), 7 deletions(-) diff --git a/game/pretense/pretenseluagenerator.py b/game/pretense/pretenseluagenerator.py index f8698ec7..d860abd3 100644 --- a/game/pretense/pretenseluagenerator.py +++ b/game/pretense/pretenseluagenerator.py @@ -13,23 +13,30 @@ from dcs.triggers import TriggerStart from game.ato import FlightType from game.dcs.aircrafttype import AircraftType +from game.missiongenerator.luagenerator import LuaGenerator from game.plugins import LuaPluginManager -from game.theater import TheaterGroundObject +from game.theater import TheaterGroundObject, Airfield from game.theater.iadsnetwork.iadsrole import IadsRole from game.utils import escape_string_for_lua -from .missiondata import MissionData +from game.missiongenerator.missiondata import MissionData if TYPE_CHECKING: from game import Game -class LuaGenerator: +class PretenseLuaGenerator(LuaGenerator): def __init__( self, game: Game, mission: Mission, mission_data: MissionData, ) -> None: + super().__init__( + game, + mission, + mission_data, + ) + self.game = game self.mission = mission self.mission_data = mission_data @@ -207,8 +214,95 @@ class LuaGenerator: for role, connections in node.connections.items(): iads_element.add_data_array(role, connections) - trigger = TriggerStart(comment="Set DCS Retribution data") - trigger.add_action(DoScript(String(lua_data.create_operations_lua()))) + trigger = TriggerStart(comment="Pretense init") + + init_header_file = open("./resources/plugins/pretense/init_header.lua", "r") + init_header = init_header_file.read() + + lua_string = "" + lua_data = LuaData("products") + + for cp in self.game.theater.controlpoints: + cp_name_trimmed = "".join([i for i in cp.name.lower() if i.isalnum()]) + cp_side = 2 if cp.captured else 1 + + lua_string += f"zones.{cp_name_trimmed} = ZoneCommand:new('{cp.name}')\n" + lua_string += ( + f"zones.{cp_name_trimmed}.initialState = " + + "{ side=" + + str(cp_side) + + " }\n" + ) + lua_string += f"zones.{cp_name_trimmed}.keepActive = true\n" + if cp.has_helipads: + lua_string += f"zones.{cp_name_trimmed}.isHeloSpawn = true\n" + if isinstance(cp, Airfield) or cp.has_ground_spawns: + lua_string += f"zones.{cp_name_trimmed}.isPlaneSpawn = true\n" + lua_string += f"zones.{cp_name_trimmed}.maxResource = 50000\n" + lua_string += f"zones.{cp_name_trimmed}:defineUpgrades(" + "{\n" + lua_string += " [1] = { --red side\n" + lua_string += " presets.upgrades.basic.tent:extend({\n" + lua_string += f" name='{cp_name_trimmed}-tent-red',\n" + lua_string += " products = {\n" + lua_string += " presets.special.red.infantry:extend({ name='mike-defense-red'})\n" + lua_string += " }\n" + lua_string += " }),\n" + lua_string += " presets.upgrades.basic.comPost:extend({\n" + lua_string += " name = 'batumi-com-red',\n" + lua_string += " products = {" + lua_string += " presets.special.red.infantry:extend({ name='batumi-defense-red'}),\n" + lua_string += " presets.defenses.red.infantry:extend({ name='batumi-garrison-red' })\n" + lua_string += " }\n" + lua_string += " }),\n" + lua_string += " },\n" + lua_string += " [2] = --blue side\n" + lua_string += " {\n" + lua_string += " presets.upgrades.basic.tent:extend({\n" + lua_string += " name='mike-tent-blue',\n" + lua_string += " products = {\n" + lua_string += " presets.special.blue.infantry:extend({ name='mike-defense-blue'})\n" + lua_string += " }\n" + lua_string += " }),\n" + lua_string += " presets.upgrades.basic.comPost:extend({\n" + lua_string += " name = 'batumi-com-blue',\n" + lua_string += " products = {" + lua_string += " presets.special.blue.infantry:extend({ name='batumi-defense-blue'}),\n" + lua_string += " presets.defenses.blue.infantry:extend({ name='batumi-garrison-blue' })\n" + lua_string += " }\n" + lua_string += " }),\n" + lua_string += " presets.upgrades.supply.fuelTank:extend({\n" + lua_string += " name = 'batumi-fueltank-blue',\n" + lua_string += " products = {\n" + lua_string += " presets.missions.supply.convoy_escorted:extend({ name='batumi-supply-convoy-1'}),\n" + lua_string += " presets.missions.supply.helo:extend({ name='batumi-supply-blue-1' }),\n" + lua_string += " presets.missions.supply.transfer:extend({name='batumi-transfer-blue'})\n" + lua_string += " }\n" + lua_string += " }),\n" + lua_string += " presets.upgrades.airdef.comCenter:extend({\n" + lua_string += " name = 'batumi-mission-command-blue',\n" + lua_string += " products = {\n" + lua_string += " presets.defenses.blue.shorad:extend({ name='batumi-sam-blue' }),\n" + lua_string += " presets.missions.attack.sead:extend({name='batumi-sead-blue-1', altitude=25000, expend=AI.Task.WeaponExpend.ALL}),\n" + lua_string += " presets.missions.attack.cas:extend({name='batumi-cas-blue-1', altitude=15000, expend=AI.Task.WeaponExpend.ONE}),\n" + lua_string += " presets.missions.attack.bai:extend({name='batumi-cas-blue-1', altitude=10000, expend=AI.Task.WeaponExpend.ONE}),\n" + lua_string += " presets.missions.attack.strike:extend({name='batumi-strike-blue-1', altitude=20000, expend=AI.Task.WeaponExpend.ALL}),\n" + lua_string += " presets.missions.patrol.aircraft:extend({name='batumi-patrol-blue-1', altitude=25000, range=25}),\n" + lua_string += " presets.missions.support.awacs:extend({name='batumi-awacs-blue', altitude=30000, freq=257.5}),\n" + lua_string += " presets.missions.support.tanker:extend({name='batumi-tanker-blue', altitude=25000, freq=257, tacan='37', variant=\"Drogue\"})\n" + lua_string += " }\n" + lua_string += " })\n" + lua_string += " }\n" + lua_string += "})\n" + + init_body_file = open("./resources/plugins/pretense/init_body.lua", "r") + init_body = init_body_file.read() + + init_footer_file = open("./resources/plugins/pretense/init_footer.lua", "r") + init_footer = init_footer_file.read() + + lua_string = init_header + lua_string + init_body + init_footer + + trigger.add_action(DoScript(String(lua_string))) self.mission.triggerrules.triggers.append(trigger) def inject_lua_trigger(self, contents: str, comment: str) -> None: diff --git a/game/pretense/pretensemissiongenerator.py b/game/pretense/pretensemissiongenerator.py index d39b338c..ed220130 100644 --- a/game/pretense/pretensemissiongenerator.py +++ b/game/pretense/pretensemissiongenerator.py @@ -35,9 +35,9 @@ from game.missiongenerator.frontlineconflictdescription import ( ) from game.missiongenerator.kneeboard import KneeboardGenerator from game.missiongenerator.lasercoderegistry import LaserCodeRegistry -from game.missiongenerator.luagenerator import LuaGenerator from game.missiongenerator.missiondata import MissionData from game.missiongenerator.tgogenerator import TgoGenerator +from .pretenseluagenerator import PretenseLuaGenerator from .pretensetgogenerator import PretenseTgoGenerator from .pretensetriggergenerator import PretenseTriggerGenerator from game.missiongenerator.visualsgenerator import VisualsGenerator @@ -107,7 +107,7 @@ class PretenseMissionGenerator: PretenseTriggerGenerator(self.mission, self.game).generate() ForcedOptionsGenerator(self.mission, self.game).generate() VisualsGenerator(self.mission, self.game).generate() - LuaGenerator(self.game, self.mission, self.mission_data).generate() + PretenseLuaGenerator(self.game, self.mission, self.mission_data).generate() self.setup_combined_arms()