mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Final updates
This commit is contained in:
parent
b9c85d4cb7
commit
1206c51fe1
@ -1,10 +1,9 @@
|
||||
--- Single-Player:Yes / Mulit-Player:Yes / AI:Yes / Human:No / Types:All -- AI Balancing will replace in multi player missions
|
||||
--- Single-Player:**No** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**All** -- **AI Balancing will replace in multi player missions
|
||||
-- non-occupied human slots with AI groups, in order to provide an engaging simulation environment,
|
||||
-- even when there are hardly any players in the mission.
|
||||
-- even when there are hardly any players in the mission.**
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- Examples can be found in the test missions.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
@ -73,6 +72,8 @@
|
||||
--
|
||||
-- Hereby the change log:
|
||||
--
|
||||
-- 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 )
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- Examples can be found in the test missions.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
@ -345,6 +344,15 @@ function AI_CAP_ZONE:onafterStart( Controllable, From, Event, To )
|
||||
self:EventOnDead( self.OnDead )
|
||||
|
||||
Controllable:OptionROEOpenFire()
|
||||
|
||||
self.Controllable:OnReSpawn(
|
||||
function( PatrolGroup )
|
||||
self:E( "ReSpawn" )
|
||||
self:__Reset()
|
||||
self:__Route( 5 )
|
||||
end
|
||||
)
|
||||
|
||||
end
|
||||
|
||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- Examples can be found in the test missions.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
@ -344,6 +343,15 @@ function AI_CAS_ZONE:onafterStart( Controllable, From, Event, To )
|
||||
|
||||
Controllable:OptionROEHoldFire()
|
||||
Controllable:OptionROTVertical()
|
||||
|
||||
self.Controllable:OnReSpawn(
|
||||
function( PatrolGroup )
|
||||
self:E( "ReSpawn" )
|
||||
self:__Reset()
|
||||
self:__Route( 5 )
|
||||
end
|
||||
)
|
||||
|
||||
end
|
||||
|
||||
--- @param Wrapper.Controllable#CONTROLLABLE AIControllable
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- Examples can be found in the test missions.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
@ -106,6 +105,17 @@
|
||||
--
|
||||
-- ====
|
||||
--
|
||||
-- # **OPEN ISSUES**
|
||||
--
|
||||
-- 2017-01-17: When Spawned AI is located at an airbase, it will be routed first back to the airbase after take-off.
|
||||
--
|
||||
-- 2016-01-17:
|
||||
-- -- Fixed problem with AI returning to base too early and unexpected.
|
||||
-- -- ReSpawning of AI will reset the AI_PATROL and derived classes.
|
||||
-- -- Checked the correct workings of SCHEDULER, and it DOES work correctly.
|
||||
--
|
||||
-- ====
|
||||
--
|
||||
-- # **API CHANGE HISTORY**
|
||||
--
|
||||
-- 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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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.**
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- 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
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- 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.**
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- 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
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- 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
|
||||
|
||||
@ -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.**
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- 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
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- 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.**
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- 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
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- 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
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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" )
|
||||
|
||||
Binary file not shown.
@ -1,8 +1,4 @@
|
||||
--- AI Patrolling
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- Name: Patrol AI
|
||||
-- Name: AIB-002 - Patrol AI.lua
|
||||
-- Author: FlightControl
|
||||
-- Date Created: 7 December 2016
|
||||
--
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -1,4 +1,4 @@
|
||||
-- Name: Respawn Test when Destroyed
|
||||
-- Name: AIB-004 - Respawn Test when Destroyed.lua
|
||||
-- Author: FlightControl
|
||||
-- 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" )
|
||||
|
||||
Binary file not shown.
@ -1,4 +1,4 @@
|
||||
-- Name: AIB-006 - Declutter AI at Airbases
|
||||
-- Name: AIB-005 - Patrol AI and Randomize Zones
|
||||
-- Author: FlightControl
|
||||
-- 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
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,210 @@
|
||||
-- View scripts
|
||||
-- Copyright (C) 2004, Eagle Dynamics.
|
||||
DisableCombatViews = false -- F5 & Ctrl-F5
|
||||
ExternalObjectsLockDistance = 10000.0
|
||||
ShowTargetInfo = false
|
||||
CameraTerrainRestriction = true
|
||||
hAngleRearDefault = 180
|
||||
vAngleRearDefault = -8.0
|
||||
vAngleRearMin = -90 -- -8.0
|
||||
vAngleRearMax = 90.0
|
||||
|
||||
dbg_shell = "weapons.shells.PKT_7_62_T" -- 23mm shell
|
||||
dbg_shell = "weapons.nurs.WGr21"
|
||||
-- dbg_shell = "weapons.shells.2A64_152" -- 152mm shell
|
||||
dbg_shell_v0 = -1 -- Muzzle speed m/s (-1 - speed from shall database)
|
||||
dbg_shell_fire_rate = 60
|
||||
--reformatted per-unit data to be mod system friendly
|
||||
--this file is no longer should be edited for adding new flyable aircraft , DCS automatically check core database (i.e. where you define your aircraft in aircraft table just define ViewSettings and SnapViews tables)
|
||||
|
||||
function default_fighter_player(t)
|
||||
local res = {
|
||||
CameraViewAngleLimits = {20.000000,140.000000},
|
||||
CameraAngleRestriction = {false ,90.000000,0.500000},
|
||||
EyePoint = {0.05 ,0.000000 ,0.000000},
|
||||
limits_6DOF = {x = {-0.050000,0.4500000},y ={-0.300000,0.100000},z = {-0.220000,0.220000},roll = 90.000000},
|
||||
Allow360rotation = false,
|
||||
CameraAngleLimits = {200,-80.000000,110.000000},
|
||||
ShoulderSize = 0.2, -- move body when azimuth value more then 90 degrees
|
||||
}
|
||||
if t then
|
||||
for i,o in pairs(t) do
|
||||
res[i] = o
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
function fulcrum()
|
||||
return {
|
||||
Cockpit = {
|
||||
default_fighter_player({CockpitLocalPoint = {4.71,1.28,0.000000}})
|
||||
},
|
||||
Chase = {
|
||||
LocalPoint = {1.220000,3.750000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-15.080000,6.350000,0.000000},
|
||||
AnglesDefault = {0.000000,-8.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
end
|
||||
|
||||
ViewSettings = {}
|
||||
ViewSettings["A-10A"] = {
|
||||
Cockpit = {
|
||||
[1] = default_fighter_player({CockpitLocalPoint = {4.300000,1.282000,0.000000},
|
||||
EyePoint = {0.000000,0.000000,0.000000},
|
||||
limits_6DOF = {x = {-0.050000,0.600000},
|
||||
y = {-0.300000,0.100000},
|
||||
z = {-0.250000,0.250000},
|
||||
roll = 90.000000}}),
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {0.600000,3.682000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-27.000000,12.000000,0.000000},
|
||||
AnglesDefault = {0.000000,-12.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
ViewSettings["A-10C"] = {
|
||||
Cockpit = {
|
||||
[1] = default_fighter_player({CockpitLocalPoint = {4.300000,1.282000,0.000000},
|
||||
EyePoint = {0.000000,0.000000,0.000000},
|
||||
limits_6DOF = {x = {-0.050000,0.600000},
|
||||
y = {-0.300000,0.100000},
|
||||
z = {-0.250000,0.250000},
|
||||
roll = 90.000000}}),
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {0.600000,3.682000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-27.000000,12.000000,0.000000},
|
||||
AnglesDefault = {0.000000,-12.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
ViewSettings["F-15C"] = {
|
||||
Cockpit = {
|
||||
[1] = default_fighter_player({CockpitLocalPoint = {6.210000,1.204000,0.000000}})-- player slot 1
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {2.510000,3.604000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-13.790000,6.204000,0.000000},
|
||||
AnglesDefault = {0.000000,-8.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
ViewSettings["Ka-50"] = {
|
||||
Cockpit = {
|
||||
[1] = {-- player slot 1
|
||||
CockpitLocalPoint = {3.188000,0.390000,0.000000},
|
||||
CameraViewAngleLimits = {20.000000,120.000000},
|
||||
CameraAngleRestriction = {false,60.000000,0.400000},
|
||||
CameraAngleLimits = {140.000000,-65.000000,90.000000},
|
||||
EyePoint = {0.090000,0.000000,0.000000},
|
||||
limits_6DOF = {x = {-0.020000,0.350000},y ={-0.150000,0.165000},z = {-0.170000,0.170000},roll = 90.000000},
|
||||
},
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {-0.512000,2.790000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-16.812000,5.390000,0.000000},
|
||||
AnglesDefault = {0.000000,-8.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
ViewSettings["MiG-29A"] = fulcrum()
|
||||
ViewSettings["MiG-29G"] = fulcrum()
|
||||
ViewSettings["MiG-29S"] = fulcrum()
|
||||
|
||||
ViewSettings["P-51D"] = {
|
||||
Cockpit = {
|
||||
[1] = {-- player slot 1
|
||||
CockpitLocalPoint = {-1.500000,0.618000,0.000000},
|
||||
CameraViewAngleLimits = {20.000000,120.000000},
|
||||
CameraAngleRestriction = {false,90.000000,0.500000},
|
||||
CameraAngleLimits = {200,-80.000000,90.000000},
|
||||
EyePoint = {0.025000,0.100000,0.000000},
|
||||
ShoulderSize = 0.15,
|
||||
Allow360rotation = false,
|
||||
limits_6DOF = {x = {-0.050000,0.450000},y ={-0.200000,0.200000},z = {-0.220000,0.220000},roll = 90.000000},
|
||||
},
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {0.200000,-0.652000,-0.650000},
|
||||
AnglesDefault = {0.000000,0.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-21.500000,5.618000,0.000000},
|
||||
AnglesDefault = {0.000000,-8.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
ViewSettings["Su-25"] = {
|
||||
Cockpit = {
|
||||
[1] = default_fighter_player({CockpitLocalPoint = {3.352000,0.506000,0.000000}}),-- player slot 1
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {-0.348000,2.906000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-16.648001,5.506000,0.000000},
|
||||
AnglesDefault = {0.000000,-8.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
ViewSettings["Su-25T"] = {
|
||||
Cockpit = {
|
||||
[1] = default_fighter_player({CockpitLocalPoint = {3.406000,0.466000,0.000000}}),-- player slot 1
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {-0.294000,2.866000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-16.594000,5.466000,0.000000},
|
||||
AnglesDefault = {0.000000,-8.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
ViewSettings["Su-25TM"] = {
|
||||
Cockpit = {
|
||||
[1] = {-- player slot 1
|
||||
CockpitLocalPoint = {4.000000,1.000000,0.000000},
|
||||
CameraViewAngleLimits = {20.000000,140.000000},
|
||||
CameraAngleRestriction = {true,90.000000,0.400000},
|
||||
CameraAngleLimits = {160.000000,-70.000000,90.000000},
|
||||
EyePoint = {0.000000,0.000000,0.000000},
|
||||
limits_6DOF = {x = {-0.200000,0.200000},y ={-0.200000,0.200000},z = {-0.200000,0.200000},roll = 60.000000},
|
||||
},
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {4.000000,2.000000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {4.000000,2.000000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
ViewSettings["Su-27"] = {
|
||||
Cockpit = {
|
||||
[1] = default_fighter_player({CockpitLocalPoint = {7.959000,1.419000,0.000000}})-- player slot 1
|
||||
}, -- Cockpit
|
||||
Chase = {
|
||||
LocalPoint = {4.259000,3.819000,0.000000},
|
||||
AnglesDefault = {180.000000,-8.000000},
|
||||
}, -- Chase
|
||||
Arcade = {
|
||||
LocalPoint = {-12.041000,6.419000,0.000000},
|
||||
AnglesDefault = {0.000000,-8.000000},
|
||||
}, -- Arcade
|
||||
}
|
||||
|
||||
ViewSettings["Su-33"] = ViewSettings["Su-27"]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,128 @@
|
||||
-- View scripts
|
||||
-- Copyright (C) 2004, Eagle Dynamics.
|
||||
|
||||
CockpitMouse = true --false
|
||||
CockpitMouseSpeedSlow = 1.0
|
||||
CockpitMouseSpeedNormal = 10.0
|
||||
CockpitMouseSpeedFast = 20.0
|
||||
CockpitKeyboardAccelerationSlow = 5.0
|
||||
CockpitKeyboardAccelerationNormal = 30.0
|
||||
CockpitKeyboardAccelerationFast = 80.0
|
||||
CockpitKeyboardZoomAcceleration = 300.0
|
||||
DisableSnapViewsSaving = false
|
||||
UseDefaultSnapViews = true
|
||||
CockpitPanStepHor = 45.0
|
||||
CockpitPanStepVert = 30.0
|
||||
CockpitNyMove = true
|
||||
|
||||
CockpitHAngleAccelerateTimeMax = 0.15
|
||||
CockpitVAngleAccelerateTimeMax = 0.15
|
||||
CockpitZoomAccelerateTimeMax = 0.2
|
||||
|
||||
function NaturalHeadMoving(tang, roll, omz)
|
||||
local r = roll
|
||||
if r > 90.0 then
|
||||
r = 180.0 - r
|
||||
elseif roll < -90.0 then
|
||||
r = -180.0 - r
|
||||
end
|
||||
local hAngle = -0.25 * r
|
||||
local vAngle = math.min(math.max(0.0, 0.4 * tang + 45.0 * omz), 90.0)
|
||||
return hAngle, vAngle
|
||||
end
|
||||
|
||||
ExternalMouse = true
|
||||
ExternalMouseSpeedSlow = 1.0
|
||||
ExternalMouseSpeedNormal = 5.0
|
||||
ExternalMouseSpeedFast = 20.0
|
||||
ExternalViewAngleMin = 3.0
|
||||
ExternalViewAngleMax = 170.0
|
||||
ExternalViewAngleDefault = 60.0
|
||||
ExternalKeyboardZoomAcceleration = 30.0
|
||||
ExternalKeyboardZoomAccelerateTimeMax = 1.0
|
||||
ExplosionExpoTime = 4.0
|
||||
ExternalKeyboardAccelerationSlow = 1.0
|
||||
ExternalKeyboardAccelerationNormal = 10.0
|
||||
ExternalKeyboardAccelerationFast = 30.0
|
||||
ExternalHAngleAccelerateTimeMax = 3.0
|
||||
ExternalVAngleAccelerateTimeMax = 3.0
|
||||
ExternalDistAccelerateTimeMax = 3.0
|
||||
ExternalHAngleLocalAccelerateTimeMax = 3.0
|
||||
ExternalVAngleLocalAccelerateTimeMax = 3.0
|
||||
ExternalAngleNormalDiscreteStep = 15.0/ExternalKeyboardAccelerationNormal -- When 'S' is pressed only
|
||||
ChaseCameraNyMove = true
|
||||
FreeCameraAngleIncrement = 3.0
|
||||
FreeCameraDistanceIncrement = 200.0
|
||||
FreeCameraLeftRightIncrement = 2.0
|
||||
FreeCameraAltitudeIncrement = 2.0
|
||||
FreeCameraScalarSpeedAcceleration = 0.1
|
||||
xMinMap = -300000
|
||||
xMaxMap = 500000
|
||||
yMinMap = -400000
|
||||
yMaxMap = 200000
|
||||
dxMap = 150000
|
||||
dyMap = 100000
|
||||
|
||||
head_roll_shaking = true
|
||||
head_roll_shaking_max = 30.0
|
||||
head_roll_shaking_compensation_gain = 0.3
|
||||
|
||||
-- CameraJiggle() and CameraFloat() functions make camera position
|
||||
-- dependent on FPS so be careful in using the Shift-J command with tracks, please.
|
||||
-- uncomment to use custom jiggle functions
|
||||
--[[
|
||||
function CameraJiggle(t,rnd1,rnd2,rnd3)
|
||||
local rotX, rotY, rotZ
|
||||
rotX = 0.05 * rnd1 * math.sin(37.0 * (t - 0.0))
|
||||
rotY = 0.05 * rnd2 * math.sin(41.0 * (t - 1.0))
|
||||
rotZ = 0.05 * rnd3 * math.sin(53.0 * (t - 2.0))
|
||||
return rotX, rotY, rotZ
|
||||
end
|
||||
|
||||
function CameraFloat(t)
|
||||
local dX, dY, dZ
|
||||
dX = 0.61 * math.sin(0.7 * t) + 0.047 * math.sin(1.6 * t);
|
||||
dY = 0.43 * math.sin(0.6 * t) + 0.067 * math.sin(1.7 * t);
|
||||
dZ = 0.53 * math.sin(1.0 * t) + 0.083 * math.sin(1.9 * t);
|
||||
return dX, dY, dZ
|
||||
end
|
||||
--]]
|
||||
--Debug keys
|
||||
|
||||
DEBUG_TEXT = 1
|
||||
DEBUG_GEOMETRY = 2
|
||||
|
||||
debug_keys = {
|
||||
[DEBUG_TEXT] = 1,
|
||||
[DEBUG_GEOMETRY] = 1
|
||||
}
|
||||
|
||||
function onDebugCommand(command)
|
||||
if command == 10000 then
|
||||
if debug_keys[DEBUG_TEXT] ~= 0 or debug_keys[DEBUG_GEOMETRY] ~= 0 then
|
||||
debug_keys[DEBUG_GEOMETRY] = 0
|
||||
debug_keys[DEBUG_TEXT] = 0
|
||||
else
|
||||
debug_keys[DEBUG_GEOMETRY] = 1
|
||||
debug_keys[DEBUG_TEXT] = 1
|
||||
end
|
||||
elseif command == 10001 then
|
||||
if debug_keys[DEBUG_TEXT] ~= 0 then
|
||||
debug_keys[DEBUG_TEXT] = 0
|
||||
else
|
||||
debug_keys[DEBUG_TEXT] = 1
|
||||
end
|
||||
elseif command == 10002 then
|
||||
if debug_keys[DEBUG_GEOMETRY] ~= 0 then
|
||||
debug_keys[DEBUG_GEOMETRY] = 0
|
||||
else
|
||||
debug_keys[DEBUG_GEOMETRY] = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- gain values for TrackIR , to unify responce on diffrent types of aircraft
|
||||
TrackIR_gain_x = -0.6
|
||||
TrackIR_gain_y = 0.3
|
||||
TrackIR_gain_z = -0.25
|
||||
TrackIR_gain_roll = -90
|
||||
@ -0,0 +1,880 @@
|
||||
SAT_SYS_GLONASS = 0
|
||||
SAT_SYS_GPS = 1
|
||||
|
||||
almanac = {}
|
||||
--GPS
|
||||
almanac[0] = {}
|
||||
almanac[0]["System"] = SAT_SYS_GPS
|
||||
almanac[0]["Number"] = 1
|
||||
almanac[0]["Orbital"] = "F"
|
||||
almanac[0]["Eccentricity"] = 6.294000e-003
|
||||
almanac[0]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[0]["Orbital_Inclination"] = 9.885676e-001
|
||||
almanac[0]["Rate_of_Right_Ascen"] = -7.862702e-009
|
||||
almanac[0]["SQRT_A"] = 5.153700e+003
|
||||
almanac[0]["Right_Ascen_at_Week"] = 8.096750e-001
|
||||
almanac[0]["Argument_of_Perigee"] = -1.777773e+000
|
||||
almanac[0]["Mean_Anom"] = -5.315745e-001
|
||||
almanac[0]["week"] = 1390
|
||||
|
||||
almanac[1] = {}
|
||||
almanac[1]["System"] = SAT_SYS_GPS
|
||||
almanac[1]["Number"] = 2
|
||||
almanac[1]["Orbital"] = "C"
|
||||
almanac[1]["Eccentricity"] = 8.794000e-003
|
||||
almanac[1]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[1]["Orbital_Inclination"] = 9.487811e-001
|
||||
almanac[1]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[1]["SQRT_A"] = 5.153700e+003
|
||||
almanac[1]["Right_Ascen_at_Week"] = -1.329172e+000
|
||||
almanac[1]["Argument_of_Perigee"] = 2.138637e+000
|
||||
almanac[1]["Mean_Anom"] = 7.311702e-001
|
||||
almanac[1]["week"] = 1390
|
||||
|
||||
almanac[2] = {}
|
||||
almanac[2]["System"] = SAT_SYS_GPS
|
||||
almanac[2]["Number"] = 3
|
||||
almanac[2]["Orbital"] = "F"
|
||||
almanac[2]["Eccentricity"] = 8.424000e-003
|
||||
almanac[2]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[2]["Orbital_Inclination"] = 9.262804e-001
|
||||
almanac[2]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[2]["SQRT_A"] = 5.153600e+003
|
||||
almanac[2]["Right_Ascen_at_Week"] = -2.341514e+000
|
||||
almanac[2]["Argument_of_Perigee"] = 6.749357e-001
|
||||
almanac[2]["Mean_Anom"] = -2.296153e-001
|
||||
almanac[2]["week"] = 1389
|
||||
|
||||
almanac[3] = {}
|
||||
almanac[3]["System"] = SAT_SYS_GPS
|
||||
almanac[3]["Number"] = 4
|
||||
almanac[3]["Orbital"] = "D"
|
||||
almanac[3]["Eccentricity"] = 7.413000e-003
|
||||
almanac[3]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[3]["Orbital_Inclination"] = 9.482889e-001
|
||||
almanac[3]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[3]["SQRT_A"] = 5.153600e+003
|
||||
almanac[3]["Right_Ascen_at_Week"] = -1.309589e+000
|
||||
almanac[3]["Argument_of_Perigee"] = 1.623504e-001
|
||||
almanac[3]["Mean_Anom"] = -3.022943e+000
|
||||
almanac[3]["week"] = 1390
|
||||
|
||||
almanac[4] = {}
|
||||
almanac[4]["System"] = SAT_SYS_GPS
|
||||
almanac[4]["Number"] = 5
|
||||
almanac[4]["Orbital"] = "B"
|
||||
almanac[4]["Eccentricity"] = 7.432000e-003
|
||||
almanac[4]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[4]["Orbital_Inclination"] = 9.387437e-001
|
||||
almanac[4]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[4]["SQRT_A"] = 5.153700e+003
|
||||
almanac[4]["Right_Ascen_at_Week"] = 2.779487e+000
|
||||
almanac[4]["Argument_of_Perigee"] = 1.099033e+000
|
||||
almanac[4]["Mean_Anom"] = 2.970984e+000
|
||||
almanac[4]["week"] = 1390
|
||||
|
||||
almanac[5] = {}
|
||||
almanac[5]["System"] = SAT_SYS_GPS
|
||||
almanac[5]["Number"] = 6
|
||||
almanac[5]["Orbital"] = "C"
|
||||
almanac[5]["Eccentricity"] = 6.020000e-003
|
||||
almanac[5]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[5]["Orbital_Inclination"] = 9.337591e-001
|
||||
almanac[5]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[5]["SQRT_A"] = 5.153600e+003
|
||||
almanac[5]["Right_Ascen_at_Week"] = -2.407627e+000
|
||||
almanac[5]["Argument_of_Perigee"] = -1.788263e+000
|
||||
almanac[5]["Mean_Anom"] = -2.149877e+000
|
||||
almanac[5]["week"] = 1390
|
||||
|
||||
almanac[6] = {}
|
||||
almanac[6]["System"] = SAT_SYS_GPS
|
||||
almanac[6]["Number"] = 7
|
||||
almanac[6]["Orbital"] = "C"
|
||||
almanac[6]["Eccentricity"] = 1.052400e-002
|
||||
almanac[6]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[6]["Orbital_Inclination"] = 9.353229e-001
|
||||
almanac[6]["Rate_of_Right_Ascen"] = -8.080868e-009
|
||||
almanac[6]["SQRT_A"] = 5.153700e+003
|
||||
almanac[6]["Right_Ascen_at_Week"] = -2.433580e+000
|
||||
almanac[6]["Argument_of_Perigee"] = -1.767301e+000
|
||||
almanac[6]["Mean_Anom"] = -3.141503e+000
|
||||
almanac[6]["week"] = 1390
|
||||
|
||||
almanac[7] = {}
|
||||
almanac[7]["System"] = SAT_SYS_GPS
|
||||
almanac[7]["Number"] = 8
|
||||
almanac[7]["Orbital"] = "A"
|
||||
almanac[7]["Eccentricity"] = 9.822000e-003
|
||||
almanac[7]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[7]["Orbital_Inclination"] = 9.741390e-001
|
||||
almanac[7]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[7]["SQRT_A"] = 5.153600e+003
|
||||
almanac[7]["Right_Ascen_at_Week"] = 1.857849e+000
|
||||
almanac[7]["Argument_of_Perigee"] = 2.674034e+000
|
||||
almanac[7]["Mean_Anom"] = -2.009745e+000
|
||||
almanac[7]["week"] = 1390
|
||||
|
||||
almanac[8] = {}
|
||||
almanac[8]["System"] = SAT_SYS_GPS
|
||||
almanac[8]["Number"] = 9
|
||||
almanac[8]["Orbital"] = "A"
|
||||
almanac[8]["Eccentricity"] = 1.839300e-002
|
||||
almanac[8]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[8]["Orbital_Inclination"] = 9.617541e-001
|
||||
almanac[8]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[8]["SQRT_A"] = 5.153600e+003
|
||||
almanac[8]["Right_Ascen_at_Week"] = 1.777005e+000
|
||||
almanac[8]["Argument_of_Perigee"] = 1.274962e+000
|
||||
almanac[8]["Mean_Anom"] = -2.349578e+000
|
||||
almanac[8]["week"] = 1390
|
||||
|
||||
almanac[9] = {}
|
||||
almanac[9]["System"] = SAT_SYS_GPS
|
||||
almanac[9]["Number"] = 10
|
||||
almanac[9]["Orbital"] = "E"
|
||||
almanac[9]["Eccentricity"] = 7.061000e-003
|
||||
almanac[9]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[9]["Orbital_Inclination"] = 9.728876e-001
|
||||
almanac[9]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[9]["SQRT_A"] = 5.153600e+003
|
||||
almanac[9]["Right_Ascen_at_Week"] = -2.563014e-001
|
||||
almanac[9]["Argument_of_Perigee"] = 4.377980e-001
|
||||
almanac[9]["Mean_Anom"] = 1.210716e+000
|
||||
almanac[9]["week"] = 1390
|
||||
|
||||
almanac[10] = {}
|
||||
almanac[10]["System"] = SAT_SYS_GPS
|
||||
almanac[10]["Number"] = 11
|
||||
almanac[10]["Orbital"] = "D"
|
||||
almanac[10]["Eccentricity"] = 5.744000e-003
|
||||
almanac[10]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[10]["Orbital_Inclination"] = 8.959309e-001
|
||||
almanac[10]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[10]["SQRT_A"] = 5.153600e+003
|
||||
almanac[10]["Right_Ascen_at_Week"] = -1.478816e+000
|
||||
almanac[10]["Argument_of_Perigee"] = 3.750011e-001
|
||||
almanac[10]["Mean_Anom"] = -1.522048e+000
|
||||
almanac[10]["week"] = 1390
|
||||
|
||||
almanac[11] = {}
|
||||
almanac[11]["System"] = SAT_SYS_GPS
|
||||
almanac[11]["Number"] = 13
|
||||
almanac[11]["Orbital"] = "F"
|
||||
almanac[11]["Eccentricity"] = 3.088000e-003
|
||||
almanac[11]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[11]["Orbital_Inclination"] = 9.927564e-001
|
||||
almanac[11]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[11]["SQRT_A"] = 5.153700e+003
|
||||
almanac[11]["Right_Ascen_at_Week"] = 7.956600e-001
|
||||
almanac[11]["Argument_of_Perigee"] = 1.279395e+000
|
||||
almanac[11]["Mean_Anom"] = 1.004349e+000
|
||||
almanac[11]["week"] = 1390
|
||||
|
||||
almanac[12] = {}
|
||||
almanac[12]["System"] = SAT_SYS_GPS
|
||||
almanac[12]["Number"] = 14
|
||||
almanac[12]["Orbital"] = "F"
|
||||
almanac[12]["Eccentricity"] = 2.591000e-003
|
||||
almanac[12]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[12]["Orbital_Inclination"] = 9.868729e-001
|
||||
almanac[12]["Rate_of_Right_Ascen"] = -7.885391e-009
|
||||
almanac[12]["SQRT_A"] = 5.153600e+003
|
||||
almanac[12]["Right_Ascen_at_Week"] = 7.819592e-001
|
||||
almanac[12]["Argument_of_Perigee"] = -2.158621e+000
|
||||
almanac[12]["Mean_Anom"] = 5.412611e-001
|
||||
almanac[12]["week"] = 1390
|
||||
|
||||
almanac[13] = {}
|
||||
almanac[13]["System"] = SAT_SYS_GPS
|
||||
almanac[13]["Number"] = 15
|
||||
almanac[13]["Orbital"] = "D"
|
||||
almanac[13]["Eccentricity"] = 9.828000e-003
|
||||
almanac[13]["Time_of_Applicability"] = 3.194880e+005
|
||||
almanac[13]["Orbital_Inclination"] = 9.554204e-001
|
||||
almanac[13]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[13]["SQRT_A"] = 5.153600e+003
|
||||
almanac[13]["Right_Ascen_at_Week"] = -1.123869e+000
|
||||
almanac[13]["Argument_of_Perigee"] = 2.690266e+000
|
||||
almanac[13]["Mean_Anom"] = 2.220476e+000
|
||||
almanac[13]["week"] = 1389
|
||||
|
||||
almanac[14] = {}
|
||||
almanac[14]["System"] = SAT_SYS_GPS
|
||||
almanac[14]["Number"] = 16
|
||||
almanac[14]["Orbital"] = "B"
|
||||
almanac[14]["Eccentricity"] = 3.494000e-003
|
||||
almanac[14]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[14]["Orbital_Inclination"] = 9.629340e-001
|
||||
almanac[14]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[14]["SQRT_A"] = 5.153700e+003
|
||||
almanac[14]["Right_Ascen_at_Week"] = 2.873124e+000
|
||||
almanac[14]["Argument_of_Perigee"] = -7.819243e-001
|
||||
almanac[14]["Mean_Anom"] = 2.623629e+000
|
||||
almanac[14]["week"] = 1390
|
||||
|
||||
almanac[15] = {}
|
||||
almanac[15]["System"] = SAT_SYS_GPS
|
||||
almanac[15]["Number"] = 17
|
||||
almanac[15]["Orbital"] = "C"
|
||||
almanac[15]["Eccentricity"] = 2.141000e-003
|
||||
almanac[15]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[15]["Orbital_Inclination"] = 9.601170e-001
|
||||
almanac[15]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[15]["SQRT_A"] = 5.153700e+003
|
||||
almanac[15]["Right_Ascen_at_Week"] = -2.371499e+000
|
||||
almanac[15]["Argument_of_Perigee"] = 3.087694e+000
|
||||
almanac[15]["Mean_Anom"] = 1.611217e+000
|
||||
almanac[15]["week"] = 1390
|
||||
|
||||
almanac[16] = {}
|
||||
almanac[16]["System"] = SAT_SYS_GPS
|
||||
almanac[16]["Number"] = 18
|
||||
almanac[16]["Orbital"] = "E"
|
||||
almanac[16]["Eccentricity"] = 7.636000e-003
|
||||
almanac[16]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[16]["Orbital_Inclination"] = 9.569597e-001
|
||||
almanac[16]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[16]["SQRT_A"] = 5.153700e+003
|
||||
almanac[16]["Right_Ascen_at_Week"] = -2.359858e-001
|
||||
almanac[16]["Argument_of_Perigee"] = -2.649216e+000
|
||||
almanac[16]["Mean_Anom"] = 2.675029e+000
|
||||
almanac[16]["week"] = 1390
|
||||
|
||||
almanac[17] = {}
|
||||
almanac[17]["System"] = SAT_SYS_GPS
|
||||
almanac[17]["Number"] = 19
|
||||
almanac[17]["Orbital"] = "C"
|
||||
almanac[17]["Eccentricity"] = 3.602000e-003
|
||||
almanac[17]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[17]["Orbital_Inclination"] = 9.580209e-001
|
||||
almanac[17]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[17]["SQRT_A"] = 5.153600e+003
|
||||
almanac[17]["Right_Ascen_at_Week"] = -2.312385e+000
|
||||
almanac[17]["Argument_of_Perigee"] = -1.161079e+000
|
||||
almanac[17]["Mean_Anom"] = 1.310619e+000
|
||||
almanac[17]["week"] = 1390
|
||||
|
||||
almanac[18] = {}
|
||||
almanac[18]["System"] = SAT_SYS_GPS
|
||||
almanac[18]["Number"] = 20
|
||||
almanac[18]["Orbital"] = "E"
|
||||
almanac[18]["Eccentricity"] = 2.796000e-003
|
||||
almanac[18]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[18]["Orbital_Inclination"] = 9.564693e-001
|
||||
almanac[18]["Rate_of_Right_Ascen"] = -7.908080e-009
|
||||
almanac[18]["SQRT_A"] = 5.153600e+003
|
||||
almanac[18]["Right_Ascen_at_Week"] = -2.889565e-001
|
||||
almanac[18]["Argument_of_Perigee"] = 1.379612e+000
|
||||
almanac[18]["Mean_Anom"] = 2.461750e+000
|
||||
almanac[18]["week"] = 1390
|
||||
|
||||
almanac[19] = {}
|
||||
almanac[19]["System"] = SAT_SYS_GPS
|
||||
almanac[19]["Number"] = 21
|
||||
almanac[19]["Orbital"] = "D"
|
||||
almanac[19]["Eccentricity"] = 1.162900e-002
|
||||
almanac[19]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[19]["Orbital_Inclination"] = 9.418592e-001
|
||||
almanac[19]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[19]["SQRT_A"] = 5.153600e+003
|
||||
almanac[19]["Right_Ascen_at_Week"] = -1.289972e+000
|
||||
almanac[19]["Argument_of_Perigee"] = -2.923686e+000
|
||||
almanac[19]["Mean_Anom"] = -2.349194e+000
|
||||
almanac[19]["week"] = 1390
|
||||
|
||||
almanac[20] = {}
|
||||
almanac[20]["System"] = SAT_SYS_GPS
|
||||
almanac[20]["Number"] = 22
|
||||
almanac[20]["Orbital"] = "E"
|
||||
almanac[20]["Eccentricity"] = 4.893000e-003
|
||||
almanac[20]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[20]["Orbital_Inclination"] = 9.545093e-001
|
||||
almanac[20]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[20]["SQRT_A"] = 5.153600e+003
|
||||
almanac[20]["Right_Ascen_at_Week"] = -2.280969e-001
|
||||
almanac[20]["Argument_of_Perigee"] = -1.674502e+000
|
||||
almanac[20]["Mean_Anom"] = 1.106852e+000
|
||||
almanac[20]["week"] = 1390
|
||||
|
||||
almanac[21] = {}
|
||||
almanac[21]["System"] = SAT_SYS_GPS
|
||||
almanac[21]["Number"] = 23
|
||||
almanac[21]["Orbital"] = "F"
|
||||
almanac[21]["Eccentricity"] = 4.822000e-003
|
||||
almanac[21]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[21]["Orbital_Inclination"] = 9.691247e-001
|
||||
almanac[21]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[21]["SQRT_A"] = 5.153700e+003
|
||||
almanac[21]["Right_Ascen_at_Week"] = 7.667399e-001
|
||||
almanac[21]["Argument_of_Perigee"] = 2.497634e+000
|
||||
almanac[21]["Mean_Anom"] = 3.184700e-001
|
||||
almanac[21]["week"] = 1390
|
||||
|
||||
almanac[22] = {}
|
||||
almanac[22]["System"] = SAT_SYS_GPS
|
||||
almanac[22]["Number"] = 24
|
||||
almanac[22]["Orbital"] = "D"
|
||||
almanac[22]["Eccentricity"] = 9.277000e-003
|
||||
almanac[22]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[22]["Orbital_Inclination"] = 9.585183e-001
|
||||
almanac[22]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[22]["SQRT_A"] = 5.153900e+003
|
||||
almanac[22]["Right_Ascen_at_Week"] = -1.274840e+000
|
||||
almanac[22]["Argument_of_Perigee"] = -8.815651e-001
|
||||
almanac[22]["Mean_Anom"] = -1.695551e+000
|
||||
almanac[22]["week"] = 1390
|
||||
|
||||
almanac[23] = {}
|
||||
almanac[23]["System"] = SAT_SYS_GPS
|
||||
almanac[23]["Number"] = 25
|
||||
almanac[23]["Orbital"] = "A"
|
||||
almanac[23]["Eccentricity"] = 1.257400e-002
|
||||
almanac[23]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[23]["Orbital_Inclination"] = 9.551027e-001
|
||||
almanac[23]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[23]["SQRT_A"] = 5.153600e+003
|
||||
almanac[23]["Right_Ascen_at_Week"] = 1.721853e+000
|
||||
almanac[23]["Argument_of_Perigee"] = -1.329870e+000
|
||||
almanac[23]["Mean_Anom"] = -1.769623e+000
|
||||
almanac[23]["week"] = 1390
|
||||
|
||||
almanac[24] = {}
|
||||
almanac[24]["System"] = SAT_SYS_GPS
|
||||
almanac[24]["Number"] = 26
|
||||
almanac[24]["Orbital"] = "F"
|
||||
almanac[24]["Eccentricity"] = 1.745700e-002
|
||||
almanac[24]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[24]["Orbital_Inclination"] = 9.908749e-001
|
||||
almanac[24]["Rate_of_Right_Ascen"] = -7.840012e-009
|
||||
almanac[24]["SQRT_A"] = 5.153700e+003
|
||||
almanac[24]["Right_Ascen_at_Week"] = 7.961836e-001
|
||||
almanac[24]["Argument_of_Perigee"] = 8.161502e-001
|
||||
almanac[24]["Mean_Anom"] = -5.841961e-001
|
||||
almanac[24]["week"] = 1390
|
||||
|
||||
almanac[25] = {}
|
||||
almanac[25]["System"] = SAT_SYS_GPS
|
||||
almanac[25]["Number"] = 27
|
||||
almanac[25]["Orbital"] = "A"
|
||||
almanac[25]["Eccentricity"] = 1.991000e-002
|
||||
almanac[25]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[25]["Orbital_Inclination"] = 9.596563e-001
|
||||
almanac[25]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[25]["SQRT_A"] = 5.153600e+003
|
||||
almanac[25]["Right_Ascen_at_Week"] = 1.754124e+000
|
||||
almanac[25]["Argument_of_Perigee"] = -1.900854e+000
|
||||
almanac[25]["Mean_Anom"] = 3.046487e+000
|
||||
almanac[25]["week"] = 1390
|
||||
|
||||
almanac[26] = {}
|
||||
almanac[26]["System"] = SAT_SYS_GPS
|
||||
almanac[26]["Number"] = 28
|
||||
almanac[26]["Orbital"] = "B"
|
||||
almanac[26]["Eccentricity"] = 1.162800e-002
|
||||
almanac[26]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[26]["Orbital_Inclination"] = 9.610106e-001
|
||||
almanac[26]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[26]["SQRT_A"] = 5.153600e+003
|
||||
almanac[26]["Right_Ascen_at_Week"] = 2.882583e+000
|
||||
almanac[26]["Argument_of_Perigee"] = -2.242868e+000
|
||||
almanac[26]["Mean_Anom"] = 1.860642e+000
|
||||
almanac[26]["week"] = 1390
|
||||
|
||||
almanac[27] = {}
|
||||
almanac[27]["System"] = SAT_SYS_GPS
|
||||
almanac[27]["Number"] = 29
|
||||
almanac[27]["Orbital"] = "F"
|
||||
almanac[27]["Eccentricity"] = 9.462000e-003
|
||||
almanac[27]["Time_of_Applicability"] = 1.474560e+005
|
||||
almanac[27]["Orbital_Inclination"] = 9.874838e-001
|
||||
almanac[27]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[27]["SQRT_A"] = 5.153700e+003
|
||||
almanac[27]["Right_Ascen_at_Week"] = 7.647503e-001
|
||||
almanac[27]["Argument_of_Perigee"] = -8.614589e-001
|
||||
almanac[27]["Mean_Anom"] = -4.488983e-001
|
||||
almanac[27]["week"] = 1390
|
||||
|
||||
almanac[28] = {}
|
||||
almanac[28]["System"] = SAT_SYS_GPS
|
||||
almanac[28]["Number"] = 30
|
||||
almanac[28]["Orbital"] = "B"
|
||||
almanac[28]["Eccentricity"] = 9.296000e-003
|
||||
almanac[28]["Time_of_Applicability"] = 5.898240e+005
|
||||
almanac[28]["Orbital_Inclination"] = 9.452992e-001
|
||||
almanac[28]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[28]["SQRT_A"] = 5.153600e+003
|
||||
almanac[28]["Right_Ascen_at_Week"] = 2.826698e+000
|
||||
almanac[28]["Argument_of_Perigee"] = 1.306413e+000
|
||||
almanac[28]["Mean_Anom"] = 2.148725e+000
|
||||
almanac[28]["week"] = 1390
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--GLONASS
|
||||
--1 îðáèòàëüíàÿ ïëîñêîñòü, íîìåðà 1-8
|
||||
almanac[29] = {}
|
||||
almanac[29]["System"] = SAT_SYS_GLONASS
|
||||
almanac[29]["Number"] = 1
|
||||
almanac[29]["Orbital"] = 1
|
||||
almanac[29]["GLONASS_Data"] = {}
|
||||
almanac[29]["GLONASS_Data"]["NKU_Number"] = 796
|
||||
almanac[29]["GLONASS_Data"]["Cosmos_Number"] = 2411
|
||||
almanac[29]["Eccentricity"] = 1.184000e-003
|
||||
almanac[29]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[29]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[29]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[29]["SQRT_A"] = 5.050500e+003
|
||||
almanac[29]["Right_Ascen_at_Week"] = 5.979807e+000
|
||||
almanac[29]["Argument_of_Perigee"] = 2.622634e+000
|
||||
almanac[29]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[29]["week"] = 1390
|
||||
almanac[29]["Commit_date"] = "06.02.2005"
|
||||
almanac[29]["Life_dates"] = {}
|
||||
|
||||
almanac[30] = {}
|
||||
almanac[30]["System"] = SAT_SYS_GLONASS
|
||||
almanac[30]["Number"] = 2
|
||||
almanac[30]["Orbital"] = 1
|
||||
almanac[30]["GLONASS_Data"] = {}
|
||||
almanac[30]["GLONASS_Data"]["NKU_Number"] = 794
|
||||
almanac[30]["GLONASS_Data"]["Cosmos_Number"] = 2401
|
||||
almanac[30]["Eccentricity"] = 4.486000e-003
|
||||
almanac[30]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[30]["Orbital_Inclination"] = 1.128459e+000
|
||||
almanac[30]["Rate_of_Right_Ascen"] = -6.759654e-009
|
||||
almanac[30]["SQRT_A"] = 5.050500e+003
|
||||
almanac[30]["Right_Ascen_at_Week"] = 5.997871e+000
|
||||
almanac[30]["Argument_of_Perigee"] = 1.709531e+000
|
||||
almanac[30]["Mean_Anom"] = -5.367633e+000
|
||||
almanac[30]["week"] = 1390
|
||||
almanac[30]["Commit_date"] = "02.02.2004"
|
||||
almanac[30]["Life_dates"] = {}
|
||||
|
||||
almanac[31] = {}
|
||||
almanac[31]["System"] = SAT_SYS_GLONASS
|
||||
almanac[31]["Number"] = 3
|
||||
almanac[31]["Orbital"] = 1
|
||||
almanac[31]["GLONASS_Data"] = {}
|
||||
almanac[31]["GLONASS_Data"]["NKU_Number"] = 789
|
||||
almanac[31]["GLONASS_Data"]["Cosmos_Number"] = 2381
|
||||
almanac[31]["Eccentricity"] = 2.459000e-003
|
||||
almanac[31]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[31]["Orbital_Inclination"] = 1.122958e+000
|
||||
almanac[31]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[31]["SQRT_A"] = 5.050500e+003
|
||||
almanac[31]["Right_Ascen_at_Week"] = 5.960713e+000
|
||||
almanac[31]["Argument_of_Perigee"] = -2.683407e+000
|
||||
almanac[31]["Mean_Anom"] = -1.791788e+000
|
||||
almanac[31]["week"] = 1390
|
||||
almanac[31]["Commit_date"] = "04.01.2002"
|
||||
almanac[31]["Life_dates"] = {}
|
||||
|
||||
almanac[32] = {}
|
||||
almanac[32]["System"] = SAT_SYS_GLONASS
|
||||
almanac[32]["Number"] = 4
|
||||
almanac[32]["Orbital"] = 1
|
||||
almanac[32]["GLONASS_Data"] = {}
|
||||
almanac[32]["GLONASS_Data"]["NKU_Number"] = 795
|
||||
almanac[29]["GLONASS_Data"]["Cosmos_Number"] = 2403
|
||||
almanac[32]["Eccentricity"] = 4.054000e-003
|
||||
almanac[32]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[32]["Orbital_Inclination"] = 1.128543e+000
|
||||
almanac[32]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[32]["SQRT_A"] = 5.050500e+003
|
||||
almanac[32]["Right_Ascen_at_Week"] = 5.998081e+000
|
||||
almanac[32]["Argument_of_Perigee"] = 1.497160e+000
|
||||
almanac[32]["Mean_Anom"] = -4.293681e-001
|
||||
almanac[32]["week"] = 1390
|
||||
almanac[32]["Commit_date"] = "29.01.2004"
|
||||
almanac[32]["Life_dates"] = {}
|
||||
|
||||
almanac[33] = {}
|
||||
almanac[33]["System"] = SAT_SYS_GLONASS
|
||||
almanac[33]["Number"] = 5
|
||||
almanac[33]["Orbital"] = 1
|
||||
almanac[33]["GLONASS_Data"] = {}
|
||||
almanac[33]["GLONASS_Data"]["NKU_Number"] = 711
|
||||
almanac[33]["GLONASS_Data"]["Cosmos_Number"] = 2382
|
||||
almanac[33]["Eccentricity"] = 7.040000e-004
|
||||
almanac[33]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[33]["Orbital_Inclination"] = 1.122886e+000
|
||||
almanac[33]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[33]["SQRT_A"] = 5.050600e+003
|
||||
almanac[33]["Right_Ascen_at_Week"] = 5.960713e+000
|
||||
almanac[33]["Argument_of_Perigee"] = 2.740933e+000
|
||||
almanac[33]["Mean_Anom"] = -2.523604e+000
|
||||
almanac[33]["week"] = 1390
|
||||
almanac[33]["Commit_date"] = "13.02.2003"
|
||||
almanac[33]["Life_dates"] = {}
|
||||
|
||||
almanac[34] = {}
|
||||
almanac[34]["System"] = SAT_SYS_GLONASS
|
||||
almanac[34]["Number"] = 6
|
||||
almanac[34]["Orbital"] = 1
|
||||
almanac[34]["GLONASS_Data"] = {}
|
||||
almanac[34]["GLONASS_Data"]["NKU_Number"] = 701
|
||||
almanac[34]["GLONASS_Data"]["Cosmos_Number"] = 2404
|
||||
almanac[34]["Eccentricity"] = 4.766000e-003
|
||||
almanac[34]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[34]["Orbital_Inclination"] = 1.128276e+000
|
||||
almanac[34]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[34]["SQRT_A"] = 5.050500e+003
|
||||
almanac[34]["Right_Ascen_at_Week"] = 5.997906e+000
|
||||
almanac[34]["Argument_of_Perigee"] = 1.802417e+000
|
||||
almanac[34]["Mean_Anom"] = -2.426512e+000
|
||||
almanac[34]["week"] = 1390
|
||||
almanac[34]["Commit_date"] = "08.12.2004"
|
||||
almanac[34]["Life_dates"] = {}
|
||||
|
||||
almanac[35] = {}
|
||||
almanac[35]["System"] = SAT_SYS_GLONASS
|
||||
almanac[35]["Number"] = 7
|
||||
almanac[35]["Orbital"] = 1
|
||||
almanac[35]["GLONASS_Data"] = {}
|
||||
almanac[35]["GLONASS_Data"]["NKU_Number"] = 712
|
||||
almanac[35]["GLONASS_Data"]["Cosmos_Number"] = 2413
|
||||
almanac[35]["Eccentricity"] = 7.570000e-004
|
||||
almanac[35]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[35]["Orbital_Inclination"] = 1.126344e+000
|
||||
almanac[35]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[35]["SQRT_A"] = 5.050500e+003
|
||||
almanac[35]["Right_Ascen_at_Week"] = 5.979388e+000
|
||||
almanac[35]["Argument_of_Perigee"] = 2.566068e+000
|
||||
almanac[35]["Mean_Anom"] = -3.921228e+000
|
||||
almanac[35]["week"] = 1390
|
||||
almanac[35]["Commit_date"] = "07.10.2005"
|
||||
almanac[35]["Life_dates"] = {}
|
||||
|
||||
almanac[36] = {}
|
||||
almanac[36]["System"] = SAT_SYS_GLONASS
|
||||
almanac[36]["GLONASS_Data"] = {}
|
||||
almanac[36]["Number"] = 8
|
||||
almanac[36]["Orbital"] = 1
|
||||
almanac[36]["GLONASS_Data"] = {}
|
||||
almanac[36]["GLONASS_Data"]["NKU_Number"] = 797
|
||||
almanac[36]["GLONASS_Data"]["Cosmos_Number"] = 2412
|
||||
almanac[36]["Eccentricity"] = 4.060000e-004
|
||||
almanac[36]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[36]["Orbital_Inclination"] = 1.126564e+000
|
||||
almanac[36]["Rate_of_Right_Ascen"] = -6.785834e-009
|
||||
almanac[36]["SQRT_A"] = 5.050600e+003
|
||||
almanac[36]["Right_Ascen_at_Week"] = 5.980069e+000
|
||||
almanac[36]["Argument_of_Perigee"] = 2.673633e+000
|
||||
almanac[36]["Mean_Anom"] = -4.812026e+000
|
||||
almanac[36]["week"] = 1390
|
||||
almanac[36]["Commit_date"] = "06.02.2005"
|
||||
almanac[36]["Life_dates"] = {}
|
||||
|
||||
--3 îðáèòàëüíàÿ ïëîñêîñòü, íîìåðà 17-24
|
||||
almanac[37] = {}
|
||||
almanac[37]["System"] = SAT_SYS_GLONASS
|
||||
almanac[37]["Number"] = 17
|
||||
almanac[37]["Orbital"] = 3
|
||||
almanac[37]["GLONASS_Data"] = {}
|
||||
almanac[37]["GLONASS_Data"]["NKU_Number"] = 787
|
||||
almanac[37]["GLONASS_Data"]["Cosmos_Number"] = 2375
|
||||
almanac[37]["Eccentricity"] = 5.670000e-004
|
||||
almanac[37]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[37]["Orbital_Inclination"] = 1.126524e+000
|
||||
almanac[37]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[37]["SQRT_A"] = 5.050500e+003
|
||||
almanac[37]["Right_Ascen_at_Week"] = 3.895554e+000
|
||||
almanac[37]["Argument_of_Perigee"] = 6.085085e-001
|
||||
almanac[37]["Mean_Anom"] = -2.977407e+000
|
||||
almanac[37]["week"] = 1390
|
||||
almanac[37]["Commit_date"] = "04.11.2000"
|
||||
almanac[37]["Life_dates"] = {}
|
||||
|
||||
|
||||
almanac[38] = {}
|
||||
almanac[38]["System"] = SAT_SYS_GLONASS
|
||||
almanac[38]["Number"] = 18
|
||||
almanac[38]["Orbital"] = 3
|
||||
almanac[38]["GLONASS_Data"] = {}
|
||||
almanac[38]["GLONASS_Data"]["NKU_Number"] = 783
|
||||
almanac[38]["GLONASS_Data"]["Cosmos_Number"] = 2374
|
||||
almanac[38]["Eccentricity"] = 4.520000e-003
|
||||
almanac[38]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[38]["Orbital_Inclination"] = 1.126239e+000
|
||||
almanac[38]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[38]["SQRT_A"] = 5.050600e+003
|
||||
almanac[38]["Right_Ascen_at_Week"] = 3.894071e+000
|
||||
almanac[38]["Argument_of_Perigee"] = -2.509589e+000
|
||||
almanac[38]["Mean_Anom"] = -1.020057e+000
|
||||
almanac[38]["week"] = 1390
|
||||
almanac[38]["Commit_date"] = "05.01.2001"
|
||||
almanac[38]["Life_dates"] = {}
|
||||
|
||||
almanac[39] = {}
|
||||
almanac[39]["System"] = SAT_SYS_GLONASS
|
||||
almanac[39]["Number"] = 19
|
||||
almanac[39]["Orbital"] = 3
|
||||
almanac[39]["GLONASS_Data"] = {}
|
||||
almanac[39]["GLONASS_Data"]["NKU_Number"] = 798
|
||||
almanac[39]["GLONASS_Data"]["Cosmos_Number"] = 2417
|
||||
almanac[39]["Eccentricity"] = 2.023000e-003
|
||||
almanac[39]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[39]["Orbital_Inclination"] = 1.132205e+000
|
||||
almanac[39]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[39]["SQRT_A"] = 5.050500e+003
|
||||
almanac[39]["Right_Ascen_at_Week"] = 3.884018e+000
|
||||
almanac[39]["Argument_of_Perigee"] = 2.718313e+000
|
||||
almanac[39]["Mean_Anom"] = -3.933620e-001
|
||||
almanac[39]["week"] = 1390
|
||||
almanac[39]["Commit_date"] = "22.01.2006"
|
||||
almanac[39]["Life_dates"] = {}
|
||||
|
||||
almanac[40] = {}
|
||||
almanac[40]["System"] = SAT_SYS_GLONASS
|
||||
almanac[40]["Number"] = 20
|
||||
almanac[40]["Orbital"] = 3
|
||||
almanac[40]["GLONASS_Data"] = {}
|
||||
almanac[40]["GLONASS_Data"]["NKU_Number"] = 793
|
||||
almanac[40]["GLONASS_Data"]["Cosmos_Number"] = 2396
|
||||
almanac[40]["Eccentricity"] = 1.822000e-003
|
||||
almanac[40]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[40]["Orbital_Inclination"] = 1.129789e+000
|
||||
almanac[40]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[40]["SQRT_A"] = 5.050500e+003
|
||||
almanac[40]["Right_Ascen_at_Week"] = 3.896863e+000
|
||||
almanac[40]["Argument_of_Perigee"] = 2.723776e+000
|
||||
almanac[40]["Mean_Anom"] = -1.193647e+000
|
||||
almanac[40]["week"] = 1390
|
||||
almanac[40]["Commit_date"] = "31.01.2003"
|
||||
almanac[40]["Life_dates"] = {}
|
||||
|
||||
almanac[41] = {}
|
||||
almanac[41]["System"] = SAT_SYS_GLONASS
|
||||
almanac[41]["Number"] = 21
|
||||
almanac[41]["Orbital"] = 3
|
||||
almanac[41]["GLONASS_Data"] = {}
|
||||
almanac[41]["GLONASS_Data"]["NKU_Number"] = 792
|
||||
almanac[41]["GLONASS_Data"]["Cosmos_Number"] = 2395
|
||||
almanac[41]["Eccentricity"] = 5.290000e-004
|
||||
almanac[41]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[41]["Orbital_Inclination"] = 1.129957e+000
|
||||
almanac[41]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[41]["SQRT_A"] = 5.050500e+003
|
||||
almanac[41]["Right_Ascen_at_Week"] = 3.897806e+000
|
||||
almanac[41]["Argument_of_Perigee"] = -9.519367e-001
|
||||
almanac[41]["Mean_Anom"] = -4.578920e+000
|
||||
almanac[41]["week"] = 1390
|
||||
almanac[41]["Commit_date"] = "31.01.2003"
|
||||
almanac[41]["Life_dates"] = {}
|
||||
|
||||
almanac[42] = {}
|
||||
almanac[42]["System"] = SAT_SYS_GLONASS
|
||||
almanac[42]["Number"] = 22
|
||||
almanac[42]["Orbital"] = 3
|
||||
almanac[42]["GLONASS_Data"] = {}
|
||||
almanac[42]["GLONASS_Data"]["NKU_Number"] = 791
|
||||
almanac[42]["GLONASS_Data"]["Cosmos_Number"] = 2394
|
||||
almanac[42]["Eccentricity"] = 9.200000e-005
|
||||
almanac[42]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[42]["Orbital_Inclination"] = 1.129742e+000
|
||||
almanac[42]["Rate_of_Right_Ascen"] = -6.740456e-009
|
||||
almanac[42]["SQRT_A"] = 5.050500e+003
|
||||
almanac[42]["Right_Ascen_at_Week"] = 3.897404e+000
|
||||
almanac[42]["Argument_of_Perigee"] = 2.518211e+000
|
||||
almanac[42]["Mean_Anom"] = -2.530167e+000
|
||||
almanac[42]["week"] = 1390
|
||||
almanac[42]["Commit_date"] = "21.01.2003"
|
||||
almanac[42]["Life_dates"] = {}
|
||||
|
||||
almanac[43] = {}
|
||||
almanac[43]["System"] = SAT_SYS_GLONASS
|
||||
almanac[43]["Number"] = 23
|
||||
almanac[43]["Orbital"] = 3
|
||||
almanac[43]["GLONASS_Data"] = {}
|
||||
almanac[43]["GLONASS_Data"]["NKU_Number"] = 714
|
||||
almanac[43]["GLONASS_Data"]["Cosmos_Number"] = 2419
|
||||
almanac[43]["Eccentricity"] = 8.730000e-004
|
||||
almanac[43]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[43]["Orbital_Inclination"] = 1.132105e+000
|
||||
almanac[43]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[43]["SQRT_A"] = 5.050500e+003
|
||||
almanac[43]["Right_Ascen_at_Week"] = 3.883808e+000
|
||||
almanac[43]["Argument_of_Perigee"] = -3.039139e-001
|
||||
almanac[43]["Mean_Anom"] = -5.228304e-001
|
||||
almanac[43]["week"] = 1390
|
||||
almanac[43]["Commit_date"] = "31.08.2006"
|
||||
almanac[43]["Life_dates"] = {}
|
||||
|
||||
almanac[44] = {}
|
||||
almanac[44]["System"] = SAT_SYS_GLONASS
|
||||
almanac[44]["Number"] = 24
|
||||
almanac[44]["Orbital"] = 3
|
||||
almanac[44]["GLONASS_Data"] = {}
|
||||
almanac[44]["GLONASS_Data"]["NKU_Number"] = 713
|
||||
almanac[44]["GLONASS_Data"]["Cosmos_Number"] = 2418
|
||||
almanac[44]["Eccentricity"] = 2.044000e-003
|
||||
almanac[44]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[44]["Orbital_Inclination"] = 1.132430e+000
|
||||
almanac[44]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[44]["SQRT_A"] = 5.050500e+003
|
||||
almanac[44]["Right_Ascen_at_Week"] = 3.883983e+000
|
||||
almanac[44]["Argument_of_Perigee"] = -3.722784e-001
|
||||
almanac[44]["Mean_Anom"] = -1.240457e+000
|
||||
almanac[44]["week"] = 1390
|
||||
almanac[44]["Commit_date"] = "31.08.2006"
|
||||
almanac[44]["Life_dates"] = {}
|
||||
|
||||
--2 îðáèòàëüíàÿ ïëîñêîñòü, íîìåðà 9-16
|
||||
almanac[45] = {}
|
||||
almanac[45]["System"] = SAT_SYS_GLONASS
|
||||
almanac[45]["Number"] = 9
|
||||
almanac[45]["Orbital"] = 2
|
||||
almanac[45]["GLONASS_Data"] = {}
|
||||
almanac[45]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||
almanac[45]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||
almanac[45]["Eccentricity"] = 1.184000e-003
|
||||
almanac[45]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[45]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[45]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[45]["SQRT_A"] = 5.050500e+003
|
||||
almanac[45]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||
almanac[45]["Argument_of_Perigee"] = 2.88430067
|
||||
almanac[45]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[45]["week"] = 1390
|
||||
almanac[45]["Commit_date"] = "N/A"
|
||||
almanac[45]["Life_dates"] = {}
|
||||
|
||||
almanac[46] = {}
|
||||
almanac[46]["System"] = SAT_SYS_GLONASS
|
||||
almanac[46]["Number"] = 10
|
||||
almanac[46]["Orbital"] = 2
|
||||
almanac[46]["GLONASS_Data"] = {}
|
||||
almanac[46]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||
almanac[46]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||
almanac[46]["Eccentricity"] = 1.184000e-003
|
||||
almanac[46]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[46]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[46]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[46]["SQRT_A"] = 5.050500e+003
|
||||
almanac[46]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||
almanac[46]["Argument_of_Perigee"] = 3.66930067
|
||||
almanac[46]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[46]["week"] = 1390
|
||||
almanac[46]["Commit_date"] = "N/A"
|
||||
almanac[46]["Life_dates"] = {}
|
||||
|
||||
almanac[47] = {}
|
||||
almanac[47]["System"] = SAT_SYS_GLONASS
|
||||
almanac[47]["Number"] = 11
|
||||
almanac[47]["Orbital"] = 2
|
||||
almanac[47]["GLONASS_Data"] = {}
|
||||
almanac[47]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||
almanac[47]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||
almanac[47]["Eccentricity"] = 1.184000e-003
|
||||
almanac[47]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[47]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[47]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[47]["SQRT_A"] = 5.050500e+003
|
||||
almanac[47]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||
almanac[47]["Argument_of_Perigee"] = 4.45430067
|
||||
almanac[47]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[47]["week"] = 1390
|
||||
almanac[47]["Commit_date"] = "N/A"
|
||||
almanac[47]["Life_dates"] = {}
|
||||
|
||||
almanac[48] = {}
|
||||
almanac[48]["System"] = SAT_SYS_GLONASS
|
||||
almanac[48]["Number"] = 12
|
||||
almanac[48]["Orbital"] = 2
|
||||
almanac[48]["GLONASS_Data"] = {}
|
||||
almanac[48]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||
almanac[48]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||
almanac[48]["Eccentricity"] = 1.184000e-003
|
||||
almanac[48]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[48]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[48]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[48]["SQRT_A"] = 5.050500e+003
|
||||
almanac[48]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||
almanac[48]["Argument_of_Perigee"] = 5.23930067
|
||||
almanac[48]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[48]["week"] = 1390
|
||||
almanac[48]["Commit_date"] = "N/A"
|
||||
almanac[48]["Life_dates"] = {}
|
||||
|
||||
almanac[49] = {}
|
||||
almanac[49]["System"] = SAT_SYS_GLONASS
|
||||
almanac[49]["Number"] = 13
|
||||
almanac[49]["Orbital"] = 2
|
||||
almanac[49]["GLONASS_Data"] = {}
|
||||
almanac[49]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||
almanac[49]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||
almanac[49]["Eccentricity"] = 1.184000e-003
|
||||
almanac[49]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[49]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[49]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[49]["SQRT_A"] = 5.050500e+003
|
||||
almanac[49]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||
almanac[49]["Argument_of_Perigee"] = 6.02430067
|
||||
almanac[49]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[49]["week"] = 1390
|
||||
almanac[49]["Commit_date"] = "N/A"
|
||||
almanac[49]["Life_dates"] = {}
|
||||
|
||||
almanac[50] = {}
|
||||
almanac[50]["System"] = SAT_SYS_GLONASS
|
||||
almanac[50]["Number"] = 14
|
||||
almanac[50]["Orbital"] = 2
|
||||
almanac[50]["GLONASS_Data"] = {}
|
||||
almanac[50]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||
almanac[50]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||
almanac[50]["Eccentricity"] = 1.184000e-003
|
||||
almanac[50]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[50]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[50]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[50]["SQRT_A"] = 5.050500e+003
|
||||
almanac[50]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||
almanac[50]["Argument_of_Perigee"] = 0.52930067
|
||||
almanac[50]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[50]["week"] = 1390
|
||||
almanac[50]["Commit_date"] = "N/A"
|
||||
almanac[50]["Life_dates"] = {}
|
||||
|
||||
almanac[51] = {}
|
||||
almanac[51]["System"] = SAT_SYS_GLONASS
|
||||
almanac[51]["Number"] = 15
|
||||
almanac[51]["Orbital"] = 2
|
||||
almanac[51]["GLONASS_Data"] = {}
|
||||
almanac[51]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||
almanac[51]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||
almanac[51]["Eccentricity"] = 1.184000e-003
|
||||
almanac[51]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[51]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[51]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[51]["SQRT_A"] = 5.050500e+003
|
||||
almanac[51]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||
almanac[51]["Argument_of_Perigee"] = 1.31430067
|
||||
almanac[51]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[51]["week"] = 1390
|
||||
almanac[51]["Commit_date"] = "N/A"
|
||||
almanac[51]["Life_dates"] = {}
|
||||
|
||||
almanac[52] = {}
|
||||
almanac[52]["System"] = SAT_SYS_GLONASS
|
||||
almanac[52]["Number"] = 16
|
||||
almanac[52]["Orbital"] = 2
|
||||
almanac[52]["GLONASS_Data"] = {}
|
||||
almanac[52]["GLONASS_Data"]["NKU_Number"] = "N/A"
|
||||
almanac[52]["GLONASS_Data"]["Cosmos_Number"] = "N/A"
|
||||
almanac[52]["Eccentricity"] = 1.184000e-003
|
||||
almanac[52]["Time_of_Applicability"] = 0.000000e+000
|
||||
almanac[52]["Orbital_Inclination"] = 1.126443e+000
|
||||
almanac[52]["Rate_of_Right_Ascen"] = 0.000000e+000
|
||||
almanac[52]["SQRT_A"] = 5.050500e+003
|
||||
almanac[52]["Right_Ascen_at_Week"] = 1.79067e+000
|
||||
almanac[52]["Argument_of_Perigee"] = 2.09930067
|
||||
almanac[52]["Mean_Anom"] = -5.519651e+000
|
||||
almanac[52]["week"] = 1390
|
||||
almanac[52]["Commit_date"] = "N/A"
|
||||
almanac[52]["Life_dates"] = {}
|
||||
|
||||
SA_mode = false
|
||||
AS_mode = false
|
||||
@ -0,0 +1,27 @@
|
||||
birds_avail = true --Birds availability. false - there is no birds
|
||||
birds_maximum_hrad = 200 --Maximum altitude above ground al sea level bird could be met
|
||||
birds_maximum_absolute_height = 8000 --Maximum absolute altitude bird could be met
|
||||
birds_minimum_velocity = 40 --Minimum velocity bird could be met
|
||||
birds_delta_time = 3.55
|
||||
birds_probability = {0.006333333*150,
|
||||
0.004166667*150,
|
||||
0.001966667*150,
|
||||
0.001090909*150,
|
||||
0.000741818*150,
|
||||
0.0006*150,
|
||||
0.000510545*150,
|
||||
0.000447273*150,
|
||||
0.000389455*150,
|
||||
0.000349091*150,
|
||||
0.000310909*150,
|
||||
0.000282545*150,
|
||||
0.000250909*150,
|
||||
0.000220364*150,
|
||||
0.000196364*150,
|
||||
0.000174545*150,
|
||||
0.000152727*150,
|
||||
0.000128727*150,
|
||||
0.000103636*150,
|
||||
7.63636E-05*150,
|
||||
0*150
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
settings=
|
||||
{
|
||||
["dials"]=
|
||||
{
|
||||
["channel"]=-1,
|
||||
},
|
||||
["presets"]=
|
||||
{
|
||||
[1]=124000000,
|
||||
[2]=124000000,
|
||||
[3]=131000000,
|
||||
[4]=139000000,
|
||||
},
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
-- Name: AIB-005 - Patrol AI and Randomize Zones
|
||||
-- Author: FlightControl
|
||||
-- Date Created: 10 Jan 2016
|
||||
--
|
||||
-- # Situation:
|
||||
--
|
||||
-- For the red coalition, 2 client slots are foreseen.
|
||||
-- For those players that have not joined the mission, red AI is spawned.
|
||||
-- The red AI should start patrolling an area until fuel is empty and return to the home base.
|
||||
-- For each AI being spawned, ensure that they fly to a random zone defined within the mission editor.
|
||||
-- Right now there are two patrol zones defined, so the AI should start patrolliing in one of these zones.
|
||||
--
|
||||
-- # Test cases:
|
||||
--
|
||||
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
|
||||
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
||||
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
||||
-- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa.
|
||||
-- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa.
|
||||
-- 6. Ensure that you see the AI patrol in one of the two zones ...
|
||||
|
||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
|
||||
-- Define the SPAWN object for the red AI plane template.
|
||||
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||
-- If a blocked plane exists, this red plane will be ReSpawned.
|
||||
local RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
|
||||
|
||||
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
|
||||
local RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
||||
|
||||
-- Create the first polygon zone ...
|
||||
local PatrolZoneGroup1 = GROUP:FindByName( "PatrolZone1" )
|
||||
local PatrolZone1 = ZONE_POLYGON:New( "PatrolZone1", PatrolZoneGroup1 )
|
||||
|
||||
-- Create the second polygon zone ...
|
||||
local PatrolZoneGroup2 = GROUP:FindByName( "PatrolZone2" )
|
||||
local PatrolZone2 = ZONE_POLYGON:New( "PatrolZone2", PatrolZoneGroup2 )
|
||||
|
||||
-- Now, create an array of these zones ...
|
||||
local PatrolZoneArray = { PatrolZone1, PatrolZone2 }
|
||||
|
||||
function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
|
||||
|
||||
local Patrol = AI_PATROL_ZONE:New( PatrolZoneArray[math.random( 1, 2 )], 3000, 6000, 400, 600 )
|
||||
Patrol:ManageFuel( 0.2, 60 )
|
||||
Patrol:SetControllable( AIGroup )
|
||||
Patrol:Start()
|
||||
|
||||
end
|
||||
@ -0,0 +1,31 @@
|
||||
env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' )
|
||||
env.info( 'Moose Generation Timestamp: 20170116_2116' )
|
||||
|
||||
local base = _G
|
||||
|
||||
Include = {}
|
||||
|
||||
Include.File = function( IncludeFile )
|
||||
if not Include.Files[ IncludeFile ] then
|
||||
Include.Files[IncludeFile] = IncludeFile
|
||||
env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath )
|
||||
local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) )
|
||||
if f == nil then
|
||||
error ("Could not load MOOSE file " .. IncludeFile .. ".lua" )
|
||||
else
|
||||
env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath )
|
||||
return f()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Include.ProgramPath = "Scripts/Moose/"
|
||||
|
||||
env.info( "Include.ProgramPath = " .. Include.ProgramPath)
|
||||
|
||||
Include.Files = {}
|
||||
|
||||
Include.File( "Moose" )
|
||||
|
||||
BASE:TraceOnOff( true )
|
||||
env.info( '*** MOOSE INCLUDE END *** ' )
|
||||
@ -0,0 +1,416 @@
|
||||
dictionary =
|
||||
{
|
||||
["DictKey_UnitName_89"] = "",
|
||||
["DictKey_UnitName_67"] = "AI US 1",
|
||||
["DictKey_UnitName_156"] = "RU Client #020",
|
||||
["DictKey_UnitName_297"] = "US Client #023",
|
||||
["DictKey_WptName_310"] = "",
|
||||
["DictKey_GroupName_125"] = "RU Client #010",
|
||||
["DictKey_UnitName_135"] = "RU Client #013",
|
||||
["DictKey_UnitName_374"] = "RU Client #004",
|
||||
["DictKey_WptName_292"] = "",
|
||||
["DictKey_WptName_48"] = "",
|
||||
["DictKey_GroupName_137"] = "RU Client #014",
|
||||
["DictKey_WptName_70"] = "",
|
||||
["DictKey_WptName_295"] = "",
|
||||
["DictKey_UnitName_25"] = "AI RU",
|
||||
["DictKey_GroupName_113"] = "RU Client #006",
|
||||
["DictKey_GroupName_284"] = "US Client #019",
|
||||
["DictKey_UnitName_312"] = "US Client #028",
|
||||
["DictKey_WptName_13"] = "",
|
||||
["DictKey_WptName_124"] = "",
|
||||
["DictKey_WptName_217"] = "",
|
||||
["DictKey_GroupName_10"] = "Client Group 2",
|
||||
["DictKey_GroupName_302"] = "US Client #025",
|
||||
["DictKey_UnitName_258"] = "US Client #010",
|
||||
["DictKey_WptName_181"] = "",
|
||||
["DictKey_WptName_109"] = "",
|
||||
["DictKey_WptName_336"] = "",
|
||||
["DictKey_GroupName_311"] = "US Client #028",
|
||||
["DictKey_GroupName_242"] = "US Client #005",
|
||||
["DictKey_UnitName_74"] = "Pilot #004",
|
||||
["DictKey_WptName_136"] = "",
|
||||
["DictKey_WptName_99"] = "",
|
||||
["DictKey_UnitName_315"] = "US Client #029",
|
||||
["DictKey_UnitName_43"] = "Client 5",
|
||||
["DictKey_GroupName_331"] = "PatrolZone2",
|
||||
["DictKey_WptName_178"] = "",
|
||||
["DictKey_GroupName_30"] = "AI RU",
|
||||
["DictKey_UnitName_249"] = "US Client #007",
|
||||
["DictKey_WptName_53"] = "",
|
||||
["DictKey_UnitName_171"] = "RU Client #025",
|
||||
["DictKey_WptName_289"] = "",
|
||||
["DictKey_GroupName_352"] = "RU Client #008",
|
||||
["DictKey_GroupName_260"] = "US Client #011",
|
||||
["DictKey_descriptionRedTask_2"] = "",
|
||||
["DictKey_WptName_55"] = "",
|
||||
["DictKey_GroupName_33"] = "AI RU",
|
||||
["DictKey_UnitName_183"] = "RU Client #029",
|
||||
["DictKey_WptName_190"] = "",
|
||||
["DictKey_UnitName_216"] = "RU Client #040",
|
||||
["DictKey_WptName_286"] = "",
|
||||
["DictKey_UnitName_153"] = "RU Client #019",
|
||||
["DictKey_WptName_75"] = "",
|
||||
["DictKey_UnitName_105"] = "RU Client #003",
|
||||
["DictKey_GroupName_382"] = "RU Client #007",
|
||||
["DictKey_UnitName_270"] = "US Client #014",
|
||||
["DictKey_WptName_47"] = "",
|
||||
["DictKey_GroupName_170"] = "RU Client #025",
|
||||
["DictKey_UnitName_46"] = "Client 7",
|
||||
["DictKey_WptName_92"] = "",
|
||||
["DictKey_UnitName_380"] = "RU Client #006",
|
||||
["DictKey_GroupName_191"] = "RU Client #032",
|
||||
["DictKey_UnitName_40"] = "Client 6",
|
||||
["DictKey_UnitName_95"] = "Pilot #002",
|
||||
["DictKey_GroupName_296"] = "US Client #023",
|
||||
["DictKey_WptName_244"] = "",
|
||||
["DictKey_UnitName_377"] = "RU Client #005",
|
||||
["DictKey_WptName_9"] = "",
|
||||
["DictKey_UnitName_11"] = "Client 2",
|
||||
["DictKey_GroupName_308"] = "US Client #027",
|
||||
["DictKey_GroupName_27"] = "AI RU",
|
||||
["DictKey_UnitName_22"] = "Client 4",
|
||||
["DictKey_WptName_62"] = "",
|
||||
["DictKey_GroupName_367"] = "RU Client #002",
|
||||
["DictKey_sortie_4"] = "",
|
||||
["DictKey_WptName_333"] = "",
|
||||
["DictKey_UnitName_356"] = "RU Client #009",
|
||||
["DictKey_GroupName_152"] = "RU Client #019",
|
||||
["DictKey_GroupName_281"] = "US Client #018",
|
||||
["DictKey_WptName_235"] = "",
|
||||
["DictKey_UnitName_362"] = "RU Client #011",
|
||||
["DictKey_WptName_375"] = "",
|
||||
["DictKey_GroupName_379"] = "RU Client #006",
|
||||
["DictKey_UnitName_267"] = "US Client #013",
|
||||
["DictKey_GroupName_173"] = "RU Client #026",
|
||||
["DictKey_GroupName_248"] = "US Client #007",
|
||||
["DictKey_WptName_369"] = "",
|
||||
["DictKey_UnitName_58"] = "Pilot #003",
|
||||
["DictKey_WptName_160"] = "",
|
||||
["DictKey_UnitName_246"] = "US Client #006",
|
||||
["DictKey_WptName_163"] = "",
|
||||
["DictKey_WptName_98"] = "",
|
||||
["DictKey_GroupName_340"] = "RU Client #004",
|
||||
["DictKey_UnitName_365"] = "RU Client #012",
|
||||
["DictKey_GroupName_221"] = "RU Client #042",
|
||||
["DictKey_UnitName_318"] = "US Client #030",
|
||||
["DictKey_GroupName_158"] = "RU Client #021",
|
||||
["DictKey_GroupName_320"] = "US Client #031",
|
||||
["DictKey_UnitName_34"] = "AI RU",
|
||||
["DictKey_WptName_208"] = "",
|
||||
["DictKey_WptName_334"] = "",
|
||||
["DictKey_WptName_54"] = "",
|
||||
["DictKey_WptName_82"] = "",
|
||||
["DictKey_UnitName_383"] = "RU Client #007",
|
||||
["DictKey_UnitName_234"] = "US Client #002",
|
||||
["DictKey_GroupName_104"] = "RU Client #003",
|
||||
["DictKey_UnitName_368"] = "RU Client #002",
|
||||
["DictKey_WptName_366"] = "",
|
||||
["DictKey_GroupName_206"] = "RU Client #037",
|
||||
["DictKey_GroupName_24"] = "AI RU",
|
||||
["DictKey_GroupName_325"] = "PatrolZone1",
|
||||
["DictKey_UnitName_225"] = "RU Client #043",
|
||||
["DictKey_WptName_328"] = "",
|
||||
["DictKey_WptName_193"] = "",
|
||||
["DictKey_UnitName_219"] = "RU Client #041",
|
||||
["DictKey_WptName_68"] = "",
|
||||
["DictKey_GroupName_122"] = "RU Client #009",
|
||||
["DictKey_GroupName_266"] = "US Client #013",
|
||||
["DictKey_UnitName_350"] = "RU Client #007",
|
||||
["DictKey_UnitName_341"] = "RU Client #004",
|
||||
["DictKey_UnitName_228"] = "RU Client #044",
|
||||
["DictKey_UnitName_204"] = "RU Client #036",
|
||||
["DictKey_WptName_49"] = "",
|
||||
["DictKey_UnitName_303"] = "US Client #025",
|
||||
["DictKey_GroupName_245"] = "US Client #006",
|
||||
["DictKey_GroupName_275"] = "US Client #016",
|
||||
["DictKey_WptName_90"] = "",
|
||||
["DictKey_UnitName_222"] = "RU Client #042",
|
||||
["DictKey_GroupName_110"] = "RU Client #005",
|
||||
["DictKey_UnitName_120"] = "RU Client #008",
|
||||
["DictKey_WptName_280"] = "",
|
||||
["DictKey_UnitName_144"] = "RU Client #016",
|
||||
["DictKey_UnitName_306"] = "US Client #026",
|
||||
["DictKey_WptName_118"] = "",
|
||||
["DictKey_WptName_307"] = "",
|
||||
["DictKey_UnitName_129"] = "RU Client #011",
|
||||
["DictKey_GroupName_59"] = "Client Group Range 1",
|
||||
["DictKey_GroupName_164"] = "RU Client #023",
|
||||
["DictKey_UnitName_252"] = "US Client #008",
|
||||
["DictKey_WptName_61"] = "",
|
||||
["DictKey_WptName_184"] = "",
|
||||
["DictKey_GroupName_361"] = "RU Client #011",
|
||||
["DictKey_WptName_80"] = "",
|
||||
["DictKey_GroupName_299"] = "US Client #024",
|
||||
["DictKey_GroupName_314"] = "US Client #029",
|
||||
["DictKey_WptName_86"] = "",
|
||||
["DictKey_GroupName_346"] = "RU Client #006",
|
||||
["DictKey_WptName_205"] = "",
|
||||
["DictKey_WptName_390"] = "",
|
||||
["DictKey_WptName_196"] = "",
|
||||
["DictKey_GroupName_263"] = "US Client #012",
|
||||
["DictKey_WptName_238"] = "",
|
||||
["DictKey_WptName_51"] = "",
|
||||
["DictKey_UnitName_150"] = "RU Client #018",
|
||||
["DictKey_WptName_76"] = "",
|
||||
["DictKey_UnitName_291"] = "US Client #021",
|
||||
["DictKey_WptName_127"] = "",
|
||||
["DictKey_GroupName_21"] = "Client Group 4",
|
||||
["DictKey_GroupName_364"] = "RU Client #012",
|
||||
["DictKey_GroupName_278"] = "US Client #017",
|
||||
["DictKey_WptName_44"] = "",
|
||||
["DictKey_WptName_335"] = "",
|
||||
["DictKey_WptName_100"] = "",
|
||||
["DictKey_GroupName_185"] = "RU Client #030",
|
||||
["DictKey_UnitName_321"] = "US Client #031",
|
||||
["DictKey_WptName_112"] = "",
|
||||
["DictKey_GroupName_230"] = "RU Client #045",
|
||||
["DictKey_UnitName_201"] = "RU Client #035",
|
||||
["DictKey_WptName_145"] = "",
|
||||
["DictKey_GroupName_128"] = "RU Client #011",
|
||||
["DictKey_descriptionBlueTask_3"] = "",
|
||||
["DictKey_WptName_241"] = "",
|
||||
["DictKey_descriptionText_1"] = "-- Name: AIB-005 - Patrol AI and Randomize Zones\
|
||||
-- Author: FlightControl\
|
||||
-- Date Created: 10 Jan 2016\
|
||||
--\
|
||||
-- # Situation:\
|
||||
--\
|
||||
-- For the red coalition, 2 client slots are foreseen.\
|
||||
-- For those players that have not joined the mission, red AI is spawned.\
|
||||
-- The red AI should start patrolling an area until fuel is empty and return to the home base.\
|
||||
-- For each AI being spawned, ensure that they fly to a random zone defined within the mission editor.\
|
||||
-- Right now there are two patrol zones defined, so the AI should start patrolliing in one of these zones.\
|
||||
-- \
|
||||
-- # Test cases:\
|
||||
-- \
|
||||
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.\
|
||||
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.\
|
||||
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.\
|
||||
-- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa.\
|
||||
-- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa.\
|
||||
-- 6. Ensure that you see the AI patrol in one of the two zones ...\
|
||||
",
|
||||
["DictKey_GroupName_134"] = "RU Client #013",
|
||||
["DictKey_UnitName_102"] = "RU Client #002",
|
||||
["DictKey_WptName_378"] = "",
|
||||
["DictKey_GroupName_224"] = "RU Client #043",
|
||||
["DictKey_UnitName_371"] = "RU Client #003",
|
||||
["DictKey_UnitName_392"] = "RU Client #010",
|
||||
["DictKey_UnitName_108"] = "RU Client #004",
|
||||
["DictKey_UnitName_132"] = "RU Client #012",
|
||||
["DictKey_UnitName_174"] = "RU Client #026",
|
||||
["DictKey_WptName_274"] = "",
|
||||
["DictKey_GroupName_176"] = "RU Client #027",
|
||||
["DictKey_WptName_339"] = "",
|
||||
["DictKey_WptName_199"] = "",
|
||||
["DictKey_UnitName_123"] = "RU Client #009",
|
||||
["DictKey_WptName_81"] = "",
|
||||
["DictKey_UnitName_213"] = "RU Client #039",
|
||||
["DictKey_WptName_211"] = "",
|
||||
["DictKey_GroupName_227"] = "RU Client #044",
|
||||
["DictKey_WptName_77"] = "",
|
||||
["DictKey_WptName_29"] = "",
|
||||
["DictKey_WptName_166"] = "",
|
||||
["DictKey_WptName_396"] = "",
|
||||
["DictKey_UnitName_168"] = "RU Client #024",
|
||||
["DictKey_UnitName_210"] = "RU Client #038",
|
||||
["DictKey_WptName_169"] = "",
|
||||
["DictKey_GroupName_7"] = "US Client #001",
|
||||
["DictKey_WptName_384"] = "",
|
||||
["DictKey_WptName_354"] = "",
|
||||
["DictKey_GroupName_143"] = "RU Client #016",
|
||||
["DictKey_UnitName_288"] = "US Client #020",
|
||||
["DictKey_GroupName_155"] = "RU Client #020",
|
||||
["DictKey_GroupName_236"] = "US Client #003",
|
||||
["DictKey_ActionText_17"] = "",
|
||||
["DictKey_WptName_157"] = "",
|
||||
["DictKey_UnitName_114"] = "RU Client #006",
|
||||
["DictKey_WptName_298"] = "",
|
||||
["DictKey_WptName_142"] = "",
|
||||
["DictKey_GroupName_254"] = "US Client #009",
|
||||
["DictKey_WptName_91"] = "",
|
||||
["DictKey_WptName_259"] = "",
|
||||
["DictKey_WptName_23"] = "",
|
||||
["DictKey_WptName_172"] = "",
|
||||
["DictKey_WptName_214"] = "",
|
||||
["DictKey_UnitName_264"] = "US Client #012",
|
||||
["DictKey_WptName_151"] = "",
|
||||
["DictKey_UnitName_15"] = "AI US 2",
|
||||
["DictKey_GroupName_45"] = "Client Group 7",
|
||||
["DictKey_WptName_71"] = "",
|
||||
["DictKey_WptName_26"] = "",
|
||||
["DictKey_UnitName_57"] = "Pilot #002",
|
||||
["DictKey_UnitName_31"] = "AI RU",
|
||||
["DictKey_UnitName_111"] = "RU Client #005",
|
||||
["DictKey_WptName_12"] = "",
|
||||
["DictKey_GroupName_39"] = "Client Group 6",
|
||||
["DictKey_WptName_52"] = "",
|
||||
["DictKey_UnitName_159"] = "RU Client #021",
|
||||
["DictKey_WptName_38"] = "",
|
||||
["DictKey_UnitName_138"] = "RU Client #014",
|
||||
["DictKey_WptName_330"] = "",
|
||||
["DictKey_UnitName_309"] = "US Client #027",
|
||||
["DictKey_WptName_85"] = "",
|
||||
["DictKey_GroupName_290"] = "US Client #021",
|
||||
["DictKey_GroupName_373"] = "RU Client #004",
|
||||
["DictKey_UnitName_240"] = "US Client #004",
|
||||
["DictKey_GroupName_358"] = "RU Client #010",
|
||||
["DictKey_WptName_247"] = "",
|
||||
["DictKey_WptName_223"] = "",
|
||||
["DictKey_WptName_324"] = "",
|
||||
["DictKey_GroupName_18"] = "RU Client #001",
|
||||
["DictKey_WptName_148"] = "",
|
||||
["DictKey_GroupName_349"] = "RU Client #007",
|
||||
["DictKey_GroupName_36"] = "AI RU",
|
||||
["DictKey_WptName_130"] = "",
|
||||
["DictKey_WptName_381"] = "",
|
||||
["DictKey_UnitName_180"] = "RU Client #028",
|
||||
["DictKey_UnitName_117"] = "RU Client #007",
|
||||
["DictKey_WptName_329"] = "",
|
||||
["DictKey_GroupName_73"] = "Patrol Zone Blue",
|
||||
["DictKey_WptName_121"] = "",
|
||||
["DictKey_WptName_78"] = "",
|
||||
["DictKey_UnitName_147"] = "RU Client #017",
|
||||
["DictKey_UnitName_56"] = "Pilot #001",
|
||||
["DictKey_GroupName_203"] = "RU Client #036",
|
||||
["DictKey_GroupName_337"] = "RU Client #003",
|
||||
["DictKey_WptName_304"] = "",
|
||||
["DictKey_WptName_103"] = "",
|
||||
["DictKey_WptName_265"] = "",
|
||||
["DictKey_GroupName_14"] = "AI US 2",
|
||||
["DictKey_UnitName_282"] = "US Client #018",
|
||||
["DictKey_WptName_357"] = "",
|
||||
["DictKey_WptName_175"] = "",
|
||||
["DictKey_WptName_327"] = "",
|
||||
["DictKey_WptName_342"] = "",
|
||||
["DictKey_WptName_154"] = "",
|
||||
["DictKey_GroupName_391"] = "RU Client #010",
|
||||
["DictKey_UnitName_359"] = "RU Client #010",
|
||||
["DictKey_GroupName_197"] = "RU Client #034",
|
||||
["DictKey_GroupName_42"] = "Client Group 5",
|
||||
["DictKey_WptName_283"] = "",
|
||||
["DictKey_GroupName_161"] = "RU Client #022",
|
||||
["DictKey_UnitName_19"] = "RU Client #001",
|
||||
["DictKey_UnitName_237"] = "US Client #003",
|
||||
["DictKey_WptName_65"] = "",
|
||||
["DictKey_WptName_372"] = "",
|
||||
["DictKey_WptName_322"] = "",
|
||||
["DictKey_WptName_97"] = "",
|
||||
["DictKey_WptName_360"] = "",
|
||||
["DictKey_GroupName_131"] = "RU Client #012",
|
||||
["DictKey_WptName_16"] = "",
|
||||
["DictKey_GroupName_101"] = "RU Client #002",
|
||||
["DictKey_WptName_202"] = "",
|
||||
["DictKey_UnitName_198"] = "RU Client #034",
|
||||
["DictKey_WptName_253"] = "",
|
||||
["DictKey_GroupName_394"] = "RU Client #011",
|
||||
["DictKey_WptName_32"] = "",
|
||||
["DictKey_UnitName_279"] = "US Client #017",
|
||||
["DictKey_GroupName_305"] = "US Client #026",
|
||||
["DictKey_UnitName_141"] = "RU Client #015",
|
||||
["DictKey_WptName_79"] = "",
|
||||
["DictKey_UnitName_207"] = "RU Client #037",
|
||||
["DictKey_WptName_250"] = "",
|
||||
["DictKey_GroupName_116"] = "RU Client #007",
|
||||
["DictKey_GroupName_94"] = "Patrol Zone Red",
|
||||
["DictKey_GroupName_212"] = "RU Client #039",
|
||||
["DictKey_GroupName_233"] = "US Client #002",
|
||||
["DictKey_GroupName_200"] = "RU Client #035",
|
||||
["DictKey_WptName_96"] = "",
|
||||
["DictKey_WptName_50"] = "",
|
||||
["DictKey_WptName_115"] = "",
|
||||
["DictKey_WptName_226"] = "",
|
||||
["DictKey_UnitName_126"] = "RU Client #010",
|
||||
["DictKey_UnitName_243"] = "US Client #005",
|
||||
["DictKey_WptName_316"] = "",
|
||||
["DictKey_WptName_69"] = "",
|
||||
["DictKey_UnitName_347"] = "RU Client #006",
|
||||
["DictKey_GroupName_209"] = "RU Client #038",
|
||||
["DictKey_UnitName_28"] = "AI RU",
|
||||
["DictKey_GroupName_215"] = "RU Client #040",
|
||||
["DictKey_WptName_64"] = "",
|
||||
["DictKey_UnitName_192"] = "RU Client #032",
|
||||
["DictKey_UnitName_338"] = "RU Client #003",
|
||||
["DictKey_GroupName_257"] = "US Client #010",
|
||||
["DictKey_GroupName_188"] = "RU Client #031",
|
||||
["DictKey_GroupName_107"] = "RU Client #004",
|
||||
["DictKey_UnitName_255"] = "US Client #009",
|
||||
["DictKey_UnitName_231"] = "RU Client #045",
|
||||
["DictKey_UnitName_88"] = "Pilot #001",
|
||||
["DictKey_WptName_232"] = "",
|
||||
["DictKey_UnitName_195"] = "RU Client #033",
|
||||
["DictKey_GroupName_370"] = "RU Client #003",
|
||||
["DictKey_WptName_229"] = "",
|
||||
["DictKey_WptName_256"] = "",
|
||||
["DictKey_WptName_345"] = "",
|
||||
["DictKey_WptName_277"] = "",
|
||||
["DictKey_WptName_63"] = "",
|
||||
["DictKey_WptName_363"] = "",
|
||||
["DictKey_GroupName_167"] = "RU Client #024",
|
||||
["DictKey_GroupName_385"] = "RU Client #008",
|
||||
["DictKey_GroupName_376"] = "RU Client #005",
|
||||
["DictKey_UnitName_60"] = "Client Range 1",
|
||||
["DictKey_UnitName_326"] = "Pilot #001",
|
||||
["DictKey_GroupName_388"] = "RU Client #009",
|
||||
["DictKey_GroupName_251"] = "US Client #008",
|
||||
["DictKey_WptName_41"] = "",
|
||||
["DictKey_UnitName_273"] = "US Client #015",
|
||||
["DictKey_GroupName_66"] = "AI US",
|
||||
["DictKey_WptName_87"] = "",
|
||||
["DictKey_GroupName_343"] = "RU Client #005",
|
||||
["DictKey_GroupName_119"] = "RU Client #008",
|
||||
["DictKey_WptName_268"] = "",
|
||||
["DictKey_WptName_220"] = "",
|
||||
["DictKey_WptName_262"] = "",
|
||||
["DictKey_WptName_83"] = "",
|
||||
["DictKey_WptName_72"] = "",
|
||||
["DictKey_UnitName_276"] = "US Client #016",
|
||||
["DictKey_WptName_387"] = "",
|
||||
["DictKey_GroupName_272"] = "US Client #015",
|
||||
["DictKey_WptName_187"] = "",
|
||||
["DictKey_UnitName_189"] = "RU Client #031",
|
||||
["DictKey_UnitName_162"] = "RU Client #022",
|
||||
["DictKey_GroupName_146"] = "RU Client #017",
|
||||
["DictKey_GroupName_140"] = "RU Client #015",
|
||||
["DictKey_GroupName_239"] = "US Client #004",
|
||||
["DictKey_UnitName_353"] = "RU Client #008",
|
||||
["DictKey_UnitName_386"] = "RU Client #008",
|
||||
["DictKey_WptName_351"] = "",
|
||||
["DictKey_WptName_313"] = "",
|
||||
["DictKey_UnitName_93"] = "Pilot #001",
|
||||
["DictKey_GroupName_287"] = "US Client #020",
|
||||
["DictKey_UnitName_395"] = "RU Client #011",
|
||||
["DictKey_UnitName_332"] = "Pilot #002",
|
||||
["DictKey_WptName_133"] = "",
|
||||
["DictKey_UnitName_186"] = "RU Client #030",
|
||||
["DictKey_GroupName_194"] = "RU Client #033",
|
||||
["DictKey_GroupName_179"] = "RU Client #028",
|
||||
["DictKey_GroupName_269"] = "US Client #014",
|
||||
["DictKey_WptName_20"] = "",
|
||||
["DictKey_WptName_348"] = "",
|
||||
["DictKey_WptName_301"] = "",
|
||||
["DictKey_UnitName_285"] = "US Client #019",
|
||||
["DictKey_UnitName_344"] = "RU Client #005",
|
||||
["DictKey_WptName_393"] = "",
|
||||
["DictKey_WptName_84"] = "",
|
||||
["DictKey_GroupName_355"] = "RU Client #009",
|
||||
["DictKey_UnitName_177"] = "RU Client #027",
|
||||
["DictKey_UnitName_37"] = "AI RU",
|
||||
["DictKey_WptName_319"] = "",
|
||||
["DictKey_WptName_106"] = "",
|
||||
["DictKey_UnitName_294"] = "US Client #022",
|
||||
["DictKey_UnitName_165"] = "RU Client #023",
|
||||
["DictKey_WptName_35"] = "",
|
||||
["DictKey_UnitName_261"] = "US Client #011",
|
||||
["DictKey_GroupName_293"] = "US Client #022",
|
||||
["DictKey_UnitName_389"] = "RU Client #009",
|
||||
["DictKey_GroupName_182"] = "RU Client #029",
|
||||
["DictKey_UnitName_300"] = "US Client #024",
|
||||
["DictKey_GroupName_317"] = "US Client #030",
|
||||
["DictKey_WptName_271"] = "",
|
||||
["DictKey_WptName_139"] = "",
|
||||
["DictKey_GroupName_149"] = "RU Client #018",
|
||||
["DictKey_GroupName_218"] = "RU Client #041",
|
||||
["DictKey_UnitName_8"] = "US Client #001",
|
||||
} -- end of dictionary
|
||||
@ -0,0 +1,5 @@
|
||||
mapResource =
|
||||
{
|
||||
["ResKey_Action_323"] = "Moose.lua",
|
||||
["ResKey_Action_6"] = "AIB-005 - Patrol AI and Randomize Zones.lua",
|
||||
} -- end of mapResource
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,229 @@
|
||||
options =
|
||||
{
|
||||
["playerName"] = "Killer",
|
||||
["miscellaneous"] =
|
||||
{
|
||||
["headmove"] = true,
|
||||
["TrackIR_external_views"] = true,
|
||||
["f5_nearest_ac"] = true,
|
||||
["f11_free_camera"] = true,
|
||||
["F2_view_effects"] = 2,
|
||||
["f10_awacs"] = true,
|
||||
["Coordinate_Display"] = "Lat Long",
|
||||
["accidental_failures"] = false,
|
||||
["force_feedback_enabled"] = true,
|
||||
["synchronize_controls"] = false,
|
||||
["show_pilot_body"] = true,
|
||||
}, -- end of ["miscellaneous"]
|
||||
["difficulty"] =
|
||||
{
|
||||
["padlock"] = true,
|
||||
["labels"] = false,
|
||||
["easyCommunication"] = true,
|
||||
["easyRadar"] = false,
|
||||
["fuel"] = false,
|
||||
["miniHUD"] = false,
|
||||
["tips"] = true,
|
||||
["birds"] = 0,
|
||||
["optionsView"] = "optview_all",
|
||||
["permitCrash"] = true,
|
||||
["immortal"] = false,
|
||||
["cockpitStatusBarAllowed"] = false,
|
||||
["cockpitVisualRM"] = true,
|
||||
["easyFlight"] = false,
|
||||
["reports"] = true,
|
||||
["hideStick"] = false,
|
||||
["radio"] = true,
|
||||
["externalViews"] = true,
|
||||
["units"] = "metric",
|
||||
["userMarks"] = true,
|
||||
["cockpitLanguage"] = "english",
|
||||
["spectatorExternalViews"] = true,
|
||||
["userSnapView"] = true,
|
||||
["avionicsLanguage"] = "native",
|
||||
["impostors"] = "medium",
|
||||
["iconsTheme"] = "nato",
|
||||
["map"] = true,
|
||||
["weapons"] = false,
|
||||
["setGlobal"] = true,
|
||||
["geffect"] = "realistic",
|
||||
}, -- end of ["difficulty"]
|
||||
["VR"] =
|
||||
{
|
||||
["use_mouse"] = false,
|
||||
["enable"] = true,
|
||||
["box_mouse_cursor"] = true,
|
||||
["pixel_density"] = 1,
|
||||
}, -- end of ["VR"]
|
||||
["graphics"] =
|
||||
{
|
||||
["OculusRift"] = false,
|
||||
["color"] = "32",
|
||||
["LensEffects"] = 3,
|
||||
["heatBlr"] = 2,
|
||||
["scenes"] = "high",
|
||||
["water"] = 2,
|
||||
["visibRange"] = "High",
|
||||
["treesVisibility"] = 25000,
|
||||
["aspect"] = 1.25,
|
||||
["lights"] = 2,
|
||||
["HDR"] = 1,
|
||||
["MSAA"] = 2,
|
||||
["civTraffic"] = "high",
|
||||
["clutterMaxDistance"] = 1500,
|
||||
["terrainTextures"] = "max",
|
||||
["multiMonitorSetup"] = "1camera",
|
||||
["shadowTree"] = true,
|
||||
["fullScreen"] = false,
|
||||
["disableAero"] = false,
|
||||
["DOF"] = 0,
|
||||
["clouds"] = 1,
|
||||
["flatTerrainShadows"] = 1,
|
||||
["cockpitShadows"] = true,
|
||||
["height"] = 1024,
|
||||
["width"] = 1280,
|
||||
["shadows"] = 4,
|
||||
["TranspSSAA"] = false,
|
||||
["sync"] = true,
|
||||
["preloadRadius"] = 73885,
|
||||
["anisotropy"] = 2,
|
||||
["haze"] = 1,
|
||||
["textures"] = 2,
|
||||
["effects"] = 3,
|
||||
}, -- end of ["graphics"]
|
||||
["plugins"] =
|
||||
{
|
||||
["CA"] =
|
||||
{
|
||||
["kompass_options"] = 1,
|
||||
["ground_target_info"] = true,
|
||||
["ground_aim_helper"] = true,
|
||||
["ground_platform_shake"] = true,
|
||||
["ground_automatic"] = true,
|
||||
}, -- end of ["CA"]
|
||||
["M-2000C"] =
|
||||
{
|
||||
["UNI_NODRIFT"] = false,
|
||||
["TDC_"] = false,
|
||||
["CPLocalList"] = "default",
|
||||
["PPA_TOTPAR"] = false,
|
||||
["UNI_ALIGNED"] = false,
|
||||
}, -- end of ["M-2000C"]
|
||||
["A-10C"] =
|
||||
{
|
||||
["CPLocalList"] = "default",
|
||||
}, -- end of ["A-10C"]
|
||||
["FC3"] =
|
||||
{
|
||||
["CPLocalList_F-15C"] = "default",
|
||||
["CPLocalList_MiG-29S"] = "default",
|
||||
["CPLocalList_MiG-29A"] = "default",
|
||||
["CPLocalList_Su-25"] = "default",
|
||||
["CPLocalList_A-10A"] = "default",
|
||||
["CPLocalList_Su-27"] = "chinese",
|
||||
["CPLocalList_MiG-29G"] = "default",
|
||||
["CPLocalList_Su-33"] = "default",
|
||||
}, -- end of ["FC3"]
|
||||
["Hawk"] =
|
||||
{
|
||||
["CPLocalList"] = "high",
|
||||
}, -- end of ["Hawk"]
|
||||
["P-51D"] =
|
||||
{
|
||||
["assistance"] = 100,
|
||||
["CPLocalList"] = "default",
|
||||
["autoRudder"] = false,
|
||||
}, -- end of ["P-51D"]
|
||||
["TF-51D"] =
|
||||
{
|
||||
["assistance"] = 100,
|
||||
["CPLocalList"] = "default",
|
||||
["autoRudder"] = false,
|
||||
}, -- end of ["TF-51D"]
|
||||
["MiG-21Bis"] =
|
||||
{
|
||||
["Engine"] = false,
|
||||
["Shake"] = 100,
|
||||
["CustomCockpit"] = false,
|
||||
["Reticle"] = false,
|
||||
["Freeze"] = false,
|
||||
}, -- end of ["MiG-21Bis"]
|
||||
["F-86F"] =
|
||||
{
|
||||
["landSeatAdjustF86"] = true,
|
||||
["aiHelper"] = false,
|
||||
["CPLocalList"] = "default",
|
||||
["NoseWheelSteeringSimpleBehaviourF86"] = true,
|
||||
["gunCamera"] = 0,
|
||||
}, -- end of ["F-86F"]
|
||||
["Su-25T"] =
|
||||
{
|
||||
["CPLocalList"] = "default",
|
||||
}, -- end of ["Su-25T"]
|
||||
["Mi-8MTV2"] =
|
||||
{
|
||||
["Mi8TrimmingMethod"] = 0,
|
||||
["Mi8AutopilotAdjustment"] = false,
|
||||
["gunCamera"] = 0,
|
||||
["controlHelperMi8"] = false,
|
||||
["weapTooltipsMi8"] = true,
|
||||
["Mi8RudderTrimmer"] = false,
|
||||
["CPLocalList"] = "default",
|
||||
["altMi8TrimmingMethod"] = false,
|
||||
["Mi8FOV"] = 120,
|
||||
}, -- end of ["Mi-8MTV2"]
|
||||
["MiG-15bis"] =
|
||||
{
|
||||
["autoLeanToAimMiG15"] = true,
|
||||
["CPLocalList"] = "chinese",
|
||||
["gunCamera"] = 0,
|
||||
["aiHelper"] = false,
|
||||
}, -- end of ["MiG-15bis"]
|
||||
["FW-190D9"] =
|
||||
{
|
||||
["assistance"] = 100,
|
||||
["CPLocalList"] = "default",
|
||||
["autoRudder"] = false,
|
||||
}, -- end of ["FW-190D9"]
|
||||
["UH-1H"] =
|
||||
{
|
||||
["UHTrackIRAiming"] = true,
|
||||
["autoPilot"] = true,
|
||||
["UHTrimmingMethod"] = 0,
|
||||
["altUHTrimmingMethod"] = false,
|
||||
["CPLocalList"] = "default",
|
||||
["weapTooltips"] = true,
|
||||
["UHRudderTrimmer"] = false,
|
||||
}, -- end of ["UH-1H"]
|
||||
["Ka-50"] =
|
||||
{
|
||||
["altTrimmingMethod"] = false,
|
||||
["Ka50RudderTrimmer"] = false,
|
||||
["CPLocalList"] = "english",
|
||||
}, -- end of ["Ka-50"]
|
||||
}, -- end of ["plugins"]
|
||||
["format"] = 1,
|
||||
["sound"] =
|
||||
{
|
||||
["hear_in_helmet"] = false,
|
||||
["headphones"] = 100,
|
||||
["cockpit"] = 100,
|
||||
["GBreathEffect"] = true,
|
||||
["gui"] = 100,
|
||||
["volume"] = 100,
|
||||
["radioSpeech"] = true,
|
||||
["music"] = 100,
|
||||
["subtitles"] = true,
|
||||
["world"] = 100,
|
||||
}, -- end of ["sound"]
|
||||
["views"] =
|
||||
{
|
||||
["cockpit"] =
|
||||
{
|
||||
["mirrors"] = false,
|
||||
["reflections"] = false,
|
||||
["avionics"] = 3,
|
||||
["russianHud"] = false,
|
||||
}, -- end of ["cockpit"]
|
||||
}, -- end of ["views"]
|
||||
} -- end of options
|
||||
@ -0,0 +1,807 @@
|
||||
warehouses =
|
||||
{
|
||||
["airports"] =
|
||||
{
|
||||
[12] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "RED",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [12]
|
||||
[13] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "BLUE",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [13]
|
||||
[14] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "RED",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [14]
|
||||
[15] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "RED",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [15]
|
||||
[16] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "BLUE",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [16]
|
||||
[17] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [17]
|
||||
[18] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [18]
|
||||
[19] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [19]
|
||||
[20] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [20]
|
||||
[21] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [21]
|
||||
[22] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [22]
|
||||
[23] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [23]
|
||||
[24] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [24]
|
||||
[25] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [25]
|
||||
[26] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [26]
|
||||
[27] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [27]
|
||||
[28] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [28]
|
||||
[29] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [29]
|
||||
[30] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [30]
|
||||
[31] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [31]
|
||||
[32] =
|
||||
{
|
||||
["gasoline"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["gasoline"]
|
||||
["unlimitedMunitions"] = true,
|
||||
["methanol_mixture"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["methanol_mixture"]
|
||||
["OperatingLevel_Air"] = 10,
|
||||
["diesel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["diesel"]
|
||||
["speed"] = 16.666666,
|
||||
["size"] = 100,
|
||||
["periodicity"] = 30,
|
||||
["suppliers"] =
|
||||
{
|
||||
}, -- end of ["suppliers"]
|
||||
["coalition"] = "NEUTRAL",
|
||||
["jet_fuel"] =
|
||||
{
|
||||
["InitFuel"] = 100,
|
||||
}, -- end of ["jet_fuel"]
|
||||
["OperatingLevel_Eqp"] = 10,
|
||||
["unlimitedFuel"] = true,
|
||||
["aircrafts"] =
|
||||
{
|
||||
}, -- end of ["aircrafts"]
|
||||
["weapons"] =
|
||||
{
|
||||
}, -- end of ["weapons"]
|
||||
["OperatingLevel_Fuel"] = 10,
|
||||
["unlimitedAircrafts"] = true,
|
||||
}, -- end of [32]
|
||||
}, -- end of ["airports"]
|
||||
["warehouses"] =
|
||||
{
|
||||
}, -- end of ["warehouses"]
|
||||
} -- end of warehouses
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user