From 3aa9ffc2414af53c91221fd4e8b9bcb35d9b7a1b Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Sat, 10 Sep 2022 12:54:37 +0200 Subject: [PATCH 1/4] #MODULES * ordered list --- Moose Development/Moose/Modules.lua | 141 ++++++++++++++-------------- 1 file changed, 71 insertions(+), 70 deletions(-) diff --git a/Moose Development/Moose/Modules.lua b/Moose Development/Moose/Modules.lua index a4277e3e6..a7588315b 100644 --- a/Moose Development/Moose/Modules.lua +++ b/Moose Development/Moose/Modules.lua @@ -1,51 +1,51 @@ __Moose.Include( 'Scripts/Moose/Utilities/Enums.lua' ) -__Moose.Include( 'Scripts/Moose/Utilities/Routines.lua' ) -__Moose.Include( 'Scripts/Moose/Utilities/Utils.lua' ) -__Moose.Include( 'Scripts/Moose/Utilities/Profiler.lua' ) -__Moose.Include( 'Scripts/Moose/Utilities/Templates.lua' ) -__Moose.Include( 'Scripts/Moose/Utilities/STTS.lua' ) __Moose.Include( 'Scripts/Moose/Utilities/FiFo.lua' ) +__Moose.Include( 'Scripts/Moose/Utilities/Profiler.lua' ) +__Moose.Include( 'Scripts/Moose/Utilities/Routines.lua' ) __Moose.Include( 'Scripts/Moose/Utilities/Socket.lua' ) +__Moose.Include( 'Scripts/Moose/Utilities/STTS.lua' ) +__Moose.Include( 'Scripts/Moose/Utilities/Templates.lua' ) +__Moose.Include( 'Scripts/Moose/Utilities/Utils.lua' ) __Moose.Include( 'Scripts/Moose/Core/Base.lua' ) + +__Moose.Include( 'Scripts/Moose/Core/Astar.lua' ) __Moose.Include( 'Scripts/Moose/Core/Beacon.lua' ) __Moose.Include( 'Scripts/Moose/Core/Condition.lua' ) -__Moose.Include( 'Scripts/Moose/Core/UserFlag.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Report.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Scheduler.lua' ) -__Moose.Include( 'Scripts/Moose/Core/ScheduleDispatcher.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Event.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Settings.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Menu.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Zone.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Zone_Detection.lua' ) __Moose.Include( 'Scripts/Moose/Core/Database.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Set.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Point.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Velocity.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Message.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Event.lua' ) __Moose.Include( 'Scripts/Moose/Core/Fsm.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Goal.lua' ) +__Moose.Include( 'Scripts/Moose/Core/MarkerOps_Base.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Menu.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Message.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Point.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Report.lua' ) +__Moose.Include( 'Scripts/Moose/Core/ScheduleDispatcher.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Scheduler.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Set.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Settings.lua' ) __Moose.Include( 'Scripts/Moose/Core/Spawn.lua' ) __Moose.Include( 'Scripts/Moose/Core/SpawnStatic.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Timer.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Goal.lua' ) __Moose.Include( 'Scripts/Moose/Core/Spot.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Astar.lua' ) -__Moose.Include( 'Scripts/Moose/Core/MarkerOps_Base.lua' ) __Moose.Include( 'Scripts/Moose/Core/TextAndSound.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Condition.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Timer.lua' ) +__Moose.Include( 'Scripts/Moose/Core/UserFlag.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Velocity.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Zone_Detection.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Zone.lua' ) -__Moose.Include( 'Scripts/Moose/Wrapper/Object.lua' ) -__Moose.Include( 'Scripts/Moose/Wrapper/Identifiable.lua' ) -__Moose.Include( 'Scripts/Moose/Wrapper/Positionable.lua' ) +__Moose.Include( 'Scripts/Moose/Wrapper/Airbase.lua' ) +__Moose.Include( 'Scripts/Moose/Wrapper/Client.lua' ) __Moose.Include( 'Scripts/Moose/Wrapper/Controllable.lua' ) __Moose.Include( 'Scripts/Moose/Wrapper/Group.lua' ) -__Moose.Include( 'Scripts/Moose/Wrapper/Unit.lua' ) -__Moose.Include( 'Scripts/Moose/Wrapper/Client.lua' ) -__Moose.Include( 'Scripts/Moose/Wrapper/Static.lua' ) -__Moose.Include( 'Scripts/Moose/Wrapper/Airbase.lua' ) -__Moose.Include( 'Scripts/Moose/Wrapper/Scenery.lua' ) +__Moose.Include( 'Scripts/Moose/Wrapper/Identifiable.lua' ) __Moose.Include( 'Scripts/Moose/Wrapper/Marker.lua' ) +__Moose.Include( 'Scripts/Moose/Wrapper/Object.lua' ) +__Moose.Include( 'Scripts/Moose/Wrapper/Positionable.lua' ) +__Moose.Include( 'Scripts/Moose/Wrapper/Scenery.lua' ) +__Moose.Include( 'Scripts/Moose/Wrapper/Static.lua' ) +__Moose.Include( 'Scripts/Moose/Wrapper/Unit.lua' ) __Moose.Include( 'Scripts/Moose/Cargo/Cargo.lua' ) __Moose.Include( 'Scripts/Moose/Cargo/CargoUnit.lua' ) @@ -53,60 +53,61 @@ __Moose.Include( 'Scripts/Moose/Cargo/CargoSlingload.lua' ) __Moose.Include( 'Scripts/Moose/Cargo/CargoCrate.lua' ) __Moose.Include( 'Scripts/Moose/Cargo/CargoGroup.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Scoring.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/CleanUp.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Movement.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Sead.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Escort.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/MissileTrainer.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/AICSAR.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Artillery.lua' ) __Moose.Include( 'Scripts/Moose/Functional/ATC_Ground.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Autolase.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/CleanUp.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Designate.lua' ) __Moose.Include( 'Scripts/Moose/Functional/Detection.lua' ) __Moose.Include( 'Scripts/Moose/Functional/DetectionZones.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Designate.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/RAT.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Range.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/ZoneGoal.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/ZoneGoalCoalition.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/ZoneCaptureCoalition.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Artillery.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Suppression.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/PseudoATC.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Warehouse.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Escort.lua' ) __Moose.Include( 'Scripts/Moose/Functional/Fox.lua' ) __Moose.Include( 'Scripts/Moose/Functional/Mantis.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/MissileTrainer.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Movement.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/PseudoATC.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Range.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/RAT.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Scoring.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Sead.lua' ) __Moose.Include( 'Scripts/Moose/Functional/Shorad.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/Autolase.lua' ) -__Moose.Include( 'Scripts/Moose/Functional/AICSAR.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Suppression.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/Warehouse.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/ZoneCaptureCoalition.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/ZoneGoal.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/ZoneGoalCargo.lua' ) +__Moose.Include( 'Scripts/Moose/Functional/ZoneGoalCoalition.lua' ) __Moose.Include( 'Scripts/Moose/Ops/Airboss.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/RecoveryTanker.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/RescueHelo.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/AirWing.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/ArmyGroup.lua' ) __Moose.Include( 'Scripts/Moose/Ops/ATIS.lua' ) __Moose.Include( 'Scripts/Moose/Ops/Auftrag.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Target.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/OpsGroup.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/FlightGroup.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/NavyGroup.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/ArmyGroup.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Cohort.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Squadron.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Platoon.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Legion.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/AirWing.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Awacs.lua' ) __Moose.Include( 'Scripts/Moose/Ops/Brigade.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Intelligence.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Chief.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Cohort.lua' ) __Moose.Include( 'Scripts/Moose/Ops/Commander.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/OpsTransport.lua' ) __Moose.Include( 'Scripts/Moose/Ops/CSAR.lua' ) __Moose.Include( 'Scripts/Moose/Ops/CTLD.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/OpsZone.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Chief.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Flotilla.lua' ) __Moose.Include( 'Scripts/Moose/Ops/Fleet.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Awacs.lua' ) -__Moose.Include( 'Scripts/Moose/Ops/Operation.lua' ) __Moose.Include( 'Scripts/Moose/Ops/FlightControl.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/FlightGroup.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Flotilla.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Intelligence.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Legion.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/NavyGroup.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Operation.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/OpsGroup.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/OpsTransport.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/OpsZone.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Platoon.lua' ) __Moose.Include( 'Scripts/Moose/Ops/PlayerTask.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/RecoveryTanker.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/RescueHelo.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Squadron.lua' ) +__Moose.Include( 'Scripts/Moose/Ops/Target.lua' ) __Moose.Include( 'Scripts/Moose/AI/AI_Balancer.lua' ) __Moose.Include( 'Scripts/Moose/AI/AI_Air.lua' ) @@ -145,12 +146,12 @@ __Moose.Include( 'Scripts/Moose/Actions/Act_Route.lua' ) __Moose.Include( 'Scripts/Moose/Actions/Act_Account.lua' ) __Moose.Include( 'Scripts/Moose/Actions/Act_Assist.lua' ) -__Moose.Include( 'Scripts/Moose/Sound/UserSound.lua' ) -__Moose.Include( 'Scripts/Moose/Sound/SoundOutput.lua' ) __Moose.Include( 'Scripts/Moose/Sound/Radio.lua' ) __Moose.Include( 'Scripts/Moose/Sound/RadioQueue.lua' ) __Moose.Include( 'Scripts/Moose/Sound/RadioSpeech.lua' ) +__Moose.Include( 'Scripts/Moose/Sound/SoundOutput.lua' ) __Moose.Include( 'Scripts/Moose/Sound/SRS.lua' ) +__Moose.Include( 'Scripts/Moose/Sound/UserSound.lua' ) __Moose.Include( 'Scripts/Moose/Tasking/CommandCenter.lua' ) __Moose.Include( 'Scripts/Moose/Tasking/Mission.lua' ) From 5d1998accbe39cf8725206a07137c721ad465861 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Sat, 10 Sep 2022 15:14:41 +0200 Subject: [PATCH 2/4] #CONTROLLABLE *Foreign class definiton removed --- Moose Development/Moose/Wrapper/Controllable.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Moose Development/Moose/Wrapper/Controllable.lua b/Moose Development/Moose/Wrapper/Controllable.lua index 156fb8be2..e5a165ea1 100644 --- a/Moose Development/Moose/Wrapper/Controllable.lua +++ b/Moose Development/Moose/Wrapper/Controllable.lua @@ -3871,7 +3871,7 @@ end --- Returns if the unit is a submarine. -- @param #POSITIONABLE self -- @return #boolean Submarines attributes result. -function POSITIONABLE:IsSubmarine() +function CONTROLLABLE:IsSubmarine() self:F2() local DCSUnit = self:GetDCSObject() From 236b4efb9b4b204c0f930446818204375a8da626 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Sun, 11 Sep 2022 14:22:47 +0200 Subject: [PATCH 3/4] #PLAYERTASKCONTROLLER * Various fixes and improvements --- Moose Development/Moose/Ops/PlayerTask.lua | 394 ++++++++++++++++----- 1 file changed, 299 insertions(+), 95 deletions(-) diff --git a/Moose Development/Moose/Ops/PlayerTask.lua b/Moose Development/Moose/Ops/PlayerTask.lua index fc22c647f..82aed5737 100644 --- a/Moose Development/Moose/Ops/PlayerTask.lua +++ b/Moose Development/Moose/Ops/PlayerTask.lua @@ -684,6 +684,11 @@ do ------------------------------------------------------------------------------------------------------------------- -- PLAYERTASKCONTROLLER -- TODO: PLAYERTASKCONTROLLER +-- DONE Playername from after # +-- DONE Coalition-level screen info to SET based +-- DONE Flash directions +-- TODO less rebuilds menu, Task info menu available after join +-- DONE Limit menu entries ------------------------------------------------------------------------------------------------------------------- --- PLAYERTASKCONTROLLER class. @@ -715,8 +720,13 @@ do -- @field #boolean precisionbombing -- @field Ops.FlightGroup#FLIGHTGROUP LasingDrone -- @field Core.MarkerOps_BASE#MARKEROPS_BASE MarkerOps --- @field #boolean askinfomenu +-- @field #boolean taskinfomenu -- @field #boolean MarkerReadOnly +-- @field #table FlashPlayer List of player who switched Flashing Direction Info on +-- @field #boolean AllowFlash Flashing directions for players allowed +-- @field #number menuitemlimit +-- @field #boolean activehasinfomenu +-- @field #number holdmenutime -- @extends Core.Fsm#FSM --- @@ -893,6 +903,10 @@ do -- POINTEROVERTARGET = "%s, %s, pointer in reach for task %03d, lasing!", -- POINTERTARGETREPORT = "\nPointer in reach: %s\nLasing: %s", -- POINTERTARGETLASINGTTS = ". Pointer in reach and lasing.", +-- TARGET = "Target", +-- FLASHON = "%s - Flashing directions is now ON!", +-- FLASHOFF = "%s - Flashing directions is now OFF!", +-- FLASHMENU = "Flash Directions Switch", -- }, -- -- e.g. @@ -1004,7 +1018,8 @@ PLAYERTASKCONTROLLER = { gettext = nil, locale = "en", precisionbombing = false, - taskinfomenu = true, + taskinfomenu = false, + activehasinfomenu = false, MarkerReadOnly = false, } @@ -1030,9 +1045,9 @@ AUFTRAG.Type.PRECISIONBOMBING = "Precision Bombing" -- @field #number AAA GROUP.Attribute.GROUND_AAA -- @field #number EWR GROUP.Attribute.GROUND_EWR PLAYERTASKCONTROLLER.SeadAttributes = { - SAM = GROUP.Attribute.GROUND_SAM, - AAA = GROUP.Attribute.GROUND_AAA, - EWR = GROUP.Attribute.GROUND_EWR, + SAM = GROUP.Attribute.GROUND_SAM, + AAA = GROUP.Attribute.GROUND_AAA, + EWR = GROUP.Attribute.GROUND_EWR, } --- @@ -1094,6 +1109,10 @@ PLAYERTASKCONTROLLER.Messages = { POINTEROVERTARGET = "%s, %s, pointer in reach for task %03d, lasing!", POINTERTARGETREPORT = "\nPointer in reach: %s\nLasing: %s", POINTERTARGETLASINGTTS = ". Pointer in reach and lasing.", + TARGET = "Target", + FLASHON = "%s - Flashing directions is now ON!", + FLASHOFF = "%s - Flashing directions is now OFF!", + FLASHMENU = "Flash Directions Switch", }, DE = { TASKABORT = "Auftrag abgebrochen!", @@ -1151,12 +1170,16 @@ PLAYERTASKCONTROLLER.Messages = { POINTEROVERTARGET = "%s, %s, Marker im Zielbereich für %03d, Laser an!", POINTERTARGETREPORT = "\nMarker im Zielbereich: %s\nLaser an: %s", POINTERTARGETLASINGTTS = ". Marker im Zielbereich, Laser is an.", + TARGET = "Ziel", + FLASHON = "%s - Richtungsangaben einblenden ist EIN!", + FLASHOFF = "%s - Richtungsangaben einblenden ist AUS!", + FLASHMENU = "Richtungsangaben Schalter", }, } --- PLAYERTASK class version. -- @field #string version -PLAYERTASKCONTROLLER.version="0.1.30" +PLAYERTASKCONTROLLER.version="0.1.32" --- Constructor -- @param #PLAYERTASKCONTROLLER self @@ -1190,10 +1213,15 @@ function PLAYERTASKCONTROLLER:New(Name, Coalition, Type, ClientFilter) self.TasksPerPlayer = FIFO:New() -- Utilities.FiFo#FIFO self.PrecisionTasks = FIFO:New() -- Utilities.FiFo#FIFO self.PlayerMenu = {} -- #table + self.FlashPlayer = {} -- #table + self.AllowFlash = false self.lasttaskcount = 0 self.taskinfomenu = false + self.activehasinfomenu = false self.MenuName = nil + self.menuitemlimit = 5 + self.holdmenutime = 30 self.MarkerReadOnly = false @@ -1311,6 +1339,16 @@ function PLAYERTASKCONTROLLER:_InitLocalization() return self end +--- [User] Set flash directions option for player (player based info) +-- @param #PLAYERTASKCONTROLLER self +-- @param #boolean OnOff Set to `true` to switch on and `false` to switch off. Default is OFF. +-- @return #PLAYERTASKCONTROLLER self +function PLAYERTASKCONTROLLER:SetAllowFlashDirection(OnOff) + self:T(self.lid.."SetAllowFlashDirection") + self.AllowFlash = OnOff + return self +end + --- [User] Set repetition options for tasks -- @param #PLAYERTASKCONTROLLER self -- @param #boolean OnOff Set to `true` to switch on and `false` to switch off (defaults to true) @@ -1329,6 +1367,22 @@ function PLAYERTASKCONTROLLER:SetTaskRepetition(OnOff, Repeats) return self end +--- [Internal] Send message to SET_CLIENT of players +-- @param #PLAYERTASKCONTROLLER self +-- @param #string Text the text to be send +-- @param #number Seconds (optional) Seconds to show, default 10 +-- @return #PLAYERTASKCONTROLLER self +function PLAYERTASKCONTROLLER:_SendMessageToClients(Text,Seconds) + self:T(self.lid.."_SendMessageToClients") + local seconds = Seconds or 10 + self.ClientSet:ForEachClient( + function (Client) + local m = MESSAGE:New(Text,seconds,"Tasking"):ToClient(Client) + end + ) + return self +end + --- [User] Allow precision laser-guided bombing on statics and "high-value" ground units (MBT etc) -- @param #PLAYERTASKCONTROLLER self -- @param Ops.FlightGroup#FLIGHTGROUP FlightGroup The FlightGroup (e.g. drone) to be used for lasing (one unit in one group only). @@ -1421,9 +1475,11 @@ function PLAYERTASKCONTROLLER:_GetPlayerName(Client) -- personalized flight name in player naming ttsplayername = string.match(playername,"| ([%a]+)") end - if string.find(playername,"#") then + local group = Client:GetGroup() + local groupname = group:GetName() + if string.find(groupname,"#") then -- personalized flight name in player naming - ttsplayername = string.match(playername,"# ([%a]+)") + ttsplayername = string.match(groupname,"#([%a]+)") end return playername, ttsplayername end @@ -1456,6 +1512,24 @@ function PLAYERTASKCONTROLLER:DisableTaskInfoMenu() return self end +--- [User] Set menu build fine-tuning options +-- @param #PLAYERTASKCONTROLLER self +-- @param #boolean InfoMenu If `true` this option will allow to show the Task Info-Menu also when a player has an active task. +-- Since the menu isn't refreshed if a player holds an active task, the info in there might be stale. +-- @param #number ItemLimit Number of items per task type to show, default 5. +-- @param #number HoldTime Minimum number of seconds between menu refreshes (called every 30 secs) if a player has **no active task**. +-- @return #PLAYERTASKCONTROLLER self +function PLAYERTASKCONTROLLER:SetMenuOptions(InfoMenu,ItemLimit,HoldTime) + self:T(self.lid.."SetMenuOptions") + self.activehasinfomenu = InfoMenu or false + if self.activehasinfomenu then + self:EnableTaskInfoMenu() + end + self.menuitemlimit = ItemLimit or 5 + self.holdmenutime = HoldTime or 30 + return self +end + --- [User] Forbid F10 markers to be deleted by pilots. Note: Marker will auto-delete when the undelying task is done. -- @param #PLAYERTASKCONTROLLER self -- @return #PLAYERTASKCONTROLLER self @@ -1639,7 +1713,6 @@ function PLAYERTASKCONTROLLER:_GetTasksPerType() table.sort(threattable, function (k1, k2) return k1.threat > k2.threat end ) - for _id,_data in pairs(threattable) do local threat=_data.threat local task = _data.task -- Ops.PlayerTask#PLAYERTASK @@ -1921,15 +1994,15 @@ end -- Default attribute types are: GROUP.Attribute.GROUND_SAM, GROUP.Attribute.GROUND_AAA, and GROUP.Attribute.GROUND_EWR. -- If you want to e.g. exclude AAA, so target groups with this attribute are assigned CAS or BAI tasks, and not SEAD, use this function as follows: -- --- `mycontroller:SetSEADAttributes({GROUP.Attribute.GROUND_SAM, GROUP.Attribute.GROUND_EWR})` +-- `mycontroller:SetSEADAttributes({GROUP.Attribute.GROUND_SAM, GROUP.Attribute.GROUND_EWR})` -- function PLAYERTASKCONTROLLER:SetSEADAttributes(Attributes) - self:T(self.lid.."SetSEADAttributes") - if type(Attributes) ~= "table" then - Attributes = {Attributes} - end - self.SeadAttributes = Attributes - return self + self:T(self.lid.."SetSEADAttributes") + if type(Attributes) ~= "table" then + Attributes = {Attributes} + end + self.SeadAttributes = Attributes + return self end --- [Internal] Function the check against SeadAttributes @@ -1937,15 +2010,15 @@ end -- @param #string Attribute -- @return #boolean IsSead function PLAYERTASKCONTROLLER:_IsAttributeSead(Attribute) - self:T(self.lid.."_IsAttributeSead?") - local IsSead = false - for _,_attribute in pairs(self.SeadAttributes) do - if Attribute == _attribute then - IsSead = true - break - end - end - return IsSead + self:T(self.lid.."_IsAttributeSead?") + local IsSead = false + for _,_attribute in pairs(self.SeadAttributes) do + if Attribute == _attribute then + IsSead = true + break + end + end + return IsSead end --- [Internal] Add a task to the task queue @@ -1975,22 +2048,22 @@ function PLAYERTASKCONTROLLER:_AddTask(Target) elseif targetobject:IsInstanceOf("GROUP") then self:T("SEAD Check GROUP") local attribute = targetobject:GetAttribute() - if self:_IsAttributeSead(attribute) then - type = AUFTRAG.Type.SEAD - --ttstype = "suppress air defense" - ttstype = self.gettext:GetEntry("SEADTTS",self.locale) - end + if self:_IsAttributeSead(attribute) then + type = AUFTRAG.Type.SEAD + --ttstype = "suppress air defense" + ttstype = self.gettext:GetEntry("SEADTTS",self.locale) + end elseif targetobject:IsInstanceOf("SET_GROUP") then self:T("SEAD Check SET_GROUP") targetobject:ForEachGroup( function (group) local attribute = group:GetAttribute() - if self:_IsAttributeSead(attribute) then - type = AUFTRAG.Type.SEAD - --ttstype = "suppress air defense" - ttstype = self.gettext:GetEntry("SEADTTS",self.locale) - end - end + if self:_IsAttributeSead(attribute) then + type = AUFTRAG.Type.SEAD + --ttstype = "suppress air defense" + ttstype = self.gettext:GetEntry("SEADTTS",self.locale) + end + end ) elseif targetobject:IsInstanceOf("SET_UNIT") then self:T("SEAD Check SET_UNIT") @@ -2135,7 +2208,7 @@ function PLAYERTASKCONTROLLER:_JoinTask(Group, Client, Task) -- Player already has a task if not self.NoScreenOutput then local text = self.gettext:GetEntry("HAVEACTIVETASK",self.locale) - local m=MESSAGE:New(text,"10","Tasking"):ToGroup(Group) + local m=MESSAGE:New(text,"10","Tasking"):ToClient(Client) end return self end @@ -2151,7 +2224,8 @@ function PLAYERTASKCONTROLLER:_JoinTask(Group, Client, Task) local text = string.format(joined,ttsplayername, self.MenuName or self.Name, Task.TTSType, Task.PlayerTaskNr) self:T(self.lid..text) if not self.NoScreenOutput then - local m=MESSAGE:New(text,"10","Tasking"):ToAll() + self:_SendMessageToClients(text) + --local m=MESSAGE:New(text,"10","Tasking"):ToAll() end if self.UseSRS then self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2) @@ -2168,6 +2242,55 @@ function PLAYERTASKCONTROLLER:_JoinTask(Group, Client, Task) return self end +--- [Internal] Switch flashing info for a client +-- @param #PLAYERTASKCONTROLLER self +-- @param Wrapper.Group#GROUP Group +-- @param Wrapper.Client#CLIENT Client +-- @return #PLAYERTASKCONTROLLER self +function PLAYERTASKCONTROLLER:_SwitchFlashing(Group, Client) + self:T(self.lid.."_SwitchFlashing") + local playername, ttsplayername = self:_GetPlayerName(Client) + if (not self.FlashPlayer[playername]) or (self.FlashPlayer[playername] == false) then + -- Switch on + self.FlashPlayer[playername] = Client + local flashtext = self.gettext:GetEntry("FLASHON",self.locale) + local text = string.format(flashtext,ttsplayername) + local m = MESSAGE:New(text,10,"Tasking"):ToClient(Client) + else + -- Switch off + self.FlashPlayer[playername] = false + local flashtext = self.gettext:GetEntry("FLASHOFF",self.locale) + local text = string.format(flashtext,ttsplayername) + local m = MESSAGE:New(text,10,"Tasking"):ToClient(Client) + end + return self +end + +--- [Internal] Flashing directional info for a client +-- @param #PLAYERTASKCONTROLLER self +-- @return #PLAYERTASKCONTROLLER self +function PLAYERTASKCONTROLLER:_FlashInfo() + self:T(self.lid.."_FlashInfo") + for _playername,_client in pairs(self.FlashPlayer) do + if _client and _client:IsAlive() then + if self.TasksPerPlayer:HasUniqueID(_playername) then + local task = self.TasksPerPlayer:ReadByID(_playername) -- Ops.PlayerTask#PLAYERTASK + local Coordinate = task.Target:GetCoordinate() + local CoordText = "" + if self.Type ~= PLAYERTASKCONTROLLER.Type.A2A then + CoordText = Coordinate:ToStringA2G(_client) + else + c = Coordinate:ToStringA2A(_client) + end + local targettxt = self.gettext:GetEntry("TARGET",self.locale) + local text = "Target: "..CoordText + local m = MESSAGE:New(text,10,"Tasking"):ToClient(_client) + end + end + end + return self +end + --- [Internal] Show active task info -- @param #PLAYERTASKCONTROLLER self -- @param Wrapper.Group#GROUP Group @@ -2252,7 +2375,7 @@ function PLAYERTASKCONTROLLER:_ActiveTaskInfo(Group, Client, Task) text = self.gettext:GetEntry("NOACTIVETASK",self.locale) end if not self.NoScreenOutput then - local m=MESSAGE:New(text,15,"Tasking"):ToGroup(Group) + local m=MESSAGE:New(text,15,"Tasking"):ToClient(Client) end return self end @@ -2281,7 +2404,7 @@ function PLAYERTASKCONTROLLER:_MarkTask(Group, Client) text = self.gettext:GetEntry("NOACTIVETASK",self.locale) end if not self.NoScreenOutput then - local m=MESSAGE:New(text,"10","Tasking"):ToGroup(Group) + local m=MESSAGE:New(text,"10","Tasking"):ToClient(Client) end return self end @@ -2309,7 +2432,7 @@ function PLAYERTASKCONTROLLER:_SmokeTask(Group, Client) text = self.gettext:GetEntry("NOACTIVETASK",self.locale) end if not self.NoScreenOutput then - local m=MESSAGE:New(text,15,"Tasking"):ToGroup(Group) + local m=MESSAGE:New(text,15,"Tasking"):ToClient(Client) end return self end @@ -2337,7 +2460,7 @@ function PLAYERTASKCONTROLLER:_FlareTask(Group, Client) text = self.gettext:GetEntry("NOACTIVETASK",self.locale) end if not self.NoScreenOutput then - local m=MESSAGE:New(text,15,"Tasking"):ToGroup(Group) + local m=MESSAGE:New(text,15,"Tasking"):ToClient(Client) end return self end @@ -2366,12 +2489,62 @@ function PLAYERTASKCONTROLLER:_AbortTask(Group, Client) text = self.gettext:GetEntry("NOACTIVETASK",self.locale) end if not self.NoScreenOutput then - local m=MESSAGE:New(text,15,"Tasking"):ToGroup(Group) + local m=MESSAGE:New(text,15,"Tasking"):ToClient(Client) end self:_BuildMenus(Client,true) return self end +--- [Internal] Build Task Info Menu +-- @param #PLAYERTASKCONTROLLER self +-- @param Wrapper.Group#GROUP group +-- @param Wrapper.Client#CLIENT client +-- @param #string playername +-- @param Core.Menu#MENU_BASE topmenu +-- @param #table tasktypes +-- @param #table taskpertype +-- @return #PLAYERTASKCONTROLLER self +function PLAYERTASKCONTROLLER:_BuildTaskInfoMenu(group,client,playername,topmenu,tasktypes,taskpertype) + if self.taskinfomenu then + local menutaskinfo = self.gettext:GetEntry("MENUTASKINFO",self.locale) + local ittypes = {} + local itaskmenu = {} + local taskinfomenu = MENU_GROUP_DELAYED:New(group,menutaskinfo,topmenu) + for _tasktype,_data in pairs(tasktypes) do + ittypes[_tasktype] = MENU_GROUP_DELAYED:New(group,_tasktype,taskinfomenu) + local tasks = taskpertype[_tasktype] or {} + local n = 0 + for _,_task in pairs(tasks) do + _task = _task -- Ops.PlayerTask#PLAYERTASK + local pilotcount = _task:CountClients() + local newtext = "]" + local tnow = timer.getTime() + -- marker for new tasks + if tnow - _task.timestamp < 60 then + newtext = "*]" + end + local menutaskno = self.gettext:GetEntry("MENUTASKNO",self.locale) + local text = string.format("%s %03d [%d%s",menutaskno,_task.PlayerTaskNr,pilotcount,newtext) + if self.UseGroupNames then + local name = _task.Target:GetName() + if name ~= "Unknown" then + text = string.format("%s (%03d) [%d%s",name,_task.PlayerTaskNr,pilotcount,newtext) + end + end + local taskentry = MENU_GROUP_COMMAND_DELAYED:New(group,text,ittypes[_tasktype],self._ActiveTaskInfo,self,group,client,_task) + --taskentry:SetTag(playername) + itaskmenu[#itaskmenu+1] = taskentry + -- keep max items limit + n = n + 1 + if n >= self.menuitemlimit then + break + end + end + end + end + return self +end + --- [Internal] Build client menus -- @param #PLAYERTASKCONTROLLER self -- @param Wrapper.Client#CLIENT Client (optional) build for this client name only @@ -2381,10 +2554,13 @@ function PLAYERTASKCONTROLLER:_BuildMenus(Client,enforced) self:T(self.lid.."_BuildMenus") local clients = self.ClientSet:GetAliveSet() - + local joinorabort = false + if Client then + -- client + enforced -- join task or abort clients = {Client} enforced = true + joinorabort = true end for _,_client in pairs(clients) do @@ -2394,11 +2570,6 @@ function PLAYERTASKCONTROLLER:_BuildMenus(Client,enforced) local unknown = self.gettext:GetEntry("UNKNOWN",self.locale) local playername = client:GetPlayerName() or unknown if group and client then - --- - -- Conditions for menu rebuild - -- 1) Player has no menu - -- 2) Player has no running task - -- 3) enforced --- -- TOPMENU --- @@ -2410,17 +2581,62 @@ function PLAYERTASKCONTROLLER:_BuildMenus(Client,enforced) if self:_CheckPlayerHasTask(playername) then playerhastask = true end local topmenu = nil - self:T("Playerhastask = "..tostring(playerhastask).." Enforced = "..tostring(enforced)) + self:I("Playerhastask = "..tostring(playerhastask).." Enforced = "..tostring(enforced).." Join or Abort = "..tostring(joinorabort)) + -- Cases to rebuild menu + -- 1) new player + -- 2) player joined a task, joinorabort = true + -- 3) player left a task, joinorabort = true + -- 4) player has no task, but number of tasks changed, and last build > 30 secs ago if self.PlayerMenu[playername] then - if enforced or not playerhastask then + -- NOT a new player + -- 2)+3) Join or abort? + if joinorabort then self.PlayerMenu[playername]:RemoveSubMenus() + self.PlayerMenu[playername]:SetTag(timer.getAbsTime()) + topmenu = self.PlayerMenu[playername] + elseif (not playerhastask) and enforced then + -- 4) last build > 30 secs? + local T0 = timer.getAbsTime() + local TDiff = T0-self.PlayerMenu[playername].MenuTag + self:I("TDiff = "..TDiff) + if TDiff >= self.holdmenutime then + self.PlayerMenu[playername]:RemoveSubMenus() + self.PlayerMenu[playername]:SetTag(timer.getAbsTime()) + end + topmenu = self.PlayerMenu[playername] + end + else + -- 1) new player# + topmenu = MENU_GROUP_DELAYED:New(group,menuname,nil) + self.PlayerMenu[playername] = topmenu + self.PlayerMenu[playername]:SetTag(timer.getAbsTime()) + end + + --[[ + if self.PlayerMenu[playername] then + if enforced and not playerhastask then + if self.PlayerMenu[playername].MenuTag then + -- don't build if < 30 secs ago + local T0 = timer.getAbsTime() + local TDiff = T0-self.PlayerMenu[playername].MenuTag + if TDiff > 30 then + -- allow rebuild + self.PlayerMenu[playername]:RemoveSubMenus() + self.PlayerMenu[playername]:SetTag(timer.getAbsTime()) + end + else + self.PlayerMenu[playername]:RemoveSubMenus() + self.PlayerMenu[playername]:SetTag(timer.getAbsTime()) + end end topmenu = self.PlayerMenu[playername] else topmenu = MENU_GROUP_DELAYED:New(group,menuname,nil) self.PlayerMenu[playername] = topmenu + self.PlayerMenu[playername]:SetTag(timer.getAbsTime()) end + --]] --- -- ACTIVE TASK MENU @@ -2443,7 +2659,13 @@ function PLAYERTASKCONTROLLER:_BuildMenus(Client,enforced) local flare = MENU_GROUP_COMMAND_DELAYED:New(group,menuflare,active,self._FlareTask,self,group,client) end local abort = MENU_GROUP_COMMAND_DELAYED:New(group,menuabort,active,self._AbortTask,self,group,client) - + + if self.activehasinfomenu and self.taskinfomenu then + local tasktypes = self:_GetAvailableTaskTypes() + local taskpertype = self:_GetTasksPerType() + self:_BuildTaskInfoMenu(group,client,playername,topmenu,tasktypes,taskpertype) + end + elseif (self.TaskQueue:Count() > 0 and enforced) or (not playerhastask) then --- -- JOIN TASK MENU @@ -2451,16 +2673,14 @@ function PLAYERTASKCONTROLLER:_BuildMenus(Client,enforced) local tasktypes = self:_GetAvailableTaskTypes() local taskpertype = self:_GetTasksPerType() local menujoin = self.gettext:GetEntry("MENUJOIN",self.locale) - local menutaskinfo = self.gettext:GetEntry("MENUTASKINFO",self.locale) local joinmenu = MENU_GROUP_DELAYED:New(group,menujoin,topmenu) local ttypes = {} local taskmenu = {} - local ittypes = {} - local itaskmenu = {} for _tasktype,_data in pairs(tasktypes) do ttypes[_tasktype] = MENU_GROUP_DELAYED:New(group,_tasktype,joinmenu) local tasks = taskpertype[_tasktype] or {} + local n = 0 for _,_task in pairs(tasks) do _task = _task -- Ops.PlayerTask#PLAYERTASK local pilotcount = _task:CountClients() @@ -2478,45 +2698,17 @@ function PLAYERTASKCONTROLLER:_BuildMenus(Client,enforced) text = string.format("%s (%03d) [%d%s",name,_task.PlayerTaskNr,pilotcount,newtext) end end - --if _task:GetState() == "Planned" or (not _task:HasPlayerName(playername)) then local taskentry = MENU_GROUP_COMMAND_DELAYED:New(group,text,ttypes[_tasktype],self._JoinTask,self,group,client,_task) - taskentry:SetTag(playername) + --taskentry:SetTag(playername) taskmenu[#taskmenu+1] = taskentry - --end + n = n + 1 + if n >= self.menuitemlimit then + break + end end end - --joinmenu:Set() - if self.taskinfomenu then - local taskinfomenu = MENU_GROUP_DELAYED:New(group,menutaskinfo,topmenu) - for _tasktype,_data in pairs(tasktypes) do - ittypes[_tasktype] = MENU_GROUP_DELAYED:New(group,_tasktype,taskinfomenu) - local tasks = taskpertype[_tasktype] or {} - for _,_task in pairs(tasks) do - _task = _task -- Ops.PlayerTask#PLAYERTASK - local pilotcount = _task:CountClients() - local newtext = "]" - local tnow = timer.getTime() - -- marker for new tasks - if tnow - _task.timestamp < 60 then - newtext = "*]" - end - local menutaskno = self.gettext:GetEntry("MENUTASKNO",self.locale) - local text = string.format("%s %03d [%d%s",menutaskno,_task.PlayerTaskNr,pilotcount,newtext) - if self.UseGroupNames then - local name = _task.Target:GetName() - if name ~= "Unknown" then - text = string.format("%s (%03d) [%d%s",name,_task.PlayerTaskNr,pilotcount,newtext) - end - end - --if _task:GetState() == "Planned" or (not _task:HasPlayerName(playername)) then - local taskentry = MENU_GROUP_COMMAND_DELAYED:New(group,text,ittypes[_tasktype],self._ActiveTaskInfo,self,group,client,_task) - taskentry:SetTag(playername) - itaskmenu[#itaskmenu+1] = taskentry - --end - end - end - --taskinfomenu:Set() + self:_BuildTaskInfoMenu(group,client,playername,topmenu,tasktypes,taskpertype) end elseif self.TaskQueue:Count() == 0 then -- no tasks (yet) @@ -2525,7 +2717,11 @@ function PLAYERTASKCONTROLLER:_BuildMenus(Client,enforced) end --- -- REFRESH MENU - --- + --- + if self.AllowFlash then + local flashtext = self.gettext:GetEntry("FLASHMENU",self.locale) + local flashmenu = MENU_GROUP_COMMAND_DELAYED:New(group,flashtext,self.PlayerMenu[playername],self._SwitchFlashing,self,group,client) + end self.PlayerMenu[playername]:Set() end end @@ -2774,6 +2970,9 @@ function PLAYERTASKCONTROLLER:onafterStatus(From, Event, To) self:_CheckTargetQueue() self:_CheckTaskQueue() self:_CheckPrecisionTasks() + if self.AllowFlash then + self:_FlashInfo() + end local targetcount = self.TargetQueue:Count() local taskcount = self.TaskQueue:Count() @@ -2826,7 +3025,8 @@ function PLAYERTASKCONTROLLER:onafterTaskCancelled(From, Event, To, Task) local canceltxttts = self.gettext:GetEntry("TASKCANCELLEDTTS",self.locale) local taskname = string.format(canceltxt, Task.PlayerTaskNr, tostring(Task.Type)) if not self.NoScreenOutput then - local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) + self:_SendMessageToClients(taskname,15) + --local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) end if self.UseSRS then taskname = string.format(canceltxttts, self.MenuName or self.Name, Task.PlayerTaskNr, tostring(Task.TTSType)) @@ -2849,7 +3049,8 @@ function PLAYERTASKCONTROLLER:onafterTaskSuccess(From, Event, To, Task) local succtxttts = self.gettext:GetEntry("TASKSUCCESSTTS",self.locale) local taskname = string.format(succtxt, Task.PlayerTaskNr, tostring(Task.Type)) if not self.NoScreenOutput then - local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) + self:_SendMessageToClients(taskname,15) + --local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) end if self.UseSRS then taskname = string.format(succtxttts, self.MenuName or self.Name, Task.PlayerTaskNr, tostring(Task.TTSType)) @@ -2872,7 +3073,8 @@ function PLAYERTASKCONTROLLER:onafterTaskFailed(From, Event, To, Task) local failtxttts = self.gettext:GetEntry("TASKFAILEDTTS",self.locale) local taskname = string.format(failtxt, Task.PlayerTaskNr, tostring(Task.Type)) if not self.NoScreenOutput then - local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) + self:_SendMessageToClients(taskname,15) + --local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) end if self.UseSRS then taskname = string.format(failtxttts, self.MenuName or self.Name, Task.PlayerTaskNr, tostring(Task.TTSType)) @@ -2895,7 +3097,8 @@ function PLAYERTASKCONTROLLER:onafterTaskRepeatOnFailed(From, Event, To, Task) local repfailtxttts = self.gettext:GetEntry("TASKFAILEDREPLANTTS",self.locale) local taskname = string.format(repfailtxt, Task.PlayerTaskNr, tostring(Task.Type)) if not self.NoScreenOutput then - local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) + self:_SendMessageToClients(taskname,15) + --local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) end if self.UseSRS then taskname = string.format(repfailtxttts, self.MenuName or self.Name, Task.PlayerTaskNr, tostring(Task.TTSType)) @@ -2917,7 +3120,8 @@ function PLAYERTASKCONTROLLER:onafterTaskAdded(From, Event, To, Task) local addtxt = self.gettext:GetEntry("TASKADDED",self.locale) local taskname = string.format(addtxt, self.MenuName or self.Name, tostring(Task.Type)) if not self.NoScreenOutput then - local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) + self:_SendMessageToClients(taskname,15) + --local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition) end if self.UseSRS then taskname = string.format(addtxt, self.MenuName or self.Name, tostring(Task.TTSType)) From eca8d6dd8d9b5c49199d2cf280227411928b5761 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Sun, 11 Sep 2022 18:21:58 +0200 Subject: [PATCH 4/4] #AWACS * Fixed AWACS custom callsigns not observed --- Moose Development/Moose/Ops/Awacs.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Moose Development/Moose/Ops/Awacs.lua b/Moose Development/Moose/Ops/Awacs.lua index f4957f689..617cff753 100644 --- a/Moose Development/Moose/Ops/Awacs.lua +++ b/Moose Development/Moose/Ops/Awacs.lua @@ -495,7 +495,7 @@ do -- @field #AWACS AWACS = { ClassName = "AWACS", -- #string - version = "0.2.41", -- #string + version = "0.2.42", -- #string lid = "", -- #string coalition = coalition.side.BLUE, -- #number coalitiontxt = "blue", -- #string @@ -2068,7 +2068,7 @@ function AWACS:_StartSettings(FlightGroup,Mission) --self.AwacsFG:SetSRS(self.PathToSRS,self.Gender,self.Culture,self.Voice,self.Port,self.PathToGoogleKey,"AWACS",self.Volume) - self.callsigntxt = string.format("%s",AWACS.CallSignClear[self.CallSign]) + self.callsigntxt = string.format("%s",self.CallSignClear[self.CallSign]) self:__CheckRadioQueue(10) @@ -2110,7 +2110,7 @@ function AWACS:_StartSettings(FlightGroup,Mission) --AwacsFG:SetSRS(self.PathToSRS,self.Gender,self.Culture,self.Voice,self.Port,nil,"AWACS") - self.callsigntxt = string.format("%s",AWACS.CallSignClear[self.CallSign]) + self.callsigntxt = string.format("%s",self.CallSignClear[self.CallSign]) local shifting = self.gettext:GetEntry("SHIFTCHANGE",self.locale) @@ -5711,7 +5711,7 @@ function AWACS:onafterStart(From, Event, To) end --self.AwacsFG:SetSRS(self.PathToSRS,self.Gender,self.Culture,self.Voice,self.Port,self.PathToGoogleKey,"AWACS",self.Volume) - self.callsigntxt = string.format("%s",AWACS.CallSignClear[self.CallSign]) + self.callsigntxt = string.format("%s",self.CallSignClear[self.CallSign]) self:__CheckRadioQueue(-10) local sunrise = self.gettext:GetEntry("SUNRISE",self.locale)