Merge branch 'FF/Ops' into FF/OpsDev

This commit is contained in:
Frank 2023-09-04 23:35:05 +02:00
commit eb2380c3f6
4 changed files with 77 additions and 53 deletions

View File

@ -22,7 +22,7 @@
-- @module Functional.Mantis
-- @image Functional.Mantis.jpg
--
-- Last Update: July 2023
-- Last Update: Sept 2023
-------------------------------------------------------------------------
--- **MANTIS** class, extends Core.Base#BASE
@ -431,22 +431,24 @@ MANTIS.SamDataCH = {
-- units from CH (Military Assets by Currenthill)
-- https://www.currenthill.com/
-- group name MUST contain CHM to ID launcher type correctly!
["2S38 CH"] = { Range=8, Blindspot=0.5, Height=6, Type="Short", Radar="2S38" },
["PantsirS1 CH"] = { Range=20, Blindspot=1.2, Height=15, Type="Short", Radar="PantsirS1" },
["PantsirS2 CH"] = { Range=30, Blindspot=1.2, Height=18, Type="Medium", Radar="PantsirS2" },
["PGL-625 CH"] = { Range=10, Blindspot=0.5, Height=5, Type="Short", Radar="PGL_625" },
["HQ-17A CH"] = { Range=20, Blindspot=1.5, Height=10, Type="Short", Radar="HQ17A" },
["M903PAC2 CH"] = { Range=160, Blindspot=3, Height=24.5, Type="Long", Radar="MIM104_M903_PAC2" },
["M903PAC3 CH"] = { Range=120, Blindspot=1, Height=40, Type="Long", Radar="MIM104_M903_PAC3" },
["TorM2 CH"] = { Range=12, Blindspot=1, Height=10, Type="Short", Radar="TorM2" },
["TorM2K CH"] = { Range=12, Blindspot=1, Height=10, Type="Short", Radar="TorM2K" },
["TorM2M CH"] = { Range=16, Blindspot=1, Height=10, Type="Short", Radar="TorM2M" },
["NASAMS3-AMRAAMER CH"] = { Range=50, Blindspot=2, Height=35.7, Type="Medium", Radar="CH_NASAMS3_LN_AMRAAM_ER" },
["NASAMS3-AIM9X2 CH"] = { Range=20, Blindspot=0.2, Height=18, Type="Short", Radar="CH_NASAMS3_LN_AIM9X2" },
["C-RAM CH"] = { Range=2, Blindspot=0, Height=2, Type="Short", Radar="CH_Centurion_C_RAM" },
["PGZ-09 CH"] = { Range=4, Blindspot=0, Height=3, Type="Short", Radar="CH_PGZ09" },
["S350-9M100 CH"] = { Range=15, Blindspot=1.5, Height=8, Type="Short", Radar="CH_S350_50P6_9M100" },
["S350-9M96D CH"] = { Range=150, Blindspot=2.5, Height=30, Type="Long", Radar="CH_S350_50P6_9M96D" },
["2S38 CH"] = { Range=8, Blindspot=0.5, Height=6, Type="Short", Radar="2S38" },
["PantsirS1 CH"] = { Range=20, Blindspot=1.2, Height=15, Type="Short", Radar="PantsirS1" },
["PantsirS2 CH"] = { Range=30, Blindspot=1.2, Height=18, Type="Medium", Radar="PantsirS2" },
["PGL-625 CH"] = { Range=10, Blindspot=0.5, Height=5, Type="Short", Radar="PGL_625" },
["HQ-17A CH"] = { Range=20, Blindspot=1.5, Height=10, Type="Short", Radar="HQ17A" },
["M903PAC2 CH"] = { Range=160, Blindspot=3, Height=24.5, Type="Long", Radar="MIM104_M903_PAC2" },
["M903PAC3 CH"] = { Range=120, Blindspot=1, Height=40, Type="Long", Radar="MIM104_M903_PAC3" },
["TorM2 CH"] = { Range=12, Blindspot=1, Height=10, Type="Short", Radar="TorM2" },
["TorM2K CH"] = { Range=12, Blindspot=1, Height=10, Type="Short", Radar="TorM2K" },
["TorM2M CH"] = { Range=16, Blindspot=1, Height=10, Type="Short", Radar="TorM2M" },
["NASAMS3-AMRAAMER CH"] = { Range=50, Blindspot=2, Height=35.7, Type="Medium", Radar="CH_NASAMS3_LN_AMRAAM_ER" },
["NASAMS3-AIM9X2 CH"] = { Range=20, Blindspot=0.2, Height=18, Type="Short", Radar="CH_NASAMS3_LN_AIM9X2" },
["C-RAM CH"] = { Range=2, Blindspot=0, Height=2, Type="Short", Radar="CH_Centurion_C_RAM" },
["PGZ-09 CH"] = { Range=4, Blindspot=0, Height=3, Type="Short", Radar="CH_PGZ09" },
["S350-9M100 CH"] = { Range=15, Blindspot=1.5, Height=8, Type="Short", Radar="CH_S350_50P6_9M100" },
["S350-9M96D CH"] = { Range=150, Blindspot=2.5, Height=30, Type="Long", Radar="CH_S350_50P6_9M96D" },
["LAV-AD CH"] = { Range=8, Blindspot=0.2, Height=4.8, Type="Short", Radar="CH_LAVAD" },
["HQ-22 CH"] = { Range=170, Blindspot=5, Height=27, Type="Long", Radar="CH_HQ22_LN" },
}
-----------------------------------------------------------------------
@ -465,6 +467,7 @@ do
--@param #string awacs Group name of your Awacs (optional)
--@param #boolean EmOnOff Make MANTIS switch Emissions on and off instead of changing the alarm state between RED and GREEN (optional)
--@param #number Padding For #SEAD - Extra number of seconds to add to radar switch-back-on time (optional)
--@param #table Zones Table of Core.Zone#ZONE Zones Consider SAM groups in this zone(s) only for this MANTIS instance, must be handed as #table of Zone objects
--@return #MANTIS self
--@usage Start up your MANTIS with a basic setting
--
@ -483,7 +486,7 @@ do
-- mybluemantis = MANTIS:New("bluemantis","Blue SAM","Blue EWR",nil,"blue",false,"Blue Awacs")
-- mybluemantis:Start()
--
function MANTIS:New(name,samprefix,ewrprefix,hq,coalition,dynamic,awacs, EmOnOff, Padding)
function MANTIS:New(name,samprefix,ewrprefix,hq,coalition,dynamic,awacs, EmOnOff, Padding, Zones)
-- DONE: Create some user functions for these
-- DONE: Make HQ useful
@ -544,6 +547,7 @@ do
self.maxclassic = 6
self.autoshorad = true
self.ShoradGroupSet = SET_GROUP:New() -- Core.Set#SET_GROUP
self.FilterZones = Zones
self.UseEmOnOff = true
if EmOnOff == false then
@ -593,16 +597,23 @@ do
self:T({self.ewr_templates})
self.SAM_Group = SET_GROUP:New():FilterPrefixes(self.SAM_Templates_Prefix):FilterCoalitions(self.Coalition)
self.EWR_Group = SET_GROUP:New():FilterPrefixes(self.ewr_templates):FilterCoalitions(self.Coalition)
if self.FilterZones then
self.SAM_Group:FilterZones(self.FilterZones)
end
if self.dynamic then
-- Set SAM SET_GROUP
self.SAM_Group = SET_GROUP:New():FilterPrefixes(self.SAM_Templates_Prefix):FilterCoalitions(self.Coalition):FilterStart()
self.SAM_Group:FilterStart()
-- Set EWR SET_GROUP
self.EWR_Group = SET_GROUP:New():FilterPrefixes(self.ewr_templates):FilterCoalitions(self.Coalition):FilterStart()
self.EWR_Group:FilterStart()
else
-- Set SAM SET_GROUP
self.SAM_Group = SET_GROUP:New():FilterPrefixes(self.SAM_Templates_Prefix):FilterCoalitions(self.Coalition):FilterOnce()
self.SAM_Group:FilterOnce()
-- Set EWR SET_GROUP
self.EWR_Group = SET_GROUP:New():FilterPrefixes(self.ewr_templates):FilterCoalitions(self.Coalition):FilterOnce()
self.EWR_Group:FilterOnce()
end
-- set up CC
@ -612,7 +623,7 @@ do
-- TODO Version
-- @field #string version
self.version="0.8.11"
self.version="0.8.14"
self:I(string.format("***** Starting MANTIS Version %s *****", self.version))
--- FSM Functions ---

