mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
VArious fixes
This commit is contained in:
parent
2d2f901545
commit
93abef86dc
@ -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))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user