mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
#PLAYERTASK
* Added option to use ArmyGroup as lasing unit * Added TTS output to task info report for PRECISIONBOMBING to tell if unit is in reach and is lasing
This commit is contained in:
@@ -876,6 +876,7 @@ do
|
|||||||
-- NO = "No",
|
-- NO = "No",
|
||||||
-- POINTEROVERTARGET = "%s, %s, pointer over target for task %03d, lasing!",
|
-- POINTEROVERTARGET = "%s, %s, pointer over target for task %03d, lasing!",
|
||||||
-- POINTERTARGETREPORT = "\nPointer over target: %s\nLasing: %s",
|
-- POINTERTARGETREPORT = "\nPointer over target: %s\nLasing: %s",
|
||||||
|
-- POINTERTARGETLASINGTTS = ". Pointer over target and lasing.",
|
||||||
-- },
|
-- },
|
||||||
--
|
--
|
||||||
-- e.g.
|
-- e.g.
|
||||||
@@ -1046,6 +1047,7 @@ PLAYERTASKCONTROLLER.Messages = {
|
|||||||
NO = "No",
|
NO = "No",
|
||||||
POINTEROVERTARGET = "%s, %s, pointer over target for task %03d, lasing!",
|
POINTEROVERTARGET = "%s, %s, pointer over target for task %03d, lasing!",
|
||||||
POINTERTARGETREPORT = "\nPointer over target: %s\nLasing: %s",
|
POINTERTARGETREPORT = "\nPointer over target: %s\nLasing: %s",
|
||||||
|
POINTERTARGETLASINGTTS = ". Pointer over target and lasing.",
|
||||||
},
|
},
|
||||||
DE = {
|
DE = {
|
||||||
TASKABORT = "Auftrag abgebrochen!",
|
TASKABORT = "Auftrag abgebrochen!",
|
||||||
@@ -1100,12 +1102,13 @@ PLAYERTASKCONTROLLER.Messages = {
|
|||||||
NO = "Nein",
|
NO = "Nein",
|
||||||
POINTEROVERTARGET = "%s, %s, Marker im Zielbereich für %03d, Laser an!",
|
POINTEROVERTARGET = "%s, %s, Marker im Zielbereich für %03d, Laser an!",
|
||||||
POINTERTARGETREPORT = "\nMarker im Zielbereich: %s\nLaser an: %s",
|
POINTERTARGETREPORT = "\nMarker im Zielbereich: %s\nLaser an: %s",
|
||||||
|
POINTERTARGETLASINGTTS = ". Marker im Zielbereich, Laser is an.",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
--- PLAYERTASK class version.
|
--- PLAYERTASK class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
PLAYERTASKCONTROLLER.version="0.1.23"
|
PLAYERTASKCONTROLLER.version="0.1.24"
|
||||||
|
|
||||||
--- Constructor
|
--- Constructor
|
||||||
-- @param #PLAYERTASKCONTROLLER self
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
@@ -1275,13 +1278,27 @@ end
|
|||||||
|
|
||||||
--- [User] Allow precision laser-guided bombing on statics and "high-value" ground units (MBT etc)
|
--- [User] Allow precision laser-guided bombing on statics and "high-value" ground units (MBT etc)
|
||||||
-- @param #PLAYERTASKCONTROLLER self
|
-- @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 Ops.FlightGroup#FLIGHTGROUP FlightGroup The FlightGroup (e.g. drone) to be used for lasing (one unit in one group only).
|
||||||
|
-- Can optionally be handed as Ops.ArmyGroup#ARMYGROUP - **Note** might not find an LOS spot or get lost on the way. Cannot island-hop.
|
||||||
-- @param #number LaserCode The lasercode to be used. Defaults to 1688.
|
-- @param #number LaserCode The lasercode to be used. Defaults to 1688.
|
||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
|
-- @usage
|
||||||
|
-- -- Set up precision bombing, FlightGroup as lasing unit
|
||||||
|
-- local FlightGroup = FLIGHTGROUP:New("LasingUnit")
|
||||||
|
-- FlightGroup:Activate()
|
||||||
|
-- taskmanager:EnablePrecisionBombing(FlightGroup,1688)
|
||||||
|
--
|
||||||
|
-- -- Alternatively, set up precision bombing, ArmyGroup as lasing unit
|
||||||
|
-- local ArmyGroup = ARMYGROUP:New("LasingUnit")
|
||||||
|
-- ArmyGroup:SetDefaultROE(ENUMS.ROE.WeaponHold)
|
||||||
|
-- ArmyGroup:SetDefaultInvisible(true)
|
||||||
|
-- ArmyGroup:Activate()
|
||||||
|
-- taskmanager:EnablePrecisionBombing(ArmyGroup,1688)
|
||||||
|
--
|
||||||
function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode)
|
function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode)
|
||||||
self:T(self.lid.."EnablePrecisionBombing")
|
self:T(self.lid.."EnablePrecisionBombing")
|
||||||
if FlightGroup then
|
if FlightGroup then
|
||||||
if FlightGroup.ClassName and FlightGroup.ClassName == "FLIGHTGROUP" then
|
if FlightGroup.ClassName and (FlightGroup.ClassName == "FLIGHTGROUP" or FlightGroup.ClassName == "ARMYGROUP")then
|
||||||
-- ok we have a FG
|
-- ok we have a FG
|
||||||
self.LasingDrone = FlightGroup -- Ops.FlightGroup#FLIGHTGROUP FlightGroup
|
self.LasingDrone = FlightGroup -- Ops.FlightGroup#FLIGHTGROUP FlightGroup
|
||||||
self.LasingDrone.playertask = {}
|
self.LasingDrone.playertask = {}
|
||||||
@@ -1291,10 +1308,12 @@ function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode)
|
|||||||
self.LasingDrone:SetLaser(LaserCode)
|
self.LasingDrone:SetLaser(LaserCode)
|
||||||
self.LaserCode = LaserCode or 1688
|
self.LaserCode = LaserCode or 1688
|
||||||
self.LasingDroneTemplate = self.LasingDrone:_GetTemplate(true)
|
self.LasingDroneTemplate = self.LasingDrone:_GetTemplate(true)
|
||||||
-- let it orbit the BullsEye
|
-- let it orbit the BullsEye if FG
|
||||||
local BullsCoordinate = COORDINATE:NewFromVec3( coalition.getMainRefPoint( self.Coalition ))
|
if self.LasingDrone:IsFlightgroup() then
|
||||||
local Orbit = AUFTRAG:NewORBIT_CIRCLE(BullsCoordinate,10000,120)
|
local BullsCoordinate = COORDINATE:NewFromVec3( coalition.getMainRefPoint( self.Coalition ))
|
||||||
self.LasingDrone:AddMission(Orbit)
|
local Orbit = AUFTRAG:NewORBIT_CIRCLE(BullsCoordinate,10000,120)
|
||||||
|
self.LasingDrone:AddMission(Orbit)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
self:E(self.lid.."No FLIGHTGROUP object passed or FLIGHTGROUP is not alive!")
|
self:E(self.lid.."No FLIGHTGROUP object passed or FLIGHTGROUP is not alive!")
|
||||||
end
|
end
|
||||||
@@ -1305,6 +1324,26 @@ function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- [Internal] Get player name
|
||||||
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
|
-- @param Wrapper.Client#CLIENT Client
|
||||||
|
-- @return #string playername
|
||||||
|
-- @return #string ttsplayername
|
||||||
|
function PLAYERTASKCONTROLLER:_GetPlayerName(Client)
|
||||||
|
self:T(self.lid.."DisablePrecisionBombing")
|
||||||
|
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 string.find(playername,"#") then
|
||||||
|
-- personalized flight name in player naming
|
||||||
|
ttsplayername = string.match(playername,"# ([%a]+)")
|
||||||
|
end
|
||||||
|
return playername, ttsplayername
|
||||||
|
end
|
||||||
|
|
||||||
--- [User] Disable precision laser-guided bombing on statics and "high-value" ground units (MBT etc)
|
--- [User] Disable precision laser-guided bombing on statics and "high-value" ground units (MBT etc)
|
||||||
-- @param #PLAYERTASKCONTROLLER self
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
@@ -1545,6 +1584,7 @@ function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
|
|||||||
if self.LasingDrone then
|
if self.LasingDrone then
|
||||||
self.LasingDrone:_Respawn(1,nil,true)
|
self.LasingDrone:_Respawn(1,nil,true)
|
||||||
else
|
else
|
||||||
|
-- TODO: Handle ArmyGroup
|
||||||
local FG = FLIGHTGROUP:New(self.LasingDroneTemplate)
|
local FG = FLIGHTGROUP:New(self.LasingDroneTemplate)
|
||||||
FG:Activate()
|
FG:Activate()
|
||||||
self:EnablePrecisionBombing(FG,self.LaserCode or 1688)
|
self:EnablePrecisionBombing(FG,self.LaserCode or 1688)
|
||||||
@@ -1562,10 +1602,38 @@ function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
|
|||||||
self.LasingDrone.playertask.inreach = false
|
self.LasingDrone.playertask.inreach = false
|
||||||
self.LasingDrone.playertask.reachmessage = false
|
self.LasingDrone.playertask.reachmessage = false
|
||||||
-- move the drone to target
|
-- move the drone to target
|
||||||
local auftrag = AUFTRAG:NewORBIT_CIRCLE(task.Target:GetCoordinate(),10000,120)
|
if self.LasingDrone:IsFlightgroup() then
|
||||||
local currmission = self.LasingDrone:GetMissionCurrent()
|
local auftrag = AUFTRAG:NewORBIT_CIRCLE(task.Target:GetCoordinate(),10000,120)
|
||||||
self.LasingDrone:AddMission(auftrag)
|
local currmission = self.LasingDrone:GetMissionCurrent()
|
||||||
currmission:__Cancel(-2)
|
self.LasingDrone:AddMission(auftrag)
|
||||||
|
currmission:__Cancel(-2)
|
||||||
|
elseif self.LasingDrone:IsArmygroup() then
|
||||||
|
local tgtcoord = task.Target:GetCoordinate()
|
||||||
|
local tgtzone = ZONE_RADIUS:New("ArmyGroup-"..math.random(1,10000),tgtcoord:GetVec2(),3000)
|
||||||
|
local finalpos=nil -- Core.Point#COORDINATE
|
||||||
|
for i=1,50 do
|
||||||
|
finalpos = tgtzone:GetRandomCoordinate(2000,0,{land.SurfaceType.LAND,land.SurfaceType.ROAD,land.SurfaceType.SHALLOW_WATER})
|
||||||
|
if finalpos then
|
||||||
|
if finalpos:IsLOS(tgtcoord,0) then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if finalpos then
|
||||||
|
-- yeah we got one
|
||||||
|
local auftrag = AUFTRAG:NewARMOREDGUARD(finalpos)
|
||||||
|
local currmission = self.LasingDrone:GetMissionCurrent()
|
||||||
|
self.LasingDrone:AddMission(auftrag)
|
||||||
|
if currmission then currmission:__Cancel(-2) end
|
||||||
|
else
|
||||||
|
-- could not find LOS position!
|
||||||
|
self:E("***Could not find LOS position to post ArmyGroup for lasing!")
|
||||||
|
self.LasingDrone.playertask.id = 0
|
||||||
|
self.LasingDrone.playertask.busy = false
|
||||||
|
self.LasingDrone.playertask.inreach = false
|
||||||
|
self.LasingDrone.playertask.reachmessage = false
|
||||||
|
end
|
||||||
|
end
|
||||||
self.PrecisionTasks:Push(task,task.PlayerTaskNr)
|
self.PrecisionTasks:Push(task,task.PlayerTaskNr)
|
||||||
elseif self.LasingDrone.playertask and self.LasingDrone.playertask.busy then
|
elseif self.LasingDrone.playertask and self.LasingDrone.playertask.busy then
|
||||||
-- drone is busy, set up laser when over target
|
-- drone is busy, set up laser when over target
|
||||||
@@ -1907,12 +1975,7 @@ end
|
|||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
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, ttsplayername = self:_GetPlayerName(Client)
|
||||||
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
|
||||||
@@ -1955,12 +2018,7 @@ end
|
|||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
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, ttsplayername = self:_GetPlayerName(Client)
|
||||||
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?
|
||||||
@@ -2018,6 +2076,13 @@ function PLAYERTASKCONTROLLER:_ActiveTaskInfo(Group, Client)
|
|||||||
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,ttsplayername,ttstaskname,ThreatLevelText, targets, CoordText)
|
local ttstext = string.format(ThreatLocaleTextTTS,self.MenuName or self.Name,ttsplayername,ttstaskname,ThreatLevelText, targets, CoordText)
|
||||||
|
-- POINTERTARGETLASINGTTS = ". Pointer over target and lasing."
|
||||||
|
if task.Type == AUFTRAG.Type.PRECISIONBOMBING and self.precisionbombing then
|
||||||
|
if self.LasingDrone.playertask.inreach and self.LasingDrone:IsLasing() then
|
||||||
|
local lasingtext = self.gettext:GetEntry("POINTERTARGETLASINGTTS",self.locale)
|
||||||
|
ttstext = ttstext .. lasingtext
|
||||||
|
end
|
||||||
|
end
|
||||||
self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,2)
|
self.SRSQueue:NewTransmission(ttstext,nil,self.SRS,nil,2)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@@ -2036,12 +2101,7 @@ end
|
|||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
function PLAYERTASKCONTROLLER:_MarkTask(Group, Client)
|
function PLAYERTASKCONTROLLER:_MarkTask(Group, Client)
|
||||||
self:T(self.lid.."_MarkTask")
|
self:T(self.lid.."_MarkTask")
|
||||||
local playername = Client:GetPlayerName()
|
local playername, ttsplayername = self:_GetPlayerName(Client)
|
||||||
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
|
||||||
@@ -2070,12 +2130,7 @@ end
|
|||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
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, ttsplayername = self:_GetPlayerName(Client)
|
||||||
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
|
||||||
@@ -2103,12 +2158,7 @@ end
|
|||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
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, ttsplayername = self:_GetPlayerName(Client)
|
||||||
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
|
||||||
@@ -2136,12 +2186,7 @@ end
|
|||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
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, ttsplayername = self:_GetPlayerName(Client)
|
||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user