-- ***************************************************************************** -- ** Root Commanders ** -- ********************************************************* Commander = {} for _k,_coalition in pairs(coalition.side) do Commander[UTILS.GetCoalitionName(_coalition)] = COMMANDER:New(_coalition,string.format('commander-%s', UTILS.GetCoalitionName(_coalition))) Commander[UTILS.GetCoalitionName(_coalition)]:SetVerbosity(JTFF_verbosity_levels[JTFF_LOGLEVEL]) Commander[UTILS.GetCoalitionName(_coalition)]:Start() end -- ***************************************************************************** -- ** Airbases ** -- ********************************************************* -- region AirbaseConfigFunctions -- @type AirbaseConfig -- @field #string name Airbase name. -- @field #string warehouse Warehouse name. -- @field #boolean enable Enable airbase creation. -- @field #AirwingConfig airwing Airwing configuration. --- Parse Airbases config Object. -- @param #JsonObject config Config object to parse -- @return #AirbaseConfig airbaseConfigJson Parsed AirbaseConfig object function ParseAirbaseConfigJson(config) local json = require('Scripts/json') local parser_name = "AIRBASE" -- ************************************************************************** -- enable -- ************************************************************************** local airbaseConfigJson = { enable = config.enable or false, } -- ************************************************************************** -- name -- ************************************************************************** if type(config.name) == "string" then airbaseConfigJson.name = config.name if type(AIRBASE:FindByName(config.name)) == 'nil' then Jtff_log.error( string.format( "Airbase %s not found, skipping its configuration", config.name ), parser_name ) config.enable = false return config end else Jtff_log.error("Airbase name is not a string, skipping airbase configuration", parser_name) config.enable = false return config end -- ************************************************************************** -- Warehouse name -- ************************************************************************** if type(config.warehouse) == "string" then airbaseConfigJson.warehouse = config.warehouse if type(STATIC:FindByName(config.warehouse, false)) == 'nil' and type(UNIT:FindByName(config.warehouse)) == 'nil' then Jtff_log.error( string.format( "Warehouse %s not found, skipping %s Airbase", config.warehouse, config.name or "unknown" ), parser_name ) config.enable = false return config end else Jtff_log.error("Airbase warehouse is not a string", parser_name) config.enable = false return config end -- ************************************************************************** -- AirWing -- ************************************************************************** if type(config.airwing) == "table" then airbaseConfigJson.airwing = ParseAirwingConfigJson(config.airwing, parser_name) else Jtff_log.error("Airbase airwing is not a table", parser_name) config.enable = false return config end Jtff_log.debug( string.format( "parsed Airbase config for %s Airbase, resulting config :\n%s", config.name or "", json:encode( airbaseConfigJson, { indent = true } ) ), parser_name ) return airbaseConfigJson end -- endregion AirbaseConfigFunctions AirbasesArray = {} MenuCoalitionAirbases = {} for _k, _coalition in pairs(coalition.side) do MenuCoalitionAirbases[UTILS.GetCoalitionName(_coalition)] = MENU_COALITION:New(_coalition, "Airbases", MenuCoalition[UTILS.GetCoalitionName(_coalition)]) end local compteur = #AirbasesArray for _index, _currentAirbaseConfigObject in ipairs(AirBasesConfig) do local airbaseconfig = ParseAirbaseConfigJson(_currentAirbaseConfigObject) if airbaseconfig.enable == true then compteur = compteur + 1 Jtff_log.info( string.format( 'creation Airbase %s: Warehouse=%s ...', airbaseconfig.name, airbaseconfig.warehouse ), "AIRBASE" ) local objAirbase = AIRBASE:FindByName(airbaseconfig.name) objAirbase.airwing = AIRWING:New( airbaseconfig.warehouse, airbaseconfig.airwing.name ) Commander[objAirbase.airwing:GetCoalitionName()]:AddAirwing( objAirbase.airwing ) for _, _squadronconfig in ipairs(airbaseconfig.airwing.squadrons) do local squadronToCreate = SQUADRON:New( _squadronconfig.template, _squadronconfig.nb_aircrafts, _squadronconfig.name ) squadronToCreate:SetFuelLowThreshold(_squadronconfig.fuellowthreshold) squadronToCreate:SetFuelLowRefuel(_squadronconfig.lowfuelrtb) squadronToCreate:SetGrouping(_squadronconfig.grouping) squadronToCreate:SetModex(_squadronconfig.modex) squadronToCreate:SetRadio(_squadronconfig.radio.freq, _squadronconfig.radio.modulation) squadronToCreate:SetSkill(_squadronconfig.skill) squadronToCreate:SetVerbosity( JTFF_verbosity_levels[JTFF_LOGLEVEL] ) squadronToCreate:SetTurnoverTime( _squadronconfig.turnovertime, _squadronconfig.repairtime ) if type(_squadronconfig.livery) == 'string' then squadronToCreate:SetLivery(_squadronconfig.livery) end for _, _payload in ipairs(_squadronconfig.payloads) do local payloadTemplateGroup = GROUP:FindByName(_payload.name) if #(_payload.payloadconfigs) > 0 then for _, _payloadconfig in ipairs(_payload.payloadconfigs) do squadronToCreate:AddMissionCapability(_payloadconfig.roles) objAirbase.airwing:NewPayload( payloadTemplateGroup:GetUnit(1), _payloadconfig.qty, _payloadconfig.roles, _payloadconfig.perf ) end end end objAirbase.airwing:AddSquadron( squadronToCreate ) end objAirbase.customconfig = airbaseconfig AirbasesArray[compteur] = objAirbase AirbasesArray[compteur].airwing:Start() Jtff_log.debug( string.format( "Airbase %s added to AirbasesArray, index %d", objAirbase.customconfig.name, compteur ), "AIRBASE" ) end end if #AirbasesArray == 0 then for _k, _coalition in pairs(coalition.side) do MenuCoalitionAirbases[UTILS.GetCoalitionName(_coalition)]:Remove() end end