Final updates

This commit is contained in:
FlightControl 2017-01-17 12:19:35 +01:00
parent b9c85d4cb7
commit 1206c51fe1
110 changed files with 13026 additions and 336 deletions

View File

@ -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,
-- even when there are hardly any players in the mission.
-- even when there are hardly any players in the mission.**
--
-- ![Banner Image](..\Presentations\AI_Balancer\Dia1.JPG)
--
-- Examples can be found in the test missions.
--
-- ===
--
@ -73,6 +72,8 @@
--
-- 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.
--
-- ===
@ -82,7 +83,6 @@
-- ### 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 :-)
--
-- * **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:
@ -231,16 +231,15 @@ end
--- @param #AI_BALANCER self
function AI_BALANCER:onenterMonitoring( SetGroup )
self:E( { self.SetClient:Count() } )
self.SetClient:Flush()
self:T2( { self.SetClient:Count() } )
--self.SetClient:Flush()
self.SetClient:ForEachClient(
--- @param Wrapper.Client#CLIENT Client
function( Client )
self:E(Client.ClientName)
self:T3(Client.ClientName)
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
self:E({Client:IsAlive()})
if Client:IsAlive() then
if AIGroup and AIGroup:IsAlive() == true then
@ -255,16 +254,16 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
local PlayerInRange = { Value = false }
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
self:E( RangeZone )
self:T2( RangeZone )
_DATABASE:ForEachPlayer(
--- @param Wrapper.Unit#UNIT RangeTestUnit
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
self:E( "in zone" )
self:T2( "in zone" )
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
self:E( "in range" )
self:T2( "in range" )
PlayerInRange.Value = true
end
end
@ -285,7 +284,7 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
end
else
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
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )

View File

@ -2,7 +2,6 @@
--
-- ![Banner Image](..\Presentations\AI_Cap\Dia1.JPG)
--
-- 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 )
Controllable:OptionROEOpenFire()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable

View File

@ -2,7 +2,6 @@
--
-- ![Banner Image](..\Presentations\AI_Cas\Dia1.JPG)
--
-- Examples can be found in the test missions.
--
-- ===
--
@ -344,6 +343,15 @@ function AI_CAS_ZONE:onafterStart( Controllable, From, Event, To )
Controllable:OptionROEHoldFire()
Controllable:OptionROTVertical()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable

View File

@ -2,7 +2,6 @@
--
-- ![Banner Image](..\Presentations\AI_Patrol\Dia1.JPG)
--
-- 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**
--
-- 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:
--
-- 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.
--
@ -178,12 +190,12 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
self.CheckStatus = true
self:ManageFuel( .2, 60 )
self:ManageDamage( 10 )
self:ManageDamage( 1 )
self:SetDetectionInterval( 30 )
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
self:SetStartState( "None" )
self:AddTransition( "None", "Start", "Patrolling" )
@ -343,7 +355,7 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
-- @param #AI_PATROL_ZONE self
-- @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.
-- @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 Event The Event string.
-- @param #string To The To State string.
self:AddTransition( "*", "Reset", "Patrolling" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
return self
end
@ -530,13 +544,21 @@ end
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
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:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
Controllable:OptionROEHoldFire()
Controllable:OptionROTVertical()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
@ -554,7 +576,7 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
local Detected = false
local DetectedTargets = Controllable:GetDetectedTargets()
for TargetID, Target in pairs( DetectedTargets ) do
for TargetID, Target in pairs( DetectedTargets or {} ) do
local TargetObject = Target.object
self:T( TargetObject )
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
@ -583,11 +605,12 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
end
--- @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
PatrolZone:Route()
PatrolZone:__Route( 1 )
end
@ -608,55 +631,51 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
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.
local PatrolRoute = {}
--- Calculate the current route point.
local CurrentVec2 = self.Controllable:GetVec2()
-- Calculate the current route point of the controllable as the start point of the route.
-- 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).
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
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 )
if self.Controllable:InAir() == false then
self:E( "Not in the air, finding route path within PatrolZone" )
local CurrentVec2 = self.Controllable:GetVec2()
--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 )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
self:T2( ToPatrolZoneSpeed )
--- Obtain a 3D @{Point} from the 2D point + altitude.
local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y )
--- Create a route point of type air.
local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
POINT_VEC3.RoutePointType.TurningPoint,
POINT_VEC3.RoutePointAction.TurningPoint,
ToPatrolZoneSpeed,
true
)
PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint
end
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
POINT_VEC3.RoutePointType.TakeOffParking,
POINT_VEC3.RoutePointAction.FromParkingArea,
ToPatrolZoneSpeed,
true
)
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
else
self:E( "In the air, finding route path within PatrolZone" )
local CurrentVec2 = self.Controllable:GetVec2()
--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 )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
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.
@ -683,7 +702,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
ToTargetPointVec3:SmokeRed()
--ToTargetPointVec3:SmokeRed()
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 ...
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!
self.Controllable:WayPointExecute( 1, 2 )
@ -716,6 +735,7 @@ function AI_PATROL_ZONE:onafterStatus()
local Fuel = self.Controllable:GetUnit(1):GetFuel()
if Fuel < self.PatrolFuelTresholdPercentage then
self:E( self.Controllable:GetName() .. " is out of fuel:" .. Fuel .. ", RTB!" )
local OldAIControllable = self.Controllable
local AIControllableTemplate = self.Controllable:GetTemplate()
@ -730,11 +750,12 @@ function AI_PATROL_ZONE:onafterStatus()
-- TODO: Check GROUP damage function.
local Damage = self.Controllable:GetLife()
if Damage <= self.PatrolDamageTreshold then
self:E( self.Controllable:GetName() .. " is damaged:" .. Damage .. ", RTB!" )
RTB = true
end
if RTB == true then
self:__RTB( 1 )
self:RTB()
else
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
end
@ -777,4 +798,4 @@ function AI_PATROL_ZONE:onafterRTB()
end
end
end

