diff --git a/game/operation/operation.py b/game/operation/operation.py index 0e39bf1e..57ff5c32 100644 --- a/game/operation/operation.py +++ b/game/operation/operation.py @@ -263,31 +263,67 @@ class Operation: trigger.add_action(DoScriptFile(fileref)) self.current_mission.triggerrules.triggers.append(trigger) + # set a LUA table with data from Liberation that we want to set + # at the moment it contains Liberation's install path, and an overridable definition for the JTACAutoLase function + # later, we'll add data about the units and points having been generated, in order to facilitate the configuration of the plugin lua scripts + state_location = "[[" + os.path.abspath("state.json") + "]]" + lua = """ +-- setting configuration table +env.info("DCSLiberation|: setting configuration table") + +-- all data in this table is overridable. +dcsLiberation = {} + +-- the base location for state.json; if non-existent, it'll be replaced with LIBERATION_EXPORT_DIR, TEMP, or DCS working directory +dcsLiberation.installPath=""" + state_location + """ + +-- you can override dcsLiberation.JTACAutoLase to make it use your own function ; it will be called with these parameters : ({jtac.unit_name}, {jtac.code}, {smoke}, 'vehicle') for all JTACs +if ctld then + dcsLiberation.JTACAutoLase=ctld.JTACAutoLase +elseif JTACAutoLase then + dcsLiberation.JTACAutoLase=JTACAutoLase +end + +-- later, we'll add more data to the table +--dcsLiberation.POIs = {} +--dcsLiberation.BASEs = {} +--dcsLiberation.JTACs = {} + """ + + trigger = TriggerStart(comment="Set DCS Liberation data") + trigger.add_action(DoScript(String(lua))) + self.current_mission.triggerrules.triggers.append(trigger) + # Inject DCS-Liberation script if not done already in the plugins - if not "json.lua" in listOfPluginsScripts : # don't load the script twice + if not "dcs_liberation.lua" in listOfPluginsScripts : # don't load the script twice trigger = TriggerStart(comment="Load DCS Liberation script") fileref = self.current_mission.map_resource.add_resource_file("./resources/scripts/dcs_liberation.lua") trigger.add_action(DoScriptFile(fileref)) self.current_mission.triggerrules.triggers.append(trigger) - # Load Ciribob's JTACAutoLase script if not done already in the plugins - if not "JTACAutoLase.lua" in listOfPluginsScripts: # don't load JTACAutoLase twice - load_autolase = TriggerStart(comment="Load JTAC script") - with open("./resources/scripts/JTACAutoLase.lua") as f: + # Inject Ciribob's JTACAutoLase if not done already in the plugins + if not "JTACAutoLase.lua" in listOfPluginsScripts : # don't load the script twice + trigger = TriggerStart(comment="Load JTACAutoLase.lua script") + fileref = self.current_mission.map_resource.add_resource_file("./resources/scripts/JTACAutoLase.lua") + trigger.add_action(DoScriptFile(fileref)) + self.current_mission.triggerrules.triggers.append(trigger) - script = f.read() - script = script + "\n" + # add a configuration for JTACAutoLase and start lasing for all JTACs + smoke = "true" + if hasattr(self.game.settings, "jtac_smoke_on"): + if not self.game.settings.jtac_smoke_on: + smoke = "false" - smoke = "true" - if hasattr(self.game.settings, "jtac_smoke_on"): - if not self.game.settings.jtac_smoke_on: - smoke = "false" + lua = """ +-- setting and starting JTACs +env.info("DCSLiberation|: setting and starting JTACs") +""" + for jtac in jtacs: + lua += f"if dcsLiberation.JTACAutoLase then dcsLiberation.JTACAutoLase('{jtac.unit_name}', {jtac.code}, {smoke}, 'vehicle') end\n" - for jtac in jtacs: - script += f"\nJTACAutoLase('{jtac.unit_name}', {jtac.code}, {smoke}, 'vehicle')\n" - - load_autolase.add_action(DoScript(String(script))) - self.current_mission.triggerrules.triggers.append(load_autolase) + trigger = TriggerStart(comment="Start JTACs") + trigger.add_action(DoScript(String(lua))) + self.current_mission.triggerrules.triggers.append(trigger) self.assign_channels_to_flights() diff --git a/resources/scripts/dcs_liberation.lua b/resources/scripts/dcs_liberation.lua index bb0939b7..70a5c239 100644 --- a/resources/scripts/dcs_liberation.lua +++ b/resources/scripts/dcs_liberation.lua @@ -39,31 +39,46 @@ write_state = function() -- messageAll("Done writing DCS Liberation state.") end - debriefing_file_location = nil -if not debriefing_file_location then +if dcsLiberation then + debriefing_file_location = dcsLiberation.installPath +end +if debriefing_file_location then + logger:info("Using DCS Liberation install folder for state.json") +else if os then debriefing_file_location = os.getenv("LIBERATION_EXPORT_DIR") if debriefing_file_location then debriefing_file_location = debriefing_file_location .. "\\" end end -end -if not debriefing_file_location then - if os then - debriefing_file_location = os.getenv("TEMP") - if debriefing_file_location then debriefing_file_location = debriefing_file_location .. "\\" end - end -end -if not debriefing_file_location then - if lfs then - debriefing_file_location = lfs.writedir() + if debriefing_file_location then + logger:info("Using LIBERATION_EXPORT_DIR environment variable for state.json") + else + if os then + debriefing_file_location = os.getenv("TEMP") + if debriefing_file_location then debriefing_file_location = debriefing_file_location .. "\\" end + end + if debriefing_file_location then + logger:info("Using TEMP environment variable for state.json") + else + if lfs then + debriefing_file_location = lfs.writedir() + end + if debriefing_file_location then + logger:info("Using DCS working directory for state.json") + end + end end end if debriefing_file_location then - debriefing_file_location = debriefing_file_location .. "state.json" + local filename = "state.json" + if not debriefing_file_location:sub(-#filename) == filename then + debriefing_file_location = debriefing_file_location .. filename + end + logger:info(string.format("DCS Liberation state will be written as json to [[%s]]",debriefing_file_location)) +else + logger:error("No usable storage path for state.json") end -logger:info(string.format("DCS Liberation state will be written as json to [[%s]]",debriefing_file_location)) - write_state_error_handling = function() if pcall(write_state) then -- messageAll("Written DCS Liberation state to "..debriefing_file_location)