Merge pull request #1637 from FlightControl-Master/Applevangelist-Chief-1

CHIEF - Updates
This commit is contained in:
Frank 2021-11-20 17:49:30 +01:00 committed by GitHub
commit 35e6b6faf4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -174,11 +174,13 @@ CHIEF.Strategy = {
-- @field #number importance Importance -- @field #number importance Importance
-- @field Ops.Auftrag#AUFTRAG missionPatrol Patrol mission. -- @field Ops.Auftrag#AUFTRAG missionPatrol Patrol mission.
-- @field Ops.Auftrag#AUFTRAG missionCAS CAS mission. -- @field Ops.Auftrag#AUFTRAG missionCAS CAS mission.
-- @field Ops.Auftrag#AUFTRAG missionPatrol Patrol mission.
-- @field Ops.Auftrag#AUFTRAG missionARTY Artillery mission.
--- CHIEF class version. --- CHIEF class version.
-- @field #string version -- @field #string version
CHIEF.version="0.0.1" CHIEF.version="0.0.2"
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- TODO list -- TODO list
@ -1556,12 +1558,18 @@ function CHIEF:CheckTargetQueue()
-- * target threatlevel -- * target threatlevel
-- * how many assets are still in stock -- * how many assets are still in stock
-- * is it inside of our border -- * is it inside of our border
-- * add damping factor
local NassetsMin=1 local NassetsMin=1
local NassetsMax=1 local NassetsMax=1
if target.threatlevel0>=8 then local threat = target.threatlevel0 / target.N0 -- avg threatlevel
local NoUnits = target.N0 -- no of units in here
--if target.threatlevel0>=8 then
if threat>=8 and NoUnits >=10 then
NassetsMax=3 NassetsMax=3
elseif target.threatlevel0>=5 then elseif threat>=5 then
NassetsMax=2 NassetsMax=2
else else
NassetsMax=1 NassetsMax=1
@ -1675,9 +1683,14 @@ function CHIEF:CheckOpsZoneQueue()
if ownercoalition~=self.coalition and (stratzone.importance==nil or stratzone.importance<=vip) then if ownercoalition~=self.coalition and (stratzone.importance==nil or stratzone.importance<=vip) then
-- Has a patrol mission? -- Has a patrol mission?
local hasMissionPatrol=stratzone.missionPatrol and stratzone.missionPatrol:IsNotOver() or false --local hasMissionPatrol=stratzone.missionPatrol and stratzone.missionPatrol:IsNotOver() or false
local hasMissionPatrol=stratzone.opszone:_FindMissions(self.coalition,AUFTRAG.Type.PATROLZONE)
-- Has a CAS mission? -- Has a CAS mission?
local hasMissionCAS=stratzone.missionCAS and stratzone.missionCAS:IsNotOver() or false --local hasMissionCAS=stratzone.missionCAS and stratzone.missionCAS:IsNotOver() or false
local hasMissionCAS=stratzone.opszone:_FindMissions(self.coalition,AUFTRAG.Type.CAS)
-- Has a ARTY mission?
--local hasMissionARTY=stratzone.missionARTY and stratzone.missionARTY:IsNotOver() or false
local hasMissionARTY=stratzone.opszone:_FindMissions(self.coalition,AUFTRAG.Type.ARTY)
-- Debug info. -- Debug info.
self:T(self.lid..string.format("Zone %s [%s] is owned by coalition %d", stratzone.opszone.zone:GetName(), stratzone.opszone:GetState(), ownercoalition)) self:T(self.lid..string.format("Zone %s [%s] is owned by coalition %d", stratzone.opszone.zone:GetName(), stratzone.opszone:GetState(), ownercoalition))
@ -1696,7 +1709,7 @@ function CHIEF:CheckOpsZoneQueue()
self:T3(self.lid..string.format("Zone is empty ==> Recruit Patrol zone infantry assets")) self:T3(self.lid..string.format("Zone is empty ==> Recruit Patrol zone infantry assets"))
-- Recruit ground assets that -- Recruit ground assets that
local recruited=self:RecruitAssetsForZone(stratzone, AUFTRAG.Type.ONGUARD, 1, 3, {Group.Category.GROUND}, {GROUP.Attribute.GROUND_INFANTRY}) local recruited=self:RecruitAssetsForZone(stratzone, AUFTRAG.Type.ONGUARD, 1, 3, {Group.Category.GROUND}, {GROUP.Attribute.GROUND_INFANTRY, GROUP.Attribute.GROUND_TANK})
-- Debug info. -- Debug info.
self:T(self.lid..string.format("Zone is empty ==> Recruit Patrol zone infantry assets=%s", tostring(recruited))) self:T(self.lid..string.format("Zone is empty ==> Recruit Patrol zone infantry assets=%s", tostring(recruited)))
@ -1724,6 +1737,19 @@ function CHIEF:CheckOpsZoneQueue()
self:T(self.lid..string.format("Zone is NOT empty ==> Recruit CAS assets=%s", tostring(recruited))) self:T(self.lid..string.format("Zone is NOT empty ==> Recruit CAS assets=%s", tostring(recruited)))
end end
if not hasMissionARTY then
-- Debug message.
self:T3(self.lid..string.format("Zone is NOT empty ==> Recruit ARTY assets"))
-- Recruite CAS assets.
local recruited=self:RecruitAssetsForZone(stratzone, AUFTRAG.Type.ARTY, 1, 1)
-- Debug message.
self:T(self.lid..string.format("Zone is NOT empty ==> Recruit ARTY assets=%s", tostring(recruited)))
end
end end
@ -1738,17 +1764,31 @@ function CHIEF:CheckOpsZoneQueue()
local ownercoalition=stratzone.opszone:GetOwner() local ownercoalition=stratzone.opszone:GetOwner()
-- Has a patrol mission? -- Has a patrol mission?
local hasMissionPatrol=stratzone.missionPatrol and stratzone.missionPatrol:IsNotOver() or false --local hasMissionPatrol=stratzone.missionPatrol and stratzone.missionPatrol:IsNotOver() or false
local hasMissionPATROL=stratzone.opszone:_FindMissions(self.coalition,AUFTRAG.Type.PATROLZONE)
-- Has a CAS mission? -- Has a CAS mission?
local hasMissionCAS=stratzone.missionCAS and stratzone.missionCAS:IsNotOver() or false --local hasMissionCAS=stratzone.missionCAS and stratzone.missionCAS:IsNotOver() or false
local hasMissionCAS, CASMissions = stratzone.opszone:_FindMissions(self.coalition,AUFTRAG.Type.CAS)
local hasMissionARTY, ARTYMissions = stratzone.opszone:_FindMissions(self.coalition,AUFTRAG.Type.ARTY)
if ownercoalition==self.coalition and stratzone.opszone:IsEmpty() and hasMissionCAS then if ownercoalition==self.coalition and stratzone.opszone:IsEmpty() and hasMissionCAS then
-- Cancel CAS mission if zone is ours and no enemies are present. -- Cancel CAS mission if zone is ours and no enemies are present.
-- TODO: Might want to check if we still have CAS capable assets in stock?! -- TODO: Might want to check if we still have CAS capable assets in stock?!
stratzone.missionCAS:Cancel() --stratzone.missionCAS:Cancel()
for _,_auftrag in pairs(CASMissions) do
_auftrag:Cancel()
end
end end
if ownercoalition==self.coalition and hasMissionARTY then
-- Cancel CAS mission if zone is ours and no enemies are present.
-- TODO: Might want to check if we still have ARTY capable assets in stock?!
--stratzone.missionCAS:Cancel()
for _,_auftrag in pairs(ARTYMissions) do
_auftrag:Cancel()
end
end
end end
@ -1907,8 +1947,8 @@ function CHIEF:_GetMissionPerformanceFromTarget(Target)
-- EWR -- EWR
--table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.SEAD, 100)) table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.SEAD, 100))
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100)) --table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
elseif attribute==GROUP.Attribute.GROUND_AAA then elseif attribute==GROUP.Attribute.GROUND_AAA then
@ -2036,7 +2076,7 @@ function CHIEF:RecruitAssetsForTarget(Target, MissionType, NassetsMin, NassetsMa
for _,_legion in pairs(self.commander.legions) do for _,_legion in pairs(self.commander.legions) do
local legion=_legion --Ops.Legion#LEGION local legion=_legion --Ops.Legion#LEGION
-- Check that runway is operational. -- Check that runway is operational.d
local Runway=legion:IsAirwing() and legion:IsRunwayOperational() or true local Runway=legion:IsAirwing() and legion:IsRunwayOperational() or true
if legion:IsRunning() and Runway then if legion:IsRunning() and Runway then
@ -2151,7 +2191,8 @@ function CHIEF:RecruitAssetsForZone(StratZone, MissionType, NassetsMin, NassetsM
-- Attach mission to ops zone. -- Attach mission to ops zone.
-- TODO: Need a better way! -- TODO: Need a better way!
StratZone.missionPatrol=mission --StratZone.missionPatrol=mission
StratZone.opszone:_AddMission(self.coalition,MissionType,mission)
return true return true
else else
@ -2162,8 +2203,34 @@ function CHIEF:RecruitAssetsForZone(StratZone, MissionType, NassetsMin, NassetsM
elseif MissionType==AUFTRAG.Type.CAS then elseif MissionType==AUFTRAG.Type.CAS then
-- Create Patrol zone mission. -- Create Patrol zone mission.
local mission=AUFTRAG:NewPATROLZONE(StratZone.opszone.zone) local caszone = StratZone.opszone.zone
local coord = caszone:GetCoordinate()
local height = UTILS.MetersToFeet(coord:GetLandHeight())+2000
local mission=AUFTRAG:NewPATROLZONE(caszone)
mission:SetEngageDetected(25, {"Ground Units", "Light armed ships", "Helicopters"}) mission:SetEngageDetected(25, {"Ground Units", "Light armed ships", "Helicopters"})
mission:SetWeaponExpend(AI.Task.WeaponExpend.ALL)
-- Add assets to mission.
for _,asset in pairs(assets) do
mission:AddAsset(asset)
end
-- Assign mission to legions.
self:MissionAssign(mission, legions)
-- Attach mission to ops zone.
-- TODO: Need a better way!
--StratZone.missionCAS=mission
StratZone.opszone:_AddMission(self.coalition,MissionType,mission)
return true
elseif MissionType==AUFTRAG.Type.ARTY then
-- Create ARTY zone mission.
local TargetZone = StratZone.opszone.zone
local Target = TargetZone:GetCoordinate()
local Radius = TargetZone:GetRadius()
local mission=AUFTRAG:NewARTY(Target,120,Radius)
-- Add assets to mission. -- Add assets to mission.
for _,asset in pairs(assets) do for _,asset in pairs(assets) do
@ -2175,8 +2242,9 @@ function CHIEF:RecruitAssetsForZone(StratZone, MissionType, NassetsMin, NassetsM
-- Attach mission to ops zone. -- Attach mission to ops zone.
-- TODO: Need a better way! -- TODO: Need a better way!
StratZone.missionCAS=mission --StratZone.missionARTY=mission
StratZone.opszone:_AddMission(self.coalition,MissionType,mission)
return true return true
end end
@ -2187,4 +2255,4 @@ end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------