diff --git a/Moose Development/Moose/Functional/Autolase.lua b/Moose Development/Moose/Functional/Autolase.lua index 181137a00..612162389 100644 --- a/Moose Development/Moose/Functional/Autolase.lua +++ b/Moose Development/Moose/Functional/Autolase.lua @@ -325,46 +325,51 @@ end function AUTOLASE:SetPilotMenu() if self.usepilotset then local pilottable = self.pilotset:GetSetObjects() or {} + local grouptable = {} for _,_unit in pairs (pilottable) do local Unit = _unit -- Wrapper.Unit#UNIT if Unit and Unit:IsAlive() then local Group = Unit:GetGroup() + local GroupName = Group:GetName() or "none" local unitname = Unit:GetName() - if self.playermenus[unitname] then self.playermenus[unitname]:Remove() end - local lasetopm = MENU_GROUP:New(Group,"Autolase",nil) - self.playermenus[unitname] = lasetopm - local lasemenu = MENU_GROUP_COMMAND:New(Group,"Status",lasetopm,self.ShowStatus,self,Group,Unit) - if self.smokemenu then - local smoke = (self.smoketargets == true) and "off" or "on" - local smoketext = string.format("Switch smoke targets to %s",smoke) - local smokemenu = MENU_GROUP_COMMAND:New(Group,smoketext,lasetopm,self.SetSmokeTargets,self,(not self.smoketargets)) - end - if self.threatmenu then - local threatmenutop = MENU_GROUP:New(Group,"Set min lasing threat",lasetopm) - for i=0,10,2 do - local text = "Threatlevel "..tostring(i) - local threatmenu = MENU_GROUP_COMMAND:New(Group,text,threatmenutop,self.SetMinThreatLevel,self,i) - end - end - for _,_grp in pairs(self.RecceSet.Set) do - local grp = _grp -- Wrapper.Group#GROUP - local unit = grp:GetUnit(1) - --local name = grp:GetName() - if unit and unit:IsAlive() then - local name = unit:GetName() - local mname = string.gsub(name,".%d+.%d+$","") - local code = self:GetLaserCode(name) - local unittop = MENU_GROUP:New(Group,"Change laser code for "..mname,lasetopm) - for _,_code in pairs(self.LaserCodes) do - local text = tostring(_code) - if _code == code then text = text.."(*)" end - local changemenu = MENU_GROUP_COMMAND:New(Group,text,unittop,self.SetRecceLaserCode,self,name,_code,true) - end - end - end + if not grouptable[GroupName] == true then + if self.playermenus[unitname] then self.playermenus[unitname]:Remove() end -- menus + local lasetopm = MENU_GROUP:New(Group,"Autolase",nil) + self.playermenus[unitname] = lasetopm + local lasemenu = MENU_GROUP_COMMAND:New(Group,"Status",lasetopm,self.ShowStatus,self,Group,Unit) + if self.smokemenu then + local smoke = (self.smoketargets == true) and "off" or "on" + local smoketext = string.format("Switch smoke targets to %s",smoke) + local smokemenu = MENU_GROUP_COMMAND:New(Group,smoketext,lasetopm,self.SetSmokeTargets,self,(not self.smoketargets)) + end -- smokement + if self.threatmenu then + local threatmenutop = MENU_GROUP:New(Group,"Set min lasing threat",lasetopm) + for i=0,10,2 do + local text = "Threatlevel "..tostring(i) + local threatmenu = MENU_GROUP_COMMAND:New(Group,text,threatmenutop,self.SetMinThreatLevel,self,i) + end -- threatlevel + end -- threatmenu + for _,_grp in pairs(self.RecceSet.Set) do + local grp = _grp -- Wrapper.Group#GROUP + local unit = grp:GetUnit(1) + --local name = grp:GetName() + if unit and unit:IsAlive() then + local name = unit:GetName() + local mname = string.gsub(name,".%d+.%d+$","") + local code = self:GetLaserCode(name) + local unittop = MENU_GROUP:New(Group,"Change laser code for "..mname,lasetopm) + for _,_code in pairs(self.LaserCodes) do + local text = tostring(_code) + if _code == code then text = text.."(*)" end + local changemenu = MENU_GROUP_COMMAND:New(Group,text,unittop,self.SetRecceLaserCode,self,name,_code,true) + end -- Codes + end -- unit alive + end -- Recceset + grouptable[GroupName] = true + end -- grouptable[GroupName] --lasemenu:Refresh() - end - end + end -- unit alive + end -- pilot loop else if not self.NoMenus then self.Menu = MENU_COALITION_COMMAND:New(self.coalition,"Autolase",nil,self.ShowStatus,self)