Merge remote-tracking branch 'refs/remotes/origin/master' into FlightControl

# Conflicts:
#	Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua
#	Moose Mission Setup/Moose.lua
#	Moose Test Missions/SPA - Spawning/SPA-010 - Spawn Demo/SPA-010 -
Spawn Demo.miz
#	Moose Test Missions/SPA - Spawning/SPA-011 - Ground Ops - Simple
Spawning/SPA-011 - Ground Ops - Simple Spawning.miz
#	Moose Test Missions/SPA - Spawning/SPA-012 - Ground Ops - Multiple
Spawns/SPA-012 - Ground Ops - Multiple Spawns.miz
#	Moose Test Missions/SPA - Spawning/SPA-013 - Ground Ops - Scheduled
Spawns/SPA-013 - Ground Ops - Scheduled Spawns.miz
#	Moose Test Missions/SPA - Spawning/SPA-014 - Ground Ops - Scheduled
Spawns Limited/SPA-014 - Ground Ops - Scheduled Spawns Limited.miz
#	Moose Test Missions/SPA - Spawning/SPA-015 - Ground Ops - Randomize
Route/SPA-015 - Ground Ops - Randomize Route.miz
#	Moose Test Missions/SPA - Spawning/SPA-016 - Ground Ops - Randomize
Zones/SPA-016 - Ground Ops - Randomize Zones.miz
#	Moose Test Missions/SPA - Spawning/SPA-017 - Ground Ops - Set AI
inactive while spawning/SPA-017 - Ground Ops - Set AI inactive while
spawning.miz
#	Moose Test Missions/SPA - Spawning/SPA-018 - Ground Ops - Randomize
Templates/SPA-018 - Ground Ops - Randomize Templates.miz
#	Moose Test Missions/SPA - Spawning/SPA-100 - CleanUp Inactive
Units/SPA-100 - CleanUp Inactive Units.miz
#	Moose Test Missions/SPA - Spawning/SPA-110 - Limit Spawning/SPA-110 -
Limit Spawning.miz
#	Moose Test Missions/SPA - Spawning/SPA-121 - Air Ops - Scheduled
Spawns with Repeat on Landing with Limit/SPA-121 - Air Ops - Scheduled
Spawns with Repeat on Landing with Limit.miz
#	Moose Test Missions/SPA - Spawning/SPA-130 - Uncontrolled
Spawning/SPA-130 - Uncontrolled Spawning.miz
#	Moose Test Missions/SPA - Spawning/SPA-200 - Randomize Unit
Types/SPA-200 - Randomize Unit Types.miz
#	Moose Test Missions/SPA - Spawning/SPA-220 - Randomize Zones/SPA-220 -
Randomize Zones.miz
#	Moose Test Missions/SPA - Spawning/SPA-310 - Spawn at Static
position/SPA-310 - Spawn at Static position.miz
#	Moose Test Missions/SPA - Spawning/SPA-320 - Spawn at Unit
position/SPA-320 - Spawn at Unit position.miz
#	Moose Test Missions/SPA - Spawning/SPA-330 - Spawn at Vec2
position/SPA-330 - Spawn at Vec2 position.miz
#	Moose Test Missions/SPA - Spawning/SPA-340 - Spawn at Vec3
position/SPA-340 - Spawn at Vec3 position.miz
#	Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal
Zone.miz
#	docs/Documentation/Zone.html
This commit is contained in:
FlightControl 2017-03-03 09:51:17 +01:00
commit 846edca815
102 changed files with 4247 additions and 659 deletions

Binary file not shown.

View File

@ -1,4 +1,4 @@
--- Single-Player:**No** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**All** -- **AI Balancing will replace in multi player missions
--- Single-Player:**No** / Multi-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.**
--
@ -116,6 +116,7 @@ function AI_BALANCER:New( SetClient, SpawnAI )
-- Inherits from BASE
local self = BASE:Inherit( self, FSM_SET:New( SET_GROUP:New() ) ) -- AI.AI_Balancer#AI_BALANCER
-- TODO: Define the OnAfterSpawned event
self:SetStartState( "None" )
self:AddTransition( "*", "Monitor", "Monitoring" )
self:AddTransition( "*", "Spawn", "Spawning" )
@ -179,15 +180,17 @@ function AI_BALANCER:onenterSpawning( SetGroup, From, Event, To, ClientName )
-- OK, Spawn a new group from the default SpawnAI object provided.
local AIGroup = self.SpawnAI:Spawn() -- Wrapper.Group#GROUP
AIGroup:E( "Spawning new AIGroup" )
--TODO: need to rework UnitName thing ...
SetGroup:Add( ClientName, AIGroup )
self.SpawnQueue[ClientName] = nil
-- Fire the Spawned event. The first parameter is the AIGroup just Spawned.
-- Mission designers can catch this event to bind further actions to the AIGroup.
self:Spawned( AIGroup )
if AIGroup then
AIGroup:E( "Spawning new AIGroup" )
--TODO: need to rework UnitName thing ...
SetGroup:Add( ClientName, AIGroup )
self.SpawnQueue[ClientName] = nil
-- Fire the Spawned event. The first parameter is the AIGroup just Spawned.
-- Mission designers can catch this event to bind further actions to the AIGroup.
self:Spawned( AIGroup )
end
end
--- @param #AI_BALANCER self

View File

@ -1,4 +1,4 @@
--- Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** -- **Execute Combat Air Patrol (CAP).**
--- Single-Player:**Yes** / Multi-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** -- **Execute Combat Air Patrol (CAP).**
--
-- ![Banner Image](..\Presentations\AI_CAP\Dia1.JPG)
--

View File

@ -1,4 +1,4 @@
--- Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** --
--- Single-Player:**Yes** / Multi-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** --
-- **Provide Close Air Support to friendly ground troops.**
--
-- ![Banner Image](..\Presentations\AI_CAS\Dia1.JPG)
@ -136,8 +136,8 @@ AI_CAS_ZONE = {
-- @param Dcs.DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol.
-- @param Dcs.DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Controllable} in km/h.
-- @param Dcs.DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Controllable} in km/h.
-- @param Core.Zone#ZONE_BASE EngageZone The zone where the engage will happen.
-- @param Dcs.DCSTypes#AltitudeType PatrolAltType The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to RADIO
-- @param Core.Zone#ZONE EngageZone
-- @return #AI_CAS_ZONE self
function AI_CAS_ZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, EngageZone, PatrolAltType )

View File

@ -1,4 +1,4 @@
---Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Ground** --
---Single-Player:**Yes** / Multi-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Ground** --
-- **Management of logical cargo objects, that can be transported from and to transportation carriers.**
--
-- ![Banner Image](..\Presentations\AI_CARGO\CARGO.JPG)

View File

@ -1,4 +1,4 @@
--- Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** --
--- Single-Player:**Yes** / Multi-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**Air** --
-- **Air Patrolling or Staging.**
--
-- ![Banner Image](..\Presentations\AI_PATROL\Dia1.JPG)

View File

