From 9520b76246809715b38a49c03bdf70bd15c8d17f Mon Sep 17 00:00:00 2001 From: Taco <60745928+StillClock1@users.noreply.github.com> Date: Sun, 9 Nov 2025 22:21:04 -0500 Subject: [PATCH] =?UTF-8?q?Updated=20soundhandler=20with=20mirror=20perfor?= =?UTF-8?q?mance=20for=20Red=20and=20Blue=20Clients=E2=80=A6=20(#575)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MooseSoundhandler/Plugin_Soundhandler.lua | 1448 ++++++++--------- .../SoundFiles/Guns_Break_Left.ogg | Bin 0 -> 33968 bytes .../SoundFiles/Guns_Break_Right.ogg | Bin 0 -> 50788 bytes .../SoundFiles/StartFindingMeBoys.ogg | Bin 0 -> 75255 bytes .../MooseSoundhandler/Soundhandler-config.lua | 20 - .../plugins/MooseSoundhandler/plugin.json | 24 +- 6 files changed, 713 insertions(+), 779 deletions(-) create mode 100644 resources/plugins/MooseSoundhandler/SoundFiles/Guns_Break_Left.ogg create mode 100644 resources/plugins/MooseSoundhandler/SoundFiles/Guns_Break_Right.ogg create mode 100644 resources/plugins/MooseSoundhandler/SoundFiles/StartFindingMeBoys.ogg delete mode 100644 resources/plugins/MooseSoundhandler/Soundhandler-config.lua diff --git a/resources/plugins/MooseSoundhandler/Plugin_Soundhandler.lua b/resources/plugins/MooseSoundhandler/Plugin_Soundhandler.lua index ae4d6c00..319b6c6b 100644 --- a/resources/plugins/MooseSoundhandler/Plugin_Soundhandler.lua +++ b/resources/plugins/MooseSoundhandler/Plugin_Soundhandler.lua @@ -1,833 +1,791 @@ --- Do not edit this line or the following line --- assert(loadfile("C:\\Users\\Taco\\Documents\\Github\\SoundHandler\\SoundHandlerByTaco.lua"))() -MESSAGE:New("*SOUNDHANDLER 0.1 LOADING*", 5, "MISSION", false):ToAll():ToLog() - -Soundhandler_options = { - ["SoundsToGroupOnly"] = true, - ["ShipSamSounds"] = false, - ["RedShootingSounds"] = true, - ["Debug"] = false -} - +env.info("-----DCSRetribution|MOOSE Soundhandler plugin - configuration start -----") +-- assert(loadfile("C:\\Users\\Taco\\Documents\\Github\\DCS\\Custom_Retribution\\Plugins\\MooseSoundhandler\\Plugin_Soundhandler.lua"))() ----------------------------------------------------------------------------------------------------------------------------------- --- USER SETTINGS +-- CONFIG ----------------------------------------------------------------------------------------------------------------------------------- --- On/Off? -SoundHandler = true --- Do you want ALL Clients to hear sounds, or only those associated with the sound event? -SoundOnlyToGroup = Soundhandler_options - .SoundsToGroupOnly -- true means only the affected group will hear the sound. False will play to all. If no valid group is associated with the EVENT, sound will play to all. --- Quick fix: SAMs and Red Missiles will play to Target Group ONLY +-- Defaults (overridden by dcsRetribution.plugins.MooseSoundhandler.* if present) +SoundToGroupOnly = true +ShipSamSounds = true +PlayOwnShootingGuns = true +PlayOpForShootingGuns = true +SoundDebug = true +SoundHandler = true -- Not a UI setting, but an On/Off switch mid-mission. --- Do you want ship firing SAMs to play SAM Sounds? -ShipSamSounds = Soundhandler_options.ShipSamSounds -- true means they will play sounds with each missile launched +if dcsRetribution and dcsRetribution.plugins and dcsRetribution.plugins.MooseSoundhandler then + -- Use externally provided settings, preserving original field names + if dcsRetribution.plugins.MooseSoundhandler.SoundToGroupOnly ~= nil then + SoundToGroupOnly = dcsRetribution.plugins.MooseSoundhandler.SoundToGroupOnly + end + if dcsRetribution.plugins.MooseSoundhandler.ShipSamSounds ~= nil then + ShipSamSounds = dcsRetribution.plugins.MooseSoundhandler.ShipSamSounds + end + if dcsRetribution.plugins.MooseSoundhandler.PlayOwnShootingGuns ~= nil then + PlayOwnShootingGuns = dcsRetribution.plugins.MooseSoundhandler.PlayOwnShootingGuns + end + if dcsRetribution.plugins.MooseSoundhandler.PlayOpForShootingGuns ~= nil then + PlayOpForShootingGuns = dcsRetribution.plugins.MooseSoundhandler.PlayOpForShootingGuns + end + if dcsRetribution.plugins.MooseSoundhandler.SoundDebug ~= nil then + SoundDebug = dcsRetribution.plugins.MooseSoundhandler.SoundDebug + end +else + env.info("-----dcsRetribution.plugins.MooseSoundhandler NOT FOUND") +end --- Do you want red airplanes to play sounds when they fire their gun cannons? -PlayRedShootingGuns = Soundhandler_options.RedShootingSounds -- true means they will play sounds with each gun burst - ------------------------------------------------------------------------------------------------------------------------------------ --- DEBUG ------------------------------------------------------------------------------------------------------------------------------------ -SoundDebug = Soundhandler_options.Debug -- Will enable messages on-screen and in log +env.info("--------- SoundToGroupOnly=" .. tostring(SoundToGroupOnly) .. + " | ShipSamSounds=" .. tostring(ShipSamSounds) .. + " | PlayOwnShootingGuns=" .. tostring(PlayOwnShootingGuns) .. + " | PlayOpForShootingGuns=" .. tostring(PlayOpForShootingGuns) .. + " | Debug=" .. tostring(SoundDebug)) if SoundDebug then trigger.action.outText("---SOUND DEBUG IS ON!---", 10) + trigger.action.outText("Soundhandler " .. (SoundHandler and "ON" or "OFF"), 10) + trigger.action.outText("Sounds will play to " .. (SoundToGroupOnly and "GROUP only" or "ALL clients in coalition"), + 10) + trigger.action.outText("Ships firing SAMs will " .. (ShipSamSounds and "" or "NOT ") .. "play sounds", 10) + trigger.action.outText("Own Airplane Gun Bursts will " .. (PlayOwnShootingGuns and "" or "NOT ") .. "play sounds", 10) + trigger.action.outText( + "OpFor Airplane Gun Bursts will " .. (PlayOpForShootingGuns and "" or "NOT ") .. "play sounds", 10) +end - if SoundHandler then - trigger.action.outText("Soundhandler ON!", 10) - else - trigger.action.outText("Soundhandler OFF!", 10) - end - - if SoundOnlyToGroup then - trigger.action.outText("Sounds will only play to the involved GROUP", 10) - else - trigger.action.outText("Sounds will play to ALL Clients", 10) - end - - if ShipSamSounds then - trigger.action.outText("Ships firing SAMs will play sounds", 10) - else - trigger.action.outText("Ships firing SAMs will NOT play sounds", 10) - end - - if PlayRedShootingGuns then - trigger.action.outText("Red Airplane Gun Bursts will play sounds", 10) - else - trigger.action.outText("Red Airplane Gun Bursts will NOT play sounds", 10) +----------------------------------------------------------------------------------------------------------------------------------- +-- SOUND DATA +----------------------------------------------------------------------------------------------------------------------------------- +SoundFilePath = SoundFilePath or "" +if SoundFilePath ~= "" then + local last = SoundFilePath:sub(-1) + if last ~= "/" and last ~= "\\" then + SoundFilePath = SoundFilePath .. "/" end end --- Debug output to DCS log -env.info("--------- SoundsToGroupOnly=" .. tostring(SoundOnlyToGroup) .. - " | ShipSamSounds=" .. tostring(ShipSamSounds) .. - " | RedShootingSounds=" .. tostring(PlayRedShootingGuns) .. - " | Debug=" .. tostring(SoundDebug)) - ------------------------------------------------------------------------------------------------------------------------------------ --- SOUNDS FILEPATH ------------------------------------------------------------------------------------------------------------------------------------ -SoundFilePath = "" ------------------------------------------------------------------------------------------------------------------------------------ --- SOUND FILES ------------------------------------------------------------------------------------------------------------------------------------ --- Global Sound Tables (make sure you have all these files, named exactly like these, loaded into the .mix file) -Sounds = {} --- A2A Kill Sound Table -Sounds.Air_Unit_Sound_Table = { "AAGoodKill", "AAKill4", "AAKillGoodhiton1", "AAKillSplash", "AAKillSplashone", +Sounds = {} +Sounds.Air_Unit_Sound_Table = { "AAGoodKill", "AAKill4", "AAKillGoodhiton1", "AAKillSplash", "AAKillSplashone", "AASplashOne", "AASplashOne_2" } --- Red Jet Missile Sound Table -Sounds.RedMissile_Sound_Table = { "Misil1", "Misil2", "Misil3", "Misil4", "Misil5", "Misil6" } --- Red Ground Unit Dead Sound Table +Sounds.Incoming_Missile_Table = { "Misil1", "Misil2", "Misil3", "Misil4", "Misil5", "Misil6" } Sounds.Ground_Unit_Sound_Table = { "AGKillBOOM1", "AGKillCOMEONBABY", "AGKillGoodBOOM", "AGKillSeeTheSmoke", "AGKill_TARGET_DESTROYED", "AGKillBeautiful_beautiful", "AGKillMotherFucker" } --- SAM Sound Table -Sounds.SamSoundTable = { "SAM1", "SAM2", "SAM3", "SAM4", "SAM5", "SAM6", "SAM7", "Defending", "Singer" } --- Balistic Missile Launch Table -Sounds.Ballistic = { "SCUD_Long", "Fireball" } --- AGM_154 Sound Table -Sounds.PigsAway_Sound_Table = { "PigsAway", "PigsAway2" } --- Paveway_Sound_Table for LGBs -Sounds.Paveway_Sound_Table = { "Paveway" } --- Bruiser Sound Table for Harpoons -Sounds.Bruiser_Sound_Table = { "Bruiser", "Bruiser2", "Bruiser3" } --- Fox 2 Sound Table -Sounds.Fox2_Sound_Table = { "Fox2A", "Fox2B", "Fox2C", "Fox2D", "Fox2E" } --- Fox 3 Sound Table -Sounds.Fox3_Sound_Table = { "Fox3A", "Fox3B", "Fox3C", "Fox3D", "Fox3E", "Fox3F" } --- Fox 1 Sound Table -Sounds.Fox1_Sound_Table = { "Fox1A", "Fox1B" } --- Magnum Sound Table -Sounds.Magnum_Sound_Table = { "Magnum", "Magnum2" } --- Rifle Sound Table -Sounds.Rifle_Sound_Table = { "RifleA", "RifleB", "RifleC", "RifleD", "RifleE" } --- Pickle Sound Table -Sounds.Pickle_Sound_Table = { "Pickle1", "Pickle2", "Pickle3", "Pickle4", "Pickle5", "Pickle6", "Pickle7" } --- Blue Air Unit Dead Sound Table -Sounds.Blue_Air_Unit_Sound_Table = { "OhJesus", "SOS_Beacon", "HitEjecting1", "HitEjecting2", "HitEjecting3" } -- just for fun --- Blue Guns Sounds -Sounds.Blue_Guns_Table = { "BlueGuns1", "BlueGuns2", "BlueGuns3" } --- Red Guns Sounds -Sounds.Red_Guns_Table = { "Guns_Break_Right", "Guns_Break_Left" } --- Blue Decoy Sounds -Sounds.Decoy_Table = { "A2G_Duck1" } --- Blue Cruise Missile Sounds -Sounds.CruiseMissile_Table = { "A2G_Greyhound1" } --- Red Anti-Ship Missile Sounds -Sounds.Vampires_Table = { "A2G_Vampires1" } --- Blue Tomahawk/Ship-Launched Cruise Missile Sounds -Sounds.Tomahawk_Table = { "S2G_Tomahawk1" } --- Friendly Fire Sounds -Sounds.Friendly_Fire_Table = { "FriendlyFire1", "FriendlyFire2" } --- Friendly SAM Sounds -Sounds.Friendly_SAM_Table = { "BirdsAway" } +Sounds.SamSoundTable = { "SAM1", "SAM2", "SAM3", "SAM4", "SAM5", "SAM6", "SAM7", "Defending" } +Sounds.Ballistic = { "SCUD_Long", "Fireball" } +Sounds.PigsAway_Sound_Table = { "PigsAway", "PigsAway2" } +Sounds.Paveway_Sound_Table = { "Paveway" } +Sounds.Bruiser_Sound_Table = { "Bruiser", "Bruiser2", "Bruiser3" } +Sounds.Fox2_Sound_Table = { "Fox2A", "Fox2B", "Fox2C", "Fox2D", "Fox2E" } +Sounds.Fox3_Sound_Table = { "Fox3A", "Fox3B", "Fox3C", "Fox3D", "Fox3E", "Fox3F" } +Sounds.Fox1_Sound_Table = { "Fox1A", "Fox1B" } +Sounds.Magnum_Sound_Table = { "Magnum", "Magnum2" } +Sounds.Rifle_Sound_Table = { "RifleA", "RifleB", "RifleC", "RifleD", "RifleE" } +Sounds.Pickle_Sound_Table = { "Pickle1", "Pickle2", "Pickle3", "Pickle4", "Pickle5", "Pickle6", "Pickle7" } +Sounds.FriendlyLosses = { "OhJesus", "HitEjecting1", "HitEjecting2", "HitEjecting3", "StartFindingMeBoys" } +Sounds.Guns_OwnFire = { "BlueGuns1", "BlueGuns2", "BlueGuns3" } +Sounds.Guns_Incoming = { "Guns_Break_Right", "Guns_Break_Left" } +Sounds.Decoy_Table = { "A2G_Duck1" } +Sounds.CruiseMissile_Table = { "A2G_Greyhound1" } +Sounds.Vampires_Table = { "A2G_Vampires1" } -- anti-ship call +Sounds.Tomahawk_Table = { "S2G_Tomahawk1" } +Sounds.Friendly_Fire_Table = { "FriendlyFire1", "FriendlyFire2" } +Sounds.Friendly_SAM_Table = { "BirdsAway" } ------------------------------------------------------------------------------------------------------------------------------------ --- PRINT SOUNDS ------------------------------------------------------------------------------------------------------------------------------------ if SoundDebug then for _, tbl in pairs(Sounds) do local txt = UTILS.OneLineSerialize(tbl) - env.info("EventData Debug: " .. txt) + env.info("Sounds Loaded: " .. txt) trigger.action.outText("Sounds Loaded: " .. txt, 10) end end +----------------------------------------------------------------------------------------------------------------------------------- +-- HELPERS +----------------------------------------------------------------------------------------------------------------------------------- +local BLUE, RED = coalition.side.BLUE, coalition.side.RED + +local function Opposing(side) + if side == BLUE then return RED end + if side == RED then return BLUE end + return side +end + +local function ChooseRandom(t) return t[math.random(1, #t)] end + +-- === DROP-IN: NewSound (no filesystem check; works with mission-embedded sounds) === +local function NewSound(nameNoExt) + local full = SoundFilePath .. nameNoExt .. ".ogg" + if SoundDebug then env.info("[SND] NewSound: " .. tostring(full)) end + return USERSOUND:New(full) +end + +-- === DROP-IN: PlayToGroupOrCoalition (robust group canonization; no mirror re-load) === +-- Signature: PlayToGroupOrCoalition(soundObj, groupObj, coalitionSide) +local function PlayToGroupOrCoalition(soundObj, groupObj, coalitionSide) + if not soundObj then + if SoundDebug then env.info("[SND] Play aborted: soundObj is nil") end + return + end + + -- Re-resolve the group by name to avoid stale wrapper instances. + local canonGroup = nil + if groupObj and groupObj.GetName then + local gname = groupObj:GetName() + if gname then canonGroup = GROUP:FindByName(gname) end + end + + -- Preferred path: play to group when toggled and group exists + if SoundToGroupOnly and canonGroup then + if SoundDebug then + local dcs = canonGroup.GetDCSObject and canonGroup:GetDCSObject() or nil + local gid = dcs and dcs:getID() or "?" + env.info(string.format("[SND] ToGroup '%s' (id=%s)", tostring(canonGroup:GetName()), tostring(gid))) + end + soundObj:ToGroup(canonGroup) + return + end + + -- Coalition fallback + if coalitionSide then + if SoundDebug then + env.info(string.format("[SND] ToCoalition side=%s (group-only=%s, group=%s)", + tostring(coalitionSide), tostring(SoundToGroupOnly), + tostring(canonGroup and canonGroup:GetName() or "nil"))) + end + soundObj:ToCoalition(coalitionSide) + return + end + + if SoundDebug then env.info("[SND] Play aborted: no valid group and no coalitionSide") end +end + ----------------------------------------------------------------------------------------------------------------------------------- -- EVENT HANDLERS ----------------------------------------------------------------------------------------------------------------------------------- - EventHandler = EVENTHANDLER:New() EventHandler:HandleEvent(EVENTS.Shot) EventHandler:HandleEvent(EVENTS.Kill) EventHandler:HandleEvent(EVENTS.Dead) ----------------------------------------------------------------------------------------------------------------------------------- --- KILL EVENTS +-- KILL EVENTS (FULLY MIRRORED, nil-safe) ----------------------------------------------------------------------------------------------------------------------------------- function EventHandler:OnEventKill(EventData) - -- UTILS.PrintTableToLog(EventData) + if not SoundHandler then return end + if SoundDebug then + BASE:I("---------KILL DETECTED----------"); BASE:I(EventData) + end + if SoundDebug then LogKillEvent(EventData) end - if SoundHandler then - if SoundDebug then - BASE:I("---------KILL DETECTED: EVALUATING FOR COALITION & TYPE----------") - BASE:I(EventData) + local iniSide = EventData.IniCoalition + local tgtSide = EventData.TgtCoalition + local iniGroup = EventData.IniGroup + local iniGroupName = EventData.IniGroupName + + -- 1) A2A kill by an airplane → killer hears A2A “good kill” + local gA2A = iniGroupName and GROUP:FindByName(iniGroupName) or nil + if (EventData.TgtCategory == 0 or EventData.TgtCategory == 1) + and EventData.TgtObjectCategory == 1 + and gA2A and gA2A.IsAirPlane and gA2A:IsAirPlane() then + local s = ChooseRandom(Sounds.Air_Unit_Sound_Table) + PlayToGroupOrCoalition(NewSound(s), iniGroup, iniSide) + end + + -- 2) A2G kill (ground unit killed by airplane) → killer hears ground kill + local gA2G = iniGroupName and GROUP:FindByName(iniGroupName) or nil + if gA2G and gA2G.IsAirPlane and gA2G:IsAirPlane() + and EventData.TgtCategory == 2 and EventData.TgtObjectCategory == 1 + and iniSide ~= tgtSide then + local s = ChooseRandom(Sounds.Ground_Unit_Sound_Table) + PlayToGroupOrCoalition(NewSound(s), iniGroup, iniSide) + end + + -- 3) Ship killed by airplane → killer hears ground/ship kill + local gShip = iniGroupName and GROUP:FindByName(iniGroupName) or nil + if gShip and gShip.IsAirPlane and gShip:IsAirPlane() + and EventData.TgtCategory == 3 and EventData.TgtObjectCategory == 1 then + local s = ChooseRandom(Sounds.Ground_Unit_Sound_Table) + PlayToGroupOrCoalition(NewSound(s), iniGroup, iniSide) + end + + -- 4) Friendly aircraft loss: only if a CLIENT aircraft is killed + if EventData.TgtCategory == 0 and EventData.TgtUnitName then + local tgtClient = CLIENT:FindByName(EventData.TgtUnitName) + if tgtClient then + local s = ChooseRandom(Sounds.FriendlyLosses) + NewSound(s):ToCoalition(tgtSide) end + end - -- KILL SECTION (BLUE KILLS RED) - if EventData.IniCoalition == coalition.side.BLUE or EventData.TgtCoalition == coalition.side.RED then - if SoundDebug then BASE:I("BLUE UNIT KILLED RED...") end - if (EventData.TgtCategory == 0 or EventData.TgtCategory == 1) and EventData.TgtObjectCategory == 1 and - GROUP:FindByName(EventData.IniGroupName):IsAirPlane() then -- 0 is plane, 1 is helo https://wiki.hoggitworld.com/view/DCS_Class_Unit - if SoundDebug then BASE:I("...AIRPLANE") end - - random_Air_Unit_Sound = Sounds.Air_Unit_Sound_Table[math.random(1, #Sounds.Air_Unit_Sound_Table)] - local Air_Unit_Sound_Ogg = random_Air_Unit_Sound .. ".ogg" - -- Sound Chosen - RedA2ASound = USERSOUND:New(SoundFilePath .. Air_Unit_Sound_Ogg) - -- Determine who to play sound to - if EventData.IniGroup and SoundOnlyToGroup then - local SoundGroup = EventData.IniGroup - if SoundDebug then - BASE:I("-----SOUNDFILE PLAYED is " .. - random_Air_Unit_Sound .. " TO " .. SoundGroup:GetName()) - end - RedA2ASound:ToGroup(SoundGroup) - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Air_Unit_Sound .. " TO " .. - SoundGroup:GetName(), 10) - end - else - RedA2ASound:ToCoalition(coalition.side.BLUE) - if SoundDebug then BASE:I("-----SOUNDFILE PLAYED is " .. random_Air_Unit_Sound .. " TO ALL-----") end - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Air_Unit_Sound .. " TO ALL", 10) - end - end - end - - if EventData.IniGroupName then -- If we don't have an IniGroupName, then don't proceed - if EventData.TgtCategory == 2 and EventData.IniCoalition ~= EventData.TgtCoalition and - GROUP:FindByName(EventData.IniGroupName):IsAirPlane() and EventData.TgtObjectCategory == 1 then -- TgtCategory 2 is Ground, TgtObjectCategory is Unit - if SoundDebug then BASE:I("...GROUND UNIT (KILLED BY A BLUE AIRPLANE)") end - - math.random() - random_Ground_Unit_Sound = Sounds.Ground_Unit_Sound_Table[math.random(1, - #Sounds.Ground_Unit_Sound_Table)] - local Ground_Unit_Sound_Ogg = random_Ground_Unit_Sound .. ".ogg" - -- Sound Chosen - RedGroundKillSound = USERSOUND:New(SoundFilePath .. Ground_Unit_Sound_Ogg) - -- Determine who to play sound to - if EventData.IniGroup and SoundOnlyToGroup then - local SoundGroup = EventData.IniGroup - BASE:I("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO " .. SoundGroup:GetName()) - RedGroundKillSound:ToGroup(SoundGroup) - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO " .. - SoundGroup:GetName(), 10) - end - else - RedGroundKillSound:ToCoalition(coalition.side.BLUE) - BASE:I("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO ALL-----") - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO ALL", - 10) - end - end - end - else - env.info("-----No EventData.IniGroupName-----") - end - - if EventData.IniGroupName then -- If we don't have an IniGroupName, then don't proceed - if EventData.TgtCategory == 3 and EventData.TgtObjectCategory == 1 and - GROUP:FindByName(EventData.IniGroupName):IsAirPlane() then -- 3 is Ship - BASE:I("...SHIP") - math.random() - random_Ground_Unit_Sound = Sounds.Ground_Unit_Sound_Table[math.random(1, - #Sounds.Ground_Unit_Sound_Table)] - local Ground_Unit_Sound_Ogg = random_Ground_Unit_Sound .. ".ogg" - -- Sound Chosen - RedGroundKillSound = USERSOUND:New(SoundFilePath .. Ground_Unit_Sound_Ogg) - -- Determine who to play sound to - if EventData.IniGroup and SoundOnlyToGroup then - local SoundGroup = EventData.IniGroup - BASE:I("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO " .. SoundGroup:GetName()) - RedGroundKillSound:ToGroup(SoundGroup) - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO " .. - SoundGroup:GetName(), 10) - end - else - RedGroundKillSound:ToCoalition(coalition.side.BLUE) - BASE:I("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO ALL-----") - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO ALL", - 10) - end - end - end - else - env.info("-----No EventData.IniGroupName-----") - end + -- 5) Friendly-fire (air vs air): notify the offending side only if target is a CLIENT aircraft + if iniSide == tgtSide and EventData.TgtCategory == 0 and EventData.TgtUnitName then + local tgtClient = CLIENT:FindByName(EventData.TgtUnitName) + if tgtClient then + local s = ChooseRandom(Sounds.Friendly_Fire_Table) + PlayToGroupOrCoalition(NewSound(s), iniGroup, iniSide) end - - -- Blue Dead, and/or Initiated by Red, and its a Plane - if (EventData.IniCoalition == coalition.side.RED and EventData.TgtCoalition == coalition.side.BLUE) and - EventData.TgtCategory == 0 then - if EventData.TgtGroupName then - BASE:I("---------BLUE UNIT GOT KILLED---------(" .. EventData.TgtGroupName .. ")") - else - BASE:I("---------BLUE UNIT GOT KILLED--------- (No Name)") - end - random_Blue_Air_Unit_Sound = Sounds.Blue_Air_Unit_Sound_Table[math.random(1, - #Sounds.Blue_Air_Unit_Sound_Table)] - local Blue_Air_Unit_Sound_Ogg = random_Blue_Air_Unit_Sound .. ".ogg" - - A2GSound = USERSOUND:New(SoundFilePath .. Blue_Air_Unit_Sound_Ogg) - A2GSound:ToCoalition(coalition.side.BLUE) - BASE:I("---------SOUNDFILE PLAYED---------is " .. Blue_Air_Unit_Sound_Ogg) - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Blue_Air_Unit_Sound_Ogg .. " TO ALL", 10) - end - end - - -- Blue Dead, and Initiated by Blue, and its a Plane - if (EventData.IniCoalition == coalition.side.BLUE and EventData.TgtCoalition == coalition.side.BLUE) and - EventData.TgtCategory == 0 then - if EventData.TgtGroupName then - BASE:I("---------BLUE ON BLUE---------(" .. EventData.TgtGroupName .. ")") - else - BASE:I("---------BLUE ON BLUE--------- (No Name)") - end - random_Friendly_Fire_Sound = Sounds.Friendly_Fire_Table[math.random(1, #Sounds.Friendly_Fire_Table)] - local Friendly_Fire_Sound_Ogg = random_Friendly_Fire_Sound .. ".ogg" - FFSound = USERSOUND:New(SoundFilePath .. Friendly_Fire_Sound_Ogg) - - if EventData.IniGroup and SoundOnlyToGroup then - local SoundGroup = EventData.IniGroup - BASE:I("-----SOUNDFILE PLAYED is " .. random_Friendly_Fire_Sound .. " TO " .. SoundGroup:GetName()) - FFSound:ToGroup(SoundGroup) - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Friendly_Fire_Sound .. " TO " .. - SoundGroup:GetName(), 10) - end - else - FFSound:ToCoalition(coalition.side.BLUE) - BASE:I("-----SOUNDFILE PLAYED is " .. random_Friendly_Fire_Sound .. " TO ALL-----") - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Friendly_Fire_Sound .. " TO ALL", 10) - end - end - end - end -- end of If SoundHandler -end -- KILL EventHandler Function End + end +end ----------------------------------------------------------------------------------------------------------------------------------- --- DEAD EVENTS +-- DEAD EVENTS (MIRRORED) ----------------------------------------------------------------------------------------------------------------------------------- function EventHandler:OnEventDead(EventData) - if SoundHandler then - if SoundDebug then - BASE:I("---------DEAD DETECTED: EVALUATING FOR COALITION & TYPE----------") - BASE:I(EventData) - end + if not SoundHandler then return end + if SoundDebug then + BASE:I("---------DEAD DETECTED----------"); BASE:I(EventData) + end + if SoundDebug then LogDeadUnit(EventData) end - -- STATIC SECTION - if EventData.IniObjectCategory == 3 then -- STATIC DEAD - if EventData.IniCoalition == 1 then -- RED STATIC DEAD - BASE:I("RED STATIC DEAD") - random_Ground_Unit_Sound = - Sounds.Ground_Unit_Sound_Table[math.random(1, #Sounds.Ground_Unit_Sound_Table)] - local Ground_Unit_Sound_Ogg = random_Ground_Unit_Sound .. ".ogg" - -- Sounnd Chosen - RedStaticKillSound = USERSOUND:New(SoundFilePath .. Ground_Unit_Sound_Ogg) - -- Determine who to play sound to - if EventData.IniGroup and SoundOnlyToGroup then - local SoundGroup = EventData.IniGroup - BASE:I("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO " .. SoundGroup:GetName()) - RedStaticKillSound:ToGroup(SoundGroup) - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO " .. - SoundGroup:GetName(), 10) - end - elseif not EventData.IniGroup and SoundOnlyToGroup then - env.info("-----NO EventData.IniGroup Available-----") - end - - if not SoundOnlyToGroup then - env.info("-----SOUND INTENDED FOR ALL-----") - RedStaticKillSound:ToCoalition(coalition.side.BLUE) - BASE:I("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO ALL-----") - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. random_Ground_Unit_Sound .. " TO ALL", 10) - end - end - end - - if EventData.IniCoalition == 2 then -- BLUE STATIC DEAD - -- Consider if we want sounds for this - BASE:I("---------BLUE STATIC DEAD, NO SOUND FOR NOW----------") - end - end -- Static Logic End - end -- End of If Soundhandler -end -- DEAD EventHandler Function End + -- STATIC DEAD: play to the OPPOSING coalition (keeps the “good hit” vibe) + if EventData.IniObjectCategory == 3 then + local s = ChooseRandom(Sounds.Ground_Unit_Sound_Table) + NewSound(s):ToCoalition(Opposing(EventData.IniCoalition)) + end +end ----------------------------------------------------------------------------------------------------------------------------------- --- SHOT EVENTS +-- SHOT EVENTS (mirrored + clarified intent) +-- - Shooter feedback (own weapon) → Fox/Pickle/Rifle/etc to SHOOTER side (group/coalition) +-- - Incoming cues: +-- * Missile fired at a target group → Incoming_Missile_Table to TARGET group +-- * SAM launch: +-- - Friendly SAM → Friendly_SAM_Table to shooter side +-- - Hostile SAM at target → SamSoundTable to TARGET group +-- - Special cases: Tomahawk to shooter side, SCUD to opposing coalition ----------------------------------------------------------------------------------------------------------------------------------- function EventHandler:OnEventShot(EventData) if SoundDebug then - BASE:I("---------SHOT DETECTED: EVALUATING FOR COALITION & WEAPON----------") - -- UTILS.PrintTableToLog(EventData) - BASE:I(EventData) + BASE:I("---------SHOT DETECTED----------"); BASE:I(EventData) end - math.random() + if not SoundHandler then return end + if SoundDebug then LogFiringUnit(EventData) end + if not EventData.Weapon then return end + local WeaponDesc = EventData.Weapon:getDesc() - if SoundDebug then - BASE:I({ WeaponDesc }) - end - local Brevity = "none" - soundDelay = false - if SoundHandler then - -- Weapon data. - local _weapon = EventData.Weapon:getTypeName() -- should be the same as Event.WeaponTypeName - local _weaponStrArray = UTILS.Split(_weapon, "%.") - local _weaponName = _weaponStrArray[#_weaponStrArray] + if not WeaponDesc then return end - -- Weapon descriptor. - local desc = EventData.Weapon:getDesc() + local iniSide = EventData.IniCoalition + local tgtGroup = EventData.TgtGroup + local iniGroup = EventData.IniGroup + local iniGroupName = EventData.IniGroupName or "" + local _weapon = EventData.Weapon:getTypeName() + local category = WeaponDesc.category -- 0 shell, 1 missile, 2 rocket, 3 bomb + local guidance = WeaponDesc.guidance -- 1 unguided bomb, 2 IR, 3 ARH, 4 SARH, 5 anti-radar, 7 TV/EO + local missileCat = WeaponDesc.missileCategory - -- Weapon category: 0=SHELL, 1=MISSILE, 2=ROCKET, 3=BOMB (Weapon.Category.X) - local weaponcategory = desc.category - local weaponguidance = WeaponDesc.guidance + local brevity = "none" + local function pick(tbl) brevity = ChooseRandom(tbl) end - -- Debug info. + local shooterGroup = iniGroupName ~= "" and GROUP:FindByName(iniGroupName) or nil - if SoundDebug then - BASE:I("-----PREPARING GENERAL SHOT INFORMATION...------") - - if EventData.IniUnitName then - BASE:I("EVENT SHOT: Ini unit = " .. EventData.IniUnitName) - end - if EventData.IniGroupName then - BASE:I("EVENT SHOT: Ini group = " .. EventData.IniGroupName) - end - - BASE:I("EVENT SHOT: Weapon type = " .. _weapon) - BASE:I("EVENT SHOT: Weapon name = " .. _weaponName) - - if weaponcategory then - BASE:I("EVENT SHOT: Weapon category = " .. weaponcategory) + -- Shooter feedback (own-fire), nil-safe airplane check + if shooterGroup and shooterGroup.IsAirPlane and shooterGroup:IsAirPlane() then + if _weapon == "AGM_154" or _weapon == "AGM_154A" then + pick(Sounds.PigsAway_Sound_Table) + elseif string.find(_weapon, "ADM", 1, true) then + pick(Sounds.Decoy_Table) + elseif category == 3 and guidance == 7 then + pick(Sounds.Paveway_Sound_Table) + elseif _weapon == "AGM_84D" then + pick(Sounds.Bruiser_Sound_Table) + elseif _weapon == "AGM_84H" or string.find(_weapon, "84E", 1, true) then + pick(Sounds.CruiseMissile_Table) + elseif category == 1 and guidance == 3 then + pick(Sounds.Fox3_Sound_Table) + elseif category == 1 and guidance == 2 then + pick(Sounds.Fox2_Sound_Table) + elseif category == 1 and guidance == 4 then + pick(Sounds.Fox1_Sound_Table) + elseif category == 1 and guidance == 5 and missileCat == 6 then + pick(Sounds.Magnum_Sound_Table) + elseif category == 1 and guidance == 7 or string.find(_weapon, "65", 1, true) then + pick(Sounds.Rifle_Sound_Table) + elseif category == 0 then + pick(Sounds.Rifle_Sound_Table) + elseif category == 1 then + pick(Sounds.Rifle_Sound_Table) + elseif category == 2 then + pick(Sounds.Rifle_Sound_Table) + elseif category == 3 then + if guidance == 1 or _weapon == "GBU_32_V_2B" or string.find(_weapon, "MK", 1, true) or string.find(_weapon, "ROCKEYE", 1, true) then + pick(Sounds.Pickle_Sound_Table) else - BASE:I('NO WEAPON CATEGORY VALUE') - end - if weaponguidance then - BASE:I("EVENT SHOT: Weapon guidance = " .. weaponguidance) - else - BASE:I('NO WEAPON GUIDANCE VALUE') + pick(Sounds.Pickle_Sound_Table) end end - - -- Blue and a SAM - - if EventData.IniCoalition == 2 and GROUP:FindByName(EventData.IniGroupName):IsSAM() then - BASE:I("BLUE SAM SHOT CONFIRMED") - RandomBlueSamSound = Sounds.Friendly_SAM_Table[math.random(1, #Sounds.Friendly_SAM_Table)] - Brevity = tostring(RandomBlueSamSound) - BASE:I("---------RANDOM FRIENDLY SAM SOUND IS " .. Brevity) - end - - -- Blue and an Airplane - if EventData.IniCoalition == 2 and GROUP:FindByName(EventData.IniGroupName):IsAirPlane() then - BASE:I("BLUE AIRPLANE SHOT CONFIRMED") - - -- We want a specific sound for a glide weapon, so it needs to be added manually. - if _weapon == "AGM_154" or _weapon == "AGM_154A" then - math.random() - RandomPigsAwaySound = Sounds.PigsAway_Sound_Table[math.random(1, #Sounds.PigsAway_Sound_Table)] - Brevity = tostring(RandomPigsAwaySound) - BASE:I("---------RANDOM PIGS AWAY SOUND IS " .. Brevity) - - -- DCS mis-classifies the GBU_32_V_2B, so it needs to be added manually. - - -- Duck for ADMs - elseif string.find(_weapon, "ADM", 1, true) then - math.random() - RandomDuckSound = Sounds.Decoy_Table[math.random(1, #Sounds.Decoy_Table)] - Brevity = tostring(RandomDuckSound) - BASE:I("---------RANDOM DUCK SOUND IS " .. Brevity) - elseif WeaponDesc.category == 3 and WeaponDesc.guidance == 1 or _weapon == "GBU_32_V_2B" or - string.find(_weapon, "MK", 1, true) or string.find(_weapon, "ROCKEYE", 1, true) then - math.random() - math.random() - RandomPickleSound = Sounds.Pickle_Sound_Table[math.random(1, #Sounds.Pickle_Sound_Table)] - Brevity = tostring(RandomPickleSound) - BASE:I("---------RANDOM PICKLE SOUND (3, 1, Specific) IS " .. Brevity) - elseif WeaponDesc.category == 3 and WeaponDesc.guidance == 7 then - -- LASER GUIDED SOUND TABLES - math.random() - RandomPavewaySound = Sounds.Paveway_Sound_Table[math.random(1, #Sounds.Paveway_Sound_Table)] - Brevity = tostring(RandomPavewaySound) - BASE:I("---------RANDOM PAVEWAY SOUND IS " .. Brevity) - - -- DCS mis-classifies the Harpoon, so it needs to be added manually. - elseif _weapon == "AGM_84D" then - math.random() - RandomBruiserSound = Sounds.Bruiser_Sound_Table[math.random(1, #Sounds.Bruiser_Sound_Table)] - Brevity = tostring(RandomBruiserSound) - BASE:I("---------RANDOM BRUISER SOUND IS " .. Brevity) - - -- Cruise Missiles are "Greyhound". - elseif _weapon == "AGM_84H" or string.find(_weapon, "84E", 1, true) then - math.random() - RandomGreyhoundSound = Sounds.CruiseMissile_Table[math.random(1, #Sounds.CruiseMissile_Table)] - Brevity = tostring(RandomGreyhoundSound) - BASE:I("---------RANDOM GREYHOUND SOUND IS " .. Brevity) - elseif WeaponDesc.category == 1 and WeaponDesc.guidance == 2 then - math.random() - RandomFox2Sound = Sounds.Fox2_Sound_Table[math.random(1, #Sounds.Fox2_Sound_Table)] - Brevity = tostring(RandomFox2Sound) - BASE:I("---------FOX 2 SOUND----------" .. Brevity) - elseif WeaponDesc.category == 1 and WeaponDesc.guidance == 3 then - math.random() - RanddomFox3Sound = Sounds.Fox3_Sound_Table[math.random(1, #Sounds.Fox3_Sound_Table)] - Brevity = tostring(RanddomFox3Sound) - BASE:I("---------FOX 3 SOUND----------" .. Brevity) - elseif WeaponDesc.category == 1 and WeaponDesc.guidance == 4 then - math.random() - RanddomFox1Sound = Sounds.Fox1_Sound_Table[math.random(1, #Sounds.Fox1_Sound_Table)] - Brevity = tostring(RanddomFox1Sound) - BASE:I("---------Fox 1 SOUND----------") - elseif WeaponDesc.category == 1 and WeaponDesc.guidance == 5 and WeaponDesc.missileCategory == 6 then - RandomMagnumSound = Sounds.Magnum_Sound_Table[math.random(1, #Sounds.Magnum_Sound_Table)] - Brevity = tostring(RandomMagnumSound) - BASE:I("---------MAGNUM SOUND IS " .. Brevity) - elseif WeaponDesc.category == 1 and WeaponDesc.guidance == 7 or string.find(_weapon, "65", 1, true) then - math.random() - RandomRifleSound = Sounds.Rifle_Sound_Table[math.random(1, #Sounds.Rifle_Sound_Table)] - Brevity = tostring(RandomRifleSound) - BASE:I("---------RIFLE SOUND (Includes Zuni Rockets)----------") - - -- "0" = Shells - elseif WeaponDesc.category == 0 then - math.random() - RandomRifleSound = Sounds.Rifle_Sound_Table[math.random(1, #Sounds.Rifle_Sound_Table)] - Brevity = tostring(RandomRifleSound) - BASE:I("---------GUNS SOUND----------") - - -- If we still don't know what kind it is, and its a missile, let's call it a Rifle - elseif WeaponDesc.category == 1 then - math.random() - RandomRifleSound = Sounds.Rifle_Sound_Table[math.random(1, #Sounds.Rifle_Sound_Table)] - Brevity = tostring(RandomRifleSound) - BASE:I("---------RIFLE SOUND (UNKNOWN MISSILE)----------") - - -- Rockets = Rifle (for lack of a better brevity code) - elseif WeaponDesc.category == 2 then - math.random() - RandomRifleSound = Sounds.Rifle_Sound_Table[math.random(1, #Sounds.Rifle_Sound_Table)] - Brevity = tostring(RandomRifleSound) - BASE:I("---------ROCKET SOUND (RIFLE FOR NOW))----------") - - -- If we still don't know what kind it is, and its a bomb, let's call it a Pickle - elseif WeaponDesc.category == 3 then - math.random() - RandomPickleSound = Sounds.Pickle_Sound_Table[math.random(1, #Sounds.Pickle_Sound_Table)] - Brevity = tostring(RandomPickleSound) - BASE:I("---------RANDOM PICKLE (UNKNOWN) SOUND IS " .. Brevity) - end - end - - if EventData.IniCoalition == 2 and GROUP:FindByName(EventData.IniGroupName):IsShip() then - BASE:I("BLUE NAVAL SHOT CONFIRMED") - - if string.find(_weapon, "BGM_109B", 1, true) then - RandomTomahawkSound = Sounds.Tomahawk_Table[math.random(1, #Sounds.Tomahawk_Table)] - Brevity = tostring(RandomTomahawkSound) - BASE:I("---------BLUE TOMAHAWK SOUND IS: " .. Brevity) - end - end - - -- LOGIC FOR RED AIRPLANE SHOTS - -- if Red and an Airplane - if EventData.IniCoalition == 1 and GROUP:FindByName(EventData.IniGroupName):IsAirPlane() then - BASE:I("RED PLANE SHOT CONFIRMED") - soundDelay = true - BASE:I("DELAY ACTIVATED") - - if WeaponDesc.category == 1 and WeaponDesc.guidance == 2 then - RandomRedMissileSound = Sounds.RedMissile_Sound_Table[math.random(1, #Sounds.RedMissile_Sound_Table)] - Brevity = tostring(RandomRedMissileSound) - BASE:I("---------RED MISSILE (Fox2) SOUND----------" .. Brevity) - elseif WeaponDesc.category == 1 and WeaponDesc.guidance == 3 then - RandomRedMissileSound = Sounds.RedMissile_Sound_Table[math.random(1, #Sounds.RedMissile_Sound_Table)] - Brevity = tostring(RandomRedMissileSound) - BASE:I("---------RED MISSILE (Fox2) SOUND----------" .. Brevity) - elseif WeaponDesc.category == 1 and WeaponDesc.guidance == 4 then - RandomRedMissileSound = Sounds.RedMissile_Sound_Table[math.random(1, #Sounds.RedMissile_Sound_Table)] - Brevity = tostring(RandomRedMissileSound) - BASE:I("---------RED MISSILE (Fox1) SOUND----------") - elseif (WeaponDesc.category == 1 and WeaponDesc.missileCategory == 4) or - string.find(_weapon, "X_22", 1, true) or string.find(_weapon, "X_35", 1, true) or - string.find(_weapon, "X_31A", 1, true) or string.find(_weapon, "YJ_83K", 1, true) or - string.find(_weapon, "YJ_12", 1, true) or _weapon == "AGM_84D" then - RandomRedAntiShipSound = Sounds.Vampires_Table[math.random(1, #Sounds.Vampires_Table)] - Brevity = tostring(RandomRedAntiShipSound) - BASE:I("---------RED VAMPIRES SOUND----------") - end -- End of Red Shot Classification - end -- End of Red Aerial Shot Logic - - -- LOGIC FOR RED GROUND MISSILES - if ShipSamSounds then - if EventData.IniCoalition == 1 and - (GROUP:FindByName(EventData.IniGroupName):IsGround() or - GROUP:FindByName(EventData.IniGroupName):IsShip()) and WeaponDesc.category == 1 and - not string.find(_weapon, "SA48N6", 1, true) and not string.find(_weapon, "SCUD_RAKETA", 1, true) then - BASE:I("RED GROUND OR SHIP SHOT CONFIRMED") - soundDelay = true - BASE:I("DELAY ACTIVATED") - - -- if string.find(_weapon, "SA48N6", 1, true) then - -- BASE:I("-----WEAPON SOUND KNOWN BUT SUPPRESSED-----") - -- BASE:I("DELAY ACTIVATED, BUT NO SOUND") - -- end - - RandomSamSound = Sounds.SamSoundTable[math.random(1, #Sounds.SamSoundTable)] - Brevity = tostring(RandomSamSound) - BASE:I("---------RED SAM SOUND----------" .. Brevity) - end - else - if EventData.IniCoalition == 1 and GROUP:FindByName(EventData.IniGroupName):IsGround() and - WeaponDesc.category == 1 and not string.find(_weapon, "SA48N6", 1, true) and - not string.find(_weapon, "SCUD_RAKETA", 1, true) then - BASE:I("RED GROUND (NOT SHIP) SHOT CONFIRMED") - soundDelay = true - BASE:I("DELAY ACTIVATED") - - -- if string.find(_weapon, "SA48N6", 1, true) then - -- BASE:I("-----WEAPON SOUND KNOWN BUT SUPPRESSED-----") - -- end - - if string.find(_weapon, "SCUD_RAKETA", 1, true) then - BASE:I("-----SCUD LAUNCH (NO SOUND PROGRAMMED)-----") - end - - RandomSamSound = Sounds.SamSoundTable[math.random(1, #Sounds.SamSoundTable)] - Brevity = tostring(RandomSamSound) - BASE:I("---------RED SAM SOUND----------" .. Brevity) - end - end - - -- LOGIC FOR RED SCUD / BALLISTIC MISSILE LAUNCHES - -- if Red and an Airplane - if EventData.IniCoalition == 1 and string.find(_weapon, "SCUD_RAKETA", 1, true) then - BASE:I("RED SCUD LAUNCH CONFIRMED") - - RandomBallisticMissileSound = Sounds.Ballistic[math.random(1, #Sounds.Ballistic)] - Brevity = tostring(RandomBallisticMissileSound) - BASE:I("---------RED BALLISTIC MISSILE SOUND----------" .. Brevity) - end -- End of Red Scud Launch - - -- Let's put it into Sound - if Brevity ~= "none" then - BASE:I("-----soundDelay value = " .. tostring(soundDelay) .. "-----") - - -- Its a Blue Weapon Event - if EventData.IniCoalition == 2 and EventData.IniGroup then - local BrevitySound = Brevity .. ".ogg" - WeaponSound = USERSOUND:New(SoundFilePath .. BrevitySound) - - -- Determine Who to Play Sound to - if SoundOnlyToGroup then - local SoundGroup = EventData.IniGroup - WeaponSound:ToGroup(SoundGroup) - - if SoundDebug then - BASE:I("---------SOUNDFILE PLAYED---------is " .. Brevity .. " TO " .. SoundGroup:GetName()) - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Brevity .. " TO " .. SoundGroup:GetName(), - 10) - end - else - WeaponSound:ToCoalition(coalition.side.BLUE) - - if SoundDebug then - BASE:I("---------SOUNDFILE PLAYED---------is " .. Brevity .. " TO ALL") - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Brevity .. " TO ALL", 10) - end - end - end - - -- Excluded Sounds, sounds we want to play to all Blue clients regardless of who fires - if EventData.IniCoalition == 2 and EventData.IniGroup:IsShip() then - WeaponSound:ToCoalition(coalition.side.BLUE) - if SoundDebug then - BASE:I("--------- (EXCLUDED EVENT) SOUNDFILE PLAYED---------is " .. Brevity .. " TO ALL") - end - end - - -- Its a Red Weapon Event (SAM, on incoming missile) - if EventData.IniCoalition == 1 then - env.info("-----Red Shot-----") - if EventData.TgtGroup then - env.info("-----TargetGroup Object Available-----") - local BrevitySound = Brevity .. ".ogg" - WeaponSound = USERSOUND:New(SoundFilePath .. BrevitySound) - - local function DelayedSound() - local SoundGroup = EventData.TgtGroup - if SoundGroup then - WeaponSound:ToGroup(SoundGroup) - end - end - local soundDelayTime = math.random(3, 7) - env.info("-----soundDelayTime =" .. soundDelayTime .. "-----") - TIMER:New(DelayedSound):Start(soundDelayTime) - - if SoundDebug then - BASE:I("---------SOUNDFILE PLAYED---------is " .. Brevity .. " TO " .. SoundGroup:GetName() .. - " ONLY") - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Brevity .. " TO " .. SoundGroup:GetName(), - 10) - end - - -- Sound can play if its SCUD (but not other un-guided things like Artillery) - elseif string.find(_weapon, "SCUD_RAKETA", 1, true) then - env.info("-----TargetGroup Object NOT Available Sound ToAll(Must be a SCUD) -----") - - local BrevitySound = Brevity .. ".ogg" - WeaponSound = USERSOUND:New(SoundFilePath .. BrevitySound) - WeaponSound:ToCoalition(coalition.side.BLUE) - - if SoundDebug then - BASE:I("---------SOUNDFILE PLAYED---------is " .. Brevity .. " TO All") - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Brevity .. " TO All", 10) - end - end - end -- End of Red Shot Event - end -- Sound Action End - soundDelay = false -- reset value - if SoundDebug then - env.info("-----soundDelay value reset to false-----") - end - else - env.info("-----SOUNDHANDLER OFF------") end -end -- Function End -BASE:I("-----MISSILE/BOMB SOUNDS SET------") + -- Friendly SAM cue + if shooterGroup and shooterGroup.IsSAM and shooterGroup:IsSAM() then + pick(Sounds.Friendly_SAM_Table) + end + + -- Ship-launched Tomahawk cue + if shooterGroup and shooterGroup.IsShip and shooterGroup:IsShip() then + if string.find(_weapon, "BGM_109B", 1, true) then + pick(Sounds.Tomahawk_Table) + end + end + + -- Incoming missile cue to target group + if tgtGroup and category == 1 then + local inc = ChooseRandom(Sounds.Incoming_Missile_Table) + local incsnd = NewSound(inc) + local function DelayedIncoming() if tgtGroup then incsnd:ToGroup(tgtGroup) end end + TIMER:New(DelayedIncoming):Start(math.random(3, 7)) --TODO make UI Variables + end + + -- Hostile SAM at target → SAM call to TARGET group + if tgtGroup and shooterGroup and ((shooterGroup.IsSAM and shooterGroup:IsSAM()) or (ShipSamSounds and shooterGroup.IsShip and shooterGroup:IsShip())) and category == 1 then + if not string.find(_weapon, "SA48N6", 1, true) and not string.find(_weapon, "SCUD_RAKETA", 1, true) then + local sams = ChooseRandom(Sounds.SamSoundTable) + local samsnd = NewSound(sams) + local function DelayedSAMS() if tgtGroup then samsnd:ToGroup(tgtGroup) end end + TIMER:New(DelayedSAMS):Start(math.random(3, 7)) + end + end + + -- Ballistic missile (SCUD) → opposing coalition + if string.find(_weapon, "SCUD_RAKETA", 1, true) then + local b = ChooseRandom(Sounds.Ballistic) + NewSound(b):ToCoalition(Opposing(iniSide)) + end + + -- Deliver shooter feedback if selected + if brevity ~= "none" then + PlayToGroupOrCoalition(NewSound(brevity), iniGroup, iniSide) + end +end + +if SoundDebug then BASE:I("-----MISSILE/BOMB SOUNDS SET------") end ----------------------------------------------------------------------------------------------------------------------------------- --- SHOOTING (RAPID FIRE) EVENT +-- SHOOTING (RAPID FIRE) – mirrored & renamed tables +-- - If a CLIENT fires guns → Guns_OwnFire to their group/coalition +-- - If guns are being fired at a target group (client) → Guns_Incoming to target group ----------------------------------------------------------------------------------------------------------------------------------- +local SHOOT_SFX_COOLDOWN = 30 -- seconds +local _lastShootSfxAt = -1 + +local function ShootingSfxGate(tag) + local now = timer.getTime() -- mission time + if _lastShootSfxAt and _lastShootSfxAt > 0 then + local dt = now - _lastShootSfxAt + if dt < SHOOT_SFX_COOLDOWN then + if SoundDebug then + env.info(string.format("[SFX-GATE] BLOCK %s: %.1fs remaining", tag, + SHOOT_SFX_COOLDOWN - dt)) + end + return false + end + end + _lastShootSfxAt = now + if SoundDebug then env.info(string.format("[SFX-GATE] ALLOW %s at t=%.1f", tag, now)) end + return true +end ShootingEventHandler = EVENTHANDLER:New() ShootingEventHandler:HandleEvent(EVENTS.ShootingStart) -function ShootingEventHandler:OnEventShootingStart(EventData) +if SoundDebug then env.info("----- GUN SHOOTING HANDLER INIT (listening for EVENTS.ShootingStart) -----") end + +local function DBG(...) if SoundDebug then - BASE:I("-----RAPID GUNS SHOOTING START, EVALUATING------") - end - local txt = UTILS.OneLineSerialize(EventData) - env.info("Guns Shooting EventData Debug: " .. txt) - local ShooterGroupName = EventData.IniGroupName - local ShooterUnitName = EventData.IniUnitName - if ShooterGroupName ~= nil and ShooterUnitName ~= nil then - ShooterGroup = GROUP:FindByName(ShooterGroupName) - ShooterUnit = UNIT:FindByName(ShooterUnitName) - end - - if ShooterGroup:IsAirPlane() and ShooterUnit:IsClient() then - BASE:I("BLUE AIRPLANE GUNS DETECTED (FROM CLIENT)") - math.random() - Blue_Guns_Sound = Sounds.Blue_Guns_Table[math.random(1, #Sounds.Blue_Guns_Table)] - Brevity = tostring(Blue_Guns_Sound) - BASE:I("---------RANDOM BLUE GUNS SOUND SELECTED IS: " .. Brevity) - - local GunsSound = Brevity .. ".ogg" - -- Sound Chosen - GunsSound = USERSOUND:New(SoundFilePath .. GunsSound) - - -- Determine Who to Play Sound to - if SoundOnlyToGroup and EventData.IniGroup then - local SoundGroup = EventData.IniGroup - GunsSound:ToGroup(SoundGroup) - BASE:I("---------SOUNDFILE PLAYED---------is " .. Brevity .. " TO " .. SoundGroup:GetName()) - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Brevity .. " TO " .. SoundGroup:GetName(), 10) - end - else - GunsSound:ToCoalition(coalition.side.BLUE) - BASE:I("---------SOUNDFILE PLAYED---------is " .. Brevity .. " TO ALL") - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Brevity .. " TO ALL", 10) - end - end - end - - if ShooterGroup:IsAirPlane() and EventData.IniCoalition == 1 and PlayRedShootingGuns then - BASE:I("-----RED AIRPLANE GUNS DETECTED (AT CLIENT)------") - math.random() - Red_Guns_Sound = Sounds.Red_Guns_Table[math.random(1, #Sounds.Red_Guns_Table)] - Brevity = tostring(Red_Guns_Sound) - BASE:I("---------RANDOM RED GUNS SOUND SELECTED IS: " .. Brevity) - - local GunsSound = Brevity .. ".ogg" - -- Sound Chosen - GunsSound = USERSOUND:New(SoundFilePath .. GunsSound) - -- Determine Who to Play Sound to - if SoundOnlyToGroup and EventData.TgtGroup then - local SoundGroup = EventData.TgtGroup - GunsSound:ToGroup(SoundGroup) - BASE:I("---------SOUNDFILE PLAYED---------is " .. Brevity .. " TO " .. SoundGroup:GetName()) - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Brevity .. " TO " .. SoundGroup:GetName(), 10) - end - else - GunsSound:ToCoalition(coalition.side.BLUE) - BASE:I("---------SOUNDFILE PLAYED---------is " .. Brevity .. " TO ALL") - if SoundDebug then - trigger.action.outText("-----SOUNDFILE PLAYED is " .. Brevity .. " TO ALL", 10) - end - end + local msg = table.concat({ ... }, " "); BASE:I(msg); env.info(msg) end end +local function BOOLSTR(b) return b and "true" or "false" end -BASE:I("-----GUN SHOOTING SOUNDS SET------") +local function FindGroupWithLog(name, tag) + if not name then + DBG(tag, " : no name provided"); return nil + end + local g = GROUP:FindByName(name) + DBG(tag, " : GROUP:FindByName(", name, ") -> ", tostring(g)) + if g then + local okExist = g.IsExist and g:IsExist() + DBG(tag, " : IsExist=", tostring(okExist), " IsAirPlane=", tostring(g.IsAirPlane and g:IsAirPlane() or "n/a")) + end + return g +end +local function FindUnitWithLog(dcsUnit, tag) + if not dcsUnit then + DBG(tag, " : no DCS unit handle"); return nil + end + local u = UNIT:Find(dcsUnit) + DBG(tag, " : UNIT:Find(DCSUnit) -> ", tostring(u)) + if u then + DBG(tag, " : IsExist=", BOOLSTR(u.IsExist and u:IsExist()), " IsClient=", + BOOLSTR(u.IsClient and u:IsClient())) + end + return u +end + +function ShootingEventHandler:OnEventShootingStart(EventData) + env.info(string.format("[GUN] ShootingStart fired t=%.2f ini=%s tgt=%s", + tonumber(EventData.time or -1), + tostring(EventData.IniUnitName or EventData.IniDCSUnitName or "?"), + tostring(EventData.TgtUnitName or EventData.TgtDCSUnitName or "?") + )) + + if SoundDebug then + DBG("-----RAPID GUNS SHOOTING START-----") + DBG("EventData fields present:", + " IniGroupName=", tostring(EventData.IniGroupName), + " IniUnitName=", tostring(EventData.IniUnitName), + " IniCoalition=", tostring(EventData.IniCoalition), + " TgtGroup=", tostring(EventData.TgtGroup), + " TgtGroupName=", tostring(EventData.TgtGroupName), + " TgtDCSUnit=", tostring(EventData.TgtDCSUnit), + " TgtCoalition=", tostring(EventData.TgtCoalition)) + DBG("OneLineSerialize: ", UTILS.OneLineSerialize(EventData)) + end + + -- Shooter resolution + validation + local ShooterGroup = FindGroupWithLog(EventData.IniGroupName, "SHOOTER group") + local ShooterUnit = nil + if EventData.IniUnitName then + ShooterUnit = UNIT:FindByName(EventData.IniUnitName) + DBG("SHOOTER unit : UNIT:FindByName(", EventData.IniUnitName, ") -> ", tostring(ShooterUnit)) + if ShooterUnit then + DBG("SHOOTER unit : IsExist=", BOOLSTR(ShooterUnit.IsExist and ShooterUnit:IsExist()), + " IsClient=", BOOLSTR(ShooterUnit.IsClient and ShooterUnit:IsClient())) + end + else + DBG("SHOOTER unit : IniUnitName missing") + end + + if not ShooterGroup or not ShooterUnit then + DBG("ABORT: missing ShooterGroup (", tostring(ShooterGroup), ") or ShooterUnit (", tostring(ShooterUnit), ")") + return + end + + local isPlane = ShooterGroup.IsAirPlane and ShooterGroup:IsAirPlane() or false + DBG("SHOOTER group type: IsAirPlane=", BOOLSTR(isPlane)) + if not isPlane then + DBG("ABORT: ShooterGroup is not airplane") + return + end + + -- Own-fire branch (client shooter) + local shooterIsClient = ShooterUnit.IsClient and ShooterUnit:IsClient() or false + DBG("SHOOTER IsClient=", BOOLSTR(shooterIsClient), " | PlayOwnShootingGuns=", BOOLSTR(PlayOwnShootingGuns)) + if shooterIsClient and PlayOwnShootingGuns then + if not ShootingSfxGate("OWNFIRE") then return end + local s = ChooseRandom(Sounds.Guns_OwnFire) + DBG("OWNFIRE: choosing sound=", tostring(s)) + local snd = NewSound(s) + if snd then + DBG("OWNFIRE: playing to shooter group/coalition (SoundToGroupOnly=", BOOLSTR(SoundToGroupOnly), ")") + PlayToGroupOrCoalition(snd, EventData.IniGroup, EventData.IniCoalition) + else + DBG("OWNFIRE: NewSound failed (nil)") + end + return + elseif shooterIsClient and not PlayOwnShootingGuns then + DBG("OWNFIRE: suppressed by PlayOwnShootingGuns=false") + end + + -- Incoming branch – resolve target group in 3 passes + local tgtGroup = nil + if EventData.TgtGroup then + tgtGroup = EventData.TgtGroup + DBG("TARGET pass1: EventData.TgtGroup provided -> ", tostring(tgtGroup)) + end + if not tgtGroup and EventData.TgtGroupName then + DBG("TARGET pass2: Try TgtGroupName=", tostring(EventData.TgtGroupName)) + tgtGroup = FindGroupWithLog(EventData.TgtGroupName, "TARGET pass2") + end + if not tgtGroup and EventData.TgtDCSUnit then + DBG("TARGET pass3: Try TgtDCSUnit wrapper") + local u = FindUnitWithLog(EventData.TgtDCSUnit, "TARGET pass3") + if u and u.IsExist and u:IsExist() then + tgtGroup = u:GetGroup() + DBG("TARGET pass3: u:GetGroup() -> ", tostring(tgtGroup)) + if tgtGroup and tgtGroup.IsExist then DBG("TARGET pass3: tgtGroup:IsExist()=", BOOLSTR(tgtGroup:IsExist())) end + end + end + + if not tgtGroup then + DBG("INCOMING: abort — could not resolve a target group from any field.") + return + end + + -- Strict: confirm target is a client + local pc = tgtGroup.GetPlayerCount and tgtGroup:GetPlayerCount() or nil + DBG("CLIENT-CHECK: GetPlayerCount=", tostring(pc)) + local targetIsClient = false + if pc ~= nil then + targetIsClient = (pc or 0) > 0 + DBG("CLIENT-CHECK: via GetPlayerCount -> ", BOOLSTR(targetIsClient)) + end + if pc == nil and tgtGroup.GetPlayerUnits then + local pus = tgtGroup:GetPlayerUnits() + local len = (type(pus) == "table") and #pus or 0 + targetIsClient = len > 0 + DBG("CLIENT-CHECK: via GetPlayerUnits (#=", tostring(len), ") -> ", BOOLSTR(targetIsClient)) + end + if not targetIsClient and EventData.TgtDCSUnit then + local u = FindUnitWithLog(EventData.TgtDCSUnit, "CLIENT-CHECK fallback") + targetIsClient = (u and u.IsExist and u:IsExist() and u.IsClient and u:IsClient()) or false + DBG("CLIENT-CHECK: via UNIT:IsClient fallback -> ", BOOLSTR(targetIsClient)) + end + + if not targetIsClient then + DBG("INCOMING: target is NOT a client → no sound (strict mode).") + return + end + + -- Optional: suppress OpFor incoming if disabled + if EventData.IniCoalition == RED and not PlayOpForShootingGuns then + DBG("INCOMING: suppressed by PlayOpForShootingGuns=false (OpFor shooter)") + return + end + + -- Cooldown gate for INCOMING + if not ShootingSfxGate("INCOMING") then return end + + -- Play incoming to victim client group + local s = ChooseRandom(Sounds.Guns_Incoming) + DBG("INCOMING: choosing sound=", tostring(s)) + local snd = NewSound(s) + if not snd then + DBG("INCOMING: NewSound failed (nil) for ", tostring(s)) + return + end + + -- Canonize tgtGroup before playback + local gname = tgtGroup.GetName and tgtGroup:GetName() or "?" + local tgtGroupCanon = GROUP:FindByName(gname) or tgtGroup + DBG(string.format("INCOMING: resolved tgtGroup name=%s obj=%s", tostring(gname), tostring(tgtGroupCanon))) + + if tgtGroupCanon and tgtGroupCanon.GetDCSObject then + local dcs = tgtGroupCanon:GetDCSObject() + local gid = dcs and dcs:getID() or "?" + DBG("INCOMING: sending to GroupID=" .. tostring(gid)) + trigger.action.outTextForGroup(gid, "DEBUG: incoming sound " .. tostring(s), 2) + end + + PlayToGroupOrCoalition(snd, tgtGroupCanon, nil) +end + +if SoundDebug then BASE:I("-----GUN SHOOTING SOUNDS SET (with debug)-----") end ----------------------------------------------------------------- --- MENU FOR SETTINGS +-- MOOSE CLIENT MENU INTEGRATION (Soundhandler under "Moose Functions") ----------------------------------------------------------------- +MooseClientMenus = MooseClientMenus or { bySide = {} } --- PARENT MENU ENTRY +local function _sideNameFromNum(sideNum) + if sideNum == coalition.side.BLUE then return "blue" end + if sideNum == coalition.side.RED then return "red" end + if sideNum == coalition.side.NEUTRAL then return "neutral" end + return "neutral" +end -local SettingsMenu = MENU_MISSION:New("SoundHandler Settings") +-- Ensure a SINGLE visible root "Moose Functions" exists for the coalition. +local function EnsureClientRootMenu(sideNum) + local sideName = _sideNameFromNum(sideNum) + local reg = MooseClientMenus.bySide[sideName] + if reg and reg.manager and reg.root and reg.root.IsDestroyed ~= true then + return reg + end --- Toggle Debug On/Off -local function SoundhandlerOnOff(boolean) + local clientSet = SET_CLIENT:New():FilterCoalitions(sideName):FilterStart() + local mgr = CLIENTMENUMANAGER:New(clientSet, "Moose Functions") + local root = mgr:NewEntry("Moose Functions") + + reg = { manager = mgr, root = root, folders = {}, built = {} } + MooseClientMenus.bySide[sideName] = reg + + TIMER:New(function() + if SoundDebug then BASE:I(("[Soundhandler/ClientMenus] Init for side=%s"):format(sideName)) end + mgr:Propagate() + mgr:InitAutoPropagation() + end):Start(1) + + return reg +end + +-- Make/return a child folder under the visible "Moose Functions" root. +local function EnsureClientFolder(sideNum, folderName) + local reg = EnsureClientRootMenu(sideNum) + local folder = reg.folders[folderName] + if (not folder) or folder.IsDestroyed == true then + folder = reg.manager:NewEntry(folderName, reg.root) -- parent = Moose Functions root + reg.folders[folderName] = folder + if SoundDebug then BASE:I(("[Soundhandler/ClientMenus] Created folder '%s'"):format(folderName)) end + end + return folder, reg.manager, reg +end + +----------------------------------------------------------------- +-- SOUNDHANDLER MENUS under Moose Functions +----------------------------------------------------------------- +local function SoundhandlerOnOff(boolean, _Group, _Client) SoundHandler = boolean env.info("-----SoundHandler On = " .. tostring(boolean) .. "-----") - - if boolean == true then - trigger.action.outText("**Soundhandler ON**", 5) - end - if boolean == false then - trigger.action.outText("--Soundhandler OFF--", 5) - end + trigger.action.outText(boolean and "**Soundhandler ON**" or "--Soundhandler OFF--", 5) end -local OnOrOff = MENU_MISSION:New("On or Off", SettingsMenu) -local SoundHandlerOn = MENU_MISSION_COMMAND:New("On", OnOrOff, SoundhandlerOnOff, true) -- #MENU -local SoundHandlerOff = MENU_MISSION_COMMAND:New("Off", OnOrOff, SoundhandlerOnOff, false) -- #MENU - --- Toggle Debug On/Off -local function SwitchDebug(boolean) +local function SwitchDebug(boolean, _Group, _Client) SoundDebug = boolean env.info("-----SoundDebug Now = " .. tostring(boolean) .. "-----") end -local SoundDebugMenu = MENU_MISSION:New("Sound Debug", SettingsMenu) -local SoundDebugMenuTrue = MENU_MISSION_COMMAND:New("On", SoundDebugMenu, SwitchDebug, true) -- #MENU -local SoundDebugMenuFalse = MENU_MISSION_COMMAND:New("Off", SoundDebugMenu, SwitchDebug, false) -- #MENU - --- Switch To Whom Sounds Play To -local function SwitchSoundsToGroup(boolean) - SoundOnlyToGroup = boolean - env.info("-----SoundOnlyToGroup Now = " .. tostring(boolean) .. "-----") - - if boolean == true then - -- trigger.action.outText("**Sounds Play To Group Only**", 5) - end - if boolean == false then - trigger.action.outText("--Sounds Play To All--", 5) - end +local function SwitchSoundsToGroup(boolean, _Group, _Client) + SoundToGroupOnly = boolean + env.info("-----SoundToGroupOnly Now = " .. tostring(boolean) .. "-----") + if not boolean then trigger.action.outText("--Sounds Play To All--", 5) end end -local SoundsToGroupAll = MENU_MISSION:New("Sounds To Group or All", SettingsMenu) -local GroupTrue = MENU_MISSION_COMMAND:New("Play Sounds to Group Only", SoundsToGroupAll, SwitchSoundsToGroup, true) -- #MENU -local GroupFalse = MENU_MISSION_COMMAND:New("Play Sounds to All", SoundsToGroupAll, SwitchSoundsToGroup, false) -- #MENU +local function BuildSoundhandlerMenus(sideNum) + local root, mgr, reg = EnsureClientFolder(sideNum, "Soundhandler") + if reg.built["Soundhandler"] then + if SoundDebug then BASE:I("[Soundhandler/ClientMenus] Already built for this side, skipping") end + return mgr + end -BASE:I("-----SOUNDHANDLER SETTING SET------") + local onOffFolder = mgr:NewEntry("On or Off", root) + local debugFolder = mgr:NewEntry("Sound Debug", root) + local scopeFolder = mgr:NewEntry("Sounds To Group or All", root) -MESSAGE:New("*SOUNDHANDLER LOADED*", 5, "MISSION", false):ToAll():ToLog() + mgr:NewEntry("On", onOffFolder, SoundhandlerOnOff, true, "nil") + mgr:NewEntry("Off", onOffFolder, SoundhandlerOnOff, false, "nil") + + mgr:NewEntry("On", debugFolder, SwitchDebug, true, "nil") + mgr:NewEntry("Off", debugFolder, SwitchDebug, false, "nil") + + mgr:NewEntry("Play Sounds to Group Only", scopeFolder, SwitchSoundsToGroup, true, "nil") + mgr:NewEntry("Play Sounds to All", scopeFolder, SwitchSoundsToGroup, false, "nil") + + reg.built["Soundhandler"] = true + if SoundDebug then BASE:I("[Soundhandler/ClientMenus] Added entries under Moose Functions > Soundhandler") end + return mgr +end + +BuildSoundhandlerMenus(coalition.side.BLUE) +BuildSoundhandlerMenus(coalition.side.RED) +-- BuildSoundhandlerMenus(coalition.side.NEUTRAL) -- if ever needed + +----------------------------------------------------------------------------------------------------------------------------------- +-- LOGGING UTILITIES +----------------------------------------------------------------------------------------------------------------------------------- +function LogFiringUnit(EventData) + local coalitionStr = "UNKNOWN" + if EventData.IniCoalition == 1 then + coalitionStr = "RED" + elseif EventData.IniCoalition == 2 then + coalitionStr = "BLUE" + elseif EventData.IniCoalition == 0 then + coalitionStr = "NEUTRAL" + end + + local groupType = "UNIT" + if EventData.IniGroupName then + local group = GROUP:FindByName(EventData.IniGroupName) + if group then + if group:IsAirPlane() then + groupType = "AIRPLANE" + elseif group:IsHelicopter() then + groupType = "HELICOPTER" + elseif group:IsGround() then + groupType = "GROUND UNIT" + elseif group:IsShip() then + groupType = "SHIP" + end + end + end + + local groupName = EventData.IniGroupName or "UNKNOWN GROUP" + BASE:I(string.format("------[SHOT] %s %s (%s)", coalitionStr, groupType, groupName)) +end + +function LogDeadUnit(EventData) + local coalitionStr = "UNKNOWN" + if EventData.IniCoalition == 1 then + coalitionStr = "RED" + elseif EventData.IniCoalition == 2 then + coalitionStr = "BLUE" + elseif EventData.IniCoalition == 0 then + coalitionStr = "NEUTRAL" + end + + local groupType = "UNIT" + if EventData.IniGroupName then + local group = GROUP:FindByName(EventData.IniGroupName) + if group then + if group:IsAirPlane() then + groupType = "AIRPLANE" + elseif group:IsHelicopter() then + groupType = "HELICOPTER" + elseif group:IsGround() then + groupType = "GROUND UNIT" + elseif group:IsShip() then + groupType = "SHIP" + end + end + end + + local groupName = EventData.IniGroupName or "UNKNOWN GROUP" + BASE:I(string.format("------[DEAD] %s %s (%s)", coalitionStr, groupType, groupName)) +end + +function LogKillEvent(EventData) + local iniUnitName = EventData.IniUnitName or "Unknown Shooter" + local iniGroupName = EventData.IniGroupName or "Unknown Group" + local tgtUnitName = EventData.TgtUnitName or "Unknown Target" + local tgtGroupName = EventData.TgtGroupName or "Unknown Target Group" + + local iniCoalitionStr = "UNKNOWN" + if EventData.IniCoalition == 1 then + iniCoalitionStr = "RED" + elseif EventData.IniCoalition == 2 then + iniCoalitionStr = "BLUE" + elseif EventData.IniCoalition == 0 then + iniCoalitionStr = "NEUTRAL" + end + + local tgtCoalitionStr = "UNKNOWN" + if EventData.TgtCoalition == 1 then + tgtCoalitionStr = "RED" + elseif EventData.TgtCoalition == 2 then + tgtCoalitionStr = "BLUE" + elseif EventData.TgtCoalition == 0 then + tgtCoalitionStr = "NEUTRAL" + end + + local iniGroupType = "UNIT" + local shooterGroup = GROUP:FindByName(iniGroupName) + if shooterGroup then + if shooterGroup:IsAirPlane() then + iniGroupType = "AIRPLANE" + elseif shooterGroup:IsHelicopter() then + iniGroupType = "HELICOPTER" + elseif shooterGroup:IsGround() then + iniGroupType = "GROUND UNIT" + elseif shooterGroup:IsShip() then + iniGroupType = "SHIP" + end + end + + local tgtGroupType = "UNIT" + local targetGroup = GROUP:FindByName(tgtGroupName) + if targetGroup then + if targetGroup:IsAirPlane() then + tgtGroupType = "AIRPLANE" + elseif targetGroup:IsHelicopter() then + tgtGroupType = "HELICOPTER" + elseif targetGroup:IsGround() then + tgtGroupType = "GROUND UNIT" + elseif targetGroup:IsShip() then + tgtGroupType = "SHIP" + end + end + + BASE:I(string.format( + "-----[UNIT KILL] %s %s (%s: %s) killed %s %s (%s: %s)", + iniCoalitionStr, iniGroupType, iniGroupName, iniUnitName, + tgtCoalitionStr, tgtGroupType, tgtGroupName, tgtUnitName + )) +end + +env.info("-----DCSRetribution|MOOSE Soundhandler plugin - configuration end -----") diff --git a/resources/plugins/MooseSoundhandler/SoundFiles/Guns_Break_Left.ogg b/resources/plugins/MooseSoundhandler/SoundFiles/Guns_Break_Left.ogg new file mode 100644 index 0000000000000000000000000000000000000000..005624a55a9b35653dc2669d9d9833d3e5d410d1 GIT binary patch literal 33968 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 literal 0 HcmV?d00001 diff --git a/resources/plugins/MooseSoundhandler/SoundFiles/Guns_Break_Right.ogg b/resources/plugins/MooseSoundhandler/SoundFiles/Guns_Break_Right.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0eddfa409853964e5f3d2caf623022be4417c98a GIT binary patch literal 50788 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 literal 0 HcmV?d00001 diff --git a/resources/plugins/MooseSoundhandler/Soundhandler-config.lua b/resources/plugins/MooseSoundhandler/Soundhandler-config.lua deleted file mode 100644 index 7d974c96..00000000 --- a/resources/plugins/MooseSoundhandler/Soundhandler-config.lua +++ /dev/null @@ -1,20 +0,0 @@ --- configuration file for Soundhandler Plugin --- --- This configuration is tailored for a mission generated by DCS Retribution --- see https://github.com/dcs-retribution/dcs-retribution -------------------------------------------------------------------------------------------------------------------------------------------------------------- - - --- Autolase plugin - configuration -if dcsRetribution then - -- retrieve specific options values - if dcsRetribution.plugins then - if dcsRetribution.plugins.Soundhandler then - env.info("------DCSRetribution|Soundhandler plugin - Setting Up------") - Soundhandler_options.SoundsToGroupOnly = dcsRetribution.plugins.Soundhandler.SoundsToGroupOnly - Soundhandler_options.ShipSamSounds = dcsRetribution.plugins.Soundhandler.ShipSamSounds - Soundhandler_options.RedShootingSounds = dcsRetribution.plugins.Soundhandler.RedShootingSounds - Soundhandler_options.Debug = dcsRetribution.plugins.Soundhandler.Debug - end - end -end diff --git a/resources/plugins/MooseSoundhandler/plugin.json b/resources/plugins/MooseSoundhandler/plugin.json index c2a0a5c3..ef4dd7aa 100644 --- a/resources/plugins/MooseSoundhandler/plugin.json +++ b/resources/plugins/MooseSoundhandler/plugin.json @@ -1,10 +1,10 @@ { - "nameInUI": "Soundhandler", + "nameInUI": "Moose Soundhandler", "defaultValue": false, "specificOptions": [ { "nameInUI": "Play Sounds to Involved Group Only", - "mnemonic": "SoundsToGroupOnly", + "mnemonic": "SoundToGroupOnly", "defaultValue": true }, { @@ -13,26 +13,21 @@ "defaultValue": true }, { - "nameInUI": "Play Sounds for Red Jet Cannons", - "mnemonic": "RedShootingSounds", + "nameInUI": "Play Sounds for Own Jet Cannons", + "mnemonic": "PlayOwnShootingGuns", "defaultValue": true }, { "nameInUI": "Debug Mode", - "mnemonic": "Debug", + "mnemonic": "SoundDebug", "defaultValue": false } ], - "scriptsWorkOrders": [ - { - "file": "Plugin_Soundhandler.lua", - "mnemonic": "Soundhandler" - } - ], + "scriptsWorkOrders": [], "configurationWorkOrders": [ { - "file": "Soundhandler-config.lua", - "mnemonic": "Soundhandler-config" + "file": "Plugin_Soundhandler.lua", + "mnemonic": "MooseSoundhandler-config" } ], "otherResourceFiles": [ @@ -116,6 +111,7 @@ "SoundFiles/S2G_Tomahawk1.ogg", "SoundFiles/FriendlyFire1.ogg", "SoundFiles/FriendlyFire2.ogg", - "SoundFiles/BirdsAway.ogg" + "SoundFiles/BirdsAway.ogg", + "SoundFiles/StartFindingMeBoys.ogg" ] } \ No newline at end of file