From 75b2a668dd1f3349dacb35ff7e8a103933586766 Mon Sep 17 00:00:00 2001
From: svenvandevelde
Date: Mon, 16 May 2016 09:06:02 +0200
Subject: [PATCH 1/4] Updated documentation for missile trainer
---
Documentation/Base.html | 16 +-
Documentation/CARGO.html | 18 +-
Documentation/CLEANUP.html | 16 +-
Documentation/Client.html | 156 ++--
Documentation/DEPLOYTASK.html | 16 +-
Documentation/DESTROYBASETASK.html | 16 +-
Documentation/DESTROYGROUPSTASK.html | 16 +-
Documentation/DESTROYRADARSTASK.html | 16 +-
Documentation/DESTROYUNITTYPESTASK.html | 16 +-
Documentation/Database.html | 405 +++++++--
Documentation/Escort.html | 16 +-
Documentation/Event.html | 94 ++-
Documentation/GOHOMETASK.html | 16 +-
Documentation/Group.html | 129 ++-
Documentation/MISSION.html | 16 +-
Documentation/MOVEMENT.html | 16 +-
Documentation/Menu.html | 290 ++++++-
Documentation/Message.html | 16 +-
Documentation/MissileTrainer.html | 788 ++++++++++++++++++
Documentation/NOTASK.html | 16 +-
Documentation/PICKUPTASK.html | 16 +-
Documentation/ROUTETASK.html | 16 +-
Documentation/STAGE.html | 16 +-
Documentation/Scheduler.html | 237 ++++++
Documentation/Scoring.html | 16 +-
Documentation/Sead.html | 16 +-
Documentation/Spawn.html | 284 +++----
Documentation/TASK.html | 16 +-
Documentation/Unit.html | 35 +-
Documentation/Zone.html | 43 +-
Documentation/index.html | 112 +--
Documentation/routines.html | 16 +-
Moose/Client.lua | 12 +-
.../Moose_Test_MISSILETRAINER.lua | 19 +-
34 files changed, 2203 insertions(+), 739 deletions(-)
create mode 100644 Documentation/MissileTrainer.html
create mode 100644 Documentation/Scheduler.html
diff --git a/Documentation/Base.html b/Documentation/Base.html
index 53a908d0f..c691d7457 100644
--- a/Documentation/Base.html
+++ b/Documentation/Base.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/CARGO.html b/Documentation/CARGO.html
index 30d778ea2..dbce3e8d9 100644
--- a/Documentation/CARGO.html
+++ b/Documentation/CARGO.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -213,6 +201,8 @@
+
+
diff --git a/Documentation/CLEANUP.html b/Documentation/CLEANUP.html
index 4d2aa04a7..6946d1aa9 100644
--- a/Documentation/CLEANUP.html
+++ b/Documentation/CLEANUP.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/Client.html b/Documentation/Client.html
index 6ea751dae..f19da4d0b 100644
--- a/Documentation/Client.html
+++ b/Documentation/Client.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -68,8 +56,20 @@
The CLIENT models client units in multi player missions.
-Clients are those groups defined within the Mission Editor that have the skillset defined as "Client" or "Player".
-Note that clients are NOT the same as groups, they are NOT necessarily alive.
+
+
+Clients are those Units defined within the Mission Editor that have the skillset defined as Client or Player .
+Note that clients are NOT the same as Units, they are NOT necessarily alive.
+
+Clients are being used by the MISSION class to follow players and register their successes.
+
+CLIENT construction methods:
+Create a new CLIENT object with the CLIENT.New method:
+
+
+ CLIENT.New : Creates a new CLIENT object taking the name of the DCSUnit that is a client as defined within the mission editor.
+
+
Global(s)
@@ -77,12 +77,6 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive.
CLIENT
-
-
-
- ClientGroupUnit
-
-
@@ -158,12 +152,6 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive.
CLIENT.ClientGroupUnit
-
-
-
- CLIENT.ClientID
-
-
@@ -224,12 +212,36 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive.
CLIENT:GetDCSGroup()
Return the DCSGroup of a Client.
+
+
+
+ CLIENT:GetID()
+
+
+
+
+
+ CLIENT:GetName()
+
+
CLIENT:GetPointVec2()
Returns the position of the CLIENT in DCSTypes#Vec2 format..
+
+
+
+ CLIENT:GetPositionVec3()
+
+
+
+
+
+ CLIENT:GetTypeName()
+
+
@@ -289,7 +301,7 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive.
CLIENT:New(ClientName, ClientBriefing)
-Use this method to register new Clients within the MOF.
+Use this method to register new Clients within a mission.
@@ -355,20 +367,6 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive.
-
-
-
-
-
-
-
-ClientGroupUnit
-
-
-
-
-
-
@@ -538,6 +536,7 @@ Function.
+
CLIENT.ClientGroupID
@@ -565,7 +564,6 @@ Function.
-
CLIENT.ClientGroupUnit
@@ -574,20 +572,6 @@ Function.
-
-
-
-
-
-
-
-CLIENT.ClientID
-
-
-
-
-
-
@@ -759,6 +743,32 @@ Function.
DCSGroup#Group :
+
+
+
+
+
+
+CLIENT:GetID()
+
+
+
+
+
+
+
+
+
+
+
+
+CLIENT:GetName()
+
+
+
+
+
+
@@ -777,6 +787,32 @@ Function.
DCSTypes#Vec2 :
+
+
+
+
+
+
+CLIENT:GetPositionVec3()
+
+
+
+
+
+
+
+
+
+
+
+
+CLIENT:GetTypeName()
+
+
+
+
+
+
@@ -958,14 +994,14 @@ is the interval in seconds between the display of the CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/DESTROYBASETASK.html b/Documentation/DESTROYBASETASK.html
index e239668bd..32d486ea6 100644
--- a/Documentation/DESTROYBASETASK.html
+++ b/Documentation/DESTROYBASETASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/DESTROYGROUPSTASK.html b/Documentation/DESTROYGROUPSTASK.html
index 0307805d5..01411a4f9 100644
--- a/Documentation/DESTROYGROUPSTASK.html
+++ b/Documentation/DESTROYGROUPSTASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/DESTROYRADARSTASK.html b/Documentation/DESTROYRADARSTASK.html
index 26d37714a..6cb878888 100644
--- a/Documentation/DESTROYRADARSTASK.html
+++ b/Documentation/DESTROYRADARSTASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/DESTROYUNITTYPESTASK.html b/Documentation/DESTROYUNITTYPESTASK.html
index 48e9b5d50..9890c4507 100644
--- a/Documentation/DESTROYUNITTYPESTASK.html
+++ b/Documentation/DESTROYUNITTYPESTASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/Database.html b/Documentation/Database.html
index 33e0e3f55..8192f0de6 100644
--- a/Documentation/Database.html
+++ b/Documentation/Database.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -151,25 +139,19 @@ The following iterator methods are currently available within the DATABASE:
- DATABASE.AlivePlayers
-
-
-
-
-
DATABASE.ClassName
- DATABASE.ClientsByID
+ DATABASE.Clients
- DATABASE.ClientsByName
+ DATABASE.ClientsAlive
@@ -253,9 +235,27 @@ The following iterator methods are currently available within the DATABASE:
- DATABASE:ForEachAliveUnit(IteratorFunction, ...)
+ DATABASE:ForEach(IteratorFunction, arg, Set)
+
+Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters.
+
+
+
+ DATABASE:ForEachClient(IteratorFunction, ...)
+
+Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters.
+
+
+
+ DATABASE:ForEachDCSUnitAlive(IteratorFunction, ...)
Interate the DATABASE and call an interator function for each alive unit, providing the Unit and optional parameters.
+
+
+
+ DATABASE:ForEachPlayer(IteratorFunction, ...)
+
+Interate the DATABASE and call an interator function for each alive player, providing the Unit of the player and optional parameters.
@@ -268,6 +268,12 @@ The following iterator methods are currently available within the DATABASE:
DATABASE.Groups
+
+
+
+ DATABASE.GroupsAlive
+
+
@@ -286,6 +292,12 @@ The following iterator methods are currently available within the DATABASE:
DATABASE.Players
+
+
+
+ DATABASE.PlayersAlive
+
+
@@ -310,6 +322,12 @@ The following iterator methods are currently available within the DATABASE:
DATABASE.Statics
+
+
+
+ DATABASE.Templates
+
+
@@ -322,6 +340,12 @@ The following iterator methods are currently available within the DATABASE:
DATABASE.Units
+
+
+
+ DATABASE.UnitsAlive
+
+
@@ -334,6 +358,24 @@ The following iterator methods are currently available within the DATABASE:
DATABASE:_EventOnDeadOrCrash(Event)
Handles the OnDead or OnCrash event for alive units set.
+
+
+
+ DATABASE:_EventOnPlayerEnterUnit(Event)
+
+Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied).
+
+
+
+ DATABASE:_EventOnPlayerLeaveUnit(Event)
+
+Handles the OnPlayerLeaveUnit event to clean the active players table.
+
+
+
+ DATABASE:_IsAliveDCSGroup(DCSGroup)
+
+
@@ -346,12 +388,24 @@ The following iterator methods are currently available within the DATABASE:
DATABASE:_IsIncludeDCSUnit(DCSUnit)
+
+
+
+ DATABASE:_RegisterDatabase()
+
+Private method that registers all datapoints within in the mission.
DATABASE:_RegisterGroup(GroupTemplate)
-Registers new Group Templates within the DATABASE Object.
+Private method that registers new Group Templates within the DATABASE Object.
+
+
+
+ DATABASE:_RegisterPlayers()
+
+Private method that registers all alive players in the mission.
@@ -381,20 +435,6 @@ The following iterator methods are currently available within the DATABASE:
-
-
-DATABASE.AlivePlayers
-
-
-
-
-
-
-
-
-
-
-
#string
DATABASE.ClassName
@@ -410,8 +450,8 @@ The following iterator methods are currently available within the DATABASE:
-
-DATABASE.ClientsByID
+
+DATABASE.Clients
@@ -424,8 +464,8 @@ The following iterator methods are currently available within the DATABASE:
-
-DATABASE.ClientsByName
+
+DATABASE.ClientsAlive
@@ -719,8 +759,77 @@ self
-
-DATABASE:ForEachAliveUnit(IteratorFunction, ...)
+
+DATABASE:ForEach(IteratorFunction, arg, Set)
+
+
+
+
+Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters.
+
+ Parameters
+
+ Return value
+
+#DATABASE :
+self
+
+
+
+
+
+
+
+DATABASE:ForEachClient(IteratorFunction, ...)
+
+
+
+
+Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters.
+
+ Parameters
+
+ Return value
+
+#DATABASE :
+self
+
+
+
+
+
+
+
+DATABASE:ForEachDCSUnitAlive(IteratorFunction, ...)
@@ -751,6 +860,38 @@ self
+
+DATABASE:ForEachPlayer(IteratorFunction, ...)
+
+
+
+
+Interate the DATABASE and call an interator function for each alive player, providing the Unit of the player and optional parameters.
+
+ Parameters
+
+ Return value
+
+#DATABASE :
+self
+
+
+
+
+
+
DATABASE:GetStatusGroup(GroupName)
@@ -781,6 +922,20 @@ self
+
+
+
+
+
+
+
+DATABASE.GroupsAlive
+
+
+
+
+
+
@@ -831,6 +986,20 @@ DBObject = DATABASE:New()
+
+
+
+
+
+
+
+DATABASE.PlayersAlive
+
+
+
+
+
+
@@ -892,10 +1061,15 @@ This method is used by the SPAWN class.
- SpawnTemplate :
+#table SpawnTemplate :
+ Return value
+
+#DATABASE :
+self
+
@@ -910,6 +1084,20 @@ This method is used by the SPAWN class.
+
+
+
+
+
+
+
+DATABASE.Templates
+
+
+
+
+
+
@@ -945,6 +1133,20 @@ self
+
+
+
+
+
+
+
+DATABASE.UnitsAlive
+
+
+
+
+
+
@@ -992,6 +1194,74 @@ self
+
+DATABASE:_EventOnPlayerEnterUnit(Event)
+
+
+
+
+Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied).
+
+ Parameter
+
+
+
+
+
+
+
+DATABASE:_EventOnPlayerLeaveUnit(Event)
+
+
+
+
+Handles the OnPlayerLeaveUnit event to clean the active players table.
+
+ Parameter
+
+
+
+
+
+
+
+DATABASE:_IsAliveDCSGroup(DCSGroup)
+
+
+
+
+
+
+ Parameter
+
+ Return value
+
+#DATABASE :
+self
+
+
+
+
+
+
DATABASE:_IsAliveDCSUnit(DCSUnit)
@@ -1044,22 +1314,63 @@ self
+
+DATABASE:_RegisterDatabase()
+
+
+
+
+Private method that registers all datapoints within in the mission.
+
+ Return value
+
+#DATABASE :
+self
+
+
+
+
+
+
DATABASE:_RegisterGroup(GroupTemplate)
-Registers new Group Templates within the DATABASE Object.
+Private method that registers new Group Templates within the DATABASE Object.
Parameter
- GroupTemplate :
+#table GroupTemplate :
+ Return value
+
+#DATABASE :
+self
+
+
+
+
+
+
+
+DATABASE:_RegisterPlayers()
+
+
+
+
+Private method that registers all alive players in the mission.
+
+ Return value
+
+#DATABASE :
+self
+
diff --git a/Documentation/Escort.html b/Documentation/Escort.html
index d38a27767..b1fe8f549 100644
--- a/Documentation/Escort.html
+++ b/Documentation/Escort.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/Event.html b/Documentation/Event.html
index eaa58b863..b05cb6788 100644
--- a/Documentation/Event.html
+++ b/Documentation/Event.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -232,6 +220,18 @@
EVENT:OnPilotDeadForUnit(EventDCSUnitName, EventFunction, EventSelf)
Set a new listener for an SEVENT PILOT_DEAD event.
+
+
+
+ EVENT:OnPlayerEnterUnit(EventFunction, EventSelf)
+
+Set a new listener for an SEVENT PLAYERENTER UNIT event.
+
+
+
+ EVENT:OnPlayerLeaveUnit(EventFunction, EventSelf)
+
+Set a new listener for an SEVENT PLAYERLEAVE UNIT event.
@@ -1259,6 +1259,72 @@ The self instance of the class for which the event is.
#EVENT :
+
+
+
+
+
+
+EVENT:OnPlayerEnterUnit(EventFunction, EventSelf)
+
+
+
+
+Set a new listener for an SEVENT PLAYERENTER UNIT event.
+
+ Parameters
+
+ Return value
+
+#EVENT :
+
+
+
+
+
+
+
+
+EVENT:OnPlayerLeaveUnit(EventFunction, EventSelf)
+
+
+
+
+Set a new listener for an SEVENT PLAYERLEAVE UNIT event.
+
+ Parameters
+
+ Return value
+
+#EVENT :
+
+
diff --git a/Documentation/GOHOMETASK.html b/Documentation/GOHOMETASK.html
index b1ebecdcd..4b63dc32e 100644
--- a/Documentation/GOHOMETASK.html
+++ b/Documentation/GOHOMETASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/Group.html b/Documentation/Group.html
index 3298e9321..be3012b46 100644
--- a/Documentation/Group.html
+++ b/Documentation/Group.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -113,6 +101,12 @@
GROUP:CommandDoScript(DoScript)
Do Script command
+
+
+
+ GROUP:CommandSwitchWayPoint(FromWayPoint, ToWayPoint, Index)
+
+Perform a switch waypoint command
@@ -209,7 +203,7 @@ Note that this destroy method also raises a destroy event at run-time.
GROUP:GetName()
-Gets the name of the GROUP.
+Returns the name of the Group.
@@ -462,12 +456,24 @@ Note that this destroy method also raises a destroy event at run-time.
GROUP:Route(GoPoints)
Make the group to follow a given route.
+
+
+
+ GROUP:SetCommand(DCSCommand)
+
+Executes a command action
GROUP:SetTask(DCSTask, WaitTime)
Clearing the Task Queue and Setting the Task on the queue from the group.
+
+
+
+ GROUP:TaskAttackGroup(AttackGroup)
+
+Attack a Group.
@@ -751,6 +757,42 @@ All units on the ground result.
#DCSCommand :
+
+
+
+
+
+
+GROUP:CommandSwitchWayPoint(FromWayPoint, ToWayPoint, Index)
+
+
+
+
+Perform a switch waypoint command
+
+ Parameters
+
+
+
+#number FromWayPoint :
+
+
+
+
+#number ToWayPoint :
+
+
+
+
+ Index :
+
+
+
+ Return value
+
+DCSTask#Task :
+
+
@@ -1075,12 +1117,12 @@ Minimum height found.
-Gets the name of the GROUP.
+Returns the name of the Group.
Return value
#string:
-The name of the GROUP.
+GroupName
@@ -1975,6 +2017,32 @@ self
+
+GROUP:SetCommand(DCSCommand)
+
+
+
+
+Executes a command action
+
+ Parameter
+
+ Return value
+
+#GROUP :
+self
+
+
+
+
+
+
GROUP:SetTask(DCSTask, WaitTime)
@@ -2006,6 +2074,33 @@ self
+
+GROUP:TaskAttackGroup(AttackGroup)
+
+
+
+
+Attack a Group.
+
+ Parameter
+
+ Return value
+
+DCSTask#Task :
+The DCS task structure.
+
+
+
+
+
+
GROUP:TaskAttackUnit(The, AttackUnit)
diff --git a/Documentation/MISSION.html b/Documentation/MISSION.html
index 81752775f..9de091e4d 100644
--- a/Documentation/MISSION.html
+++ b/Documentation/MISSION.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/MOVEMENT.html b/Documentation/MOVEMENT.html
index 1fd0bfce1..98df22b0c 100644
--- a/Documentation/MOVEMENT.html
+++ b/Documentation/MOVEMENT.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/Menu.html b/Documentation/Menu.html
index a82742975..58ccee4f5 100644
--- a/Documentation/Menu.html
+++ b/Documentation/Menu.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -91,6 +79,18 @@
MENU_CLIENT_COMMAND
+
+
+
+ MENU_COALITION
+
+
+
+
+
+ MENU_COALITION_COMMAND
+
+
@@ -208,6 +208,56 @@
MENU_CLIENT_COMMAND:Remove()
+
+
+
+
+
+
+
+
+
@@ -283,6 +333,34 @@
+
+
+
+
+
+ #MENU_COALITION
+
+
+
+
+
+
+
+
+
+
+
+ #MENU_COALITION_COMMAND
+
+MENU_COALITION_COMMAND
+
+
+
+
+
+
@@ -645,6 +723,190 @@ self
+
+
+
+
+
+The MENU_COALITION class
+
+ Field(s)
+
+
+
+ #string
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Creates a new coalition menu item
+
+ Parameters
+
+
+
+DCSCoalition#coalition.side MenuCoalition :
+The coalition owning the menu.
+
+
+
+
+#string MenuText :
+The text for the menu.
+
+
+
+
+#table ParentMenu :
+The parent menu.
+
+
+
+ Return value
+
+#MENU_COALITION :
+self
+
+
+
+
+
+
+
+
+
+
+Removes the sub menus recursively of this MENU_COALITION.
+
+ Return value
+
+#MENU_COALITION :
+self
+
+
+
+
+
+
+
+
+
+
+Removes the sub menus recursively of this MENU_COALITION.
+
+ Return value
+
+#MENU_COALITION :
+self
+
+
+
+
+
+
+The MENUCOALITION COMMAND class
+
+ Field(s)
+
+
+
+ #string
+
+MENU_COALITION_COMMAND.ClassName
+
+
+
+
+
+
+
+
+
+
+
+
+MENU_COALITION_COMMAND:New(MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument)
+
+
+
+
+Creates a new radio command item for a group
+
+ Parameters
+
+
+
+DCSCoalition#coalition.side MenuCoalition :
+The coalition owning the menu.
+
+
+
+
+ MenuText :
+The text for the menu.
+
+
+
+
+ ParentMenu :
+The parent menu.
+
+
+
+
+ CommandMenuFunction :
+A function that is called when the menu key is pressed.
+
+
+
+
+ CommandMenuArgument :
+An argument for the function.
+
+
+
+ Return value
+
+#MENUCOALITION COMMAND :
+self
+
+
+
+
+
+
+
+MENU_COALITION_COMMAND:Remove()
+
+
+
+
+Removes a radio command item for a coalition
+
+ Return value
+
+#MENUCOALITION COMMAND :
+self
+
diff --git a/Documentation/Message.html b/Documentation/Message.html
index 66c9d6c91..dd4087bf7 100644
--- a/Documentation/Message.html
+++ b/Documentation/Message.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/MissileTrainer.html b/Documentation/MissileTrainer.html
new file mode 100644
index 000000000..5488cac9b
--- /dev/null
+++ b/Documentation/MissileTrainer.html
@@ -0,0 +1,788 @@
+
+
+
+
+
+
+
+
+
+
+
+
Module MissileTrainer
+
+
Provides missile training functions.
+
+
+
+
+
The #MISSILETRAINER class uses the DCS world messaging system to be alerted of any missiles fired, and when a missile would hit your aircraft,
+the class will destroy the missile within a certain range, to avoid damage to your aircraft.
+It suports the following functionality:
+
+
+ Track the missiles fired at you and other players, providing bearing and range information of the missiles towards the airplanes.
+ Provide alerts of missile launches, including detailed information of the units launching, including bearing, range …
+ Provide alerts when a missile would have killed your aircraft.
+ Provide alerts when the missile self destructs.
+ Enable / Disable and Configure the Missile Trainer using the various menu options.
+
+
+
MISSILETRAINER construction methods:
+
Create a new MISSILETRAINER object with the MISSILETRAINER.New method:
+
+
+ MISSILETRAINER.New : Creates a new MISSILETRAINER object taking the maximum distance to your aircraft to evaluate when a missile needs to be destroyed.
+
+
+
MISSILETRAINER will collect each unit declared in the mission with a skill level "Client" and "Player", and will monitor the missiles shot at those.
+
+
MISSILETRAINER initialization methods:
+
A MISSILETRAINER object will behave differently based on the usage of initialization methods:
+
+
+
+
+
Global(s)
+
+
+
+
+
Global(s)
+
+
+
+ #MISSILETRAINER
+
+MISSILETRAINER
+
+
+
+
+
+
+
+
+
+
+
+
+
The MISSILETRAINER class
+
+
Field(s)
+
+
+
+
+
+MISSILETRAINER.AlertsHitsOnOff
+
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER.AlertsLaunchesOnOff
+
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER.AlertsToAll
+
+
+
+
+
+
+
+
+
+
+
+ #string
+
+MISSILETRAINER.ClassName
+
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER.DetailsBearingOnOff
+
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER.DetailsRangeOnOff
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER:InitAlertsHitsOnOff(AlertsHitsOnOff)
+
+
+
+
+Sets by default the display of hit alerts ON or OFF.
+
+ Parameter
+
+ Return value
+
+#MISSILETRAINER :
+self
+
+
+
+
+
+
+
+MISSILETRAINER:InitAlertsLaunchesOnOff(AlertsLaunchesOnOff)
+
+
+
+
+Sets by default the display of launch alerts ON or OFF.
+
+ Parameter
+
+ Return value
+
+#MISSILETRAINER :
+self
+
+
+
+
+
+
+
+MISSILETRAINER:InitAlertsToAll(AlertsToAll)
+
+
+
+
+Sets by default the display of alerts to be shown to all players or only to you.
+
+ Parameter
+
+ Return value
+
+#MISSILETRAINER :
+self
+
+
+
+
+
+
+
+MISSILETRAINER:InitBearingOnOff(DetailsBearingOnOff)
+
+
+
+
+Sets by default the display of bearing information of missiles ON of OFF.
+
+ Parameter
+
+ Return value
+
+#MISSILETRAINER :
+self
+
+
+
+
+
+
+
+MISSILETRAINER:InitMessagesOnOff(MessagesOnOff)
+
+
+
+
+Sets by default the display of any message to be ON or OFF.
+
+ Parameter
+
+ Return value
+
+#MISSILETRAINER :
+self
+
+
+
+
+
+
+
+MISSILETRAINER:InitRangeOnOff(DetailsRangeOnOff)
+
+
+
+
+Sets by default the display of range information of missiles ON of OFF.
+
+ Parameter
+
+ Return value
+
+#MISSILETRAINER :
+self
+
+
+
+
+
+
+
+MISSILETRAINER:InitTrackingOnOff(TrackingOnOff)
+
+
+
+
+Sets by default the display of missile tracking report to be ON or OFF.
+
+ Parameter
+
+ Return value
+
+#MISSILETRAINER :
+self
+
+
+
+
+
+
+
+MISSILETRAINER:InitTrackingToAll(TrackingToAll)
+
+
+
+
+Sets by default the missile tracking report for all players or only for those missiles targetted to you.
+
+ Parameter
+
+ Return value
+
+#MISSILETRAINER :
+self
+
+
+
+
+
+
+
+
+MISSILETRAINER.MessageLastTime
+
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER.MessagesOnOff
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER.New(#, Distance, self)
+
+
+
+
+Creates the main object which is handling missile tracking.
+
+
+When a missile is fired a SCHEDULER is set off that follows the missile. When near a certain a client player, the missile will be destroyed.
+
+ Parameters
+
+ Return value
+
+#MISSILETRAINER :
+
+
+
+
+
+
+
+
+
+MISSILETRAINER.TrackingOnOff
+
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER.TrackingToAll
+
+
+
+
+
+
+
+
+
+
+
+
+MISSILETRAINER:_AddBearing(Client, TrainerWeapon)
+
+
+
+
+
+
+ Parameters
+
+
+
+ Client :
+
+
+
+
+ TrainerWeapon :
+
+
+
+
+
+
+
+
+
+MISSILETRAINER:_AddRange(Client, TrainerWeapon)
+
+
+
+
+
+
+ Parameters
+
+
+
+ Client :
+
+
+
+
+ TrainerWeapon :
+
+
+
+
+
+
+
+
+
+MISSILETRAINER:_EventShot(Event)
+
+
+
+
+Detects if an SA site was shot with an anti radiation missile.
+
+
+In this case, take evasive actions based on the skill level set within the ME.
+
+ Parameter
+
+
+
+
+
+
+
+
+
+
+
+
+ Parameter
+
+
+
+ MenuParameters :
+
+
+
+
+
+
+
+
+
+MISSILETRAINER:_TrackMissiles()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Documentation/NOTASK.html b/Documentation/NOTASK.html
index 4fa604429..d49ebedf5 100644
--- a/Documentation/NOTASK.html
+++ b/Documentation/NOTASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
-
DCSAirbase
-
DCSCoalitionObject
-
DCSCommand
-
DCSController
-
DCSGroup
-
DCSObject
-
DCSTask
-
DCSTypes
-
DCSUnit
-
DCSWorld
-
DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+
MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+
Scheduler
Scoring
Sead
Spawn
-
StaticObject
TASK
Unit
Zone
-
env
-
land
routines
diff --git a/Documentation/PICKUPTASK.html b/Documentation/PICKUPTASK.html
index e9fcbf698..d888999c0 100644
--- a/Documentation/PICKUPTASK.html
+++ b/Documentation/PICKUPTASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/ROUTETASK.html b/Documentation/ROUTETASK.html
index 87dc106be..c95432e3e 100644
--- a/Documentation/ROUTETASK.html
+++ b/Documentation/ROUTETASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/STAGE.html b/Documentation/STAGE.html
index bc38980e4..fd2ceedc0 100644
--- a/Documentation/STAGE.html
+++ b/Documentation/STAGE.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/Scheduler.html b/Documentation/Scheduler.html
new file mode 100644
index 000000000..10a410720
--- /dev/null
+++ b/Documentation/Scheduler.html
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
Module Scheduler
+
+
Models time events calling event handing functions.
+
+
Global(s)
+
+
+
+
+
Global(s)
+
+
+
+ #SCHEDULER
+
+SCHEDULER
+
+
+
+
+
+
+
+
+
+
+
+
+
The SCHEDULER class
+
+
Field(s)
+
+
+
+ #string
+
+SCHEDULER.ClassName
+
+
+
+
+
+
+
+
+
+
+
+
+SCHEDULER:New(TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds)
+
+
+
+
+SCHEDULER constructor.
+
+ Parameters
+
+
+
+#table TimeEventObject :
+
+
+
+
+#function TimeEventFunction :
+
+
+
+
+#table TimeEventFunctionArguments :
+
+
+
+
+#number StartSeconds :
+
+
+
+
+#number RepeatSecondsInterval :
+
+
+
+
+#number RandomizationFactor :
+
+
+
+
+#number StopSeconds :
+
+
+
+ Return value
+
+#SCHEDULER :
+
+
+
+
+
+
+
+
+SCHEDULER:Scheduler()
+
+
+
+
+
+
+
+
+
+
+
+
+SCHEDULER:Start()
+
+
+
+
+
+
+
+
+
+
+
+
+SCHEDULER:Stop()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Documentation/Scoring.html b/Documentation/Scoring.html
index b70b673fb..34d058056 100644
--- a/Documentation/Scoring.html
+++ b/Documentation/Scoring.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
-
DCSAirbase
-
DCSCoalitionObject
-
DCSCommand
-
DCSController
-
DCSGroup
-
DCSObject
-
DCSTask
-
DCSTypes
-
DCSUnit
-
DCSWorld
-
DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+
MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+
Scheduler
Scoring
Sead
Spawn
-
StaticObject
TASK
Unit
Zone
-
env
-
land
routines
diff --git a/Documentation/Sead.html b/Documentation/Sead.html
index 95c47ee9e..d4631a922 100644
--- a/Documentation/Sead.html
+++ b/Documentation/Sead.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/Spawn.html b/Documentation/Spawn.html
index cef33f470..2f5ba12ef 100644
--- a/Documentation/Spawn.html
+++ b/Documentation/Spawn.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -116,7 +104,7 @@ So in principle, the group list will contain all parameters and configurations a
SPAWN.RandomizeTemplate : Randomize the group templates so that when a new group is spawned, a random group template is selected from one of the templates defined.
SPAWN.Uncontrolled : Spawn plane groups uncontrolled.
SPAWN.Array : Make groups visible before they are actually activated, and order these groups like a batallion in an array.
- SPAWN.Repeat : Re-spawn groups when they land at the home base. Similar functions are SPAWN.RepeatOnLanding and SPAWN.RepeatOnEngineShutDown .
+ SPAWN.InitRepeat : Re-spawn groups when they land at the home base. Similar functions are SPAWN.InitRepeatOnLanding and SPAWN.InitRepeatOnEngineShutDown .
SPAWN spawning methods:
@@ -158,12 +146,6 @@ Check the SPAWN.CleanUp for further info.
- SPAWN.AliveFactor
-
-
-
-
-
SPAWN:Array(SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY)
Makes the groups visible before start (like a batallion).
@@ -182,7 +164,7 @@ Check the SPAWN.CleanUp for further info.
- SPAWN.CleanUpFunction
+ SPAWN.CleanUpScheduler
@@ -215,6 +197,24 @@ Check the SPAWN.CleanUp for further info.
SPAWN:GetSpawnIndexFromGroup(SpawnGroup)
Get the index from a given group.
+
+
+
+ SPAWN:InitRepeat()
+
+For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment.
+
+
+
+ SPAWN:InitRepeatOnEngineShutDown()
+
+Respawn after landing when its engines have shut down.
+
+
+
+ SPAWN:InitRepeatOnLanding()
+
+Respawn group after landing.
@@ -254,9 +254,9 @@ Check the SPAWN.CleanUp for further info.
- SPAWN:Repeat()
+ SPAWN.Repeat
-For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment.
+
@@ -293,12 +293,6 @@ Check the SPAWN.CleanUp for further info.
SPAWN.SpawnCleanUpTimeStamps
-
-
-
- SPAWN.SpawnCurrentTimer
-
-
@@ -329,24 +323,12 @@ Check the SPAWN.CleanUp for further info.
SPAWN:SpawnGroupName(SpawnIndex)
Will return the SpawnGroupName either with with a specific count number or without any count.
-
-
-
- SPAWN.SpawnHighTimer
-
-
SPAWN:SpawnInZone(Zone, ZoneRandomize, SpawnIndex)
Will spawn a Group within a given Zone#ZONE .
-
-
-
- SPAWN.SpawnLowTimer
-
-
@@ -389,18 +371,12 @@ Check the SPAWN.CleanUp for further info.
SPAWN.SpawnRandomizeTemplate
-
-
-
- SPAWN.SpawnRepeat
-
-
SPAWN:SpawnScheduleStart()
-Will start the spawning scheduler.
+Will re-start the spawning scheduler.
@@ -416,7 +392,7 @@ Check the SPAWN.CleanUp for further info.
- SPAWN.SpawnSetTimer
+ SPAWN.SpawnScheduler
@@ -550,13 +526,13 @@ Check the SPAWN.CleanUp for further info.
SPAWN:_RandomizeRoute(SpawnIndex)
-Internal function randomizing the routes.
+Private method randomizing the routes.
SPAWN:_RandomizeTemplate(SpawnIndex)
-
+Private method that randomizes the template of the group.
@@ -604,20 +580,6 @@ Check the SPAWN.CleanUp for further info.
- #number
-
-SPAWN.AliveFactor
-
-
-
-
-
-
-
-
-
-
-
SPAWN:Array(SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY)
@@ -721,14 +683,17 @@ self
-
-SPAWN.CleanUpFunction
+
+SPAWN.CleanUpScheduler
+
+self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval )
+
@@ -876,6 +841,71 @@ When no group is found, #nil is returned.
+
+SPAWN:InitRepeat()
+
+
+
+
+For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment.
+
+
+This function is used to re-spawn automatically (so no extra call is needed anymore) the same group after it has landed.
+This will enable a spawned group to be re-spawned after it lands, until it is destroyed...
+Note: When the group is respawned, it will re-spawn from the original airbase where it took off.
+So ensure that the routes for groups that respawn, always return to the original airbase, or players may get confused ...
+
+ Return value
+
+#SPAWN :
+self
+
+ Usage:
+ -- RU Su-34 - AI Ship Attack
+-- Re-SPAWN the Group(s) after each landing and Engine Shut-Down automatically.
+SpawnRU_SU34 = SPAWN:New( 'TF1 RU Su-34 Krymsk@AI - Attack Ships' ):Schedule( 2, 3, 1800, 0.4 ):SpawnUncontrolled():RandomizeRoute( 1, 1, 3000 ):RepeatOnEngineShutDown()
+
+
+
+
+
+
+
+SPAWN:InitRepeatOnEngineShutDown()
+
+
+
+
+Respawn after landing when its engines have shut down.
+
+ Return value
+
+#SPAWN :
+self
+
+
+
+
+
+
+
+SPAWN:InitRepeatOnLanding()
+
+
+
+
+Respawn group after landing.
+
+ Return value
+
+#SPAWN :
+self
+
+
+
+
+
+
SPAWN:Limit(SpawnMaxUnitsAlive, SpawnMaxGroups)
@@ -1123,29 +1153,14 @@ The group that was spawned. You can use this group for further actions.
+ #boolean
-SPAWN:Repeat()
+SPAWN.Repeat
-For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment.
-
-This function is used to re-spawn automatically (so no extra call is needed anymore) the same group after it has landed.
-This will enable a spawned group to be re-spawned after it lands, until it is destroyed...
-Note: When the group is respawned, it will re-spawn from the original airbase where it took off.
-So ensure that the routes for groups that respawn, always return to the original airbase, or players may get confused ...
-
- Return value
-
-#SPAWN :
-self
-
- Usage:
- -- RU Su-34 - AI Ship Attack
--- Re-SPAWN the Group(s) after each landing and Engine Shut-Down automatically.
-SpawnRU_SU34 = SPAWN:New( 'TF1 RU Su-34 Krymsk@AI - Attack Ships' ):Schedule( 2, 3, 1800, 0.4 ):SpawnUncontrolled():RandomizeRoute( 1, 1, 3000 ):RepeatOnEngineShutDown()
@@ -1238,23 +1253,6 @@ The group that was spawned. You can use this group for further actions.
-
-
-
-
-
- #number
-
-SPAWN.SpawnCurrentTimer
-
-
-
-
-
-
-
- The internal timer counter to trigger a scheduled spawning of SpawnTemplatePrefix.
-
@@ -1412,20 +1410,6 @@ Is the number of the Group that is to be spawned.
#string:
SpawnGroupName
-
-
-
-
-
- #number
-
-SPAWN.SpawnHighTimer
-
-
-
-
-
-
@@ -1479,20 +1463,6 @@ when nothing was spawned.
-
-
-
-
-
- #number
-
-SPAWN.SpawnLowTimer
-
-
-
-
-
-
@@ -1597,20 +1567,6 @@ when nothing was spawned.
-
-
-
-
-
- #boolean
-
-SPAWN.SpawnRepeat
-
-
-
-
-
-
@@ -1622,10 +1578,10 @@ when nothing was spawned.
-Will start the spawning scheduler.
+Will re-start the spawning scheduler.
-Note: This function is called automatically when SPAWN.Scheduled is called.
+Note: This function is only required to be called when the schedule was stopped.
@@ -1692,18 +1648,15 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
- #number
-
-SPAWN.SpawnSetTimer
+
+
+SPAWN.SpawnScheduler
-
- The internal timer value when a scheduled spawning of SpawnTemplatePrefix occurs.
-
@@ -2022,10 +1975,15 @@ Nothing found
+ Return value
+
+
+@SPAWN self
+
@@ -2184,15 +2142,20 @@ This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups.
- SpawnTemplatePrefix :
+#string SpawnTemplatePrefix :
- SpawnIndex :
+#number SpawnIndex :
+ Return value
+
+#SPAWN :
+self
+
@@ -2204,7 +2167,7 @@ This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups.
-Internal function randomizing the routes.
+Private method randomizing the routes.
Parameter
diff --git a/Documentation/TASK.html b/Documentation/TASK.html
index bc244726c..d18c673ff 100644
--- a/Documentation/TASK.html
+++ b/Documentation/TASK.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Documentation/Unit.html b/Documentation/Unit.html
index 985e6a1e7..ec8a45111 100644
--- a/Documentation/Unit.html
+++ b/Documentation/Unit.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -154,6 +142,12 @@
UNIT:GetName()
+
+
+
+ UNIT:GetPlayerName()
+
+
@@ -510,6 +504,19 @@
+
+
+
+
+
+
+UNIT:GetPlayerName()
+
+
+
+
+
+
diff --git a/Documentation/Zone.html b/Documentation/Zone.html
index 1b9c3cb4b..ca4efd886 100644
--- a/Documentation/Zone.html
+++ b/Documentation/Zone.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -88,6 +76,12 @@
ZONE:GetPointVec2()
+
+
+
+ ZONE:GetPointVec3(Height)
+
+
@@ -157,6 +151,27 @@
+
+
+
+
+
+
+ZONE:GetPointVec3(Height)
+
+
+
+
+
+
+ Parameter
+
diff --git a/Documentation/index.html b/Documentation/index.html
index 0464d0694..6900f9112 100644
--- a/Documentation/index.html
+++ b/Documentation/index.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
@@ -87,72 +75,6 @@
Client
The CLIENT models client units in multi player missions.
-
-
-
- DCSAirbase
-
-
-
-
-
- DCSCoalitionObject
-
-
-
-
-
- DCSCommand
-
-
-
-
-
- DCSController
-
-
-
-
-
- DCSGroup
-
-
-
-
-
- DCSObject
-
-
-
-
-
- DCSTask
-
-
-
-
-
- DCSTypes
-
-
-
-
-
- DCSUnit
-
-
-
-
-
- DCSWorld
-
-
-
-
-
- DCStimer
-
-
@@ -237,6 +159,12 @@
Message
Message System to display Messages for Clients and Coalitions or All.
+
+
+
+ MissileTrainer
+
+Provides missile training functions.
@@ -261,6 +189,12 @@
STAGE
Stages within a TASK within a MISSION .
+
+
+
+ Scheduler
+
+Models time events calling event handing functions.
@@ -279,12 +213,6 @@
Spawn
Dynamic spawning of groups (and units).
-
-
-
- StaticObject
-
-
@@ -303,18 +231,6 @@
Zone
ZONE Classes
-
-
-
- env
-
-
-
-
-
- land
-
-
diff --git a/Documentation/routines.html b/Documentation/routines.html
index d33caf801..806bd57e3 100644
--- a/Documentation/routines.html
+++ b/Documentation/routines.html
@@ -21,17 +21,6 @@
CARGO
CleanUp
Client
- DCSAirbase
- DCSCoalitionObject
- DCSCommand
- DCSController
- DCSGroup
- DCSObject
- DCSTask
- DCSTypes
- DCSUnit
- DCSWorld
- DCStimer
DEPLOYTASK
DESTROYBASETASK
DESTROYGROUPSTASK
@@ -46,19 +35,18 @@
MOVEMENT
Menu
Message
+ MissileTrainer
NOTASK
PICKUPTASK
ROUTETASK
STAGE
+ Scheduler
Scoring
Sead
Spawn
- StaticObject
TASK
Unit
Zone
- env
- land
routines
diff --git a/Moose/Client.lua b/Moose/Client.lua
index de9883743..f608e8673 100644
--- a/Moose/Client.lua
+++ b/Moose/Client.lua
@@ -2,10 +2,10 @@
--
-- @{#CLIENT} class
-- ================
--- Clients are those units defined within the Mission Editor that have the skillset defined as "Client" or "Player".
--- Note that clients are NOT the same as units, they are NOT necessarily alive.
+-- Clients are those **Units** defined within the Mission Editor that have the skillset defined as __Client__ or __Player__.
+-- Note that clients are NOT the same as Units, they are NOT necessarily alive.
--
--- Clients are being used in a mission and tasks to follow players and their successes.
+-- Clients are being used by the @{MISSION} class to follow players and register their successes.
--
-- CLIENT construction methods:
-- ============================
@@ -315,7 +315,7 @@ end
function CLIENT:GetPointVec2()
self:F()
- ClientGroupUnit = self:GetClientGroupDCSUnit()
+ local ClientGroupUnit = self:GetClientGroupDCSUnit()
if ClientGroupUnit then
if ClientGroupUnit:isExist() then
@@ -376,7 +376,7 @@ end
function CLIENT:ClientPosition()
self:F()
- ClientGroupUnit = self:GetClientGroupDCSUnit()
+ local ClientGroupUnit = self:GetClientGroupDCSUnit()
if ClientGroupUnit then
if ClientGroupUnit:isExist() then
@@ -393,7 +393,7 @@ end
function CLIENT:GetAltitude()
self:F()
- ClientGroupUnit = self:GetClientGroupDCSUnit()
+ local ClientGroupUnit = self:GetClientGroupDCSUnit()
if ClientGroupUnit then
if ClientGroupUnit:isExist() then
diff --git a/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua b/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua
index 2aaabf1ff..618442f13 100644
--- a/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua
+++ b/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua
@@ -1,6 +1,19 @@
-
-Include.File("Moose")
+-- Only use Include.File when developing new MOOSE classes.
+-- When using Moose.lua in the DO SCIPTS FILE initialization box,
+-- these Include.File statements are not needed, because all classes within Moose will be loaded.
Include.File("MissileTrainer")
-local Trainer = MISSILETRAINER:New( 200 )
\ No newline at end of file
+-- This is an example of a global
+local Trainer = MISSILETRAINER
+ :New( 200 )
+ :InitMessagesOnOff(true)
+ :InitAlertsToAll(false) -- I'll correct it below ...
+ :InitAlertsHitsOnOff(true)
+ :InitAlertsLaunchesOnOff(true)
+ :InitBearingOnOff(true)
+ :InitRangeOnOff(true)
+ :InitTrackingOnOff(true)
+ :InitTrackingToAll(true)
+
+Trainer:InitAlertsHitsOnOff(true) -- Now alerts are also on
From f20ba8985bd0fc37e1cb8b0f26b749a3764384c7 Mon Sep 17 00:00:00 2001
From: svenvandevelde
Date: Tue, 17 May 2016 05:14:35 +0200
Subject: [PATCH 2/4] Updates
---
.../Moose_Test_MISSILETRAINER.lua | 2 +-
.../Moose_Test_MISSILETRAINER.miz | Bin 224315 -> 225232 bytes
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua b/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua
index 618442f13..4fadffe7d 100644
--- a/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua
+++ b/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua
@@ -16,4 +16,4 @@ local Trainer = MISSILETRAINER
:InitTrackingOnOff(true)
:InitTrackingToAll(true)
-Trainer:InitAlertsHitsOnOff(true) -- Now alerts are also on
+Trainer:InitAlertsToAll(true) -- Now alerts are also on
diff --git a/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.miz b/Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.miz
index 82f6f96b3eb075e75e6d2b80e86a84b69a3ce82d..d7f002da717e75800d2075b523d9127f3e77acdd 100644
GIT binary patch
delta 111373
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