diff --git a/Moose Development/Moose/Ops/CSAR.lua b/Moose Development/Moose/Ops/CSAR.lua
index f3484453d..e21824e7e 100644
--- a/Moose Development/Moose/Ops/CSAR.lua
+++ b/Moose Development/Moose/Ops/CSAR.lua
@@ -295,7 +295,7 @@ CSAR.AircraftType["OH-6A"] = 2
--- CSAR class version.
-- @field #string version
-CSAR.version="1.0.22"
+CSAR.version="1.0.23"
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- ToDo list
@@ -735,7 +735,7 @@ function CSAR:_SpawnPilotInField(country,point,frequency,wetfeet)
:NewWithAlias(template,alias)
:InitCoalition(coalition)
:InitCountry(country)
- :InitAIOnOff(pilotcacontrol)
+ --:InitAIOnOff(pilotcacontrol)
:InitDelayOff()
:SpawnFromCoordinate(point)
@@ -1239,10 +1239,24 @@ function CSAR:_InitSARForPilot(_downedGroup, _GroupName, _freq, _nomessage, _pla
if not _nomessage then
if _freq ~= 0 then --shagrat
local _text = string.format("%s requests SAR at %s, beacon at %.2f KHz", _groupName, _coordinatesText, _freqk)--shagrat _groupName to prevent 'f15_Pilot_Parachute'
- self:_DisplayToAllSAR(_text,self.coalition,self.messageTime)
+ if self.coordtype ~= 2 then --not MGRS
+ self:_DisplayToAllSAR(_text,self.coalition,self.messageTime)
+ else
+ self:_DisplayToAllSAR(_text,self.coalition,self.messageTime,false,true)
+ local coordtext = UTILS.MGRSStringToSRSFriendly(_coordinatesText,true)
+ local _text = string.format("%s requests SAR at %s, beacon at %.2f kilo hertz", _groupName, coordtext, _freqk)
+ self:_DisplayToAllSAR(_text,self.coalition,self.messageTime,true,false)
+ end
else --shagrat CASEVAC msg
local _text = string.format("Pickup Zone at %s.", _coordinatesText )
- self:_DisplayToAllSAR(_text,self.coalition,self.messageTime)
+ if self.coordtype ~= 2 then --not MGRS
+ self:_DisplayToAllSAR(_text,self.coalition,self.messageTime)
+ else
+ self:_DisplayToAllSAR(_text,self.coalition,self.messageTime,false,true)
+ local coordtext = UTILS.MGRSStringToSRSFriendly(_coordinatesText,true)
+ local _text = string.format("Pickup Zone at %s.", coordtext )
+ self:_DisplayToAllSAR(_text,self.coalition,self.messageTime,true,false)
+ end
end
end
@@ -1946,23 +1960,28 @@ end
--- (Internal) Display info to all SAR groups.
-- @param #CSAR self
-- @param #string _message Message to display.
--- @param #number _side Coalition of message.
+-- @param #number _side Coalition of message.
-- @param #number _messagetime How long to show.
-function CSAR:_DisplayToAllSAR(_message, _side, _messagetime)
+-- @param #boolean ToSRS If true or nil, send to SRS TTS
+-- @param #boolean ToScreen If true or nil, send to Screen
+function CSAR:_DisplayToAllSAR(_message, _side, _messagetime,ToSRS,ToScreen)
self:T(self.lid .. " _DisplayToAllSAR")
local messagetime = _messagetime or self.messageTime
- if self.msrs then
+ self:T({_message,ToSRS=ToSRS,ToScreen=ToScreen})
+ if self.msrs and (ToSRS == true or ToSRS == nil) then
local voice = self.CSARVoice or MSRS.Voices.Google.Standard.en_GB_Standard_F
if self.msrs:GetProvider() == MSRS.Provider.WINDOWS then
voice = self.CSARVoiceMS or MSRS.Voices.Microsoft.Hedda
end
- self:I("Voice = "..voice)
+ self:F("Voice = "..voice)
self.SRSQueue:NewTransmission(_message,duration,self.msrs,tstart,2,subgroups,subtitle,subduration,self.SRSchannel,self.SRSModulation,gender,culture,voice,volume,label,self.coordinate)
end
- for _, _unitName in pairs(self.csarUnits) do
- local _unit = self:_GetSARHeli(_unitName)
- if _unit and not self.suppressmessages then
- self:_DisplayMessageToSAR(_unit, _message, _messagetime)
+ if ToScreen == true or ToScreen == nil then
+ for _, _unitName in pairs(self.csarUnits) do
+ local _unit = self:_GetSARHeli(_unitName)
+ if _unit and not self.suppressmessages then
+ self:_DisplayMessageToSAR(_unit, _message, _messagetime)
+ end
end
end
return self
diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua
index 96cf8c1b4..9d5f40b94 100644
--- a/Moose Development/Moose/Utilities/Utils.lua
+++ b/Moose Development/Moose/Utilities/Utils.lua
@@ -2649,6 +2649,9 @@ function UTILS.SaveSetOfGroups(Set,Path,Filename,Structured)
if group and group:IsAlive() then
local name = group:GetName()
local template = string.gsub(name,"-(.+)$","")
+ if string.find(name,"AID") then
+ template = string.gsub(name,"(.AID.%d+$","")
+ end
if string.find(template,"#") then
template = string.gsub(name,"#(%d+)$","")
end
@@ -3881,3 +3884,46 @@ function UTILS.ClockHeadingString(refHdg,tgtHdg)
local clockPos = math.ceil((relativeAngle % 360) / 30)
return clockPos.." o'clock"
end
+
+--- Get a NATO abbreviated MGRS text for SRS use, optionally with prosody slow tag
+-- @param #string Text The input string, e.g. "MGRS 4Q FJ 12345 67890"
+-- @param #boolean Slow Optional - add slow tags
+-- @return #string Output for (Slow) spelling in SRS TTS e.g. "MGRS;4;Quebec;Foxtrot;Juliett;1;2;3;4;5;6;7;8;niner;zero;"
+function UTILS.MGRSStringToSRSFriendly(Text,Slow)
+ local Text = string.gsub(Text,"MGRS ","")
+ Text = string.gsub(Text,"%s+","")
+ Text = string.gsub(Text,"([%a%d])","%1;") -- "0;5;1;"
+ Text = string.gsub(Text,"A","Alpha")
+ Text = string.gsub(Text,"B","Bravo")
+ Text = string.gsub(Text,"C","Charlie")
+ Text = string.gsub(Text,"D","Delta")
+ Text = string.gsub(Text,"E","Echo")
+ Text = string.gsub(Text,"F","Foxtrot")
+ Text = string.gsub(Text,"G","Golf")
+ Text = string.gsub(Text,"H","Hotel")
+ Text = string.gsub(Text,"I","India")
+ Text = string.gsub(Text,"J","Juliett")
+ Text = string.gsub(Text,"K","Kilo")
+ Text = string.gsub(Text,"L","Lima")
+ Text = string.gsub(Text,"M","Mike")
+ Text = string.gsub(Text,"N","November")
+ Text = string.gsub(Text,"O","Oscar")
+ Text = string.gsub(Text,"P","Papa")
+ Text = string.gsub(Text,"Q","Quebec")
+ Text = string.gsub(Text,"R","Romeo")
+ Text = string.gsub(Text,"S","Sierra")
+ Text = string.gsub(Text,"T","Tango")
+ Text = string.gsub(Text,"U","Uniform")
+ Text = string.gsub(Text,"V","Victor")
+ Text = string.gsub(Text,"W","Whiskey")
+ Text = string.gsub(Text,"X","Xray")
+ Text = string.gsub(Text,"Y","Yankee")
+ Text = string.gsub(Text,"Z","Zulu")
+ Text = string.gsub(Text,"0","zero")
+ Text = string.gsub(Text,"9","niner")
+ if Slow then
+ Text = ''..Text..''
+ end
+ Text = "MGRS;"..Text
+ return Text
+end