View File

@ -545,7 +545,11 @@ do -- FSM
local from = self.current
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
or self:_call_handler("OnBefore" .. EventName, params) == false
@ -1032,7 +1036,7 @@ do -- FSM_SET
function FSM_SET:_call_handler( handler, params )
if self[handler] then
self:E( "Calling " .. handler )
self:T( "Calling " .. handler )
return self[handler]( self, self.Set, unpack( params ) )
end
end

View File

@ -74,9 +74,11 @@ POINT_VEC3 = {
BARO = "BARO",
},
RoutePointType = {
TakeOffParking = "TakeOffParking",
TurningPoint = "Turning Point",
},
RoutePointAction = {
FromParkingArea = "From Parking Area",
TurningPoint = "Turning Point",
},
}
@ -99,10 +101,12 @@ do -- POINT_VEC3
--- RoutePoint Types
-- @type POINT_VEC3.RoutePointType
-- @field TakeOffParking "TakeOffParking"
-- @field TurningPoint "Turning Point"
--- RoutePoint Actions
-- @type POINT_VEC3.RoutePointAction
-- @field FromParkingArea "From Parking Area"
-- @field TurningPoint "Turning Point"
-- Constructor.

View File

@ -602,11 +602,14 @@ function SPAWN:ReSpawn( SpawnIndex )
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
if SpawnGroup and WayPoints then
-- If there were WayPoints set, then Re-Execute those WayPoints!
self:E( WayPoints )
SpawnGroup:WayPointInitialize( WayPoints )
SpawnGroup:WayPointExecute( 1, 5 )
end
if SpawnGroup.ReSpawnFunction then
SpawnGroup:ReSpawnFunction()
end
return SpawnGroup
end

View File

@ -277,7 +277,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime )
if DCSControllable then
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.
-- 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
end
-- Message APIs
-- Message APIs

View File

@ -879,4 +879,30 @@ function GROUP:CalculateThreatLevelA2G()
return MaxThreatLevelA2G
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

View File

@ -241,20 +241,13 @@ end
--- Returns true if the POSITIONABLE is in the air.
-- Polymorphic, is overridden in GROUP and UNIT.
-- @param Wrapper.Positionable#POSITIONABLE self
-- @return #boolean true if in the air.
-- @return #nil The POSITIONABLE is not existing or alive.
function POSITIONABLE:InAir()
self:F2( self.PositionableName )
local DCSPositionable = self:GetDCSObject()
if DCSPositionable then
local PositionableInAir = DCSPositionable:inAir()
self:T3( PositionableInAir )
return PositionableInAir
end
return nil
end

View File

@ -818,3 +818,21 @@ function UNIT:IsShip()
return nil
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