@ -38,7 +38,7 @@
--
-- ![Objects](..\Presentations\EVENT\Dia6.JPG)
--
-- For most DCS events, the above order of updating will be followed.1
-- For most DCS events, the above order of updating will be followed.
--
-- ![Objects](..\Presentations\EVENT\Dia7.JPG)
--
@ -124,6 +124,22 @@
--
-- ![Objects](..\Presentations\EVENT\Dia14.JPG)
--
-- **IMPORTANT NOTE:** Some events can involve not just UNIT objects, but also STATIC objects!!!
-- In that case the initiator or target unit fields will refer to a STATIC object!
-- In case a STATIC object is involved, the documentation indicates which fields will and won't not be populated.
-- The fields **IniObjectCategory** and **TgtObjectCategory** contain the indicator which **kind of object is involved** in the event.
-- You can use the enumerator **Object.Category.UNIT** and **Object.Category.STATIC** to check on IniObjectCategory and TgtObjectCategory.
-- Example code snippet:
--
-- if Event.IniObjectCategory == Object.Category.UNIT then
-- ...
-- end
-- if Event.IniObjectCategory == Object.Category.STATIC then
-- ...
-- end
--
-- When a static object is involved in the event, the Group and Player fields won't be populated.
--
-- ====
--
-- # **API CHANGE HISTORY**
@ -152,7 +168,8 @@
--
-- @module Event
-- TODO: Need to update the EVENTDATA documentation with IniPlayerName and TgtPlayerName
-- TODO: Need to update the EVENTDATA documentation with IniObjectCategory and TgtObjectCategory
@ -195,23 +212,45 @@ EVENTS = {
}
--- The Event structure
-- Note that at the beginning of each field description, there is an indication which field will be populated depending on the object type involved in the Event:
--
-- * A (Object.Category.)UNIT : A UNIT object type is involved in the Event.
-- * A (Object.Category.)STATIC : A STATIC object type is involved in the Event.µ
--
-- @type EVENTDATA
-- @field id
-- @field initiator
-- @field target
-- @field weapon
-- @field IniDCSUnit
-- @field IniDCSUnitName
-- @field Wrapper.Unit#UNIT IniUnit
-- @field #string IniUnitName
-- @field IniDCSGroup
-- @field IniDCSGroupName
-- @field TgtDCSUnit
-- @field TgtDCSUnitName
-- @field Wrapper.Unit#UNIT TgtUnit
-- @field #string TgtUnitName
-- @field TgtDCSGroup
-- @field TgtDCSGroupName
-- @field #number id The identifier of the event.
--
-- @field Dcs.DCSUnit#Unit initiator (UNIT/STATIC/SCENERY) The initiating @{Dcs.DCSUnit#Unit} or @{Dcs.DCSStaticObject#StaticObject}.
-- @field Dcs.DCSObject#Object.Category IniObjectCategory (UNIT/STATIC/SCENERY) The initiator object category ( Object.Category.UNIT or Object.Category.STATIC ).
-- @field Dcs.DCSUnit#Unit IniDCSUnit (UNIT/STATIC) The initiating @{Dcs.DCSUnit#Unit} or @{Dcs.DCSStaticObject#StaticObject}.
-- @field #string IniDCSUnitName (UNIT/STATIC) The initiating Unit name.
-- @field Wrapper.Unit#UNIT IniUnit (UNIT/STATIC) The initiating MOOSE wrapper @{Wrapper.Unit#UNIT} of the initiator Unit object.
-- @field #string IniUnitName (UNIT/STATIC) The initiating UNIT name (same as IniDCSUnitName).
-- @field Dcs.DCSGroup#Group IniDCSGroup (UNIT) The initiating {Dcs.DCSGroup#Group}.
-- @field #string IniDCSGroupName (UNIT) The initiating Group name.
-- @field Wrapper.Group#GROUP IniGroup (UNIT) The initiating MOOSE wrapper @{Wrapper.Group#GROUP} of the initiator Group object.
-- @field #string IniGroupName (UNIT) The initiating GROUP name (same as IniDCSGroupName).
-- @field #string IniPlayerName (UNIT) The name of the initiating player in case the Unit is a client or player slot.
-- @field Dcs.DCScoalition#coalition.side IniCoalition (UNIT) The coalition of the initiator.
-- @field Dcs.DCSUnit#Unit.Category IniCategory (UNIT) The category of the initiator.
-- @field #string IniTypeName (UNIT) The type name of the initiator.
--
-- @field Dcs.DCSUnit#Unit target (UNIT/STATIC) The target @{Dcs.DCSUnit#Unit} or @{Dcs.DCSStaticObject#StaticObject}.
-- @field Dcs.DCSObject#Object.Category TgtObjectCategory (UNIT/STATIC) The target object category ( Object.Category.UNIT or Object.Category.STATIC ).
-- @field Dcs.DCSUnit#Unit TgtDCSUnit (UNIT/STATIC) The target @{Dcs.DCSUnit#Unit} or @{Dcs.DCSStaticObject#StaticObject}.
-- @field #string TgtDCSUnitName (UNIT/STATIC) The target Unit name.
-- @field Wrapper.Unit#UNIT TgtUnit (UNIT/STATIC) The target MOOSE wrapper @{Wrapper.Unit#UNIT} of the target Unit object.
-- @field #string TgtUnitName (UNIT/STATIC) The target UNIT name (same as TgtDCSUnitName).
-- @field Dcs.DCSGroup#Group TgtDCSGroup (UNIT) The target {Dcs.DCSGroup#Group}.
-- @field #string TgtDCSGroupName (UNIT) The target Group name.
-- @field Wrapper.Group#GROUP TgtGroup (UNIT) The target MOOSE wrapper @{Wrapper.Group#GROUP} of the target Group object.
-- @field #string TgtGroupName (UNIT) The target GROUP name (same as TgtDCSGroupName).
-- @field #string TgtPlayerName (UNIT) The name of the target player in case the Unit is a client or player slot.
-- @field Dcs.DCScoalition#coalition.side TgtCoalition (UNIT) The coalition of the target.
-- @field Dcs.DCSUnit#Unit.Category TgtCategory (UNIT) The category of the target.
-- @field #string TgtTypeName (UNIT) The type name of the target.
--
-- @field weapon The weapon used during the event.
-- @field Weapon
-- @field WeaponName
-- @field WeaponTgtDCSUnit
@ -598,25 +637,59 @@ function EVENT:onEvent( Event )
end
if self and self.Events and self.Events[Event.id] then
if Event.initiator and Event.initiator:getCategory() == Object.Category.UNIT then
Event.IniDCSUnit = Event.initiator
Event.IniDCSGroup = Event.IniDCSUnit:getGroup()
Event.IniDCSUnitName = Event.IniDCSUnit:getName()
Event.IniUnitName = Event.IniDCSUnitName
Event.IniUnit = UNIT:FindByName( Event.IniDCSUnitName )
if not Event.IniUnit then
-- Unit can be a CLIENT. Most likely this will be the case ...
Event.IniUnit = CLIENT:FindByName( Event.IniDCSUnitName, '', true )
if Event.initiator then
Event.IniObjectCategory = Event.initiator:getCategory()
if Event.IniObjectCategory == Object.Category.UNIT then
Event.IniDCSUnit = Event.initiator
Event.IniDCSUnitName = Event.IniDCSUnit:getName()
Event.IniUnitName = Event.IniDCSUnitName
Event.IniDCSGroup = Event.IniDCSUnit:getGroup()
Event.IniUnit = UNIT:FindByName( Event.IniDCSUnitName )
if not Event.IniUnit then
-- Unit can be a CLIENT. Most likely this will be the case ...
Event.IniUnit = CLIENT:FindByName( Event.IniDCSUnitName, '', true )
end
Event.IniDCSGroupName = ""
if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then
Event.IniDCSGroupName = Event.IniDCSGroup:getName()
Event.IniGroup = GROUP:FindByName( Event.IniDCSGroupName )
self:E( { IniGroup = Event.IniGroup } )
end
Event.IniPlayerName = Event.IniDCSUnit:getPlayerName()
Event.IniCoalition = Event.IniDCSUnit:getCoalition()
Event.IniTypeName = Event.IniDCSUnit:getTypeName()
Event.IniCategory = Event.IniDCSUnit:getDesc().category
end
Event.IniDCSGroupName = ""
if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then
Event.IniDCSGroupName = Event.IniDCSGroup:getName()
Event.IniGroup = GROUP:FindByName( Event.IniDCSGroupName )
self:E( { IniGroup = Event.IniGroup } )
if Event.IniObjectCategory == Object.Category.STATIC then
Event.IniDCSUnit = Event.initiator
Event.IniDCSUnitName = Event.IniDCSUnit:getName()
Event.IniUnitName = Event.IniDCSUnitName
Event.IniUnit = STATIC:FindByName( Event.IniDCSUnitName )
Event.IniCoalition = Event.IniDCSUnit:getCoalition()
Event.IniCategory = Event.IniDCSUnit:getDesc().category
Event.IniTypeName = Event.IniDCSUnit:getTypeName()
end
if Event.IniObjectCategory == Object.Category.SCENERY then
Event.IniDCSUnit = Event.initiator
Event.IniDCSUnitName = Event.IniDCSUnit:getName()
Event.IniUnitName = Event.IniDCSUnitName
Event.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator )
Event.IniCategory = Event.IniDCSUnit:getDesc().category
Event.IniTypeName = Event.IniDCSUnit:getTypeName()
end
end
if Event.target then
if Event.target and Event.target:getCategory() == Object.Category.UNIT then
Event.TgtObjectCategory = Event.target:getCategory()
if Event.TgtObjectCategory == Object.Category.UNIT then
Event.TgtDCSUnit = Event.target
Event.TgtDCSGroup = Event.TgtDCSUnit:getGroup()
Event.TgtDCSUnitName = Event.TgtDCSUnit:getName()
@ -626,8 +699,32 @@ function EVENT:onEvent( Event )
if Event.TgtDCSGroup and Event.TgtDCSGroup:isExist() then
Event.TgtDCSGroupName = Event.TgtDCSGroup:getName()
end
Event.TgtPlayerName = Event.TgtDCSUnit:getPlayerName()
Event.TgtCoalition = Event.TgtDCSUnit:getCoalition()
Event.TgtCategory = Event.TgtDCSUnit:getDesc().category
Event.TgtTypeName = Event.TgtDCSUnit:getTypeName()
end
if Event.TgtObjectCategory == Object.Category.STATIC then
Event.TgtDCSUnit = Event.target
Event.TgtDCSUnitName = Event.TgtDCSUnit:getName()
Event.TgtUnitName = Event.TgtDCSUnitName
Event.TgtUnit = STATIC:FindByName( Event.TgtDCSUnitName )
Event.TgtCoalition = Event.TgtDCSUnit:getCoalition()
Event.TgtCategory = Event.TgtDCSUnit:getDesc().category
Event.TgtTypeName = Event.TgtDCSUnit:getTypeName()
end
if Event.TgtObjectCategory == Object.Category.SCENERY then
Event.TgtDCSUnit = Event.target
Event.TgtDCSUnitName = Event.TgtDCSUnit:getName()
Event.TgtUnitName = Event.TgtDCSUnitName
Event.TgtUnit = SCENERY:Register( Event.TgtDCSUnitName, Event.target )
Event.TgtCategory = Event.TgtDCSUnit:getDesc().category
Event.TgtTypeName = Event.TgtDCSUnit:getTypeName()
end
end
if Event.weapon then
Event.Weapon = Event.weapon
Event.WeaponName = Event.Weapon:getTypeName()

View File

@ -182,6 +182,20 @@ function MESSAGE:ToCoalition( CoalitionSide )
return self
end
--- Sends a MESSAGE to a Coalition if the given Condition is true.
-- @param #MESSAGE self
-- @param CoalitionSide needs to be filled out by the defined structure of the standard scripting engine @{coalition.side}.
-- @return #MESSAGE
function MESSAGE:ToCoalitionIf( CoalitionSide, Condition )
self:F( CoalitionSide )
if Condition and Condition == true then
self:ToCoalition( CoalitionSide )
end
return self
end
--- Sends a MESSAGE to all players.
-- @param #MESSAGE self
-- @return #MESSAGE
@ -194,10 +208,24 @@ end
-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" )
-- MessageAll:ToAll()
function MESSAGE:ToAll()
self:F()
self:F()
self:ToCoalition( coalition.side.RED )
self:ToCoalition( coalition.side.BLUE )
self:ToCoalition( coalition.side.RED )
self:ToCoalition( coalition.side.BLUE )
return self
end
--- Sends a MESSAGE to all players if the given Condition is true.
-- @param #MESSAGE self
-- @return #MESSAGE
function MESSAGE:ToAllIf( Condition )
if Condition and Condition == true then
self:ToCoalition( coalition.side.RED )
self:ToCoalition( coalition.side.BLUE )
end
return self
end

View File

