Fixing unlimited resources and problems with landing planes.

This commit is contained in:
FlightControl_Master 2017-08-05 18:06:51 +02:00
parent d383c42131
commit 3d2dbea1d7

View File

@ -2368,24 +2368,24 @@ do -- AI_A2A_DISPATCHER
--- @param #AI_A2A_DISPATCHER self --- @param #AI_A2A_DISPATCHER self
function AI_A2A_DISPATCHER:AddDefenderToSquadron( Squadron, Defender, Size ) function AI_A2A_DISPATCHER:AddDefenderToSquadron( Squadron, Defender, Size )
self.Defenders = self.Defenders or {}
local DefenderName = Defender:GetName()
self.Defenders[ DefenderName ] = Squadron
if Squadron.Resources then if Squadron.Resources then
self.Defenders = self.Defenders or {}
local DefenderName = Defender:GetName()
self.Defenders[ DefenderName ] = Squadron
Squadron.Resources = Squadron.Resources - Size Squadron.Resources = Squadron.Resources - Size
self:F( { DefenderName = DefenderName, SquadronResources = Squadron.Resources } )
end end
self:E( { DefenderName = DefenderName, SquadronResources = Squadron.Resources } )
end end
--- @param #AI_A2A_DISPATCHER self --- @param #AI_A2A_DISPATCHER self
function AI_A2A_DISPATCHER:RemoveDefenderFromSquadron( Squadron, Defender ) function AI_A2A_DISPATCHER:RemoveDefenderFromSquadron( Squadron, Defender )
self.Defenders = self.Defenders or {}
local DefenderName = Defender:GetName()
if Squadron.Resources then if Squadron.Resources then
self.Defenders = self.Defenders or {}
local DefenderName = Defender:GetName()
Squadron.Resources = Squadron.Resources + Defender:GetSize() Squadron.Resources = Squadron.Resources + Defender:GetSize()
self.Defenders[ DefenderName ] = nil
self:F( { DefenderName = DefenderName, SquadronResources = Squadron.Resources } )
end end
self.Defenders[ DefenderName ] = nil
self:F( { DefenderName = DefenderName, SquadronResources = Squadron.Resources } )
end end
function AI_A2A_DISPATCHER:GetSquadronFromDefender( Defender ) function AI_A2A_DISPATCHER:GetSquadronFromDefender( Defender )
@ -2556,42 +2556,40 @@ do -- AI_A2A_DISPATCHER
--- ---
-- @param #AI_A2A_DISPATCHER self -- @param #AI_A2A_DISPATCHER self
function AI_A2A_DISPATCHER:onafterENGAGE( From, Event, To, Target, AIGroups ) function AI_A2A_DISPATCHER:onafterENGAGE( From, Event, To, Target, Defenders )
if AIGroups then if Defenders then
for AIGroupID, AIGroup in pairs( AIGroups ) do for DefenderID, Defender in pairs( Defenders ) do
local Fsm = self:GetDefenderTaskFsm( AIGroup ) local Fsm = self:GetDefenderTaskFsm( Defender )
Fsm:__Engage( 1, Target.Set ) -- Engage on the TargetSetUnit Fsm:__Engage( 1, Target.Set ) -- Engage on the TargetSetUnit
self:SetDefenderTaskTarget( AIGroup, Target ) self:SetDefenderTaskTarget( Defender, Target )
function Fsm:onafterRTB( AIGroup, From, Event, To ) function Fsm:onafterRTB( Defender, From, Event, To )
self:F({"CAP RTB"}) self:F({"CAP RTB", Defender:GetName()})
self:GetParent(self).onafterRTB( self, AIGroup, From, Event, To ) self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
local AIGroup = self:GetControllable() Dispatcher:ClearDefenderTaskTarget( Defender )
Dispatcher:ClearDefenderTaskTarget( AIGroup )
end end
--- @param #AI_A2A_DISPATCHER self --- @param #AI_A2A_DISPATCHER self
function Fsm:onafterHome( Defender, From, Event, To, Action ) function Fsm:onafterHome( Defender, From, Event, To, Action )
self:F({"CAP Home"}) self:F({"CAP Home", Defender:GetName()})
self:GetParent(self).onafterHome( self, Defender, From, Event, To ) self:GetParent(self).onafterHome( self, Defender, From, Event, To )
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
local AIGroup = self:GetControllable() local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
local Squadron = Dispatcher:GetSquadronFromDefender( AIGroup )
if Action and Action == "Destroy" then if Action and Action == "Destroy" then
Dispatcher:RemoveDefenderFromSquadron( Squadron, AIGroup ) Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
AIGroup:Destroy() Defender:Destroy()
end end
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
Dispatcher:RemoveDefenderFromSquadron( Squadron, AIGroup ) Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
AIGroup:Destroy() Defender:Destroy()
end end
end end
@ -2703,45 +2701,42 @@ do -- AI_A2A_DISPATCHER
function Fsm:onafterRTB( Defender, From, Event, To ) function Fsm:onafterRTB( Defender, From, Event, To )
self:F({"GCI RTB"}) self:F({"GCI RTB", Defender:GetName()})
self:GetParent(self).onafterRTB( self, Defender, From, Event, To ) self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
local AIGroup = self:GetControllable() Dispatcher:ClearDefenderTaskTarget( Defender )
Dispatcher:ClearDefenderTaskTarget( AIGroup )
end end
--- @param #AI_A2A_DISPATCHER self --- @param #AI_A2A_DISPATCHER self
function Fsm:onafterLostControl( Defender, From, Event, To ) function Fsm:onafterLostControl( Defender, From, Event, To )
self:F({"GCI Home"}) self:F({"GCI LostControl", Defender:GetName()})
self:GetParent(self).onafterHome( self, Defender, From, Event, To ) self:GetParent(self).onafterHome( self, Defender, From, Event, To )
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER local Dispatcher = Fsm:GetDispatcher() -- #AI_A2A_DISPATCHER
local AIGroup = self:GetControllable() -- Wrapper.Group#GROUP local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
local Squadron = Dispatcher:GetSquadronFromDefender( AIGroup ) if Defender:IsAboveRunway() then
if AIGroup:IsAboveRunway() then Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
Dispatcher:RemoveDefenderFromSquadron( Squadron, AIGroup ) Defender:Destroy()
AIGroup:Destroy()
end end
end end
--- @param #AI_A2A_DISPATCHER self --- @param #AI_A2A_DISPATCHER self
function Fsm:onafterHome( Defender, From, Event, To, Action ) function Fsm:onafterHome( Defender, From, Event, To, Action )
self:F({"GCI Home"}) self:F({"GCI Home", Defender:GetName()})
self:GetParent(self).onafterHome( self, Defender, From, Event, To ) self:GetParent(self).onafterHome( self, Defender, From, Event, To )
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
local AIGroup = self:GetControllable() local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
local Squadron = Dispatcher:GetSquadronFromDefender( AIGroup )
if Action and Action == "Destroy" then if Action and Action == "Destroy" then
Dispatcher:RemoveDefenderFromSquadron( Squadron, AIGroup ) Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
AIGroup:Destroy() Defender:Destroy()
end end
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
Dispatcher:RemoveDefenderFromSquadron( Squadron, AIGroup ) Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
AIGroup:Destroy() Defender:Destroy()
end end
end end
end -- if DefenderGCI then end -- if DefenderGCI then