From 7b9d8d375d3a7cc2b4e5defc7612fc66df9f5d68 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Fri, 3 Nov 2023 13:37:59 +0100 Subject: [PATCH 1/7] #SRS Improvements --- Moose Development/Moose/Core/Message.lua | 3 ++ Moose Development/Moose/Ops/CSAR.lua | 62 +++++++++++++++++------- Moose Development/Moose/Sound/SRS.lua | 35 +++++++------ 3 files changed, 69 insertions(+), 31 deletions(-) diff --git a/Moose Development/Moose/Core/Message.lua b/Moose Development/Moose/Core/Message.lua index 843f55d0b..ad4079bc0 100644 --- a/Moose Development/Moose/Core/Message.lua +++ b/Moose Development/Moose/Core/Message.lua @@ -521,6 +521,9 @@ end function MESSAGE:ToSRS(frequency,modulation,gender,culture,voice,coalition,volume,coordinate) if _MESSAGESRS.SRSQ then _MESSAGESRS.MSRS:SetVoice(voice or _MESSAGESRS.Voice) + if coordinate then + _MESSAGESRS.MSRS:SetCoordinate(coordinate) + end _MESSAGESRS.SRSQ:NewTransmission(self.MessageText,nil,_MESSAGESRS.MSRS,nil,nil,nil,nil,nil,frequency,modulation,gender or _MESSAGESRS.Gender,culture or _MESSAGESRS.Culture,voice or _MESSAGESRS.Voice,volume,self.MessageCategory) end return self diff --git a/Moose Development/Moose/Ops/CSAR.lua b/Moose Development/Moose/Ops/CSAR.lua index 0c1950e41..becdf6ec3 100644 --- a/Moose Development/Moose/Ops/CSAR.lua +++ b/Moose Development/Moose/Ops/CSAR.lua @@ -31,6 +31,7 @@ -- @image OPS_CSAR.jpg -- Date: May 2023 +-- Last: Update Oct 2024 ------------------------------------------------------------------------- --- **CSAR** class, extends Core.Base#BASE, Core.Fsm#FSM @@ -116,21 +117,21 @@ -- mycsar.ADFRadioPwr = 1000 -- ADF Beacons sending with 1KW as default -- mycsar.PilotWeight = 80 -- Loaded pilots weigh 80kgs each -- --- ## 2.1 Experimental Features +-- ## 2.1 SRS Features and Other Features -- --- WARNING - Here\'ll be dragons! --- DANGER - For this to work you need to de-sanitize your mission environment (all three entries) in \Scripts\MissionScripting.lua --- Needs SRS => 1.9.6 to work (works on the **server** side of SRS) -- mycsar.useSRS = false -- Set true to use FF\'s SRS integration -- mycsar.SRSPath = "C:\\Progra~1\\DCS-SimpleRadio-Standalone\\" -- adjust your own path in your SRS installation -- server(!) -- mycsar.SRSchannel = 300 -- radio channel -- mycsar.SRSModulation = radio.modulation.AM -- modulation -- mycsar.SRSport = 5002 -- and SRS Server port -- mycsar.SRSCulture = "en-GB" -- SRS voice culture --- mycsar.SRSVoice = nil -- SRS voice, relevant for Google TTS +-- mycsar.SRSVoice = nil -- SRS voice for downed pilot, relevant for Google TTS -- mycsar.SRSGPathToCredentials = nil -- Path to your Google credentials json file, set this if you want to use Google TTS -- mycsar.SRSVolume = 1 -- Volume, between 0 and 1 -- mycsar.SRSGender = "male" -- male or female voice +-- mycsar.CSARVoice = MSRS.Voices.Google.Standard.en_US_Standard_A -- SRS voice for CSAR Controller, relevant for Google TTS +-- mycsar.CSARVoiceMS = MSRS.Voices.Microsoft.Hedda -- SRS voice for CSAR Controller, relevant for MS Desktop TTS +-- mycsar.coordinate -- Coordinate from which CSAR TTS is sending. Defaults to a random MASH object position -- -- -- mycsar.csarUsePara = false -- If set to true, will use the LandingAfterEjection Event instead of Ejection. Requires mycsar.enableForAI to be set to true. --shagrat -- mycsar.wetfeettemplate = "man in floating thingy" -- if you use a mod to have a pilot in a rescue float, put the template name in here for wet feet spawns. Note: in conjunction with csarUsePara this might create dual ejected pilots in edge cases. @@ -230,7 +231,7 @@ CSAR = { takenOff = {}, csarUnits = {}, -- table of unit names downedPilots = {}, - woundedGroups = {}, + -- = {}, landedStatus = {}, addedTo = {}, woundedGroups = {}, -- contains the new group of units @@ -465,7 +466,10 @@ function CSAR:New(Coalition, Template, Alias) self.SRSGPathToCredentials = nil self.SRSVolume = 1.0 -- volume 0.0 to 1.0 self.SRSGender = "male" -- male or female - + self.CSARVoice = MSRS.Voices.Google.Standard.en_US_Standard_A + self.CSARVoiceMS = MSRS.Voices.Microsoft.Hedda + self.coordinate = nil -- Core.Point#COORDINATE + local AliaS = string.gsub(self.alias," ","_") self.filename = string.format("CSAR_%s_Persist.csv",AliaS) @@ -1306,7 +1310,7 @@ end -- @param #string UnitName -- @return #string CallSign function CSAR:_GetCustomCallSign(UnitName) - local callsign = Unitname + local callsign = UnitName local unit = UNIT:FindByName(UnitName) if unit and unit:IsAlive() then local group = unit:GetGroup() @@ -1737,7 +1741,16 @@ function CSAR:_DisplayMessageToSAR(_unit, _text, _time, _clear, _speak, _overrid end -- integrate SRS if _speak and self.useSRS then - self.SRSQueue:NewTransmission(_text,nil,self.msrs,nil,2) + local coord = _unit:GetCoordinate() + if coord then + self.msrs:SetCoordinate(coord) + end + _text = string.gsub(_text,"km"," kilometer") + _text = string.gsub(_text,"nm"," nautical miles") + --self.msrs:SetVoice(self.SRSVoice) + --self.SRSQueue:NewTransmission(_text,nil,self.msrs,nil,1) + self:I("Voice = "..self.SRSVoice) + self.SRSQueue:NewTransmission(_text,duration,self.msrs,tstart,2,subgroups,subtitle,subduration,self.SRSchannel,self.SRSModulation,gender,culture,self.SRSVoice,volume,label,coord) end return self end @@ -1876,7 +1889,7 @@ function CSAR:_SignalFlare(_unitName) if _closest ~= nil and _closest.pilot ~= nil and _closest.distance > 0 and _closest.distance < smokedist then local _clockDir = self:_GetClockDirection(_heli, _closest.pilot) - local _distance = 0 + local _distance = "" if _SETTINGS:IsImperial() then _distance = string.format("%.1fnm",UTILS.MetersToNM(_closest.distance)) else @@ -1889,12 +1902,13 @@ function CSAR:_SignalFlare(_unitName) _coord:FlareRed(_clockDir) else local _distance = smokedist + local dtext = "" if _SETTINGS:IsImperial() then - _distance = string.format("%.1fnm",UTILS.MetersToNM(smokedist)) + dtext = string.format("%.1fnm",UTILS.MetersToNM(smokedist)) else - _distance = string.format("%.1fkm",smokedist/1000) + dtext = string.format("%.1fkm",smokedist/1000) end - self:_DisplayMessageToSAR(_heli, string.format("No Pilots within %s",_distance), self.messageTime, false, false, true) + self:_DisplayMessageToSAR(_heli, string.format("No Pilots within %s",dtext), self.messageTime, false, false, true) end return self end @@ -1907,6 +1921,14 @@ end function CSAR:_DisplayToAllSAR(_message, _side, _messagetime) self:T(self.lid .. " _DisplayToAllSAR") local messagetime = _messagetime or self.messageTime + if self.msrs then + local voice = self.CSARVoice or MSRS.Voices.Google.Standard.en_GB_Standard_F + if self.msrs.google == nil then + voice = self.CSARVoiceMS or MSRS.Voices.Microsoft.Hedda + end + self:I("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 @@ -1930,7 +1952,7 @@ function CSAR:_Reqsmoke( _unitName ) local _closest = self:_GetClosestDownedPilot(_heli) if _closest ~= nil and _closest.pilot ~= nil and _closest.distance > 0 and _closest.distance < smokedist then local _clockDir = self:_GetClockDirection(_heli, _closest.pilot) - local _distance = 0 + local _distance = string.format("%.1fkm",_closest.distance/1000) if _SETTINGS:IsImperial() then _distance = string.format("%.1fnm",UTILS.MetersToNM(_closest.distance)) else @@ -1942,7 +1964,7 @@ function CSAR:_Reqsmoke( _unitName ) local color = self.smokecolor _coord:Smoke(color) else - local _distance = 0 + local _distance = string.format("%.1fkm",smokedist/1000) if _SETTINGS:IsImperial() then _distance = string.format("%.1fnm",UTILS.MetersToNM(smokedist)) else @@ -2267,6 +2289,12 @@ function CSAR:onafterStart(From, Event, To) self.allheligroupset = SET_GROUP:New():FilterCoalitions(self.coalitiontxt):FilterCategoryHelicopter():FilterStart() end self.mash = SET_GROUP:New():FilterCoalitions(self.coalitiontxt):FilterPrefixes(self.mashprefix):FilterStart() -- currently only GROUP objects, maybe support STATICs also? + if not self.coordinate then + local csarhq = self.mash:GetRandom() + if csarhq then + self.coordinate = csarhq:GetCoordinate() + end + end if self.wetfeettemplate then self.usewetfeet = true end @@ -2274,7 +2302,7 @@ function CSAR:onafterStart(From, Event, To) local path = self.SRSPath local modulation = self.SRSModulation local channel = self.SRSchannel - self.msrs = MSRS:New(path,channel,modulation) + self.msrs = MSRS:New(path,channel,modulation) -- Sound.SRS#MSRS self.msrs:SetPort(self.SRSport) self.msrs:SetLabel("CSAR") self.msrs:SetCulture(self.SRSCulture) @@ -2286,7 +2314,7 @@ function CSAR:onafterStart(From, Event, To) end self.msrs:SetVolume(self.SRSVolume) self.msrs:SetLabel("CSAR") - self.SRSQueue = MSRSQUEUE:New("CSAR") + self.SRSQueue = MSRSQUEUE:New("CSAR") -- Sound.SRS#MSRSQUEUE end self:__Status(-10) diff --git a/Moose Development/Moose/Sound/SRS.lua b/Moose Development/Moose/Sound/SRS.lua index b16bc01c9..57e3fddcc 100644 --- a/Moose Development/Moose/Sound/SRS.lua +++ b/Moose Development/Moose/Sound/SRS.lua @@ -195,7 +195,7 @@ MSRS = { --- MSRS class version. -- @field #string version -MSRS.version="0.1.4" +MSRS.version="0.1.2" --- Voices -- @type MSRS.Voices @@ -824,15 +824,16 @@ end -- @param #MSRS self -- @param #string Text Text message. -- @param #number Delay Delay in seconds, before the message is played. +-- @param Core.Point#COORDINATE Coordinate Coordinate. -- @return #MSRS self -function MSRS:PlayText(Text, Delay) +function MSRS:PlayText(Text, Delay, Coordinate) if Delay and Delay>0 then - self:ScheduleOnce(Delay, MSRS.PlayText, self, Text, 0) + self:ScheduleOnce(Delay, MSRS.PlayText, self, Text, nil, Coordinate) else -- Get command line. - local command=self:_GetCommand() + local command=self:_GetCommand(nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,Coordinate) -- Append text. command=command..string.format(" --text=\"%s\"", tostring(Text)) @@ -856,11 +857,12 @@ end -- @param #string Voice Voice. -- @param #number Volume Volume. -- @param #string Label Label. +-- @param Core.Point#COORDINATE Coordinate Coordinate. -- @return #MSRS self -function MSRS:PlayTextExt(Text, Delay, Frequencies, Modulations, Gender, Culture, Voice, Volume, Label) +function MSRS:PlayTextExt(Text, Delay, Frequencies, Modulations, Gender, Culture, Voice, Volume, Label, Coordinate) if Delay and Delay>0 then - self:ScheduleOnce(Delay, MSRS.PlayTextExt, self, Text, 0, Frequencies, Modulations, Gender, Culture, Voice, Volume, Label) + self:ScheduleOnce(Delay, MSRS.PlayTextExt, self, Text, 0, Frequencies, Modulations, Gender, Culture, Voice, Volume, Label, Coordinate) else -- Ensure table. @@ -874,7 +876,7 @@ function MSRS:PlayTextExt(Text, Delay, Frequencies, Modulations, Gender, Culture end -- Get command line. - local command=self:_GetCommand(Frequencies, Modulations, nil, Gender, Voice, Culture, Volume, nil, nil, Label) + local command=self:_GetCommand(Frequencies, Modulations, nil, Gender, Voice, Culture, Volume, nil, nil, Label, Coordinate) -- Append text. command=command..string.format(" --text=\"%s\"", tostring(Text)) @@ -1065,8 +1067,9 @@ end -- @param #number speed Speed. -- @param #number port Port. -- @param #string label Label, defaults to "ROBOT" (displayed sender name in the radio overlay of SRS) - No spaces allowed! +-- @param Core.Point#COORDINATE coordinate Coordinate. -- @return #string Command. -function MSRS:_GetCommand(freqs, modus, coal, gender, voice, culture, volume, speed, port,label) +function MSRS:_GetCommand(freqs, modus, coal, gender, voice, culture, volume, speed, port,label,coordinate) local path=self:GetPath() or STTS.DIRECTORY local exe=STTS.EXECUTABLE or "DCS-SR-ExternalAudio.exe" @@ -1080,6 +1083,7 @@ function MSRS:_GetCommand(freqs, modus, coal, gender, voice, culture, volume, sp speed=speed or self.speed port=port or self.port label=label or self.Label + coordinate=coordinate or self.coordinate -- Replace modulation modus=modus:gsub("0", "AM") @@ -1104,8 +1108,8 @@ function MSRS:_GetCommand(freqs, modus, coal, gender, voice, culture, volume, sp end -- Set coordinate. - if self.coordinate then - local lat,lon,alt=self:_GetLatLongAlt(self.coordinate) + if coordinate then + local lat,lon,alt=self:_GetLatLongAlt(coordinate) command=command..string.format(" -L %.4f -O %.4f -A %d", lat, lon, alt) end @@ -1667,6 +1671,7 @@ MSRSQUEUE = { -- @field #string voice Voice if any -- @field #number volume Volume -- @field #string label Label to be used +-- @field Core.Point#COORDINATE coordinate Coordinate for this transmission --- Create a new MSRSQUEUE object for a given radio frequency/modulation. -- @param #MSRSQUEUE self @@ -1751,8 +1756,9 @@ end -- @param #string voice Specific voice -- @param #number volume Volume setting -- @param #string label Label to be used +-- @param Core.Point#COORDINATE coordinate Coordinate to be used -- @return #MSRSQUEUE.Transmission Radio transmission table. -function MSRSQUEUE:NewTransmission(text, duration, msrs, tstart, interval, subgroups, subtitle, subduration, frequency, modulation, gender, culture, voice, volume, label) +function MSRSQUEUE:NewTransmission(text, duration, msrs, tstart, interval, subgroups, subtitle, subduration, frequency, modulation, gender, culture, voice, volume, label,coordinate) if self.TransmitOnlyWithPlayers then if self.PlayerSet and self.PlayerSet:CountAlive() == 0 then @@ -1792,7 +1798,8 @@ function MSRSQUEUE:NewTransmission(text, duration, msrs, tstart, interval, subgr transmission.voice = voice transmission.gender = volume transmission.label = label - + transmission.coordinate = coordinate + -- Add transmission to queue. self:AddTransmission(transmission) @@ -1805,9 +1812,9 @@ end function MSRSQUEUE:Broadcast(transmission) if transmission.frequency then - transmission.msrs:PlayTextExt(transmission.text, nil, transmission.frequency, transmission.modulation, transmission.gender, transmission.culture, transmission.voice, transmission.volume, transmission.label) + transmission.msrs:PlayTextExt(transmission.text, nil, transmission.frequency, transmission.modulation, transmission.gender, transmission.culture, transmission.voice, transmission.volume, transmission.label, transmission.coordinate) else - transmission.msrs:PlayText(transmission.text) + transmission.msrs:PlayText(transmission.text,nil,transmission.coordinate) end local function texttogroup(gid) From 5a583671a70b9df45015ba459dc5bf64c2d666d7 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Fri, 3 Nov 2023 13:38:37 +0100 Subject: [PATCH 2/7] #SRS - Improvements, set also a coordinate --- Moose Development/Moose/Ops/Airboss.lua | 81 ++++++++++----------- Moose Development/Moose/Ops/Awacs.lua | 13 +++- Moose Development/Moose/Ops/PlayerRecce.lua | 49 ++++++++++++- Moose Development/Moose/Ops/PlayerTask.lua | 10 ++- 4 files changed, 104 insertions(+), 49 deletions(-) diff --git a/Moose Development/Moose/Ops/Airboss.lua b/Moose Development/Moose/Ops/Airboss.lua index d7250de3e..efdbfbbb7 100644 --- a/Moose Development/Moose/Ops/Airboss.lua +++ b/Moose Development/Moose/Ops/Airboss.lua @@ -1730,10 +1730,10 @@ AIRBOSS.Difficulty = { -- @field #table trapsheet Groove data table recorded every 0.5 seconds. -- @field #boolean trapon If true, save trap sheets. -- @field #string debriefschedulerID Debrief scheduler ID. --- +-- -- @field Sound.SRS#MSRS SRS -- @field Sound.SRS#MSRSQUEUE SRSQ --- +-- -- @extends #AIRBOSS.FlightGroup --- Main group level radio menu: F10 Other/Airboss. @@ -1746,7 +1746,7 @@ AIRBOSS.MenuF10Root = nil --- Airboss class version. -- @field #string version -AIRBOSS.version = "1.3.2" +AIRBOSS.version = "1.3.3" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -3053,7 +3053,7 @@ end -- @param #number Port Port of the SRS server, defaults to 5002. -- @param #string Culture (Optional, Airboss Culture) Culture, defaults to "en-US". -- @param #string Gender (Optional, Airboss Gender) Gender, e.g. "male" or "female". Defaults to "male". --- @param #string Voice (Optional, Airboss Voice) Set to use a specific voice. Will **override gender and culture** settings. +-- @param #string Voice (Optional, Airboss Voice) Set to use a specific voice. Will **override gender and culture** settings. -- @param #string GoogleCreds (Optional) Path to Google credentials, e.g. "C:\\Program Files\\DCS-SimpleRadio-Standalone\\yourgooglekey.json". -- @param #number Volume (Optional) E.g. 0.75. Defaults to 1.0 (loudest). -- @param #table AltBackend (Optional) See MSRS for details. @@ -3071,6 +3071,7 @@ function AIRBOSS:EnableSRS(PathToSRS,Port,Culture,Gender,Voice,GoogleCreds,Volum self.SRS:SetPath(PathToSRS) self.SRS:SetPort(Port or 5002) self.SRS:SetLabel(self.AirbossRadio.alias or "AIRBOSS") + self.SRS:SetCoordinate(self.carrier:GetCoordinate()) --self.SRS:SetModulations(Modulations) if GoogleCreds then self.SRS:SetGoogle(GoogleCreds) @@ -3082,10 +3083,10 @@ function AIRBOSS:EnableSRS(PathToSRS,Port,Culture,Gender,Voice,GoogleCreds,Volum -- SRSQUEUE self.SRSQ = MSRSQUEUE:New("AIRBOSS") self.SRSQ:SetTransmitOnlyWithPlayers(true) - if not self.PilotRadio then + if not self.PilotRadio then self:SetSRSPilotVoice() end - return self + return self end --- Set LSO radio frequency and modulation. Default frequency is 264 MHz AM. @@ -10266,7 +10267,7 @@ function AIRBOSS:_GetSternCoord() elseif case==2 or case==1 then -- V/Stol: Translate 8 meters port. self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(8, FB-90, true, true) - end + end elseif self.carriertype==AIRBOSS.CarrierType.STENNIS then -- Stennis: translate 7 meters starboard wrt Final bearing. self.sterncoord:Translate( self.carrierparam.sterndist, hdg, true, true ):Translate( 7, FB + 90, true, true ) @@ -11553,7 +11554,7 @@ function AIRBOSS:GetHeadingIntoWind_old( magnetic, coord ) local function adjustDegreesForWindSpeed(windSpeed) local degreesAdjustment = 0 -- the windspeeds are in m/s - + -- +0 degrees at 15m/s = 37kts -- +0 degrees at 14m/s = 35kts -- +0 degrees at 13m/s = 33kts @@ -11568,7 +11569,7 @@ function AIRBOSS:GetHeadingIntoWind_old( magnetic, coord ) -- +20 degrees at 4m/s = 26kts -- +20 degrees at 3m/s = 26kts -- +30 degrees at 2m/s = 26kts 1s - + if windSpeed > 0 and windSpeed < 3 then degreesAdjustment = 30 elseif windSpeed >= 3 and windSpeed < 5 then @@ -11580,7 +11581,7 @@ function AIRBOSS:GetHeadingIntoWind_old( magnetic, coord ) elseif windSpeed >= 13 then degreesAdjustment = 0 end - + return degreesAdjustment end @@ -14824,12 +14825,12 @@ function AIRBOSS:RadioTransmission( radio, call, loud, delay, interval, click, p if radio == nil or call == nil then return end - + if not self.SRS then - + -- Create a new radio transmission item. local transmission = {} -- #AIRBOSS.Radioitem - + transmission.radio = radio transmission.call = call transmission.Tplay = timer.getAbsTime() + (delay or 0) @@ -14837,12 +14838,12 @@ function AIRBOSS:RadioTransmission( radio, call, loud, delay, interval, click, p transmission.isplaying = false transmission.Tstarted = nil transmission.loud = loud and call.loud - + -- Player onboard number if sender has one. if self:_IsOnboard( call.modexsender ) then self:_Number2Radio( radio, call.modexsender, delay, 0.3, pilotcall ) end - + -- Play onboard number if receiver has one. if self:_IsOnboard( call.modexreceiver ) then self:_Number2Radio( radio, call.modexreceiver, delay, 0.3, pilotcall ) @@ -14885,16 +14886,12 @@ function AIRBOSS:RadioTransmission( radio, call, loud, delay, interval, click, p -- SRS transmission if call.subtitle ~= nil and string.len(call.subtitle) > 1 then - - else - -- SRS transmission - local frequency = self.MarshalRadio.frequency local modulation = self.MarshalRadio.modulation local voice = nil local gender = nil local culture = nil - + if radio.alias == "AIRBOSS" then frequency = self.AirbossRadio.frequency modulation = self.AirbossRadio.modulation @@ -14902,13 +14899,13 @@ function AIRBOSS:RadioTransmission( radio, call, loud, delay, interval, click, p gender = self.AirbossRadio.gender culture = self.AirbossRadio.culture end - + if radio.alias == "MARSHAL" then voice = self.MarshalRadio.voice gender = self.MarshalRadio.gender culture = self.MarshalRadio.culture end - + if radio.alias == "LSO" then frequency = self.LSORadio.frequency modulation = self.LSORadio.modulation @@ -14916,7 +14913,7 @@ function AIRBOSS:RadioTransmission( radio, call, loud, delay, interval, click, p gender = self.LSORadio.gender culture = self.LSORadio.culture end - + if pilotcall then voice = self.PilotRadio.voice gender = self.PilotRadio.gender @@ -14930,18 +14927,18 @@ function AIRBOSS:RadioTransmission( radio, call, loud, delay, interval, click, p modulation = self.AirbossRadio.modulation radio.alias = "AIRBOSS" end - + local volume = nil - + if loud then volume = 1.0 end - + --local text = tostring(call.modexreceiver).."; "..radio.alias.."; "..call.subtitle local text = call.subtitle - self:I(self.lid..text) + self:T(self.lid..text) local srstext = self:_GetNiceSRSText(text) - self.SRSQ:NewTransmission(srstext, call.duration, self.SRS, tstart, 0.1, subgroups, call.subtitle, call.subduration, frequency, modulation, gender, culture, voice, volume, radio.alias) + self.SRSQ:NewTransmission(srstext, call.duration, self.SRS, nil, 0.1, nil, call.subtitle, call.subduration, frequency, modulation, gender, culture, voice, volume, radio.alias) end end end @@ -15254,7 +15251,7 @@ end -- @param #boolean clear If true, clear screen from previous messages. -- @param #number delay Delay in seconds, before the message is displayed. function AIRBOSS:MessageToPlayer( playerData, message, sender, receiver, duration, clear, delay ) - self:I({sender,receiver,message}) + self:T({sender,receiver,message}) if playerData and message and message ~= "" then -- Default duration. @@ -15277,44 +15274,44 @@ function AIRBOSS:MessageToPlayer( playerData, message, sender, receiver, duratio -- SCHEDULER:New(nil, self.MessageToPlayer, {self, playerData, message, sender, receiver, duration, clear}, delay) self:ScheduleOnce( delay, self.MessageToPlayer, self, playerData, message, sender, receiver, duration, clear ) else - + if not self.SRS then -- Wait until previous sound finished. local wait = 0 - + -- Onboard number to get the attention. if receiver == playerData.onboard then - + -- Which voice over number to use. if sender and (sender == "LSO" or sender == "MARSHAL" or sender == "AIRBOSS") then - + -- User sound of board number. wait = wait + self:_Number2Sound( playerData, sender, receiver ) - + end end - + -- Negative. if string.find( text:lower(), "negative" ) then local filename = self:_RadioFilename( self.MarshalCall.NEGATIVE, false, "MARSHAL" ) USERSOUND:New( filename ):ToGroup( playerData.group, wait ) wait = wait + self.MarshalCall.NEGATIVE.duration end - + -- Affirm. if string.find( text:lower(), "affirm" ) then local filename = self:_RadioFilename( self.MarshalCall.AFFIRMATIVE, false, "MARSHAL" ) USERSOUND:New( filename ):ToGroup( playerData.group, wait ) wait = wait + self.MarshalCall.AFFIRMATIVE.duration end - + -- Roger. if string.find( text:lower(), "roger" ) then local filename = self:_RadioFilename( self.MarshalCall.ROGER, false, "MARSHAL" ) USERSOUND:New( filename ):ToGroup( playerData.group, wait ) wait = wait + self.MarshalCall.ROGER.duration end - + -- Play click sound to end message. if wait > 0 then local filename = self:_RadioFilename( self.MarshalCall.CLICK ) @@ -15327,7 +15324,7 @@ function AIRBOSS:MessageToPlayer( playerData, message, sender, receiver, duratio local voice = self.MarshalRadio.voice local gender = self.MarshalRadio.gender local culture = self.MarshalRadio.culture - + if not sender then sender = "AIRBOSS" end if string.find(sender,"AIRBOSS" ) then @@ -15357,10 +15354,10 @@ function AIRBOSS:MessageToPlayer( playerData, message, sender, receiver, duratio --sender = "AIRBOSS" end - self:I(self.lid..text) - self:I({sender,frequency,modulation,voice}) + self:T(self.lid..text) + self:T({sender,frequency,modulation,voice}) local srstext = self:_GetNiceSRSText(text) - self.SRSQ:NewTransmission(srstext,duration,self.SRS,tstart,0.1,subgroups,subtitle,subduration,frequency,modulation,gender,culture,voice,volume,sender) + self.SRSQ:NewTransmission(srstext,duration,self.SRS,nil,0.1,nil,nil,nil,frequency,modulation,gender,culture,voice,nil,sender) end -- Text message to player client. if playerData.client then diff --git a/Moose Development/Moose/Ops/Awacs.lua b/Moose Development/Moose/Ops/Awacs.lua index 5bff6cc86..88569b7e1 100644 --- a/Moose Development/Moose/Ops/Awacs.lua +++ b/Moose Development/Moose/Ops/Awacs.lua @@ -507,7 +507,7 @@ do -- @field #AWACS AWACS = { ClassName = "AWACS", -- #string - version = "0.2.57", -- #string + version = "0.2.58", -- #string lid = "", -- #string coalition = coalition.side.BLUE, -- #number coalitiontxt = "blue", -- #string @@ -971,6 +971,7 @@ AWACS.TaskStatus = { -- DONE - (WIP) Reporting -- DONE - Do not report non-airborne groups -- DONE - Added option for helos +-- DONE - Added setting a coordinate for SRS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Constructor @@ -6191,6 +6192,16 @@ function AWACS:onafterStatus(From, Event, To) -- Check on AUFTRAG status for CAP AI if self:Is("Running") and (awacsalive or self.AwacsInZone) then + + -- update coord for SRS + + if self.AwacsSRS then + self.AwacsSRS:SetCoordinate(self.AwacsFG:GetCoordinate()) + if self.TacticalSRS then + self.TacticalSRS:SetCoordinate(self.AwacsFG:GetCoordinate()) + end + end + self:_CheckAICAPOnStation() self:_CleanUpContacts() diff --git a/Moose Development/Moose/Ops/PlayerRecce.lua b/Moose Development/Moose/Ops/PlayerRecce.lua index 120afb451..e225c96fe 100644 --- a/Moose Development/Moose/Ops/PlayerRecce.lua +++ b/Moose Development/Moose/Ops/PlayerRecce.lua @@ -104,7 +104,7 @@ PLAYERRECCE = { ClassName = "PLAYERRECCE", verbose = true, lid = nil, - version = "0.0.18", + version = "0.0.19", ViewZone = {}, ViewZoneVisual = {}, ViewZoneLaser = {}, @@ -1524,8 +1524,12 @@ function PLAYERRECCE:onafterRecceOnStation(From, Event, To, Client, Playername) end if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(text1,nil,self.SRS,nil,2) - self.SRSQueue:NewTransmission(text2tts,nil,self.SRS,nil,2) + self.SRSQueue:NewTransmission(text2tts,nil,self.SRS,nil,3) MESSAGE:New(text2,10,self.Name or "FACA"):ToCoalition(self.Coalition) else MESSAGE:New(text1,10,self.Name or "FACA"):ToClient(Client) @@ -1560,8 +1564,12 @@ function PLAYERRECCE:onafterRecceOffStation(From, Event, To, Client, Playername) local text1 = "Going home!" if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(text1,nil,self.SRS,nil,2) - self.SRSQueue:NewTransmission(texttts,nil,self.SRS,nil,2) + self.SRSQueue:NewTransmission(texttts,nil,self.SRS,nil,3) MESSAGE:New(text,10,self.Name or "FACA"):ToCoalition(self.Coalition) else MESSAGE:New(text,10,self.Name or "FACA"):ToCoalition(self.Coalition) @@ -1617,6 +1625,9 @@ function PLAYERRECCE:onafterTargetDetected(From, Event, To, Targetsbyclock, Clie local ttstext = string.format("Target! %s! %s oh clock, %d %s!", ThreatTxt, i, targetdistance, dunits) if self.UseSRS then local grp = Client:GetGroup() + if clientcoord then + self.SRS:SetCoordinate(clientcoord) + end self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,1,{grp},text,10) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) @@ -1653,6 +1664,10 @@ function PLAYERRECCE:onafterTargetDetected(From, Event, To, Targetsbyclock, Clie local ttstext = string.format("%d targets! %s oh clock, %d %s!", targetno, i, targetdistance, dunits) if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,1,{grp},text,10) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) @@ -1694,6 +1709,10 @@ function PLAYERRECCE:onafterIllumination(From, Event, To, Client, Playername, Ta local ttstext = "Sunshine!" if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,1,{grp},text,10) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) @@ -1733,6 +1752,10 @@ function PLAYERRECCE:onafterTargetsSmoked(From, Event, To, Client, Playername, T local ttstext = "Smoke and Mirrors!" if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,1,{grp},text,10) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) @@ -1772,6 +1795,10 @@ function PLAYERRECCE:onafterTargetsFlared(From, Event, To, Client, Playername, T local ttstext = "Fire works!" if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,1,{grp},text,10) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) @@ -1817,6 +1844,10 @@ function PLAYERRECCE:onafterTargetLasing(From, Event, To, Client, Target, Laserc local ttstext = "Laser on!" if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,1,{grp},text,10) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) @@ -1861,6 +1892,10 @@ function PLAYERRECCE:onafterShack(From, Event, To, Client, Target, Targettype) local ttstext = "Shack!" if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,1) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) @@ -1904,6 +1939,10 @@ function PLAYERRECCE:onafterTargetLOSLost(From, Event, To, Client, Target) local ttstext = "Lost L O S!" if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,1,{grp},text,10) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) @@ -1952,6 +1991,10 @@ function PLAYERRECCE:onafterTargetReportSent(From, Event, To, Client, TargetSet) local text = "Upload completed!" if self.UseSRS then local grp = Client:GetGroup() + local coord = grp:GetCoordinate() + if coord then + self.SRS:SetCoordinate(coord) + end self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,1,{grp},text,10) else MESSAGE:New(text,10,self.Name or "FACA"):ToClient(Client) diff --git a/Moose Development/Moose/Ops/PlayerTask.lua b/Moose Development/Moose/Ops/PlayerTask.lua index 71a680cb4..c840f5538 100644 --- a/Moose Development/Moose/Ops/PlayerTask.lua +++ b/Moose Development/Moose/Ops/PlayerTask.lua @@ -98,7 +98,7 @@ PLAYERTASK = { --- PLAYERTASK class version. -- @field #string version -PLAYERTASK.version="0.1.21" +PLAYERTASK.version="0.1.22" --- Generic task condition. -- @type PLAYERTASK.Condition @@ -935,7 +935,7 @@ end do ------------------------------------------------------------------------------------------------------------------- -- PLAYERTASKCONTROLLER --- TODO: PLAYERTASKCONTROLLER + -- TODO: PLAYERTASKCONTROLLER -- DONE Playername customized -- DONE Coalition-level screen info to SET based -- DONE Flash directions @@ -4003,8 +4003,9 @@ end -- Note that this must be installed on your windows system. Can also be Google voice types, if you are using Google TTS. -- @param #number Volume (Optional) Volume - between 0.0 (silent) and 1.0 (loudest) -- @param #string PathToGoogleKey (Optional) Path to your google key if you want to use google TTS +-- @param Core.Point#COORDINATE Coordinate Coordinate from which the controller radio is sending -- @return #PLAYERTASKCONTROLLER self -function PLAYERTASKCONTROLLER:SetSRS(Frequency,Modulation,PathToSRS,Gender,Culture,Port,Voice,Volume,PathToGoogleKey) +function PLAYERTASKCONTROLLER:SetSRS(Frequency,Modulation,PathToSRS,Gender,Culture,Port,Voice,Volume,PathToGoogleKey,Coordinate) self:T(self.lid.."SetSRS") self.PathToSRS = PathToSRS or "C:\\Program Files\\DCS-SimpleRadio-Standalone" -- self.Gender = Gender or "male" -- @@ -4029,6 +4030,9 @@ function PLAYERTASKCONTROLLER:SetSRS(Frequency,Modulation,PathToSRS,Gender,Cultu if self.PathToGoogleKey then self.SRS:SetGoogle(self.PathToGoogleKey) end + if Coordinate then + self.SRS:SetCoordinate(Coordinate) + end self.SRSQueue = MSRSQUEUE:New(self.MenuName or self.Name) self.SRSQueue:SetTransmitOnlyWithPlayers(self.TransmitOnlyWithPlayers) return self From f80265786d643d392e9795f549bd0a72aa54e907 Mon Sep 17 00:00:00 2001 From: kaltokri Date: Fri, 3 Nov 2023 15:52:53 +0100 Subject: [PATCH 3/7] Fix broken links SetEngageRange --- Moose Development/Moose/AI/AI_A2A_Cap.lua | 2 +- Moose Development/Moose/AI/AI_A2G_SEAD.lua | 2 +- Moose Development/Moose/AI/AI_Air_Patrol.lua | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/AI/AI_A2A_Cap.lua b/Moose Development/Moose/AI/AI_A2A_Cap.lua index 93db27a38..0c8aff8fa 100644 --- a/Moose Development/Moose/AI/AI_A2A_Cap.lua +++ b/Moose Development/Moose/AI/AI_A2A_Cap.lua @@ -82,7 +82,7 @@ -- that will define when the AI will engage with the detected airborne enemy targets. -- The range can be beyond or smaller than the range of the Patrol Zone. -- The range is applied at the position of the AI. --- Use the method @{AI_Air_Patrol#AI_AIR_PATROL.SetEngageRange}() to define that range. +-- Use the method @{#AI_A2A_CAP.SetEngageRange}() to define that range. -- -- ## 4. Set the Zone of Engagement -- diff --git a/Moose Development/Moose/AI/AI_A2G_SEAD.lua b/Moose Development/Moose/AI/AI_A2G_SEAD.lua index 14806c2e0..42662862c 100644 --- a/Moose Development/Moose/AI/AI_A2G_SEAD.lua +++ b/Moose Development/Moose/AI/AI_A2G_SEAD.lua @@ -44,7 +44,7 @@ -- that will define when the AI will engage with the detected airborne enemy targets. -- The range can be beyond or smaller than the range of the Patrol Zone. -- The range is applied at the position of the AI. --- Use the method @{AI_Air_Patrol#AI_AIR_PATROL.SetEngageRange}() to define that range. +-- Use the method @{#AI_AIR_PATROL.SetEngageRange}() to define that range. -- -- # Developer Note -- diff --git a/Moose Development/Moose/AI/AI_Air_Patrol.lua b/Moose Development/Moose/AI/AI_Air_Patrol.lua index 00fc7f2d0..3185f987e 100644 --- a/Moose Development/Moose/AI/AI_Air_Patrol.lua +++ b/Moose Development/Moose/AI/AI_Air_Patrol.lua @@ -79,7 +79,7 @@ -- that will define when the AI will engage with the detected airborne enemy targets. -- The range can be beyond or smaller than the range of the Patrol Zone. -- The range is applied at the position of the AI. --- Use the method @{AI.AI_CAP#AI_AIR_PATROL.SetEngageRange}() to define that range. +-- Use the method @{#AI_AIR_PATROL.SetEngageRange}() to define that range. -- -- # Developer Note -- From 9d500186d1131fec9f307c818c6855d033c7c06a Mon Sep 17 00:00:00 2001 From: kaltokri Date: Fri, 3 Nov 2023 16:33:45 +0100 Subject: [PATCH 4/7] Enhancement of build-docs to remove old files --- docker/build-docs/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/build-docs/start.sh b/docker/build-docs/start.sh index 4773540be..0ebbe62f4 100644 --- a/docker/build-docs/start.sh +++ b/docker/build-docs/start.sh @@ -4,6 +4,7 @@ cd /moose/ mkdir -p build/tools mkdir -p build/doc +rm -f build/doc/* # Checkout luadocumentor cd /moose/build/tools @@ -18,7 +19,6 @@ lua luadocumentor.lua -d /moose/build/doc '/moose/Moose Development/Moose' # Copy generated files in the MOOSE_DOCS repo if it is already there if [ -d /moose/build/MOOSE_DOCS/Documentation ]; then - rm -rf /moose/build/MOOSE_DOCS/Documentation - mkdir -p /moose/build/MOOSE_DOCS/Documentation + rm -f /moose/build/MOOSE_DOCS/Documentation/* cp /moose/build/doc/* /moose/build/MOOSE_DOCS/Documentation/ fi From 9d3cb4cc1b03793626cd656419935933c0eb3eb2 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Sun, 5 Nov 2023 13:01:27 +0100 Subject: [PATCH 5/7] #MESSAGE * SRS label correction --- Moose Development/Moose/Core/Message.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Moose Development/Moose/Core/Message.lua b/Moose Development/Moose/Core/Message.lua index ad4079bc0..39fb11060 100644 --- a/Moose Development/Moose/Core/Message.lua +++ b/Moose Development/Moose/Core/Message.lua @@ -524,7 +524,8 @@ function MESSAGE:ToSRS(frequency,modulation,gender,culture,voice,coalition,volum if coordinate then _MESSAGESRS.MSRS:SetCoordinate(coordinate) end - _MESSAGESRS.SRSQ:NewTransmission(self.MessageText,nil,_MESSAGESRS.MSRS,nil,nil,nil,nil,nil,frequency,modulation,gender or _MESSAGESRS.Gender,culture or _MESSAGESRS.Culture,voice or _MESSAGESRS.Voice,volume,self.MessageCategory) + local category = string.gsub(self.MessageCategory,":","") + _MESSAGESRS.SRSQ:NewTransmission(self.MessageText,nil,_MESSAGESRS.MSRS,nil,nil,nil,nil,nil,frequency,modulation,gender or _MESSAGESRS.Gender,culture or _MESSAGESRS.Culture,voice or _MESSAGESRS.Voice,volume,category,coordinate) end return self end From eed61191935078aaa7f035ccbee29768e1d4f10c Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Mon, 6 Nov 2023 18:36:02 +0100 Subject: [PATCH 6/7] #FLIGHTGROUP * Resolve a stalemate when all jobs are done but _CheckGroupDone isn't called any longer --- Moose Development/Moose/Ops/FlightGroup.lua | 24 +++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/Moose Development/Moose/Ops/FlightGroup.lua b/Moose Development/Moose/Ops/FlightGroup.lua index e203bbff3..ad115cdc2 100644 --- a/Moose Development/Moose/Ops/FlightGroup.lua +++ b/Moose Development/Moose/Ops/FlightGroup.lua @@ -216,7 +216,7 @@ FLIGHTGROUP.Players={} --- FLIGHTGROUP class version. -- @field #string version -FLIGHTGROUP.version="1.0.1" +FLIGHTGROUP.version="1.0.2" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list @@ -1256,21 +1256,21 @@ function FLIGHTGROUP:Status() -- Check damage. self:_CheckDamage() - + + -- Get current mission (if any). + local mission=self:GetMissionCurrent() + -- TODO: Check if group is waiting? if self:IsWaiting() then if self.Twaiting and self.dTwait then if timer.getAbsTime()>self.Twaiting+self.dTwait then --self.Twaiting=nil --self.dTwait=nil - --self:Cruise() + --self:_CheckGroupDone() end end end - -- Get current mission (if any). - local mission=self:GetMissionCurrent() - -- If mission, check if DCS task needs to be updated. if mission and mission.updateDCSTask then @@ -1363,7 +1363,7 @@ function FLIGHTGROUP:Status() else -- Check damage. - self:_CheckDamage() + self:_CheckDamage() end --- @@ -1617,9 +1617,15 @@ function FLIGHTGROUP:Status() --- self:_PrintTaskAndMissionStatus() - - -- Current mission. + + -- All done? + -- Get current mission (if any). local mission=self:GetMissionCurrent() + if not mission then + self.Twaiting=nil + self.dTwait=nil + self:_CheckGroupDone() + end end From fbf2c4c721cbcb2d637bf62017563ed6d04446d7 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 6 Nov 2023 22:01:05 +0100 Subject: [PATCH 7/7] Update Event.lua - Improved getCategory behaviour --- Moose Development/Moose/Core/Event.lua | 36 ++++++++++++++------------ 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Moose Development/Moose/Core/Event.lua b/Moose Development/Moose/Core/Event.lua index d057805f3..e767a36d1 100644 --- a/Moose Development/Moose/Core/Event.lua +++ b/Moose Development/Moose/Core/Event.lua @@ -1080,9 +1080,9 @@ function EVENT:onEvent( Event ) if Event.initiator then - Event.IniObjectCategory = Event.initiator:getCategory() + Event.IniObjectCategory = Object.getCategory(Event.initiator) --Event.initiator:getCategory() - if Event.IniObjectCategory == Object.Category.STATIC then + if Event.IniObjectCategory == Object.Category.STATIC then --- -- Static --- @@ -1118,10 +1118,9 @@ function EVENT:onEvent( Event ) local Unit=UNIT:FindByName(Event.IniDCSUnitName) if Unit then Event.IniObjectCategory = Object.Category.UNIT - end - end + end - if Event.IniObjectCategory == Object.Category.UNIT then + elseif Event.IniObjectCategory == Object.Category.UNIT then --- -- Unit --- @@ -1147,9 +1146,8 @@ function EVENT:onEvent( Event ) Event.IniCoalition = Event.IniDCSUnit:getCoalition() Event.IniTypeName = Event.IniDCSUnit:getTypeName() Event.IniCategory = Event.IniDCSUnit:getDesc().category - end - if Event.IniObjectCategory == Object.Category.CARGO then + elseif Event.IniObjectCategory == Object.Category.CARGO then --- -- Cargo --- @@ -1160,9 +1158,8 @@ function EVENT:onEvent( Event ) Event.IniCoalition = Event.IniDCSUnit:getCoalition() Event.IniCategory = Event.IniDCSUnit:getDesc().category Event.IniTypeName = Event.IniDCSUnit:getTypeName() - end - if Event.IniObjectCategory == Object.Category.SCENERY then + elseif Event.IniObjectCategory == Object.Category.SCENERY then --- -- Scenery --- @@ -1172,9 +1169,8 @@ function EVENT:onEvent( Event ) Event.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator ) Event.IniCategory = Event.IniDCSUnit:getDesc().category Event.IniTypeName = Event.initiator:isExist() and Event.IniDCSUnit:getTypeName() or "SCENERY" - end - if Event.IniObjectCategory == Object.Category.BASE then + elseif Event.IniObjectCategory == Object.Category.BASE then --- -- Base Object --- @@ -1201,9 +1197,12 @@ function EVENT:onEvent( Event ) --- -- Target category. - Event.TgtObjectCategory = Event.target:getCategory() + Event.TgtObjectCategory = Object.getCategory(Event.target) --Event.target:getCategory() if Event.TgtObjectCategory == Object.Category.UNIT then + --- + -- UNIT + --- Event.TgtDCSUnit = Event.target Event.TgtDCSGroup = Event.TgtDCSUnit:getGroup() Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() @@ -1219,10 +1218,11 @@ function EVENT:onEvent( Event ) Event.TgtCoalition = Event.TgtDCSUnit:getCoalition() Event.TgtCategory = Event.TgtDCSUnit:getDesc().category Event.TgtTypeName = Event.TgtDCSUnit:getTypeName() - end - if Event.TgtObjectCategory == Object.Category.STATIC then - -- get base data + elseif Event.TgtObjectCategory == Object.Category.STATIC then + --- + -- STATIC + --- Event.TgtDCSUnit = Event.target if Event.target:isExist() and Event.id ~= 33 then -- leave out ejected seat object Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() @@ -1249,9 +1249,11 @@ function EVENT:onEvent( Event ) Event.TgtTypeName = "Static" end end - end - if Event.TgtObjectCategory == Object.Category.SCENERY then + elseif Event.TgtObjectCategory == Object.Category.SCENERY then + --- + -- SCENERY + --- Event.TgtDCSUnit = Event.target Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() Event.TgtUnitName = Event.TgtDCSUnitName