@ -7,13 +7,42 @@
-- **Important Note:** Most of the functions in this section were taken from MIST, and reworked to OO concepts.
-- In order to keep the credibility of the the author, I want to emphasize that the of the MIST framework was created by Grimes, who you can find on the Eagle Dynamics Forums.
--
-- 1.1) POINT_VEC3 constructor
-- ---------------------------
-- ## 1.1) POINT_VEC3 constructor
--
-- A new POINT_VEC3 instance can be created with:
--
-- * @{Point#POINT_VEC3.New}(): a 3D point.
-- * @{Point#POINT_VEC3.NewFromVec3}(): a 3D point created from a @{DCSTypes#Vec3}.
--
--
-- ## 1.2) Smoke, flare, explode, illuminate
--
-- At the point a smoke, flare, explosion and illumination bomb can be triggered. Use the following methods:
--
-- ### 1.2.1) Smoke
--
-- * @{#POINT_VEC3.Smoke}(): To smoke the point in a certain color.
-- * @{#POINT_VEC3.SmokeBlue}(): To smoke the point in blue.
-- * @{#POINT_VEC3.SmokeRed}(): To smoke the point in red.
-- * @{#POINT_VEC3.SmokeOrange}(): To smoke the point in orange.
-- * @{#POINT_VEC3.SmokeWhite}(): To smoke the point in white.
-- * @{#POINT_VEC3.SmokeGreen}(): To smoke the point in green.
--
-- ### 1.2.2) Flare
--
-- * @{#POINT_VEC3.Flare}(): To flare the point in a certain color.
-- * @{#POINT_VEC3.FlareRed}(): To flare the point in red.
-- * @{#POINT_VEC3.FlareYellow}(): To flare the point in yellow.
-- * @{#POINT_VEC3.FlareWhite}(): To flare the point in white.
-- * @{#POINT_VEC3.FlareGreen}(): To flare the point in green.
--
-- ### 1.2.3) Explode
--
-- * @{#POINT_VEC3.Explosion}(): To explode the point with a certain intensity.
--
-- ### 1.2.4) Illuminate
--
-- * @{#POINT_VEC3.IlluminationBomb}(): To illuminate the point.
--
--
-- 2) @{Point#POINT_VEC2} class, extends @{Point#POINT_VEC3}
-- =========================================================
@ -38,9 +67,12 @@
--
-- Hereby the change log:
--
-- 2017-02-18: POINT_VEC3:**NewFromVec2( Vec2, LandHeightAdd )** added.
-- 2017-03-03: POINT\_VEC3:**Explosion( ExplosionIntensity )** added.
-- 2017-03-03: POINT\_VEC3:**IlluminationBomb()** added.
--
-- 2016-08-12: POINT_VEC3:**Translate( Distance, Angle )** added.
-- 2017-02-18: POINT\_VEC3:**NewFromVec2( Vec2, LandHeightAdd )** added.
--
-- 2016-08-12: POINT\_VEC3:**Translate( Distance, Angle )** added.
--
-- 2016-08-06: Made PointVec3 and Vec3, PointVec2 and Vec2 terminology used in the code consistent.
--
@ -501,6 +533,21 @@ function POINT_VEC3:RoutePointGround( Speed, Formation )
return RoutePoint
end
--- Creates an explosion at the point of a certain intensity.
-- @param #POINT_VEC3 self
-- @param #number ExplosionIntensity
function POINT_VEC3:Explosion( ExplosionIntensity )
self:F2( { ExplosionIntensity } )
trigger.action.explosion( self:GetVec3(), ExplosionIntensity )
end
--- Creates an illumination bomb at the point.
-- @param #POINT_VEC3 self
function POINT_VEC3:IlluminationBomb()
self:F2()
trigger.action.illuminationBomb( self:GetVec3() )
end
--- Smokes the point in a color.
-- @param #POINT_VEC3 self

View File

@ -64,7 +64,7 @@ function SCHEDULEDISPATCHER:AddSchedule( Scheduler, ScheduleFunction, ScheduleAr
-- Initialize the ObjectSchedulers array, which is a weakly coupled table.
-- If the object used as the key is nil, then the garbage collector will remove the item from the Functions array.
self.ObjectSchedulers = self.ObjectSchedulers or setmetatable( {}, { __mode = "v" } )
self.ObjectSchedulers = self.ObjectSchedulers or {} -- setmetatable( {}, { __mode = "v" } )
if Scheduler.MasterObject then
self.ObjectSchedulers[self.CallID] = Scheduler

View File

@ -35,8 +35,8 @@
--
-- ## 1.2) Each zone implements two polymorphic functions defined in @{Zone#ZONE_BASE}:
--
-- * @{#ZONE_BASE.IsPointVec2InZone}(): Returns if a @{Point#POINT_VEC2} is within the zone.
-- * @{#ZONE_BASE.IsPointVec3InZone}(): Returns if a @{Point#POINT_VEC3} is within the zone.
-- * @{#ZONE_BASE.IsVec2InZone}(): Returns if a Vec2 is within the zone.
-- * @{#ZONE_BASE.IsVec3InZone}(): Returns if a Vec3 is within the zone.
--
-- ## 1.3) A zone has a probability factor that can be set to randomize a selection between zones:
--
@ -145,21 +145,28 @@
--
-- Hereby the change log:
--
-- 2017-02-18: ZONE_POLYGON_BASE:**GetRandomPointVec2()** added.
-- 2017-02-28: ZONE\_BASE:**IsVec2InZone()** replaces ZONE\_BASE:_IsPointVec2InZone()_.
-- 2017-02-28: ZONE\_BASE:**IsVec3InZone()** replaces ZONE\_BASE:_IsPointVec3InZone()_.
-- 2017-02-28: ZONE\_RADIUS:**IsVec2InZone()** replaces ZONE\_RADIUS:_IsPointVec2InZone()_.
-- 2017-02-28: ZONE\_RADIUS:**IsVec3InZone()** replaces ZONE\_RADIUS:_IsPointVec3InZone()_.
-- 2017-02-28: ZONE\_POLYGON:**IsVec2InZone()** replaces ZONE\_POLYGON:_IsPointVec2InZone()_.
-- 2017-02-28: ZONE\_POLYGON:**IsVec3InZone()** replaces ZONE\_POLYGON:_IsPointVec3InZone()_.
--
-- 2017-02-18: ZONE_POLYGON_BASE:**GetRandomPointVec3()** added.
-- 2017-02-18: ZONE\_POLYGON_BASE:**GetRandomPointVec2()** added.
--
-- 2017-02-18: ZONE_RADIUS:**GetRandomPointVec3( inner, outer )** added.
-- 2017-02-18: ZONE\_POLYGON_BASE:**GetRandomPointVec3()** added.
--
-- 2017-02-18: ZONE_RADIUS:**GetRandomPointVec2( inner, outer )** added.
-- 2017-02-18: ZONE\_RADIUS:**GetRandomPointVec3( inner, outer )** added.
--
-- 2016-08-15: ZONE_BASE:**GetName()** added.
-- 2017-02-18: ZONE\_RADIUS:**GetRandomPointVec2( inner, outer )** added.
--
-- 2016-08-15: ZONE_BASE:**SetZoneProbability( ZoneProbability )** added.
-- 2016-08-15: ZONE\_BASE:**GetName()** added.
--
-- 2016-08-15: ZONE_BASE:**GetZoneProbability()** added.
-- 2016-08-15: ZONE\_BASE:**SetZoneProbability( ZoneProbability )** added.
--
-- 2016-08-15: ZONE_BASE:**GetZoneMaybe()** added.
-- 2016-08-15: ZONE\_BASE:**GetZoneProbability()** added.
--
-- 2016-08-15: ZONE\_BASE:**GetZoneMaybe()** added.
--
-- ===
--
@ -212,7 +219,7 @@ end
-- @param #ZONE_BASE self
-- @param Dcs.DCSTypes#Vec2 Vec2 The location to test.
-- @return #boolean true if the location is within the zone.
function ZONE_BASE:IsPointVec2InZone( Vec2 )
function ZONE_BASE:IsVec2InZone( Vec2 )
self:F2( Vec2 )
return false
@ -222,10 +229,10 @@ end
-- @param #ZONE_BASE self
-- @param Dcs.DCSTypes#Vec3 Vec3 The point to test.
-- @return #boolean true if the point is within the zone.
function ZONE_BASE:IsPointVec3InZone( Vec3 )
function ZONE_BASE:IsVec3InZone( Vec3 )
self:F2( Vec3 )
local InZone = self:IsPointVec2InZone( { x = Vec3.x, y = Vec3.z } )
local InZone = self:IsVec2InZone( { x = Vec3.x, y = Vec3.z } )
return InZone
end
@ -514,7 +521,7 @@ end
-- @param #ZONE_RADIUS self
-- @param Dcs.DCSTypes#Vec2 Vec2 The location to test.
-- @return #boolean true if the location is within the zone.
function ZONE_RADIUS:IsPointVec2InZone( Vec2 )
function ZONE_RADIUS:IsVec2InZone( Vec2 )
self:F2( Vec2 )
local ZoneVec2 = self:GetVec2()
@ -532,10 +539,10 @@ end
-- @param #ZONE_RADIUS self
-- @param Dcs.DCSTypes#Vec3 Vec3 The point to test.
-- @return #boolean true if the point is within the zone.
function ZONE_RADIUS:IsPointVec3InZone( Vec3 )
function ZONE_RADIUS:IsVec3InZone( Vec3 )
self:F2( Vec3 )
local InZone = self:IsPointVec2InZone( { x = Vec3.x, y = Vec3.z } )
local InZone = self:IsVec2InZone( { x = Vec3.x, y = Vec3.z } )
return InZone
end
@ -854,7 +861,7 @@ end
-- @param #ZONE_POLYGON_BASE self
-- @param Dcs.DCSTypes#Vec2 Vec2 The location to test.
-- @return #boolean true if the location is within the zone.
function ZONE_POLYGON_BASE:IsPointVec2InZone( Vec2 )
function ZONE_POLYGON_BASE:IsVec2InZone( Vec2 )
self:F2( Vec2 )
local Next
@ -896,7 +903,7 @@ function ZONE_POLYGON_BASE:GetRandomVec2()
while Vec2Found == false do
Vec2 = { x = math.random( BS.x1, BS.x2 ), y = math.random( BS.y1, BS.y2 ) }
self:T2( Vec2 )
if self:IsPointVec2InZone( Vec2 ) then
if self:IsVec2InZone( Vec2 ) then
Vec2Found = true
end
end

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
--- Single-Player:**Yes** / Mulit-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**All** --
--- Single-Player:**Yes** / Multi-Player:**Yes** / AI:**Yes** / Human:**No** / Types:**All** --
-- **Spawn groups of units dynamically in your missions.**
--
-- ![Banner Image](..\Presentations\SPAWN\SPAWN.JPG)
@ -1304,10 +1304,12 @@ function SPAWN:_RandomizeTemplate( SpawnIndex )
self.SpawnGroups[SpawnIndex].SpawnTemplate.x = self.SpawnTemplate.x
self.SpawnGroups[SpawnIndex].SpawnTemplate.y = self.SpawnTemplate.y
self.SpawnGroups[SpawnIndex].SpawnTemplate.start_time = self.SpawnTemplate.start_time
local OldX = self.SpawnGroups[SpawnIndex].SpawnTemplate.units[1].x
local OldY = self.SpawnGroups[SpawnIndex].SpawnTemplate.units[1].y
for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do
self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading
self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].x = self.SpawnTemplate.units[1].x
self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].y = self.SpawnTemplate.units[1].y
self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].x = self.SpawnTemplate.units[1].x + ( self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].x - OldX )
self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].y = self.SpawnTemplate.units[1].y + ( self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].y - OldY )
self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].alt = self.SpawnTemplate.units[1].alt
end
end

View File

@ -27,6 +27,7 @@ Include.File( "Wrapper/Unit" )
Include.File( "Wrapper/Client" )
Include.File( "Wrapper/Static" )
Include.File( "Wrapper/Airbase" )
Include.File( "Wrapper/Scenery" )
--- Functional Classes
Include.File( "Functional/Scoring" )

View File

@ -14,6 +14,7 @@
-- * @{#TASK.HasStateMachine}():Enquire if the task has a @{Fsm}
-- * @{#TASK.AssignToUnit}(): Assign a task to a unit. (Needs to be implemented in the derived classes from @{#TASK}.
-- * @{#TASK.UnAssignFromUnit}(): Unassign the task from a unit.
-- * @{#TASK.SetTimeOut}(): Set timer in seconds before task gets cancelled if not assigned.
--
-- 1.2) Set and enquire task status (beyond the task state machine processing).
-- ----------------------------------------------------------------------------
@ -70,6 +71,7 @@ TASK = {
FsmTemplate = nil,
Mission = nil,
CommandCenter = nil,
TimeOut = 0,
}
--- FSM PlayerAborted event handler prototype for TASK.
@ -163,6 +165,7 @@ function TASK:New( Mission, SetGroupAssign, TaskName, TaskType )
self:AddTransition( "*", "PlayerAborted", "*" )
self:AddTransition( "*", "PlayerDead", "*" )
self:AddTransition( { "Failed", "Aborted", "Cancelled" }, "Replan", "Planned" )
self:AddTransition( "*", "TimeOut", "Cancelled" )
self:E( "New TASK " .. TaskName )
@ -403,6 +406,17 @@ function TASK:UnAssignFromUnit( TaskUnit )
return self
end
--- Sets the TimeOut for the @{Task}. If @{Task} stayed planned for longer than TimeOut, it gets into Cancelled status.
-- @param #TASK self
-- @param #integer Timer in seconds
-- @return #TASK self
function TASK:SetTimeOut ( Timer )
self:F( Timer )
self.TimeOut = Timer
self:__TimeOut( self.TimeOut )
return self
end
--- Send a message of the @{Task} to the assigned @{Group}s.
-- @param #TASK self
function TASK:MessageToGroups( Message )
@ -934,6 +948,30 @@ function TASK:onstatechange( From, Event, To )
end
--- FSM function for a TASK
-- @param #TASK self
-- @param #string Event
-- @param #string From
-- @param #string To
function TASK:onenterPlanned( From, Event, To)
if not self.TimeOut == 0 then
self.__TimeOut( self.TimeOut )
end
end
--- FSM function for a TASK
-- @param #TASK self
-- @param #string Event
-- @param #string From
-- @param #string To
function TASK:onbeforeTimeOut( From, Event, To )
if From == "Planned" then
self:RemoveMenu()
return true
end
return false
end
do -- Reporting
--- Create a summary report of the Task.

View File

@ -455,8 +455,7 @@ function GROUP:IsCompletelyInZone( Zone )
for UnitID, UnitData in pairs( self:GetUnits() ) do
local Unit = UnitData -- Wrapper.Unit#UNIT
-- TODO: Rename IsPointVec3InZone to IsVec3InZone
if Zone:IsPointVec3InZone( Unit:GetVec3() ) then
if Zone:IsVec3InZone( Unit:GetVec3() ) then
else
return false
end
@ -474,7 +473,7 @@ function GROUP:IsPartlyInZone( Zone )
for UnitID, UnitData in pairs( self:GetUnits() ) do
local Unit = UnitData -- Wrapper.Unit#UNIT
if Zone:IsPointVec3InZone( Unit:GetVec3() ) then
if Zone:IsVec3InZone( Unit:GetVec3() ) then
return true
end
end
@ -491,7 +490,7 @@ function GROUP:IsNotInZone( Zone )
for UnitID, UnitData in pairs( self:GetUnits() ) do
local Unit = UnitData -- Wrapper.Unit#UNIT
if Zone:IsPointVec3InZone( Unit:GetVec3() ) then
if Zone:IsVec3InZone( Unit:GetVec3() ) then
return false
end
end

View File

@ -217,10 +217,7 @@ function IDENTIFIABLE:GetCallsign()
end
function IDENTIFIABLE:GetThreatLevel()
return 0, "Scenery"
end

View File

@ -0,0 +1,39 @@
--- This module contains the SCENERY class.
--
-- 1) @{Scenery#SCENERY} class, extends @{Positionable#POSITIONABLE}
-- ===============================================================
-- Scenery objects are defined on the map.
-- The @{Scenery#SCENERY} class is a wrapper class to handle the DCS Scenery objects:
--
-- * Wraps the DCS Scenery objects.
-- * Support all DCS Scenery APIs.
-- * Enhance with Scenery specific APIs not in the DCS API set.
--
-- @module Scenery
-- @author FlightControl
--- The SCENERY class
-- @type SCENERY
-- @extends Wrapper.Positionable#POSITIONABLE
SCENERY = {
ClassName = "SCENERY",
}
function SCENERY:Register( SceneryName, SceneryObject )
local self = BASE:Inherit( self, POSITIONABLE:New( SceneryName ) )
self.SceneryName = SceneryName
self.SceneryObject = SceneryObject
return self
end
function SCENERY:GetDCSObject()
return self.SceneryObject
end
function SCENERY:GetThreatLevel()
return 0, "Scenery"
end

View File

@ -79,3 +79,8 @@ function STATIC:GetDCSObject()
return nil
end
function STATIC:GetThreatLevel()
return 1, "Static"
end

View File

@ -536,45 +536,129 @@ end
-- * Threat level 8: Unit is a Short Range SAM, radar guided.
-- * Threat level 9: Unit is a Medium Range SAM, radar guided.
-- * Threat level 10: Unit is a Long Range SAM, radar guided.
-- @param #UNIT self
function UNIT:GetThreatLevel()
local Attributes = self:GetDesc().attributes
self:E( Attributes )
local ThreatLevel = 0
local ThreatText = ""
if self:IsGround() then
local ThreatLevels = {
"Unarmed",
"Infantry",
"Old Tanks & APCs",
"Tanks & IFVs without ATGM",
"Tanks & IFV with ATGM",
"Modern Tanks",
"AAA",
"IR Guided SAMs",
"SR SAMs",
"MR SAMs",
"LR SAMs"
}
self:E( "Ground" )
self:T2( Attributes )
local ThreatLevels = {
"Unarmed",
"Infantry",
"Old Tanks & APCs",
"Tanks & IFVs without ATGM",
"Tanks & IFV with ATGM",
"Modern Tanks",
"AAA",
"IR Guided SAMs",
"SR SAMs",
"MR SAMs",
"LR SAMs"
}
if Attributes["LR SAM"] then ThreatLevel = 10
elseif Attributes["MR SAM"] then ThreatLevel = 9
elseif Attributes["SR SAM"] and
not Attributes["IR Guided SAM"] then ThreatLevel = 8
elseif ( Attributes["SR SAM"] or Attributes["MANPADS"] ) and
Attributes["IR Guided SAM"] then ThreatLevel = 7
elseif Attributes["AAA"] then ThreatLevel = 6
elseif Attributes["Modern Tanks"] then ThreatLevel = 5
elseif ( Attributes["Tanks"] or Attributes["IFV"] ) and
Attributes["ATGM"] then ThreatLevel = 4
elseif ( Attributes["Tanks"] or Attributes["IFV"] ) and
not Attributes["ATGM"] then ThreatLevel = 3
elseif Attributes["Old Tanks"] or Attributes["APC"] or Attributes["Artillery"] then ThreatLevel = 2
elseif Attributes["Infantry"] then ThreatLevel = 1
end
ThreatText = ThreatLevels[ThreatLevel+1]
end
if Attributes["LR SAM"] then ThreatLevel = 10
elseif Attributes["MR SAM"] then ThreatLevel = 9
elseif Attributes["SR SAM"] and
not Attributes["IR Guided SAM"] then ThreatLevel = 8
elseif ( Attributes["SR SAM"] or Attributes["MANPADS"] ) and
Attributes["IR Guided SAM"] then ThreatLevel = 7
elseif Attributes["AAA"] then ThreatLevel = 6
elseif Attributes["Modern Tanks"] then ThreatLevel = 5
elseif ( Attributes["Tanks"] or Attributes["IFV"] ) and
Attributes["ATGM"] then ThreatLevel = 4
elseif ( Attributes["Tanks"] or Attributes["IFV"] ) and
not Attributes["ATGM"] then ThreatLevel = 3
elseif Attributes["Old Tanks"] or Attributes["APC"] then ThreatLevel = 2
elseif Attributes["Infantry"] then ThreatLevel = 1
if self:IsAir() then
self:E( "Air" )
local ThreatLevels = {
"Unarmed",
"Tanker",
"AWACS",
"Transport Helicpter",
"UAV",
"Bomber",
"Strategic Bomber",
"Attack Helicopter",
"Interceptor",
"Multirole Fighter",
"Fighter"
}
if Attributes["Fighters"] then ThreatLevel = 10
elseif Attributes["Multirole fighters"] then ThreatLevel = 9
elseif Attributes["Battleplanes"] then ThreatLevel = 8
elseif Attributes["Attack helicopters"] then ThreatLevel = 7
elseif Attributes["Strategic bombers"] then ThreatLevel = 6
elseif Attributes["Bombers"] then ThreatLevel = 5
elseif Attributes["UAVs"] then ThreatLevel = 4
elseif Attributes["Transport helicopters"] then ThreatLevel = 3
elseif Attributes["AWACS"] then ThreatLevel = 2
elseif Attributes["Tankers"] then ThreatLevel = 1
end
ThreatText = ThreatLevels[ThreatLevel+1]
end
if self:IsShip() then
self:E( "Ship" )
--["Aircraft Carriers"] = {"Heavy armed ships",},
--["Cruisers"] = {"Heavy armed ships",},
--["Destroyers"] = {"Heavy armed ships",},
--["Frigates"] = {"Heavy armed ships",},
--["Corvettes"] = {"Heavy armed ships",},
--["Heavy armed ships"] = {"Armed ships", "Armed Air Defence", "HeavyArmoredUnits",},
--["Light armed ships"] = {"Armed ships","NonArmoredUnits"},
--["Armed ships"] = {"Ships"},
--["Unarmed ships"] = {"Ships","HeavyArmoredUnits",},
local ThreatLevels = {
"Unarmed ship",
"Light armed ships",
"Corvettes",
"",
"Frigates",
"",
"Cruiser",
"",
"Destroyer",
"",
"Aircraft Carrier"
}
if Attributes["Aircraft Carriers"] then ThreatLevel = 10
elseif Attributes["Destroyers"] then ThreatLevel = 8
elseif Attributes["Cruisers"] then ThreatLevel = 6
elseif Attributes["Frigates"] then ThreatLevel = 4
elseif Attributes["Corvettes"] then ThreatLevel = 2
elseif Attributes["Light armed ships"] then ThreatLevel = 1
end
ThreatText = ThreatLevels[ThreatLevel+1]
end
self:T2( ThreatLevel )
return ThreatLevel, ThreatLevels[ThreatLevel+1]
return ThreatLevel, ThreatText
end
@ -589,7 +673,7 @@ function UNIT:IsInZone( Zone )
self:F2( { self.UnitName, Zone } )
if self:IsAlive() then
local IsInZone = Zone:IsPointVec3InZone( self:GetVec3() )
local IsInZone = Zone:IsVec3InZone( self:GetVec3() )
self:T( { IsInZone } )
return IsInZone
@ -606,7 +690,7 @@ function UNIT:IsNotInZone( Zone )
self:F2( { self.UnitName, Zone } )
if self:IsAlive() then
local IsInZone = not Zone:IsPointVec3InZone( self:GetVec3() )
local IsInZone = not Zone:IsVec3InZone( self:GetVec3() )
self:T( { IsInZone } )
return IsInZone

View File

@ -65,6 +65,7 @@ COPY /b Moose.lua + %1\Wrapper\Unit.lua Moose.lua
COPY /b Moose.lua + %1\Wrapper\Client.lua Moose.lua
COPY /b Moose.lua + %1\Wrapper\Static.lua Moose.lua
COPY /b Moose.lua + %1\Wrapper\Airbase.lua Moose.lua
COPY /b Moose.lua + %1\Wrapper\Scenery.lua Moose.lua
rem Functional Classes
COPY /b Moose.lua + %1\Functional\Scoring.lua Moose.lua

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

View File

@ -0,0 +1,38 @@
---
-- Name: SCO-100 - Scoring of Statics
-- Author: FlightControl
-- Date Created: 21 Feb 2017
--
-- # Situation:
--
-- A shooting range has been setup. Fly the Ka-50 or the Su-25T to the statics located near the airport, and shoot them.
--
-- # Test cases:
--
-- 1. Observe the scoring granted to your flight when you hit and kill targets.
local HQ = GROUP:FindByName( "HQ", "Bravo HQ" )
local CommandCenter = COMMANDCENTER:New( HQ, "Bravo" )
local Scoring = SCORING:New( "Shooting Range 1" )
Scoring:SetMultiplierDestroyScore( 10 )
Scoring:SetMultiplierDestroyPenalty( 40 )
Scoring:AddUnitScore( UNIT:FindByName( "Unit #001" ), 200 )
-- Test for zone scores.
-- This one is to test scoring on normal units.
local ShootingRangeZone = ZONE:New( "ScoringZone1" )
Scoring:AddZoneScore( ShootingRangeZone, 200 )
-- This one is to test scoring on scenery.
-- Note that you can only destroy scenery with heavy weapons.
local SceneryZone = ZONE:New( "ScoringZone2" )
Scoring:AddZoneScore( SceneryZone, 200 )

View File

@ -0,0 +1,21 @@
---
-- Name: SCO-101 - Scoring Client to Client
-- Author: FlightControl
-- Date Created: 24 Feb 2017
--
-- # Situation:
--
-- A shooting range has been setup to test client to client scoring.
--
-- # Test cases:
--
-- 1. Observe the scoring granted to your flight when you hit and kill other clients.
local HQ = GROUP:FindByName( "HQ", "Bravo HQ" )
local CommandCenter = COMMANDCENTER:New( HQ, "Lima" )
local Scoring = SCORING:New( "Detect Demo" )

View File

@ -1,6 +1,7 @@
---
-- Name: SPA-018 - Ground Ops - Randomize Templates
-- Author: FlightControl
-- Date Created: 10 January 2017
-- Date Created: 10 Jan 2017
--
-- # Situation:
--

View File

@ -0,0 +1,27 @@
---
-- Name: SPA-019 - Ground Ops - Randomize Templates with Waypoints
-- Author: FlightControl
-- Date Created: 24 Feb 2017
--
-- # Situation:
--
-- At Gudauta spawn multiple ground vehicles, in a scheduled fashion.
--
-- # Test cases:
--
-- 1. Observe that the ground vehicles are spawned with randomized templates.
-- 2. Observe that the ground vehicles are spread around the spawning area and are not stacked upon each other.
-- Tests Gudauta
-- -------------
-- Create a zone table of the 2 zones.
ZoneTable = { ZONE:New( "Zone1" ), ZONE:New( "Zone2" ) }
TemplateTable = { "A", "B", "C" }
Spawn_Vehicle_1 = SPAWN:New( "Spawn Vehicle 1" )
:InitLimit( 10, 10 )
:InitRandomizeTemplate( TemplateTable )
:SpawnScheduled( 5, .5 )

View File

@ -0,0 +1,29 @@
---
-- Name: SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints
-- Author: FlightControl
-- Date Created: 24 Feb 2017
--
-- # Situation:
--
-- At Gudauta spawn multiple ground vehicles, in a scheduled fashion.
--
-- # Test cases:
--
-- 1. Observe that the ground vehicles are spawned with randomized templates.
-- 2. Observe that the ground vehicles are spread around the spawning area and are not stacked upon each other.
-- 3. Observe that the ground vehicles are spread over the random zones, and that the initial templates formations are kept.
-- Tests Gudauta
-- -------------
-- Create a zone table of the 2 zones.
ZoneTable = { ZONE:New( "Zone1" ), ZONE:New( "Zone2" ) }
TemplateTable = { "A", "B", "C" }
Spawn_Vehicle_1 = SPAWN:New( "Spawn Vehicle 1" )
:InitLimit( 100, 10 )
:InitRandomizeTemplate( TemplateTable )
:InitRandomizeZones( ZoneTable )
:SpawnScheduled( 5, .5 )

View File

@ -8,7 +8,7 @@ MOOSE works with DCS world 1.5. and 2.0.
The goal of MOOSE is to allow mission designers to enhance their scripting with mission orchestration objects, which can be instantiated from defined classes within the framework. This will allow to write mission scripts with minimal code embedded. Of course, the richness of the framework will determine the richness of the misson scenarios.
The MOOSE is a service that is produced while being consumed ... , it will evolve further as more classes are developed for the framework, and as more users are using it.
MOOSE is meant to be a one-man show, it is meant to evolve within a growing community around the framework.
MOOSE is not a one-man show, it is a collaborative effort and meant to evolve within a growing community around the framework.
Within the community, key users will start supporting, documenting, explaining and even creating new classes for the framework.
It is the ambition to grow this framework as a de-facto standard for mission designers to use.

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -71,7 +72,7 @@
<div id="content">
<h1>Module <code>AI_Balancer</code></h1>
<p>Single-Player:<strong>No</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>All</strong> -- <strong>AI Balancing will replace in multi player missions
<p>Single-Player:<strong>No</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>All</strong> -- <strong>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.</strong></p>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -71,7 +72,7 @@
<div id="content">
<h1>Module <code>AI_Cap</code></h1>
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> -- <strong>Execute Combat Air Patrol (CAP).</strong></p>
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> -- <strong>Execute Combat Air Patrol (CAP).</strong></p>
<p><img src="..\Presentations\AI_CAP\Dia1.JPG" alt="Banner Image"/></p>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -71,7 +72,7 @@
<div id="content">
<h1>Module <code>AI_Cas</code></h1>
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> --
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> --
<strong>Provide Close Air Support to friendly ground troops.</strong></p>
<p><img src="..\Presentations\AI_CAS\Dia1.JPG" alt="Banner Image"/></p>
@ -307,7 +308,7 @@ It can be notified to go RTB through the <strong>RTB</strong> event.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(AI_CAS_ZONE).New">AI_CAS_ZONE:New(PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType, EngageZone)</a></td>
<td class="name" nowrap="nowrap"><a href="##(AI_CAS_ZONE).New">AI_CAS_ZONE:New(PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, EngageZone, PatrolAltType)</a></td>
<td class="summary">
<p>Creates a new AI<em>CAS</em>ZONE object</p>
</td>
@ -739,7 +740,7 @@ It can be notified to go RTB through the <strong>RTB</strong> event.</p>
<dt>
<a id="#(AI_CAS_ZONE).New" >
<strong>AI_CAS_ZONE:New(PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType, EngageZone)</strong>
<strong>AI_CAS_ZONE:New(PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, EngageZone, PatrolAltType)</strong>
</a>
</dt>
<dd>
@ -780,13 +781,14 @@ The maximum speed of the <a href="Controllable.html">Controllable</a> in km/h.</
</li>
<li>
<p><code><em><a href="Dcs.DCSTypes.html##(AltitudeType)">Dcs.DCSTypes#AltitudeType</a> PatrolAltType </em></code>:
The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to RADIO</p>
<p><code><em><a href="Core.Zone.html##(ZONE_BASE)">Core.Zone#ZONE_BASE</a> EngageZone </em></code>:
The zone where the engage will happen.</p>
</li>
<li>
<p><code><em><a href="Core.Zone.html##(ZONE)">Core.Zone#ZONE</a> EngageZone </em></code>: </p>
<p><code><em><a href="Dcs.DCSTypes.html##(AltitudeType)">Dcs.DCSTypes#AltitudeType</a> PatrolAltType </em></code>:
The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to RADIO</p>
</li>
</ul>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -71,7 +72,7 @@
<div id="content">
<h1>Module <code>AI_Patrol</code></h1>
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> --
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> --
<strong>Air Patrolling or Staging.</strong></p>
<p><img src="..\Presentations\AI_PATROL\Dia1.JPG" alt="Banner Image"/></p>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -71,7 +72,7 @@
<div id="content">
<h1>Module <code>Cargo</code></h1>
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Ground</strong> -- <br/>
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Ground</strong> -- <br/>
<strong>Management of logical cargo objects, that can be transported from and to transportation carriers.</strong></p>
<p><img src="..\Presentations\AI_CARGO\CARGO.JPG" alt="Banner Image"/></p>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -115,7 +116,7 @@ in the correct processing order.</p>
<p><img src="..\Presentations\EVENT\Dia6.JPG" alt="Objects"/></p>
<p>For most DCS events, the above order of updating will be followed.1</p>
<p>For most DCS events, the above order of updating will be followed.</p>
<p><img src="..\Presentations\EVENT\Dia7.JPG" alt="Objects"/></p>
@ -206,6 +207,23 @@ There are basically 4 main categories of information stored in the EVENTDATA str
<p><img src="..\Presentations\EVENT\Dia14.JPG" alt="Objects"/></p>
<p><strong>IMPORTANT NOTE:</strong> Some events can involve not just UNIT objects, but also STATIC objects!!!
In that case the initiator or target unit fields will refer to a STATIC object!
In case a STATIC object is involved, the documentation indicates which fields will and won't not be populated.
The fields <strong>IniObjectCategory</strong> and <strong>TgtObjectCategory</strong> contain the indicator which <strong>kind of object is involved</strong> in the event.
You can use the enumerator <strong>Object.Category.UNIT</strong> and <strong>Object.Category.STATIC</strong> to check on IniObjectCategory and TgtObjectCategory.
Example code snippet:</p>
<pre><code> if Event.IniObjectCategory == Object.Category.UNIT then
...
end
if Event.IniObjectCategory == Object.Category.STATIC then
...
end
</code></pre>
<p>When a static object is involved in the event, the Group and Player fields won't be populated.</p>
<hr/>
<h1><strong>API CHANGE HISTORY</strong></h1>
@ -391,81 +409,182 @@ YYYY-MM-DD: CLASS:<strong>NewFunction( Params )</strong> added</p>
<h2><a id="#(EVENTDATA)">Type <code>EVENTDATA</code></a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniCategory">EVENTDATA.IniCategory</a></td>
<td class="summary">
<pre><code> (UNIT) The category of the initiator.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniCoalition">EVENTDATA.IniCoalition</a></td>
<td class="summary">
<pre><code> (UNIT) The coalition of the initiator.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniDCSGroup">EVENTDATA.IniDCSGroup</a></td>
<td class="summary">
<pre><code> (UNIT) The initiating {Dcs.DCSGroup#Group}.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniDCSGroupName">EVENTDATA.IniDCSGroupName</a></td>
<td class="summary">
<p> (UNIT) The initiating Group name.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniDCSUnit">EVENTDATA.IniDCSUnit</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC) The initiating &lt;a href="Dcs.DCSUnit.html##(Unit)"&gt;Dcs.DCSUnit#Unit&lt;/a&gt; or &lt;a href="Dcs.DCSStaticObject.html##(StaticObject)"&gt;Dcs.DCSStaticObject#StaticObject&lt;/a&gt;.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniDCSUnitName">EVENTDATA.IniDCSUnitName</a></td>
<td class="summary">
<p> (UNIT/STATIC) The initiating Unit name.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniGroup">EVENTDATA.IniGroup</a></td>
<td class="summary">
<pre><code> (UNIT) The initiating MOOSE wrapper &lt;a href="Wrapper.Group.html##(GROUP)"&gt;Wrapper.Group#GROUP&lt;/a&gt; of the initiator Group object.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniGroupName">EVENTDATA.IniGroupName</a></td>
<td class="summary">
<pre><code> (UNIT) The initiating GROUP name (same as IniDCSGroupName).
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniObjectCategory">EVENTDATA.IniObjectCategory</a></td>
<td class="summary">
<p>(UNIT/STATIC/SCENERY) The initiator object category ( Object.Category.UNIT or Object.Category.STATIC ).</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniPlayerName">EVENTDATA.IniPlayerName</a></td>
<td class="summary">
<pre><code>(UNIT) The name of the initiating player in case the Unit is a client or player slot.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniTypeName">EVENTDATA.IniTypeName</a></td>
<td class="summary">
<pre><code> (UNIT) The type name of the initiator.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniUnit">EVENTDATA.IniUnit</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC) The initiating MOOSE wrapper &lt;a href="Wrapper.Unit.html##(UNIT)"&gt;Wrapper.Unit#UNIT&lt;/a&gt; of the initiator Unit object.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).IniUnitName">EVENTDATA.IniUnitName</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC) The initiating UNIT name (same as IniDCSUnitName).
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtCategory">EVENTDATA.TgtCategory</a></td>
<td class="summary">
<pre><code> (UNIT) The category of the target.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtCoalition">EVENTDATA.TgtCoalition</a></td>
<td class="summary">
<pre><code> (UNIT) The coalition of the target.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtDCSGroup">EVENTDATA.TgtDCSGroup</a></td>
<td class="summary">
<pre><code> (UNIT) The target {Dcs.DCSGroup#Group}.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtDCSGroupName">EVENTDATA.TgtDCSGroupName</a></td>
<td class="summary">
<p> (UNIT) The target Group name.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtDCSUnit">EVENTDATA.TgtDCSUnit</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC) The target &lt;a href="Dcs.DCSUnit.html##(Unit)"&gt;Dcs.DCSUnit#Unit&lt;/a&gt; or &lt;a href="Dcs.DCSStaticObject.html##(StaticObject)"&gt;Dcs.DCSStaticObject#StaticObject&lt;/a&gt;.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtDCSUnitName">EVENTDATA.TgtDCSUnitName</a></td>
<td class="summary">
<p> (UNIT/STATIC) The target Unit name.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtGroup">EVENTDATA.TgtGroup</a></td>
<td class="summary">
<pre><code> (UNIT) The target MOOSE wrapper &lt;a href="Wrapper.Group.html##(GROUP)"&gt;Wrapper.Group#GROUP&lt;/a&gt; of the target Group object.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtGroupName">EVENTDATA.TgtGroupName</a></td>
<td class="summary">
<pre><code> (UNIT) The target GROUP name (same as TgtDCSGroupName).
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtObjectCategory">EVENTDATA.TgtObjectCategory</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC) The target object category ( Object.Category.UNIT or Object.Category.STATIC ).
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtPlayerName">EVENTDATA.TgtPlayerName</a></td>
<td class="summary">
<pre><code>(UNIT) The name of the target player in case the Unit is a client or player slot.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtTypeName">EVENTDATA.TgtTypeName</a></td>
<td class="summary">
<pre><code> (UNIT) The type name of the target.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtUnit">EVENTDATA.TgtUnit</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC) The target MOOSE wrapper &lt;a href="Wrapper.Unit.html##(UNIT)"&gt;Wrapper.Unit#UNIT&lt;/a&gt; of the target Unit object.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).TgtUnitName">EVENTDATA.TgtUnitName</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC) The target UNIT name (same as TgtDCSUnitName).
</code></pre>
</td>
</tr>
<tr>
@ -489,25 +608,28 @@ YYYY-MM-DD: CLASS:<strong>NewFunction( Params )</strong> added</p>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).id">EVENTDATA.id</a></td>
<td class="summary">
<p>The identifier of the event.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).initiator">EVENTDATA.initiator</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC/SCENERY) The initiating &lt;a href="Dcs.DCSUnit.html##(Unit)"&gt;Dcs.DCSUnit#Unit&lt;/a&gt; or &lt;a href="Dcs.DCSStaticObject.html##(StaticObject)"&gt;Dcs.DCSStaticObject#StaticObject&lt;/a&gt;.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).target">EVENTDATA.target</a></td>
<td class="summary">
<pre><code> (UNIT/STATIC) The target &lt;a href="Dcs.DCSUnit.html##(Unit)"&gt;Dcs.DCSUnit#Unit&lt;/a&gt; or &lt;a href="Dcs.DCSStaticObject.html##(StaticObject)"&gt;Dcs.DCSStaticObject#StaticObject&lt;/a&gt;.
</code></pre>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENTDATA).weapon">EVENTDATA.weapon</a></td>
<td class="summary">
<p>The weapon used during the event.</p>
</td>
</tr>
</table>
@ -1325,71 +1447,179 @@ The self instance of the class for which the event is.</p>
<h2><a id="#(EVENTDATA)" >Type <code>EVENTDATA</code></a></h2>
<p>The Event structure</p>
<p>The Event structure
Note that at the beginning of each field description, there is an indication which field will be populated depending on the object type involved in the Event:</p>
<ul>
<li>A (Object.Category.)UNIT : A UNIT object type is involved in the Event.</li>
</ul>
<ul>
<li>A (Object.Category.)STATIC : A STATIC object type is involved in the Event.µ
</li>
</ul>
<h3>Field(s)</h3>
<dl class="function">
<dt>
<em><a href="Dcs.DCSUnit.html##(Unit.Category)">Dcs.DCSUnit#Unit.Category</a></em>
<a id="#(EVENTDATA).IniCategory" >
<strong>EVENTDATA.IniCategory</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The category of the initiator.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCScoalition.html##(coalition.side)">Dcs.DCScoalition#coalition.side</a></em>
<a id="#(EVENTDATA).IniCoalition" >
<strong>EVENTDATA.IniCoalition</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The coalition of the initiator.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCSGroup.html##(Group)">Dcs.DCSGroup#Group</a></em>
<a id="#(EVENTDATA).IniDCSGroup" >
<strong>EVENTDATA.IniDCSGroup</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The initiating {Dcs.DCSGroup#Group}.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).IniDCSGroupName" >
<strong>EVENTDATA.IniDCSGroupName</strong>
</a>
</dt>
<dd>
<p> (UNIT) The initiating Group name.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCSUnit.html##(Unit)">Dcs.DCSUnit#Unit</a></em>
<a id="#(EVENTDATA).IniDCSUnit" >
<strong>EVENTDATA.IniDCSUnit</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT/STATIC) The initiating &lt;a href="Dcs.DCSUnit.html##(Unit)"&gt;Dcs.DCSUnit#Unit&lt;/a&gt; or &lt;a href="Dcs.DCSStaticObject.html##(StaticObject)"&gt;Dcs.DCSStaticObject#StaticObject&lt;/a&gt;.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).IniDCSUnitName" >
<strong>EVENTDATA.IniDCSUnitName</strong>
</a>
</dt>
<dd>
<p> (UNIT/STATIC) The initiating Unit name.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<em><a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a></em>
<a id="#(EVENTDATA).IniGroup" >
<strong>EVENTDATA.IniGroup</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The initiating MOOSE wrapper &lt;a href="Wrapper.Group.html##(GROUP)"&gt;Wrapper.Group#GROUP&lt;/a&gt; of the initiator Group object.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).IniGroupName" >
<strong>EVENTDATA.IniGroupName</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The initiating GROUP name (same as IniDCSGroupName).
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCSObject.html##(Object.Category)">Dcs.DCSObject#Object.Category</a></em>
<a id="#(EVENTDATA).IniObjectCategory" >
<strong>EVENTDATA.IniObjectCategory</strong>
</a>
</dt>
<dd>
<p>(UNIT/STATIC/SCENERY) The initiator object category ( Object.Category.UNIT or Object.Category.STATIC ).</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).IniPlayerName" >
<strong>EVENTDATA.IniPlayerName</strong>
</a>
</dt>
<dd>
<pre><code>(UNIT) The name of the initiating player in case the Unit is a client or player slot.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).IniTypeName" >
<strong>EVENTDATA.IniTypeName</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The type name of the initiator.
</code></pre>
</dd>
@ -1404,7 +1634,8 @@ The self instance of the class for which the event is.</p>
</dt>
<dd>
<pre><code> (UNIT/STATIC) The initiating MOOSE wrapper &lt;a href="Wrapper.Unit.html##(UNIT)"&gt;Wrapper.Unit#UNIT&lt;/a&gt; of the initiator Unit object.
</code></pre>
</dd>
</dl>
@ -1418,58 +1649,171 @@ The self instance of the class for which the event is.</p>
</dt>
<dd>
<pre><code> (UNIT/STATIC) The initiating UNIT name (same as IniDCSUnitName).
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCSUnit.html##(Unit.Category)">Dcs.DCSUnit#Unit.Category</a></em>
<a id="#(EVENTDATA).TgtCategory" >
<strong>EVENTDATA.TgtCategory</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The category of the target.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCScoalition.html##(coalition.side)">Dcs.DCScoalition#coalition.side</a></em>
<a id="#(EVENTDATA).TgtCoalition" >
<strong>EVENTDATA.TgtCoalition</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The coalition of the target.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCSGroup.html##(Group)">Dcs.DCSGroup#Group</a></em>
<a id="#(EVENTDATA).TgtDCSGroup" >
<strong>EVENTDATA.TgtDCSGroup</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The target {Dcs.DCSGroup#Group}.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).TgtDCSGroupName" >
<strong>EVENTDATA.TgtDCSGroupName</strong>
</a>
</dt>
<dd>
<p> (UNIT) The target Group name.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCSUnit.html##(Unit)">Dcs.DCSUnit#Unit</a></em>
<a id="#(EVENTDATA).TgtDCSUnit" >
<strong>EVENTDATA.TgtDCSUnit</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT/STATIC) The target &lt;a href="Dcs.DCSUnit.html##(Unit)"&gt;Dcs.DCSUnit#Unit&lt;/a&gt; or &lt;a href="Dcs.DCSStaticObject.html##(StaticObject)"&gt;Dcs.DCSStaticObject#StaticObject&lt;/a&gt;.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).TgtDCSUnitName" >
<strong>EVENTDATA.TgtDCSUnitName</strong>
</a>
</dt>
<dd>
<p> (UNIT/STATIC) The target Unit name.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a></em>
<a id="#(EVENTDATA).TgtGroup" >
<strong>EVENTDATA.TgtGroup</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The target MOOSE wrapper &lt;a href="Wrapper.Group.html##(GROUP)"&gt;Wrapper.Group#GROUP&lt;/a&gt; of the target Group object.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).TgtGroupName" >
<strong>EVENTDATA.TgtGroupName</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The target GROUP name (same as TgtDCSGroupName).
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCSObject.html##(Object.Category)">Dcs.DCSObject#Object.Category</a></em>
<a id="#(EVENTDATA).TgtObjectCategory" >
<strong>EVENTDATA.TgtObjectCategory</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT/STATIC) The target object category ( Object.Category.UNIT or Object.Category.STATIC ).
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).TgtPlayerName" >
<strong>EVENTDATA.TgtPlayerName</strong>
</a>
</dt>
<dd>
<pre><code>(UNIT) The name of the target player in case the Unit is a client or player slot.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(EVENTDATA).TgtTypeName" >
<strong>EVENTDATA.TgtTypeName</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT) The type name of the target.
</code></pre>
</dd>
@ -1484,7 +1828,8 @@ The self instance of the class for which the event is.</p>
</dt>
<dd>
<pre><code> (UNIT/STATIC) The target MOOSE wrapper &lt;a href="Wrapper.Unit.html##(UNIT)"&gt;Wrapper.Unit#UNIT&lt;/a&gt; of the target Unit object.
</code></pre>
</dd>
</dl>
@ -1498,7 +1843,8 @@ The self instance of the class for which the event is.</p>
</dt>
<dd>
<pre><code> (UNIT/STATIC) The target UNIT name (same as TgtDCSUnitName).
</code></pre>
</dd>
</dl>
@ -1544,12 +1890,14 @@ The self instance of the class for which the event is.</p>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(EVENTDATA).id" >
<strong>EVENTDATA.id</strong>
</a>
</dt>
<dd>
<p>The identifier of the event.</p>
</dd>
@ -1557,26 +1905,30 @@ The self instance of the class for which the event is.</p>
<dl class="function">
<dt>
<em><a href="Dcs.DCSUnit.html##(Unit)">Dcs.DCSUnit#Unit</a></em>
<a id="#(EVENTDATA).initiator" >
<strong>EVENTDATA.initiator</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT/STATIC/SCENERY) The initiating &lt;a href="Dcs.DCSUnit.html##(Unit)"&gt;Dcs.DCSUnit#Unit&lt;/a&gt; or &lt;a href="Dcs.DCSStaticObject.html##(StaticObject)"&gt;Dcs.DCSStaticObject#StaticObject&lt;/a&gt;.
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="Dcs.DCSUnit.html##(Unit)">Dcs.DCSUnit#Unit</a></em>
<a id="#(EVENTDATA).target" >
<strong>EVENTDATA.target</strong>
</a>
</dt>
<dd>
<pre><code> (UNIT/STATIC) The target &lt;a href="Dcs.DCSUnit.html##(Unit)"&gt;Dcs.DCSUnit#Unit&lt;/a&gt; or &lt;a href="Dcs.DCSStaticObject.html##(StaticObject)"&gt;Dcs.DCSStaticObject#StaticObject&lt;/a&gt;.
</code></pre>
</dd>
</dl>
@ -1589,7 +1941,7 @@ The self instance of the class for which the event is.</p>
</dt>
<dd>
<p>The weapon used during the event.</p>
</dd>
</dl>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -164,6 +165,12 @@
<td class="name" nowrap="nowrap"><a href="##(IDENTIFIABLE).GetName">IDENTIFIABLE:GetName()</a></td>
<td class="summary">
<p>Returns DCS Identifiable object name.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(IDENTIFIABLE).GetThreatLevel">IDENTIFIABLE:GetThreatLevel()</a></td>
<td class="summary">
</td>
</tr>
<tr>
@ -398,6 +405,19 @@ The DCS Identifiable is not existing or alive. </p>
</li>
</ol>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(IDENTIFIABLE).GetThreatLevel" >
<strong>IDENTIFIABLE:GetThreatLevel()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -133,6 +134,12 @@ To send messages, you need to use the To functions.</p>
<td class="name" nowrap="nowrap"><a href="##(MESSAGE).ToAll">MESSAGE:ToAll()</a></td>
<td class="summary">
<p>Sends a MESSAGE to all players. </p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MESSAGE).ToAllIf">MESSAGE:ToAllIf(Condition)</a></td>
<td class="summary">
<p>Sends a MESSAGE to all players if the given Condition is true.</p>
</td>
</tr>
<tr>
@ -151,6 +158,12 @@ To send messages, you need to use the To functions.</p>
<td class="name" nowrap="nowrap"><a href="##(MESSAGE).ToCoalition">MESSAGE:ToCoalition(CoalitionSide)</a></td>
<td class="summary">
<p>Sends a MESSAGE to a Coalition. </p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MESSAGE).ToCoalitionIf">MESSAGE:ToCoalitionIf(CoalitionSide, Condition)</a></td>
<td class="summary">
<p>Sends a MESSAGE to a Coalition if the given Condition is true. </p>
</td>
</tr>
<tr>
@ -309,6 +322,32 @@ or
MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" )
MessageAll:ToAll()</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MESSAGE).ToAllIf" >
<strong>MESSAGE:ToAllIf(Condition)</strong>
</a>
</dt>
<dd>
<p>Sends a MESSAGE to all players if the given Condition is true.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> Condition </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MESSAGE)">#MESSAGE</a>:</em></p>
</dd>
</dl>
<dl class="function">
@ -418,6 +457,38 @@ or
MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" )
MessageRED:ToCoalition( coalition.side.RED )</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MESSAGE).ToCoalitionIf" >
<strong>MESSAGE:ToCoalitionIf(CoalitionSide, Condition)</strong>
</a>
</dt>
<dd>
<p>Sends a MESSAGE to a Coalition if the given Condition is true. </p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em> CoalitionSide </em></code>:
needs to be filled out by the defined structure of the standard scripting engine <a href="coalition.side.html">coalition.side</a>. </p>
</li>
<li>
<p><code><em> Condition </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MESSAGE)">#MESSAGE</a>:</em></p>
</dd>
</dl>
<dl class="function">

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -82,6 +83,7 @@
In order to keep the credibility of the the author, I want to emphasize that the of the MIST framework was created by Grimes, who you can find on the Eagle Dynamics Forums.</p>
<h2>1.1) POINT_VEC3 constructor</h2>
<p>A new POINT_VEC3 instance can be created with:</p>
<ul>
@ -89,6 +91,43 @@ In order to keep the credibility of the the author, I want to emphasize that the
<li><a href="Point.html##(POINT_VEC3).NewFromVec3">Point#POINT_VEC3.NewFromVec3</a>(): a 3D point created from a <a href="DCSTypes.html##(Vec3)">DCSTypes#Vec3</a>.</li>
</ul>
<h2>1.2) Smoke, flare, explode, illuminate</h2>
<p>At the point a smoke, flare, explosion and illumination bomb can be triggered. Use the following methods:</p>
<h3>1.2.1) Smoke</h3>
<ul>
<li><a href="##(POINT_VEC3).Smoke">POINT_VEC3.Smoke</a>(): To smoke the point in a certain color.</li>
<li><a href="##(POINT_VEC3).SmokeBlue">POINT_VEC3.SmokeBlue</a>(): To smoke the point in blue.</li>
<li><a href="##(POINT_VEC3).SmokeRed">POINT_VEC3.SmokeRed</a>(): To smoke the point in red.</li>
<li><a href="##(POINT_VEC3).SmokeOrange">POINT_VEC3.SmokeOrange</a>(): To smoke the point in orange.</li>
<li><a href="##(POINT_VEC3).SmokeWhite">POINT_VEC3.SmokeWhite</a>(): To smoke the point in white.</li>
<li><a href="##(POINT_VEC3).SmokeGreen">POINT_VEC3.SmokeGreen</a>(): To smoke the point in green.</li>
</ul>
<h3>1.2.2) Flare</h3>
<ul>
<li><a href="##(POINT_VEC3).Flare">POINT_VEC3.Flare</a>(): To flare the point in a certain color.</li>
<li><a href="##(POINT_VEC3).FlareRed">POINT_VEC3.FlareRed</a>(): To flare the point in red.</li>
<li><a href="##(POINT_VEC3).FlareYellow">POINT_VEC3.FlareYellow</a>(): To flare the point in yellow.</li>
<li><a href="##(POINT_VEC3).FlareWhite">POINT_VEC3.FlareWhite</a>(): To flare the point in white.</li>
<li><a href="##(POINT_VEC3).FlareGreen">POINT_VEC3.FlareGreen</a>(): To flare the point in green.</li>
</ul>
<h3>1.2.3) Explode</h3>
<ul>
<li><a href="##(POINT_VEC3).Explosion">POINT_VEC3.Explosion</a>(): To explode the point with a certain intensity.</li>
</ul>
<h3>1.2.4) Illuminate</h3>
<ul>
<li><a href="##(POINT_VEC3).IlluminationBomb">POINT_VEC3.IlluminationBomb</a>(): To illuminate the point.</li>
</ul>
<h1>2) <a href="Point.html##(POINT_VEC2)">Point#POINT_VEC2</a> class, extends <a href="Point.html##(POINT_VEC3)">Point#POINT_VEC3</a></h1>
<p>The <a href="Point.html##(POINT_VEC2)">Point#POINT_VEC2</a> class defines a 2D point in the simulator. The height coordinate (if needed) will be the land height + an optional added height specified.</p>
@ -114,6 +153,9 @@ In order to keep the credibility of the the author, I want to emphasize that the
<p>Hereby the change log:</p>
<p>2017-03-03: POINT_VEC3:<strong>Explosion( ExplosionIntensity )</strong> added. <br/>
2017-03-03: POINT_VEC3:<strong>IlluminationBomb()</strong> added. </p>
<p>2017-02-18: POINT_VEC3:<strong>NewFromVec2( Vec2, LandHeightAdd )</strong> added.</p>
<p>2016-08-12: POINT_VEC3:<strong>Translate( Distance, Angle )</strong> added.</p>
@ -251,6 +293,12 @@ In order to keep the credibility of the the author, I want to emphasize that the
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).ClassName">POINT_VEC3.ClassName</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).Explosion">POINT_VEC3:Explosion(ExplosionIntensity)</a></td>
<td class="summary">
<p>Creates an explosion at the point of a certain intensity.</p>
</td>
</tr>
<tr>
@ -383,6 +431,12 @@ In order to keep the credibility of the the author, I want to emphasize that the
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).GetZ">POINT_VEC3:GetZ()</a></td>
<td class="summary">
<p>Return the z coordinate of the POINT_VEC3.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).IlluminationBomb">POINT_VEC3:IlluminationBomb()</a></td>
<td class="summary">
<p>Creates an illumination bomb at the point.</p>
</td>
</tr>
<tr>
@ -998,6 +1052,27 @@ The new calculated POINT_VEC2.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).Explosion" >
<strong>POINT_VEC3:Explosion(ExplosionIntensity)</strong>
</a>
</dt>
<dd>
<p>Creates an explosion at the point of a certain intensity.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#number ExplosionIntensity </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
@ -1536,6 +1611,19 @@ The z coodinate.</p>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).IlluminationBomb" >
<strong>POINT_VEC3:IlluminationBomb()</strong>
</a>
</dt>
<dd>
<p>Creates an illumination bomb at the point.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).IsMetric" >
<strong>POINT_VEC3:IsMetric()</strong>
</a>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li>Process_JTAC</li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li>Process_Pickup</li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li>Route</li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -0,0 +1,220 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<link rel="stylesheet" href="stylesheet.css" type="text/css"/>
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo"></div>
<div id="product_name"><big><b></b></big></div>
<div id="product_description"></div>
</div>
<div id="main">
<div id="navigation">
<h2>Modules</h2>
<ul><li>
<a href="index.html">index</a>
</li></ul>
<ul>
<li><a href="AI_Balancer.html">AI_Balancer</a></li>
<li><a href="AI_Cap.html">AI_Cap</a></li>
<li><a href="AI_Cas.html">AI_Cas</a></li>
<li><a href="AI_Patrol.html">AI_Patrol</a></li>
<li><a href="Account.html">Account</a></li>
<li><a href="Airbase.html">Airbase</a></li>
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
<li><a href="Assign.html">Assign</a></li>
<li><a href="Base.html">Base</a></li>
<li><a href="Cargo.html">Cargo</a></li>
<li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li>
<li><a href="CommandCenter.html">CommandCenter</a></li>
<li><a href="Controllable.html">Controllable</a></li>
<li><a href="Database.html">Database</a></li>
<li><a href="Detection.html">Detection</a></li>
<li><a href="DetectionManager.html">DetectionManager</a></li>
<li><a href="Escort.html">Escort</a></li>
<li><a href="Event.html">Event</a></li>
<li><a href="Fsm.html">Fsm</a></li>
<li><a href="Group.html">Group</a></li>
<li><a href="Identifiable.html">Identifiable</a></li>
<li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="Mission.html">Mission</a></li>
<li><a href="Object.html">Object</a></li>
<li><a href="Point.html">Point</a></li>
<li><a href="Positionable.html">Positionable</a></li>
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li>Scenery</li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li>
<li><a href="Set.html">Set</a></li>
<li><a href="Smoke.html">Smoke</a></li>
<li><a href="Spawn.html">Spawn</a></li>
<li><a href="Static.html">Static</a></li>
<li><a href="Task.html">Task</a></li>
<li><a href="Task_A2G.html">Task_A2G</a></li>
<li><a href="Task_PICKUP.html">Task_PICKUP</a></li>
<li><a href="Task_SEAD.html">Task_SEAD</a></li>
<li><a href="Unit.html">Unit</a></li>
<li><a href="Utils.html">Utils</a></li>
<li><a href="Zone.html">Zone</a></li>
<li><a href="routines.html">routines</a></li>
</ul>
</div>
<div id="content">
<h1>Module <code>Scenery</code></h1>
<p>This module contains the SCENERY class.</p>
<h1>1) <a href="Scenery.html##(SCENERY)">Scenery#SCENERY</a> class, extends <a href="Positionable.html##(POSITIONABLE)">Positionable#POSITIONABLE</a></h1>
<p>Scenery objects are defined on the map.
The <a href="Scenery.html##(SCENERY)">Scenery#SCENERY</a> class is a wrapper class to handle the DCS Scenery objects:</p>
<ul>
<li>Wraps the DCS Scenery objects.</li>
<li>Support all DCS Scenery APIs.</li>
<li>Enhance with Scenery specific APIs not in the DCS API set.</li>
</ul>
<h2>Global(s)</h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="#SCENERY">SCENERY</a></td>
<td class="summary">
</td>
</tr>
</table>
<h2><a id="#(SCENERY)">Type <code>SCENERY</code></a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCENERY).ClassName">SCENERY.ClassName</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCENERY).GetDCSObject">SCENERY:GetDCSObject()</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCENERY).GetThreatLevel">SCENERY:GetThreatLevel()</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCENERY).Register">SCENERY:Register(SceneryName, SceneryObject)</a></td>
<td class="summary">
</td>
</tr>
</table>
<h2>Global(s)</h2>
<dl class="function">
<dt>
<em><a href="##(SCENERY)">#SCENERY</a></em>
<a id="SCENERY" >
<strong>SCENERY</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<h2><a id="#(Scenery)" >Type <code>Scenery</code></a></h2>
<h2><a id="#(SCENERY)" >Type <code>SCENERY</code></a></h2>
<p>The SCENERY class</p>
<h3>Field(s)</h3>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(SCENERY).ClassName" >
<strong>SCENERY.ClassName</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SCENERY).GetDCSObject" >
<strong>SCENERY:GetDCSObject()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SCENERY).GetThreatLevel" >
<strong>SCENERY:GetThreatLevel()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SCENERY).Register" >
<strong>SCENERY:Register(SceneryName, SceneryObject)</strong>
</a>
</dt>
<dd>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em> SceneryName </em></code>: </p>
</li>
<li>
<p><code><em> SceneryObject </em></code>: </p>
</li>
</ul>
</dd>
</dl>
</div>
</div>
</body>
</html>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li>ScheduleDispatcher</li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -341,8 +342,7 @@ Nothing of this code should be modified without testing it thoroughly.</p>
<p> Initialize the ObjectSchedulers array, which is a weakly coupled table.
If the object used as the key is nil, then the garbage collector will remove the item from the Functions array.</p>
<p> setmetatable( {}, { __mode = "v" } )</p>
</dd>
</dl>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li>Scheduler</li>
<li><a href="Scoring.html">Scoring</a></li>

