mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Merge branch 'develop' into FF/Ops
This commit is contained in:
commit
eb1e885c0a
@ -245,28 +245,12 @@ function SEAD:OnEventShot( EventData )
|
|||||||
ctrl = _targetMimcont
|
ctrl = _targetMimcont
|
||||||
}
|
}
|
||||||
|
|
||||||
local delay1 = math.random(self.TargetSkill[_targetskill].DelayOff[1], self.TargetSkill[_targetskill].DelayOff[2])
|
local function SuppressionEnd(id) --switch group back on
|
||||||
|
|
||||||
if SuppressedGroups1[id.groupName] == nil then
|
|
||||||
|
|
||||||
SuppressedGroups1[id.groupName] = {
|
|
||||||
SuppressionEndTime1 = timer.getTime() + delay1,
|
|
||||||
SuppressionEndN1 = SuppressionEndCounter1 --Store instance of SuppressionEnd() scheduled function
|
|
||||||
}
|
|
||||||
|
|
||||||
Controller.setOption(_targetMimcont, AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN)
|
|
||||||
timer.scheduleFunction(SuppressionEnd1, id, SuppressedGroups1[id.groupName].SuppressionEndTime1) --Schedule the SuppressionEnd() function
|
|
||||||
--trigger.action.outText( string.format("Radar Off " ..string.format(delay1)), 20)
|
|
||||||
end
|
|
||||||
|
|
||||||
local SuppressedGroups = {}
|
|
||||||
|
|
||||||
local function SuppressionEnd(id)
|
|
||||||
local range = self.EngagementRange -- Feature Request #1355
|
local range = self.EngagementRange -- Feature Request #1355
|
||||||
--env.info(string.format("*** SEAD - Engagement Range is %d", range))
|
self:T(string.format("*** SEAD - Engagement Range is %d", range))
|
||||||
id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.RED)
|
id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.RED)
|
||||||
id.ctrl:setOption(AI.Option.Ground.id.AC_ENGAGEMENT_RANGE_RESTRICTION,range) --Feature Request #1355
|
id.ctrl:setOption(AI.Option.Ground.id.AC_ENGAGEMENT_RANGE_RESTRICTION,range) --Feature Request #1355
|
||||||
SuppressedGroups[id.groupName] = nil
|
self.SuppressedGroups[id.groupName] = nil --delete group id from table when done
|
||||||
end
|
end
|
||||||
-- randomize switch-on time
|
-- randomize switch-on time
|
||||||
local delay = math.random(self.TargetSkill[_targetskill].DelayOn[1], self.TargetSkill[_targetskill].DelayOn[2])
|
local delay = math.random(self.TargetSkill[_targetskill].DelayOn[1], self.TargetSkill[_targetskill].DelayOn[2])
|
||||||
|
|||||||
@ -39,7 +39,7 @@
|
|||||||
-- * [F-14A/B Tomcat](https://forums.eagle.ru/forumdisplay.php?f=395) (Player & AI)
|
-- * [F-14A/B Tomcat](https://forums.eagle.ru/forumdisplay.php?f=395) (Player & AI)
|
||||||
-- * [A-4E Skyhawk Community Mod](https://forums.eagle.ru/showthread.php?t=224989) (Player & AI)
|
-- * [A-4E Skyhawk Community Mod](https://forums.eagle.ru/showthread.php?t=224989) (Player & AI)
|
||||||
-- * [AV-8B N/A Harrier](https://forums.eagle.ru/forumdisplay.php?f=555) (Player & AI) [**WIP**]
|
-- * [AV-8B N/A Harrier](https://forums.eagle.ru/forumdisplay.php?f=555) (Player & AI) [**WIP**]
|
||||||
-- * [T-45C Goshawk (VNAO)(Player & AI)]
|
-- * [T-45C Goshawk](https://www.vnao-cvw-7.com/t-45-goshawk) (VNAO)(Player & AI) [**WIP**]
|
||||||
-- * F/A-18C Hornet (AI)
|
-- * F/A-18C Hornet (AI)
|
||||||
-- * F-14A Tomcat (AI)
|
-- * F-14A Tomcat (AI)
|
||||||
-- * E-2D Hawkeye (AI)
|
-- * E-2D Hawkeye (AI)
|
||||||
@ -573,7 +573,10 @@
|
|||||||
-- * **L**ined **U**p **L**eft or **R**ight: LUL, LUR
|
-- * **L**ined **U**p **L**eft or **R**ight: LUL, LUR
|
||||||
-- * Too **H**igh or too **LO**w: H, LO
|
-- * Too **H**igh or too **LO**w: H, LO
|
||||||
-- * Too **F**ast or too **SLO**w: F, SLO
|
-- * Too **F**ast or too **SLO**w: F, SLO
|
||||||
-- * **Fly through** glideslope **down** or **up**: \\ , /
|
-- * **O**ver**S**hoot: OS, only referenced during **X**
|
||||||
|
-- * **Fly through** glideslope **down** or **up**: \\ , /, advisory only
|
||||||
|
-- * **D**rift **L**eft or **R**ight:DL, DR, advisory only
|
||||||
|
-- * **A**ngled **A**pproach: Angled approach (wings level and LUL): AA, advisory only
|
||||||
--
|
--
|
||||||
-- Each grading, x, is subdivided by
|
-- Each grading, x, is subdivided by
|
||||||
--
|
--
|
||||||
@ -634,7 +637,7 @@
|
|||||||
--
|
--
|
||||||
-- ## Foul Deck Waveoff
|
-- ## Foul Deck Waveoff
|
||||||
--
|
--
|
||||||
-- A foul deck waveoff is called by the LSO if an aircraft is detected within the landing area when an approaching aircraft is crossing the ship's wake during Case I/II operations,
|
-- A foul deck waveoff is called by the LSO if an aircraft is detected within the landing area when an approaching aircraft is at position IM-IC during Case I/II operations,
|
||||||
-- or with an aircraft approaching the 3/4 NM during Case III operations.
|
-- or with an aircraft approaching the 3/4 NM during Case III operations.
|
||||||
--
|
--
|
||||||
-- The approaching aircraft will be notified via LSO radio comms and is supposed to overfly the landing area to enter the Bolter pattern. **This pass is not graded**.
|
-- The approaching aircraft will be notified via LSO radio comms and is supposed to overfly the landing area to enter the Bolter pattern. **This pass is not graded**.
|
||||||
@ -1264,6 +1267,7 @@ AIRBOSS = {
|
|||||||
-- @field #string S3BTANKER Lockheed S-3B Viking tanker.
|
-- @field #string S3BTANKER Lockheed S-3B Viking tanker.
|
||||||
-- @field #string E2D Grumman E-2D Hawkeye AWACS.
|
-- @field #string E2D Grumman E-2D Hawkeye AWACS.
|
||||||
-- @field #string C2A Grumman C-2A Greyhound from Military Aircraft Mod.
|
-- @field #string C2A Grumman C-2A Greyhound from Military Aircraft Mod.
|
||||||
|
-- @field #string T45C T-45C by VNAO
|
||||||
AIRBOSS.AircraftCarrier={
|
AIRBOSS.AircraftCarrier={
|
||||||
AV8B="AV8BNA",
|
AV8B="AV8BNA",
|
||||||
HORNET="FA-18C_hornet",
|
HORNET="FA-18C_hornet",
|
||||||
@ -1340,6 +1344,8 @@ AIRBOSS.CarrierType={
|
|||||||
-- @field #number _min Min _OK_ value. Default -0.5 deg.
|
-- @field #number _min Min _OK_ value. Default -0.5 deg.
|
||||||
-- @field #number Left (LUR) threshold. Default -1.0 deg.
|
-- @field #number Left (LUR) threshold. Default -1.0 deg.
|
||||||
-- @field #number Right (LUL) threshold. Default 1.0 deg.
|
-- @field #number Right (LUL) threshold. Default 1.0 deg.
|
||||||
|
-- @field #number LeftMed threshold for AA/OS measuring. Default -2.0 deg.
|
||||||
|
-- @field #number RightMed threshold for AA/OS measuring. Default 2.0 deg.
|
||||||
-- @field #number LEFT LUR threshold. Default -3.0 deg.
|
-- @field #number LEFT LUR threshold. Default -3.0 deg.
|
||||||
-- @field #number RIGHT LUL threshold. Default 3.0 deg.
|
-- @field #number RIGHT LUL threshold. Default 3.0 deg.
|
||||||
|
|
||||||
@ -2650,10 +2656,10 @@ end
|
|||||||
|
|
||||||
--- Set multiplayer environment wire correction.
|
--- Set multiplayer environment wire correction.
|
||||||
-- @param #AIRBOSS self
|
-- @param #AIRBOSS self
|
||||||
-- @param #number Dcorr Correction distance in meters. Default 8.7 m.
|
-- @param #number Dcorr Correction distance in meters. Default 12 m.
|
||||||
-- @return #AIRBOSS self
|
-- @return #AIRBOSS self
|
||||||
function AIRBOSS:SetMPWireCorrection(Dcorr)
|
function AIRBOSS:SetMPWireCorrection(Dcorr)
|
||||||
self.mpWireCorrection=Dcorr or 8.7
|
self.mpWireCorrection=Dcorr or 12
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -2815,16 +2821,20 @@ end
|
|||||||
-- @param #number _max
|
-- @param #number _max
|
||||||
-- @param #number _min
|
-- @param #number _min
|
||||||
-- @param #number Left
|
-- @param #number Left
|
||||||
|
-- @param #number LeftMed
|
||||||
-- @param #number LEFT
|
-- @param #number LEFT
|
||||||
-- @param #number Right
|
-- @param #number Right
|
||||||
|
-- @param #number RightMed
|
||||||
-- @param #number RIGHT
|
-- @param #number RIGHT
|
||||||
-- @return #AIRBOSS self
|
-- @return #AIRBOSS self
|
||||||
function AIRBOSS:SetLineupErrorThresholds(_max,_min, Left, LEFT, Right, RIGHT)
|
function AIRBOSS:SetLineupErrorThresholds(_max,_min, Left, LeftMed, LEFT, Right, RightMed, RIGHT)
|
||||||
self.lue._max=_max or 0.5
|
self.lue._max=_max or 0.5
|
||||||
self.lue._min=_min or -0.5
|
self.lue._min=_min or -0.5
|
||||||
self.lue.Left=Left or -1.0
|
self.lue.Left=Left or -1.0
|
||||||
|
self.lue.LeftMed=LeftMed or -2.0
|
||||||
self.lue.LEFT=LEFT or -3.0
|
self.lue.LEFT=LEFT or -3.0
|
||||||
self.lue.Right=Right or 1.0
|
self.lue.Right=Right or 1.0
|
||||||
|
self.lue.RightMed=RightMed or 2.0
|
||||||
self.lue.RIGHT=RIGHT or 3.0
|
self.lue.RIGHT=RIGHT or 3.0
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -10096,6 +10106,27 @@ function AIRBOSS:_Groove(playerData)
|
|||||||
-- Distance in NM.
|
-- Distance in NM.
|
||||||
local d=UTILS.MetersToNM(rho)
|
local d=UTILS.MetersToNM(rho)
|
||||||
|
|
||||||
|
-- Drift on lineup.
|
||||||
|
if rho>=RAR and rho<=RIM then
|
||||||
|
if gd.LUE>0.21 and lineupError<-0.21 then
|
||||||
|
env.info" Drift Right across centre ==> DR-"
|
||||||
|
gd.Drift=" DR"
|
||||||
|
self:T(self.lid..string.format("Got Drift Right across centre step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
||||||
|
elseif gd.LUE<-0.21 and lineupError>0.21 then
|
||||||
|
env.info" Drift Left ==> DL-"
|
||||||
|
gd.Drift=" DL"
|
||||||
|
self:T(self.lid..string.format("Got Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
||||||
|
elseif gd.LUE>0.12 and lineupError<-0.12 then
|
||||||
|
env.info" Little Drift Right across centre ==> (DR-)"
|
||||||
|
gd.Drift=" (DR)"
|
||||||
|
self:T(self.lid..string.format("Got Little Drift Right across centre at step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
||||||
|
elseif gd.LUE<-0.12 and lineupError>0.12 then
|
||||||
|
env.info" Little Drift Left across centre ==> (DL-)"
|
||||||
|
gd.Drift=" (DL)"
|
||||||
|
self:E(self.lid..string.format("Got Little Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Update max deviation of line up error.
|
-- Update max deviation of line up error.
|
||||||
if math.abs(lineupError)>math.abs(gd.LUE) then
|
if math.abs(lineupError)>math.abs(gd.LUE) then
|
||||||
self:T(self.lid..string.format("Got bigger LUE at step %s, d=%.3f: LUE %.3f>%.3f", gs, d, lineupError, gd.LUE))
|
self:T(self.lid..string.format("Got bigger LUE at step %s, d=%.3f: LUE %.3f>%.3f", gs, d, lineupError, gd.LUE))
|
||||||
@ -12092,7 +12123,7 @@ function AIRBOSS:_LSOgrade(playerData)
|
|||||||
local nS=count(G, '%(')
|
local nS=count(G, '%(')
|
||||||
local nN=N-nS-nL
|
local nN=N-nS-nL
|
||||||
|
|
||||||
-- Groove time 16-18 sec for a unicorn.
|
-- Groove time 15-18.99 sec for a unicorn.
|
||||||
local Tgroove=playerData.Tgroove
|
local Tgroove=playerData.Tgroove
|
||||||
local TgrooveUnicorn=Tgroove and (Tgroove>=15.0 and Tgroove<=18.99) or false
|
local TgrooveUnicorn=Tgroove and (Tgroove>=15.0 and Tgroove<=18.99) or false
|
||||||
|
|
||||||
@ -12228,6 +12259,34 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
|
|||||||
-- Aircraft specific AoA values.
|
-- Aircraft specific AoA values.
|
||||||
local acaoa=self:_GetAircraftAoA(playerData)
|
local acaoa=self:_GetAircraftAoA(playerData)
|
||||||
|
|
||||||
|
--Angled Approach.
|
||||||
|
local P=nil
|
||||||
|
if step==AIRBOSS.PatternStep.GROOVE_XX and ROL<=4.0 then
|
||||||
|
if LUE>self.lue.RIGHT then
|
||||||
|
P=underline("AA")
|
||||||
|
elseif
|
||||||
|
LUE>self.lue.RightMed then
|
||||||
|
P="AA "
|
||||||
|
elseif
|
||||||
|
LUE>self.lue.Right then
|
||||||
|
P=little("AA")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--Overshoot Start.
|
||||||
|
local O=nil
|
||||||
|
if step==AIRBOSS.PatternStep.GROOVE_XX then
|
||||||
|
if LUE<self.lue.LEFT then
|
||||||
|
O=underline("OS")
|
||||||
|
elseif
|
||||||
|
LUE<self.lue.Left then
|
||||||
|
O="OS"
|
||||||
|
elseif
|
||||||
|
LUE<self.lue._min then
|
||||||
|
O=little("OS")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Speed via AoA. Depends on aircraft type.
|
-- Speed via AoA. Depends on aircraft type.
|
||||||
local S=nil
|
local S=nil
|
||||||
if AOA>acaoa.SLOW then
|
if AOA>acaoa.SLOW then
|
||||||
@ -12260,7 +12319,7 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
|
|||||||
A=little("LO")
|
A=little("LO")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Line up. Good [-0.5, 0.5]
|
-- Line up. XX Step replaced by Overshoot start (OS). Good [-0.5, 0.5]
|
||||||
local D=nil
|
local D=nil
|
||||||
if LUE>self.lue.RIGHT then
|
if LUE>self.lue.RIGHT then
|
||||||
D=underline("LUL")
|
D=underline("LUL")
|
||||||
@ -12268,11 +12327,11 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
|
|||||||
D="LUL"
|
D="LUL"
|
||||||
elseif LUE>self.lue._max then
|
elseif LUE>self.lue._max then
|
||||||
D=little("LUL")
|
D=little("LUL")
|
||||||
elseif LUE<self.lue.LEFT then
|
elseif LUE<self.lue.LEFT and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
||||||
D=underline("LUR")
|
D=underline("LUR")
|
||||||
elseif LUE<self.lue.Left then
|
elseif LUE<self.lue.Left and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
||||||
D="LUR"
|
D="LUR"
|
||||||
elseif LUE<self.lue._min then
|
elseif LUE<self.lue._min and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
||||||
D=little("LUR")
|
D=little("LUR")
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -12283,6 +12342,11 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
|
|||||||
if fdata.FlyThrough then
|
if fdata.FlyThrough then
|
||||||
G=G..fdata.FlyThrough
|
G=G..fdata.FlyThrough
|
||||||
end
|
end
|
||||||
|
-- Angled Approach - doesn't affect score, advisory only.
|
||||||
|
if P then
|
||||||
|
G=G..P
|
||||||
|
n=n
|
||||||
|
end
|
||||||
-- Speed.
|
-- Speed.
|
||||||
if S then
|
if S then
|
||||||
G=G..S
|
G=G..S
|
||||||
@ -12298,6 +12362,16 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
|
|||||||
G=G..D
|
G=G..D
|
||||||
n=n+1
|
n=n+1
|
||||||
end
|
end
|
||||||
|
--Drift in Lineup
|
||||||
|
if fdata.Drift then
|
||||||
|
G=G..fdata.Drift
|
||||||
|
n=n -- Drift doesn't affect score, advisory only.
|
||||||
|
end
|
||||||
|
-- Overshoot.
|
||||||
|
if O then
|
||||||
|
G=G..O
|
||||||
|
n=n+1
|
||||||
|
end
|
||||||
|
|
||||||
-- Add current step.
|
-- Add current step.
|
||||||
local step=self:_GS(step)
|
local step=self:_GS(step)
|
||||||
|
|||||||
@ -1,8 +1,11 @@
|
|||||||
--- **Ops** - Office of Military Intelligence.
|
--- **Ops** - Office of Military Intelligence.
|
||||||
--
|
--
|
||||||
-- **Main Features:**
|
-- ## Main Features:
|
||||||
--
|
--
|
||||||
-- * Stuff
|
-- * Detect and track contacts consistently
|
||||||
|
-- * Detect and track clusters of contacts consistently
|
||||||
|
-- * Use FSM events to link functionality into your scripts
|
||||||
|
-- * Easy setup
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -42,7 +45,40 @@
|
|||||||
--
|
--
|
||||||
-- # The INTEL Concept
|
-- # The INTEL Concept
|
||||||
--
|
--
|
||||||
|
-- * Lightweight replacement for @{Functional.Detection#DETECTION}
|
||||||
|
-- * Detect and track contacts consistently
|
||||||
|
-- * Detect and track clusters of contacts consistently
|
||||||
|
-- * Once detected and still alive, planes will be tracked 10 minutes, helicopters 20 minutes, ships and trains 1 hour, ground units 2 hours
|
||||||
|
-- * Use FSM events to link functionality into your scripts
|
||||||
--
|
--
|
||||||
|
-- # Basic Usage
|
||||||
|
--
|
||||||
|
-- ## set up a detection SET_GROUP
|
||||||
|
--
|
||||||
|
-- `Red_DetectionSetGroup = SET_GROUP:New()`
|
||||||
|
-- `Red_DetectionSetGroup:FilterPrefixes( { "Red EWR" } )`
|
||||||
|
-- `Red_DetectionSetGroup:FilterOnce()`
|
||||||
|
--
|
||||||
|
-- ## New Intel type detection for the red side, logname "KGB"
|
||||||
|
--
|
||||||
|
-- `RedIntel = INTEL:New(Red_DetectionSetGroup,"red","KGB")`
|
||||||
|
-- `RedIntel:SetClusterAnalysis(true,true)`
|
||||||
|
-- `RedIntel:SetVerbosity(2)`
|
||||||
|
-- `RedIntel:Start()`
|
||||||
|
--
|
||||||
|
-- ## Hook into new contacts found
|
||||||
|
--
|
||||||
|
-- `function RedIntel:OnAfterNewContact(From, Event, To, Contact)`
|
||||||
|
-- `local text = string.format("NEW contact %s detected by %s", Contact.groupname, Contact.recce or "unknown")`
|
||||||
|
-- `local m = MESSAGE:New(text,15,"KGB"):ToAll()`
|
||||||
|
-- `end`
|
||||||
|
--
|
||||||
|
-- ## And/or new clusters found
|
||||||
|
--
|
||||||
|
-- `function RedIntel:OnAfterNewCluster(From, Event, To, Contact, Cluster)`
|
||||||
|
-- `local text = string.format("NEW cluster %d size %d with contact %s", Cluster.index, Cluster.size, Contact.groupname)`
|
||||||
|
-- `local m = MESSAGE:New(text,15,"KGB"):ToAll()`
|
||||||
|
-- `end`
|
||||||
--
|
--
|
||||||
-- @field #INTEL
|
-- @field #INTEL
|
||||||
INTEL = {
|
INTEL = {
|
||||||
@ -57,7 +93,7 @@ INTEL = {
|
|||||||
ContactsUnknown = {},
|
ContactsUnknown = {},
|
||||||
Clusters = {},
|
Clusters = {},
|
||||||
clustercounter = 1,
|
clustercounter = 1,
|
||||||
clusterradius = 15,
|
clusterradius = 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
--- Detected item info.
|
--- Detected item info.
|
||||||
@ -314,7 +350,7 @@ function INTEL:RemoveRejectZone(RejectZone)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Set forget contacts time interval.
|
--- Set forget contacts time interval. For unknown contacts only.
|
||||||
-- Previously known contacts that are not detected any more, are "lost" after this time.
|
-- Previously known contacts that are not detected any more, are "lost" after this time.
|
||||||
-- This avoids fast oscillations between a contact being detected and undetected.
|
-- This avoids fast oscillations between a contact being detected and undetected.
|
||||||
-- @param #INTEL self
|
-- @param #INTEL self
|
||||||
@ -429,7 +465,7 @@ end
|
|||||||
-- @param #number radius The radius of the clusters
|
-- @param #number radius The radius of the clusters
|
||||||
-- @return #INTEL self
|
-- @return #INTEL self
|
||||||
function INTEL:SetClusterRadius(radius)
|
function INTEL:SetClusterRadius(radius)
|
||||||
local radius = radius or 15
|
local radius = radius or 10
|
||||||
self.clusterradius = radius
|
self.clusterradius = radius
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -1046,7 +1082,7 @@ function INTEL:CalcClusterThreatlevelSum(cluster)
|
|||||||
threatlevel=threatlevel+contact.threatlevel
|
threatlevel=threatlevel+contact.threatlevel
|
||||||
|
|
||||||
end
|
end
|
||||||
|
cluster.threatlevelSum = threatlevel
|
||||||
return threatlevel
|
return threatlevel
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1058,7 +1094,7 @@ function INTEL:CalcClusterThreatlevelAverage(cluster)
|
|||||||
|
|
||||||
local threatlevel=self:CalcClusterThreatlevelSum(cluster)
|
local threatlevel=self:CalcClusterThreatlevelSum(cluster)
|
||||||
threatlevel=threatlevel/cluster.size
|
threatlevel=threatlevel/cluster.size
|
||||||
|
cluster.threatlevelAve = threatlevel
|
||||||
return threatlevel
|
return threatlevel
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1078,7 +1114,7 @@ function INTEL:CalcClusterThreatlevelMax(cluster)
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
cluster.threatlevelMax = threatlevel
|
||||||
return threatlevel
|
return threatlevel
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1119,7 +1155,7 @@ function INTEL:IsContactConnectedToCluster(contact, cluster)
|
|||||||
--local dist=Contact.position:Get2DDistance(contact.position)
|
--local dist=Contact.position:Get2DDistance(contact.position)
|
||||||
local dist=Contact.position:DistanceFromPointVec2(contact.position)
|
local dist=Contact.position:DistanceFromPointVec2(contact.position)
|
||||||
|
|
||||||
local radius = self.clusterradius or 15
|
local radius = self.clusterradius or 10
|
||||||
if dist<radius*1000 then
|
if dist<radius*1000 then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|||||||
@ -424,6 +424,14 @@ UTILS.hPa2inHg = function( hPa )
|
|||||||
return hPa * 0.0295299830714
|
return hPa * 0.0295299830714
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Convert knots to alitude corrected KIAS, e.g. for tankers.
|
||||||
|
-- @param #number knots Speed in knots.
|
||||||
|
-- @param #number altitude Altitude in feet
|
||||||
|
-- @return #number Corrected KIAS
|
||||||
|
UTILS.KnotsToAltKIAS = function( knots, altitude )
|
||||||
|
return (knots * 0.018 * (altitude / 1000)) + knots
|
||||||
|
end
|
||||||
|
|
||||||
--- Convert pressure from hecto Pascal (hPa) to millimeters of mercury (mmHg).
|
--- Convert pressure from hecto Pascal (hPa) to millimeters of mercury (mmHg).
|
||||||
-- @param #number hPa Pressure in hPa.
|
-- @param #number hPa Pressure in hPa.
|
||||||
-- @return #number Pressure in mmHg.
|
-- @return #number Pressure in mmHg.
|
||||||
|
|||||||
@ -3687,3 +3687,57 @@ function CONTROLLABLE:OptionAAAttackRange(range)
|
|||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Defines the range at which a GROUND unit/group is allowed to use its weapons automatically.
|
||||||
|
-- @param #CONTROLLABLE self
|
||||||
|
-- @param #number EngageRange Engage range limit in percent (a number between 0 and 100). Default 100.
|
||||||
|
-- @return #CONTROLLABLE self
|
||||||
|
function CONTROLLABLE:OptionEngageRange(EngageRange)
|
||||||
|
self:F2( { self.ControllableName } )
|
||||||
|
-- Set default if not specified.
|
||||||
|
EngageRange=EngageRange or 100
|
||||||
|
if EngageRange < 0 or EngageRange > 100 then
|
||||||
|
EngageRange = 100
|
||||||
|
end
|
||||||
|
local DCSControllable = self:GetDCSObject()
|
||||||
|
if DCSControllable then
|
||||||
|
local Controller = self:_GetController()
|
||||||
|
if Controller then
|
||||||
|
if self:IsGround() then
|
||||||
|
self:SetOption(AI.Option.Ground.id.AC_ENGAGEMENT_RANGE_RESTRICTION, EngageRange)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
--- (GROUND) Relocate controllable to a random point within a given radius; use e.g.for evasive actions; Note that not all ground controllables can actually drive, also the alarm state of the controllable might stop it from moving.
|
||||||
|
-- @param #CONTROLLABLE self
|
||||||
|
-- @param #number speed Speed of the controllable, default 20
|
||||||
|
-- @param #number radius Radius of the relocation zone, default 500
|
||||||
|
-- @param #boolean onroad If true, route on road (less problems with AI way finding), default true
|
||||||
|
-- @param #boolean shortcut If true and onroad is set, take a shorter route - if available - off road, default false
|
||||||
|
function CONTROLLABLE:RelocateGroundRandomInRadius(speed, radius, onroad, shortcut)
|
||||||
|
self:F2( { self.ControllableName } )
|
||||||
|
|
||||||
|
local _coord = self:GetCoordinate()
|
||||||
|
local _radius = radius or 500
|
||||||
|
local _speed = speed or 20
|
||||||
|
local _tocoord = _coord:GetRandomCoordinateInRadius(_radius,100)
|
||||||
|
local _onroad = onroad or true
|
||||||
|
local _grptsk = {}
|
||||||
|
local _candoroad = false
|
||||||
|
local _shortcut = shortcut or false
|
||||||
|
|
||||||
|
-- create a DCS Task an push it on the group
|
||||||
|
-- TaskGroundOnRoad(ToCoordinate,Speed,OffRoadFormation,Shortcut,FromCoordinate,WaypointFunction,WaypointFunctionArguments)
|
||||||
|
if onroad then
|
||||||
|
_grptsk, _candoroad = self:TaskGroundOnRoad(_tocoord,_speed,"Off Road",_shortcut)
|
||||||
|
self:Route(_grptsk,5)
|
||||||
|
else
|
||||||
|
self:TaskRouteToVec2(_tocoord:GetVec2(),_speed,"Off Road")
|
||||||
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|||||||
@ -1446,6 +1446,7 @@ do -- Cargo
|
|||||||
["Dry-cargo ship-2"] = 70000,
|
["Dry-cargo ship-2"] = 70000,
|
||||||
["Higgins_boat"] = 3700, -- Higgins Boat can load 3700 kg of general cargo or 36 men (source wikipedia).
|
["Higgins_boat"] = 3700, -- Higgins Boat can load 3700 kg of general cargo or 36 men (source wikipedia).
|
||||||
["USS_Samuel_Chase"] = 25000, -- Let's say 25 tons for now. Wiki says 33 Higgins boats, which would be 264 tons (can't be right!) and/or 578 troops.
|
["USS_Samuel_Chase"] = 25000, -- Let's say 25 tons for now. Wiki says 33 Higgins boats, which would be 264 tons (can't be right!) and/or 578 troops.
|
||||||
|
["LST_Mk2"] =2100000, -- Can carry 2100 tons according to wiki source!
|
||||||
}
|
}
|
||||||
self.__.CargoBayWeightLimit = ( Weights[Desc.typeName] or 50000 )
|
self.__.CargoBayWeightLimit = ( Weights[Desc.typeName] or 50000 )
|
||||||
|
|
||||||
@ -1453,40 +1454,47 @@ do -- Cargo
|
|||||||
local Desc = self:GetDesc()
|
local Desc = self:GetDesc()
|
||||||
|
|
||||||
local Weights = {
|
local Weights = {
|
||||||
["M1126 Stryker ICV"] = 9,
|
|
||||||
["M-113"] = 9,
|
|
||||||
["AAV7"] = 25,
|
["AAV7"] = 25,
|
||||||
["M2A1_halftrack"] = 9,
|
["Bedford_MWD"] = 8, -- new by kappa
|
||||||
["BMD-1"] = 9,
|
["Blitz_36-6700A"] = 10, -- new by kappa
|
||||||
|
["BMD-1"] = 9, -- IRL should be 4 passengers
|
||||||
["BMP-1"] = 8,
|
["BMP-1"] = 8,
|
||||||
["BMP-2"] = 7,
|
["BMP-2"] = 7,
|
||||||
["BMP-3"] = 8,
|
["BMP-3"] = 8, -- IRL should be 7+2 passengers
|
||||||
["Boman"] = 25,
|
["Boman"] = 25,
|
||||||
["BTR-80"] = 9,
|
["BTR-80"] = 9, -- IRL should be 7 passengers
|
||||||
["BTR_D"] = 12,
|
["BTR-82A"] = 9, -- new by kappa -- IRL should be 7 passengers
|
||||||
|
["BTR_D"] = 12, -- IRL should be 10 passengers
|
||||||
["Cobra"] = 8,
|
["Cobra"] = 8,
|
||||||
|
["Land_Rover_101_FC"] = 11, -- new by kappa
|
||||||
|
["Land_Rover_109_S3"] = 7, -- new by kappa
|
||||||
["LAV-25"] = 6,
|
["LAV-25"] = 6,
|
||||||
["M-2 Bradley"] = 6,
|
["M-2 Bradley"] = 6,
|
||||||
["M1043 HMMWV Armament"] = 4,
|
["M1043 HMMWV Armament"] = 4,
|
||||||
["M1045 HMMWV TOW"] = 4,
|
["M1045 HMMWV TOW"] = 4,
|
||||||
["M1126 Stryker ICV"] = 9,
|
["M1126 Stryker ICV"] = 9,
|
||||||
["M1134 Stryker ATGM"] = 9,
|
["M1134 Stryker ATGM"] = 9,
|
||||||
|
["M2A1_halftrack"] = 9,
|
||||||
|
["M-113"] = 9, -- IRL should be 11 passengers
|
||||||
["Marder"] = 6,
|
["Marder"] = 6,
|
||||||
["MCV-80"] = 9,
|
["MCV-80"] = 9, -- IRL should be 7 passengers
|
||||||
["MLRS FDDM"] = 4,
|
["MLRS FDDM"] = 4,
|
||||||
["MTLB"] = 25,
|
["MTLB"] = 25, -- IRL should be 11 passengers
|
||||||
["TPZ"] = 10,
|
|
||||||
["Ural-4320 APA-5D"] = 10,
|
|
||||||
["GAZ-66"] = 8,
|
["GAZ-66"] = 8,
|
||||||
["GAZ-3307"] = 12,
|
["GAZ-3307"] = 12,
|
||||||
["GAZ-3308"] = 14,
|
["GAZ-3308"] = 14,
|
||||||
["Tigr_233036"] = 6,
|
["Grad_FDDM"] = 6, -- new by kappa
|
||||||
["KAMAZ Truck"] = 12,
|
["KAMAZ Truck"] = 12,
|
||||||
["KrAZ6322"] = 12,
|
["KrAZ6322"] = 12,
|
||||||
["M 818"] = 12,
|
["M 818"] = 12,
|
||||||
|
["Tigr_233036"] = 6,
|
||||||
|
["TPZ"] = 10,
|
||||||
|
["UAZ-469"] = 4, -- new by kappa
|
||||||
["Ural-375"] = 12,
|
["Ural-375"] = 12,
|
||||||
["Ural-4320-31"] = 14,
|
["Ural-4320-31"] = 14,
|
||||||
|
["Ural-4320 APA-5D"] = 10,
|
||||||
["Ural-4320T"] = 14,
|
["Ural-4320T"] = 14,
|
||||||
|
["ZBD04A"] = 7, -- new by kappa
|
||||||
}
|
}
|
||||||
|
|
||||||
local CargoBayWeightLimit = ( Weights[Desc.typeName] or 0 ) * 95
|
local CargoBayWeightLimit = ( Weights[Desc.typeName] or 0 ) * 95
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user