mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Final updates
This commit is contained in:
parent
b9c85d4cb7
commit
1206c51fe1
@ -1,10 +1,9 @@
|
|||||||
--- Single-Player:Yes / Mulit-Player:Yes / AI:Yes / Human:No / Types:All -- AI Balancing will replace in multi player missions
|
--- Single-Player:**No** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**All** -- **AI Balancing will replace in multi player missions
|
||||||
-- non-occupied human slots with AI groups, in order to provide an engaging simulation environment,
|
-- non-occupied human slots with AI groups, in order to provide an engaging simulation environment,
|
||||||
-- even when there are hardly any players in the mission.
|
-- even when there are hardly any players in the mission.**
|
||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -73,6 +72,8 @@
|
|||||||
--
|
--
|
||||||
-- Hereby the change log:
|
-- Hereby the change log:
|
||||||
--
|
--
|
||||||
|
-- 2017-01-17: There is still a problem with AI being destroyed, but not respawned. Need to check further upon that.
|
||||||
|
--
|
||||||
-- 2017-01-08: AI_BALANCER:**InitSpawnInterval( Earliest, Latest )** added.
|
-- 2017-01-08: AI_BALANCER:**InitSpawnInterval( Earliest, Latest )** added.
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
@ -82,7 +83,6 @@
|
|||||||
-- ### Contributions:
|
-- ### Contributions:
|
||||||
--
|
--
|
||||||
-- * **[Dutch_Baron](https://forums.eagle.ru/member.php?u=112075)**: Working together with James has resulted in the creation of the AI_BALANCER class. James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)
|
-- * **[Dutch_Baron](https://forums.eagle.ru/member.php?u=112075)**: Working together with James has resulted in the creation of the AI_BALANCER class. James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)
|
||||||
--
|
|
||||||
-- * **SNAFU**: Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. None of the script code has been used however within the new AI_BALANCER moose class.
|
-- * **SNAFU**: Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. None of the script code has been used however within the new AI_BALANCER moose class.
|
||||||
--
|
--
|
||||||
-- ### Authors:
|
-- ### Authors:
|
||||||
@ -231,16 +231,15 @@ end
|
|||||||
--- @param #AI_BALANCER self
|
--- @param #AI_BALANCER self
|
||||||
function AI_BALANCER:onenterMonitoring( SetGroup )
|
function AI_BALANCER:onenterMonitoring( SetGroup )
|
||||||
|
|
||||||
self:E( { self.SetClient:Count() } )
|
self:T2( { self.SetClient:Count() } )
|
||||||
self.SetClient:Flush()
|
--self.SetClient:Flush()
|
||||||
|
|
||||||
self.SetClient:ForEachClient(
|
self.SetClient:ForEachClient(
|
||||||
--- @param Wrapper.Client#CLIENT Client
|
--- @param Wrapper.Client#CLIENT Client
|
||||||
function( Client )
|
function( Client )
|
||||||
self:E(Client.ClientName)
|
self:T3(Client.ClientName)
|
||||||
|
|
||||||
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
|
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
|
||||||
self:E({Client:IsAlive()})
|
|
||||||
if Client:IsAlive() then
|
if Client:IsAlive() then
|
||||||
|
|
||||||
if AIGroup and AIGroup:IsAlive() == true then
|
if AIGroup and AIGroup:IsAlive() == true then
|
||||||
@ -255,16 +254,16 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
|
|||||||
local PlayerInRange = { Value = false }
|
local PlayerInRange = { Value = false }
|
||||||
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
|
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
|
||||||
|
|
||||||
self:E( RangeZone )
|
self:T2( RangeZone )
|
||||||
|
|
||||||
_DATABASE:ForEachPlayer(
|
_DATABASE:ForEachPlayer(
|
||||||
--- @param Wrapper.Unit#UNIT RangeTestUnit
|
--- @param Wrapper.Unit#UNIT RangeTestUnit
|
||||||
function( RangeTestUnit, RangeZone, AIGroup, PlayerInRange )
|
function( RangeTestUnit, RangeZone, AIGroup, PlayerInRange )
|
||||||
self:E( { PlayerInRange, RangeTestUnit.UnitName, RangeZone.ZoneName } )
|
self:T2( { PlayerInRange, RangeTestUnit.UnitName, RangeZone.ZoneName } )
|
||||||
if RangeTestUnit:IsInZone( RangeZone ) == true then
|
if RangeTestUnit:IsInZone( RangeZone ) == true then
|
||||||
self:E( "in zone" )
|
self:T2( "in zone" )
|
||||||
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
|
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
|
||||||
self:E( "in range" )
|
self:T2( "in range" )
|
||||||
PlayerInRange.Value = true
|
PlayerInRange.Value = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -285,7 +284,7 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
if not AIGroup or not AIGroup:IsAlive() == true then
|
if not AIGroup or not AIGroup:IsAlive() == true then
|
||||||
self:E( "Client " .. Client.UnitName .. " not alive." )
|
self:T( "Client " .. Client.UnitName .. " not alive." )
|
||||||
if not self.SpawnQueue[Client.UnitName] then
|
if not self.SpawnQueue[Client.UnitName] then
|
||||||
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
|
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
|
||||||
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )
|
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -345,6 +344,15 @@ function AI_CAP_ZONE:onafterStart( Controllable, From, Event, To )
|
|||||||
self:EventOnDead( self.OnDead )
|
self:EventOnDead( self.OnDead )
|
||||||
|
|
||||||
Controllable:OptionROEOpenFire()
|
Controllable:OptionROEOpenFire()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -344,6 +343,15 @@ function AI_CAS_ZONE:onafterStart( Controllable, From, Event, To )
|
|||||||
|
|
||||||
Controllable:OptionROEHoldFire()
|
Controllable:OptionROEHoldFire()
|
||||||
Controllable:OptionROTVertical()
|
Controllable:OptionROTVertical()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -106,6 +105,17 @@
|
|||||||
--
|
--
|
||||||
-- ====
|
-- ====
|
||||||
--
|
--
|
||||||
|
-- # **OPEN ISSUES**
|
||||||
|
--
|
||||||
|
-- 2017-01-17: When Spawned AI is located at an airbase, it will be routed first back to the airbase after take-off.
|
||||||
|
--
|
||||||
|
-- 2016-01-17:
|
||||||
|
-- -- Fixed problem with AI returning to base too early and unexpected.
|
||||||
|
-- -- ReSpawning of AI will reset the AI_PATROL and derived classes.
|
||||||
|
-- -- Checked the correct workings of SCHEDULER, and it DOES work correctly.
|
||||||
|
--
|
||||||
|
-- ====
|
||||||
|
--
|
||||||
-- # **API CHANGE HISTORY**
|
-- # **API CHANGE HISTORY**
|
||||||
--
|
--
|
||||||
-- The underlying change log documents the API changes. Please read this carefully. The following notation is used:
|
-- The underlying change log documents the API changes. Please read this carefully. The following notation is used:
|
||||||
@ -115,7 +125,9 @@
|
|||||||
--
|
--
|
||||||
-- Hereby the change log:
|
-- Hereby the change log:
|
||||||
--
|
--
|
||||||
-- 2016-01-15: Complete revision. AI_PATROL_ZONE is the base class for other AI_PATROL like classes.
|
-- 2017-01-17: Rename of class: **AI\_PATROL\_ZONE** is the new name for the old _AI\_PATROLZONE_.
|
||||||
|
--
|
||||||
|
-- 2017-01-15: Complete revision. AI_PATROL_ZONE is the base class for other AI_PATROL like classes.
|
||||||
--
|
--
|
||||||
-- 2016-09-01: Initial class and API.
|
-- 2016-09-01: Initial class and API.
|
||||||
--
|
--
|
||||||
@ -178,12 +190,12 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
self.CheckStatus = true
|
self.CheckStatus = true
|
||||||
|
|
||||||
self:ManageFuel( .2, 60 )
|
self:ManageFuel( .2, 60 )
|
||||||
self:ManageDamage( 10 )
|
self:ManageDamage( 1 )
|
||||||
|
|
||||||
self:SetDetectionInterval( 30 )
|
self:SetDetectionInterval( 30 )
|
||||||
|
|
||||||
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
|
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
|
||||||
|
|
||||||
self:SetStartState( "None" )
|
self:SetStartState( "None" )
|
||||||
|
|
||||||
self:AddTransition( "None", "Start", "Patrolling" )
|
self:AddTransition( "None", "Start", "Patrolling" )
|
||||||
@ -343,7 +355,7 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
-- @param #AI_PATROL_ZONE self
|
-- @param #AI_PATROL_ZONE self
|
||||||
-- @param #number Delay The delay in seconds.
|
-- @param #number Delay The delay in seconds.
|
||||||
|
|
||||||
self:AddTransition( "*", "RTB", "RTB" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
self:AddTransition( "*", "RTB", "Returning" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
||||||
|
|
||||||
--- OnBefore Transition Handler for Event RTB.
|
--- OnBefore Transition Handler for Event RTB.
|
||||||
-- @function [parent=#AI_PATROL_ZONE] OnBeforeRTB
|
-- @function [parent=#AI_PATROL_ZONE] OnBeforeRTB
|
||||||
@ -387,6 +399,8 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
-- @param #string From The From State string.
|
-- @param #string From The From State string.
|
||||||
-- @param #string Event The Event string.
|
-- @param #string Event The Event string.
|
||||||
-- @param #string To The To State string.
|
-- @param #string To The To State string.
|
||||||
|
|
||||||
|
self:AddTransition( "*", "Reset", "Patrolling" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -530,13 +544,21 @@ end
|
|||||||
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
|
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
|
||||||
self:F2()
|
self:F2()
|
||||||
|
|
||||||
self:Route() -- Route to the patrol point.
|
self:__Route( 5 ) -- Route to the patrol point. The asynchronous trigger is important, because a spawned group and units takes at least one second to come live.
|
||||||
self:__Status( 30 ) -- Check status status every 30 seconds.
|
self:__Status( 30 ) -- Check status status every 30 seconds.
|
||||||
self:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
|
self:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
|
||||||
|
|
||||||
Controllable:OptionROEHoldFire()
|
Controllable:OptionROEHoldFire()
|
||||||
Controllable:OptionROTVertical()
|
Controllable:OptionROTVertical()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -554,7 +576,7 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
|
|||||||
local Detected = false
|
local Detected = false
|
||||||
|
|
||||||
local DetectedTargets = Controllable:GetDetectedTargets()
|
local DetectedTargets = Controllable:GetDetectedTargets()
|
||||||
for TargetID, Target in pairs( DetectedTargets ) do
|
for TargetID, Target in pairs( DetectedTargets or {} ) do
|
||||||
local TargetObject = Target.object
|
local TargetObject = Target.object
|
||||||
self:T( TargetObject )
|
self:T( TargetObject )
|
||||||
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
|
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
|
||||||
@ -583,11 +605,12 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
|
|||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
function _NewPatrolRoute( AIControllable )
|
-- This statis method is called from the route path within the last task at the last waaypoint of the Controllable.
|
||||||
|
-- Note that this method is required, as triggers the next route when patrolling for the Controllable.
|
||||||
|
function AI_PATROL_ZONE:_NewPatrolRoute( AIControllable )
|
||||||
|
|
||||||
AIControllable:T( "NewPatrolRoute" )
|
|
||||||
local PatrolZone = AIControllable:GetState( AIControllable, "PatrolZone" ) -- PatrolCore.Zone#AI_PATROL_ZONE
|
local PatrolZone = AIControllable:GetState( AIControllable, "PatrolZone" ) -- PatrolCore.Zone#AI_PATROL_ZONE
|
||||||
PatrolZone:Route()
|
PatrolZone:__Route( 1 )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -608,55 +631,51 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
|
|
||||||
if self.Controllable:IsAlive() then
|
if self.Controllable:IsAlive() then
|
||||||
--- Determine if the AIControllable is within the PatrolZone.
|
-- Determine if the AIControllable is within the PatrolZone.
|
||||||
-- If not, make a waypoint within the to that the AIControllable will fly at maximum speed to that point.
|
-- If not, make a waypoint within the to that the AIControllable will fly at maximum speed to that point.
|
||||||
|
|
||||||
local PatrolRoute = {}
|
local PatrolRoute = {}
|
||||||
|
|
||||||
--- Calculate the current route point.
|
-- Calculate the current route point of the controllable as the start point of the route.
|
||||||
local CurrentVec2 = self.Controllable:GetVec2()
|
-- However, when the controllable is not in the air,
|
||||||
|
-- the controllable current waypoint is probably the airbase...
|
||||||
|
-- Thus, if we would take the current waypoint as the startpoint, upon take-off, the controllable flies
|
||||||
|
-- immediately back to the airbase, and this is not correct.
|
||||||
|
-- Therefore, when on a runway, get as the current route point a random point within the PatrolZone.
|
||||||
|
-- This will make the plane fly immediately to the patrol zone.
|
||||||
|
|
||||||
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
if self.Controllable:InAir() == false then
|
||||||
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
self:E( "Not in the air, finding route path within PatrolZone" )
|
||||||
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
local CurrentVec2 = self.Controllable:GetVec2()
|
||||||
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
||||||
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
||||||
POINT_VEC3.RoutePointAltType.BARO,
|
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
||||||
POINT_VEC3.RoutePointType.TurningPoint,
|
|
||||||
POINT_VEC3.RoutePointAction.TurningPoint,
|
|
||||||
ToPatrolZoneSpeed,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
|
||||||
|
|
||||||
self:T2( PatrolRoute )
|
|
||||||
|
|
||||||
if self.Controllable:IsNotInZone( self.PatrolZone ) then
|
|
||||||
--- Find a random 2D point in PatrolZone.
|
|
||||||
local ToPatrolZoneVec2 = self.PatrolZone:GetRandomVec2()
|
|
||||||
self:T2( ToPatrolZoneVec2 )
|
|
||||||
|
|
||||||
--- Define Speed and Altitude.
|
|
||||||
local ToPatrolZoneAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude )
|
|
||||||
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
||||||
self:T2( ToPatrolZoneSpeed )
|
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
||||||
|
POINT_VEC3.RoutePointAltType.BARO,
|
||||||
--- Obtain a 3D @{Point} from the 2D point + altitude.
|
POINT_VEC3.RoutePointType.TakeOffParking,
|
||||||
local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y )
|
POINT_VEC3.RoutePointAction.FromParkingArea,
|
||||||
|
ToPatrolZoneSpeed,
|
||||||
--- Create a route point of type air.
|
true
|
||||||
local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir(
|
)
|
||||||
POINT_VEC3.RoutePointAltType.BARO,
|
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
||||||
POINT_VEC3.RoutePointType.TurningPoint,
|
else
|
||||||
POINT_VEC3.RoutePointAction.TurningPoint,
|
self:E( "In the air, finding route path within PatrolZone" )
|
||||||
ToPatrolZoneSpeed,
|
local CurrentVec2 = self.Controllable:GetVec2()
|
||||||
true
|
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
||||||
)
|
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
||||||
|
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
||||||
PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint
|
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
||||||
|
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
||||||
end
|
POINT_VEC3.RoutePointAltType.BARO,
|
||||||
|
POINT_VEC3.RoutePointType.TurningPoint,
|
||||||
|
POINT_VEC3.RoutePointAction.TurningPoint,
|
||||||
|
ToPatrolZoneSpeed,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- Define a random point in the @{Zone}. The AI will fly to that point within the zone.
|
--- Define a random point in the @{Zone}. The AI will fly to that point within the zone.
|
||||||
|
|
||||||
@ -683,7 +702,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
|
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
|
||||||
|
|
||||||
ToTargetPointVec3:SmokeRed()
|
--ToTargetPointVec3:SmokeRed()
|
||||||
|
|
||||||
PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint
|
PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint
|
||||||
|
|
||||||
@ -692,7 +711,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
--- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the AIControllable in a temporary variable ...
|
--- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the AIControllable in a temporary variable ...
|
||||||
self.Controllable:SetState( self.Controllable, "PatrolZone", self )
|
self.Controllable:SetState( self.Controllable, "PatrolZone", self )
|
||||||
self.Controllable:WayPointFunction( #PatrolRoute, 1, "_NewPatrolRoute" )
|
self.Controllable:WayPointFunction( #PatrolRoute, 1, "AI_PATROL_ZONE:_NewPatrolRoute" )
|
||||||
|
|
||||||
--- NOW ROUTE THE GROUP!
|
--- NOW ROUTE THE GROUP!
|
||||||
self.Controllable:WayPointExecute( 1, 2 )
|
self.Controllable:WayPointExecute( 1, 2 )
|
||||||
@ -716,6 +735,7 @@ function AI_PATROL_ZONE:onafterStatus()
|
|||||||
|
|
||||||
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
||||||
if Fuel < self.PatrolFuelTresholdPercentage then
|
if Fuel < self.PatrolFuelTresholdPercentage then
|
||||||
|
self:E( self.Controllable:GetName() .. " is out of fuel:" .. Fuel .. ", RTB!" )
|
||||||
local OldAIControllable = self.Controllable
|
local OldAIControllable = self.Controllable
|
||||||
local AIControllableTemplate = self.Controllable:GetTemplate()
|
local AIControllableTemplate = self.Controllable:GetTemplate()
|
||||||
|
|
||||||
@ -730,11 +750,12 @@ function AI_PATROL_ZONE:onafterStatus()
|
|||||||
-- TODO: Check GROUP damage function.
|
-- TODO: Check GROUP damage function.
|
||||||
local Damage = self.Controllable:GetLife()
|
local Damage = self.Controllable:GetLife()
|
||||||
if Damage <= self.PatrolDamageTreshold then
|
if Damage <= self.PatrolDamageTreshold then
|
||||||
|
self:E( self.Controllable:GetName() .. " is damaged:" .. Damage .. ", RTB!" )
|
||||||
RTB = true
|
RTB = true
|
||||||
end
|
end
|
||||||
|
|
||||||
if RTB == true then
|
if RTB == true then
|
||||||
self:__RTB( 1 )
|
self:RTB()
|
||||||
else
|
else
|
||||||
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
|
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
|
||||||
end
|
end
|
||||||
@ -777,4 +798,4 @@ function AI_PATROL_ZONE:onafterRTB()
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -545,7 +545,11 @@ do -- FSM
|
|||||||
local from = self.current
|
local from = self.current
|
||||||
local params = { from, EventName, to, ... }
|
local params = { from, EventName, to, ... }
|
||||||
|
|
||||||
self:E( "FSM Transition:" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
if self.Controllable then
|
||||||
|
self:E( "FSM Transition for " .. self.Controllable.ControllableName .. " :" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
||||||
|
else
|
||||||
|
self:E( "FSM Transition:" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
||||||
|
end
|
||||||
|
|
||||||
if self:_call_handler("onbefore" .. EventName, params) == false
|
if self:_call_handler("onbefore" .. EventName, params) == false
|
||||||
or self:_call_handler("OnBefore" .. EventName, params) == false
|
or self:_call_handler("OnBefore" .. EventName, params) == false
|
||||||
@ -1032,7 +1036,7 @@ do -- FSM_SET
|
|||||||
|
|
||||||
function FSM_SET:_call_handler( handler, params )
|
function FSM_SET:_call_handler( handler, params )
|
||||||
if self[handler] then
|
if self[handler] then
|
||||||
self:E( "Calling " .. handler )
|
self:T( "Calling " .. handler )
|
||||||
return self[handler]( self, self.Set, unpack( params ) )
|
return self[handler]( self, self.Set, unpack( params ) )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -74,9 +74,11 @@ POINT_VEC3 = {
|
|||||||
BARO = "BARO",
|
BARO = "BARO",
|
||||||
},
|
},
|
||||||
RoutePointType = {
|
RoutePointType = {
|
||||||
|
TakeOffParking = "TakeOffParking",
|
||||||
TurningPoint = "Turning Point",
|
TurningPoint = "Turning Point",
|
||||||
},
|
},
|
||||||
RoutePointAction = {
|
RoutePointAction = {
|
||||||
|
FromParkingArea = "From Parking Area",
|
||||||
TurningPoint = "Turning Point",
|
TurningPoint = "Turning Point",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -99,10 +101,12 @@ do -- POINT_VEC3
|
|||||||
|
|
||||||
--- RoutePoint Types
|
--- RoutePoint Types
|
||||||
-- @type POINT_VEC3.RoutePointType
|
-- @type POINT_VEC3.RoutePointType
|
||||||
|
-- @field TakeOffParking "TakeOffParking"
|
||||||
-- @field TurningPoint "Turning Point"
|
-- @field TurningPoint "Turning Point"
|
||||||
|
|
||||||
--- RoutePoint Actions
|
--- RoutePoint Actions
|
||||||
-- @type POINT_VEC3.RoutePointAction
|
-- @type POINT_VEC3.RoutePointAction
|
||||||
|
-- @field FromParkingArea "From Parking Area"
|
||||||
-- @field TurningPoint "Turning Point"
|
-- @field TurningPoint "Turning Point"
|
||||||
|
|
||||||
-- Constructor.
|
-- Constructor.
|
||||||
|
|||||||
@ -602,11 +602,14 @@ function SPAWN:ReSpawn( SpawnIndex )
|
|||||||
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
|
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
|
||||||
if SpawnGroup and WayPoints then
|
if SpawnGroup and WayPoints then
|
||||||
-- If there were WayPoints set, then Re-Execute those WayPoints!
|
-- If there were WayPoints set, then Re-Execute those WayPoints!
|
||||||
self:E( WayPoints )
|
|
||||||
SpawnGroup:WayPointInitialize( WayPoints )
|
SpawnGroup:WayPointInitialize( WayPoints )
|
||||||
SpawnGroup:WayPointExecute( 1, 5 )
|
SpawnGroup:WayPointExecute( 1, 5 )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if SpawnGroup.ReSpawnFunction then
|
||||||
|
SpawnGroup:ReSpawnFunction()
|
||||||
|
end
|
||||||
|
|
||||||
return SpawnGroup
|
return SpawnGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -277,7 +277,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime )
|
|||||||
if DCSControllable then
|
if DCSControllable then
|
||||||
|
|
||||||
local Controller = self:_GetController()
|
local Controller = self:_GetController()
|
||||||
self:E(Controller)
|
self:T3( Controller )
|
||||||
|
|
||||||
-- When a controllable SPAWNs, it takes about a second to get the controllable in the simulator. Setting tasks to unspawned controllables provides unexpected results.
|
-- When a controllable SPAWNs, it takes about a second to get the controllable in the simulator. Setting tasks to unspawned controllables provides unexpected results.
|
||||||
-- Therefore we schedule the functions to set the mission and options for the Controllable.
|
-- Therefore we schedule the functions to set the mission and options for the Controllable.
|
||||||
@ -2275,6 +2275,4 @@ function CONTROLLABLE:WayPointExecute( WayPoint, WaitTime )
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Message APIs
|
-- Message APIs
|
||||||
|
|
||||||
|
|
||||||
@ -879,4 +879,30 @@ function GROUP:CalculateThreatLevelA2G()
|
|||||||
return MaxThreatLevelA2G
|
return MaxThreatLevelA2G
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Returns true if the first unit of the GROUP is in the air.
|
||||||
|
-- @param Wrapper.Group#GROUP self
|
||||||
|
-- @return #boolean true if in the first unit of the group is in the air.
|
||||||
|
-- @return #nil The GROUP is not existing or not alive.
|
||||||
|
function GROUP:InAir()
|
||||||
|
self:F2( self.GroupName )
|
||||||
|
|
||||||
|
local DCSGroup = self:GetDCSObject()
|
||||||
|
|
||||||
|
if DCSGroup then
|
||||||
|
local DCSUnit = DCSGroup:getUnit(1)
|
||||||
|
if DCSUnit then
|
||||||
|
local GroupInAir = DCSGroup:getUnit(1):inAir()
|
||||||
|
self:T3( GroupInAir )
|
||||||
|
return GroupInAir
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function GROUP:OnReSpawn( ReSpawnFunction )
|
||||||
|
|
||||||
|
self.ReSpawnFunction = ReSpawnFunction
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -241,20 +241,13 @@ end
|
|||||||
|
|
||||||
|
|
||||||
--- Returns true if the POSITIONABLE is in the air.
|
--- Returns true if the POSITIONABLE is in the air.
|
||||||
|
-- Polymorphic, is overridden in GROUP and UNIT.
|
||||||
-- @param Wrapper.Positionable#POSITIONABLE self
|
-- @param Wrapper.Positionable#POSITIONABLE self
|
||||||
-- @return #boolean true if in the air.
|
-- @return #boolean true if in the air.
|
||||||
-- @return #nil The POSITIONABLE is not existing or alive.
|
-- @return #nil The POSITIONABLE is not existing or alive.
|
||||||
function POSITIONABLE:InAir()
|
function POSITIONABLE:InAir()
|
||||||
self:F2( self.PositionableName )
|
self:F2( self.PositionableName )
|
||||||
|
|
||||||
local DCSPositionable = self:GetDCSObject()
|
|
||||||
|
|
||||||
if DCSPositionable then
|
|
||||||
local PositionableInAir = DCSPositionable:inAir()
|
|
||||||
self:T3( PositionableInAir )
|
|
||||||
return PositionableInAir
|
|
||||||
end
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -818,3 +818,21 @@ function UNIT:IsShip()
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Returns true if the UNIT is in the air.
|
||||||
|
-- @param Wrapper.Positionable#UNIT self
|
||||||
|
-- @return #boolean true if in the air.
|
||||||
|
-- @return #nil The UNIT is not existing or alive.
|
||||||
|
function UNIT:InAir()
|
||||||
|
self:F2( self.UnitName )
|
||||||
|
|
||||||
|
local DCSUnit = self:GetDCSObject()
|
||||||
|
|
||||||
|
if DCSUnit then
|
||||||
|
local UnitInAir = DCSUnit:inAir()
|
||||||
|
self:T3( UnitInAir )
|
||||||
|
return UnitInAir
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
|
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
|
||||||
env.info( 'Moose Generation Timestamp: 20170116_1223' )
|
env.info( 'Moose Generation Timestamp: 20170117_1202' )
|
||||||
local base = _G
|
local base = _G
|
||||||
|
|
||||||
Include = {}
|
Include = {}
|
||||||
@ -9795,9 +9795,11 @@ POINT_VEC3 = {
|
|||||||
BARO = "BARO",
|
BARO = "BARO",
|
||||||
},
|
},
|
||||||
RoutePointType = {
|
RoutePointType = {
|
||||||
|
TakeOffParking = "TakeOffParking",
|
||||||
TurningPoint = "Turning Point",
|
TurningPoint = "Turning Point",
|
||||||
},
|
},
|
||||||
RoutePointAction = {
|
RoutePointAction = {
|
||||||
|
FromParkingArea = "From Parking Area",
|
||||||
TurningPoint = "Turning Point",
|
TurningPoint = "Turning Point",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -9820,10 +9822,12 @@ do -- POINT_VEC3
|
|||||||
|
|
||||||
--- RoutePoint Types
|
--- RoutePoint Types
|
||||||
-- @type POINT_VEC3.RoutePointType
|
-- @type POINT_VEC3.RoutePointType
|
||||||
|
-- @field TakeOffParking "TakeOffParking"
|
||||||
-- @field TurningPoint "Turning Point"
|
-- @field TurningPoint "Turning Point"
|
||||||
|
|
||||||
--- RoutePoint Actions
|
--- RoutePoint Actions
|
||||||
-- @type POINT_VEC3.RoutePointAction
|
-- @type POINT_VEC3.RoutePointAction
|
||||||
|
-- @field FromParkingArea "From Parking Area"
|
||||||
-- @field TurningPoint "Turning Point"
|
-- @field TurningPoint "Turning Point"
|
||||||
|
|
||||||
-- Constructor.
|
-- Constructor.
|
||||||
@ -11255,7 +11259,11 @@ do -- FSM
|
|||||||
local from = self.current
|
local from = self.current
|
||||||
local params = { from, EventName, to, ... }
|
local params = { from, EventName, to, ... }
|
||||||
|
|
||||||
self:E( "FSM Transition:" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
if self.Controllable then
|
||||||
|
self:E( "FSM Transition for " .. self.Controllable.ControllableName .. " :" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
||||||
|
else
|
||||||
|
self:E( "FSM Transition:" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
||||||
|
end
|
||||||
|
|
||||||
if self:_call_handler("onbefore" .. EventName, params) == false
|
if self:_call_handler("onbefore" .. EventName, params) == false
|
||||||
or self:_call_handler("OnBefore" .. EventName, params) == false
|
or self:_call_handler("OnBefore" .. EventName, params) == false
|
||||||
@ -11742,7 +11750,7 @@ do -- FSM_SET
|
|||||||
|
|
||||||
function FSM_SET:_call_handler( handler, params )
|
function FSM_SET:_call_handler( handler, params )
|
||||||
if self[handler] then
|
if self[handler] then
|
||||||
self:E( "Calling " .. handler )
|
self:T( "Calling " .. handler )
|
||||||
return self[handler]( self, self.Set, unpack( params ) )
|
return self[handler]( self, self.Set, unpack( params ) )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -12306,20 +12314,13 @@ end
|
|||||||
|
|
||||||
|
|
||||||
--- Returns true if the POSITIONABLE is in the air.
|
--- Returns true if the POSITIONABLE is in the air.
|
||||||
|
-- Polymorphic, is overridden in GROUP and UNIT.
|
||||||
-- @param Wrapper.Positionable#POSITIONABLE self
|
-- @param Wrapper.Positionable#POSITIONABLE self
|
||||||
-- @return #boolean true if in the air.
|
-- @return #boolean true if in the air.
|
||||||
-- @return #nil The POSITIONABLE is not existing or alive.
|
-- @return #nil The POSITIONABLE is not existing or alive.
|
||||||
function POSITIONABLE:InAir()
|
function POSITIONABLE:InAir()
|
||||||
self:F2( self.PositionableName )
|
self:F2( self.PositionableName )
|
||||||
|
|
||||||
local DCSPositionable = self:GetDCSObject()
|
|
||||||
|
|
||||||
if DCSPositionable then
|
|
||||||
local PositionableInAir = DCSPositionable:inAir()
|
|
||||||
self:T3( PositionableInAir )
|
|
||||||
return PositionableInAir
|
|
||||||
end
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -12786,7 +12787,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime )
|
|||||||
if DCSControllable then
|
if DCSControllable then
|
||||||
|
|
||||||
local Controller = self:_GetController()
|
local Controller = self:_GetController()
|
||||||
self:E(Controller)
|
self:T3( Controller )
|
||||||
|
|
||||||
-- When a controllable SPAWNs, it takes about a second to get the controllable in the simulator. Setting tasks to unspawned controllables provides unexpected results.
|
-- When a controllable SPAWNs, it takes about a second to get the controllable in the simulator. Setting tasks to unspawned controllables provides unexpected results.
|
||||||
-- Therefore we schedule the functions to set the mission and options for the Controllable.
|
-- Therefore we schedule the functions to set the mission and options for the Controllable.
|
||||||
@ -14784,10 +14785,7 @@ function CONTROLLABLE:WayPointExecute( WayPoint, WaitTime )
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Message APIs
|
-- Message APIs--- This module contains the GROUP class.
|
||||||
|
|
||||||
|
|
||||||
--- This module contains the GROUP class.
|
|
||||||
--
|
--
|
||||||
-- 1) @{Wrapper.Group#GROUP} class, extends @{Wrapper.Controllable#CONTROLLABLE}
|
-- 1) @{Wrapper.Group#GROUP} class, extends @{Wrapper.Controllable#CONTROLLABLE}
|
||||||
-- =============================================================
|
-- =============================================================
|
||||||
@ -15668,6 +15666,32 @@ function GROUP:CalculateThreatLevelA2G()
|
|||||||
return MaxThreatLevelA2G
|
return MaxThreatLevelA2G
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Returns true if the first unit of the GROUP is in the air.
|
||||||
|
-- @param Wrapper.Group#GROUP self
|
||||||
|
-- @return #boolean true if in the first unit of the group is in the air.
|
||||||
|
-- @return #nil The GROUP is not existing or not alive.
|
||||||
|
function GROUP:InAir()
|
||||||
|
self:F2( self.GroupName )
|
||||||
|
|
||||||
|
local DCSGroup = self:GetDCSObject()
|
||||||
|
|
||||||
|
if DCSGroup then
|
||||||
|
local DCSUnit = DCSGroup:getUnit(1)
|
||||||
|
if DCSUnit then
|
||||||
|
local GroupInAir = DCSGroup:getUnit(1):inAir()
|
||||||
|
self:T3( GroupInAir )
|
||||||
|
return GroupInAir
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function GROUP:OnReSpawn( ReSpawnFunction )
|
||||||
|
|
||||||
|
self.ReSpawnFunction = ReSpawnFunction
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- This module contains the UNIT class.
|
--- This module contains the UNIT class.
|
||||||
--
|
--
|
||||||
@ -16489,6 +16513,24 @@ function UNIT:IsShip()
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Returns true if the UNIT is in the air.
|
||||||
|
-- @param Wrapper.Positionable#UNIT self
|
||||||
|
-- @return #boolean true if in the air.
|
||||||
|
-- @return #nil The UNIT is not existing or alive.
|
||||||
|
function UNIT:InAir()
|
||||||
|
self:F2( self.UnitName )
|
||||||
|
|
||||||
|
local DCSUnit = self:GetDCSObject()
|
||||||
|
|
||||||
|
if DCSUnit then
|
||||||
|
local UnitInAir = DCSUnit:inAir()
|
||||||
|
self:T3( UnitInAir )
|
||||||
|
return UnitInAir
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
--- This module contains the CLIENT class.
|
--- This module contains the CLIENT class.
|
||||||
--
|
--
|
||||||
-- 1) @{Wrapper.Client#CLIENT} class, extends @{Wrapper.Unit#UNIT}
|
-- 1) @{Wrapper.Client#CLIENT} class, extends @{Wrapper.Unit#UNIT}
|
||||||
@ -18902,11 +18944,14 @@ function SPAWN:ReSpawn( SpawnIndex )
|
|||||||
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
|
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
|
||||||
if SpawnGroup and WayPoints then
|
if SpawnGroup and WayPoints then
|
||||||
-- If there were WayPoints set, then Re-Execute those WayPoints!
|
-- If there were WayPoints set, then Re-Execute those WayPoints!
|
||||||
self:E( WayPoints )
|
|
||||||
SpawnGroup:WayPointInitialize( WayPoints )
|
SpawnGroup:WayPointInitialize( WayPoints )
|
||||||
SpawnGroup:WayPointExecute( 1, 5 )
|
SpawnGroup:WayPointExecute( 1, 5 )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if SpawnGroup.ReSpawnFunction then
|
||||||
|
SpawnGroup:ReSpawnFunction()
|
||||||
|
end
|
||||||
|
|
||||||
return SpawnGroup
|
return SpawnGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -24307,13 +24352,12 @@ function DETECTION_AREAS:CreateDetectionSets()
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--- Single-Player:Yes / Mulit-Player:Yes / AI:Yes / Human:No / Types:All -- AI Balancing will replace in multi player missions
|
--- Single-Player:**No** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**All** -- **AI Balancing will replace in multi player missions
|
||||||
-- non-occupied human slots with AI groups, in order to provide an engaging simulation environment,
|
-- non-occupied human slots with AI groups, in order to provide an engaging simulation environment,
|
||||||
-- even when there are hardly any players in the mission.
|
-- even when there are hardly any players in the mission.**
|
||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -24382,6 +24426,8 @@ end
|
|||||||
--
|
--
|
||||||
-- Hereby the change log:
|
-- Hereby the change log:
|
||||||
--
|
--
|
||||||
|
-- 2017-01-17: There is still a problem with AI being destroyed, but not respawned. Need to check further upon that.
|
||||||
|
--
|
||||||
-- 2017-01-08: AI_BALANCER:**InitSpawnInterval( Earliest, Latest )** added.
|
-- 2017-01-08: AI_BALANCER:**InitSpawnInterval( Earliest, Latest )** added.
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
@ -24391,7 +24437,6 @@ end
|
|||||||
-- ### Contributions:
|
-- ### Contributions:
|
||||||
--
|
--
|
||||||
-- * **[Dutch_Baron](https://forums.eagle.ru/member.php?u=112075)**: Working together with James has resulted in the creation of the AI_BALANCER class. James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)
|
-- * **[Dutch_Baron](https://forums.eagle.ru/member.php?u=112075)**: Working together with James has resulted in the creation of the AI_BALANCER class. James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)
|
||||||
--
|
|
||||||
-- * **SNAFU**: Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. None of the script code has been used however within the new AI_BALANCER moose class.
|
-- * **SNAFU**: Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. None of the script code has been used however within the new AI_BALANCER moose class.
|
||||||
--
|
--
|
||||||
-- ### Authors:
|
-- ### Authors:
|
||||||
@ -24540,16 +24585,15 @@ end
|
|||||||
--- @param #AI_BALANCER self
|
--- @param #AI_BALANCER self
|
||||||
function AI_BALANCER:onenterMonitoring( SetGroup )
|
function AI_BALANCER:onenterMonitoring( SetGroup )
|
||||||
|
|
||||||
self:E( { self.SetClient:Count() } )
|
self:T2( { self.SetClient:Count() } )
|
||||||
self.SetClient:Flush()
|
--self.SetClient:Flush()
|
||||||
|
|
||||||
self.SetClient:ForEachClient(
|
self.SetClient:ForEachClient(
|
||||||
--- @param Wrapper.Client#CLIENT Client
|
--- @param Wrapper.Client#CLIENT Client
|
||||||
function( Client )
|
function( Client )
|
||||||
self:E(Client.ClientName)
|
self:T3(Client.ClientName)
|
||||||
|
|
||||||
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
|
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
|
||||||
self:E({Client:IsAlive()})
|
|
||||||
if Client:IsAlive() then
|
if Client:IsAlive() then
|
||||||
|
|
||||||
if AIGroup and AIGroup:IsAlive() == true then
|
if AIGroup and AIGroup:IsAlive() == true then
|
||||||
@ -24564,16 +24608,16 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
|
|||||||
local PlayerInRange = { Value = false }
|
local PlayerInRange = { Value = false }
|
||||||
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
|
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
|
||||||
|
|
||||||
self:E( RangeZone )
|
self:T2( RangeZone )
|
||||||
|
|
||||||
_DATABASE:ForEachPlayer(
|
_DATABASE:ForEachPlayer(
|
||||||
--- @param Wrapper.Unit#UNIT RangeTestUnit
|
--- @param Wrapper.Unit#UNIT RangeTestUnit
|
||||||
function( RangeTestUnit, RangeZone, AIGroup, PlayerInRange )
|
function( RangeTestUnit, RangeZone, AIGroup, PlayerInRange )
|
||||||
self:E( { PlayerInRange, RangeTestUnit.UnitName, RangeZone.ZoneName } )
|
self:T2( { PlayerInRange, RangeTestUnit.UnitName, RangeZone.ZoneName } )
|
||||||
if RangeTestUnit:IsInZone( RangeZone ) == true then
|
if RangeTestUnit:IsInZone( RangeZone ) == true then
|
||||||
self:E( "in zone" )
|
self:T2( "in zone" )
|
||||||
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
|
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
|
||||||
self:E( "in range" )
|
self:T2( "in range" )
|
||||||
PlayerInRange.Value = true
|
PlayerInRange.Value = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -24594,7 +24638,7 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
if not AIGroup or not AIGroup:IsAlive() == true then
|
if not AIGroup or not AIGroup:IsAlive() == true then
|
||||||
self:E( "Client " .. Client.UnitName .. " not alive." )
|
self:T( "Client " .. Client.UnitName .. " not alive." )
|
||||||
if not self.SpawnQueue[Client.UnitName] then
|
if not self.SpawnQueue[Client.UnitName] then
|
||||||
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
|
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
|
||||||
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )
|
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )
|
||||||
@ -24616,7 +24660,6 @@ end
|
|||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -24720,6 +24763,17 @@ end
|
|||||||
--
|
--
|
||||||
-- ====
|
-- ====
|
||||||
--
|
--
|
||||||
|
-- # **OPEN ISSUES**
|
||||||
|
--
|
||||||
|
-- 2017-01-17: When Spawned AI is located at an airbase, it will be routed first back to the airbase after take-off.
|
||||||
|
--
|
||||||
|
-- 2016-01-17:
|
||||||
|
-- -- Fixed problem with AI returning to base too early and unexpected.
|
||||||
|
-- -- ReSpawning of AI will reset the AI_PATROL and derived classes.
|
||||||
|
-- -- Checked the correct workings of SCHEDULER, and it DOES work correctly.
|
||||||
|
--
|
||||||
|
-- ====
|
||||||
|
--
|
||||||
-- # **API CHANGE HISTORY**
|
-- # **API CHANGE HISTORY**
|
||||||
--
|
--
|
||||||
-- The underlying change log documents the API changes. Please read this carefully. The following notation is used:
|
-- The underlying change log documents the API changes. Please read this carefully. The following notation is used:
|
||||||
@ -24729,7 +24783,9 @@ end
|
|||||||
--
|
--
|
||||||
-- Hereby the change log:
|
-- Hereby the change log:
|
||||||
--
|
--
|
||||||
-- 2016-01-15: Complete revision. AI_PATROL_ZONE is the base class for other AI_PATROL like classes.
|
-- 2017-01-17: Rename of class: **AI\_PATROL\_ZONE** is the new name for the old _AI\_PATROLZONE_.
|
||||||
|
--
|
||||||
|
-- 2017-01-15: Complete revision. AI_PATROL_ZONE is the base class for other AI_PATROL like classes.
|
||||||
--
|
--
|
||||||
-- 2016-09-01: Initial class and API.
|
-- 2016-09-01: Initial class and API.
|
||||||
--
|
--
|
||||||
@ -24792,12 +24848,12 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
self.CheckStatus = true
|
self.CheckStatus = true
|
||||||
|
|
||||||
self:ManageFuel( .2, 60 )
|
self:ManageFuel( .2, 60 )
|
||||||
self:ManageDamage( 10 )
|
self:ManageDamage( 1 )
|
||||||
|
|
||||||
self:SetDetectionInterval( 30 )
|
self:SetDetectionInterval( 30 )
|
||||||
|
|
||||||
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
|
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
|
||||||
|
|
||||||
self:SetStartState( "None" )
|
self:SetStartState( "None" )
|
||||||
|
|
||||||
self:AddTransition( "None", "Start", "Patrolling" )
|
self:AddTransition( "None", "Start", "Patrolling" )
|
||||||
@ -24957,7 +25013,7 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
-- @param #AI_PATROL_ZONE self
|
-- @param #AI_PATROL_ZONE self
|
||||||
-- @param #number Delay The delay in seconds.
|
-- @param #number Delay The delay in seconds.
|
||||||
|
|
||||||
self:AddTransition( "*", "RTB", "RTB" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
self:AddTransition( "*", "RTB", "Returning" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
||||||
|
|
||||||
--- OnBefore Transition Handler for Event RTB.
|
--- OnBefore Transition Handler for Event RTB.
|
||||||
-- @function [parent=#AI_PATROL_ZONE] OnBeforeRTB
|
-- @function [parent=#AI_PATROL_ZONE] OnBeforeRTB
|
||||||
@ -25001,6 +25057,8 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
-- @param #string From The From State string.
|
-- @param #string From The From State string.
|
||||||
-- @param #string Event The Event string.
|
-- @param #string Event The Event string.
|
||||||
-- @param #string To The To State string.
|
-- @param #string To The To State string.
|
||||||
|
|
||||||
|
self:AddTransition( "*", "Reset", "Patrolling" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -25144,13 +25202,21 @@ end
|
|||||||
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
|
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
|
||||||
self:F2()
|
self:F2()
|
||||||
|
|
||||||
self:Route() -- Route to the patrol point.
|
self:__Route( 5 ) -- Route to the patrol point. The asynchronous trigger is important, because a spawned group and units takes at least one second to come live.
|
||||||
self:__Status( 30 ) -- Check status status every 30 seconds.
|
self:__Status( 30 ) -- Check status status every 30 seconds.
|
||||||
self:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
|
self:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
|
||||||
|
|
||||||
Controllable:OptionROEHoldFire()
|
Controllable:OptionROEHoldFire()
|
||||||
Controllable:OptionROTVertical()
|
Controllable:OptionROTVertical()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -25168,7 +25234,7 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
|
|||||||
local Detected = false
|
local Detected = false
|
||||||
|
|
||||||
local DetectedTargets = Controllable:GetDetectedTargets()
|
local DetectedTargets = Controllable:GetDetectedTargets()
|
||||||
for TargetID, Target in pairs( DetectedTargets ) do
|
for TargetID, Target in pairs( DetectedTargets or {} ) do
|
||||||
local TargetObject = Target.object
|
local TargetObject = Target.object
|
||||||
self:T( TargetObject )
|
self:T( TargetObject )
|
||||||
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
|
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
|
||||||
@ -25197,11 +25263,12 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
|
|||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
function _NewPatrolRoute( AIControllable )
|
-- This statis method is called from the route path within the last task at the last waaypoint of the Controllable.
|
||||||
|
-- Note that this method is required, as triggers the next route when patrolling for the Controllable.
|
||||||
|
function AI_PATROL_ZONE:_NewPatrolRoute( AIControllable )
|
||||||
|
|
||||||
AIControllable:T( "NewPatrolRoute" )
|
|
||||||
local PatrolZone = AIControllable:GetState( AIControllable, "PatrolZone" ) -- PatrolCore.Zone#AI_PATROL_ZONE
|
local PatrolZone = AIControllable:GetState( AIControllable, "PatrolZone" ) -- PatrolCore.Zone#AI_PATROL_ZONE
|
||||||
PatrolZone:Route()
|
PatrolZone:__Route( 1 )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -25222,55 +25289,51 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
|
|
||||||
if self.Controllable:IsAlive() then
|
if self.Controllable:IsAlive() then
|
||||||
--- Determine if the AIControllable is within the PatrolZone.
|
-- Determine if the AIControllable is within the PatrolZone.
|
||||||
-- If not, make a waypoint within the to that the AIControllable will fly at maximum speed to that point.
|
-- If not, make a waypoint within the to that the AIControllable will fly at maximum speed to that point.
|
||||||
|
|
||||||
local PatrolRoute = {}
|
local PatrolRoute = {}
|
||||||
|
|
||||||
--- Calculate the current route point.
|
-- Calculate the current route point of the controllable as the start point of the route.
|
||||||
local CurrentVec2 = self.Controllable:GetVec2()
|
-- However, when the controllable is not in the air,
|
||||||
|
-- the controllable current waypoint is probably the airbase...
|
||||||
|
-- Thus, if we would take the current waypoint as the startpoint, upon take-off, the controllable flies
|
||||||
|
-- immediately back to the airbase, and this is not correct.
|
||||||
|
-- Therefore, when on a runway, get as the current route point a random point within the PatrolZone.
|
||||||
|
-- This will make the plane fly immediately to the patrol zone.
|
||||||
|
|
||||||
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
if self.Controllable:InAir() == false then
|
||||||
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
self:E( "Not in the air, finding route path within PatrolZone" )
|
||||||
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
local CurrentVec2 = self.Controllable:GetVec2()
|
||||||
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
||||||
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
||||||
POINT_VEC3.RoutePointAltType.BARO,
|
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
||||||
POINT_VEC3.RoutePointType.TurningPoint,
|
|
||||||
POINT_VEC3.RoutePointAction.TurningPoint,
|
|
||||||
ToPatrolZoneSpeed,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
|
||||||
|
|
||||||
self:T2( PatrolRoute )
|
|
||||||
|
|
||||||
if self.Controllable:IsNotInZone( self.PatrolZone ) then
|
|
||||||
--- Find a random 2D point in PatrolZone.
|
|
||||||
local ToPatrolZoneVec2 = self.PatrolZone:GetRandomVec2()
|
|
||||||
self:T2( ToPatrolZoneVec2 )
|
|
||||||
|
|
||||||
--- Define Speed and Altitude.
|
|
||||||
local ToPatrolZoneAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude )
|
|
||||||
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
||||||
self:T2( ToPatrolZoneSpeed )
|
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
||||||
|
POINT_VEC3.RoutePointAltType.BARO,
|
||||||
--- Obtain a 3D @{Point} from the 2D point + altitude.
|
POINT_VEC3.RoutePointType.TakeOffParking,
|
||||||
local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y )
|
POINT_VEC3.RoutePointAction.FromParkingArea,
|
||||||
|
ToPatrolZoneSpeed,
|
||||||
--- Create a route point of type air.
|
true
|
||||||
local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir(
|
)
|
||||||
POINT_VEC3.RoutePointAltType.BARO,
|
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
||||||
POINT_VEC3.RoutePointType.TurningPoint,
|
else
|
||||||
POINT_VEC3.RoutePointAction.TurningPoint,
|
self:E( "In the air, finding route path within PatrolZone" )
|
||||||
ToPatrolZoneSpeed,
|
local CurrentVec2 = self.Controllable:GetVec2()
|
||||||
true
|
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
||||||
)
|
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
||||||
|
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
||||||
PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint
|
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
||||||
|
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
||||||
end
|
POINT_VEC3.RoutePointAltType.BARO,
|
||||||
|
POINT_VEC3.RoutePointType.TurningPoint,
|
||||||
|
POINT_VEC3.RoutePointAction.TurningPoint,
|
||||||
|
ToPatrolZoneSpeed,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- Define a random point in the @{Zone}. The AI will fly to that point within the zone.
|
--- Define a random point in the @{Zone}. The AI will fly to that point within the zone.
|
||||||
|
|
||||||
@ -25297,7 +25360,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
|
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
|
||||||
|
|
||||||
ToTargetPointVec3:SmokeRed()
|
--ToTargetPointVec3:SmokeRed()
|
||||||
|
|
||||||
PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint
|
PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint
|
||||||
|
|
||||||
@ -25306,7 +25369,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
--- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the AIControllable in a temporary variable ...
|
--- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the AIControllable in a temporary variable ...
|
||||||
self.Controllable:SetState( self.Controllable, "PatrolZone", self )
|
self.Controllable:SetState( self.Controllable, "PatrolZone", self )
|
||||||
self.Controllable:WayPointFunction( #PatrolRoute, 1, "_NewPatrolRoute" )
|
self.Controllable:WayPointFunction( #PatrolRoute, 1, "AI_PATROL_ZONE:_NewPatrolRoute" )
|
||||||
|
|
||||||
--- NOW ROUTE THE GROUP!
|
--- NOW ROUTE THE GROUP!
|
||||||
self.Controllable:WayPointExecute( 1, 2 )
|
self.Controllable:WayPointExecute( 1, 2 )
|
||||||
@ -25330,6 +25393,7 @@ function AI_PATROL_ZONE:onafterStatus()
|
|||||||
|
|
||||||
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
||||||
if Fuel < self.PatrolFuelTresholdPercentage then
|
if Fuel < self.PatrolFuelTresholdPercentage then
|
||||||
|
self:E( self.Controllable:GetName() .. " is out of fuel:" .. Fuel .. ", RTB!" )
|
||||||
local OldAIControllable = self.Controllable
|
local OldAIControllable = self.Controllable
|
||||||
local AIControllableTemplate = self.Controllable:GetTemplate()
|
local AIControllableTemplate = self.Controllable:GetTemplate()
|
||||||
|
|
||||||
@ -25344,11 +25408,12 @@ function AI_PATROL_ZONE:onafterStatus()
|
|||||||
-- TODO: Check GROUP damage function.
|
-- TODO: Check GROUP damage function.
|
||||||
local Damage = self.Controllable:GetLife()
|
local Damage = self.Controllable:GetLife()
|
||||||
if Damage <= self.PatrolDamageTreshold then
|
if Damage <= self.PatrolDamageTreshold then
|
||||||
|
self:E( self.Controllable:GetName() .. " is damaged:" .. Damage .. ", RTB!" )
|
||||||
RTB = true
|
RTB = true
|
||||||
end
|
end
|
||||||
|
|
||||||
if RTB == true then
|
if RTB == true then
|
||||||
self:__RTB( 1 )
|
self:RTB()
|
||||||
else
|
else
|
||||||
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
|
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
|
||||||
end
|
end
|
||||||
@ -25391,11 +25456,11 @@ function AI_PATROL_ZONE:onafterRTB()
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end--- Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** -- **Provide Close Air Support to friendly ground troops.**
|
end
|
||||||
|
--- Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** -- **Provide Close Air Support to friendly ground troops.**
|
||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -25737,6 +25802,15 @@ function AI_CAS_ZONE:onafterStart( Controllable, From, Event, To )
|
|||||||
|
|
||||||
Controllable:OptionROEHoldFire()
|
Controllable:OptionROEHoldFire()
|
||||||
Controllable:OptionROTVertical()
|
Controllable:OptionROTVertical()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
@ -25919,7 +25993,6 @@ end
|
|||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -26262,6 +26335,15 @@ function AI_CAP_ZONE:onafterStart( Controllable, From, Event, To )
|
|||||||
self:EventOnDead( self.OnDead )
|
self:EventOnDead( self.OnDead )
|
||||||
|
|
||||||
Controllable:OptionROEOpenFire()
|
Controllable:OptionROEOpenFire()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
|
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
|
||||||
env.info( 'Moose Generation Timestamp: 20170116_1223' )
|
env.info( 'Moose Generation Timestamp: 20170117_1202' )
|
||||||
local base = _G
|
local base = _G
|
||||||
|
|
||||||
Include = {}
|
Include = {}
|
||||||
@ -9795,9 +9795,11 @@ POINT_VEC3 = {
|
|||||||
BARO = "BARO",
|
BARO = "BARO",
|
||||||
},
|
},
|
||||||
RoutePointType = {
|
RoutePointType = {
|
||||||
|
TakeOffParking = "TakeOffParking",
|
||||||
TurningPoint = "Turning Point",
|
TurningPoint = "Turning Point",
|
||||||
},
|
},
|
||||||
RoutePointAction = {
|
RoutePointAction = {
|
||||||
|
FromParkingArea = "From Parking Area",
|
||||||
TurningPoint = "Turning Point",
|
TurningPoint = "Turning Point",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -9820,10 +9822,12 @@ do -- POINT_VEC3
|
|||||||
|
|
||||||
--- RoutePoint Types
|
--- RoutePoint Types
|
||||||
-- @type POINT_VEC3.RoutePointType
|
-- @type POINT_VEC3.RoutePointType
|
||||||
|
-- @field TakeOffParking "TakeOffParking"
|
||||||
-- @field TurningPoint "Turning Point"
|
-- @field TurningPoint "Turning Point"
|
||||||
|
|
||||||
--- RoutePoint Actions
|
--- RoutePoint Actions
|
||||||
-- @type POINT_VEC3.RoutePointAction
|
-- @type POINT_VEC3.RoutePointAction
|
||||||
|
-- @field FromParkingArea "From Parking Area"
|
||||||
-- @field TurningPoint "Turning Point"
|
-- @field TurningPoint "Turning Point"
|
||||||
|
|
||||||
-- Constructor.
|
-- Constructor.
|
||||||
@ -11255,7 +11259,11 @@ do -- FSM
|
|||||||
local from = self.current
|
local from = self.current
|
||||||
local params = { from, EventName, to, ... }
|
local params = { from, EventName, to, ... }
|
||||||
|
|
||||||
self:E( "FSM Transition:" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
if self.Controllable then
|
||||||
|
self:E( "FSM Transition for " .. self.Controllable.ControllableName .. " :" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
||||||
|
else
|
||||||
|
self:E( "FSM Transition:" .. self.current .. " --> " .. EventName .. " --> " .. to )
|
||||||
|
end
|
||||||
|
|
||||||
if self:_call_handler("onbefore" .. EventName, params) == false
|
if self:_call_handler("onbefore" .. EventName, params) == false
|
||||||
or self:_call_handler("OnBefore" .. EventName, params) == false
|
or self:_call_handler("OnBefore" .. EventName, params) == false
|
||||||
@ -11742,7 +11750,7 @@ do -- FSM_SET
|
|||||||
|
|
||||||
function FSM_SET:_call_handler( handler, params )
|
function FSM_SET:_call_handler( handler, params )
|
||||||
if self[handler] then
|
if self[handler] then
|
||||||
self:E( "Calling " .. handler )
|
self:T( "Calling " .. handler )
|
||||||
return self[handler]( self, self.Set, unpack( params ) )
|
return self[handler]( self, self.Set, unpack( params ) )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -12306,20 +12314,13 @@ end
|
|||||||
|
|
||||||
|
|
||||||
--- Returns true if the POSITIONABLE is in the air.
|
--- Returns true if the POSITIONABLE is in the air.
|
||||||
|
-- Polymorphic, is overridden in GROUP and UNIT.
|
||||||
-- @param Wrapper.Positionable#POSITIONABLE self
|
-- @param Wrapper.Positionable#POSITIONABLE self
|
||||||
-- @return #boolean true if in the air.
|
-- @return #boolean true if in the air.
|
||||||
-- @return #nil The POSITIONABLE is not existing or alive.
|
-- @return #nil The POSITIONABLE is not existing or alive.
|
||||||
function POSITIONABLE:InAir()
|
function POSITIONABLE:InAir()
|
||||||
self:F2( self.PositionableName )
|
self:F2( self.PositionableName )
|
||||||
|
|
||||||
local DCSPositionable = self:GetDCSObject()
|
|
||||||
|
|
||||||
if DCSPositionable then
|
|
||||||
local PositionableInAir = DCSPositionable:inAir()
|
|
||||||
self:T3( PositionableInAir )
|
|
||||||
return PositionableInAir
|
|
||||||
end
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -12786,7 +12787,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime )
|
|||||||
if DCSControllable then
|
if DCSControllable then
|
||||||
|
|
||||||
local Controller = self:_GetController()
|
local Controller = self:_GetController()
|
||||||
self:E(Controller)
|
self:T3( Controller )
|
||||||
|
|
||||||
-- When a controllable SPAWNs, it takes about a second to get the controllable in the simulator. Setting tasks to unspawned controllables provides unexpected results.
|
-- When a controllable SPAWNs, it takes about a second to get the controllable in the simulator. Setting tasks to unspawned controllables provides unexpected results.
|
||||||
-- Therefore we schedule the functions to set the mission and options for the Controllable.
|
-- Therefore we schedule the functions to set the mission and options for the Controllable.
|
||||||
@ -14784,10 +14785,7 @@ function CONTROLLABLE:WayPointExecute( WayPoint, WaitTime )
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Message APIs
|
-- Message APIs--- This module contains the GROUP class.
|
||||||
|
|
||||||
|
|
||||||
--- This module contains the GROUP class.
|
|
||||||
--
|
--
|
||||||
-- 1) @{Wrapper.Group#GROUP} class, extends @{Wrapper.Controllable#CONTROLLABLE}
|
-- 1) @{Wrapper.Group#GROUP} class, extends @{Wrapper.Controllable#CONTROLLABLE}
|
||||||
-- =============================================================
|
-- =============================================================
|
||||||
@ -15668,6 +15666,32 @@ function GROUP:CalculateThreatLevelA2G()
|
|||||||
return MaxThreatLevelA2G
|
return MaxThreatLevelA2G
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Returns true if the first unit of the GROUP is in the air.
|
||||||
|
-- @param Wrapper.Group#GROUP self
|
||||||
|
-- @return #boolean true if in the first unit of the group is in the air.
|
||||||
|
-- @return #nil The GROUP is not existing or not alive.
|
||||||
|
function GROUP:InAir()
|
||||||
|
self:F2( self.GroupName )
|
||||||
|
|
||||||
|
local DCSGroup = self:GetDCSObject()
|
||||||
|
|
||||||
|
if DCSGroup then
|
||||||
|
local DCSUnit = DCSGroup:getUnit(1)
|
||||||
|
if DCSUnit then
|
||||||
|
local GroupInAir = DCSGroup:getUnit(1):inAir()
|
||||||
|
self:T3( GroupInAir )
|
||||||
|
return GroupInAir
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function GROUP:OnReSpawn( ReSpawnFunction )
|
||||||
|
|
||||||
|
self.ReSpawnFunction = ReSpawnFunction
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- This module contains the UNIT class.
|
--- This module contains the UNIT class.
|
||||||
--
|
--
|
||||||
@ -16489,6 +16513,24 @@ function UNIT:IsShip()
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Returns true if the UNIT is in the air.
|
||||||
|
-- @param Wrapper.Positionable#UNIT self
|
||||||
|
-- @return #boolean true if in the air.
|
||||||
|
-- @return #nil The UNIT is not existing or alive.
|
||||||
|
function UNIT:InAir()
|
||||||
|
self:F2( self.UnitName )
|
||||||
|
|
||||||
|
local DCSUnit = self:GetDCSObject()
|
||||||
|
|
||||||
|
if DCSUnit then
|
||||||
|
local UnitInAir = DCSUnit:inAir()
|
||||||
|
self:T3( UnitInAir )
|
||||||
|
return UnitInAir
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
--- This module contains the CLIENT class.
|
--- This module contains the CLIENT class.
|
||||||
--
|
--
|
||||||
-- 1) @{Wrapper.Client#CLIENT} class, extends @{Wrapper.Unit#UNIT}
|
-- 1) @{Wrapper.Client#CLIENT} class, extends @{Wrapper.Unit#UNIT}
|
||||||
@ -18902,11 +18944,14 @@ function SPAWN:ReSpawn( SpawnIndex )
|
|||||||
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
|
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
|
||||||
if SpawnGroup and WayPoints then
|
if SpawnGroup and WayPoints then
|
||||||
-- If there were WayPoints set, then Re-Execute those WayPoints!
|
-- If there were WayPoints set, then Re-Execute those WayPoints!
|
||||||
self:E( WayPoints )
|
|
||||||
SpawnGroup:WayPointInitialize( WayPoints )
|
SpawnGroup:WayPointInitialize( WayPoints )
|
||||||
SpawnGroup:WayPointExecute( 1, 5 )
|
SpawnGroup:WayPointExecute( 1, 5 )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if SpawnGroup.ReSpawnFunction then
|
||||||
|
SpawnGroup:ReSpawnFunction()
|
||||||
|
end
|
||||||
|
|
||||||
return SpawnGroup
|
return SpawnGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -24307,13 +24352,12 @@ function DETECTION_AREAS:CreateDetectionSets()
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--- Single-Player:Yes / Mulit-Player:Yes / AI:Yes / Human:No / Types:All -- AI Balancing will replace in multi player missions
|
--- Single-Player:**No** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**All** -- **AI Balancing will replace in multi player missions
|
||||||
-- non-occupied human slots with AI groups, in order to provide an engaging simulation environment,
|
-- non-occupied human slots with AI groups, in order to provide an engaging simulation environment,
|
||||||
-- even when there are hardly any players in the mission.
|
-- even when there are hardly any players in the mission.**
|
||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -24382,6 +24426,8 @@ end
|
|||||||
--
|
--
|
||||||
-- Hereby the change log:
|
-- Hereby the change log:
|
||||||
--
|
--
|
||||||
|
-- 2017-01-17: There is still a problem with AI being destroyed, but not respawned. Need to check further upon that.
|
||||||
|
--
|
||||||
-- 2017-01-08: AI_BALANCER:**InitSpawnInterval( Earliest, Latest )** added.
|
-- 2017-01-08: AI_BALANCER:**InitSpawnInterval( Earliest, Latest )** added.
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
@ -24391,7 +24437,6 @@ end
|
|||||||
-- ### Contributions:
|
-- ### Contributions:
|
||||||
--
|
--
|
||||||
-- * **[Dutch_Baron](https://forums.eagle.ru/member.php?u=112075)**: Working together with James has resulted in the creation of the AI_BALANCER class. James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)
|
-- * **[Dutch_Baron](https://forums.eagle.ru/member.php?u=112075)**: Working together with James has resulted in the creation of the AI_BALANCER class. James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)
|
||||||
--
|
|
||||||
-- * **SNAFU**: Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. None of the script code has been used however within the new AI_BALANCER moose class.
|
-- * **SNAFU**: Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. None of the script code has been used however within the new AI_BALANCER moose class.
|
||||||
--
|
--
|
||||||
-- ### Authors:
|
-- ### Authors:
|
||||||
@ -24540,16 +24585,15 @@ end
|
|||||||
--- @param #AI_BALANCER self
|
--- @param #AI_BALANCER self
|
||||||
function AI_BALANCER:onenterMonitoring( SetGroup )
|
function AI_BALANCER:onenterMonitoring( SetGroup )
|
||||||
|
|
||||||
self:E( { self.SetClient:Count() } )
|
self:T2( { self.SetClient:Count() } )
|
||||||
self.SetClient:Flush()
|
--self.SetClient:Flush()
|
||||||
|
|
||||||
self.SetClient:ForEachClient(
|
self.SetClient:ForEachClient(
|
||||||
--- @param Wrapper.Client#CLIENT Client
|
--- @param Wrapper.Client#CLIENT Client
|
||||||
function( Client )
|
function( Client )
|
||||||
self:E(Client.ClientName)
|
self:T3(Client.ClientName)
|
||||||
|
|
||||||
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
|
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
|
||||||
self:E({Client:IsAlive()})
|
|
||||||
if Client:IsAlive() then
|
if Client:IsAlive() then
|
||||||
|
|
||||||
if AIGroup and AIGroup:IsAlive() == true then
|
if AIGroup and AIGroup:IsAlive() == true then
|
||||||
@ -24564,16 +24608,16 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
|
|||||||
local PlayerInRange = { Value = false }
|
local PlayerInRange = { Value = false }
|
||||||
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
|
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
|
||||||
|
|
||||||
self:E( RangeZone )
|
self:T2( RangeZone )
|
||||||
|
|
||||||
_DATABASE:ForEachPlayer(
|
_DATABASE:ForEachPlayer(
|
||||||
--- @param Wrapper.Unit#UNIT RangeTestUnit
|
--- @param Wrapper.Unit#UNIT RangeTestUnit
|
||||||
function( RangeTestUnit, RangeZone, AIGroup, PlayerInRange )
|
function( RangeTestUnit, RangeZone, AIGroup, PlayerInRange )
|
||||||
self:E( { PlayerInRange, RangeTestUnit.UnitName, RangeZone.ZoneName } )
|
self:T2( { PlayerInRange, RangeTestUnit.UnitName, RangeZone.ZoneName } )
|
||||||
if RangeTestUnit:IsInZone( RangeZone ) == true then
|
if RangeTestUnit:IsInZone( RangeZone ) == true then
|
||||||
self:E( "in zone" )
|
self:T2( "in zone" )
|
||||||
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
|
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
|
||||||
self:E( "in range" )
|
self:T2( "in range" )
|
||||||
PlayerInRange.Value = true
|
PlayerInRange.Value = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -24594,7 +24638,7 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
if not AIGroup or not AIGroup:IsAlive() == true then
|
if not AIGroup or not AIGroup:IsAlive() == true then
|
||||||
self:E( "Client " .. Client.UnitName .. " not alive." )
|
self:T( "Client " .. Client.UnitName .. " not alive." )
|
||||||
if not self.SpawnQueue[Client.UnitName] then
|
if not self.SpawnQueue[Client.UnitName] then
|
||||||
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
|
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
|
||||||
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )
|
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )
|
||||||
@ -24616,7 +24660,6 @@ end
|
|||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -24720,6 +24763,17 @@ end
|
|||||||
--
|
--
|
||||||
-- ====
|
-- ====
|
||||||
--
|
--
|
||||||
|
-- # **OPEN ISSUES**
|
||||||
|
--
|
||||||
|
-- 2017-01-17: When Spawned AI is located at an airbase, it will be routed first back to the airbase after take-off.
|
||||||
|
--
|
||||||
|
-- 2016-01-17:
|
||||||
|
-- -- Fixed problem with AI returning to base too early and unexpected.
|
||||||
|
-- -- ReSpawning of AI will reset the AI_PATROL and derived classes.
|
||||||
|
-- -- Checked the correct workings of SCHEDULER, and it DOES work correctly.
|
||||||
|
--
|
||||||
|
-- ====
|
||||||
|
--
|
||||||
-- # **API CHANGE HISTORY**
|
-- # **API CHANGE HISTORY**
|
||||||
--
|
--
|
||||||
-- The underlying change log documents the API changes. Please read this carefully. The following notation is used:
|
-- The underlying change log documents the API changes. Please read this carefully. The following notation is used:
|
||||||
@ -24729,7 +24783,9 @@ end
|
|||||||
--
|
--
|
||||||
-- Hereby the change log:
|
-- Hereby the change log:
|
||||||
--
|
--
|
||||||
-- 2016-01-15: Complete revision. AI_PATROL_ZONE is the base class for other AI_PATROL like classes.
|
-- 2017-01-17: Rename of class: **AI\_PATROL\_ZONE** is the new name for the old _AI\_PATROLZONE_.
|
||||||
|
--
|
||||||
|
-- 2017-01-15: Complete revision. AI_PATROL_ZONE is the base class for other AI_PATROL like classes.
|
||||||
--
|
--
|
||||||
-- 2016-09-01: Initial class and API.
|
-- 2016-09-01: Initial class and API.
|
||||||
--
|
--
|
||||||
@ -24792,12 +24848,12 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
self.CheckStatus = true
|
self.CheckStatus = true
|
||||||
|
|
||||||
self:ManageFuel( .2, 60 )
|
self:ManageFuel( .2, 60 )
|
||||||
self:ManageDamage( 10 )
|
self:ManageDamage( 1 )
|
||||||
|
|
||||||
self:SetDetectionInterval( 30 )
|
self:SetDetectionInterval( 30 )
|
||||||
|
|
||||||
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
|
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
|
||||||
|
|
||||||
self:SetStartState( "None" )
|
self:SetStartState( "None" )
|
||||||
|
|
||||||
self:AddTransition( "None", "Start", "Patrolling" )
|
self:AddTransition( "None", "Start", "Patrolling" )
|
||||||
@ -24957,7 +25013,7 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
-- @param #AI_PATROL_ZONE self
|
-- @param #AI_PATROL_ZONE self
|
||||||
-- @param #number Delay The delay in seconds.
|
-- @param #number Delay The delay in seconds.
|
||||||
|
|
||||||
self:AddTransition( "*", "RTB", "RTB" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
self:AddTransition( "*", "RTB", "Returning" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
||||||
|
|
||||||
--- OnBefore Transition Handler for Event RTB.
|
--- OnBefore Transition Handler for Event RTB.
|
||||||
-- @function [parent=#AI_PATROL_ZONE] OnBeforeRTB
|
-- @function [parent=#AI_PATROL_ZONE] OnBeforeRTB
|
||||||
@ -25001,6 +25057,8 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
|
|||||||
-- @param #string From The From State string.
|
-- @param #string From The From State string.
|
||||||
-- @param #string Event The Event string.
|
-- @param #string Event The Event string.
|
||||||
-- @param #string To The To State string.
|
-- @param #string To The To State string.
|
||||||
|
|
||||||
|
self:AddTransition( "*", "Reset", "Patrolling" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -25144,13 +25202,21 @@ end
|
|||||||
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
|
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
|
||||||
self:F2()
|
self:F2()
|
||||||
|
|
||||||
self:Route() -- Route to the patrol point.
|
self:__Route( 5 ) -- Route to the patrol point. The asynchronous trigger is important, because a spawned group and units takes at least one second to come live.
|
||||||
self:__Status( 30 ) -- Check status status every 30 seconds.
|
self:__Status( 30 ) -- Check status status every 30 seconds.
|
||||||
self:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
|
self:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
|
||||||
|
|
||||||
Controllable:OptionROEHoldFire()
|
Controllable:OptionROEHoldFire()
|
||||||
Controllable:OptionROTVertical()
|
Controllable:OptionROTVertical()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -25168,7 +25234,7 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
|
|||||||
local Detected = false
|
local Detected = false
|
||||||
|
|
||||||
local DetectedTargets = Controllable:GetDetectedTargets()
|
local DetectedTargets = Controllable:GetDetectedTargets()
|
||||||
for TargetID, Target in pairs( DetectedTargets ) do
|
for TargetID, Target in pairs( DetectedTargets or {} ) do
|
||||||
local TargetObject = Target.object
|
local TargetObject = Target.object
|
||||||
self:T( TargetObject )
|
self:T( TargetObject )
|
||||||
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
|
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
|
||||||
@ -25197,11 +25263,12 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
|
|||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
function _NewPatrolRoute( AIControllable )
|
-- This statis method is called from the route path within the last task at the last waaypoint of the Controllable.
|
||||||
|
-- Note that this method is required, as triggers the next route when patrolling for the Controllable.
|
||||||
|
function AI_PATROL_ZONE:_NewPatrolRoute( AIControllable )
|
||||||
|
|
||||||
AIControllable:T( "NewPatrolRoute" )
|
|
||||||
local PatrolZone = AIControllable:GetState( AIControllable, "PatrolZone" ) -- PatrolCore.Zone#AI_PATROL_ZONE
|
local PatrolZone = AIControllable:GetState( AIControllable, "PatrolZone" ) -- PatrolCore.Zone#AI_PATROL_ZONE
|
||||||
PatrolZone:Route()
|
PatrolZone:__Route( 1 )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -25222,55 +25289,51 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
|
|
||||||
if self.Controllable:IsAlive() then
|
if self.Controllable:IsAlive() then
|
||||||
--- Determine if the AIControllable is within the PatrolZone.
|
-- Determine if the AIControllable is within the PatrolZone.
|
||||||
-- If not, make a waypoint within the to that the AIControllable will fly at maximum speed to that point.
|
-- If not, make a waypoint within the to that the AIControllable will fly at maximum speed to that point.
|
||||||
|
|
||||||
local PatrolRoute = {}
|
local PatrolRoute = {}
|
||||||
|
|
||||||
--- Calculate the current route point.
|
-- Calculate the current route point of the controllable as the start point of the route.
|
||||||
local CurrentVec2 = self.Controllable:GetVec2()
|
-- However, when the controllable is not in the air,
|
||||||
|
-- the controllable current waypoint is probably the airbase...
|
||||||
|
-- Thus, if we would take the current waypoint as the startpoint, upon take-off, the controllable flies
|
||||||
|
-- immediately back to the airbase, and this is not correct.
|
||||||
|
-- Therefore, when on a runway, get as the current route point a random point within the PatrolZone.
|
||||||
|
-- This will make the plane fly immediately to the patrol zone.
|
||||||
|
|
||||||
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
if self.Controllable:InAir() == false then
|
||||||
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
self:E( "Not in the air, finding route path within PatrolZone" )
|
||||||
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
local CurrentVec2 = self.Controllable:GetVec2()
|
||||||
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
||||||
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
||||||
POINT_VEC3.RoutePointAltType.BARO,
|
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
||||||
POINT_VEC3.RoutePointType.TurningPoint,
|
|
||||||
POINT_VEC3.RoutePointAction.TurningPoint,
|
|
||||||
ToPatrolZoneSpeed,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
|
||||||
|
|
||||||
self:T2( PatrolRoute )
|
|
||||||
|
|
||||||
if self.Controllable:IsNotInZone( self.PatrolZone ) then
|
|
||||||
--- Find a random 2D point in PatrolZone.
|
|
||||||
local ToPatrolZoneVec2 = self.PatrolZone:GetRandomVec2()
|
|
||||||
self:T2( ToPatrolZoneVec2 )
|
|
||||||
|
|
||||||
--- Define Speed and Altitude.
|
|
||||||
local ToPatrolZoneAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude )
|
|
||||||
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
||||||
self:T2( ToPatrolZoneSpeed )
|
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
||||||
|
POINT_VEC3.RoutePointAltType.BARO,
|
||||||
--- Obtain a 3D @{Point} from the 2D point + altitude.
|
POINT_VEC3.RoutePointType.TakeOffParking,
|
||||||
local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y )
|
POINT_VEC3.RoutePointAction.FromParkingArea,
|
||||||
|
ToPatrolZoneSpeed,
|
||||||
--- Create a route point of type air.
|
true
|
||||||
local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir(
|
)
|
||||||
POINT_VEC3.RoutePointAltType.BARO,
|
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
||||||
POINT_VEC3.RoutePointType.TurningPoint,
|
else
|
||||||
POINT_VEC3.RoutePointAction.TurningPoint,
|
self:E( "In the air, finding route path within PatrolZone" )
|
||||||
ToPatrolZoneSpeed,
|
local CurrentVec2 = self.Controllable:GetVec2()
|
||||||
true
|
--TODO: Create GetAltitude function for GROUP, and delete GetUnit(1).
|
||||||
)
|
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
|
||||||
|
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
|
||||||
PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint
|
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
|
||||||
|
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
|
||||||
end
|
POINT_VEC3.RoutePointAltType.BARO,
|
||||||
|
POINT_VEC3.RoutePointType.TurningPoint,
|
||||||
|
POINT_VEC3.RoutePointAction.TurningPoint,
|
||||||
|
ToPatrolZoneSpeed,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- Define a random point in the @{Zone}. The AI will fly to that point within the zone.
|
--- Define a random point in the @{Zone}. The AI will fly to that point within the zone.
|
||||||
|
|
||||||
@ -25297,7 +25360,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
|
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
|
||||||
|
|
||||||
ToTargetPointVec3:SmokeRed()
|
--ToTargetPointVec3:SmokeRed()
|
||||||
|
|
||||||
PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint
|
PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint
|
||||||
|
|
||||||
@ -25306,7 +25369,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
|
|||||||
|
|
||||||
--- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the AIControllable in a temporary variable ...
|
--- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the AIControllable in a temporary variable ...
|
||||||
self.Controllable:SetState( self.Controllable, "PatrolZone", self )
|
self.Controllable:SetState( self.Controllable, "PatrolZone", self )
|
||||||
self.Controllable:WayPointFunction( #PatrolRoute, 1, "_NewPatrolRoute" )
|
self.Controllable:WayPointFunction( #PatrolRoute, 1, "AI_PATROL_ZONE:_NewPatrolRoute" )
|
||||||
|
|
||||||
--- NOW ROUTE THE GROUP!
|
--- NOW ROUTE THE GROUP!
|
||||||
self.Controllable:WayPointExecute( 1, 2 )
|
self.Controllable:WayPointExecute( 1, 2 )
|
||||||
@ -25330,6 +25393,7 @@ function AI_PATROL_ZONE:onafterStatus()
|
|||||||
|
|
||||||
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
||||||
if Fuel < self.PatrolFuelTresholdPercentage then
|
if Fuel < self.PatrolFuelTresholdPercentage then
|
||||||
|
self:E( self.Controllable:GetName() .. " is out of fuel:" .. Fuel .. ", RTB!" )
|
||||||
local OldAIControllable = self.Controllable
|
local OldAIControllable = self.Controllable
|
||||||
local AIControllableTemplate = self.Controllable:GetTemplate()
|
local AIControllableTemplate = self.Controllable:GetTemplate()
|
||||||
|
|
||||||
@ -25344,11 +25408,12 @@ function AI_PATROL_ZONE:onafterStatus()
|
|||||||
-- TODO: Check GROUP damage function.
|
-- TODO: Check GROUP damage function.
|
||||||
local Damage = self.Controllable:GetLife()
|
local Damage = self.Controllable:GetLife()
|
||||||
if Damage <= self.PatrolDamageTreshold then
|
if Damage <= self.PatrolDamageTreshold then
|
||||||
|
self:E( self.Controllable:GetName() .. " is damaged:" .. Damage .. ", RTB!" )
|
||||||
RTB = true
|
RTB = true
|
||||||
end
|
end
|
||||||
|
|
||||||
if RTB == true then
|
if RTB == true then
|
||||||
self:__RTB( 1 )
|
self:RTB()
|
||||||
else
|
else
|
||||||
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
|
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
|
||||||
end
|
end
|
||||||
@ -25391,11 +25456,11 @@ function AI_PATROL_ZONE:onafterRTB()
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end--- Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** -- **Provide Close Air Support to friendly ground troops.**
|
end
|
||||||
|
--- Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** -- **Provide Close Air Support to friendly ground troops.**
|
||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -25737,6 +25802,15 @@ function AI_CAS_ZONE:onafterStart( Controllable, From, Event, To )
|
|||||||
|
|
||||||
Controllable:OptionROEHoldFire()
|
Controllable:OptionROEHoldFire()
|
||||||
Controllable:OptionROTVertical()
|
Controllable:OptionROTVertical()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
@ -25919,7 +25993,6 @@ end
|
|||||||
--
|
--
|
||||||
-- 
|
-- 
|
||||||
--
|
--
|
||||||
-- Examples can be found in the test missions.
|
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -26262,6 +26335,15 @@ function AI_CAP_ZONE:onafterStart( Controllable, From, Event, To )
|
|||||||
self:EventOnDead( self.OnDead )
|
self:EventOnDead( self.OnDead )
|
||||||
|
|
||||||
Controllable:OptionROEOpenFire()
|
Controllable:OptionROEOpenFire()
|
||||||
|
|
||||||
|
self.Controllable:OnReSpawn(
|
||||||
|
function( PatrolGroup )
|
||||||
|
self:E( "ReSpawn" )
|
||||||
|
self:__Reset()
|
||||||
|
self:__Route( 5 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,8 +1,4 @@
|
|||||||
--- AI Spawning and Decomissioning
|
-- Name: AIB-001 - Spawned AI
|
||||||
--
|
|
||||||
-- ===
|
|
||||||
--
|
|
||||||
-- Name: Spawned AI
|
|
||||||
-- Author: FlightControl
|
-- Author: FlightControl
|
||||||
-- Date Created: 07 Dec 2016
|
-- Date Created: 07 Dec 2016
|
||||||
--
|
--
|
||||||
@ -18,10 +14,6 @@
|
|||||||
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
|
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
|
||||||
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
||||||
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
||||||
--
|
|
||||||
-- # Status: TESTED 07 Dec 2016
|
|
||||||
--
|
|
||||||
-- @module TEST.AI_BALANCER.T001
|
|
||||||
|
|
||||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||||
|
|||||||
Binary file not shown.
@ -1,8 +1,4 @@
|
|||||||
--- AI Patrolling
|
-- Name: AIB-002 - Patrol AI.lua
|
||||||
--
|
|
||||||
-- ===
|
|
||||||
--
|
|
||||||
-- Name: Patrol AI
|
|
||||||
-- Author: FlightControl
|
-- Author: FlightControl
|
||||||
-- Date Created: 7 December 2016
|
-- Date Created: 7 December 2016
|
||||||
--
|
--
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -1,4 +1,4 @@
|
|||||||
-- Name: Respawn Test when Destroyed
|
-- Name: AIB-004 - Respawn Test when Destroyed.lua
|
||||||
-- Author: FlightControl
|
-- Author: FlightControl
|
||||||
-- Date Created: 7 January 2017
|
-- Date Created: 7 January 2017
|
||||||
--
|
--
|
||||||
@ -19,7 +19,7 @@
|
|||||||
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
||||||
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
||||||
-- 4. Monitor that once a red AI is destroyed, that it ReSpawns...
|
-- 4. Monitor that once a red AI is destroyed, that it ReSpawns...
|
||||||
--
|
|
||||||
|
|
||||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||||
|
|||||||
Binary file not shown.
@ -1,4 +1,4 @@
|
|||||||
-- Name: AIB-006 - Declutter AI at Airbases
|
-- Name: AIB-005 - Patrol AI and Randomize Zones
|
||||||
-- Author: FlightControl
|
-- Author: FlightControl
|
||||||
-- Date Created: 10 Jan 2016
|
-- Date Created: 10 Jan 2016
|
||||||
--
|
--
|
||||||
@ -25,7 +25,7 @@ local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCa
|
|||||||
-- Define the SPAWN object for the red AI plane template.
|
-- Define the SPAWN object for the red AI plane template.
|
||||||
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||||
-- If a blocked plane exists, this red plane will be ReSpawned.
|
-- If a blocked plane exists, this red plane will be ReSpawned.
|
||||||
local RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 60 )
|
local RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
|
||||||
|
|
||||||
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
|
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
|
||||||
local RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
local RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
||||||
@ -46,6 +46,6 @@ function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
|
|||||||
local Patrol = AI_PATROL_ZONE:New( PatrolZoneArray[math.random( 1, 2 )], 3000, 6000, 400, 600 )
|
local Patrol = AI_PATROL_ZONE:New( PatrolZoneArray[math.random( 1, 2 )], 3000, 6000, 400, 600 )
|
||||||
Patrol:ManageFuel( 0.2, 60 )
|
Patrol:ManageFuel( 0.2, 60 )
|
||||||
Patrol:SetControllable( AIGroup )
|
Patrol:SetControllable( AIGroup )
|
||||||
Patrol:__Start( 5 )
|
Patrol:Start()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
Binary file not shown.
@ -0,0 +1,210 @@
|
|||||||
|
-- View scripts
|
||||||
|
-- Copyright (C) 2004, Eagle Dynamics.
|
||||||
|
DisableCombatViews = false -- F5 & Ctrl-F5
|
||||||
|
ExternalObjectsLockDistance = 10000.0
|
||||||
|
ShowTargetInfo = false
|
||||||
|
CameraTerrainRestriction = true
|
||||||
|
hAngleRearDefault = 180
|
||||||
|
vAngleRearDefault = -8.0
|
||||||
|
vAngleRearMin = -90 -- -8.0
|
||||||
|
vAngleRearMax = 90.0
|
||||||
|
|
||||||
|
dbg_shell = "weapons.shells.PKT_7_62_T" -- 23mm shell
|
||||||
|
dbg_shell = "weapons.nurs.WGr21"
|
||||||
|
-- dbg_shell = "weapons.shells.2A64_152" -- 152mm shell
|
||||||
|
dbg_shell_v0 = -1 -- Muzzle speed m/s (-1 - speed from shall database)
|
||||||
|
dbg_shell_fire_rate = 60
|
||||||
|
--reformatted per-unit data to be mod system friendly
|
||||||
|
--this file is no longer should be edited for adding new flyable aircraft , DCS automatically check core database (i.e. where you define your aircraft in aircraft table just define ViewSettings and SnapViews tables)
|
||||||
|
|
||||||
|
function default_fighter_player(t)
|
||||||
|
local res = {
|
||||||
|
CameraViewAngleLimits = {20.000000,140.000000},
|
||||||
|
CameraAngleRestriction = {false ,90.000000,0.500000},
|
||||||
|
EyePoint = {0.05 ,0.000000 ,0.000000},
|
||||||
|
limits_6DOF = {x = {-0.050000,0.4500000},y ={-0.300000,0.100000},z = {-0.220000,0.220000},roll = 90.000000},
|
||||||
|
Allow360rotation = false,
|
||||||
|
CameraAngleLimits = {200,-80.000000,110.000000},
|
||||||
|
ShoulderSize = 0.2, -- move body when azimuth value more then 90 degrees
|
||||||
|
}
|
||||||
|
if t then
|
||||||
|
for i,o in pairs(t) do
|
||||||
|
res[i] = o
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return res
|
||||||
|
end
|
||||||
|
|
||||||
|
function fulcrum()
|
||||||
|
return {
|
||||||
|
Cockpit = {
|
||||||
|
default_fighter_player({CockpitLocalPoint = {4.71,1.28,0.000000}})
|
||||||
|
},
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {1.220000,3.750000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-15.080000,6.350000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-8.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
ViewSettings = {}
|
||||||
|
ViewSettings["A-10A"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = default_fighter_player({CockpitLocalPoint = {4.300000,1.282000,0.000000},
|
||||||
|
EyePoint = {0.000000,0.000000,0.000000},
|
||||||
|
limits_6DOF = {x = {-0.050000,0.600000},
|
||||||
|
y = {-0.300000,0.100000},
|
||||||
|
z = {-0.250000,0.250000},
|
||||||
|
roll = 90.000000}}),
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {0.600000,3.682000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-27.000000,12.000000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-12.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
ViewSettings["A-10C"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = default_fighter_player({CockpitLocalPoint = {4.300000,1.282000,0.000000},
|
||||||
|
EyePoint = {0.000000,0.000000,0.000000},
|
||||||
|
limits_6DOF = {x = {-0.050000,0.600000},
|
||||||
|
y = {-0.300000,0.100000},
|
||||||
|
z = {-0.250000,0.250000},
|
||||||
|
roll = 90.000000}}),
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {0.600000,3.682000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-27.000000,12.000000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-12.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
ViewSettings["F-15C"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = default_fighter_player({CockpitLocalPoint = {6.210000,1.204000,0.000000}})-- player slot 1
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {2.510000,3.604000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-13.790000,6.204000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-8.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
ViewSettings["Ka-50"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = {-- player slot 1
|
||||||
|
CockpitLocalPoint = {3.188000,0.390000,0.000000},
|
||||||
|
CameraViewAngleLimits = {20.000000,120.000000},
|
||||||
|
CameraAngleRestriction = {false,60.000000,0.400000},
|
||||||
|
CameraAngleLimits = {140.000000,-65.000000,90.000000},
|
||||||
|
EyePoint = {0.090000,0.000000,0.000000},
|
||||||
|
limits_6DOF = {x = {-0.020000,0.350000},y ={-0.150000,0.165000},z = {-0.170000,0.170000},roll = 90.000000},
|
||||||
|
},
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {-0.512000,2.790000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-16.812000,5.390000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-8.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
ViewSettings["MiG-29A"] = fulcrum()
|
||||||
|
ViewSettings["MiG-29G"] = fulcrum()
|
||||||
|
ViewSettings["MiG-29S"] = fulcrum()
|
||||||
|
|
||||||
|
ViewSettings["P-51D"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = {-- player slot 1
|
||||||
|
CockpitLocalPoint = {-1.500000,0.618000,0.000000},
|
||||||
|
CameraViewAngleLimits = {20.000000,120.000000},
|
||||||
|
CameraAngleRestriction = {false,90.000000,0.500000},
|
||||||
|
CameraAngleLimits = {200,-80.000000,90.000000},
|
||||||
|
EyePoint = {0.025000,0.100000,0.000000},
|
||||||
|
ShoulderSize = 0.15,
|
||||||
|
Allow360rotation = false,
|
||||||
|
limits_6DOF = {x = {-0.050000,0.450000},y ={-0.200000,0.200000},z = {-0.220000,0.220000},roll = 90.000000},
|
||||||
|
},
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {0.200000,-0.652000,-0.650000},
|
||||||
|
AnglesDefault = {0.000000,0.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-21.500000,5.618000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-8.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
ViewSettings["Su-25"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = default_fighter_player({CockpitLocalPoint = {3.352000,0.506000,0.000000}}),-- player slot 1
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {-0.348000,2.906000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-16.648001,5.506000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-8.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
ViewSettings["Su-25T"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = default_fighter_player({CockpitLocalPoint = {3.406000,0.466000,0.000000}}),-- player slot 1
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {-0.294000,2.866000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-16.594000,5.466000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-8.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
ViewSettings["Su-25TM"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = {-- player slot 1
|
||||||
|
CockpitLocalPoint = {4.000000,1.000000,0.000000},
|
||||||
|
CameraViewAngleLimits = {20.000000,140.000000},
|
||||||
|
CameraAngleRestriction = {true,90.000000,0.400000},
|
||||||
|
CameraAngleLimits = {160.000000,-70.000000,90.000000},
|
||||||
|
EyePoint = {0.000000,0.000000,0.000000},
|
||||||
|
limits_6DOF = {x = {-0.200000,0.200000},y ={-0.200000,0.200000},z = {-0.200000,0.200000},roll = 60.000000},
|
||||||
|
},
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {4.000000,2.000000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {4.000000,2.000000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
ViewSettings["Su-27"] = {
|
||||||
|
Cockpit = {
|
||||||
|
[1] = default_fighter_player({CockpitLocalPoint = {7.959000,1.419000,0.000000}})-- player slot 1
|
||||||
|
}, -- Cockpit
|
||||||
|
Chase = {
|
||||||
|
LocalPoint = {4.259000,3.819000,0.000000},
|
||||||
|
AnglesDefault = {180.000000,-8.000000},
|
||||||
|
}, -- Chase
|
||||||
|
Arcade = {
|
||||||
|
LocalPoint = {-12.041000,6.419000,0.000000},
|
||||||
|
AnglesDefault = {0.000000,-8.000000},
|
||||||
|
}, -- Arcade
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewSettings["Su-33"] = ViewSettings["Su-27"]
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,128 @@
|
|||||||
|
-- View scripts
|
||||||
|
-- Copyright (C) 2004, Eagle Dynamics.
|
||||||
|
|
||||||
|
CockpitMouse = true --false
|
||||||
|
CockpitMouseSpeedSlow = 1.0
|
||||||
|
CockpitMouseSpeedNormal = 10.0
|
||||||
|
CockpitMouseSpeedFast = 20.0
|
||||||
|
CockpitKeyboardAccelerationSlow = 5.0
|
||||||
|
CockpitKeyboardAccelerationNormal = 30.0
|
||||||
|
CockpitKeyboardAccelerationFast = 80.0
|
||||||
|
CockpitKeyboardZoomAcceleration = 300.0
|
||||||
|
DisableSnapViewsSaving = false
|
||||||
|
UseDefaultSnapViews = true
|
||||||
|
CockpitPanStepHor = 45.0
|
||||||
|
CockpitPanStepVert = 30.0
|
||||||
|
CockpitNyMove = true
|
||||||
|
|
||||||
|
CockpitHAngleAccelerateTimeMax = 0.15
|
||||||
|
CockpitVAngleAccelerateTimeMax = 0.15
|
||||||
|
CockpitZoomAccelerateTimeMax = 0.2
|
||||||
|
|
||||||
|
function NaturalHeadMoving(tang, roll, omz)
|
||||||
|
local r = roll
|
||||||
|
if r > 90.0 then
|
||||||
|
r = 180.0 - r
|
||||||
|
elseif roll < -90.0 then
|
||||||
|
r = -180.0 - r
|
||||||
|
end
|
||||||
|
local hAngle = -0.25 * r
|
||||||
|
local vAngle = math.min(math.max(0.0, 0.4 * tang + 45.0 * omz), 90.0)
|
||||||
|
return hAngle, vAngle
|
||||||
|
end
|
||||||
|
|
||||||
|
ExternalMouse = true
|
||||||
|
ExternalMouseSpeedSlow = 1.0
|
||||||
|
ExternalMouseSpeedNormal = 5.0
|
||||||
|
ExternalMouseSpeedFast = 20.0
|
||||||
|
ExternalViewAngleMin = 3.0
|
||||||
|
ExternalViewAngleMax = 170.0
|
||||||
|
ExternalViewAngleDefault = 60.0
|
||||||
|
ExternalKeyboardZoomAcceleration = 30.0
|
||||||
|
ExternalKeyboardZoomAccelerateTimeMax = 1.0
|
||||||
|
ExplosionExpoTime = 4.0
|
||||||
|
ExternalKeyboardAccelerationSlow = 1.0
|
||||||
|
ExternalKeyboardAccelerationNormal = 10.0
|
||||||
|
ExternalKeyboardAccelerationFast = 30.0
|
||||||
|
ExternalHAngleAccelerateTimeMax = 3.0
|
||||||
|
ExternalVAngleAccelerateTimeMax = 3.0
|
||||||
|
ExternalDistAccelerateTimeMax = 3.0
|
||||||
|
ExternalHAngleLocalAccelerateTimeMax = 3.0
|
||||||
|
ExternalVAngleLocalAccelerateTimeMax = 3.0
|
||||||
|
ExternalAngleNormalDiscreteStep = 15.0/ExternalKeyboardAccelerationNormal -- When 'S' is pressed only
|
||||||
|
ChaseCameraNyMove = true
|
||||||
|
FreeCameraAngleIncrement = 3.0
|
||||||
|
FreeCameraDistanceIncrement = 200.0
|
||||||
|
FreeCameraLeftRightIncrement = 2.0
|
||||||
|
FreeCameraAltitudeIncrement = 2.0
|
||||||
|
FreeCameraScalarSpeedAcceleration = 0.1
|
||||||
|
xMinMap = -300000
|
||||||
|
xMaxMap = 500000
|
||||||
|
yMinMap = -400000
|
||||||
|
yMaxMap = 200000
|
||||||
|
dxMap = 150000
|
||||||
|
dyMap = 100000
|
||||||
|
|
||||||
|
head_roll_shaking = true
|
||||||
|
head_roll_shaking_max = 30.0
|
||||||
|
head_roll_shaking_compensation_gain = 0.3
|
||||||
|
|
||||||
|
-- CameraJiggle() and CameraFloat() functions make camera position
|
||||||
|
-- dependent on FPS so be careful in using the Shift-J command with tracks, please.
|
||||||
|
-- uncomment to use custom jiggle functions
|
||||||
|
--[[
|
||||||
|
function CameraJiggle(t,rnd1,rnd2,rnd3)
|
||||||
|
local rotX, rotY, rotZ
|
||||||
|
rotX = 0.05 * rnd1 * math.sin(37.0 * (t - 0.0))
|
||||||
|
rotY = 0.05 * rnd2 * math.sin(41.0 * (t - 1.0))
|
||||||
|
rotZ = 0.05 * rnd3 * math.sin(53.0 * (t - 2.0))
|
||||||
|
return rotX, rotY, rotZ
|
||||||
|
end
|
||||||
|
|
||||||
|
function CameraFloat(t)
|
||||||
|
local dX, dY, dZ
|
||||||
|
dX = 0.61 * math.sin(0.7 * t) + 0.047 * math.sin(1.6 * t);
|
||||||
|
dY = 0.43 * math.sin(0.6 * t) + 0.067 * math.sin(1.7 * t);
|
||||||
|
dZ = 0.53 * math.sin(1.0 * t) + 0.083 * math.sin(1.9 * t);
|
||||||
|
return dX, dY, dZ
|
||||||
|
end
|
||||||
|
--]]
|
||||||
|
--Debug keys
|
||||||
|
|
||||||
|
DEBUG_TEXT = 1
|
||||||
|
DEBUG_GEOMETRY = 2
|
||||||
|
|
||||||
|
debug_keys = {
|
||||||
|
[DEBUG_TEXT] = 1,
|
||||||
|
[DEBUG_GEOMETRY] = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function onDebugCommand(command)
|
||||||
|
if command == 10000 then
|
||||||
|
if debug_keys[DEBUG_TEXT] ~= 0 or debug_keys[DEBUG_GEOMETRY] ~= 0 then
|
||||||
|
debug_keys[DEBUG_GEOMETRY] = 0
|
||||||
|
debug_keys[DEBUG_TEXT] = 0
|
||||||
|
else
|
||||||
|
debug_keys[DEBUG_GEOMETRY] = 1
|
||||||
|
debug_keys[DEBUG_TEXT] = 1
|
||||||
|
end
|
||||||
|
elseif command == 10001 then
|
||||||
|
if debug_keys[DEBUG_TEXT] ~= 0 then
|
||||||
|
debug_keys[DEBUG_TEXT] = 0
|
||||||
|
else
|
||||||
|
debug_keys[DEBUG_TEXT] = 1
|
||||||
|
end
|
||||||
|
elseif command == 10002 then
|
||||||
|
if debug_keys[DEBUG_GEOMETRY] ~= 0 then
|
||||||
|
debug_keys[DEBUG_GEOMETRY] = 0
|
||||||
|
else
|
||||||
|
debug_keys[DEBUG_GEOMETRY] = 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- gain values for TrackIR , to unify responce on diffrent types of aircraft
|
||||||
|
TrackIR_gain_x = -0.6
|
||||||
|
TrackIR_gain_y = 0.3
|
||||||
|
TrackIR_gain_z = -0.25
|
||||||
|
TrackIR_gain_roll = -90
|
||||||
@ -0,0 +1,880 @@
|
|||||||
|
SAT_SYS_GLONASS = 0
|
||||||
|
SAT_SYS_GPS = 1
|
||||||
|
|
||||||
|
almanac = {}
|
||||||
|
--GPS
|
||||||
|
almanac[0] = {}
|
||||||
|
almanac[0]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[0]["Number"] = 1
|
||||||
|
almanac[0]["Orbital"] = "F"
|
||||||
|
almanac[0]["Eccentricity"] = 6.294000e-003
|
||||||
|
almanac[0]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[0]["Orbital_Inclination"] = 9.885676e-001
|
||||||
|
almanac[0]["Rate_of_Right_Ascen"] = -7.862702e-009
|
||||||
|
almanac[0]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[0]["Right_Ascen_at_Week"] = 8.096750e-001
|
||||||
|
almanac[0]["Argument_of_Perigee"] = -1.777773e+000
|
||||||
|
almanac[0]["Mean_Anom"] = -5.315745e-001
|
||||||
|
almanac[0]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[1] = {}
|
||||||
|
almanac[1]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[1]["Number"] = 2
|
||||||
|
almanac[1]["Orbital"] = "C"
|
||||||
|
almanac[1]["Eccentricity"] = 8.794000e-003
|
||||||
|
almanac[1]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[1]["Orbital_Inclination"] = 9.487811e-001
|
||||||
|
almanac[1]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[1]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[1]["Right_Ascen_at_Week"] = -1.329172e+000
|
||||||
|
almanac[1]["Argument_of_Perigee"] = 2.138637e+000
|
||||||
|
almanac[1]["Mean_Anom"] = 7.311702e-001
|
||||||
|
almanac[1]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[2] = {}
|
||||||
|
almanac[2]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[2]["Number"] = 3
|
||||||
|
almanac[2]["Orbital"] = "F"
|
||||||
|
almanac[2]["Eccentricity"] = 8.424000e-003
|
||||||
|
almanac[2]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[2]["Orbital_Inclination"] = 9.262804e-001
|
||||||
|
almanac[2]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[2]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[2]["Right_Ascen_at_Week"] = -2.341514e+000
|
||||||
|
almanac[2]["Argument_of_Perigee"] = 6.749357e-001
|
||||||
|
almanac[2]["Mean_Anom"] = -2.296153e-001
|
||||||
|
almanac[2]["week"] = 1389
|
||||||
|
|
||||||
|
almanac[3] = {}
|
||||||
|
almanac[3]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[3]["Number"] = 4
|
||||||
|
almanac[3]["Orbital"] = "D"
|
||||||
|
almanac[3]["Eccentricity"] = 7.413000e-003
|
||||||
|
almanac[3]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[3]["Orbital_Inclination"] = 9.482889e-001
|
||||||
|
almanac[3]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[3]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[3]["Right_Ascen_at_Week"] = -1.309589e+000
|
||||||
|
almanac[3]["Argument_of_Perigee"] = 1.623504e-001
|
||||||
|
almanac[3]["Mean_Anom"] = -3.022943e+000
|
||||||
|
almanac[3]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[4] = {}
|
||||||
|
almanac[4]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[4]["Number"] = 5
|
||||||
|
almanac[4]["Orbital"] = "B"
|
||||||
|
almanac[4]["Eccentricity"] = 7.432000e-003
|
||||||
|
almanac[4]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[4]["Orbital_Inclination"] = 9.387437e-001
|
||||||
|
almanac[4]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[4]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[4]["Right_Ascen_at_Week"] = 2.779487e+000
|
||||||
|
almanac[4]["Argument_of_Perigee"] = 1.099033e+000
|
||||||
|
almanac[4]["Mean_Anom"] = 2.970984e+000
|
||||||
|
almanac[4]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[5] = {}
|
||||||
|
almanac[5]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[5]["Number"] = 6
|
||||||
|
almanac[5]["Orbital"] = "C"
|
||||||
|
almanac[5]["Eccentricity"] = 6.020000e-003
|
||||||
|
almanac[5]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[5]["Orbital_Inclination"] = 9.337591e-001
|
||||||
|
almanac[5]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[5]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[5]["Right_Ascen_at_Week"] = -2.407627e+000
|
||||||
|
almanac[5]["Argument_of_Perigee"] = -1.788263e+000
|
||||||
|
almanac[5]["Mean_Anom"] = -2.149877e+000
|
||||||
|
almanac[5]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[6] = {}
|
||||||
|
almanac[6]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[6]["Number"] = 7
|
||||||
|
almanac[6]["Orbital"] = "C"
|
||||||
|
almanac[6]["Eccentricity"] = 1.052400e-002
|
||||||
|
almanac[6]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[6]["Orbital_Inclination"] = 9.353229e-001
|
||||||
|
almanac[6]["Rate_of_Right_Ascen"] = -8.080868e-009
|
||||||
|
almanac[6]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[6]["Right_Ascen_at_Week"] = -2.433580e+000
|
||||||
|
almanac[6]["Argument_of_Perigee"] = -1.767301e+000
|
||||||
|
almanac[6]["Mean_Anom"] = -3.141503e+000
|
||||||
|
almanac[6]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[7] = {}
|
||||||
|
almanac[7]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[7]["Number"] = 8
|
||||||
|
almanac[7]["Orbital"] = "A"
|
||||||
|
almanac[7]["Eccentricity"] = 9.822000e-003
|
||||||
|
almanac[7]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[7]["Orbital_Inclination"] = 9.741390e-001
|
||||||
|
almanac[7]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[7]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[7]["Right_Ascen_at_Week"] = 1.857849e+000
|
||||||
|
almanac[7]["Argument_of_Perigee"] = 2.674034e+000
|
||||||
|
almanac[7]["Mean_Anom"] = -2.009745e+000
|
||||||
|
almanac[7]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[8] = {}
|
||||||
|
almanac[8]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[8]["Number"] = 9
|
||||||
|
almanac[8]["Orbital"] = "A"
|
||||||
|
almanac[8]["Eccentricity"] = 1.839300e-002
|
||||||
|
almanac[8]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[8]["Orbital_Inclination"] = 9.617541e-001
|
||||||
|
almanac[8]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[8]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[8]["Right_Ascen_at_Week"] = 1.777005e+000
|
||||||
|
almanac[8]["Argument_of_Perigee"] = 1.274962e+000
|
||||||
|
almanac[8]["Mean_Anom"] = -2.349578e+000
|
||||||
|
almanac[8]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[9] = {}
|
||||||
|
almanac[9]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[9]["Number"] = 10
|
||||||
|
almanac[9]["Orbital"] = "E"
|
||||||
|
almanac[9]["Eccentricity"] = 7.061000e-003
|
||||||
|
almanac[9]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[9]["Orbital_Inclination"] = 9.728876e-001
|
||||||
|
almanac[9]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[9]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[9]["Right_Ascen_at_Week"] = -2.563014e-001
|
||||||
|
almanac[9]["Argument_of_Perigee"] = 4.377980e-001
|
||||||
|
almanac[9]["Mean_Anom"] = 1.210716e+000
|
||||||
|
almanac[9]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[10] = {}
|
||||||
|
almanac[10]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[10]["Number"] = 11
|
||||||
|
almanac[10]["Orbital"] = "D"
|
||||||
|
almanac[10]["Eccentricity"] = 5.744000e-003
|
||||||
|
almanac[10]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[10]["Orbital_Inclination"] = 8.959309e-001
|
||||||
|
almanac[10]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[10]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[10]["Right_Ascen_at_Week"] = -1.478816e+000
|
||||||
|
almanac[10]["Argument_of_Perigee"] = 3.750011e-001
|
||||||
|
almanac[10]["Mean_Anom"] = -1.522048e+000
|
||||||
|
almanac[10]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[11] = {}
|
||||||
|
almanac[11]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[11]["Number"] = 13
|
||||||
|
almanac[11]["Orbital"] = "F"
|
||||||
|
almanac[11]["Eccentricity"] = 3.088000e-003
|
||||||
|
almanac[11]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[11]["Orbital_Inclination"] = 9.927564e-001
|
||||||
|
almanac[11]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[11]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[11]["Right_Ascen_at_Week"] = 7.956600e-001
|
||||||
|
almanac[11]["Argument_of_Perigee"] = 1.279395e+000
|
||||||
|
almanac[11]["Mean_Anom"] = 1.004349e+000
|
||||||
|
almanac[11]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[12] = {}
|
||||||
|
almanac[12]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[12]["Number"] = 14
|
||||||
|
almanac[12]["Orbital"] = "F"
|
||||||
|
almanac[12]["Eccentricity"] = 2.591000e-003
|
||||||
|
almanac[12]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[12]["Orbital_Inclination"] = 9.868729e-001
|
||||||
|
almanac[12]["Rate_of_Right_Ascen"] = -7.885391e-009
|
||||||
|
almanac[12]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[12]["Right_Ascen_at_Week"] = 7.819592e-001
|
||||||
|
almanac[12]["Argument_of_Perigee"] = -2.158621e+000
|
||||||
|
almanac[12]["Mean_Anom"] = 5.412611e-001
|
||||||
|
almanac[12]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[13] = {}
|
||||||
|
almanac[13]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[13]["Number"] = 15
|
||||||
|
almanac[13]["Orbital"] = "D"
|
||||||
|
almanac[13]["Eccentricity"] = 9.828000e-003
|
||||||
|
almanac[13]["Time_of_Applicability"] = 3.194880e+005
|
||||||
|
almanac[13]["Orbital_Inclination"] = 9.554204e-001
|
||||||
|
almanac[13]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[13]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[13]["Right_Ascen_at_Week"] = -1.123869e+000
|
||||||
|
almanac[13]["Argument_of_Perigee"] = 2.690266e+000
|
||||||
|
almanac[13]["Mean_Anom"] = 2.220476e+000
|
||||||
|
almanac[13]["week"] = 1389
|
||||||
|
|
||||||
|
almanac[14] = {}
|
||||||
|
almanac[14]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[14]["Number"] = 16
|
||||||
|
almanac[14]["Orbital"] = "B"
|
||||||
|
almanac[14]["Eccentricity"] = 3.494000e-003
|
||||||
|
almanac[14]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[14]["Orbital_Inclination"] = 9.629340e-001
|
||||||
|
almanac[14]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[14]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[14]["Right_Ascen_at_Week"] = 2.873124e+000
|
||||||
|
almanac[14]["Argument_of_Perigee"] = -7.819243e-001
|
||||||
|
almanac[14]["Mean_Anom"] = 2.623629e+000
|
||||||
|
almanac[14]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[15] = {}
|
||||||
|
almanac[15]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[15]["Number"] = 17
|
||||||
|
almanac[15]["Orbital"] = "C"
|
||||||
|
almanac[15]["Eccentricity"] = 2.141000e-003
|
||||||
|
almanac[15]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[15]["Orbital_Inclination"] = 9.601170e-001
|
||||||
|
almanac[15]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[15]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[15]["Right_Ascen_at_Week"] = -2.371499e+000
|
||||||
|
almanac[15]["Argument_of_Perigee"] = 3.087694e+000
|
||||||
|
almanac[15]["Mean_Anom"] = 1.611217e+000
|
||||||
|
almanac[15]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[16] = {}
|
||||||
|
almanac[16]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[16]["Number"] = 18
|
||||||
|
almanac[16]["Orbital"] = "E"
|
||||||
|
almanac[16]["Eccentricity"] = 7.636000e-003
|
||||||
|
almanac[16]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[16]["Orbital_Inclination"] = 9.569597e-001
|
||||||
|
almanac[16]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[16]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[16]["Right_Ascen_at_Week"] = -2.359858e-001
|
||||||
|
almanac[16]["Argument_of_Perigee"] = -2.649216e+000
|
||||||
|
almanac[16]["Mean_Anom"] = 2.675029e+000
|
||||||
|
almanac[16]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[17] = {}
|
||||||
|
almanac[17]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[17]["Number"] = 19
|
||||||
|
almanac[17]["Orbital"] = "C"
|
||||||
|
almanac[17]["Eccentricity"] = 3.602000e-003
|
||||||
|
almanac[17]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[17]["Orbital_Inclination"] = 9.580209e-001
|
||||||
|
almanac[17]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[17]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[17]["Right_Ascen_at_Week"] = -2.312385e+000
|
||||||
|
almanac[17]["Argument_of_Perigee"] = -1.161079e+000
|
||||||
|
almanac[17]["Mean_Anom"] = 1.310619e+000
|
||||||
|
almanac[17]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[18] = {}
|
||||||
|
almanac[18]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[18]["Number"] = 20
|
||||||
|
almanac[18]["Orbital"] = "E"
|
||||||
|
almanac[18]["Eccentricity"] = 2.796000e-003
|
||||||
|
almanac[18]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[18]["Orbital_Inclination"] = 9.564693e-001
|
||||||
|
almanac[18]["Rate_of_Right_Ascen"] = -7.908080e-009
|
||||||
|
almanac[18]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[18]["Right_Ascen_at_Week"] = -2.889565e-001
|
||||||
|
almanac[18]["Argument_of_Perigee"] = 1.379612e+000
|
||||||
|
almanac[18]["Mean_Anom"] = 2.461750e+000
|
||||||
|
almanac[18]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[19] = {}
|
||||||
|
almanac[19]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[19]["Number"] = 21
|
||||||
|
almanac[19]["Orbital"] = "D"
|
||||||
|
almanac[19]["Eccentricity"] = 1.162900e-002
|
||||||
|
almanac[19]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[19]["Orbital_Inclination"] = 9.418592e-001
|
||||||
|
almanac[19]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[19]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[19]["Right_Ascen_at_Week"] = -1.289972e+000
|
||||||
|
almanac[19]["Argument_of_Perigee"] = -2.923686e+000
|
||||||
|
almanac[19]["Mean_Anom"] = -2.349194e+000
|
||||||
|
almanac[19]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[20] = {}
|
||||||
|
almanac[20]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[20]["Number"] = 22
|
||||||
|
almanac[20]["Orbital"] = "E"
|
||||||
|
almanac[20]["Eccentricity"] = 4.893000e-003
|
||||||
|
almanac[20]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[20]["Orbital_Inclination"] = 9.545093e-001
|
||||||
|
almanac[20]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[20]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[20]["Right_Ascen_at_Week"] = -2.280969e-001
|
||||||
|
almanac[20]["Argument_of_Perigee"] = -1.674502e+000
|
||||||
|
almanac[20]["Mean_Anom"] = 1.106852e+000
|
||||||
|
almanac[20]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[21] = {}
|
||||||
|
almanac[21]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[21]["Number"] = 23
|
||||||
|
almanac[21]["Orbital"] = "F"
|
||||||
|
almanac[21]["Eccentricity"] = 4.822000e-003
|
||||||
|
almanac[21]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[21]["Orbital_Inclination"] = 9.691247e-001
|
||||||
|
almanac[21]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[21]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[21]["Right_Ascen_at_Week"] = 7.667399e-001
|
||||||
|
almanac[21]["Argument_of_Perigee"] = 2.497634e+000
|
||||||
|
almanac[21]["Mean_Anom"] = 3.184700e-001
|
||||||
|
almanac[21]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[22] = {}
|
||||||
|
almanac[22]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[22]["Number"] = 24
|
||||||
|
almanac[22]["Orbital"] = "D"
|
||||||
|
almanac[22]["Eccentricity"] = 9.277000e-003
|
||||||
|
almanac[22]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[22]["Orbital_Inclination"] = 9.585183e-001
|
||||||
|
almanac[22]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[22]["SQRT_A"] = 5.153900e+003
|
||||||
|
almanac[22]["Right_Ascen_at_Week"] = -1.274840e+000
|
||||||
|
almanac[22]["Argument_of_Perigee"] = -8.815651e-001
|
||||||
|
almanac[22]["Mean_Anom"] = -1.695551e+000
|
||||||
|
almanac[22]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[23] = {}
|
||||||
|
almanac[23]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[23]["Number"] = 25
|
||||||
|
almanac[23]["Orbital"] = "A"
|
||||||
|
almanac[23]["Eccentricity"] = 1.257400e-002
|
||||||
|
almanac[23]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[23]["Orbital_Inclination"] = 9.551027e-001
|
||||||
|
almanac[23]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[23]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[23]["Right_Ascen_at_Week"] = 1.721853e+000
|
||||||
|
almanac[23]["Argument_of_Perigee"] = -1.329870e+000
|
||||||
|
almanac[23]["Mean_Anom"] = -1.769623e+000
|
||||||
|
almanac[23]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[24] = {}
|
||||||
|
almanac[24]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[24]["Number"] = 26
|
||||||
|
almanac[24]["Orbital"] = "F"
|
||||||
|
almanac[24]["Eccentricity"] = 1.745700e-002
|
||||||
|
almanac[24]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[24]["Orbital_Inclination"] = 9.908749e-001
|
||||||
|
almanac[24]["Rate_of_Right_Ascen"] = -7.840012e-009
|
||||||
|
almanac[24]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[24]["Right_Ascen_at_Week"] = 7.961836e-001
|
||||||
|
almanac[24]["Argument_of_Perigee"] = 8.161502e-001
|
||||||
|
almanac[24]["Mean_Anom"] = -5.841961e-001
|
||||||
|
almanac[24]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[25] = {}
|
||||||
|
almanac[25]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[25]["Number"] = 27
|
||||||
|
almanac[25]["Orbital"] = "A"
|
||||||
|
almanac[25]["Eccentricity"] = 1.991000e-002
|
||||||
|
almanac[25]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[25]["Orbital_Inclination"] = 9.596563e-001
|
||||||
|
almanac[25]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[25]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[25]["Right_Ascen_at_Week"] = 1.754124e+000
|
||||||
|
almanac[25]["Argument_of_Perigee"] = -1.900854e+000
|
||||||
|
almanac[25]["Mean_Anom"] = 3.046487e+000
|
||||||
|
almanac[25]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[26] = {}
|
||||||
|
almanac[26]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[26]["Number"] = 28
|
||||||
|
almanac[26]["Orbital"] = "B"
|
||||||
|
almanac[26]["Eccentricity"] = 1.162800e-002
|
||||||
|
almanac[26]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[26]["Orbital_Inclination"] = 9.610106e-001
|
||||||
|
almanac[26]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[26]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[26]["Right_Ascen_at_Week"] = 2.882583e+000
|
||||||
|
almanac[26]["Argument_of_Perigee"] = -2.242868e+000
|
||||||
|
almanac[26]["Mean_Anom"] = 1.860642e+000
|
||||||
|
almanac[26]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[27] = {}
|
||||||
|
almanac[27]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[27]["Number"] = 29
|
||||||
|
almanac[27]["Orbital"] = "F"
|
||||||
|
almanac[27]["Eccentricity"] = 9.462000e-003
|
||||||
|
almanac[27]["Time_of_Applicability"] = 1.474560e+005
|
||||||
|
almanac[27]["Orbital_Inclination"] = 9.874838e-001
|
||||||
|
almanac[27]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[27]["SQRT_A"] = 5.153700e+003
|
||||||
|
almanac[27]["Right_Ascen_at_Week"] = 7.647503e-001
|
||||||
|
almanac[27]["Argument_of_Perigee"] = -8.614589e-001
|
||||||
|
almanac[27]["Mean_Anom"] = -4.488983e-001
|
||||||
|
almanac[27]["week"] = 1390
|
||||||
|
|
||||||
|
almanac[28] = {}
|
||||||
|
almanac[28]["System"] = SAT_SYS_GPS
|
||||||
|
almanac[28]["Number"] = 30
|
||||||
|
almanac[28]["Orbital"] = "B"
|
||||||
|
almanac[28]["Eccentricity"] = 9.296000e-003
|
||||||
|
almanac[28]["Time_of_Applicability"] = 5.898240e+005
|
||||||
|
almanac[28]["Orbital_Inclination"] = 9.452992e-001
|
||||||
|
almanac[28]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[28]["SQRT_A"] = 5.153600e+003
|
||||||
|
almanac[28]["Right_Ascen_at_Week"] = 2.826698e+000
|
||||||
|
almanac[28]["Argument_of_Perigee"] = 1.306413e+000
|
||||||
|
almanac[28]["Mean_Anom"] = 2.148725e+000
|
||||||
|
almanac[28]["week"] = 1390
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--GLONASS
|
||||||
|
--1 îðáèòàëüíàÿ ïëîñêîñòü, íîìåðà 1-8
|
||||||
|
almanac[29] = {}
|
||||||
|
almanac[29]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[29]["Number"] = 1
|
||||||
|
almanac[29]["Orbital"] = 1
|
||||||
|
almanac[29]["GLONASS_Data"] = {}
|
||||||
|
almanac[29]["GLONASS_Data"]["NKU_Number"] = 796
|
||||||
|
almanac[29]["GLONASS_Data"]["Cosmos_Number"] = 2411
|
||||||
|
almanac[29]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[29]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[29]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[29]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[29]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[29]["Right_Ascen_at_Week"] = 5.979807e+000
|
||||||
|
almanac[29]["Argument_of_Perigee"] = 2.622634e+000
|
||||||
|
almanac[29]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[29]["week"] = 1390
|
||||||
|
almanac[29]["Commit_date"] = "06.02.2005"
|
||||||
|
almanac[29]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[30] = {}
|
||||||
|
almanac[30]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[30]["Number"] = 2
|
||||||
|
almanac[30]["Orbital"] = 1
|
||||||
|
almanac[30]["GLONASS_Data"] = {}
|
||||||
|
almanac[30]["GLONASS_Data"]["NKU_Number"] = 794
|
||||||
|
almanac[30]["GLONASS_Data"]["Cosmos_Number"] = 2401
|
||||||
|
almanac[30]["Eccentricity"] = 4.486000e-003
|
||||||
|
almanac[30]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[30]["Orbital_Inclination"] = 1.128459e+000
|
||||||
|
almanac[30]["Rate_of_Right_Ascen"] = -6.759654e-009
|
||||||
|
almanac[30]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[30]["Right_Ascen_at_Week"] = 5.997871e+000
|
||||||
|
almanac[30]["Argument_of_Perigee"] = 1.709531e+000
|
||||||
|
almanac[30]["Mean_Anom"] = -5.367633e+000
|
||||||
|
almanac[30]["week"] = 1390
|
||||||
|
almanac[30]["Commit_date"] = "02.02.2004"
|
||||||
|
almanac[30]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[31] = {}
|
||||||
|
almanac[31]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[31]["Number"] = 3
|
||||||
|
almanac[31]["Orbital"] = 1
|
||||||
|
almanac[31]["GLONASS_Data"] = {}
|
||||||
|
almanac[31]["GLONASS_Data"]["NKU_Number"] = 789
|
||||||
|
almanac[31]["GLONASS_Data"]["Cosmos_Number"] = 2381
|
||||||
|
almanac[31]["Eccentricity"] = 2.459000e-003
|
||||||
|
almanac[31]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[31]["Orbital_Inclination"] = 1.122958e+000
|
||||||
|
almanac[31]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[31]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[31]["Right_Ascen_at_Week"] = 5.960713e+000
|
||||||
|
almanac[31]["Argument_of_Perigee"] = -2.683407e+000
|
||||||
|
almanac[31]["Mean_Anom"] = -1.791788e+000
|
||||||
|
almanac[31]["week"] = 1390
|
||||||
|
almanac[31]["Commit_date"] = "04.01.2002"
|
||||||
|
almanac[31]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[32] = {}
|
||||||
|
almanac[32]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[32]["Number"] = 4
|
||||||
|
almanac[32]["Orbital"] = 1
|
||||||
|
almanac[32]["GLONASS_Data"] = {}
|
||||||
|
almanac[32]["GLONASS_Data"]["NKU_Number"] = 795
|
||||||
|
almanac[29]["GLONASS_Data"]["Cosmos_Number"] = 2403
|
||||||
|
almanac[32]["Eccentricity"] = 4.054000e-003
|
||||||
|
almanac[32]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[32]["Orbital_Inclination"] = 1.128543e+000
|
||||||
|
almanac[32]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[32]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[32]["Right_Ascen_at_Week"] = 5.998081e+000
|
||||||
|
almanac[32]["Argument_of_Perigee"] = 1.497160e+000
|
||||||
|
almanac[32]["Mean_Anom"] = -4.293681e-001
|
||||||
|
almanac[32]["week"] = 1390
|
||||||
|
almanac[32]["Commit_date"] = "29.01.2004"
|
||||||
|
almanac[32]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[33] = {}
|
||||||
|
almanac[33]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[33]["Number"] = 5
|
||||||
|
almanac[33]["Orbital"] = 1
|
||||||
|
almanac[33]["GLONASS_Data"] = {}
|
||||||
|
almanac[33]["GLONASS_Data"]["NKU_Number"] = 711
|
||||||
|
almanac[33]["GLONASS_Data"]["Cosmos_Number"] = 2382
|
||||||
|
almanac[33]["Eccentricity"] = 7.040000e-004
|
||||||
|
almanac[33]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[33]["Orbital_Inclination"] = 1.122886e+000
|
||||||
|
almanac[33]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[33]["SQRT_A"] = 5.050600e+003
|
||||||
|
almanac[33]["Right_Ascen_at_Week"] = 5.960713e+000
|
||||||
|
almanac[33]["Argument_of_Perigee"] = 2.740933e+000
|
||||||
|
almanac[33]["Mean_Anom"] = -2.523604e+000
|
||||||
|
almanac[33]["week"] = 1390
|
||||||
|
almanac[33]["Commit_date"] = "13.02.2003"
|
||||||
|
almanac[33]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[34] = {}
|
||||||
|
almanac[34]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[34]["Number"] = 6
|
||||||
|
almanac[34]["Orbital"] = 1
|
||||||
|
almanac[34]["GLONASS_Data"] = {}
|
||||||
|
almanac[34]["GLONASS_Data"]["NKU_Number"] = 701
|
||||||
|
almanac[34]["GLONASS_Data"]["Cosmos_Number"] = 2404
|
||||||
|
almanac[34]["Eccentricity"] = 4.766000e-003
|
||||||
|
almanac[34]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[34]["Orbital_Inclination"] = 1.128276e+000
|
||||||
|
almanac[34]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[34]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[34]["Right_Ascen_at_Week"] = 5.997906e+000
|
||||||
|
almanac[34]["Argument_of_Perigee"] = 1.802417e+000
|
||||||
|
almanac[34]["Mean_Anom"] = -2.426512e+000
|
||||||
|
almanac[34]["week"] = 1390
|
||||||
|
almanac[34]["Commit_date"] = "08.12.2004"
|
||||||
|
almanac[34]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[35] = {}
|
||||||
|
almanac[35]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[35]["Number"] = 7
|
||||||
|
almanac[35]["Orbital"] = 1
|
||||||
|
almanac[35]["GLONASS_Data"] = {}
|
||||||
|
almanac[35]["GLONASS_Data"]["NKU_Number"] = 712
|
||||||
|
almanac[35]["GLONASS_Data"]["Cosmos_Number"] = 2413
|
||||||
|
almanac[35]["Eccentricity"] = 7.570000e-004
|
||||||
|
almanac[35]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[35]["Orbital_Inclination"] = 1.126344e+000
|
||||||
|
almanac[35]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[35]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[35]["Right_Ascen_at_Week"] = 5.979388e+000
|
||||||
|
almanac[35]["Argument_of_Perigee"] = 2.566068e+000
|
||||||
|
almanac[35]["Mean_Anom"] = -3.921228e+000
|
||||||
|
almanac[35]["week"] = 1390
|
||||||
|
almanac[35]["Commit_date"] = "07.10.2005"
|
||||||
|
almanac[35]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[36] = {}
|
||||||
|
almanac[36]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[36]["GLONASS_Data"] = {}
|
||||||
|
almanac[36]["Number"] = 8
|
||||||
|
almanac[36]["Orbital"] = 1
|
||||||
|
almanac[36]["GLONASS_Data"] = {}
|
||||||
|
almanac[36]["GLONASS_Data"]["NKU_Number"] = 797
|
||||||
|
almanac[36]["GLONASS_Data"]["Cosmos_Number"] = 2412
|
||||||
|
almanac[36]["Eccentricity"] = 4.060000e-004
|
||||||
|
almanac[36]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[36]["Orbital_Inclination"] = 1.126564e+000
|
||||||
|
almanac[36]["Rate_of_Right_Ascen"] = -6.785834e-009
|
||||||
|
almanac[36]["SQRT_A"] = 5.050600e+003
|
||||||
|
almanac[36]["Right_Ascen_at_Week"] = 5.980069e+000
|
||||||
|
almanac[36]["Argument_of_Perigee"] = 2.673633e+000
|
||||||
|
almanac[36]["Mean_Anom"] = -4.812026e+000
|
||||||
|
almanac[36]["week"] = 1390
|
||||||
|
almanac[36]["Commit_date"] = "06.02.2005"
|
||||||
|
almanac[36]["Life_dates"] = {}
|
||||||
|
|
||||||
|
--3 îðáèòàëüíàÿ ïëîñêîñòü, íîìåðà 17-24
|
||||||
|
almanac[37] = {}
|
||||||
|
almanac[37]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[37]["Number"] = 17
|
||||||
|
almanac[37]["Orbital"] = 3
|
||||||
|
almanac[37]["GLONASS_Data"] = {}
|
||||||
|
almanac[37]["GLONASS_Data"]["NKU_Number"] = 787
|
||||||
|
almanac[37]["GLONASS_Data"]["Cosmos_Number"] = 2375
|
||||||
|
almanac[37]["Eccentricity"] = 5.670000e-004
|
||||||
|
almanac[37]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[37]["Orbital_Inclination"] = 1.126524e+000
|
||||||
|
almanac[37]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[37]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[37]["Right_Ascen_at_Week"] = 3.895554e+000
|
||||||
|
almanac[37]["Argument_of_Perigee"] = 6.085085e-001
|
||||||
|
almanac[37]["Mean_Anom"] = -2.977407e+000
|
||||||
|
almanac[37]["week"] = 1390
|
||||||
|
almanac[37]["Commit_date"] = "04.11.2000"
|
||||||
|
almanac[37]["Life_dates"] = {}
|
||||||
|
|
||||||
|
|
||||||
|
almanac[38] = {}
|
||||||
|
almanac[38]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[38]["Number"] = 18
|
||||||
|
almanac[38]["Orbital"] = 3
|
||||||
|
almanac[38]["GLONASS_Data"] = {}
|
||||||
|
almanac[38]["GLONASS_Data"]["NKU_Number"] = 783
|
||||||
|
almanac[38]["GLONASS_Data"]["Cosmos_Number"] = 2374
|
||||||
|
almanac[38]["Eccentricity"] = 4.520000e-003
|
||||||
|
almanac[38]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[38]["Orbital_Inclination"] = 1.126239e+000
|
||||||
|
almanac[38]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[38]["SQRT_A"] = 5.050600e+003
|
||||||
|
almanac[38]["Right_Ascen_at_Week"] = 3.894071e+000
|
||||||
|
almanac[38]["Argument_of_Perigee"] = -2.509589e+000
|
||||||
|
almanac[38]["Mean_Anom"] = -1.020057e+000
|
||||||
|
almanac[38]["week"] = 1390
|
||||||
|
almanac[38]["Commit_date"] = "05.01.2001"
|
||||||
|
almanac[38]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[39] = {}
|
||||||
|
almanac[39]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[39]["Number"] = 19
|
||||||
|
almanac[39]["Orbital"] = 3
|
||||||
|
almanac[39]["GLONASS_Data"] = {}
|
||||||
|
almanac[39]["GLONASS_Data"]["NKU_Number"] = 798
|
||||||
|
almanac[39]["GLONASS_Data"]["Cosmos_Number"] = 2417
|
||||||
|
almanac[39]["Eccentricity"] = 2.023000e-003
|
||||||
|
almanac[39]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[39]["Orbital_Inclination"] = 1.132205e+000
|
||||||
|
almanac[39]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[39]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[39]["Right_Ascen_at_Week"] = 3.884018e+000
|
||||||
|
almanac[39]["Argument_of_Perigee"] = 2.718313e+000
|
||||||
|
almanac[39]["Mean_Anom"] = -3.933620e-001
|
||||||
|
almanac[39]["week"] = 1390
|
||||||
|
almanac[39]["Commit_date"] = "22.01.2006"
|
||||||
|
almanac[39]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[40] = {}
|
||||||
|
almanac[40]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[40]["Number"] = 20
|
||||||
|
almanac[40]["Orbital"] = 3
|
||||||
|
almanac[40]["GLONASS_Data"] = {}
|
||||||
|
almanac[40]["GLONASS_Data"]["NKU_Number"] = 793
|
||||||
|
almanac[40]["GLONASS_Data"]["Cosmos_Number"] = 2396
|
||||||
|
almanac[40]["Eccentricity"] = 1.822000e-003
|
||||||
|
almanac[40]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[40]["Orbital_Inclination"] = 1.129789e+000
|
||||||
|
almanac[40]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[40]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[40]["Right_Ascen_at_Week"] = 3.896863e+000
|
||||||
|
almanac[40]["Argument_of_Perigee"] = 2.723776e+000
|
||||||
|
almanac[40]["Mean_Anom"] = -1.193647e+000
|
||||||
|
almanac[40]["week"] = 1390
|
||||||
|
almanac[40]["Commit_date"] = "31.01.2003"
|
||||||
|
almanac[40]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[41] = {}
|
||||||
|
almanac[41]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[41]["Number"] = 21
|
||||||
|
almanac[41]["Orbital"] = 3
|
||||||
|
almanac[41]["GLONASS_Data"] = {}
|
||||||
|
almanac[41]["GLONASS_Data"]["NKU_Number"] = 792
|
||||||
|
almanac[41]["GLONASS_Data"]["Cosmos_Number"] = 2395
|
||||||
|
almanac[41]["Eccentricity"] = 5.290000e-004
|
||||||
|
almanac[41]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[41]["Orbital_Inclination"] = 1.129957e+000
|
||||||
|
almanac[41]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[41]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[41]["Right_Ascen_at_Week"] = 3.897806e+000
|
||||||
|
almanac[41]["Argument_of_Perigee"] = -9.519367e-001
|
||||||
|
almanac[41]["Mean_Anom"] = -4.578920e+000
|
||||||
|
almanac[41]["week"] = 1390
|
||||||
|
almanac[41]["Commit_date"] = "31.01.2003"
|
||||||
|
almanac[41]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[42] = {}
|
||||||
|
almanac[42]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[42]["Number"] = 22
|
||||||
|
almanac[42]["Orbital"] = 3
|
||||||
|
almanac[42]["GLONASS_Data"] = {}
|
||||||
|
almanac[42]["GLONASS_Data"]["NKU_Number"] = 791
|
||||||
|
almanac[42]["GLONASS_Data"]["Cosmos_Number"] = 2394
|
||||||
|
almanac[42]["Eccentricity"] = 9.200000e-005
|
||||||
|
almanac[42]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[42]["Orbital_Inclination"] = 1.129742e+000
|
||||||
|
almanac[42]["Rate_of_Right_Ascen"] = -6.740456e-009
|
||||||
|
almanac[42]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[42]["Right_Ascen_at_Week"] = 3.897404e+000
|
||||||
|
almanac[42]["Argument_of_Perigee"] = 2.518211e+000
|
||||||
|
almanac[42]["Mean_Anom"] = -2.530167e+000
|
||||||
|
almanac[42]["week"] = 1390
|
||||||
|
almanac[42]["Commit_date"] = "21.01.2003"
|
||||||
|
almanac[42]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[43] = {}
|
||||||
|
almanac[43]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[43]["Number"] = 23
|
||||||
|
almanac[43]["Orbital"] = 3
|
||||||
|
almanac[43]["GLONASS_Data"] = {}
|
||||||
|
almanac[43]["GLONASS_Data"]["NKU_Number"] = 714
|
||||||
|
almanac[43]["GLONASS_Data"]["Cosmos_Number"] = 2419
|
||||||
|
almanac[43]["Eccentricity"] = 8.730000e-004
|
||||||
|
almanac[43]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[43]["Orbital_Inclination"] = 1.132105e+000
|
||||||
|
almanac[43]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[43]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[43]["Right_Ascen_at_Week"] = 3.883808e+000
|
||||||
|
almanac[43]["Argument_of_Perigee"] = -3.039139e-001
|
||||||
|
almanac[43]["Mean_Anom"] = -5.228304e-001
|
||||||
|
almanac[43]["week"] = 1390
|
||||||
|
almanac[43]["Commit_date"] = "31.08.2006"
|
||||||
|
almanac[43]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[44] = {}
|
||||||
|
almanac[44]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[44]["Number"] = 24
|
||||||
|
almanac[44]["Orbital"] = 3
|
||||||
|
almanac[44]["GLONASS_Data"] = {}
|
||||||
|
almanac[44]["GLONASS_Data"]["NKU_Number"] = 713
|
||||||
|
almanac[44]["GLONASS_Data"]["Cosmos_Number"] = 2418
|
||||||
|
almanac[44]["Eccentricity"] = 2.044000e-003
|
||||||
|
almanac[44]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[44]["Orbital_Inclination"] = 1.132430e+000
|
||||||
|
almanac[44]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[44]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[44]["Right_Ascen_at_Week"] = 3.883983e+000
|
||||||
|
almanac[44]["Argument_of_Perigee"] = -3.722784e-001
|
||||||
|
almanac[44]["Mean_Anom"] = -1.240457e+000
|
||||||
|
almanac[44]["week"] = 1390
|
||||||
|
almanac[44]["Commit_date"] = "31.08.2006"
|
||||||
|
almanac[44]["Life_dates"] = {}
|
||||||
|
|
||||||
|
--2 îðáèòàëüíàÿ ïëîñêîñòü, íîìåðà 9-16
|
||||||
|
almanac[45] = {}
|
||||||
|
almanac[45]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[45]["Number"] = 9
|
||||||
|
almanac[45]["Orbital"] = 2
|
||||||
|
almanac[45]["GLONASS_Data"] = {}
|
||||||
|
almanac[45]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||||
|
almanac[45]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||||
|
almanac[45]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[45]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[45]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[45]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[45]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[45]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||||
|
almanac[45]["Argument_of_Perigee"] = 2.88430067
|
||||||
|
almanac[45]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[45]["week"] = 1390
|
||||||
|
almanac[45]["Commit_date"] = "N/A"
|
||||||
|
almanac[45]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[46] = {}
|
||||||
|
almanac[46]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[46]["Number"] = 10
|
||||||
|
almanac[46]["Orbital"] = 2
|
||||||
|
almanac[46]["GLONASS_Data"] = {}
|
||||||
|
almanac[46]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||||
|
almanac[46]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||||
|
almanac[46]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[46]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[46]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[46]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[46]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[46]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||||
|
almanac[46]["Argument_of_Perigee"] = 3.66930067
|
||||||
|
almanac[46]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[46]["week"] = 1390
|
||||||
|
almanac[46]["Commit_date"] = "N/A"
|
||||||
|
almanac[46]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[47] = {}
|
||||||
|
almanac[47]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[47]["Number"] = 11
|
||||||
|
almanac[47]["Orbital"] = 2
|
||||||
|
almanac[47]["GLONASS_Data"] = {}
|
||||||
|
almanac[47]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||||
|
almanac[47]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||||
|
almanac[47]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[47]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[47]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[47]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[47]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[47]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||||
|
almanac[47]["Argument_of_Perigee"] = 4.45430067
|
||||||
|
almanac[47]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[47]["week"] = 1390
|
||||||
|
almanac[47]["Commit_date"] = "N/A"
|
||||||
|
almanac[47]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[48] = {}
|
||||||
|
almanac[48]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[48]["Number"] = 12
|
||||||
|
almanac[48]["Orbital"] = 2
|
||||||
|
almanac[48]["GLONASS_Data"] = {}
|
||||||
|
almanac[48]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||||
|
almanac[48]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||||
|
almanac[48]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[48]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[48]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[48]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[48]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[48]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||||
|
almanac[48]["Argument_of_Perigee"] = 5.23930067
|
||||||
|
almanac[48]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[48]["week"] = 1390
|
||||||
|
almanac[48]["Commit_date"] = "N/A"
|
||||||
|
almanac[48]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[49] = {}
|
||||||
|
almanac[49]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[49]["Number"] = 13
|
||||||
|
almanac[49]["Orbital"] = 2
|
||||||
|
almanac[49]["GLONASS_Data"] = {}
|
||||||
|
almanac[49]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||||
|
almanac[49]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||||
|
almanac[49]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[49]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[49]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[49]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[49]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[49]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||||
|
almanac[49]["Argument_of_Perigee"] = 6.02430067
|
||||||
|
almanac[49]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[49]["week"] = 1390
|
||||||
|
almanac[49]["Commit_date"] = "N/A"
|
||||||
|
almanac[49]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[50] = {}
|
||||||
|
almanac[50]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[50]["Number"] = 14
|
||||||
|
almanac[50]["Orbital"] = 2
|
||||||
|
almanac[50]["GLONASS_Data"] = {}
|
||||||
|
almanac[50]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||||
|
almanac[50]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||||
|
almanac[50]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[50]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[50]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[50]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[50]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[50]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||||
|
almanac[50]["Argument_of_Perigee"] = 0.52930067
|
||||||
|
almanac[50]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[50]["week"] = 1390
|
||||||
|
almanac[50]["Commit_date"] = "N/A"
|
||||||
|
almanac[50]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[51] = {}
|
||||||
|
almanac[51]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[51]["Number"] = 15
|
||||||
|
almanac[51]["Orbital"] = 2
|
||||||
|
almanac[51]["GLONASS_Data"] = {}
|
||||||
|
almanac[51]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||||
|
almanac[51]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||||
|
almanac[51]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[51]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[51]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[51]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[51]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[51]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||||
|
almanac[51]["Argument_of_Perigee"] = 1.31430067
|
||||||
|
almanac[51]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[51]["week"] = 1390
|
||||||
|
almanac[51]["Commit_date"] = "N/A"
|
||||||
|
almanac[51]["Life_dates"] = {}
|
||||||
|
|
||||||
|
almanac[52] = {}
|
||||||
|
almanac[52]["System"] = SAT_SYS_GLONASS
|
||||||
|
almanac[52]["Number"] = 16
|
||||||
|
almanac[52]["Orbital"] = 2
|
||||||
|
almanac[52]["GLONASS_Data"] = {}
|
||||||
|
almanac[52]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||||
|
almanac[52]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||||
|
almanac[52]["Eccentricity"] = 1.184000e-003
|
||||||
|
almanac[52]["Time_of_Applicability"] = 0.000000e+000
|
||||||
|
almanac[52]["Orbital_Inclination"] = 1.126443e+000
|
||||||
|
almanac[52]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||||
|
almanac[52]["SQRT_A"] = 5.050500e+003
|
||||||
|
almanac[52]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||||
|
almanac[52]["Argument_of_Perigee"] = 2.09930067
|
||||||
|
almanac[52]["Mean_Anom"] = -5.519651e+000
|
||||||
|
almanac[52]["week"] = 1390
|
||||||
|
almanac[52]["Commit_date"] = "N/A"
|
||||||
|
almanac[52]["Life_dates"] = {}
|
||||||
|
|
||||||
|
SA_mode = false
|
||||||
|
AS_mode = false
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
birds_avail = true --Birds availability. false - there is no birds
|
||||||
|
birds_maximum_hrad = 200 --Maximum altitude above ground al sea level bird could be met
|
||||||
|
birds_maximum_absolute_height = 8000 --Maximum absolute altitude bird could be met
|
||||||
|
birds_minimum_velocity = 40 --Minimum velocity bird could be met
|
||||||
|
birds_delta_time = 3.55
|
||||||
|
birds_probability = {0.006333333*150,
|
||||||
|
0.004166667*150,
|
||||||
|
0.001966667*150,
|
||||||
|
0.001090909*150,
|
||||||
|
0.000741818*150,
|
||||||
|
0.0006*150,
|
||||||
|
0.000510545*150,
|
||||||
|
0.000447273*150,
|
||||||
|
0.000389455*150,
|
||||||
|
0.000349091*150,
|
||||||
|
0.000310909*150,
|
||||||
|
0.000282545*150,
|
||||||
|
0.000250909*150,
|
||||||
|
0.000220364*150,
|
||||||
|
0.000196364*150,
|
||||||
|
0.000174545*150,
|
||||||
|
0.000152727*150,
|
||||||
|
0.000128727*150,
|
||||||
|
0.000103636*150,
|
||||||
|
7.63636E-05*150,
|
||||||
|
0*150
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
settings=
|
||||||
|
{
|
||||||
|
["dials"]=
|
||||||
|
{
|
||||||
|
["channel"]=-1,
|
||||||
|
},
|
||||||
|
["presets"]=
|
||||||
|
{
|
||||||
|
[1]=124000000,
|
||||||
|
[2]=124000000,
|
||||||
|
[3]=131000000,
|
||||||
|
[4]=139000000,
|
||||||
|
},
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
-- Name: AIB-005 - Patrol AI and Randomize Zones
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 10 Jan 2016
|
||||||
|
--
|
||||||
|
-- # Situation:
|
||||||
|
--
|
||||||
|
-- For the red coalition, 2 client slots are foreseen.
|
||||||
|
-- For those players that have not joined the mission, red AI is spawned.
|
||||||
|
-- The red AI should start patrolling an area until fuel is empty and return to the home base.
|
||||||
|
-- For each AI being spawned, ensure that they fly to a random zone defined within the mission editor.
|
||||||
|
-- Right now there are two patrol zones defined, so the AI should start patrolliing in one of these zones.
|
||||||
|
--
|
||||||
|
-- # Test cases:
|
||||||
|
--
|
||||||
|
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
|
||||||
|
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
||||||
|
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
||||||
|
-- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa.
|
||||||
|
-- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa.
|
||||||
|
-- 6. Ensure that you see the AI patrol in one of the two zones ...
|
||||||
|
|
||||||
|
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||||
|
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||||
|
|
||||||
|
-- Define the SPAWN object for the red AI plane template.
|
||||||
|
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||||
|
-- If a blocked plane exists, this red plane will be ReSpawned.
|
||||||
|
local RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
|
||||||
|
|
||||||
|
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
|
||||||
|
local RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
||||||
|
|
||||||
|
-- Create the first polygon zone ...
|
||||||
|
local PatrolZoneGroup1 = GROUP:FindByName( "PatrolZone1" )
|
||||||
|
local PatrolZone1 = ZONE_POLYGON:New( "PatrolZone1", PatrolZoneGroup1 )
|
||||||
|
|
||||||
|
-- Create the second polygon zone ...
|
||||||
|
local PatrolZoneGroup2 = GROUP:FindByName( "PatrolZone2" )
|
||||||
|
local PatrolZone2 = ZONE_POLYGON:New( "PatrolZone2", PatrolZoneGroup2 )
|
||||||
|
|
||||||
|
-- Now, create an array of these zones ...
|
||||||
|
local PatrolZoneArray = { PatrolZone1, PatrolZone2 }
|
||||||
|
|
||||||
|
function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
|
||||||
|
|
||||||
|
local Patrol = AI_PATROL_ZONE:New( PatrolZoneArray[math.random( 1, 2 )], 3000, 6000, 400, 600 )
|
||||||
|
Patrol:ManageFuel( 0.2, 60 )
|
||||||
|
Patrol:SetControllable( AIGroup )
|
||||||
|
Patrol:Start()
|
||||||
|
|
||||||
|
end
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' )
|
||||||
|
env.info( 'Moose Generation Timestamp: 20170116_2116' )
|
||||||
|
|
||||||
|
local base = _G
|
||||||
|
|
||||||
|
Include = {}
|
||||||
|
|
||||||
|
Include.File = function( IncludeFile )
|
||||||
|
if not Include.Files[ IncludeFile ] then
|
||||||
|
Include.Files[IncludeFile] = IncludeFile
|
||||||
|
env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath )
|
||||||
|
local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) )
|
||||||
|
if f == nil then
|
||||||
|
error ("Could not load MOOSE file " .. IncludeFile .. ".lua" )
|
||||||
|
else
|
||||||
|
env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath )
|
||||||
|
return f()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Include.ProgramPath = "Scripts/Moose/"
|
||||||
|
|
||||||
|
env.info( "Include.ProgramPath = " .. Include.ProgramPath)
|
||||||
|
|
||||||
|
Include.Files = {}
|
||||||
|
|
||||||
|
Include.File( "Moose" )
|
||||||
|
|
||||||
|
BASE:TraceOnOff( true )
|
||||||
|
env.info( '*** MOOSE INCLUDE END *** ' )
|
||||||
@ -0,0 +1,416 @@
|
|||||||
|
dictionary =
|
||||||
|
{
|
||||||
|
["DictKey_UnitName_89"] = "",
|
||||||
|
["DictKey_UnitName_67"] = "AI US 1",
|
||||||
|
["DictKey_UnitName_156"] = "RU Client #020",
|
||||||
|
["DictKey_UnitName_297"] = "US Client #023",
|
||||||
|
["DictKey_WptName_310"] = "",
|
||||||
|
["DictKey_GroupName_125"] = "RU Client #010",
|
||||||
|
["DictKey_UnitName_135"] = "RU Client #013",
|
||||||
|
["DictKey_UnitName_374"] = "RU Client #004",
|
||||||
|
["DictKey_WptName_292"] = "",
|
||||||
|
["DictKey_WptName_48"] = "",
|
||||||
|
["DictKey_GroupName_137"] = "RU Client #014",
|
||||||
|
["DictKey_WptName_70"] = "",
|
||||||
|
["DictKey_WptName_295"] = "",
|
||||||
|
["DictKey_UnitName_25"] = "AI RU",
|
||||||
|
["DictKey_GroupName_113"] = "RU Client #006",
|
||||||
|
["DictKey_GroupName_284"] = "US Client #019",
|
||||||
|
["DictKey_UnitName_312"] = "US Client #028",
|
||||||
|
["DictKey_WptName_13"] = "",
|
||||||
|
["DictKey_WptName_124"] = "",
|
||||||
|
["DictKey_WptName_217"] = "",
|
||||||
|
["DictKey_GroupName_10"] = "Client Group 2",
|
||||||
|
["DictKey_GroupName_302"] = "US Client #025",
|
||||||
|
["DictKey_UnitName_258"] = "US Client #010",
|
||||||
|
["DictKey_WptName_181"] = "",
|
||||||
|
["DictKey_WptName_109"] = "",
|
||||||
|
["DictKey_WptName_336"] = "",
|
||||||
|
["DictKey_GroupName_311"] = "US Client #028",
|
||||||
|
["DictKey_GroupName_242"] = "US Client #005",
|
||||||
|
["DictKey_UnitName_74"] = "Pilot #004",
|
||||||
|
["DictKey_WptName_136"] = "",
|
||||||
|
["DictKey_WptName_99"] = "",
|
||||||
|
["DictKey_UnitName_315"] = "US Client #029",
|
||||||
|
["DictKey_UnitName_43"] = "Client 5",
|
||||||
|
["DictKey_GroupName_331"] = "PatrolZone2",
|
||||||
|
["DictKey_WptName_178"] = "",
|
||||||
|
["DictKey_GroupName_30"] = "AI RU",
|
||||||
|
["DictKey_UnitName_249"] = "US Client #007",
|
||||||
|
["DictKey_WptName_53"] = "",
|
||||||
|
["DictKey_UnitName_171"] = "RU Client #025",
|
||||||
|
["DictKey_WptName_289"] = "",
|
||||||
|
["DictKey_GroupName_352"] = "RU Client #008",
|
||||||
|
["DictKey_GroupName_260"] = "US Client #011",
|
||||||
|
["DictKey_descriptionRedTask_2"] = "",
|
||||||
|
["DictKey_WptName_55"] = "",
|
||||||
|
["DictKey_GroupName_33"] = "AI RU",
|
||||||
|
["DictKey_UnitName_183"] = "RU Client #029",
|
||||||
|
["DictKey_WptName_190"] = "",
|
||||||
|
["DictKey_UnitName_216"] = "RU Client #040",
|
||||||
|
["DictKey_WptName_286"] = "",
|
||||||
|
["DictKey_UnitName_153"] = "RU Client #019",
|
||||||
|
["DictKey_WptName_75"] = "",
|
||||||
|
["DictKey_UnitName_105"] = "RU Client #003",
|
||||||
|
["DictKey_GroupName_382"] = "RU Client #007",
|
||||||
|
["DictKey_UnitName_270"] = "US Client #014",
|
||||||
|
["DictKey_WptName_47"] = "",
|
||||||
|
["DictKey_GroupName_170"] = "RU Client #025",
|
||||||
|
["DictKey_UnitName_46"] = "Client 7",
|
||||||
|
["DictKey_WptName_92"] = "",
|
||||||
|
["DictKey_UnitName_380"] = "RU Client #006",
|
||||||
|
["DictKey_GroupName_191"] = "RU Client #032",
|
||||||
|
["DictKey_UnitName_40"] = "Client 6",
|
||||||
|
["DictKey_UnitName_95"] = "Pilot #002",
|
||||||
|
["DictKey_GroupName_296"] = "US Client #023",
|
||||||
|
["DictKey_WptName_244"] = "",
|
||||||
|
["DictKey_UnitName_377"] = "RU Client #005",
|
||||||
|
["DictKey_WptName_9"] = "",
|
||||||
|
["DictKey_UnitName_11"] = "Client 2",
|
||||||
|
["DictKey_GroupName_308"] = "US Client #027",
|
||||||
|
["DictKey_GroupName_27"] = "AI RU",
|
||||||
|
["DictKey_UnitName_22"] = "Client 4",
|
||||||
|
["DictKey_WptName_62"] = "",
|
||||||
|
["DictKey_GroupName_367"] = "RU Client #002",
|
||||||
|
["DictKey_sortie_4"] = "",
|
||||||
|
["DictKey_WptName_333"] = "",
|
||||||
|
["DictKey_UnitName_356"] = "RU Client #009",
|
||||||
|
["DictKey_GroupName_152"] = "RU Client #019",
|
||||||
|
["DictKey_GroupName_281"] = "US Client #018",
|
||||||
|
["DictKey_WptName_235"] = "",
|
||||||
|
["DictKey_UnitName_362"] = "RU Client #011",
|
||||||
|
["DictKey_WptName_375"] = "",
|
||||||
|
["DictKey_GroupName_379"] = "RU Client #006",
|
||||||
|
["DictKey_UnitName_267"] = "US Client #013",
|
||||||
|
["DictKey_GroupName_173"] = "RU Client #026",
|
||||||
|
["DictKey_GroupName_248"] = "US Client #007",
|
||||||
|
["DictKey_WptName_369"] = "",
|
||||||
|
["DictKey_UnitName_58"] = "Pilot #003",
|
||||||
|
["DictKey_WptName_160"] = "",
|
||||||
|
["DictKey_UnitName_246"] = "US Client #006",
|
||||||
|
["DictKey_WptName_163"] = "",
|
||||||
|
["DictKey_WptName_98"] = "",
|
||||||
|
["DictKey_GroupName_340"] = "RU Client #004",
|
||||||
|
["DictKey_UnitName_365"] = "RU Client #012",
|
||||||
|
["DictKey_GroupName_221"] = "RU Client #042",
|
||||||
|
["DictKey_UnitName_318"] = "US Client #030",
|
||||||
|
["DictKey_GroupName_158"] = "RU Client #021",
|
||||||
|
["DictKey_GroupName_320"] = "US Client #031",
|
||||||
|
["DictKey_UnitName_34"] = "AI RU",
|
||||||
|
["DictKey_WptName_208"] = "",
|
||||||
|
["DictKey_WptName_334"] = "",
|
||||||
|
["DictKey_WptName_54"] = "",
|
||||||
|
["DictKey_WptName_82"] = "",
|
||||||
|
["DictKey_UnitName_383"] = "RU Client #007",
|
||||||
|
["DictKey_UnitName_234"] = "US Client #002",
|
||||||
|
["DictKey_GroupName_104"] = "RU Client #003",
|
||||||
|
["DictKey_UnitName_368"] = "RU Client #002",
|
||||||
|
["DictKey_WptName_366"] = "",
|
||||||
|
["DictKey_GroupName_206"] = "RU Client #037",
|
||||||
|
["DictKey_GroupName_24"] = "AI RU",
|
||||||
|
["DictKey_GroupName_325"] = "PatrolZone1",
|
||||||
|
["DictKey_UnitName_225"] = "RU Client #043",
|
||||||
|
["DictKey_WptName_328"] = "",
|
||||||
|
["DictKey_WptName_193"] = "",
|
||||||
|
["DictKey_UnitName_219"] = "RU Client #041",
|
||||||
|
["DictKey_WptName_68"] = "",
|
||||||
|
["DictKey_GroupName_122"] = "RU Client #009",
|
||||||
|
["DictKey_GroupName_266"] = "US Client #013",
|
||||||
|
["DictKey_UnitName_350"] = "RU Client #007",
|
||||||
|
["DictKey_UnitName_341"] = "RU Client #004",
|
||||||
|
["DictKey_UnitName_228"] = "RU Client #044",
|
||||||
|
["DictKey_UnitName_204"] = "RU Client #036",
|
||||||
|
["DictKey_WptName_49"] = "",
|
||||||
|
["DictKey_UnitName_303"] = "US Client #025",
|
||||||
|
["DictKey_GroupName_245"] = "US Client #006",
|
||||||
|
["DictKey_GroupName_275"] = "US Client #016",
|
||||||
|
["DictKey_WptName_90"] = "",
|
||||||
|
["DictKey_UnitName_222"] = "RU Client #042",
|
||||||
|
["DictKey_GroupName_110"] = "RU Client #005",
|
||||||
|
["DictKey_UnitName_120"] = "RU Client #008",
|
||||||
|
["DictKey_WptName_280"] = "",
|
||||||
|
["DictKey_UnitName_144"] = "RU Client #016",
|
||||||
|
["DictKey_UnitName_306"] = "US Client #026",
|
||||||
|
["DictKey_WptName_118"] = "",
|
||||||
|
["DictKey_WptName_307"] = "",
|
||||||
|
["DictKey_UnitName_129"] = "RU Client #011",
|
||||||
|
["DictKey_GroupName_59"] = "Client Group Range 1",
|
||||||
|
["DictKey_GroupName_164"] = "RU Client #023",
|
||||||
|
["DictKey_UnitName_252"] = "US Client #008",
|
||||||
|
["DictKey_WptName_61"] = "",
|
||||||
|
["DictKey_WptName_184"] = "",
|
||||||
|
["DictKey_GroupName_361"] = "RU Client #011",
|
||||||
|
["DictKey_WptName_80"] = "",
|
||||||
|
["DictKey_GroupName_299"] = "US Client #024",
|
||||||
|
["DictKey_GroupName_314"] = "US Client #029",
|
||||||
|
["DictKey_WptName_86"] = "",
|
||||||
|
["DictKey_GroupName_346"] = "RU Client #006",
|
||||||
|
["DictKey_WptName_205"] = "",
|
||||||
|
["DictKey_WptName_390"] = "",
|
||||||
|
["DictKey_WptName_196"] = "",
|
||||||
|
["DictKey_GroupName_263"] = "US Client #012",
|
||||||
|
["DictKey_WptName_238"] = "",
|
||||||
|
["DictKey_WptName_51"] = "",
|
||||||
|
["DictKey_UnitName_150"] = "RU Client #018",
|
||||||
|
["DictKey_WptName_76"] = "",
|
||||||
|
["DictKey_UnitName_291"] = "US Client #021",
|
||||||
|
["DictKey_WptName_127"] = "",
|
||||||
|
["DictKey_GroupName_21"] = "Client Group 4",
|
||||||
|
["DictKey_GroupName_364"] = "RU Client #012",
|
||||||
|
["DictKey_GroupName_278"] = "US Client #017",
|
||||||
|
["DictKey_WptName_44"] = "",
|
||||||
|
["DictKey_WptName_335"] = "",
|
||||||
|
["DictKey_WptName_100"] = "",
|
||||||
|
["DictKey_GroupName_185"] = "RU Client #030",
|
||||||
|
["DictKey_UnitName_321"] = "US Client #031",
|
||||||
|
["DictKey_WptName_112"] = "",
|
||||||
|
["DictKey_GroupName_230"] = "RU Client #045",
|
||||||
|
["DictKey_UnitName_201"] = "RU Client #035",
|
||||||
|
["DictKey_WptName_145"] = "",
|
||||||
|
["DictKey_GroupName_128"] = "RU Client #011",
|
||||||
|
["DictKey_descriptionBlueTask_3"] = "",
|
||||||
|
["DictKey_WptName_241"] = "",
|
||||||
|
["DictKey_descriptionText_1"] = "-- Name: AIB-005 - Patrol AI and Randomize Zones\
|
||||||
|
-- Author: FlightControl\
|
||||||
|
-- Date Created: 10 Jan 2016\
|
||||||
|
--\
|
||||||
|
-- # Situation:\
|
||||||
|
--\
|
||||||
|
-- For the red coalition, 2 client slots are foreseen.\
|
||||||
|
-- For those players that have not joined the mission, red AI is spawned.\
|
||||||
|
-- The red AI should start patrolling an area until fuel is empty and return to the home base.\
|
||||||
|
-- For each AI being spawned, ensure that they fly to a random zone defined within the mission editor.\
|
||||||
|
-- Right now there are two patrol zones defined, so the AI should start patrolliing in one of these zones.\
|
||||||
|
-- \
|
||||||
|
-- # Test cases:\
|
||||||
|
-- \
|
||||||
|
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.\
|
||||||
|
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.\
|
||||||
|
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.\
|
||||||
|
-- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa.\
|
||||||
|
-- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa.\
|
||||||
|
-- 6. Ensure that you see the AI patrol in one of the two zones ...\
|
||||||
|
",
|
||||||
|
["DictKey_GroupName_134"] = "RU Client #013",
|
||||||
|
["DictKey_UnitName_102"] = "RU Client #002",
|
||||||
|
["DictKey_WptName_378"] = "",
|
||||||
|
["DictKey_GroupName_224"] = "RU Client #043",
|
||||||
|
["DictKey_UnitName_371"] = "RU Client #003",
|
||||||
|
["DictKey_UnitName_392"] = "RU Client #010",
|
||||||
|
["DictKey_UnitName_108"] = "RU Client #004",
|
||||||
|
["DictKey_UnitName_132"] = "RU Client #012",
|
||||||
|
["DictKey_UnitName_174"] = "RU Client #026",
|
||||||
|
["DictKey_WptName_274"] = "",
|
||||||
|
["DictKey_GroupName_176"] = "RU Client #027",
|
||||||
|
["DictKey_WptName_339"] = "",
|
||||||
|
["DictKey_WptName_199"] = "",
|
||||||
|
["DictKey_UnitName_123"] = "RU Client #009",
|
||||||
|
["DictKey_WptName_81"] = "",
|
||||||
|
["DictKey_UnitName_213"] = "RU Client #039",
|
||||||
|
["DictKey_WptName_211"] = "",
|
||||||
|
["DictKey_GroupName_227"] = "RU Client #044",
|
||||||
|
["DictKey_WptName_77"] = "",
|
||||||
|
["DictKey_WptName_29"] = "",
|
||||||
|
["DictKey_WptName_166"] = "",
|
||||||
|
["DictKey_WptName_396"] = "",
|
||||||
|
["DictKey_UnitName_168"] = "RU Client #024",
|
||||||
|
["DictKey_UnitName_210"] = "RU Client #038",
|
||||||
|
["DictKey_WptName_169"] = "",
|
||||||
|
["DictKey_GroupName_7"] = "US Client #001",
|
||||||
|
["DictKey_WptName_384"] = "",
|
||||||
|
["DictKey_WptName_354"] = "",
|
||||||
|
["DictKey_GroupName_143"] = "RU Client #016",
|
||||||
|
["DictKey_UnitName_288"] = "US Client #020",
|
||||||
|
["DictKey_GroupName_155"] = "RU Client #020",
|
||||||
|
["DictKey_GroupName_236"] = "US Client #003",
|
||||||
|
["DictKey_ActionText_17"] = "",
|
||||||
|
["DictKey_WptName_157"] = "",
|
||||||
|
["DictKey_UnitName_114"] = "RU Client #006",
|
||||||
|
["DictKey_WptName_298"] = "",
|
||||||
|
["DictKey_WptName_142"] = "",
|
||||||
|
["DictKey_GroupName_254"] = "US Client #009",
|
||||||
|
["DictKey_WptName_91"] = "",
|
||||||
|
["DictKey_WptName_259"] = "",
|
||||||
|
["DictKey_WptName_23"] = "",
|
||||||
|
["DictKey_WptName_172"] = "",
|
||||||
|
["DictKey_WptName_214"] = "",
|
||||||
|
["DictKey_UnitName_264"] = "US Client #012",
|
||||||
|
["DictKey_WptName_151"] = "",
|
||||||
|
["DictKey_UnitName_15"] = "AI US 2",
|
||||||
|
["DictKey_GroupName_45"] = "Client Group 7",
|
||||||
|
["DictKey_WptName_71"] = "",
|
||||||
|
["DictKey_WptName_26"] = "",
|
||||||
|
["DictKey_UnitName_57"] = "Pilot #002",
|
||||||
|
["DictKey_UnitName_31"] = "AI RU",
|
||||||
|
["DictKey_UnitName_111"] = "RU Client #005",
|
||||||
|
["DictKey_WptName_12"] = "",
|
||||||
|
["DictKey_GroupName_39"] = "Client Group 6",
|
||||||
|
["DictKey_WptName_52"] = "",
|
||||||
|
["DictKey_UnitName_159"] = "RU Client #021",
|
||||||
|
["DictKey_WptName_38"] = "",
|
||||||
|
["DictKey_UnitName_138"] = "RU Client #014",
|
||||||
|
["DictKey_WptName_330"] = "",
|
||||||
|
["DictKey_UnitName_309"] = "US Client #027",
|
||||||
|
["DictKey_WptName_85"] = "",
|
||||||
|
["DictKey_GroupName_290"] = "US Client #021",
|
||||||
|
["DictKey_GroupName_373"] = "RU Client #004",
|
||||||
|
["DictKey_UnitName_240"] = "US Client #004",
|
||||||
|
["DictKey_GroupName_358"] = "RU Client #010",
|
||||||
|
["DictKey_WptName_247"] = "",
|
||||||
|
["DictKey_WptName_223"] = "",
|
||||||
|
["DictKey_WptName_324"] = "",
|
||||||
|
["DictKey_GroupName_18"] = "RU Client #001",
|
||||||
|
["DictKey_WptName_148"] = "",
|
||||||
|
["DictKey_GroupName_349"] = "RU Client #007",
|
||||||
|
["DictKey_GroupName_36"] = "AI RU",
|
||||||
|
["DictKey_WptName_130"] = "",
|
||||||
|
["DictKey_WptName_381"] = "",
|
||||||
|
["DictKey_UnitName_180"] = "RU Client #028",
|
||||||
|
["DictKey_UnitName_117"] = "RU Client #007",
|
||||||
|
["DictKey_WptName_329"] = "",
|
||||||
|
["DictKey_GroupName_73"] = "Patrol Zone Blue",
|
||||||
|
["DictKey_WptName_121"] = "",
|
||||||
|
["DictKey_WptName_78"] = "",
|
||||||
|
["DictKey_UnitName_147"] = "RU Client #017",
|
||||||
|
["DictKey_UnitName_56"] = "Pilot #001",
|
||||||
|
["DictKey_GroupName_203"] = "RU Client #036",
|
||||||
|
["DictKey_GroupName_337"] = "RU Client #003",
|
||||||
|
["DictKey_WptName_304"] = "",
|
||||||
|
["DictKey_WptName_103"] = "",
|
||||||
|
["DictKey_WptName_265"] = "",
|
||||||
|
["DictKey_GroupName_14"] = "AI US 2",
|
||||||
|
["DictKey_UnitName_282"] = "US Client #018",
|
||||||
|
["DictKey_WptName_357"] = "",
|
||||||
|
["DictKey_WptName_175"] = "",
|
||||||
|
["DictKey_WptName_327"] = "",
|
||||||
|
["DictKey_WptName_342"] = "",
|
||||||
|
["DictKey_WptName_154"] = "",
|
||||||
|
["DictKey_GroupName_391"] = "RU Client #010",
|
||||||
|
["DictKey_UnitName_359"] = "RU Client #010",
|
||||||
|
["DictKey_GroupName_197"] = "RU Client #034",
|
||||||
|
["DictKey_GroupName_42"] = "Client Group 5",
|
||||||
|
["DictKey_WptName_283"] = "",
|
||||||
|
["DictKey_GroupName_161"] = "RU Client #022",
|
||||||
|
["DictKey_UnitName_19"] = "RU Client #001",
|
||||||
|
["DictKey_UnitName_237"] = "US Client #003",
|
||||||
|
["DictKey_WptName_65"] = "",
|
||||||
|
["DictKey_WptName_372"] = "",
|
||||||
|
["DictKey_WptName_322"] = "",
|
||||||
|
["DictKey_WptName_97"] = "",
|
||||||
|
["DictKey_WptName_360"] = "",
|
||||||
|
["DictKey_GroupName_131"] = "RU Client #012",
|
||||||
|
["DictKey_WptName_16"] = "",
|
||||||
|
["DictKey_GroupName_101"] = "RU Client #002",
|
||||||
|
["DictKey_WptName_202"] = "",
|
||||||
|
["DictKey_UnitName_198"] = "RU Client #034",
|
||||||
|
["DictKey_WptName_253"] = "",
|
||||||
|
["DictKey_GroupName_394"] = "RU Client #011",
|
||||||
|
["DictKey_WptName_32"] = "",
|
||||||
|
["DictKey_UnitName_279"] = "US Client #017",
|
||||||
|
["DictKey_GroupName_305"] = "US Client #026",
|
||||||
|
["DictKey_UnitName_141"] = "RU Client #015",
|
||||||
|
["DictKey_WptName_79"] = "",
|
||||||
|
["DictKey_UnitName_207"] = "RU Client #037",
|
||||||
|
["DictKey_WptName_250"] = "",
|
||||||
|
["DictKey_GroupName_116"] = "RU Client #007",
|
||||||
|
["DictKey_GroupName_94"] = "Patrol Zone Red",
|
||||||
|
["DictKey_GroupName_212"] = "RU Client #039",
|
||||||
|
["DictKey_GroupName_233"] = "US Client #002",
|
||||||
|
["DictKey_GroupName_200"] = "RU Client #035",
|
||||||
|
["DictKey_WptName_96"] = "",
|
||||||
|
["DictKey_WptName_50"] = "",
|
||||||
|
["DictKey_WptName_115"] = "",
|
||||||
|
["DictKey_WptName_226"] = "",
|
||||||
|
["DictKey_UnitName_126"] = "RU Client #010",
|
||||||
|
["DictKey_UnitName_243"] = "US Client #005",
|
||||||
|
["DictKey_WptName_316"] = "",
|
||||||
|
["DictKey_WptName_69"] = "",
|
||||||
|
["DictKey_UnitName_347"] = "RU Client #006",
|
||||||
|
["DictKey_GroupName_209"] = "RU Client #038",
|
||||||
|
["DictKey_UnitName_28"] = "AI RU",
|
||||||
|
["DictKey_GroupName_215"] = "RU Client #040",
|
||||||
|
["DictKey_WptName_64"] = "",
|
||||||
|
["DictKey_UnitName_192"] = "RU Client #032",
|
||||||
|
["DictKey_UnitName_338"] = "RU Client #003",
|
||||||
|
["DictKey_GroupName_257"] = "US Client #010",
|
||||||
|
["DictKey_GroupName_188"] = "RU Client #031",
|
||||||
|
["DictKey_GroupName_107"] = "RU Client #004",
|
||||||
|
["DictKey_UnitName_255"] = "US Client #009",
|
||||||
|
["DictKey_UnitName_231"] = "RU Client #045",
|
||||||
|
["DictKey_UnitName_88"] = "Pilot #001",
|
||||||
|
["DictKey_WptName_232"] = "",
|
||||||
|
["DictKey_UnitName_195"] = "RU Client #033",
|
||||||
|
["DictKey_GroupName_370"] = "RU Client #003",
|
||||||
|
["DictKey_WptName_229"] = "",
|
||||||
|
["DictKey_WptName_256"] = "",
|
||||||
|
["DictKey_WptName_345"] = "",
|
||||||
|
["DictKey_WptName_277"] = "",
|
||||||
|
["DictKey_WptName_63"] = "",
|
||||||
|
["DictKey_WptName_363"] = "",
|
||||||
|
["DictKey_GroupName_167"] = "RU Client #024",
|
||||||
|
["DictKey_GroupName_385"] = "RU Client #008",
|
||||||
|
["DictKey_GroupName_376"] = "RU Client #005",
|
||||||
|
["DictKey_UnitName_60"] = "Client Range 1",
|
||||||
|
["DictKey_UnitName_326"] = "Pilot #001",
|
||||||
|
["DictKey_GroupName_388"] = "RU Client #009",
|
||||||
|
["DictKey_GroupName_251"] = "US Client #008",
|
||||||
|
["DictKey_WptName_41"] = "",
|
||||||
|
["DictKey_UnitName_273"] = "US Client #015",
|
||||||
|
["DictKey_GroupName_66"] = "AI US",
|
||||||
|
["DictKey_WptName_87"] = "",
|
||||||
|
["DictKey_GroupName_343"] = "RU Client #005",
|
||||||
|
["DictKey_GroupName_119"] = "RU Client #008",
|
||||||
|
["DictKey_WptName_268"] = "",
|
||||||
|
["DictKey_WptName_220"] = "",
|
||||||
|
["DictKey_WptName_262"] = "",
|
||||||
|
["DictKey_WptName_83"] = "",
|
||||||
|
["DictKey_WptName_72"] = "",
|
||||||
|
["DictKey_UnitName_276"] = "US Client #016",
|
||||||
|
["DictKey_WptName_387"] = "",
|
||||||
|
["DictKey_GroupName_272"] = "US Client #015",
|
||||||
|
["DictKey_WptName_187"] = "",
|
||||||
|
["DictKey_UnitName_189"] = "RU Client #031",
|
||||||
|
["DictKey_UnitName_162"] = "RU Client #022",
|
||||||
|
["DictKey_GroupName_146"] = "RU Client #017",
|
||||||
|
["DictKey_GroupName_140"] = "RU Client #015",
|
||||||
|
["DictKey_GroupName_239"] = "US Client #004",
|
||||||
|
["DictKey_UnitName_353"] = "RU Client #008",
|
||||||
|
["DictKey_UnitName_386"] = "RU Client #008",
|
||||||
|
["DictKey_WptName_351"] = "",
|
||||||
|
["DictKey_WptName_313"] = "",
|
||||||
|
["DictKey_UnitName_93"] = "Pilot #001",
|
||||||
|
["DictKey_GroupName_287"] = "US Client #020",
|
||||||
|
["DictKey_UnitName_395"] = "RU Client #011",
|
||||||
|
["DictKey_UnitName_332"] = "Pilot #002",
|
||||||
|
["DictKey_WptName_133"] = "",
|
||||||
|
["DictKey_UnitName_186"] = "RU Client #030",
|
||||||
|
["DictKey_GroupName_194"] = "RU Client #033",
|
||||||
|
["DictKey_GroupName_179"] = "RU Client #028",
|
||||||
|
["DictKey_GroupName_269"] = "US Client #014",
|
||||||
|
["DictKey_WptName_20"] = "",
|
||||||
|
["DictKey_WptName_348"] = "",
|
||||||
|
["DictKey_WptName_301"] = "",
|
||||||
|
["DictKey_UnitName_285"] = "US Client #019",
|
||||||
|
["DictKey_UnitName_344"] = "RU Client #005",
|
||||||
|
["DictKey_WptName_393"] = "",
|
||||||
|
["DictKey_WptName_84"] = "",
|
||||||
|
["DictKey_GroupName_355"] = "RU Client #009",
|
||||||
|
["DictKey_UnitName_177"] = "RU Client #027",
|
||||||
|
["DictKey_UnitName_37"] = "AI RU",
|
||||||
|
["DictKey_WptName_319"] = "",
|
||||||
|
["DictKey_WptName_106"] = "",
|
||||||
|
["DictKey_UnitName_294"] = "US Client #022",
|
||||||
|
["DictKey_UnitName_165"] = "RU Client #023",
|
||||||
|
["DictKey_WptName_35"] = "",
|
||||||
|
["DictKey_UnitName_261"] = "US Client #011",
|
||||||
|
["DictKey_GroupName_293"] = "US Client #022",
|
||||||
|
["DictKey_UnitName_389"] = "RU Client #009",
|
||||||
|
["DictKey_GroupName_182"] = "RU Client #029",
|
||||||
|
["DictKey_UnitName_300"] = "US Client #024",
|
||||||
|
["DictKey_GroupName_317"] = "US Client #030",
|
||||||
|
["DictKey_WptName_271"] = "",
|
||||||
|
["DictKey_WptName_139"] = "",
|
||||||
|
["DictKey_GroupName_149"] = "RU Client #018",
|
||||||
|
["DictKey_GroupName_218"] = "RU Client #041",
|
||||||
|
["DictKey_UnitName_8"] = "US Client #001",
|
||||||
|
} -- end of dictionary
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
mapResource =
|
||||||
|
{
|
||||||
|
["ResKey_Action_323"] = "Moose.lua",
|
||||||
|
["ResKey_Action_6"] = "AIB-005 - Patrol AI and Randomize Zones.lua",
|
||||||
|
} -- end of mapResource
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,229 @@
|
|||||||
|
options =
|
||||||
|
{
|
||||||
|
["playerName"] = "Killer",
|
||||||
|
["miscellaneous"] =
|
||||||
|
{
|
||||||
|
["headmove"] = true,
|
||||||
|
["TrackIR_external_views"] = true,
|
||||||
|
["f5_nearest_ac"] = true,
|
||||||
|
["f11_free_camera"] = true,
|
||||||
|
["F2_view_effects"] = 2,
|
||||||
|
["f10_awacs"] = true,
|
||||||
|
["Coordinate_Display"] = "Lat Long",
|
||||||
|
["accidental_failures"] = false,
|
||||||
|
["force_feedback_enabled"] = true,
|
||||||
|
["synchronize_controls"] = false,
|
||||||
|
["show_pilot_body"] = true,
|
||||||
|
}, -- end of ["miscellaneous"]
|
||||||
|
["difficulty"] =
|
||||||
|
{
|
||||||
|
["padlock"] = true,
|
||||||
|
["labels"] = false,
|
||||||
|
["easyCommunication"] = true,
|
||||||
|
["easyRadar"] = false,
|
||||||
|
["fuel"] = false,
|
||||||
|
["miniHUD"] = false,
|
||||||
|
["tips"] = true,
|
||||||
|
["birds"] = 0,
|
||||||
|
["optionsView"] = "optview_all",
|
||||||
|
["permitCrash"] = true,
|
||||||
|
["immortal"] = false,
|
||||||
|
["cockpitStatusBarAllowed"] = false,
|
||||||
|
["cockpitVisualRM"] = true,
|
||||||
|
["easyFlight"] = false,
|
||||||
|
["reports"] = true,
|
||||||
|
["hideStick"] = false,
|
||||||
|
["radio"] = true,
|
||||||
|
["externalViews"] = true,
|
||||||
|
["units"] = "metric",
|
||||||
|
["userMarks"] = true,
|
||||||
|
["cockpitLanguage"] = "english",
|
||||||
|
["spectatorExternalViews"] = true,
|
||||||
|
["userSnapView"] = true,
|
||||||
|
["avionicsLanguage"] = "native",
|
||||||
|
["impostors"] = "medium",
|
||||||
|
["iconsTheme"] = "nato",
|
||||||
|
["map"] = true,
|
||||||
|
["weapons"] = false,
|
||||||
|
["setGlobal"] = true,
|
||||||
|
["geffect"] = "realistic",
|
||||||
|
}, -- end of ["difficulty"]
|
||||||
|
["VR"] =
|
||||||
|
{
|
||||||
|
["use_mouse"] = false,
|
||||||
|
["enable"] = true,
|
||||||
|
["box_mouse_cursor"] = true,
|
||||||
|
["pixel_density"] = 1,
|
||||||
|
}, -- end of ["VR"]
|
||||||
|
["graphics"] =
|
||||||
|
{
|
||||||
|
["OculusRift"] = false,
|
||||||
|
["color"] = "32",
|
||||||
|
["LensEffects"] = 3,
|
||||||
|
["heatBlr"] = 2,
|
||||||
|
["scenes"] = "high",
|
||||||
|
["water"] = 2,
|
||||||
|
["visibRange"] = "High",
|
||||||
|
["treesVisibility"] = 25000,
|
||||||
|
["aspect"] = 1.25,
|
||||||
|
["lights"] = 2,
|
||||||
|
["HDR"] = 1,
|
||||||
|
["MSAA"] = 2,
|
||||||
|
["civTraffic"] = "high",
|
||||||
|
["clutterMaxDistance"] = 1500,
|
||||||
|
["terrainTextures"] = "max",
|
||||||
|
["multiMonitorSetup"] = "1camera",
|
||||||
|
["shadowTree"] = true,
|
||||||
|
["fullScreen"] = false,
|
||||||
|
["disableAero"] = false,
|
||||||
|
["DOF"] = 0,
|
||||||
|
["clouds"] = 1,
|
||||||
|
["flatTerrainShadows"] = 1,
|
||||||
|
["cockpitShadows"] = true,
|
||||||
|
["height"] = 1024,
|
||||||
|
["width"] = 1280,
|
||||||
|
["shadows"] = 4,
|
||||||
|
["TranspSSAA"] = false,
|
||||||
|
["sync"] = true,
|
||||||
|
["preloadRadius"] = 73885,
|
||||||
|
["anisotropy"] = 2,
|
||||||
|
["haze"] = 1,
|
||||||
|
["textures"] = 2,
|
||||||
|
["effects"] = 3,
|
||||||
|
}, -- end of ["graphics"]
|
||||||
|
["plugins"] =
|
||||||
|
{
|
||||||
|
["CA"] =
|
||||||
|
{
|
||||||
|
["kompass_options"] = 1,
|
||||||
|
["ground_target_info"] = true,
|
||||||
|
["ground_aim_helper"] = true,
|
||||||
|
["ground_platform_shake"] = true,
|
||||||
|
["ground_automatic"] = true,
|
||||||
|
}, -- end of ["CA"]
|
||||||
|
["M-2000C"] =
|
||||||
|
{
|
||||||
|
["UNI_NODRIFT"] = false,
|
||||||
|
["TDC_"] = false,
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
["PPA_TOTPAR"] = false,
|
||||||
|
["UNI_ALIGNED"] = false,
|
||||||
|
}, -- end of ["M-2000C"]
|
||||||
|
["A-10C"] =
|
||||||
|
{
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
}, -- end of ["A-10C"]
|
||||||
|
["FC3"] =
|
||||||
|
{
|
||||||
|
["CPLocalList_F-15C"] = "default",
|
||||||
|
["CPLocalList_MiG-29S"] = "default",
|
||||||
|
["CPLocalList_MiG-29A"] = "default",
|
||||||
|
["CPLocalList_Su-25"] = "default",
|
||||||
|
["CPLocalList_A-10A"] = "default",
|
||||||
|
["CPLocalList_Su-27"] = "chinese",
|
||||||
|
["CPLocalList_MiG-29G"] = "default",
|
||||||
|
["CPLocalList_Su-33"] = "default",
|
||||||
|
}, -- end of ["FC3"]
|
||||||
|
["Hawk"] =
|
||||||
|
{
|
||||||
|
["CPLocalList"] = "high",
|
||||||
|
}, -- end of ["Hawk"]
|
||||||
|
["P-51D"] =
|
||||||
|
{
|
||||||
|
["assistance"] = 100,
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
["autoRudder"] = false,
|
||||||
|
}, -- end of ["P-51D"]
|
||||||
|
["TF-51D"] =
|
||||||
|
{
|
||||||
|
["assistance"] = 100,
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
["autoRudder"] = false,
|
||||||
|
}, -- end of ["TF-51D"]
|
||||||
|
["MiG-21Bis"] =
|
||||||
|
{
|
||||||
|
["Engine"] = false,
|
||||||
|
["Shake"] = 100,
|
||||||
|
["CustomCockpit"] = false,
|
||||||
|
["Reticle"] = false,
|
||||||
|
["Freeze"] = false,
|
||||||
|
}, -- end of ["MiG-21Bis"]
|
||||||
|
["F-86F"] =
|
||||||
|
{
|
||||||
|
["landSeatAdjustF86"] = true,
|
||||||
|
["aiHelper"] = false,
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
["NoseWheelSteeringSimpleBehaviourF86"] = true,
|
||||||
|
["gunCamera"] = 0,
|
||||||
|
}, -- end of ["F-86F"]
|
||||||
|
["Su-25T"] =
|
||||||
|
{
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
}, -- end of ["Su-25T"]
|
||||||
|
["Mi-8MTV2"] =
|
||||||
|
{
|
||||||
|
["Mi8TrimmingMethod"] = 0,
|
||||||
|
["Mi8AutopilotAdjustment"] = false,
|
||||||
|
["gunCamera"] = 0,
|
||||||
|
["controlHelperMi8"] = false,
|
||||||
|
["weapTooltipsMi8"] = true,
|
||||||
|
["Mi8RudderTrimmer"] = false,
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
["altMi8TrimmingMethod"] = false,
|
||||||
|
["Mi8FOV"] = 120,
|
||||||
|
}, -- end of ["Mi-8MTV2"]
|
||||||
|
["MiG-15bis"] =
|
||||||
|
{
|
||||||
|
["autoLeanToAimMiG15"] = true,
|
||||||
|
["CPLocalList"] = "chinese",
|
||||||
|
["gunCamera"] = 0,
|
||||||
|
["aiHelper"] = false,
|
||||||
|
}, -- end of ["MiG-15bis"]
|
||||||
|
["FW-190D9"] =
|
||||||
|
{
|
||||||
|
["assistance"] = 100,
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
["autoRudder"] = false,
|
||||||
|
}, -- end of ["FW-190D9"]
|
||||||
|
["UH-1H"] =
|
||||||
|
{
|
||||||
|
["UHTrackIRAiming"] = true,
|
||||||
|
["autoPilot"] = true,
|
||||||
|
["UHTrimmingMethod"] = 0,
|
||||||
|
["altUHTrimmingMethod"] = false,
|
||||||
|
["CPLocalList"] = "default",
|
||||||
|
["weapTooltips"] = true,
|
||||||
|
["UHRudderTrimmer"] = false,
|
||||||
|
}, -- end of ["UH-1H"]
|
||||||
|
["Ka-50"] =
|
||||||
|
{
|
||||||
|
["altTrimmingMethod"] = false,
|
||||||
|
["Ka50RudderTrimmer"] = false,
|
||||||
|
["CPLocalList"] = "english",
|
||||||
|
}, -- end of ["Ka-50"]
|
||||||
|
}, -- end of ["plugins"]
|
||||||
|
["format"] = 1,
|
||||||
|
["sound"] =
|
||||||
|
{
|
||||||
|
["hear_in_helmet"] = false,
|
||||||
|
["headphones"] = 100,
|
||||||
|
["cockpit"] = 100,
|
||||||
|
["GBreathEffect"] = true,
|
||||||
|
["gui"] = 100,
|
||||||
|
["volume"] = 100,
|
||||||
|
["radioSpeech"] = true,
|
||||||
|
["music"] = 100,
|
||||||
|
["subtitles"] = true,
|
||||||
|
["world"] = 100,
|
||||||
|
}, -- end of ["sound"]
|
||||||
|
["views"] =
|
||||||
|
{
|
||||||
|
["cockpit"] =
|
||||||
|
{
|
||||||
|
["mirrors"] = false,
|
||||||
|
["reflections"] = false,
|
||||||
|
["avionics"] = 3,
|
||||||
|
["russianHud"] = false,
|
||||||
|
}, -- end of ["cockpit"]
|
||||||
|
}, -- end of ["views"]
|
||||||
|
} -- end of options
|
||||||
@ -0,0 +1,807 @@
|
|||||||
|
warehouses =
|
||||||
|
{
|
||||||
|
["airports"] =
|
||||||
|
{
|
||||||
|
[12] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "RED",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [12]
|
||||||
|
[13] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "BLUE",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [13]
|
||||||
|
[14] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "RED",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [14]
|
||||||
|
[15] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "RED",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [15]
|
||||||
|
[16] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "BLUE",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [16]
|
||||||
|
[17] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [17]
|
||||||
|
[18] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [18]
|
||||||
|
[19] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [19]
|
||||||
|
[20] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [20]
|
||||||
|
[21] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [21]
|
||||||
|
[22] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [22]
|
||||||
|
[23] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [23]
|
||||||
|
[24] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [24]
|
||||||
|
[25] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [25]
|
||||||
|
[26] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [26]
|
||||||
|
[27] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [27]
|
||||||
|
[28] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [28]
|
||||||
|
[29] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [29]
|
||||||
|
[30] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [30]
|
||||||
|
[31] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [31]
|
||||||
|
[32] =
|
||||||
|
{
|
||||||
|
["gasoline"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["gasoline"]
|
||||||
|
["unlimitedMunitions"] = true,
|
||||||
|
["methanol_mixture"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["methanol_mixture"]
|
||||||
|
["OperatingLevel_Air"] = 10,
|
||||||
|
["diesel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["diesel"]
|
||||||
|
["speed"] = 16.666666,
|
||||||
|
["size"] = 100,
|
||||||
|
["periodicity"] = 30,
|
||||||
|
["suppliers"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["suppliers"]
|
||||||
|
["coalition"] = "NEUTRAL",
|
||||||
|
["jet_fuel"] =
|
||||||
|
{
|
||||||
|
["InitFuel"] = 100,
|
||||||
|
}, -- end of ["jet_fuel"]
|
||||||
|
["OperatingLevel_Eqp"] = 10,
|
||||||
|
["unlimitedFuel"] = true,
|
||||||
|
["aircrafts"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["aircrafts"]
|
||||||
|
["weapons"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["weapons"]
|
||||||
|
["OperatingLevel_Fuel"] = 10,
|
||||||
|
["unlimitedAircrafts"] = true,
|
||||||
|
}, -- end of [32]
|
||||||
|
}, -- end of ["airports"]
|
||||||
|
["warehouses"] =
|
||||||
|
{
|
||||||
|
}, -- end of ["warehouses"]
|
||||||
|
} -- end of warehouses
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user