View File

@ -1,5 +1,5 @@
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
env.info( 'Moose Generation Timestamp: 20170116_1223' )
env.info( 'Moose Generation Timestamp: 20170117_1202' )
local base = _G
Include = {}
@ -9795,9 +9795,11 @@ POINT_VEC3 = {
BARO = "BARO",
},
RoutePointType = {
TakeOffParking = "TakeOffParking",
TurningPoint = "Turning Point",
},
RoutePointAction = {
FromParkingArea = "From Parking Area",
TurningPoint = "Turning Point",
},
}
@ -9820,10 +9822,12 @@ do -- POINT_VEC3
--- RoutePoint Types
-- @type POINT_VEC3.RoutePointType
-- @field TakeOffParking "TakeOffParking"
-- @field TurningPoint "Turning Point"
--- RoutePoint Actions
-- @type POINT_VEC3.RoutePointAction
-- @field FromParkingArea "From Parking Area"
-- @field TurningPoint "Turning Point"
-- Constructor.
@ -11255,7 +11259,11 @@ do -- FSM
local from = self.current
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
or self:_call_handler("OnBefore" .. EventName, params) == false
@ -11742,7 +11750,7 @@ do -- FSM_SET
function FSM_SET:_call_handler( handler, params )
if self[handler] then
self:E( "Calling " .. handler )
self:T( "Calling " .. handler )
return self[handler]( self, self.Set, unpack( params ) )
end
end
@ -12306,20 +12314,13 @@ end
--- Returns true if the POSITIONABLE is in the air.
-- Polymorphic, is overridden in GROUP and UNIT.
-- @param Wrapper.Positionable#POSITIONABLE self
-- @return #boolean true if in the air.
-- @return #nil The POSITIONABLE is not existing or alive.
function POSITIONABLE:InAir()
self:F2( self.PositionableName )
local DCSPositionable = self:GetDCSObject()
if DCSPositionable then
local PositionableInAir = DCSPositionable:inAir()
self:T3( PositionableInAir )
return PositionableInAir
end
return nil
end
@ -12786,7 +12787,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime )
if DCSControllable then
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.
-- 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
end
-- Message APIs
--- This module contains the GROUP class.
-- Message APIs--- This module contains the GROUP class.
--
-- 1) @{Wrapper.Group#GROUP} class, extends @{Wrapper.Controllable#CONTROLLABLE}
-- =============================================================
@ -15668,6 +15666,32 @@ function GROUP:CalculateThreatLevelA2G()
return MaxThreatLevelA2G
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.
--
@ -16489,6 +16513,24 @@ function UNIT:IsShip()
return nil
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.
--
-- 1) @{Wrapper.Client#CLIENT} class, extends @{Wrapper.Unit#UNIT}
@ -18902,11 +18944,14 @@ function SPAWN:ReSpawn( SpawnIndex )
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
if SpawnGroup and WayPoints then
-- If there were WayPoints set, then Re-Execute those WayPoints!
self:E( WayPoints )
SpawnGroup:WayPointInitialize( WayPoints )
SpawnGroup:WayPointExecute( 1, 5 )
end
if SpawnGroup.ReSpawnFunction then
SpawnGroup:ReSpawnFunction()
end
return SpawnGroup
end
@ -24307,13 +24352,12 @@ function DETECTION_AREAS:CreateDetectionSets()
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,
-- even when there are hardly any players in the mission.
-- even when there are hardly any players in the mission.**
--
-- ![Banner Image](..\Presentations\AI_Balancer\Dia1.JPG)
--
-- Examples can be found in the test missions.
--
-- ===
--
@ -24382,6 +24426,8 @@ end
--
-- 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.
--
-- ===
@ -24391,7 +24437,6 @@ end
-- ### 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 :-)
--
-- * **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:
@ -24540,16 +24585,15 @@ end
--- @param #AI_BALANCER self
function AI_BALANCER:onenterMonitoring( SetGroup )
self:E( { self.SetClient:Count() } )
self.SetClient:Flush()
self:T2( { self.SetClient:Count() } )
--self.SetClient:Flush()
self.SetClient:ForEachClient(
--- @param Wrapper.Client#CLIENT Client
function( Client )
self:E(Client.ClientName)
self:T3(Client.ClientName)
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
self:E({Client:IsAlive()})
if Client:IsAlive() then
if AIGroup and AIGroup:IsAlive() == true then
@ -24564,16 +24608,16 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
local PlayerInRange = { Value = false }
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
self:E( RangeZone )
self:T2( RangeZone )
_DATABASE:ForEachPlayer(
--- @param Wrapper.Unit#UNIT RangeTestUnit
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
self:E( "in zone" )
self:T2( "in zone" )
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
self:E( "in range" )
self:T2( "in range" )
PlayerInRange.Value = true
end
end
@ -24594,7 +24638,7 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
end
else
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
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )
@ -24616,7 +24660,6 @@ end
--
-- ![Banner Image](..\Presentations\AI_Patrol\Dia1.JPG)
--
-- 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**
--
-- 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:
--
-- 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.
--
@ -24792,12 +24848,12 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
self.CheckStatus = true
self:ManageFuel( .2, 60 )
self:ManageDamage( 10 )
self:ManageDamage( 1 )
self:SetDetectionInterval( 30 )
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
self:SetStartState( "None" )
self:AddTransition( "None", "Start", "Patrolling" )
@ -24957,7 +25013,7 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
-- @param #AI_PATROL_ZONE self
-- @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.
-- @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 Event The Event string.
-- @param #string To The To State string.
self:AddTransition( "*", "Reset", "Patrolling" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
return self
end
@ -25144,13 +25202,21 @@ end
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
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:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
Controllable:OptionROEHoldFire()
Controllable:OptionROTVertical()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
@ -25168,7 +25234,7 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
local Detected = false
local DetectedTargets = Controllable:GetDetectedTargets()
for TargetID, Target in pairs( DetectedTargets ) do
for TargetID, Target in pairs( DetectedTargets or {} ) do
local TargetObject = Target.object
self:T( TargetObject )
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
@ -25197,11 +25263,12 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
end
--- @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
PatrolZone:Route()
PatrolZone:__Route( 1 )
end
@ -25222,55 +25289,51 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
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.
local PatrolRoute = {}
--- Calculate the current route point.
local CurrentVec2 = self.Controllable:GetVec2()
-- Calculate the current route point of the controllable as the start point of the route.
-- 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).
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
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 )
if self.Controllable:InAir() == false then
self:E( "Not in the air, finding route path within PatrolZone" )
local CurrentVec2 = self.Controllable:GetVec2()
--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 )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
self:T2( ToPatrolZoneSpeed )
--- Obtain a 3D @{Point} from the 2D point + altitude.
local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y )
--- Create a route point of type air.
local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
POINT_VEC3.RoutePointType.TurningPoint,
POINT_VEC3.RoutePointAction.TurningPoint,
ToPatrolZoneSpeed,
true
)
PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint
end
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
POINT_VEC3.RoutePointType.TakeOffParking,
POINT_VEC3.RoutePointAction.FromParkingArea,
ToPatrolZoneSpeed,
true
)
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
else
self:E( "In the air, finding route path within PatrolZone" )
local CurrentVec2 = self.Controllable:GetVec2()
--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 )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
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.
@ -25297,7 +25360,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
ToTargetPointVec3:SmokeRed()
--ToTargetPointVec3:SmokeRed()
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 ...
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!
self.Controllable:WayPointExecute( 1, 2 )
@ -25330,6 +25393,7 @@ function AI_PATROL_ZONE:onafterStatus()
local Fuel = self.Controllable:GetUnit(1):GetFuel()
if Fuel < self.PatrolFuelTresholdPercentage then
self:E( self.Controllable:GetName() .. " is out of fuel:" .. Fuel .. ", RTB!" )
local OldAIControllable = self.Controllable
local AIControllableTemplate = self.Controllable:GetTemplate()
@ -25344,11 +25408,12 @@ function AI_PATROL_ZONE:onafterStatus()
-- TODO: Check GROUP damage function.
local Damage = self.Controllable:GetLife()
if Damage <= self.PatrolDamageTreshold then
self:E( self.Controllable:GetName() .. " is damaged:" .. Damage .. ", RTB!" )
RTB = true
end
if RTB == true then
self:__RTB( 1 )
self:RTB()
else
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
end
@ -25391,11 +25456,11 @@ function AI_PATROL_ZONE:onafterRTB()
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.**
--
-- ![Banner Image](..\Presentations\AI_Cas\Dia1.JPG)
--
-- Examples can be found in the test missions.
--
-- ===
--
@ -25737,6 +25802,15 @@ function AI_CAS_ZONE:onafterStart( Controllable, From, Event, To )
Controllable:OptionROEHoldFire()
Controllable:OptionROTVertical()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
@ -25919,7 +25993,6 @@ end
--
-- ![Banner Image](..\Presentations\AI_Cap\Dia1.JPG)
--
-- 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 )
Controllable:OptionROEOpenFire()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable

View File

@ -1,5 +1,5 @@
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
env.info( 'Moose Generation Timestamp: 20170116_1223' )
env.info( 'Moose Generation Timestamp: 20170117_1202' )
local base = _G
Include = {}
@ -9795,9 +9795,11 @@ POINT_VEC3 = {
BARO = "BARO",
},
RoutePointType = {
TakeOffParking = "TakeOffParking",
TurningPoint = "Turning Point",
},
RoutePointAction = {
FromParkingArea = "From Parking Area",
TurningPoint = "Turning Point",
},
}
@ -9820,10 +9822,12 @@ do -- POINT_VEC3
--- RoutePoint Types
-- @type POINT_VEC3.RoutePointType
-- @field TakeOffParking "TakeOffParking"
-- @field TurningPoint "Turning Point"
--- RoutePoint Actions
-- @type POINT_VEC3.RoutePointAction
-- @field FromParkingArea "From Parking Area"
-- @field TurningPoint "Turning Point"
-- Constructor.
@ -11255,7 +11259,11 @@ do -- FSM
local from = self.current
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
or self:_call_handler("OnBefore" .. EventName, params) == false
@ -11742,7 +11750,7 @@ do -- FSM_SET
function FSM_SET:_call_handler( handler, params )
if self[handler] then
self:E( "Calling " .. handler )
self:T( "Calling " .. handler )
return self[handler]( self, self.Set, unpack( params ) )
end
end
@ -12306,20 +12314,13 @@ end
--- Returns true if the POSITIONABLE is in the air.
-- Polymorphic, is overridden in GROUP and UNIT.
-- @param Wrapper.Positionable#POSITIONABLE self
-- @return #boolean true if in the air.
-- @return #nil The POSITIONABLE is not existing or alive.
function POSITIONABLE:InAir()
self:F2( self.PositionableName )
local DCSPositionable = self:GetDCSObject()
if DCSPositionable then
local PositionableInAir = DCSPositionable:inAir()
self:T3( PositionableInAir )
return PositionableInAir
end
return nil
end
@ -12786,7 +12787,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime )
if DCSControllable then
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.
-- 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
end
-- Message APIs
--- This module contains the GROUP class.
-- Message APIs--- This module contains the GROUP class.
--
-- 1) @{Wrapper.Group#GROUP} class, extends @{Wrapper.Controllable#CONTROLLABLE}
-- =============================================================
@ -15668,6 +15666,32 @@ function GROUP:CalculateThreatLevelA2G()
return MaxThreatLevelA2G
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.
--
@ -16489,6 +16513,24 @@ function UNIT:IsShip()
return nil
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.
--
-- 1) @{Wrapper.Client#CLIENT} class, extends @{Wrapper.Unit#UNIT}
@ -18902,11 +18944,14 @@ function SPAWN:ReSpawn( SpawnIndex )
local SpawnGroup = self:SpawnWithIndex( SpawnIndex )
if SpawnGroup and WayPoints then
-- If there were WayPoints set, then Re-Execute those WayPoints!
self:E( WayPoints )
SpawnGroup:WayPointInitialize( WayPoints )
SpawnGroup:WayPointExecute( 1, 5 )
end
if SpawnGroup.ReSpawnFunction then
SpawnGroup:ReSpawnFunction()
end
return SpawnGroup
end
@ -24307,13 +24352,12 @@ function DETECTION_AREAS:CreateDetectionSets()
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,
-- even when there are hardly any players in the mission.
-- even when there are hardly any players in the mission.**
--
-- ![Banner Image](..\Presentations\AI_Balancer\Dia1.JPG)
--
-- Examples can be found in the test missions.
--
-- ===
--
@ -24382,6 +24426,8 @@ end
--
-- 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.
--
-- ===
@ -24391,7 +24437,6 @@ end
-- ### 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 :-)
--
-- * **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:
@ -24540,16 +24585,15 @@ end
--- @param #AI_BALANCER self
function AI_BALANCER:onenterMonitoring( SetGroup )
self:E( { self.SetClient:Count() } )
self.SetClient:Flush()
self:T2( { self.SetClient:Count() } )
--self.SetClient:Flush()
self.SetClient:ForEachClient(
--- @param Wrapper.Client#CLIENT Client
function( Client )
self:E(Client.ClientName)
self:T3(Client.ClientName)
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
self:E({Client:IsAlive()})
if Client:IsAlive() then
if AIGroup and AIGroup:IsAlive() == true then
@ -24564,16 +24608,16 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
local PlayerInRange = { Value = false }
local RangeZone = ZONE_RADIUS:New( 'RangeZone', AIGroup:GetVec2(), self.ReturnTresholdRange )
self:E( RangeZone )
self:T2( RangeZone )
_DATABASE:ForEachPlayer(
--- @param Wrapper.Unit#UNIT RangeTestUnit
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
self:E( "in zone" )
self:T2( "in zone" )
if RangeTestUnit:GetCoalition() ~= AIGroup:GetCoalition() then
self:E( "in range" )
self:T2( "in range" )
PlayerInRange.Value = true
end
end
@ -24594,7 +24638,7 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
end
else
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
-- Spawn a new AI taking into account the spawn interval Earliest, Latest
self:__Spawn( math.random( self.Earliest, self.Latest ), Client.UnitName )
@ -24616,7 +24660,6 @@ end
--
-- ![Banner Image](..\Presentations\AI_Patrol\Dia1.JPG)
--
-- 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**
--
-- 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:
--
-- 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.
--
@ -24792,12 +24848,12 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
self.CheckStatus = true
self:ManageFuel( .2, 60 )
self:ManageDamage( 10 )
self:ManageDamage( 1 )
self:SetDetectionInterval( 30 )
self.DetectedUnits = {} -- This table contains the targets detected during patrol.
self:SetStartState( "None" )
self:AddTransition( "None", "Start", "Patrolling" )
@ -24957,7 +25013,7 @@ function AI_PATROL_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltit
-- @param #AI_PATROL_ZONE self
-- @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.
-- @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 Event The Event string.
-- @param #string To The To State string.
self:AddTransition( "*", "Reset", "Patrolling" ) -- FSM_CONTROLLABLE Transition for type #AI_PATROL_ZONE.
return self
end
@ -25144,13 +25202,21 @@ end
function AI_PATROL_ZONE:onafterStart( Controllable, From, Event, To )
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:__Detect( self.DetectInterval ) -- Detect for new targets every 30 seconds.
Controllable:OptionROEHoldFire()
Controllable:OptionROTVertical()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
@ -25168,7 +25234,7 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
local Detected = false
local DetectedTargets = Controllable:GetDetectedTargets()
for TargetID, Target in pairs( DetectedTargets ) do
for TargetID, Target in pairs( DetectedTargets or {} ) do
local TargetObject = Target.object
self:T( TargetObject )
if TargetObject and TargetObject:isExist() and TargetObject.id_ < 50000000 then
@ -25197,11 +25263,12 @@ function AI_PATROL_ZONE:onafterDetect( Controllable, From, Event, To )
end
--- @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
PatrolZone:Route()
PatrolZone:__Route( 1 )
end
@ -25222,55 +25289,51 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
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.
local PatrolRoute = {}
--- Calculate the current route point.
local CurrentVec2 = self.Controllable:GetVec2()
-- Calculate the current route point of the controllable as the start point of the route.
-- 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).
local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude()
local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
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 )
if self.Controllable:InAir() == false then
self:E( "Not in the air, finding route path within PatrolZone" )
local CurrentVec2 = self.Controllable:GetVec2()
--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 )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
self:T2( ToPatrolZoneSpeed )
--- Obtain a 3D @{Point} from the 2D point + altitude.
local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y )
--- Create a route point of type air.
local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
POINT_VEC3.RoutePointType.TurningPoint,
POINT_VEC3.RoutePointAction.TurningPoint,
ToPatrolZoneSpeed,
true
)
PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint
end
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
POINT_VEC3.RoutePointAltType.BARO,
POINT_VEC3.RoutePointType.TakeOffParking,
POINT_VEC3.RoutePointAction.FromParkingArea,
ToPatrolZoneSpeed,
true
)
PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint
else
self:E( "In the air, finding route path within PatrolZone" )
local CurrentVec2 = self.Controllable:GetVec2()
--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 )
local ToPatrolZoneSpeed = self.PatrolMaxSpeed
local CurrentRoutePoint = CurrentPointVec3:RoutePointAir(
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.
@ -25297,7 +25360,7 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To )
--self.CoordTest:SpawnFromVec3( ToTargetPointVec3:GetVec3() )
ToTargetPointVec3:SmokeRed()
--ToTargetPointVec3:SmokeRed()
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 ...
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!
self.Controllable:WayPointExecute( 1, 2 )
@ -25330,6 +25393,7 @@ function AI_PATROL_ZONE:onafterStatus()
local Fuel = self.Controllable:GetUnit(1):GetFuel()
if Fuel < self.PatrolFuelTresholdPercentage then
self:E( self.Controllable:GetName() .. " is out of fuel:" .. Fuel .. ", RTB!" )
local OldAIControllable = self.Controllable
local AIControllableTemplate = self.Controllable:GetTemplate()
@ -25344,11 +25408,12 @@ function AI_PATROL_ZONE:onafterStatus()
-- TODO: Check GROUP damage function.
local Damage = self.Controllable:GetLife()
if Damage <= self.PatrolDamageTreshold then
self:E( self.Controllable:GetName() .. " is damaged:" .. Damage .. ", RTB!" )
RTB = true
end
if RTB == true then
self:__RTB( 1 )
self:RTB()
else
self:__Status( 30 ) -- Execute the Patrol event after 30 seconds.
end
@ -25391,11 +25456,11 @@ function AI_PATROL_ZONE:onafterRTB()
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.**
--
-- ![Banner Image](..\Presentations\AI_Cas\Dia1.JPG)
--
-- Examples can be found in the test missions.
--
-- ===
--
@ -25737,6 +25802,15 @@ function AI_CAS_ZONE:onafterStart( Controllable, From, Event, To )
Controllable:OptionROEHoldFire()
Controllable:OptionROTVertical()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
@ -25919,7 +25993,6 @@ end
--
-- ![Banner Image](..\Presentations\AI_Cap\Dia1.JPG)
--
-- 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 )
Controllable:OptionROEOpenFire()
self.Controllable:OnReSpawn(
function( PatrolGroup )
self:E( "ReSpawn" )
self:__Reset()
self:__Route( 5 )
end
)
end
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable

