From 9fb03d9d8aa2692ee289279552461dbf06c2de31 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Tue, 8 Oct 2024 10:04:05 +0200 Subject: [PATCH] xx --- Moose Development/Moose/Ops/Awacs.lua | 14 ++++++++----- Moose Development/Moose/Wrapper/Group.lua | 25 +++++++++++++++++------ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/Moose Development/Moose/Ops/Awacs.lua b/Moose Development/Moose/Ops/Awacs.lua index e04a1060d..b450bebc1 100644 --- a/Moose Development/Moose/Ops/Awacs.lua +++ b/Moose Development/Moose/Ops/Awacs.lua @@ -17,7 +17,7 @@ -- === -- -- ### Author: **applevangelist** --- @date Last Update July 2024 +-- @date Last Update Oct 2024 -- @module Ops.AWACS -- @image OPS_AWACS.jpg @@ -509,7 +509,7 @@ do -- @field #AWACS AWACS = { ClassName = "AWACS", -- #string - version = "0.2.66", -- #string + version = "0.2.67", -- #string lid = "", -- #string coalition = coalition.side.BLUE, -- #number coalitiontxt = "blue", -- #string @@ -2446,7 +2446,7 @@ function AWACS:_GetCallSign(Group,GID, IsPlayer) local callsign = "Ghost 1" if Group and Group:IsAlive() then - callsign = Group:GetCustomCallSign(self.callsignshort,self.keepnumber,self.callsignTranslations) + callsign = Group:GetCustomCallSign(self.callsignshort,self.keepnumber,self.callsignTranslations,self.callsignCustomFunc,self.callsignCustomArgs) end return callsign end @@ -2455,10 +2455,12 @@ end -- @param #AWACS self -- @param #boolean ShortCallsign If true, only call out the major flight number -- @param #boolean Keepnumber If true, keep the **customized callsign** in the #GROUP name as-is, no amendments or numbers. --- @param #table CallsignTranslations (optional) Table to translate between DCS standard callsigns and bespoke ones. Does not apply if using customized +-- @param #table CallsignTranslations (Optional) Table to translate between DCS standard callsigns and bespoke ones. Does not apply if using customized. -- callsigns from playername or group name. +-- @param #func CallsignCustomFunc (Optional) For player names only(!). If given, this function will return the callsign. Needs to take the groupname and the playername as first two arguments. +-- @param #arg ... (Optional) Comma separated arguments to add to the custom function call after groupname and playername. -- @return #AWACS self -function AWACS:SetCallSignOptions(ShortCallsign,Keepnumber,CallsignTranslations) +function AWACS:SetCallSignOptions(ShortCallsign,Keepnumber,CallsignTranslations,CallsignCustomFunc,...) if not ShortCallsign or ShortCallsign == false then self.callsignshort = false else @@ -2466,6 +2468,8 @@ function AWACS:SetCallSignOptions(ShortCallsign,Keepnumber,CallsignTranslations) end self.keepnumber = Keepnumber or false self.callsignTranslations = CallsignTranslations + self.callsignCustomFunc = CallsignCustomFunc + self.callsignCustomArgs = arg or {} return self end diff --git a/Moose Development/Moose/Wrapper/Group.lua b/Moose Development/Moose/Wrapper/Group.lua index a8f27de21..f99700a84 100644 --- a/Moose Development/Moose/Wrapper/Group.lua +++ b/Moose Development/Moose/Wrapper/Group.lua @@ -2926,8 +2926,10 @@ end -- @param #GROUP self -- @param #boolean ShortCallsign Return a shortened customized callsign, i.e. "Ghostrider 9" and not "Ghostrider 9 1" -- @param #boolean Keepnumber (Player only) Return customized callsign, incl optional numbers at the end, e.g. "Aerial 1-1#Ghostrider 109" results in "Ghostrider 109", if you want to e.g. use historical US Navy Callsigns --- @param #table CallsignTranslations Table to translate between DCS standard callsigns and bespoke ones. Overrides personal/parsed callsigns if set +-- @param #table CallsignTranslations (Optional) Table to translate between DCS standard callsigns and bespoke ones. Overrides personal/parsed callsigns if set -- callsigns from playername or group name. +-- @param #func CustomFunction (Optional) For player names only(!). If given, this function will return the callsign. Needs to take the groupname and the playername as first arguments. +-- @param #arg ... (Optional) Comma separated arguments to add to the CustomFunction call after groupname and playername. -- @return #string Callsign -- @usage -- -- suppose there are three groups with one (client) unit each: @@ -2948,8 +2950,12 @@ end -- -- Apollo for Slot 2 or Apollo 403 if Keepnumber is set -- -- Apollo for Slot 3 -- -- Bengal-4 for Slot 4 - -function GROUP:GetCustomCallSign(ShortCallsign,Keepnumber,CallsignTranslations) +-- +-- -- Using a custom function (for player units **only**): +-- -- Imagine your playernames are looking like so: "[Squadname] | Cpt Apple" and you only want to have the last word as callsign, i.e. "Apple" here. Then this custom function will return this: +-- local callsign = mygroup:GetCustomCallSign(true,false,nil,function(groupname,playername) return string.match(playername,"([%a]+)$") end) +-- +function GROUP:GetCustomCallSign(ShortCallsign,Keepnumber,CallsignTranslations,CustomFunction,...) --self:I("GetCustomCallSign") local callsign = "Ghost 1" @@ -2963,7 +2969,14 @@ function GROUP:GetCustomCallSign(ShortCallsign,Keepnumber,CallsignTranslations) local callnumbermajor = string.char(string.byte(callnumber,1)) -- 9 local callnumberminor = string.char(string.byte(callnumber,2)) -- 1 local personalized = false - + local playername = IsPlayer == true and self:GetPlayerName() or shortcallsign + + if CustomFunction and IsPlayer then + local arguments = arg or {} + local callsign = CustomFunction(groupname,playername,unpack(arguments)) + return callsign + end + -- prioritize bespoke callsigns over parsing, prefer parsing over default callsigns if CallsignTranslations and CallsignTranslations[callsignroot] then callsignroot = CallsignTranslations[callsignroot] @@ -2975,9 +2988,9 @@ function GROUP:GetCustomCallSign(ShortCallsign,Keepnumber,CallsignTranslations) shortcallsign = string.match(groupname,"#%s*([%a]+)") or "Ghost" -- Ghostrider end personalized = true - elseif IsPlayer and string.find(self:GetPlayerName(),"|") then + elseif IsPlayer and string.find(playername,"|") then -- personalized flight name in group naming - shortcallsign = string.match(self:GetPlayerName(),"|%s*([%a]+)") or string.match(self:GetPlayerName(),"|%s*([%d]+)") or "Ghost" -- Ghostrider + shortcallsign = string.match(playername,"|%s*([%a]+)") or string.match(self:GetPlayerName(),"|%s*([%d]+)") or "Ghost" -- Ghostrider personalized = true end