File diff suppressed because it is too large Load Diff

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -71,7 +72,7 @@
<div id="content">
<h1>Module <code>Spawn</code></h1>
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>All</strong> -- <br/>
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>All</strong> -- <br/>
<strong>Spawn groups of units dynamically in your missions.</strong></p>
<p><img src="..\Presentations\SPAWN\SPAWN.JPG" alt="Banner Image"/></p>
@ -1758,6 +1759,9 @@ The group that was spawned. You can use this group for further actions.</p>
<p> Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning.</p>
</dd>
</dl>
<dl class="function">
@ -2232,7 +2236,7 @@ when nothing was spawned.</p>
<dl class="function">
<dt>
<em></em>
<em>#number</em>
<a id="#(SPAWN).SpawnMaxGroups" >
<strong>SPAWN.SpawnMaxGroups</strong>
</a>
@ -2249,7 +2253,7 @@ when nothing was spawned.</p>
<dl class="function">
<dt>
<em></em>
<em>#number</em>
<a id="#(SPAWN).SpawnMaxUnitsAlive" >
<strong>SPAWN.SpawnMaxUnitsAlive</strong>
</a>
@ -2528,7 +2532,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
<dl class="function">
<dt>
<em></em>
<em>#boolean</em>
<a id="#(SPAWN).SpawnUnControlled" >
<strong>SPAWN.SpawnUnControlled</strong>
</a>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -133,6 +134,12 @@ If the DCS Static object does not exist or is nil, the STATIC methods will retur
<td class="name" nowrap="nowrap"><a href="##(STATIC).GetDCSObject">STATIC:GetDCSObject()</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(STATIC).GetThreatLevel">STATIC:GetThreatLevel()</a></td>
<td class="summary">
</td>
</tr>
<tr>
@ -226,6 +233,19 @@ Name of the DCS <strong>Static</strong> as defined within the Mission Editor.</p
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(STATIC).GetThreatLevel" >
<strong>STATIC:GetThreatLevel()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -88,6 +89,7 @@
<li><a href="##(TASK).HasStateMachine">TASK.HasStateMachine</a>():Enquire if the task has a <a href="Fsm.html">Fsm</a></li>
<li><a href="##(TASK).AssignToUnit">TASK.AssignToUnit</a>(): Assign a task to a unit. (Needs to be implemented in the derived classes from <a href="##(TASK)">#TASK</a>.</li>
<li><a href="##(TASK).UnAssignFromUnit">TASK.UnAssignFromUnit</a>(): Unassign the task from a unit.</li>
<li><a href="##(TASK).SetTimeOut">TASK.SetTimeOut</a>(): Set timer in seconds before task gets cancelled if not assigned.</li>
</ul>
<h2>1.2) Set and enquire task status (beyond the task state machine processing).</h2>
@ -511,6 +513,12 @@ Use the method <a href="##(TASK).AddScore">TASK.AddScore</a>() to add scores whe
<td class="name" nowrap="nowrap"><a href="##(TASK).SetStateMachine">TASK:SetStateMachine(TaskUnit, Fsm)</a></td>
<td class="summary">
<p>Add a FiniteStateMachine to <a href="Task.html">Task</a> with key Task<a href="Unit.html">Unit</a></p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(TASK).SetTimeOut">TASK:SetTimeOut(Timer)</a></td>
<td class="summary">
<p>Sets the TimeOut for the <a href="Task.html">Task</a>.</p>
</td>
</tr>
<tr>
@ -595,6 +603,12 @@ Use the method <a href="##(TASK).AddScore">TASK.AddScore</a>() to add scores whe
<td class="name" nowrap="nowrap"><a href="##(TASK).TaskType">TASK.TaskType</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(TASK).TimeOut">TASK.TimeOut</a></td>
<td class="summary">
</td>
</tr>
<tr>
@ -643,6 +657,12 @@ Use the method <a href="##(TASK).AddScore">TASK.AddScore</a>() to add scores whe
<td class="name" nowrap="nowrap"><a href="##(TASK).onafterReplan">TASK:onafterReplan(From, Event, To)</a></td>
<td class="summary">
<p>FSM function for a TASK</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(TASK).onbeforeTimeOut">TASK:onbeforeTimeOut(Event, From, To)</a></td>
<td class="summary">
<p>FSM function for a TASK</p>
</td>
</tr>
<tr>
@ -661,6 +681,12 @@ Use the method <a href="##(TASK).AddScore">TASK.AddScore</a>() to add scores whe
<td class="name" nowrap="nowrap"><a href="##(TASK).onenterFailed">TASK:onenterFailed(From, Event, To)</a></td>
<td class="summary">
<p>FSM function for a TASK</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(TASK).onenterPlanned">TASK:onenterPlanned(Event, From, To)</a></td>
<td class="summary">
<p>FSM function for a TASK</p>
</td>
</tr>
<tr>
@ -1993,6 +2019,36 @@ self</p>
<dl class="function">
<dt>
<a id="#(TASK).SetTimeOut" >
<strong>TASK:SetTimeOut(Timer)</strong>
</a>
</dt>
<dd>
<p>Sets the TimeOut for the <a href="Task.html">Task</a>.</p>
<p>If <a href="Task.html">Task</a> stayed planned for longer than TimeOut, it gets into Cancelled status.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="##(integer)">#integer</a> Timer </em></code>:
in seconds</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(TASK)">#TASK</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(TASK).SetType" >
<strong>TASK:SetType(TaskType)</strong>
</a>
@ -2200,6 +2256,20 @@ Fsm#FSM_PROCESS</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(TASK).TimeOut" >
<strong>TASK.TimeOut</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
@ -2355,6 +2425,37 @@ self</p>
<dl class="function">
<dt>
<a id="#(TASK).onbeforeTimeOut" >
<strong>TASK:onbeforeTimeOut(Event, From, To)</strong>
</a>
</dt>
<dd>
<p>FSM function for a TASK</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#string Event </em></code>: </p>
</li>
<li>
<p><code><em>#string From </em></code>: </p>
</li>
<li>
<p><code><em>#string To </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(TASK).onenterAborted" >
<strong>TASK:onenterAborted(From, Event, To)</strong>
</a>
@ -2448,6 +2549,37 @@ self</p>
<dl class="function">
<dt>
<a id="#(TASK).onenterPlanned" >
<strong>TASK:onenterPlanned(Event, From, To)</strong>
</a>
</dt>
<dd>
<p>FSM function for a TASK</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#string Event </em></code>: </p>
</li>
<li>
<p><code><em>#string From </em></code>: </p>
</li>
<li>
<p><code><em>#string To </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(TASK).onenterSuccess" >
<strong>TASK:onenterSuccess(Event, From, To)</strong>
</a>
@ -2508,6 +2640,8 @@ self</p>
</dd>
</dl>
<h2><a id="#(integer)" >Type <code>integer</code></a></h2>
</div>
</div>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
@ -74,7 +75,7 @@
<tr>
<td class="name" nowrap="nowrap"><a href="AI_Balancer.html">AI_Balancer</a></td>
<td class="summary">
<p>Single-Player:<strong>No</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>All</strong> -- <strong>AI Balancing will replace in multi player missions
<p>Single-Player:<strong>No</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>All</strong> -- <strong>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.</strong></p>
@ -91,7 +92,7 @@ CLIENTS in a SET_CLIENT collection, which are not occupied by human players.</p>
<tr>
<td class="name" nowrap="nowrap"><a href="AI_Cap.html">AI_Cap</a></td>
<td class="summary">
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> -- <strong>Execute Combat Air Patrol (CAP).</strong></p>
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> -- <strong>Execute Combat Air Patrol (CAP).</strong></p>
<p><img src="..\Presentations\AI_CAP\Dia1.JPG" alt="Banner Image"/></p>
@ -106,7 +107,7 @@ and automatically engage any airborne enemies that are within a certain range or
<tr>
<td class="name" nowrap="nowrap"><a href="AI_Cas.html">AI_Cas</a></td>
<td class="summary">
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> --
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> --
<strong>Provide Close Air Support to friendly ground troops.</strong></p>
<p><img src="..\Presentations\AI_CAS\Dia1.JPG" alt="Banner Image"/></p>
@ -121,7 +122,7 @@ and automatically engage any airborne enemies that are within a certain range or
<tr>
<td class="name" nowrap="nowrap"><a href="AI_Patrol.html">AI_Patrol</a></td>
<td class="summary">
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> --
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Air</strong> --
<strong>Air Patrolling or Staging.</strong></p>
<p><img src="..\Presentations\AI_PATROL\Dia1.JPG" alt="Banner Image"/></p>
@ -166,7 +167,7 @@ and automatically engage any airborne enemies that are within a certain range or
<tr>
<td class="name" nowrap="nowrap"><a href="Cargo.html">Cargo</a></td>
<td class="summary">
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Ground</strong> -- <br/>
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>Ground</strong> -- <br/>
<strong>Management of logical cargo objects, that can be transported from and to transportation carriers.</strong></p>
<p><img src="..\Presentations\AI_CARGO\CARGO.JPG" alt="Banner Image"/></p>
@ -317,6 +318,12 @@ following a given priority.</p>
<td class="name" nowrap="nowrap"><a href="Route.html">Route</a></td>
<td class="summary">
<p>(SP) (MP) (FSM) Route AI or players through waypoints or to zones.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="Scenery.html">Scenery</a></td>
<td class="summary">
<p>This module contains the SCENERY class.</p>
</td>
</tr>
<tr>
@ -334,7 +341,17 @@ following a given priority.</p>
<tr>
<td class="name" nowrap="nowrap"><a href="Scoring.html">Scoring</a></td>
<td class="summary">
<p>Scoring system for MOOSE.</p>
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / Core:<strong>Yes</strong> -- <strong>Administer the scoring of player achievements,
and create a CSV file logging the scoring events for use at team or squadron websites.</strong></p>
<p><img src="..\Presentations\SCORING\Dia1.JPG" alt="Banner Image"/></p>
<hr/>
<h1>1) <a href="Scoring.html##(SCORING)">Scoring#SCORING</a> class, extends <a href="Base.html##(BASE)">Base#BASE</a></h1>
<p>The <a href="##(SCORING)">#SCORING</a> class administers the scoring of player achievements,
and creates a CSV file logging the scoring events and results for use at team or squadron websites.</p>
</td>
</tr>
<tr>
@ -358,7 +375,7 @@ following a given priority.</p>
<tr>
<td class="name" nowrap="nowrap"><a href="Spawn.html">Spawn</a></td>
<td class="summary">
<p>Single-Player:<strong>Yes</strong> / Mulit-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>All</strong> -- <br/>
<p>Single-Player:<strong>Yes</strong> / Multi-Player:<strong>Yes</strong> / AI:<strong>Yes</strong> / Human:<strong>No</strong> / Types:<strong>All</strong> -- <br/>
<strong>Spawn groups of units dynamically in your missions.</strong></p>
<p><img src="..\Presentations\SPAWN\SPAWN.JPG" alt="Banner Image"/></p>

View File

@ -50,6 +50,7 @@
<li><a href="Process_JTAC.html">Process_JTAC</a></li>
<li><a href="Process_Pickup.html">Process_Pickup</a></li>
<li><a href="Route.html">Route</a></li>
<li><a href="Scenery.html">Scenery</a></li>
<li><a href="ScheduleDispatcher.html">ScheduleDispatcher</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

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