View File

@ -1,8 +1,4 @@
--- AI Spawning and Decomissioning
--
-- ===
--
-- Name: Spawned AI
-- Name: AIB-001 - Spawned AI
-- Author: FlightControl
-- 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.
-- 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.
--
-- # 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.
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )

View File

@ -1,8 +1,4 @@
--- AI Patrolling
--
-- ===
--
-- Name: Patrol AI
-- Name: AIB-002 - Patrol AI.lua
-- Author: FlightControl
-- Date Created: 7 December 2016
--

View File

@ -1,4 +1,4 @@
-- Name: Respawn Test when Destroyed
-- Name: AIB-004 - Respawn Test when Destroyed.lua
-- Author: FlightControl
-- 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.
-- 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...
--
-- 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" )

View File

@ -1,4 +1,4 @@
-- Name: AIB-006 - Declutter AI at Airbases
-- Name: AIB-005 - Patrol AI and Randomize Zones
-- Author: FlightControl
-- 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.
-- 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( 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.
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 )
Patrol:ManageFuel( 0.2, 60 )
Patrol:SetControllable( AIGroup )
Patrol:__Start( 5 )
Patrol:Start()
end

View File

@ -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"]

View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -0,0 +1,14 @@
settings=
{
["dials"]=
{
["channel"]=-1,
},
["presets"]=
{
[1]=124000000,
[2]=124000000,
[3]=131000000,
[4]=139000000,
},
}

View File

@ -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

View File

@ -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 *** ' )

View File

@ -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

View File

@ -0,0 +1,5 @@
mapResource =
{
["ResKey_Action_323"] = "Moose.lua",
["ResKey_Action_6"] = "AIB-005 - Patrol AI and Randomize Zones.lua",
} -- end of mapResource

View File

@ -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

View File

@ -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

Some files were not shown because too many files have changed in this diff Show More