mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
#PLAYERTASK
* Added precision bombing option #AUTOLASE * Added "nomenu" option #MENU_GROUP * Added MENU_GROUP:RefreshAndOrderByTag()
This commit is contained in:
parent
a5b394aa93
commit
94741f1b4a
@ -378,6 +378,7 @@ do -- MENU_MISSION
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Refreshes a radio item for a mission
|
--- Refreshes a radio item for a mission
|
||||||
-- @param #MENU_MISSION self
|
-- @param #MENU_MISSION self
|
||||||
-- @return #MENU_MISSION
|
-- @return #MENU_MISSION
|
||||||
@ -832,6 +833,29 @@ do
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Refreshes a new radio item for a group and submenus, ordering by (numerical) MenuTag
|
||||||
|
-- @param #MENU_GROUP self
|
||||||
|
-- @return #MENU_GROUP
|
||||||
|
function MENU_GROUP:RefreshAndOrderByTag()
|
||||||
|
|
||||||
|
do
|
||||||
|
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
||||||
|
missionCommands.addSubMenuForGroup( self.GroupID, self.MenuText, self.MenuParentPath )
|
||||||
|
|
||||||
|
local MenuTable = {}
|
||||||
|
for MenuText, Menu in pairs( self.Menus or {} ) do
|
||||||
|
local tag = Menu.MenuTag or math.random(1,10000)
|
||||||
|
MenuTable[#MenuTable+1] = {Tag=tag, Enty=Menu}
|
||||||
|
end
|
||||||
|
table.sort(MenuTable, function (k1, k2) return k1.tag < k2.tag end )
|
||||||
|
for _, Menu in pairs( MenuTable ) do
|
||||||
|
Menu.Entry:Refresh()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
--- Removes the sub menus recursively of this MENU_GROUP.
|
--- Removes the sub menus recursively of this MENU_GROUP.
|
||||||
-- @param #MENU_GROUP self
|
-- @param #MENU_GROUP self
|
||||||
-- @param MenuStamp
|
-- @param MenuStamp
|
||||||
|
|||||||
@ -193,6 +193,7 @@ function AUTOLASE:New(RecceSet, Coalition, Alias, PilotSet)
|
|||||||
self.SRSPath = ""
|
self.SRSPath = ""
|
||||||
self.SRSFreq = 251
|
self.SRSFreq = 251
|
||||||
self.SRSMod = radio.modulation.AM
|
self.SRSMod = radio.modulation.AM
|
||||||
|
self.NoMenus = false
|
||||||
|
|
||||||
-- Set some string id for output to DCS.log file.
|
-- Set some string id for output to DCS.log file.
|
||||||
self.lid=string.format("AUTOLASE %s (%s) | ", self.alias, self.coalition and UTILS.GetCoalitionName(self.coalition) or "unknown")
|
self.lid=string.format("AUTOLASE %s (%s) | ", self.alias, self.coalition and UTILS.GetCoalitionName(self.coalition) or "unknown")
|
||||||
@ -208,14 +209,14 @@ function AUTOLASE:New(RecceSet, Coalition, Alias, PilotSet)
|
|||||||
self:AddTransition("*", "Cancel", "*") -- Stop Autolase
|
self:AddTransition("*", "Cancel", "*") -- Stop Autolase
|
||||||
|
|
||||||
-- Menu Entry
|
-- Menu Entry
|
||||||
if not PilotSet then
|
if PilotSet then
|
||||||
self.Menu = MENU_COALITION_COMMAND:New(self.coalition,"Autolase",nil,self.ShowStatus,self)
|
|
||||||
else
|
|
||||||
self.usepilotset = true
|
self.usepilotset = true
|
||||||
self.pilotset = PilotSet
|
self.pilotset = PilotSet
|
||||||
self:HandleEvent(EVENTS.PlayerEnterAircraft)
|
self:HandleEvent(EVENTS.PlayerEnterAircraft)
|
||||||
self:SetPilotMenu()
|
--self:SetPilotMenu()
|
||||||
end
|
end
|
||||||
|
self.SetPilotMenu()
|
||||||
|
|
||||||
|
|
||||||
self:SetClusterAnalysis(false, false)
|
self:SetClusterAnalysis(false, false)
|
||||||
|
|
||||||
@ -309,6 +310,10 @@ function AUTOLASE:SetPilotMenu()
|
|||||||
lasemenu:Refresh()
|
lasemenu:Refresh()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
if not self.NoMenus then
|
||||||
|
self.Menu = MENU_COALITION_COMMAND:New(self.coalition,"Autolase",nil,self.ShowStatus,self)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|||||||
@ -683,6 +683,7 @@ do
|
|||||||
-- @field Utilities.FiFo#FIFO TargetQueue
|
-- @field Utilities.FiFo#FIFO TargetQueue
|
||||||
-- @field Utilities.FiFo#FIFO TaskQueue
|
-- @field Utilities.FiFo#FIFO TaskQueue
|
||||||
-- @field Utilities.FiFo#FIFO TasksPerPlayer
|
-- @field Utilities.FiFo#FIFO TasksPerPlayer
|
||||||
|
-- @field Utilities.FiFo#FIFO PrecisionTasks
|
||||||
-- @field Core.Set#SET_CLIENT ClientSet
|
-- @field Core.Set#SET_CLIENT ClientSet
|
||||||
-- @field #string ClientFilter
|
-- @field #string ClientFilter
|
||||||
-- @field #string Name
|
-- @field #string Name
|
||||||
@ -698,6 +699,8 @@ do
|
|||||||
-- @field #table WhiteList
|
-- @field #table WhiteList
|
||||||
-- @field Core.TextAndSound#TEXTANDSOUND gettext
|
-- @field Core.TextAndSound#TEXTANDSOUND gettext
|
||||||
-- @field #string locale
|
-- @field #string locale
|
||||||
|
-- @field #boolean precisionbombing
|
||||||
|
-- @field Ops.FlightGroup#FLIGHTGROUP LasingDrone
|
||||||
-- @extends Core.Fsm#FSM
|
-- @extends Core.Fsm#FSM
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -730,7 +733,8 @@ do
|
|||||||
--
|
--
|
||||||
-- * A2A - AUFTRAG.Type.INTERCEPT
|
-- * A2A - AUFTRAG.Type.INTERCEPT
|
||||||
-- * A2S - AUFTRAG.Type.ANTISHIP
|
-- * A2S - AUFTRAG.Type.ANTISHIP
|
||||||
-- * A2G - AUFTRAG.Type.CAS, AUFTRAG.Type.BAI, AUFTRAG.Type.SEAD, AUFTRAG.Type.BOMBING, AUFTRAG.Type.BOMBRUNWAY
|
-- * A2G - AUFTRAG.Type.CAS, AUFTRAG.Type.BAI, AUFTRAG.Type.SEAD, AUFTRAG.Type.BOMBING, AUFTRAG.Type.PRECISIONBOMBING, AUFTRAG.Type.BOMBRUNWAY
|
||||||
|
-- * A2GS - A2S and A2G combined
|
||||||
--
|
--
|
||||||
-- Task types are derived from @{Ops.Auftrag#AUFTRAG}:
|
-- Task types are derived from @{Ops.Auftrag#AUFTRAG}:
|
||||||
--
|
--
|
||||||
@ -738,6 +742,7 @@ do
|
|||||||
-- * BAI - Battlefield air interdiction, same as above, but no friendlies around
|
-- * BAI - Battlefield air interdiction, same as above, but no friendlies around
|
||||||
-- * SEAD - Same as CAS, but the enemy ground units field AAA, SAM or EWR units
|
-- * SEAD - Same as CAS, but the enemy ground units field AAA, SAM or EWR units
|
||||||
-- * Bombing - Against static targets
|
-- * Bombing - Against static targets
|
||||||
|
-- * Precision Bombing - (if enabled) Laser-guided bombing, against static targets and high-value ground targets (MBTs etc)
|
||||||
-- * Bomb Runway - Against Airbase runways (in effect, drop bombs over the runway)
|
-- * Bomb Runway - Against Airbase runways (in effect, drop bombs over the runway)
|
||||||
-- * ZONE and COORDINATE - Targets will be scanned for GROUND or STATIC enemy units and tasks created from these
|
-- * ZONE and COORDINATE - Targets will be scanned for GROUND or STATIC enemy units and tasks created from these
|
||||||
-- * Intercept - Any airborne targets, if the controller is of type "A2A"
|
-- * Intercept - Any airborne targets, if the controller is of type "A2A"
|
||||||
@ -825,6 +830,7 @@ do
|
|||||||
-- CASTTS = "close air support",
|
-- CASTTS = "close air support",
|
||||||
-- SEADTTS = "suppress air defense",
|
-- SEADTTS = "suppress air defense",
|
||||||
-- BOMBTTS = "bombing",
|
-- BOMBTTS = "bombing",
|
||||||
|
-- PRECBOMBTTS = "precision bombing",
|
||||||
-- BAITTS = "battle field air interdiction",
|
-- BAITTS = "battle field air interdiction",
|
||||||
-- ANTISHIPTTS = "anti-ship",
|
-- ANTISHIPTTS = "anti-ship",
|
||||||
-- INTERCEPTTS = "intercept",
|
-- INTERCEPTTS = "intercept",
|
||||||
@ -864,6 +870,10 @@ do
|
|||||||
-- TASKADDED = "%s has a new task %s available!",
|
-- TASKADDED = "%s has a new task %s available!",
|
||||||
-- PILOTS = "\nPilot(s): ",
|
-- PILOTS = "\nPilot(s): ",
|
||||||
-- PILOTSTTS = ". Pilot(s): ",
|
-- PILOTSTTS = ". Pilot(s): ",
|
||||||
|
-- YES = "Yes",
|
||||||
|
-- NO = "No",
|
||||||
|
-- POINTEROVERTARGET = "%s, %s, pointer over target for task %03d, lasing!",
|
||||||
|
-- POINTERTARGETREPORT = "\nPointer over target: %s\nLasing: %s\n",
|
||||||
-- },
|
-- },
|
||||||
--
|
--
|
||||||
-- e.g.
|
-- e.g.
|
||||||
@ -959,16 +969,25 @@ PLAYERTASKCONTROLLER = {
|
|||||||
WhiteList = {},
|
WhiteList = {},
|
||||||
gettext = nil,
|
gettext = nil,
|
||||||
locale = "en",
|
locale = "en",
|
||||||
|
precisionbombing = false,
|
||||||
}
|
}
|
||||||
|
|
||||||
---
|
---
|
||||||
-- @field Type
|
-- @type Type
|
||||||
|
-- @field #string A2A Air-to-Air Controller
|
||||||
|
-- @field #string A2G Air-to-Ground Controller
|
||||||
|
-- @field #string A2S Air-to-Ship Controller
|
||||||
|
-- @field #string A2GS Air-to-Ground-and-Ship Controller
|
||||||
PLAYERTASKCONTROLLER.Type = {
|
PLAYERTASKCONTROLLER.Type = {
|
||||||
["A2A"] = "Air-To-Air",
|
A2A = "Air-To-Air",
|
||||||
["A2G"] = "Air-To-Ground",
|
A2G = "Air-To-Ground",
|
||||||
["A2S"] = "Air-To-Sea",
|
A2S = "Air-To-Sea",
|
||||||
|
A2GS = "Air-To-Ground-Sea",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--- Define a new AUFTRAG Type
|
||||||
|
AUFTRAG.Type.PRECISIONBOMBING = "Precision Bombing"
|
||||||
|
|
||||||
---
|
---
|
||||||
-- @field Messages
|
-- @field Messages
|
||||||
PLAYERTASKCONTROLLER.Messages = {
|
PLAYERTASKCONTROLLER.Messages = {
|
||||||
@ -981,6 +1000,7 @@ PLAYERTASKCONTROLLER.Messages = {
|
|||||||
CASTTS = "close air support",
|
CASTTS = "close air support",
|
||||||
SEADTTS = "suppress air defense",
|
SEADTTS = "suppress air defense",
|
||||||
BOMBTTS = "bombing",
|
BOMBTTS = "bombing",
|
||||||
|
PRECBOMBTTS = "precision bombing",
|
||||||
BAITTS = "battle field air interdiction",
|
BAITTS = "battle field air interdiction",
|
||||||
ANTISHIPTTS = "anti-ship",
|
ANTISHIPTTS = "anti-ship",
|
||||||
INTERCEPTTS = "intercept",
|
INTERCEPTTS = "intercept",
|
||||||
@ -1020,6 +1040,10 @@ PLAYERTASKCONTROLLER.Messages = {
|
|||||||
TASKADDED = "%s has a new task %s available!",
|
TASKADDED = "%s has a new task %s available!",
|
||||||
PILOTS = "\nPilot(s): ",
|
PILOTS = "\nPilot(s): ",
|
||||||
PILOTSTTS = ". Pilot(s): ",
|
PILOTSTTS = ". Pilot(s): ",
|
||||||
|
YES = "Yes",
|
||||||
|
NO = "No",
|
||||||
|
POINTEROVERTARGET = "%s, %s, pointer over target for task %03d, lasing!",
|
||||||
|
POINTERTARGETREPORT = "\nPointer over target: %s\nLasing: %s\n",
|
||||||
},
|
},
|
||||||
DE = {
|
DE = {
|
||||||
TASKABORT = "Auftrag abgebrochen!",
|
TASKABORT = "Auftrag abgebrochen!",
|
||||||
@ -1030,6 +1054,7 @@ PLAYERTASKCONTROLLER.Messages = {
|
|||||||
CASTTS = "Nahbereichsunterstützung",
|
CASTTS = "Nahbereichsunterstützung",
|
||||||
SEADTTS = "Luftabwehr ausschalten",
|
SEADTTS = "Luftabwehr ausschalten",
|
||||||
BOMBTTS = "Bombardieren",
|
BOMBTTS = "Bombardieren",
|
||||||
|
PRECBOMBTTS = "Präzisionsbombardieren",
|
||||||
BAITTS = "Luftunterstützung",
|
BAITTS = "Luftunterstützung",
|
||||||
ANTISHIPTTS = "Anti-Schiff",
|
ANTISHIPTTS = "Anti-Schiff",
|
||||||
INTERCEPTTS = "Abfangen",
|
INTERCEPTTS = "Abfangen",
|
||||||
@ -1069,12 +1094,16 @@ PLAYERTASKCONTROLLER.Messages = {
|
|||||||
TASKADDED = "%s hat einen neuen Auftrag %s erstellt!",
|
TASKADDED = "%s hat einen neuen Auftrag %s erstellt!",
|
||||||
PILOTS = "\nPilot(en): ",
|
PILOTS = "\nPilot(en): ",
|
||||||
PILOTSTTS = ". Pilot(en): ",
|
PILOTSTTS = ". Pilot(en): ",
|
||||||
|
YES = "Ja",
|
||||||
|
NO = "Nein",
|
||||||
|
POINTEROVERTARGET = "%s, %s, Marker im Zielbereich für %03d, Laser an!",
|
||||||
|
POINTERTARGETREPORT = "\nMarker im Zielbereich: %s\nLaser an: %s\n",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
--- PLAYERTASK class version.
|
--- PLAYERTASK class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
PLAYERTASKCONTROLLER.version="0.1.19"
|
PLAYERTASKCONTROLLER.version="0.1.21"
|
||||||
|
|
||||||
--- Constructor
|
--- Constructor
|
||||||
-- @param #PLAYERTASKCONTROLLER self
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
@ -1106,6 +1135,7 @@ function PLAYERTASKCONTROLLER:New(Name, Coalition, Type, ClientFilter)
|
|||||||
self.TargetQueue = FIFO:New() -- Utilities.FiFo#FIFO
|
self.TargetQueue = FIFO:New() -- Utilities.FiFo#FIFO
|
||||||
self.TaskQueue = FIFO:New() -- Utilities.FiFo#FIFO
|
self.TaskQueue = FIFO:New() -- Utilities.FiFo#FIFO
|
||||||
self.TasksPerPlayer = FIFO:New() -- Utilities.FiFo#FIFO
|
self.TasksPerPlayer = FIFO:New() -- Utilities.FiFo#FIFO
|
||||||
|
self.PrecisionTasks = FIFO:New() -- Utilities.FiFo#FIFO
|
||||||
self.PlayerMenu = {} -- #table
|
self.PlayerMenu = {} -- #table
|
||||||
|
|
||||||
self.MenuName = nil
|
self.MenuName = nil
|
||||||
@ -1241,6 +1271,48 @@ function PLAYERTASKCONTROLLER:SetTaskRepetition(OnOff, Repeats)
|
|||||||
return self
|
return self
|
||||||
end
|
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)
|
||||||
|
-- @param #number LaserCode The lasercode to be used. Defaults to 1688.
|
||||||
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
|
function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode)
|
||||||
|
self:T(self.lid.."EnablePrecisionBombing")
|
||||||
|
if FlightGroup then
|
||||||
|
if FlightGroup.ClassName and FlightGroup.ClassName == "FLIGHTGROUP" then
|
||||||
|
-- ok we have a FG
|
||||||
|
self.LasingDrone = FlightGroup -- Ops.FlightGroup#FLIGHTGROUP FlightGroup
|
||||||
|
self.LasingDrone.playertask = {}
|
||||||
|
self.LasingDrone.playertask.busy = false
|
||||||
|
self.LasingDrone.playertask.id = 0
|
||||||
|
self.precisionbombing = true
|
||||||
|
self.LasingDrone:SetLaser(LaserCode)
|
||||||
|
self.LaserCode = LaserCode or 1688
|
||||||
|
self.LasingDroneTemplate = self.LasingDrone:_GetTemplate(true)
|
||||||
|
-- let it orbit the BullsEye
|
||||||
|
local BullsCoordinate = COORDINATE:NewFromVec3( coalition.getMainRefPoint( self.Coalition ))
|
||||||
|
local Orbit = AUFTRAG:NewORBIT_CIRCLE(BullsCoordinate,10000,120)
|
||||||
|
self.LasingDrone:AddMission(Orbit)
|
||||||
|
else
|
||||||
|
self:E(self.lid.."No FLIGHTGROUP object passed or FLIGHTGROUP is not alive!")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
self.autolase = nil
|
||||||
|
self.precisionbombing = false
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
--- [User] Disable precision laser-guided bombing on statics and "high-value" ground units (MBT etc)
|
||||||
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
|
function PLAYERTASKCONTROLLER:DisablePrecisionBombing(FlightGroup,LaserCode)
|
||||||
|
self:T(self.lid.."DisablePrecisionBombing")
|
||||||
|
self.autolase = nil
|
||||||
|
self.precisionbombing = false
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
--- [Internal] Event handling
|
--- [Internal] Event handling
|
||||||
-- @param #PLAYERTASKCONTROLLER self
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
-- @param Core.Event#EVENTDATA EventData
|
-- @param Core.Event#EVENTDATA EventData
|
||||||
@ -1453,6 +1525,100 @@ function PLAYERTASKCONTROLLER:_CheckTaskQueue()
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- [Internal] Check precision task queue
|
||||||
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
|
function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
|
||||||
|
self:T(self.lid.."_CheckTaskQueue")
|
||||||
|
if self.PrecisionTasks:Count() > 0 and self.precisionbombing then
|
||||||
|
if not self.LasingDrone or self.LasingDrone:IsDead() then
|
||||||
|
-- we need a new drone
|
||||||
|
self:E(self.lid.."Lasing drone is dead ... creating a new one!")
|
||||||
|
if self.LasingDrone then
|
||||||
|
self.LasingDrone:_Respawn(1,nil,true)
|
||||||
|
else
|
||||||
|
local FG = FLIGHTGROUP:New(self.LasingDroneTemplate)
|
||||||
|
FG:Activate()
|
||||||
|
self:EnablePrecisionBombing(FG,self.LaserCode or 1688)
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
-- do we have a lasing unit assigned?
|
||||||
|
if self.LasingDrone and self.LasingDrone:IsAlive() then
|
||||||
|
if self.LasingDrone.playertask and (not self.LasingDrone.playertask.busy) then
|
||||||
|
-- not busy, get a task
|
||||||
|
self:I(self.lid.."Sending lasing unit to target")
|
||||||
|
local task = self.PrecisionTasks:Pull() -- Ops.PlayerTask#PLAYERTASK
|
||||||
|
self.LasingDrone.playertask.id = task.PlayerTaskNr
|
||||||
|
self.LasingDrone.playertask.busy = true
|
||||||
|
self.LasingDrone.playertask.inreach = false
|
||||||
|
self.LasingDrone.playertask.reachmessage = false
|
||||||
|
-- move the drone to target
|
||||||
|
local auftrag = AUFTRAG:NewORBIT_CIRCLE(task.Target:GetCoordinate(),10000,120)
|
||||||
|
local currmission = self.LasingDrone:GetMissionCurrent()
|
||||||
|
self.LasingDrone:AddMission(auftrag)
|
||||||
|
currmission:__Cancel(-2)
|
||||||
|
self.PrecisionTasks:Push(task,task.PlayerTaskNr)
|
||||||
|
elseif self.LasingDrone.playertask and self.LasingDrone.playertask.busy then
|
||||||
|
-- drone is busy, set up laser when over target
|
||||||
|
local task = self.PrecisionTasks:ReadByID(self.LasingDrone.playertask.id) -- Ops.PlayerTask#PLAYERTASK
|
||||||
|
self:I("Looking at Task: "..task.PlayerTaskNr.." Type: "..task.Type.." State: "..task:GetState())
|
||||||
|
if (not task) or task:GetState() == "Done" or task:GetState() == "Stopped" then
|
||||||
|
-- we're done here
|
||||||
|
local task = self.PrecisionTasks:PullByID(self.LasingDrone.playertask.id) -- Ops.PlayerTask#PLAYERTASK
|
||||||
|
self:_CheckTaskQueue()
|
||||||
|
task = nil
|
||||||
|
if self.LasingDrone:IsLasing() then
|
||||||
|
self.LasingDrone:__LaserOff(-1)
|
||||||
|
end
|
||||||
|
self.LasingDrone.playertask.busy = false
|
||||||
|
self.LasingDrone.playertask.inreach = false
|
||||||
|
self.LasingDrone.playertask.id = 0
|
||||||
|
self.LasingDrone.playertask.reachmessage = false
|
||||||
|
self:I(self.lid.."Laser Off")
|
||||||
|
else
|
||||||
|
-- not done yet
|
||||||
|
local dcoord = self.LasingDrone:GetCoordinate()
|
||||||
|
local tcoord = task.Target:GetCoordinate()
|
||||||
|
local dist = dcoord:Get2DDistance(tcoord)
|
||||||
|
-- close enough?
|
||||||
|
if dist < 3000 and not self.LasingDrone:IsLasing() then
|
||||||
|
self:I(self.lid.."Laser On")
|
||||||
|
self.LasingDrone:__LaserOn(-1,tcoord)
|
||||||
|
self.LasingDrone.playertask.inreach = true
|
||||||
|
if not self.LasingDrone.playertask.reachmessage then
|
||||||
|
--local textmark = self.gettext:GetEntry("FLARETASK",self.locale)
|
||||||
|
self.LasingDrone.playertask.reachmessage = true
|
||||||
|
local clients = task:GetClients()
|
||||||
|
local text = ""
|
||||||
|
for _,playername in pairs(clients) do
|
||||||
|
local pointertext = self.gettext:GetEntry("POINTEROVERTARGET",self.locale)
|
||||||
|
--text = string.format("%s, %s, pointer over target for task %03d, lasing!", playername, self.MenuName or self.Name, task.PlayerTaskNr)
|
||||||
|
text = string.format(pointertext, playername, self.MenuName or self.Name, task.PlayerTaskNr)
|
||||||
|
if not self.NoScreenOutput then
|
||||||
|
local client = nil
|
||||||
|
self.ClientSet:ForEachClient(
|
||||||
|
function(Client)
|
||||||
|
if Client:GetPlayerName() == playername then client = Client end
|
||||||
|
end
|
||||||
|
)
|
||||||
|
if client then
|
||||||
|
local m = MESSAGE:New(text,15,"Tasking"):ToClient(client)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if self.UseSRS then
|
||||||
|
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
--- [Internal] Check task queue for a specific player name
|
--- [Internal] Check task queue for a specific player name
|
||||||
-- @param #PLAYERTASKCONTROLLER self
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
-- @return #boolean outcome
|
-- @return #boolean outcome
|
||||||
@ -1498,7 +1664,8 @@ end
|
|||||||
-- @usage Currently, the following task types will be generated, if detection has been set up:
|
-- @usage Currently, the following task types will be generated, if detection has been set up:
|
||||||
-- A2A - AUFTRAG.Type.INTERCEPT
|
-- A2A - AUFTRAG.Type.INTERCEPT
|
||||||
-- A2S - AUFTRAG.Type.ANTISHIP
|
-- A2S - AUFTRAG.Type.ANTISHIP
|
||||||
-- A2G - AUFTRAG.Type.CAS, AUFTRAG.Type.BAI, AUFTRAG.Type.SEAD, AUFTRAG.Type.BOMBING, AUFTRAG.Type.BOMBRUNWAY
|
-- A2G - AUFTRAG.Type.CAS, AUFTRAG.Type.BAI, AUFTRAG.Type.SEAD, AUFTRAG.Type.BOMBING, AUFTRAG.Type.PRECISIONBOMBING, AUFTRAG.Type.BOMBRUNWAY
|
||||||
|
-- A2GS - A2G + A2S
|
||||||
-- If you don't want SEAD tasks generated, use as follows where "mycontroller" is your PLAYERTASKCONTROLLER object:
|
-- If you don't want SEAD tasks generated, use as follows where "mycontroller" is your PLAYERTASKCONTROLLER object:
|
||||||
--
|
--
|
||||||
-- `mycontroller:SetTaskWhiteList({AUFTRAG.Type.CAS, AUFTRAG.Type.BAI, AUFTRAG.Type.BOMBING, AUFTRAG.Type.BOMBRUNWAY})`
|
-- `mycontroller:SetTaskWhiteList({AUFTRAG.Type.CAS, AUFTRAG.Type.BAI, AUFTRAG.Type.BOMBING, AUFTRAG.Type.BOMBRUNWAY})`
|
||||||
@ -1517,7 +1684,9 @@ end
|
|||||||
function PLAYERTASKCONTROLLER:_AddTask(Target)
|
function PLAYERTASKCONTROLLER:_AddTask(Target)
|
||||||
self:T(self.lid.."_AddTask")
|
self:T(self.lid.."_AddTask")
|
||||||
local cat = Target:GetCategory()
|
local cat = Target:GetCategory()
|
||||||
|
local threat = Target:GetThreatLevelMax()
|
||||||
local type = AUFTRAG.Type.CAS
|
local type = AUFTRAG.Type.CAS
|
||||||
|
|
||||||
--local ttstype = "close air support"
|
--local ttstype = "close air support"
|
||||||
local ttstype = self.gettext:GetEntry("CASTTS",self.locale)
|
local ttstype = self.gettext:GetEntry("CASTTS",self.locale)
|
||||||
|
|
||||||
@ -1564,11 +1733,16 @@ function PLAYERTASKCONTROLLER:_AddTask(Target)
|
|||||||
end
|
end
|
||||||
)
|
)
|
||||||
elseif targetobject:IsInstanceOf("SET_STATIC") or targetobject:IsInstanceOf("STATIC") then
|
elseif targetobject:IsInstanceOf("SET_STATIC") or targetobject:IsInstanceOf("STATIC") then
|
||||||
self:T("BOMBING SET_STATIC or STATIC")
|
self:T("(PRECISION-)BOMBING SET_STATIC or STATIC")
|
||||||
|
if self.precisionbombing then
|
||||||
|
type = AUFTRAG.Type.PRECISIONBOMBING
|
||||||
|
ttstype = self.gettext:GetEntry("PRECBOMBTTS",self.locale)
|
||||||
|
else
|
||||||
type = AUFTRAG.Type.BOMBING
|
type = AUFTRAG.Type.BOMBING
|
||||||
--ttstype = "bombing"
|
|
||||||
ttstype = self.gettext:GetEntry("BOMBTTS",self.locale)
|
ttstype = self.gettext:GetEntry("BOMBTTS",self.locale)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
end
|
||||||
-- if there are no friendlies nearby ~0.5km and task isn't SEAD, then it's BAI
|
-- if there are no friendlies nearby ~0.5km and task isn't SEAD, then it's BAI
|
||||||
local targetcoord = Target:GetCoordinate()
|
local targetcoord = Target:GetCoordinate()
|
||||||
local targetvec2 = targetcoord:GetVec2()
|
local targetvec2 = targetcoord:GetVec2()
|
||||||
@ -1584,6 +1758,14 @@ function PLAYERTASKCONTROLLER:_AddTask(Target)
|
|||||||
--ttstype = "battle field air interdiction"
|
--ttstype = "battle field air interdiction"
|
||||||
ttstype = self.gettext:GetEntry("BAITTS",self.locale)
|
ttstype = self.gettext:GetEntry("BAITTS",self.locale)
|
||||||
end
|
end
|
||||||
|
-- see if we can do precision bombing
|
||||||
|
if (type == AUFTRAG.Type.BAI or type == AUFTRAG.Type.CAS) and self.precisionbombing then
|
||||||
|
-- threatlevel between 3 and 6 means, it's artillery, tank, modern tank or AAA
|
||||||
|
if threat > 2 and threat < 7 then
|
||||||
|
type = AUFTRAG.Type.PRECISIONBOMBING
|
||||||
|
ttstype = self.gettext:GetEntry("PRECBOMBTTS",self.locale)
|
||||||
|
end
|
||||||
|
end
|
||||||
elseif cat == TARGET.Category.NAVAL then
|
elseif cat == TARGET.Category.NAVAL then
|
||||||
type = AUFTRAG.Type.ANTISHIP
|
type = AUFTRAG.Type.ANTISHIP
|
||||||
--ttstype = "anti-ship"
|
--ttstype = "anti-ship"
|
||||||
@ -1672,6 +1854,11 @@ end
|
|||||||
function PLAYERTASKCONTROLLER:_JoinTask(Group, Client, Task)
|
function PLAYERTASKCONTROLLER:_JoinTask(Group, Client, Task)
|
||||||
self:T(self.lid.."_JoinTask")
|
self:T(self.lid.."_JoinTask")
|
||||||
local playername = Client:GetPlayerName()
|
local playername = Client:GetPlayerName()
|
||||||
|
local ttsplayername = playername
|
||||||
|
if string.find(playername,"|") then
|
||||||
|
-- personalized flight name in player naming
|
||||||
|
ttsplayername = string.match(playername,"| ([%a]+)")
|
||||||
|
end
|
||||||
if self.TasksPerPlayer:HasUniqueID(playername) then
|
if self.TasksPerPlayer:HasUniqueID(playername) then
|
||||||
-- Player already has a task
|
-- Player already has a task
|
||||||
if not self.NoScreenOutput then
|
if not self.NoScreenOutput then
|
||||||
@ -1687,7 +1874,7 @@ function PLAYERTASKCONTROLLER:_JoinTask(Group, Client, Task)
|
|||||||
Task:__Requested(-1)
|
Task:__Requested(-1)
|
||||||
Task:__Executing(-2)
|
Task:__Executing(-2)
|
||||||
local joined = self.gettext:GetEntry("PILOTJOINEDTASK",self.locale)
|
local joined = self.gettext:GetEntry("PILOTJOINEDTASK",self.locale)
|
||||||
local text = string.format(joined, self.MenuName or self.Name, playername, Task.PlayerTaskNr)
|
local text = string.format(joined, self.MenuName or self.Name, ttsplayername, Task.PlayerTaskNr)
|
||||||
self:T(self.lid..text)
|
self:T(self.lid..text)
|
||||||
if not self.NoScreenOutput then
|
if not self.NoScreenOutput then
|
||||||
local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
||||||
@ -1699,6 +1886,11 @@ function PLAYERTASKCONTROLLER:_JoinTask(Group, Client, Task)
|
|||||||
-- clear menu
|
-- clear menu
|
||||||
self:_BuildMenus(Client)
|
self:_BuildMenus(Client)
|
||||||
end
|
end
|
||||||
|
if Task.Type == AUFTRAG.Type.PRECISIONBOMBING then
|
||||||
|
if not self.PrecisionTasks:HasUniqueID(Task.PlayerTaskNr) then
|
||||||
|
self.PrecisionTasks:Push(Task,Task.PlayerTaskNr)
|
||||||
|
end
|
||||||
|
end
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1710,17 +1902,19 @@ end
|
|||||||
function PLAYERTASKCONTROLLER:_ActiveTaskInfo(Group, Client)
|
function PLAYERTASKCONTROLLER:_ActiveTaskInfo(Group, Client)
|
||||||
self:T(self.lid.."_ActiveTaskInfo")
|
self:T(self.lid.."_ActiveTaskInfo")
|
||||||
local playername = Client:GetPlayerName()
|
local playername = Client:GetPlayerName()
|
||||||
|
local ttsplayername = playername
|
||||||
|
if string.find(playername,"|") then
|
||||||
|
-- personalized flight name in player naming
|
||||||
|
ttsplayername = string.match(playername,"| ([%a]+)")
|
||||||
|
end
|
||||||
local text = ""
|
local text = ""
|
||||||
if self.TasksPerPlayer:HasUniqueID(playername) then
|
if self.TasksPerPlayer:HasUniqueID(playername) then
|
||||||
-- TODO: Show multiple?
|
-- TODO: Show multiple?
|
||||||
--local task = self.TasksPerPlayer:GetIDStack()
|
|
||||||
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
||||||
local tname = self.gettext:GetEntry("TASKNAME",self.locale)
|
local tname = self.gettext:GetEntry("TASKNAME",self.locale)
|
||||||
local ttsname = self.gettext:GetEntry("TASKNAMETTS",self.locale)
|
local ttsname = self.gettext:GetEntry("TASKNAMETTS",self.locale)
|
||||||
local taskname = string.format(tname,task.Type,task.PlayerTaskNr)
|
local taskname = string.format(tname,task.Type,task.PlayerTaskNr)
|
||||||
local ttstaskname = string.format(ttsname,task.TTSType,task.PlayerTaskNr)
|
local ttstaskname = string.format(ttsname,task.TTSType,task.PlayerTaskNr)
|
||||||
--local taskname = string.format("%s Task ID %03d",task.Type,task.PlayerTaskNr)
|
|
||||||
--local ttstaskname = string.format("%s Task ID %03d",task.TTSType,task.PlayerTaskNr)
|
|
||||||
local Coordinate = task.Target:GetCoordinate()
|
local Coordinate = task.Target:GetCoordinate()
|
||||||
local CoordText = ""
|
local CoordText = ""
|
||||||
if self.Type ~= PLAYERTASKCONTROLLER.Type.A2A then
|
if self.Type ~= PLAYERTASKCONTROLLER.Type.A2A then
|
||||||
@ -1743,10 +1937,23 @@ function PLAYERTASKCONTROLLER:_ActiveTaskInfo(Group, Client)
|
|||||||
local ThreatGraph = "[" .. string.rep( "■", ThreatLevel ) .. string.rep( "□", 10 - ThreatLevel ) .. "]: "..ThreatLevel
|
local ThreatGraph = "[" .. string.rep( "■", ThreatLevel ) .. string.rep( "□", 10 - ThreatLevel ) .. "]: "..ThreatLevel
|
||||||
local ThreatLocaleText = self.gettext:GetEntry("THREATTEXT",self.locale)
|
local ThreatLocaleText = self.gettext:GetEntry("THREATTEXT",self.locale)
|
||||||
text = string.format(ThreatLocaleText, taskname, ThreatGraph, targets, CoordText)
|
text = string.format(ThreatLocaleText, taskname, ThreatGraph, targets, CoordText)
|
||||||
--text = string.format("%s\nThreat: %s\nTargets left: %d\nCoord: %s", taskname, ThreatGraph, targets, CoordText)
|
if task.Type == AUFTRAG.Type.PRECISIONBOMBING and self.precisionbombing then
|
||||||
--local clienttxt = "\nPilot(s): "
|
if self.LasingDrone and self.LasingDrone.playertask then
|
||||||
|
local yes = self.gettext:GetEntry("YES",self.locale)
|
||||||
|
local no = self.gettext:GetEntry("NO",self.locale)
|
||||||
|
local inreach = self.LasingDrone.playertask.inreach == true and yes or no
|
||||||
|
local islasing = self.LasingDrone:IsLasing() == true and yes or no
|
||||||
|
local prectext = self.gettext:GetEntry("POINTERTARGETREPORT",self.locale)
|
||||||
|
prectext = string.format(prectext,inreach,islasing)
|
||||||
|
text = text .. prectext
|
||||||
|
end
|
||||||
|
end
|
||||||
local clienttxt = self.gettext:GetEntry("PILOTS",self.locale)
|
local clienttxt = self.gettext:GetEntry("PILOTS",self.locale)
|
||||||
for _,_name in pairs(clientlist) do
|
for _,_name in pairs(clientlist) do
|
||||||
|
if string.find(_name,"|") then
|
||||||
|
-- personalized flight name in player naming
|
||||||
|
_name = string.match(_name,"| ([%a]+)")
|
||||||
|
end
|
||||||
clienttxt = clienttxt .. _name .. ", "
|
clienttxt = clienttxt .. _name .. ", "
|
||||||
end
|
end
|
||||||
clienttxt=string.gsub(clienttxt,", $",".")
|
clienttxt=string.gsub(clienttxt,", $",".")
|
||||||
@ -1756,8 +1963,7 @@ function PLAYERTASKCONTROLLER:_ActiveTaskInfo(Group, Client)
|
|||||||
CoordText = string.gsub(CoordText," BR, "," Bee, Arr, ")
|
CoordText = string.gsub(CoordText," BR, "," Bee, Arr, ")
|
||||||
end
|
end
|
||||||
local ThreatLocaleTextTTS = self.gettext:GetEntry("THREATTEXTTTS",self.locale)
|
local ThreatLocaleTextTTS = self.gettext:GetEntry("THREATTEXTTTS",self.locale)
|
||||||
local ttstext = string.format(ThreatLocaleTextTTS,self.MenuName or self.Name,playername,ttstaskname,ThreatLevelText, targets, CoordText)
|
local ttstext = string.format(ThreatLocaleTextTTS,self.MenuName or self.Name,ttsplayername,ttstaskname,ThreatLevelText, targets, CoordText)
|
||||||
--local ttstext = string.format("%s, %s. Target information for %s. Threat level %s. Targets left %d. Target location %s.",self.MenuName or self.Name,playername,ttstaskname,ThreatLevelText, targets, CoordText)
|
|
||||||
self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,2)
|
self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,2)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -1775,8 +1981,13 @@ end
|
|||||||
-- @param Wrapper.Client#CLIENT Client
|
-- @param Wrapper.Client#CLIENT Client
|
||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
function PLAYERTASKCONTROLLER:_MarkTask(Group, Client)
|
function PLAYERTASKCONTROLLER:_MarkTask(Group, Client)
|
||||||
self:T(self.lid.."_ActiveTaskInfo")
|
self:T(self.lid.."_MarkTask")
|
||||||
local playername = Client:GetPlayerName()
|
local playername = Client:GetPlayerName()
|
||||||
|
local ttsplayername = playername
|
||||||
|
if string.find(playername,"|") then
|
||||||
|
-- personalized flight name in player naming
|
||||||
|
ttsplayername = string.match(playername,"| ([%a]+)")
|
||||||
|
end
|
||||||
local text = ""
|
local text = ""
|
||||||
if self.TasksPerPlayer:HasUniqueID(playername) then
|
if self.TasksPerPlayer:HasUniqueID(playername) then
|
||||||
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
||||||
@ -1784,7 +1995,7 @@ function PLAYERTASKCONTROLLER:_MarkTask(Group, Client)
|
|||||||
task:MarkTargetOnF10Map(text)
|
task:MarkTargetOnF10Map(text)
|
||||||
local textmark = self.gettext:GetEntry("MARKTASK",self.locale)
|
local textmark = self.gettext:GetEntry("MARKTASK",self.locale)
|
||||||
--text = string.format("%s, copy pilot %s, task %03d location marked on map!", self.MenuName or self.Name, playername, task.PlayerTaskNr)
|
--text = string.format("%s, copy pilot %s, task %03d location marked on map!", self.MenuName or self.Name, playername, task.PlayerTaskNr)
|
||||||
text = string.format(textmark, playername, self.MenuName or self.Name, task.PlayerTaskNr)
|
text = string.format(textmark, ttsplayername, self.MenuName or self.Name, task.PlayerTaskNr)
|
||||||
self:T(self.lid..text)
|
self:T(self.lid..text)
|
||||||
if self.UseSRS then
|
if self.UseSRS then
|
||||||
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
||||||
@ -1806,12 +2017,17 @@ end
|
|||||||
function PLAYERTASKCONTROLLER:_SmokeTask(Group, Client)
|
function PLAYERTASKCONTROLLER:_SmokeTask(Group, Client)
|
||||||
self:T(self.lid.."_SmokeTask")
|
self:T(self.lid.."_SmokeTask")
|
||||||
local playername = Client:GetPlayerName()
|
local playername = Client:GetPlayerName()
|
||||||
|
local ttsplayername = playername
|
||||||
|
if string.find(playername,"|") then
|
||||||
|
-- personalized flight name in player naming
|
||||||
|
ttsplayername = string.match(playername,"| ([%a]+)")
|
||||||
|
end
|
||||||
local text = ""
|
local text = ""
|
||||||
if self.TasksPerPlayer:HasUniqueID(playername) then
|
if self.TasksPerPlayer:HasUniqueID(playername) then
|
||||||
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
||||||
task:SmokeTarget()
|
task:SmokeTarget()
|
||||||
local textmark = self.gettext:GetEntry("SMOKETASK",self.locale)
|
local textmark = self.gettext:GetEntry("SMOKETASK",self.locale)
|
||||||
text = string.format(textmark, playername, self.MenuName or self.Name, task.PlayerTaskNr)
|
text = string.format(textmark, ttsplayername, self.MenuName or self.Name, task.PlayerTaskNr)
|
||||||
self:T(self.lid..text)
|
self:T(self.lid..text)
|
||||||
--local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
--local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
||||||
if self.UseSRS then
|
if self.UseSRS then
|
||||||
@ -1834,12 +2050,17 @@ end
|
|||||||
function PLAYERTASKCONTROLLER:_FlareTask(Group, Client)
|
function PLAYERTASKCONTROLLER:_FlareTask(Group, Client)
|
||||||
self:T(self.lid.."_FlareTask")
|
self:T(self.lid.."_FlareTask")
|
||||||
local playername = Client:GetPlayerName()
|
local playername = Client:GetPlayerName()
|
||||||
|
local ttsplayername = playername
|
||||||
|
if string.find(playername,"|") then
|
||||||
|
-- personalized flight name in player naming
|
||||||
|
ttsplayername = string.match(playername,"| ([%a]+)")
|
||||||
|
end
|
||||||
local text = ""
|
local text = ""
|
||||||
if self.TasksPerPlayer:HasUniqueID(playername) then
|
if self.TasksPerPlayer:HasUniqueID(playername) then
|
||||||
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
||||||
task:FlareTarget()
|
task:FlareTarget()
|
||||||
local textmark = self.gettext:GetEntry("FLARETASK",self.locale)
|
local textmark = self.gettext:GetEntry("FLARETASK",self.locale)
|
||||||
text = string.format(textmark, playername, self.MenuName or self.Name, task.PlayerTaskNr)
|
text = string.format(textmark, ttsplayername, self.MenuName or self.Name, task.PlayerTaskNr)
|
||||||
self:T(self.lid..text)
|
self:T(self.lid..text)
|
||||||
--local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
--local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
||||||
if self.UseSRS then
|
if self.UseSRS then
|
||||||
@ -1862,12 +2083,17 @@ end
|
|||||||
function PLAYERTASKCONTROLLER:_AbortTask(Group, Client)
|
function PLAYERTASKCONTROLLER:_AbortTask(Group, Client)
|
||||||
self:T(self.lid.."_FlareTask")
|
self:T(self.lid.."_FlareTask")
|
||||||
local playername = Client:GetPlayerName()
|
local playername = Client:GetPlayerName()
|
||||||
|
local ttsplayername = playername
|
||||||
|
if string.find(playername,"|") then
|
||||||
|
-- personalized flight name in player naming
|
||||||
|
ttsplayername = string.match(playername,"| ([%a]+)")
|
||||||
|
end
|
||||||
local text = ""
|
local text = ""
|
||||||
if self.TasksPerPlayer:HasUniqueID(playername) then
|
if self.TasksPerPlayer:HasUniqueID(playername) then
|
||||||
local task = self.TasksPerPlayer:PullByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
local task = self.TasksPerPlayer:PullByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
||||||
task:ClientAbort(Client)
|
task:ClientAbort(Client)
|
||||||
local textmark = self.gettext:GetEntry("ABORTTASK",self.locale)
|
local textmark = self.gettext:GetEntry("ABORTTASK",self.locale)
|
||||||
text = string.format(textmark, playername, self.MenuName or self.Name, task.PlayerTaskNr)
|
text = string.format(textmark, ttsplayername, self.MenuName or self.Name, task.PlayerTaskNr)
|
||||||
self:T(self.lid..text)
|
self:T(self.lid..text)
|
||||||
--local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
--local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
||||||
if self.UseSRS then
|
if self.UseSRS then
|
||||||
@ -2073,7 +2299,7 @@ function PLAYERTASKCONTROLLER:SetupIntel(RecceName)
|
|||||||
--if self.verbose then
|
--if self.verbose then
|
||||||
--self.Intel:SetDetectionTypes(true,true,false,true,true,true)
|
--self.Intel:SetDetectionTypes(true,true,false,true,true,true)
|
||||||
--end
|
--end
|
||||||
if self.Type == PLAYERTASKCONTROLLER.Type.A2G then
|
if self.Type == PLAYERTASKCONTROLLER.Type.A2G or self.Type == PLAYERTASKCONTROLLER.Type.A2GS then
|
||||||
self.Intel:SetDetectStatics(true)
|
self.Intel:SetDetectStatics(true)
|
||||||
end
|
end
|
||||||
self.Intel:__Start(2)
|
self.Intel:__Start(2)
|
||||||
@ -2083,7 +2309,7 @@ function PLAYERTASKCONTROLLER:SetupIntel(RecceName)
|
|||||||
local cluster = Cluster -- Ops.Intelligence#INTEL.Cluster
|
local cluster = Cluster -- Ops.Intelligence#INTEL.Cluster
|
||||||
local type = cluster.ctype
|
local type = cluster.ctype
|
||||||
self:T({type,self.Type})
|
self:T({type,self.Type})
|
||||||
if (type == INTEL.Ctype.AIRCRAFT and self.Type == PLAYERTASKCONTROLLER.Type.A2A) or (type == INTEL.Ctype.NAVAL and self.Type == PLAYERTASKCONTROLLER.Type.A2S) then
|
if (type == INTEL.Ctype.AIRCRAFT and self.Type == PLAYERTASKCONTROLLER.Type.A2A) or (type == INTEL.Ctype.NAVAL and (self.Type == PLAYERTASKCONTROLLER.Type.A2S or self.Type == PLAYERTASKCONTROLLER.Type.A2GS)) then
|
||||||
self:T("A2A or A2S")
|
self:T("A2A or A2S")
|
||||||
local contacts = cluster.Contacts -- #table of GROUP
|
local contacts = cluster.Contacts -- #table of GROUP
|
||||||
local targetset = SET_GROUP:New()
|
local targetset = SET_GROUP:New()
|
||||||
@ -2093,7 +2319,7 @@ function PLAYERTASKCONTROLLER:SetupIntel(RecceName)
|
|||||||
targetset:AddGroup(contact.group,true)
|
targetset:AddGroup(contact.group,true)
|
||||||
end
|
end
|
||||||
self:AddTarget(targetset)
|
self:AddTarget(targetset)
|
||||||
elseif (type == INTEL.Ctype.GROUND or type == INTEL.Ctype.STRUCTURE) and self.Type == PLAYERTASKCONTROLLER.Type.A2G then
|
elseif (type == INTEL.Ctype.GROUND or type == INTEL.Ctype.STRUCTURE) and (self.Type == PLAYERTASKCONTROLLER.Type.A2G or self.Type == PLAYERTASKCONTROLLER.Type.A2GS) then
|
||||||
self:T("A2G")
|
self:T("A2G")
|
||||||
local contacts = cluster.Contacts -- #table of GROUP or STATIC
|
local contacts = cluster.Contacts -- #table of GROUP or STATIC
|
||||||
local targetset = nil -- Core.Set#SET_BASE
|
local targetset = nil -- Core.Set#SET_BASE
|
||||||
@ -2123,11 +2349,11 @@ function PLAYERTASKCONTROLLER:SetupIntel(RecceName)
|
|||||||
local contact = Contact -- Ops.Intelligence#INTEL.Contact
|
local contact = Contact -- Ops.Intelligence#INTEL.Contact
|
||||||
local type = contact.ctype
|
local type = contact.ctype
|
||||||
self:T({type,self.Type})
|
self:T({type,self.Type})
|
||||||
if (type == INTEL.Ctype.AIRCRAFT and self.Type == PLAYERTASKCONTROLLER.Type.A2A) or (type == INTEL.Ctype.NAVAL and self.Type == PLAYERTASKCONTROLLER.Type.A2S) then
|
if (type == INTEL.Ctype.AIRCRAFT and self.Type == PLAYERTASKCONTROLLER.Type.A2A) or (type == INTEL.Ctype.NAVAL and (self.Type == PLAYERTASKCONTROLLER.Type.A2S or self.Type == PLAYERTASKCONTROLLER.Type.A2GS)) then
|
||||||
self:T("A2A or A2S")
|
self:T("A2A or A2S")
|
||||||
self:T("Adding group: "..contact.groupname)
|
self:T("Adding group: "..contact.groupname)
|
||||||
self:AddTarget(contact.group)
|
self:AddTarget(contact.group)
|
||||||
elseif (type == INTEL.Ctype.GROUND or type == INTEL.Ctype.STRUCTURE) and self.Type == PLAYERTASKCONTROLLER.Type.A2G then
|
elseif (type == INTEL.Ctype.GROUND or type == INTEL.Ctype.STRUCTURE) and (self.Type == PLAYERTASKCONTROLLER.Type.A2G or self.Type == PLAYERTASKCONTROLLER.Type.A2GS) then
|
||||||
self:T("A2G")
|
self:T("A2G")
|
||||||
self:T("Adding group: "..contact.groupname)
|
self:T("Adding group: "..contact.groupname)
|
||||||
self:AddTarget(contact.group)
|
self:AddTarget(contact.group)
|
||||||
@ -2216,6 +2442,7 @@ function PLAYERTASKCONTROLLER:onafterStatus(From, Event, To)
|
|||||||
self:I({From, Event, To})
|
self:I({From, Event, To})
|
||||||
self:_CheckTargetQueue()
|
self:_CheckTargetQueue()
|
||||||
self:_CheckTaskQueue()
|
self:_CheckTaskQueue()
|
||||||
|
self:_CheckPrecisionTasks()
|
||||||
self:_BuildMenus()
|
self:_BuildMenus()
|
||||||
|
|
||||||
local targetcount = self.TargetQueue:Count()
|
local targetcount = self.TargetQueue:Count()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user