From 93abef86dccaa24fa136a0d842613e5220560e50 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Sun, 11 Sep 2022 14:23:48 +0200 Subject: [PATCH] VArious fixes --- Moose Development/Moose/Ops/PlayerTask.lua | 334 +++++++++++++++++---- 1 file changed, 269 insertions(+), 65 deletions(-) diff --git a/Moose Development/Moose/Ops/PlayerTask.lua b/Moose Development/Moose/Ops/PlayerTask.lua index fc22c647f..712be4161 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, } @@ -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 @@ -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))