View File

@ -2543,7 +2543,7 @@ function AIRBOSS:AddRecoveryWindow( starttime, stoptime, case, holdingoffset, tu
return self
end
if Tstop <= Tnow then
self:I( string.format( "WARNING: Recovery stop time %s already over. Tnow=%s! Recovery window rejected.", UTILS.SecondsToClock( Tstop ), UTILS.SecondsToClock( Tnow ) ) )
string.format( "WARNING: Recovery stop time %s already over. Tnow=%s! Recovery window rejected.", UTILS.SecondsToClock( Tstop ), UTILS.SecondsToClock( Tnow ) )
return self
end
@ -3258,7 +3258,7 @@ function AIRBOSS:SoundCheckLSO( delay )
end
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
end
end
@ -3293,7 +3293,7 @@ function AIRBOSS:SoundCheckMarshal( delay )
end
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
end
end
@ -3684,7 +3684,7 @@ function AIRBOSS:onafterStatus( From, Event, To )
if i == 0 then
text = text .. " none"
end
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Check for collision.
if collision then
@ -5459,6 +5459,7 @@ function AIRBOSS:_GetAircraftParameters( playerData, step )
local skyhawk = playerData.actype == AIRBOSS.AircraftCarrier.A4EC
local tomcat = playerData.actype == AIRBOSS.AircraftCarrier.F14A or playerData.actype == AIRBOSS.AircraftCarrier.F14B
local harrier = playerData.actype == AIRBOSS.AircraftCarrier.AV8B
local goshawk = playerData.actype == AIRBOSS.AircraftCarrier.T45C
-- Return values.
local alt
@ -5924,6 +5925,7 @@ function AIRBOSS:_ScanCarrierZone()
-- Get aircraft type name.
local actype = group:GetTypeName()
-- Create a new flight group
if knownflight then
-- Debug output.
@ -6958,7 +6960,7 @@ function AIRBOSS:_GetFreeStack( ai, case, empty )
end
self:I( self.lid .. string.format( "Returning free stack %s", tostring( nfree ) ) )
self:T( self.lid .. string.format( "Returning free stack %s", tostring( nfree ) ) )
return nfree
end
@ -7892,7 +7894,7 @@ function AIRBOSS:_RemoveFlight( flight, completely )
-- Remove player from players table.
local playerdata = self.players[flight.name]
if playerdata then
self:I( self.lid .. string.format( "Removing player %s completely.", flight.name ) )
self:T( self.lid .. string.format( "Removing player %s completely.", flight.name ) )
self.players[flight.name] = nil
end
@ -14756,38 +14758,43 @@ function AIRBOSS:RadioTransmission( radio, call, loud, delay, interval, click, p
if self:_IsOnboard( call.modexreceiver ) then
self:_Number2Radio( radio, call.modexreceiver, delay, 0.3, pilotcall )
end
-- Add transmission to the right queue.
local caller = ""
if radio.alias == "LSO" then
table.insert( self.RQLSO, transmission )
caller = "LSOCall"
-- Schedule radio queue checks.
if not self.RQLid then
self:T( self.lid .. string.format( "Starting LSO radio queue." ) )
self.RQLid = self.radiotimer:Schedule( nil, AIRBOSS._CheckRadioQueue, { self, self.RQLSO, "LSO" }, 0.02, 0.05 )
end
elseif radio.alias == "MARSHAL" then
table.insert( self.RQMarshal, transmission )
caller = "MarshalCall"
if not self.RQMid then
self:T( self.lid .. string.format( "Starting Marhal radio queue." ) )
self.RQMid = self.radiotimer:Schedule( nil, AIRBOSS._CheckRadioQueue, { self, self.RQMarshal, "MARSHAL" }, 0.02, 0.05 )
end
end
-- Append radio click sound at the end of the transmission.
if click then
self:RadioTransmission( radio, self[caller].CLICK, false, delay )
end
else
-- SRS transmission
if call.subtitle ~= nil and string.len(call.subtitle) > 1 then
else
-- SRS transmission
@ -14861,11 +14868,11 @@ function AIRBOSS:SetSRSPilotVoice( Voice, Gender, Culture )
self.PilotRadio.voice = Voice or MSRS.Voices.Microsoft.David
self.PilotRadio.gender = Gender or "male"
self.PilotRadio.culture = Culture or "en-US"
if (not Voice) and self.SRS and self.SRS.google then
self.PilotRadio.voice = MSRS.Voices.Google.Standard.en_US_Standard_J
end
return self
end
@ -15632,7 +15639,7 @@ function AIRBOSS:_LSOCallAircraftBall( modex, nickname, fuelstate )
local text = string.format( "%s Ball, %.1f.", nickname, fuelstate )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Nickname UPPERCASE.
local NICKNAME = nickname:upper()
@ -15668,7 +15675,7 @@ function AIRBOSS:_MarshalCallGasAtTanker( modex )
local text = string.format( "Bingo fuel! Going for gas at the recovery tanker." )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call to display complete subtitle.
@ -15692,7 +15699,7 @@ function AIRBOSS:_MarshalCallGasAtDivert( modex, divertname )
local text = string.format( "Bingo fuel! Going for gas at divert field %s.", divertname )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call to display complete subtitle.
local call = self:_NewRadioCall( self.PilotCall.BINGOFUEL, modex, text, self.Tmessage, nil, modex )
@ -15714,7 +15721,7 @@ function AIRBOSS:_MarshalCallRecoveryStopped( case )
local text = string.format( "Case %d recovery ops are stopped. Deck is closed.", case )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call to display complete subtitle.
local call = self:_NewRadioCall( self.MarshalCall.CASE, "AIRBOSS", text, self.Tmessage, "99" )
@ -15755,7 +15762,7 @@ function AIRBOSS:_MarshalCallRecoveryPausedResumedAt( clock )
local text = string.format( "aircraft recovery is paused and will be resumed at %s.", clock )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call with full subtitle.
local call = self:_NewRadioCall( self.MarshalCall.RECOVERYPAUSEDRESUMED, "AIRBOSS", text, self.Tmessage, "99" )
@ -15782,7 +15789,7 @@ function AIRBOSS:_MarshalCallClearedForRecovery( modex, case )
local text = string.format( "you're cleared for Case %d recovery.", case )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call with full subtitle.
local call = self:_NewRadioCall( self.MarshalCall.CLEAREDFORRECOVERY, "MARSHAL", text, self.Tmessage, modex )
@ -15820,7 +15827,7 @@ function AIRBOSS:_MarshalCallNewFinalBearing( FB )
local text = string.format( "new final bearing %03d°.", FB )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call with full subtitle.
local call = self:_NewRadioCall( self.MarshalCall.NEWFB, "AIRBOSS", text, self.Tmessage, "99" )
@ -15843,7 +15850,7 @@ function AIRBOSS:_MarshalCallCarrierTurnTo( hdg )
local text = string.format( "carrier is now starting turn to heading %03d°.", hdg )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call with full subtitle.
local call = self:_NewRadioCall( self.MarshalCall.CARRIERTURNTOHEADING, "AIRBOSS", text, self.Tmessage, "99" )
@ -15874,7 +15881,7 @@ function AIRBOSS:_MarshalCallStackFull( modex, nwaiting )
end
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call with full subtitle.
local call = self:_NewRadioCall( self.MarshalCall.STACKFULL, "AIRBOSS", text, self.Tmessage, modex )
@ -15945,7 +15952,7 @@ function AIRBOSS:_MarshalCallArrived( modex, case, brc, altitude, charlie, qfe )
local text = string.format( "Case %d, expected BRC %03d°, hold at angels %d. Expected Charlie Time %s. Altimeter %.2f. Report see me.", case, brc, angels, charlie, qfe )
-- Debug message.
self:I( self.lid .. text )
self:T( self.lid .. text )
-- Create new call to display complete subtitle.
local casecall = self:_NewRadioCall( self.MarshalCall.CASE, "MARSHAL", text, self.Tmessage, modex )

View File

@ -1312,8 +1312,11 @@ function AUFTRAG:NewCAP(ZoneCAP, Altitude, Speed, Coordinate, Heading, Leg, Targ
-- Ensure given TargetTypes parameter is a table.
TargetTypes=UTILS.EnsureTable(TargetTypes, true)
-- Set default altitude if not specified.
Altitude = Altitude or 10000
-- Create ORBIT first.
local mission=AUFTRAG:NewORBIT(Coordinate or ZoneCAP:GetCoordinate(), Altitude or 10000, Speed or 350, Heading, Leg)
local mission=AUFTRAG:NewORBIT(Coordinate or ZoneCAP:GetCoordinate(), Altitude, Speed or 350, Heading, Leg)
-- Mission type CAP.
mission.type=AUFTRAG.Type.CAP

View File

@ -9444,6 +9444,7 @@ function OPSGROUP:onafterLoading(From, Event, To)
local weight=nil
if cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
-- Get total weight of group.
weight=cargo.opsgroup:GetWeightTotal()
-- Find a carrier for this cargo.
@ -9582,8 +9583,10 @@ function OPSGROUP:onafterLoad(From, Event, To, CargoGroup, Carrier)
-- No carrier provided.
if not carrier then
-- Get total weight of group.
local weight=CargoGroup:GetWeightTotal()
-- Try to find a carrier manually.
carrier=self:FindCarrierForCargo(CargoGroup)
carrier=self:FindCarrierForCargo(weight)
end
if carrier then