From dc662849d47f3acb5e5aa2d383e9574d014966eb Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 27 May 2016 09:45:58 +0200 Subject: [PATCH 01/12] Sets first version --- Moose Development/Moose/Set.lua | 472 ++++--------------------- Moose Development/Moose/UnitSet.lua | 516 ++++++++++++++++++++++++++++ 2 files changed, 588 insertions(+), 400 deletions(-) create mode 100644 Moose Development/Moose/UnitSet.lua diff --git a/Moose Development/Moose/Set.lua b/Moose Development/Moose/Set.lua index 063ec2fe0..0ac45ae1a 100644 --- a/Moose Development/Moose/Set.lua +++ b/Moose Development/Moose/Set.lua @@ -141,7 +141,7 @@ local _DATABASECategory = -- @usage -- -- Define a new SET Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. -- DBObject = SET:New() -function SET:New() +function SET:New( Database ) -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) @@ -156,189 +156,46 @@ function SET:New() -- Follow alive players and clients _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) - - + + self.Collection = Database + + self:_RegisterSet() + self:_RegisterPlayers() + return self end ---- Finds a Unit based on the Unit Name. +--- Finds an Object based on the Object Name. -- @param #SET self --- @param #string UnitName --- @return Unit#UNIT The found Unit. -function SET:FindUnit( UnitName ) +-- @param #string ObjectName +-- @return #table The Object found. +function SET:_Find( ObjectName ) - local UnitFound = self.Units[UnitName] - return UnitFound + local ObjectFound = self.Set[ObjectName] + return ObjectFound end ---- Finds a Unit based on the Unit Name. +--- Adds a Object based on the Object Name. -- @param #SET self --- @param Unit#UNIT UnitToAdd --- @return Unit#UNIT The added Unit. -function SET:AddUnit( UnitToAdd ) +-- @param #string ObjectName +-- @param #table Object +-- @return #table The added Object. +function SET:_Add( ObjectName, Object ) - self.Units[UnitToAdd.UnitName] = UnitToAdd - return self.Units[UnitToAdd.UnitName] + self.Set[ObjectName] = Object end - - ---- Builds a set of units of coalitons. --- Possible current coalitions are red, blue and neutral. --- @param #SET self --- @param #string Coalitions Can take the following values: "red", "blue", "neutral". --- @return #SET self -function SET:FilterCoalitions( Coalitions ) - if not self.Filter.Coalitions then - self.Filter.Coalitions = {} - end - if type( Coalitions ) ~= "table" then - Coalitions = { Coalitions } - end - for CoalitionID, Coalition in pairs( Coalitions ) do - self.Filter.Coalitions[Coalition] = Coalition - end - return self -end - ---- Builds a set of units out of categories. --- Possible current categories are plane, helicopter, ground, ship. --- @param #SET self --- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". --- @return #SET self -function SET:FilterCategories( Categories ) - if not self.Filter.Categories then - self.Filter.Categories = {} - end - if type( Categories ) ~= "table" then - Categories = { Categories } - end - for CategoryID, Category in pairs( Categories ) do - self.Filter.Categories[Category] = Category - end - return self -end - ---- Builds a set of units of defined unit types. --- Possible current types are those types known within DCS world. --- @param #SET self --- @param #string Types Can take those type strings known within DCS world. --- @return #SET self -function SET:FilterTypes( Types ) - if not self.Filter.Types then - self.Filter.Types = {} - end - if type( Types ) ~= "table" then - Types = { Types } - end - for TypeID, Type in pairs( Types ) do - self.Filter.Types[Type] = Type - end - return self -end - ---- Builds a set of units of defined countries. --- Possible current countries are those known within DCS world. --- @param #SET self --- @param #string Countries Can take those country strings known within DCS world. --- @return #SET self -function SET:FilterCountries( Countries ) - if not self.Filter.Countries then - self.Filter.Countries = {} - end - if type( Countries ) ~= "table" then - Countries = { Countries } - end - for CountryID, Country in pairs( Countries ) do - self.Filter.Countries[Country] = Country - end - return self -end - ---- Builds a set of units of defined unit prefixes. --- All the units starting with the given prefixes will be included within the set. --- @param #SET self --- @param #string Prefixes The prefix of which the unit name starts with. --- @return #SET self -function SET:FilterUnitPrefixes( Prefixes ) - if not self.Filter.UnitPrefixes then - self.Filter.UnitPrefixes = {} - end - if type( Prefixes ) ~= "table" then - Prefixes = { Prefixes } - end - for PrefixID, Prefix in pairs( Prefixes ) do - self.Filter.UnitPrefixes[Prefix] = Prefix - end - return self -end - ---- Builds a set of units of defined group prefixes. --- All the units starting with the given group prefixes will be included within the set. --- @param #SET self --- @param #string Prefixes The prefix of which the group name where the unit belongs to starts with. --- @return #SET self -function SET:FilterGroupPrefixes( Prefixes ) - if not self.Filter.GroupPrefixes then - self.Filter.GroupPrefixes = {} - end - if type( Prefixes ) ~= "table" then - Prefixes = { Prefixes } - end - for PrefixID, Prefix in pairs( Prefixes ) do - self.Filter.GroupPrefixes[Prefix] = Prefix - end - return self -end - ---- Starts the filtering. +--- Starts the filtering for the defined collection. -- @param #SET self -- @return #SET self -function SET:FilterStart() +function SET:_FilterStart() - if _DATABASE then - -- OK, we have a _DATABASE - -- Now use the different filters to build the set. - -- We first take ALL of the Units of the _DATABASE. - - self:E( { "Adding Set Datapoints with filters" } ) - for DCSUnitName, DCSUnit in pairs( _DATABASE.DCSUnits ) do + for ObjectName, Object in pairs( self.Collection ) do - if self:_IsIncludeDCSUnit( DCSUnit ) then - - self:E( { "Adding Unit:", DCSUnitName } ) - self.DCSUnits[DCSUnitName] = _DATABASE.DCSUnits[DCSUnitName] - self.Units[DCSUnitName] = _DATABASE:FindUnit( DCSUnitName ) - - if _DATABASE.DCSUnitsAlive[DCSUnitName] then - self.DCSUnitsAlive[DCSUnitName] = _DATABASE.DCSUnitsAlive[DCSUnitName] - self.UnitsAlive[DCSUnitName] = _DATABASE.UnitsAlive[DCSUnitName] - end - - end + if self:IsIncludeObject( Object ) then + self:E( { "Adding Object:", ObjectName } ) + self:_Add( ObjectName, Object ) end - - for DCSGroupName, DCSGroup in pairs( _DATABASE.DCSGroups ) do - - --if self:_IsIncludeDCSGroup( DCSGroup ) then - self:E( { "Adding Group:", DCSGroupName } ) - self.DCSGroups[DCSGroupName] = _DATABASE.DCSGroups[DCSGroupName] - self.Groups[DCSGroupName] = _DATABASE:FindGroups( DCSGroupName ) - --end - - if _DATABASE.DCSGroupsAlive[DCSGroupName] then - self.DCSGroupsAlive[DCSGroupName] = _DATABASE.DCSGroupsAlive[DCSGroupName] - self.GroupsAlive[DCSGroupName] = _DATABASE.GroupsAlive[DCSGroupName] - end - end - - for DCSUnitName, Client in pairs( _DATABASE.CLIENTS ) do - self:E( { "Adding Client for Unit:", DCSUnitName } ) - self.Clients[DCSUnitName] = _DATABASE.Clients[DCSUnitName] - end - - else - self:E( "There is a structural error in MOOSE. No _DATABASE has been defined! Cannot build this custom SET." ) end return self @@ -368,78 +225,19 @@ function SET:_RegisterPlayers() return self end ---- Private method that registers all datapoints within in the mission. --- @param #SET self --- @return #SET self -function SET:_RegisterDatabase() - - local CoalitionsData = { AlivePlayersRed = coalition.getGroups( coalition.side.RED ), AlivePlayersBlue = coalition.getGroups( coalition.side.BLUE ) } - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - for DCSGroupId, DCSGroup in pairs( CoalitionData ) do - - if DCSGroup:isExist() then - local DCSGroupName = DCSGroup:getName() - - self:E( { "Register Group:", DCSGroup, DCSGroupName } ) - self.DCSGroups[DCSGroupName] = DCSGroup - self.Groups[DCSGroupName] = GROUP:New( DCSGroup ) - - if self:_IsAliveDCSGroup(DCSGroup) then - self:E( { "Register Alive Group:", DCSGroup, DCSGroupName } ) - self.DCSGroupsAlive[DCSGroupName] = DCSGroup - self.GroupsAlive[DCSGroupName] = self.Groups[DCSGroupName] - end - - for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do - - local DCSUnitName = DCSUnit:getName() - self:E( { "Register Unit:", DCSUnit, DCSUnitName } ) - - self.DCSUnits[DCSUnitName] = DCSUnit - self:AddUnit( UNIT:Find( DCSUnit ) ) - --self.Units[DCSUnitName] = UNIT:Register( DCSUnit ) - - if self:_IsAliveDCSUnit(DCSUnit) then - self:E( { "Register Alive Unit:", DCSUnit, DCSUnitName } ) - self.DCSUnitsAlive[DCSUnitName] = DCSUnit - self.UnitsAlive[DCSUnitName] = self.Units[DCSUnitName] - end - end - else - self:E( "Group does not exist: " .. DCSGroup ) - end - - for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do - self.Clients[ClientName] = CLIENT:Find( ClientName ) - end - end - end - - return self -end - - --- Events ---- Handles the OnBirth event for the alive units set. +--- Handles the OnBirth event for the Set. -- @param #SET self -- @param Event#EVENTDATA Event function SET:_EventOnBirth( Event ) self:F( { Event } ) if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - self.DCSUnits[Event.IniDCSUnitName] = Event.IniDCSUnit - self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit - self:AddUnit( UNIT:Register( Event.IniDCSUnit ) ) - --self.Units[Event.IniDCSUnitName] = UNIT:Register( Event.IniDCSUnit ) - - --if not self.DCSGroups[Event.IniDCSGroupName] then - -- self.DCSGroups[Event.IniDCSGroupName] = Event.IniDCSGroupName - -- self.DCSGroupsAlive[Event.IniDCSGroupName] = Event.IniDCSGroupName - -- self.Groups[Event.IniDCSGroupName] = GROUP:New( Event.IniDCSGroup ) - --end - self:_EventOnPlayerEnterUnit( Event ) + local ObjectName, Object = self:AddInDatabase( Event ) + if self:IsIncludeObject( Object ) then + self:_Add( ObjectName, Object ) + --self:_EventOnPlayerEnterUnit( Event ) end end end @@ -451,46 +249,46 @@ function SET:_EventOnDeadOrCrash( Event ) self:F( { Event } ) if Event.IniDCSUnit then - if self.DCSUnitsAlive[Event.IniDCSUnitName] then - self.DCSUnits[Event.IniDCSUnitName] = nil - self.DCSUnitsAlive[Event.IniDCSUnitName] = nil + local ObjectName, Object = self:FindInDatabase( Event ) + if ObjectName and Object then + self:_Delete( ObjectName ) end end end ---- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). --- @param #SET self --- @param Event#EVENTDATA Event -function SET:_EventOnPlayerEnterUnit( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - if not self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Add player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = Event.IniDCSUnit:getPlayerName() - self.ClientsAlive[Event.IniDCSUnitName] = _DATABASE.Clients[ Event.IniDCSUnitName ] - end - end - end -end - ---- Handles the OnPlayerLeaveUnit event to clean the active players table. --- @param #SET self --- @param Event#EVENTDATA Event -function SET:_EventOnPlayerLeaveUnit( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - if self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Cleaning player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = nil - self.ClientsAlive[Event.IniDCSUnitName] = nil - end - end - end -end +----- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +---- @param #SET self +---- @param Event#EVENTDATA Event +--function SET:_EventOnPlayerEnterUnit( Event ) +-- self:F( { Event } ) +-- +-- if Event.IniDCSUnit then +-- if self:IsIncludeObject( Event.IniDCSUnit ) then +-- if not self.PlayersAlive[Event.IniDCSUnitName] then +-- self:E( { "Add player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) +-- self.PlayersAlive[Event.IniDCSUnitName] = Event.IniDCSUnit:getPlayerName() +-- self.ClientsAlive[Event.IniDCSUnitName] = _DATABASE.Clients[ Event.IniDCSUnitName ] +-- end +-- end +-- end +--end +-- +----- Handles the OnPlayerLeaveUnit event to clean the active players table. +---- @param #SET self +---- @param Event#EVENTDATA Event +--function SET:_EventOnPlayerLeaveUnit( Event ) +-- self:F( { Event } ) +-- +-- if Event.IniDCSUnit then +-- if self:IsIncludeObject( Event.IniDCSUnit ) then +-- if self.PlayersAlive[Event.IniDCSUnitName] then +-- self:E( { "Cleaning player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) +-- self.PlayersAlive[Event.IniDCSUnitName] = nil +-- self.ClientsAlive[Event.IniDCSUnitName] = nil +-- end +-- end +-- end +--end --- Iterators @@ -575,143 +373,17 @@ function SET:ForEachClient( IteratorFunction, ... ) end -function SET:ScanEnvironment() - self:F() - - self.Navpoints = {} - self.Units = {} - --Build routines.db.units and self.Navpoints - for coa_name, coa_data in pairs(env.mission.coalition) do - - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - --self.Units[coa_name] = {} - - ---------------------------------------------- - -- build nav points DB - self.Navpoints[coa_name] = {} - if coa_data.nav_points then --navpoints - for nav_ind, nav_data in pairs(coa_data.nav_points) do - - if type(nav_data) == 'table' then - self.Navpoints[coa_name][nav_ind] = routines.utils.deepCopy(nav_data) - - self.Navpoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. - self.Navpoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. - self.Navpoints[coa_name][nav_ind]['point']['x'] = nav_data.x - self.Navpoints[coa_name][nav_ind]['point']['y'] = 0 - self.Navpoints[coa_name][nav_ind]['point']['z'] = nav_data.y - end - end - end - ------------------------------------------------- - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - - local countryName = string.lower(cntry_data.name) - --self.Units[coa_name][countryName] = {} - --self.Units[coa_name][countryName]["countryId"] = cntry_data.id - - if type(cntry_data) == 'table' then --just making sure - - for obj_type_name, obj_type_data in pairs(cntry_data) do - - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check - - local category = obj_type_name - - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - - --self.Units[coa_name][countryName][category] = {} - - for group_num, GroupTemplate in pairs(obj_type_data.group) do - - if GroupTemplate and GroupTemplate.units and type(GroupTemplate.units) == 'table' then --making sure again- this is a valid group - self:_RegisterGroup( GroupTemplate ) - end --if GroupTemplate and GroupTemplate.units then - end --for group_num, GroupTemplate in pairs(obj_type_data.group) do - end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then - end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then - end --for obj_type_name, obj_type_data in pairs(cntry_data) do - end --if type(cntry_data) == 'table' then - end --for cntry_id, cntry_data in pairs(coa_data.country) do - end --if coa_data.country then --there is a country table - end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then - end --for coa_name, coa_data in pairs(mission.coalition) do - - self:_RegisterDatabase() - self:_RegisterPlayers() - - return self -end - - ---- +--- Decides whether to include the Object -- @param #SET self --- @param DCSUnit#Unit DCSUnit +-- @param #table Object -- @return #SET self -function SET:_IsIncludeDCSUnit( DCSUnit ) - self:F( DCSUnit ) - local DCSUnitInclude = true - - if self.Filter.Coalitions then - local DCSUnitCoalition = false - for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do - self:T( { "Coalition:", DCSUnit:getCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) - if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == DCSUnit:getCoalition() then - DCSUnitCoalition = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCoalition - end +function SET:IsIncludeObject( Object ) + self:F( Object ) - if self.Filter.Categories then - local DCSUnitCategory = false - for CategoryID, CategoryName in pairs( self.Filter.Categories ) do - self:T( { "Category:", DCSUnit:getDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) - if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == DCSUnit:getDesc().category then - DCSUnitCategory = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCategory - end - - if self.Filter.Types then - local DCSUnitType = false - for TypeID, TypeName in pairs( self.Filter.Types ) do - self:T( { "Type:", DCSUnit:getTypeName(), TypeName } ) - if TypeName == DCSUnit:getTypeName() then - DCSUnitType = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitType - end - - if self.Filter.Countries then - local DCSUnitCountry = false - for CountryID, CountryName in pairs( self.Filter.Countries ) do - self:T( { "Country:", DCSUnit:getCountry(), CountryName } ) - if country.id[CountryName] == DCSUnit:getCountry() then - DCSUnitCountry = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCountry - end - - if self.Filter.UnitPrefixes then - local DCSUnitPrefix = false - for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do - self:T( { "Unit Prefix:", string.find( DCSUnit:getName(), UnitPrefix, 1 ), UnitPrefix } ) - if string.find( DCSUnit:getName(), UnitPrefix, 1 ) then - DCSUnitPrefix = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitPrefix - end - - self:T( DCSUnitInclude ) - return DCSUnitInclude + return true end + --- -- @param #SET self -- @param DCSUnit#Unit DCSUnit diff --git a/Moose Development/Moose/UnitSet.lua b/Moose Development/Moose/UnitSet.lua new file mode 100644 index 000000000..188d59a73 --- /dev/null +++ b/Moose Development/Moose/UnitSet.lua @@ -0,0 +1,516 @@ +--- Create and manage a set of units. +-- +-- @{#UNITSET} class +-- ================== +-- Mission designers can use the UNITSET class to build sets of units belonging to certain: +-- +-- * Coalitions +-- * Categories +-- * Countries +-- * Unit types +-- * Starting with certain prefix strings. +-- +-- This list will grow over time. Planned developments are to include filters and iterators. +-- Additional filters will be added around @{Zone#ZONEs}, Radiuses, Active players, ... +-- More iterators will be implemented in the near future ... +-- +-- Administers the Initial Sets of the Mission Templates as defined within the Mission Editor. +-- +-- UNITSET construction methods: +-- ================================= +-- Create a new UNITSET object with the @{#UNITSET.New} method: +-- +-- * @{#UNITSET.New}: Creates a new UNITSET object. +-- +-- +-- UNITSET filter criteria: +-- ========================= +-- You can set filter criteria to define the set of units within the UNITSET. +-- Filter criteria are defined by: +-- +-- * @{#UNITSET.FilterCoalitions}: Builds the UNITSET with the units belonging to the coalition(s). +-- * @{#UNITSET.FilterCategories}: Builds the UNITSET with the units belonging to the category(ies). +-- * @{#UNITSET.FilterTypes}: Builds the UNITSET with the units belonging to the unit type(s). +-- * @{#UNITSET.FilterCountries}: Builds the UNITSET with the units belonging to the country(ies). +-- * @{#UNITSET.FilterPrefixes}: Builds the UNITSET with the units starting with the same prefix string(s). +-- +-- Once the filter criteria have been set for the UNITSET, you can start filtering using: +-- +-- * @{#UNITSET.FilterStart}: Starts the filtering of the units within the UNITSET. +-- +-- Planned filter criteria within development are (so these are not yet available): +-- +-- * @{#UNITSET.FilterZones}: Builds the UNITSET with the units within a @{Zone#ZONE}. +-- +-- +-- UNITSET iterators: +-- =================== +-- Once the filters have been defined and the UNITSET has been built, you can iterate the UNITSET with the available iterator methods. +-- The iterator methods will walk the UNITSET set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the UNITSET: +-- +-- * @{#UNITSET.ForEachUnit}: Calls a function for each alive unit it finds within the UNITSET. +-- +-- Planned iterators methods in development are (so these are not yet available): +-- +-- * @{#UNITSET.ForEachUnitInGroup}: Calls a function for each group contained within the UNITSET. +-- * @{#UNITSET.ForEachUnitInZone}: Calls a function for each unit within a certain zone contained within the UNITSET. +-- +-- @module Set +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Unit" ) +Include.File( "Event" ) +Include.File( "Client" ) + + +--- UNITSET class +-- @type UNITSET +-- @extends Set#SET +UNITSET = { + ClassName = "UNITSET", + Units = {}, + Filter = { + Coalitions = nil, + Categories = nil, + Types = nil, + Countries = nil, + UnitPrefixes = nil, + }, + FilterMeta = { + Coalitions = { + red = coalition.side.RED, + blue = coalition.side.BLUE, + neutral = coalition.side.NEUTRAL, + }, + Categories = { + plane = Unit.Category.AIRPLANE, + helicopter = Unit.Category.HELICOPTER, + ground = Unit.Category.GROUND_UNIT, + ship = Unit.Category.SHIP, + structure = Unit.Category.STRUCTURE, + }, + }, +} + +local _DATABASECoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _DATABASECategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + + +--- Creates a new UNITSET object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #UNITSET self +-- @return #UNITSET +-- @usage +-- -- Define a new UNITSET Object. This DBObject will contain a reference to all alive Units. +-- DBObject = UNITSET:New() +function UNITSET:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, SET:New( _DATABASE.Units ) ) + + + +-- -- Follow alive players and clients +-- _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) +-- _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) + +-- self:_RegisterPlayers() + + return self +end + +--- Finds a Unit based on the Unit Name. +-- @param #UNITSET self +-- @param #string UnitName +-- @return Unit#UNIT The found Unit. +function UNITSET:FindUnit( UnitName ) + + local UnitFound = self.Units[UnitName] + return UnitFound +end + +--- Finds a Unit based on the Unit Name. +-- @param #UNITSET self +-- @param Unit#UNIT UnitName +-- @param Unit#UNIT UnitData +-- @return Unit#UNIT The added Unit. +function UNITSET:_AddUnit( UnitName, UnitData ) + + self.Units[UnitName] = _DATABASE:FindUnit( UnitName ) +end + + + +--- Builds a set of units of coalitons. +-- Possible current coalitions are red, blue and neutral. +-- @param #UNITSET self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #UNITSET self +function UNITSET:FilterCoalitions( Coalitions ) + if not self.Filter.Coalitions then + self.Filter.Coalitions = {} + end + if type( Coalitions ) ~= "table" then + Coalitions = { Coalitions } + end + for CoalitionID, Coalition in pairs( Coalitions ) do + self.Filter.Coalitions[Coalition] = Coalition + end + return self +end + + +--- Builds a set of units out of categories. +-- Possible current categories are plane, helicopter, ground, ship. +-- @param #UNITSET self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #UNITSET self +function UNITSET:FilterCategories( Categories ) + if not self.Filter.Categories then + self.Filter.Categories = {} + end + if type( Categories ) ~= "table" then + Categories = { Categories } + end + for CategoryID, Category in pairs( Categories ) do + self.Filter.Categories[Category] = Category + end + return self +end + + +--- Builds a set of units of defined unit types. +-- Possible current types are those types known within DCS world. +-- @param #UNITSET self +-- @param #string Types Can take those type strings known within DCS world. +-- @return #UNITSET self +function UNITSET:FilterTypes( Types ) + if not self.Filter.Types then + self.Filter.Types = {} + end + if type( Types ) ~= "table" then + Types = { Types } + end + for TypeID, Type in pairs( Types ) do + self.Filter.Types[Type] = Type + end + return self +end + + +--- Builds a set of units of defined countries. +-- Possible current countries are those known within DCS world. +-- @param #UNITSET self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #UNITSET self +function UNITSET:FilterCountries( Countries ) + if not self.Filter.Countries then + self.Filter.Countries = {} + end + if type( Countries ) ~= "table" then + Countries = { Countries } + end + for CountryID, Country in pairs( Countries ) do + self.Filter.Countries[Country] = Country + end + return self +end + + +--- Builds a set of units of defined unit prefixes. +-- All the units starting with the given prefixes will be included within the set. +-- @param #UNITSET self +-- @param #string Prefixes The prefix of which the unit name starts with. +-- @return #UNITSET self +function UNITSET:FilterPrefixes( Prefixes ) + if not self.Filter.UnitPrefixes then + self.Filter.UnitPrefixes = {} + end + if type( Prefixes ) ~= "table" then + Prefixes = { Prefixes } + end + for PrefixID, Prefix in pairs( Prefixes ) do + self.Filter.UnitPrefixes[Prefix] = Prefix + end + return self +end + + +----- Builds a set of units of defined group prefixes. +---- All the units starting with the given group prefixes will be included within the set. +---- @param #UNITSET self +---- @param #string Prefixes The prefix of which the group name where the unit belongs to starts with. +---- @return #UNITSET self +--function UNITSET:FilterGroupPrefixes( Prefixes ) +-- if not self.Filter.GroupPrefixes then +-- self.Filter.GroupPrefixes = {} +-- end +-- if type( Prefixes ) ~= "table" then +-- Prefixes = { Prefixes } +-- end +-- for PrefixID, Prefix in pairs( Prefixes ) do +-- self.Filter.GroupPrefixes[Prefix] = Prefix +-- end +-- return self +--end + + +--- Starts the filtering. +-- @param #UNITSET self +-- @return #UNITSET self +function UNITSET:FilterStart() + + if _DATABASE then + self:_FilterStart( self.DatabaseCollection ) + end + + FollowEventBirth( ) + + _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + + return self +end + +--- Events + +--- Handles the OnBirth event for the alive units set. +-- @param #UNITSET self +-- @param Event#EVENTDATA Event +function UNITSET:_EventOnBirth( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if self:_IsIncludeUnit( Event.IniDCSUnit ) then + self.DCSUnits[Event.IniDCSUnitName] = Event.IniDCSUnit + self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit + self:_AddUnit( UNIT:Register( Event.IniDCSUnit ) ) + --self.Units[Event.IniDCSUnitName] = UNIT:Register( Event.IniDCSUnit ) + + --if not self.DCSGroups[Event.IniDCSGroupName] then + -- self.DCSGroups[Event.IniDCSGroupName] = Event.IniDCSGroupName + -- self.DCSGroupsAlive[Event.IniDCSGroupName] = Event.IniDCSGroupName + -- self.Groups[Event.IniDCSGroupName] = GROUP:New( Event.IniDCSGroup ) + --end + self:_EventOnPlayerEnterUnit( Event ) + end + end +end + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #UNITSET self +-- @param Event#EVENTDATA Event +function UNITSET:_EventOnDeadOrCrash( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if self.DCSUnitsAlive[Event.IniDCSUnitName] then + self.DCSUnits[Event.IniDCSUnitName] = nil + self.DCSUnitsAlive[Event.IniDCSUnitName] = nil + end + end +end + +--- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +-- @param #UNITSET self +-- @param Event#EVENTDATA Event +function UNITSET:_EventOnPlayerEnterUnit( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if self:_IsIncludeUnit( Event.IniDCSUnit ) then + if not self.PlayersAlive[Event.IniDCSUnitName] then + self:E( { "Add player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) + self.PlayersAlive[Event.IniDCSUnitName] = Event.IniDCSUnit:getPlayerName() + self.ClientsAlive[Event.IniDCSUnitName] = _DATABASE.Clients[ Event.IniDCSUnitName ] + end + end + end +end + +--- Handles the OnPlayerLeaveUnit event to clean the active players table. +-- @param #UNITSET self +-- @param Event#EVENTDATA Event +function UNITSET:_EventOnPlayerLeaveUnit( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if self:_IsIncludeUnit( Event.IniDCSUnit ) then + if self.PlayersAlive[Event.IniDCSUnitName] then + self:E( { "Cleaning player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) + self.PlayersAlive[Event.IniDCSUnitName] = nil + self.ClientsAlive[Event.IniDCSUnitName] = nil + end + end + end +end + +--- Iterators + +--- Interate the UNITSET and call an interator function for the given set, providing the Object for each element within the set and optional parameters. +-- @param #UNITSET self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the UNITSET. +-- @return #UNITSET self +function UNITSET:ForEach( IteratorFunction, arg, Set ) + self:F( arg ) + + local function CoRoutine() + local Count = 0 + for ObjectID, Object in pairs( Set ) do + self:T2( Object ) + IteratorFunction( Object, unpack( arg ) ) + Count = Count + 1 + if Count % 10 == 0 then + coroutine.yield( false ) + end + end + return true + end + + local co = coroutine.create( CoRoutine ) + + local function Schedule() + + local status, res = coroutine.resume( co ) + self:T( { status, res } ) + + if status == false then + error( res ) + end + if res == false then + return true -- resume next time the loop + end + + return false + end + + local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 ) + + return self +end + + +--- Interate the UNITSET and call an interator function for each **alive** unit, providing the Unit and optional parameters. +-- @param #UNITSET self +-- @param #function IteratorFunction The function that will be called when there is an alive unit in the UNITSET. The function needs to accept a UNIT parameter. +-- @return #UNITSET self +function UNITSET:ForEachDCSUnitAlive( IteratorFunction, ... ) + self:F( arg ) + + self:ForEach( IteratorFunction, arg, self.DCSUnitsAlive ) + + return self +end + + +--- Interate the UNITSET and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. +-- @param #UNITSET self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the UNITSET. The function needs to accept a UNIT parameter. +-- @return #UNITSET self +function UNITSET:ForEachPlayer( IteratorFunction, ... ) + self:F( arg ) + + self:ForEach( IteratorFunction, arg, self.PlayersAlive ) + + return self +end + + +--- Interate the UNITSET and call an interator function for each client, providing the Client to the function and optional parameters. +-- @param #UNITSET self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the UNITSET. The function needs to accept a CLIENT parameter. +-- @return #UNITSET self +function UNITSET:ForEachClient( IteratorFunction, ... ) + self:F( arg ) + + self:ForEach( IteratorFunction, arg, self.Clients ) + + return self +end + + +--- +-- @param #UNITSET self +-- @param Unit#UNIT MUnit +-- @return #UNITSET self +function UNITSET:IsIncludeObject( MUnit ) + self:F( MUnit ) + local MUnitInclude = true + + if self.Filter.Coalitions then + local MUnitCoalition = false + for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do + self:T( { "Coalition:", MUnit:GetCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) + if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == MUnit:GetCoalition() then + MUnitCoalition = true + end + end + MUnitInclude = MUnitInclude and MUnitCoalition + end + + if self.Filter.Categories then + local MUnitCategory = false + for CategoryID, CategoryName in pairs( self.Filter.Categories ) do + self:T( { "Category:", MUnit:GetDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) + if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == MUnit:GetDesc().category then + MUnitCategory = true + end + end + MUnitInclude = MUnitInclude and MUnitCategory + end + + if self.Filter.Types then + local MUnitType = false + for TypeID, TypeName in pairs( self.Filter.Types ) do + self:T( { "Type:", MUnit:GetTypeName(), TypeName } ) + if TypeName == MUnit:GetTypeName() then + MUnitType = true + end + end + MUnitInclude = MUnitInclude and MUnitType + end + + if self.Filter.Countries then + local MUnitCountry = false + for CountryID, CountryName in pairs( self.Filter.Countries ) do + self:T( { "Country:", MUnit:GetCountry(), CountryName } ) + if country.id[CountryName] == MUnit:GetCountry() then + MUnitCountry = true + end + end + MUnitInclude = MUnitInclude and MUnitCountry + end + + if self.Filter.UnitPrefixes then + local MUnitPrefix = false + for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do + self:T( { "Unit Prefix:", string.find( MUnit:GetName(), UnitPrefix, 1 ), UnitPrefix } ) + if string.find( MUnit:GetName(), UnitPrefix, 1 ) then + MUnitPrefix = true + end + end + MUnitInclude = MUnitInclude and MUnitPrefix + end + + self:T( MUnitInclude ) + return MUnitInclude +end + + From 645d074a7dfd010eb77260bfc5d7b2155434d5cd Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 27 May 2016 11:32:49 +0200 Subject: [PATCH 02/12] GROUPSET and UNITSET are working now !! - GROUPSET and UNITSET inherit SET - DATABASE optimized - Tracing levels tuned. --- Moose Development/Moose/Database.lua | 68 +- Moose Development/Moose/Event.lua | 50 +- Moose Development/Moose/Group.lua | 17 + Moose Development/Moose/GroupSet.lua | 327 + Moose Development/Moose/Set.lua | 267 +- Moose Development/Moose/UnitSet.lua | 275 +- .../l10n/DEFAULT/Moose.lua | 16724 +--------------- Moose Mission Setup/Moose.lua | 16724 +--------------- .../Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz | Bin 98334 -> 98334 bytes .../Moose_Test_DATABASE.lua | 63 +- .../Moose_Test_DATABASE.miz | Bin 27828 -> 29075 bytes .../Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz | Bin 33518 -> 33518 bytes .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz | Bin 59173 -> 59173 bytes .../Moose_Test_MISSILETRAINER.miz | Bin 118467 -> 118467 bytes .../Moose_Test_SEAD/MOOSE_Test_SEAD.miz | Bin 25771 -> 25771 bytes .../Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz | Bin 51188 -> 51188 bytes .../MOOSE_Test_SPAWN_Repeat.miz | Bin 25332 -> 25332 bytes .../MOOSE_Test_TASK_Pickup_and_Deploy.miz | Bin 31933 -> 31933 bytes .../Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz | Bin 40952 -> 40952 bytes 19 files changed, 634 insertions(+), 33881 deletions(-) create mode 100644 Moose Development/Moose/GroupSet.lua diff --git a/Moose Development/Moose/Database.lua b/Moose Development/Moose/Database.lua index 1814af91f..b0fff9b76 100644 --- a/Moose Development/Moose/Database.lua +++ b/Moose Development/Moose/Database.lua @@ -226,9 +226,9 @@ end -- @param #table SpawnTemplate -- @return #DATABASE self function DATABASE:Spawn( SpawnTemplate ) - self:F( SpawnTemplate.name ) + self:F2( SpawnTemplate.name ) - self:T( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) + self:T2( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID @@ -240,7 +240,7 @@ function DATABASE:Spawn( SpawnTemplate ) SpawnTemplate.SpawnCountryID = nil SpawnTemplate.SpawnCategoryID = nil - self:_RegisterGroup( SpawnTemplate ) + self:_RegisterTemplate( SpawnTemplate ) coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) -- Restore @@ -256,7 +256,7 @@ end --- Set a status to a Group within the Database, this to check crossing events for example. function DATABASE:SetStatusGroup( GroupName, Status ) - self:F( Status ) + self:F2( Status ) self.Templates.Groups[GroupName].Status = Status end @@ -264,7 +264,7 @@ end --- Get a status to a Group within the Database, this to check crossing events for example. function DATABASE:GetStatusGroup( GroupName ) - self:F( Status ) + self:F2( Status ) if self.Templates.Groups[GroupName] then return self.Templates.Groups[GroupName].Status @@ -277,7 +277,7 @@ end -- @param #DATABASE self -- @param #table GroupTemplate -- @return #DATABASE self -function DATABASE:_RegisterGroup( GroupTemplate ) +function DATABASE:_RegisterTemplate( GroupTemplate ) local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) @@ -297,7 +297,7 @@ function DATABASE:_RegisterGroup( GroupTemplate ) self.Templates.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units self.Templates.Groups[GroupTemplateName].Units = GroupTemplate.units - self:T( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } ) + self:T2( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } ) for unit_num, UnitTemplate in pairs( GroupTemplate.units ) do @@ -381,7 +381,7 @@ end -- @param #DATABASE self -- @param Event#EVENTDATA Event function DATABASE:_EventOnBirth( Event ) - self:F( { Event } ) + self:F2( { Event } ) if Event.IniDCSUnit then if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then @@ -396,7 +396,7 @@ end -- @param #DATABASE self -- @param Event#EVENTDATA Event function DATABASE:_EventOnDeadOrCrash( Event ) - self:F( { Event } ) + self:F2( { Event } ) if Event.IniDCSUnit then if self.DCSUnits[Event.IniDCSUnitName] then @@ -410,7 +410,7 @@ end -- @param #DATABASE self -- @param Event#EVENTDATA Event function DATABASE:_EventOnPlayerEnterUnit( Event ) - self:F( { Event } ) + self:F2( { Event } ) if Event.IniDCSUnit then if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then @@ -427,7 +427,7 @@ end -- @param #DATABASE self -- @param Event#EVENTDATA Event function DATABASE:_EventOnPlayerLeaveUnit( Event ) - self:F( { Event } ) + self:F2( { Event } ) if Event.IniDCSUnit then if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then @@ -447,7 +447,7 @@ end -- @param #function IteratorFunction The function that will be called when there is an alive player in the database. -- @return #DATABASE self function DATABASE:ForEach( IteratorFunction, arg, Set ) - self:F( arg ) + self:F2( arg ) local function CoRoutine() local Count = 0 @@ -467,7 +467,7 @@ function DATABASE:ForEach( IteratorFunction, arg, Set ) local function Schedule() local status, res = coroutine.resume( co ) - self:T( { status, res } ) + self:T2( { status, res } ) if status == false then error( res ) @@ -490,7 +490,7 @@ end -- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter. -- @return #DATABASE self function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) - self:F( arg ) + self:F2( arg ) self:ForEach( IteratorFunction, arg, self.DCSUnits ) @@ -502,7 +502,7 @@ end -- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. -- @return #DATABASE self function DATABASE:ForEachPlayer( IteratorFunction, ... ) - self:F( arg ) + self:F2( arg ) self:ForEach( IteratorFunction, arg, self.PlayersAlive ) @@ -515,7 +515,7 @@ end -- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter. -- @return #DATABASE self function DATABASE:ForEachClient( IteratorFunction, ... ) - self:F( arg ) + self:F2( arg ) self:ForEach( IteratorFunction, arg, self.CLIENTS ) @@ -524,7 +524,7 @@ end function DATABASE:ScanEnvironment() - self:F() + self:F2() self.Navpoints = {} self.UNITS = {} @@ -574,7 +574,7 @@ function DATABASE:ScanEnvironment() for group_num, GroupTemplate in pairs(obj_type_data.group) do if GroupTemplate and GroupTemplate.units and type(GroupTemplate.units) == 'table' then --making sure again- this is a valid group - self:_RegisterGroup( GroupTemplate ) + self:_RegisterTemplate( GroupTemplate ) end --if GroupTemplate and GroupTemplate.units then end --for group_num, GroupTemplate in pairs(obj_type_data.group) do end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then @@ -598,13 +598,13 @@ end -- @param DCSUnit#Unit DCSUnit -- @return #DATABASE self function DATABASE:_IsIncludeDCSUnit( DCSUnit ) - self:F( DCSUnit ) + self:F2( DCSUnit ) local DCSUnitInclude = true if self.Filter.Coalitions then local DCSUnitCoalition = false for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do - self:T( { "Coalition:", DCSUnit:getCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) + self:T2( { "Coalition:", DCSUnit:getCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == DCSUnit:getCoalition() then DCSUnitCoalition = true end @@ -615,7 +615,7 @@ function DATABASE:_IsIncludeDCSUnit( DCSUnit ) if self.Filter.Categories then local DCSUnitCategory = false for CategoryID, CategoryName in pairs( self.Filter.Categories ) do - self:T( { "Category:", DCSUnit:getDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) + self:T2( { "Category:", DCSUnit:getDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == DCSUnit:getDesc().category then DCSUnitCategory = true end @@ -626,7 +626,7 @@ function DATABASE:_IsIncludeDCSUnit( DCSUnit ) if self.Filter.Types then local DCSUnitType = false for TypeID, TypeName in pairs( self.Filter.Types ) do - self:T( { "Type:", DCSUnit:getTypeName(), TypeName } ) + self:T2( { "Type:", DCSUnit:getTypeName(), TypeName } ) if TypeName == DCSUnit:getTypeName() then DCSUnitType = true end @@ -637,7 +637,7 @@ function DATABASE:_IsIncludeDCSUnit( DCSUnit ) if self.Filter.Countries then local DCSUnitCountry = false for CountryID, CountryName in pairs( self.Filter.Countries ) do - self:T( { "Country:", DCSUnit:getCountry(), CountryName } ) + self:T2( { "Country:", DCSUnit:getCountry(), CountryName } ) if country.id[CountryName] == DCSUnit:getCountry() then DCSUnitCountry = true end @@ -648,7 +648,7 @@ function DATABASE:_IsIncludeDCSUnit( DCSUnit ) if self.Filter.UnitPrefixes then local DCSUnitPrefix = false for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do - self:T( { "Unit Prefix:", string.find( DCSUnit:getName(), UnitPrefix, 1 ), UnitPrefix } ) + self:T2( { "Unit Prefix:", string.find( DCSUnit:getName(), UnitPrefix, 1 ), UnitPrefix } ) if string.find( DCSUnit:getName(), UnitPrefix, 1 ) then DCSUnitPrefix = true end @@ -656,7 +656,7 @@ function DATABASE:_IsIncludeDCSUnit( DCSUnit ) DCSUnitInclude = DCSUnitInclude and DCSUnitPrefix end - self:T( DCSUnitInclude ) + self:T2( DCSUnitInclude ) return DCSUnitInclude end @@ -665,14 +665,14 @@ end -- @param DCSUnit#Unit DCSUnit -- @return #DATABASE self function DATABASE:_IsAliveDCSUnit( DCSUnit ) - self:F( DCSUnit ) + self:F2( DCSUnit ) local DCSUnitAlive = false if DCSUnit and DCSUnit:isExist() and DCSUnit:isActive() then if self.DCSUnits[DCSUnit:getName()] then DCSUnitAlive = true end end - self:T( DCSUnitAlive ) + self:T2( DCSUnitAlive ) return DCSUnitAlive end @@ -681,25 +681,15 @@ end -- @param DCSGroup#Group DCSGroup -- @return #DATABASE self function DATABASE:_IsAliveDCSGroup( DCSGroup ) - self:F( DCSGroup ) + self:F2( DCSGroup ) local DCSGroupAlive = false if DCSGroup and DCSGroup:isExist() then if self.DCSGroups[DCSGroup:getName()] then DCSGroupAlive = true end end - self:T( DCSGroupAlive ) + self:T2( DCSGroupAlive ) return DCSGroupAlive end ---- Traces the current database contents in the log ... (for debug reasons). --- @param #DATABASE self --- @return #DATABASE self -function DATABASE:TraceDatabase() - self:F() - - self:T( { "DCSUnits:", self.DCSUnits } ) -end - - diff --git a/Moose Development/Moose/Event.lua b/Moose Development/Moose/Event.lua index f7c2a0649..75cfca6ff 100644 --- a/Moose Development/Moose/Event.lua +++ b/Moose Development/Moose/Event.lua @@ -64,7 +64,7 @@ local _EVENTCODES = { function EVENT:New() local self = BASE:Inherit( self, BASE:New() ) - self:F() + self:F2() self.EventHandler = world.addEventHandler( self ) return self end @@ -154,7 +154,7 @@ end -- @param EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnBirthForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) + self:F2( EventTemplate.name ) self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnBirthForUnit ) @@ -167,7 +167,7 @@ end -- @param Base#BASE EventSelf -- @return #EVENT function EVENT:OnBirth( EventFunction, EventSelf ) - self:F() + self:F2() self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) @@ -181,7 +181,7 @@ end -- @param Base#BASE EventSelf -- @return #EVENT function EVENT:OnBirthForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) @@ -195,7 +195,7 @@ end -- @param EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnCrashForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) + self:F2( EventTemplate.name ) self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnCrashForUnit ) @@ -208,7 +208,7 @@ end -- @param Base#BASE EventSelf -- @return #EVENT function EVENT:OnCrash( EventFunction, EventSelf ) - self:F() + self:F2() self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_CRASH ) @@ -222,7 +222,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnCrashForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_CRASH ) @@ -236,7 +236,7 @@ end -- @param EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnDeadForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) + self:F2( EventTemplate.name ) self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnDeadForUnit ) @@ -249,7 +249,7 @@ end -- @param Base#BASE EventSelf -- @return #EVENT function EVENT:OnDead( EventFunction, EventSelf ) - self:F() + self:F2() self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_DEAD ) @@ -264,7 +264,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_DEAD ) @@ -278,7 +278,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnPilotDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_PILOT_DEAD ) @@ -292,7 +292,7 @@ end -- @param EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnLandForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) + self:F2( EventTemplate.name ) self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnLandForUnit ) @@ -306,7 +306,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnLandForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_LAND ) @@ -320,7 +320,7 @@ end -- @param EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnTakeOffForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) + self:F2( EventTemplate.name ) self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnTakeOffForUnit ) @@ -334,7 +334,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnTakeOffForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_TAKEOFF ) @@ -348,7 +348,7 @@ end -- @param EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnEngineShutDownForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) + self:F2( EventTemplate.name ) self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnEngineShutDownForUnit ) @@ -362,7 +362,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnEngineShutDownForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_SHUTDOWN ) @@ -376,7 +376,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnEngineStartUpForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_STARTUP ) @@ -389,7 +389,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnShot( EventFunction, EventSelf ) - self:F() + self:F2() self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_SHOT ) @@ -403,7 +403,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnShotForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_SHOT ) @@ -416,7 +416,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnHit( EventFunction, EventSelf ) - self:F() + self:F2() self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_HIT ) @@ -430,7 +430,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnHitForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) + self:F2( EventDCSUnitName ) self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_HIT ) @@ -443,7 +443,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnPlayerEnterUnit( EventFunction, EventSelf ) - self:F() + self:F2() self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_ENTER_UNIT ) @@ -456,7 +456,7 @@ end -- @param Base#BASE EventSelf The self instance of the class for which the event is. -- @return #EVENT function EVENT:OnPlayerLeaveUnit( EventFunction, EventSelf ) - self:F() + self:F2() self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_LEAVE_UNIT ) @@ -466,7 +466,7 @@ end function EVENT:onEvent( Event ) - self:F( { _EVENTCODES[Event.id], Event } ) + self:F2( { _EVENTCODES[Event.id], Event } ) if self and self.Events and self.Events[Event.id] then if Event.initiator and Event.initiator:getCategory() == Object.Category.UNIT then diff --git a/Moose Development/Moose/Group.lua b/Moose Development/Moose/Group.lua index 89cf288b8..27e972843 100644 --- a/Moose Development/Moose/Group.lua +++ b/Moose Development/Moose/Group.lua @@ -198,6 +198,23 @@ function GROUP:GetCoalition() return nil end +--- Returns the country of the DCS Group. +-- @param #GROUP self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Group is not existing or alive. +function GROUP:GetCountry() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCountry = DCSGroup:getUnit(1):getCountry() + self:T3( GroupCountry ) + return GroupCountry + end + + return nil +end + --- Returns the name of the DCS Group. -- @param #GROUP self -- @return #string The DCS Group name. diff --git a/Moose Development/Moose/GroupSet.lua b/Moose Development/Moose/GroupSet.lua new file mode 100644 index 000000000..fb3f45fc5 --- /dev/null +++ b/Moose Development/Moose/GroupSet.lua @@ -0,0 +1,327 @@ +--- Create and manage a set of groups. +-- +-- @{#GROUPSET} class +-- ================== +-- Mission designers can use the GROUPSET class to build sets of groups belonging to certain: +-- +-- * Coalitions +-- * Categories +-- * Countries +-- * Starting with certain prefix strings. +-- +-- GROUPSET construction methods: +-- ================================= +-- Create a new GROUPSET object with the @{#GROUPSET.New} method: +-- +-- * @{#GROUPSET.New}: Creates a new GROUPSET object. +-- +-- +-- GROUPSET filter criteria: +-- ========================= +-- You can set filter criteria to define the set of groups within the GROUPSET. +-- Filter criteria are defined by: +-- +-- * @{#GROUPSET.FilterCoalitions}: Builds the GROUPSET with the groups belonging to the coalition(s). +-- * @{#GROUPSET.FilterCategories}: Builds the GROUPSET with the groups belonging to the category(ies). +-- * @{#GROUPSET.FilterTypes}: Builds the GROUPSET with the groups belonging to the unit type(s). +-- * @{#GROUPSET.FilterPrefixes}: Builds the GROUPSET with the groups starting with the same prefix string(s). +-- +-- Once the filter criteria have been set for the GROUPSET, you can start filtering using: +-- +-- * @{#GROUPSET.FilterStart}: Starts the filtering of the groups within the GROUPSET. +-- +-- Planned filter criteria within development are (so these are not yet available): +-- +-- * @{#GROUPSET.FilterZones}: Builds the GROUPSET with the groups within a @{Zone#ZONE}. +-- +-- +-- GROUPSET iterators: +-- =================== +-- Once the filters have been defined and the GROUPSET has been built, you can iterate the GROUPSET with the available iterator methods. +-- The iterator methods will walk the GROUPSET set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the GROUPSET: +-- +-- * @{#GROUPSET.ForEachGroup}: Calls a function for each alive unit it finds within the GROUPSET. +-- +-- Planned iterators methods in development are (so these are not yet available): +-- +-- * @{#GROUPSET.ForEachUnitInGroup}: Calls a function for each group contained within the GROUPSET. +-- * @{#GROUPSET.ForEachUnitInZone}: Calls a function for each unit within a certain zone contained within the GROUPSET. +-- +-- @module GroupSet +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Group" ) +Include.File( "Set" ) + + +--- GROUPSET class +-- @type GROUPSET +-- @extends Set#SET +GROUPSET = { + ClassName = "GROUPSET", + Units = {}, + Filter = { + Coalitions = nil, + Categories = nil, + Countries = nil, + GroupPrefixes = nil, + }, + FilterMeta = { + Coalitions = { + red = coalition.side.RED, + blue = coalition.side.BLUE, + neutral = coalition.side.NEUTRAL, + }, + Categories = { + plane = Group.Category.AIRPLANE, + helicopter = Group.Category.HELICOPTER, + ground = Group.Category.GROUND_UNIT, + ship = Group.Category.SHIP, + structure = Group.Category.STRUCTURE, + }, + }, +} + + +--- Creates a new GROUPSET object, building a set of groups belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #GROUPSET self +-- @return #GROUPSET +-- @usage +-- -- Define a new GROUPSET Object. This DBObject will contain a reference to all alive GROUPS. +-- DBObject = GROUPSET:New() +function GROUPSET:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, SET:New( _DATABASE.GROUPS ) ) + + return self +end + + +--- Finds a Unit based on the Unit Name. +-- @param #GROUPSET self +-- @param #string GroupName +-- @return Group#GROUP The found Unit. +function GROUPSET:FindUnit( GroupName ) + + local GroupFound = self.Set[GroupName] + return GroupFound +end + + + +--- Builds a set of groups of coalitions. +-- Possible current coalitions are red, blue and neutral. +-- @param #GROUPSET self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #GROUPSET self +function GROUPSET:FilterCoalitions( Coalitions ) + if not self.Filter.Coalitions then + self.Filter.Coalitions = {} + end + if type( Coalitions ) ~= "table" then + Coalitions = { Coalitions } + end + for CoalitionID, Coalition in pairs( Coalitions ) do + self.Filter.Coalitions[Coalition] = Coalition + end + return self +end + + +--- Builds a set of groups out of categories. +-- Possible current categories are plane, helicopter, ground, ship. +-- @param #GROUPSET self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #GROUPSET self +function GROUPSET:FilterCategories( Categories ) + if not self.Filter.Categories then + self.Filter.Categories = {} + end + if type( Categories ) ~= "table" then + Categories = { Categories } + end + for CategoryID, Category in pairs( Categories ) do + self.Filter.Categories[Category] = Category + end + return self +end + +--- Builds a set of groups of defined countries. +-- Possible current countries are those known within DCS world. +-- @param #GROUPSET self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #GROUPSET self +function GROUPSET:FilterCountries( Countries ) + if not self.Filter.Countries then + self.Filter.Countries = {} + end + if type( Countries ) ~= "table" then + Countries = { Countries } + end + for CountryID, Country in pairs( Countries ) do + self.Filter.Countries[Country] = Country + end + return self +end + + +--- Builds a set of groups of defined unit prefixes. +-- All the groups starting with the given prefixes will be included within the set. +-- @param #GROUPSET self +-- @param #string Prefixes The prefix of which the group name starts with. +-- @return #GROUPSET self +function GROUPSET:FilterPrefixes( Prefixes ) + if not self.Filter.GroupPrefixes then + self.Filter.GroupPrefixes = {} + end + if type( Prefixes ) ~= "table" then + Prefixes = { Prefixes } + end + for PrefixID, Prefix in pairs( Prefixes ) do + self.Filter.GroupPrefixes[Prefix] = Prefix + end + return self +end + + +--- Starts the filtering. +-- @param #GROUPSET self +-- @return #GROUPSET self +function GROUPSET:FilterStart() + + if _DATABASE then + self:_FilterStart() + end + + return self +end + +--- Handles the Database to check on an event (birth) that the Object was added in the Database. +-- This is required, because sometimes the _DATABASE birth event gets called later than the SET birth event! +-- @param #GROUPSET self +-- @param Event#EVENTDATA Event +-- @return #string The name of the GROUP +-- @return #table The GROUP +function GROUPSET:AddInDatabase( Event ) + self:F3( { Event } ) + + if not self.Database[Event.IniDCSGroupName] then + self.Database[Event.IniDCSGroupName] = GROUP:Register( Event.IniDCSGroupName ) + self:T3( self.Database[Event.IniDCSGroupName] ) + end + + return Event.IniDCSGroupName, self.Database[Event.IniDCSGroupName] +end + +--- Handles the Database to check on any event that Object exists in the Database. +-- This is required, because sometimes the _DATABASE event gets called later than the SET event or vise versa! +-- @param #GROUPSET self +-- @param Event#EVENTDATA Event +-- @return #string The name of the GROUP +-- @return #table The GROUP +function GROUPSET:FindInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSGroupName, self.Database[Event.IniDCSGroupName] +end + +--- Interate the GROUPSET and call an interator function for each **alive** GROUP, providing the GROUP and optional parameters. +-- @param #GROUPSET self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the GROUPSET. The function needs to accept a GROUP parameter. +-- @return #GROUPSET self +function GROUPSET:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set ) + + return self +end + + +----- Interate the GROUPSET and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. +---- @param #GROUPSET self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the GROUPSET. The function needs to accept a GROUP parameter. +---- @return #GROUPSET self +--function GROUPSET:ForEachPlayer( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the GROUPSET and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #GROUPSET self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the GROUPSET. The function needs to accept a CLIENT parameter. +---- @return #GROUPSET self +--function GROUPSET:ForEachClient( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end + + +--- +-- @param #GROUPSET self +-- @param Group#GROUP MooseGroup +-- @return #GROUPSET self +function GROUPSET:IsIncludeObject( MooseGroup ) + self:F2( MooseGroup ) + local MooseGroupInclude = true + + if self.Filter.Coalitions then + local MooseGroupCoalition = false + for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do + self:T3( { "Coalition:", MooseGroup:GetCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) + if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == MooseGroup:GetCoalition() then + MooseGroupCoalition = true + end + end + MooseGroupInclude = MooseGroupInclude and MooseGroupCoalition + end + + if self.Filter.Categories then + local MooseGroupCategory = false + for CategoryID, CategoryName in pairs( self.Filter.Categories ) do + self:T3( { "Category:", MooseGroup:GetCategory(), self.FilterMeta.Categories[CategoryName], CategoryName } ) + if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == MooseGroup:GetCategory() then + MooseGroupCategory = true + end + end + MooseGroupInclude = MooseGroupInclude and MooseGroupCategory + end + + if self.Filter.Countries then + local MooseGroupCountry = false + for CountryID, CountryName in pairs( self.Filter.Countries ) do + self:T3( { "Country:", MooseGroup:GetCountry(), CountryName } ) + if country.id[CountryName] == MooseGroup:GetCountry() then + MooseGroupCountry = true + end + end + MooseGroupInclude = MooseGroupInclude and MooseGroupCountry + end + + if self.Filter.GroupPrefixes then + local MooseGroupPrefix = false + for GroupPrefixId, GroupPrefix in pairs( self.Filter.GroupPrefixes ) do + self:T3( { "Prefix:", string.find( MooseGroup:GetName(), GroupPrefix, 1 ), GroupPrefix } ) + if string.find( MooseGroup:GetName(), GroupPrefix, 1 ) then + MooseGroupPrefix = true + end + end + MooseGroupInclude = MooseGroupInclude and MooseGroupPrefix + end + + self:T2( MooseGroupInclude ) + return MooseGroupInclude +end + + diff --git a/Moose Development/Moose/Set.lua b/Moose Development/Moose/Set.lua index 0ac45ae1a..6b0ba0260 100644 --- a/Moose Development/Moose/Set.lua +++ b/Moose Development/Moose/Set.lua @@ -75,66 +75,10 @@ Include.File( "Client" ) -- @extends Base#BASE SET = { ClassName = "SET", - Templates = { - Units = {}, - Groups = {}, - ClientsByName = {}, - ClientsByID = {}, - }, - DCSUnits = {}, - DCSUnitsAlive = {}, - DCSGroups = {}, - DCSGroupsAlive = {}, - Units = {}, - UnitsAlive = {}, - Groups = {}, - GroupsAlive = {}, - NavPoints = {}, - Statics = {}, - Players = {}, - PlayersAlive = {}, - Clients = {}, - ClientsAlive = {}, - Filter = { - Coalitions = nil, - Categories = nil, - Types = nil, - Countries = nil, - UnitPrefixes = nil, - GroupPrefixes = nil, - }, - FilterMeta = { - Coalitions = { - red = coalition.side.RED, - blue = coalition.side.BLUE, - neutral = coalition.side.NEUTRAL, - }, - Categories = { - plane = Unit.Category.AIRPLANE, - helicopter = Unit.Category.HELICOPTER, - ground = Unit.Category.GROUND_UNIT, - ship = Unit.Category.SHIP, - structure = Unit.Category.STRUCTURE, - }, - }, + Set = {}, + Database = {}, } -local _DATABASECoalition = - { - [1] = "Red", - [2] = "Blue", - } - -local _DATABASECategory = - { - [Unit.Category.AIRPLANE] = "Plane", - [Unit.Category.HELICOPTER] = "Helicopter", - [Unit.Category.GROUND_UNIT] = "Vehicle", - [Unit.Category.SHIP] = "Ship", - [Unit.Category.STRUCTURE] = "Structure", - } - - --- Creates a new SET object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. -- @param #SET self -- @return #SET @@ -146,21 +90,7 @@ function SET:New( Database ) -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) - _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) - _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) - - - -- Add SET with registered clients and already alive players - - -- Follow alive players and clients - _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) - _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) - - self.Collection = Database - - self:_RegisterSet() - self:_RegisterPlayers() + self.Database = Database return self end @@ -190,7 +120,7 @@ end -- @return #SET self function SET:_FilterStart() - for ObjectName, Object in pairs( self.Collection ) do + for ObjectName, Object in pairs( self.Database ) do if self:IsIncludeObject( Object ) then self:E( { "Adding Object:", ObjectName } ) @@ -198,43 +128,53 @@ function SET:_FilterStart() end end - return self -end - - - ---- Private method that registers all alive players in the mission. --- @param #SET self --- @return #SET self -function SET:_RegisterPlayers() - - local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - for UnitId, UnitData in pairs( CoalitionData ) do - self:T3( { "UnitData:", UnitData } ) - if UnitData and UnitData:isExist() then - local UnitName = UnitData:getName() - if not self.PlayersAlive[UnitName] then - self:E( { "Add player for unit:", UnitName, UnitData:getPlayerName() } ) - self.PlayersAlive[UnitName] = UnitData:getPlayerName() - end - end - end - end + _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + + -- Follow alive players and clients +-- _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) +-- _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) + return self end + + +----- Private method that registers all alive players in the mission. +---- @param #SET self +---- @return #SET self +--function SET:_RegisterPlayers() +-- +-- local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } +-- for CoalitionId, CoalitionData in pairs( CoalitionsData ) do +-- for UnitId, UnitData in pairs( CoalitionData ) do +-- self:T3( { "UnitData:", UnitData } ) +-- if UnitData and UnitData:isExist() then +-- local UnitName = UnitData:getName() +-- if not self.PlayersAlive[UnitName] then +-- self:E( { "Add player for unit:", UnitName, UnitData:getPlayerName() } ) +-- self.PlayersAlive[UnitName] = UnitData:getPlayerName() +-- end +-- end +-- end +-- end +-- +-- return self +--end + --- Events --- Handles the OnBirth event for the Set. -- @param #SET self -- @param Event#EVENTDATA Event function SET:_EventOnBirth( Event ) - self:F( { Event } ) + self:F3( { Event } ) if Event.IniDCSUnit then local ObjectName, Object = self:AddInDatabase( Event ) + self:T3( ObjectName, Object ) if self:IsIncludeObject( Object ) then self:_Add( ObjectName, Object ) --self:_EventOnPlayerEnterUnit( Event ) @@ -246,7 +186,7 @@ end -- @param #SET self -- @param Event#EVENTDATA Event function SET:_EventOnDeadOrCrash( Event ) - self:F( { Event } ) + self:F3( { Event } ) if Event.IniDCSUnit then local ObjectName, Object = self:FindInDatabase( Event ) @@ -260,7 +200,7 @@ end ---- @param #SET self ---- @param Event#EVENTDATA Event --function SET:_EventOnPlayerEnterUnit( Event ) --- self:F( { Event } ) +-- self:F3( { Event } ) -- -- if Event.IniDCSUnit then -- if self:IsIncludeObject( Event.IniDCSUnit ) then @@ -277,7 +217,7 @@ end ---- @param #SET self ---- @param Event#EVENTDATA Event --function SET:_EventOnPlayerLeaveUnit( Event ) --- self:F( { Event } ) +-- self:F3( { Event } ) -- -- if Event.IniDCSUnit then -- if self:IsIncludeObject( Event.IniDCSUnit ) then @@ -297,7 +237,7 @@ end -- @param #function IteratorFunction The function that will be called when there is an alive player in the SET. -- @return #SET self function SET:ForEach( IteratorFunction, arg, Set ) - self:F( arg ) + self:F3( arg ) local function CoRoutine() local Count = 0 @@ -317,7 +257,7 @@ function SET:ForEach( IteratorFunction, arg, Set ) local function Schedule() local status, res = coroutine.resume( co ) - self:T( { status, res } ) + self:T3( { status, res } ) if status == false then error( res ) @@ -335,42 +275,42 @@ function SET:ForEach( IteratorFunction, arg, Set ) end ---- Interate the SET and call an interator function for each **alive** unit, providing the Unit and optional parameters. --- @param #SET self --- @param #function IteratorFunction The function that will be called when there is an alive unit in the SET. The function needs to accept a UNIT parameter. --- @return #SET self -function SET:ForEachDCSUnitAlive( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.DCSUnitsAlive ) - - return self -end - ---- Interate the SET and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. --- @param #SET self --- @param #function IteratorFunction The function that will be called when there is an alive player in the SET. The function needs to accept a UNIT parameter. --- @return #SET self -function SET:ForEachPlayer( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.PlayersAlive ) - - return self -end - - ---- Interate the SET and call an interator function for each client, providing the Client to the function and optional parameters. --- @param #SET self --- @param #function IteratorFunction The function that will be called when there is an alive player in the SET. The function needs to accept a CLIENT parameter. --- @return #SET self -function SET:ForEachClient( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.Clients ) - - return self -end +----- Interate the SET and call an interator function for each **alive** unit, providing the Unit and optional parameters. +---- @param #SET self +---- @param #function IteratorFunction The function that will be called when there is an alive unit in the SET. The function needs to accept a UNIT parameter. +---- @return #SET self +--function SET:ForEachDCSUnitAlive( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.DCSUnitsAlive ) +-- +-- return self +--end +-- +----- Interate the SET and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. +---- @param #SET self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET. The function needs to accept a UNIT parameter. +---- @return #SET self +--function SET:ForEachPlayer( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the SET and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #SET self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET. The function needs to accept a CLIENT parameter. +---- @return #SET self +--function SET:ForEachClient( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end --- Decides whether to include the Object @@ -378,53 +318,22 @@ end -- @param #table Object -- @return #SET self function SET:IsIncludeObject( Object ) - self:F( Object ) + self:F3( Object ) return true end - ---- +--- Flushes the current SET contents in the log ... (for debug reasons). -- @param #SET self --- @param DCSUnit#Unit DCSUnit -- @return #SET self -function SET:_IsAliveDCSUnit( DCSUnit ) - self:F( DCSUnit ) - local DCSUnitAlive = false - if DCSUnit and DCSUnit:isExist() and DCSUnit:isActive() then - if self.DCSUnits[DCSUnit:getName()] then - DCSUnitAlive = true - end +function SET:Flush() + self:F3() + + local ObjectNames = "" + for ObjectName, Object in pairs( self.Set ) do + ObjectNames = ObjectNames .. ObjectName .. ", " end - self:T( DCSUnitAlive ) - return DCSUnitAlive -end - ---- --- @param #SET self --- @param DCSGroup#Group DCSGroup --- @return #SET self -function SET:_IsAliveDCSGroup( DCSGroup ) - self:F( DCSGroup ) - local DCSGroupAlive = false - if DCSGroup and DCSGroup:isExist() then - if self.DCSGroups[DCSGroup:getName()] then - DCSGroupAlive = true - end - end - self:T( DCSGroupAlive ) - return DCSGroupAlive -end - - ---- Traces the current SET contents in the log ... (for debug reasons). --- @param #SET self --- @return #SET self -function SET:TraceDatabase() - self:F() - - self:T( { "DCSUnits:", self.DCSUnits } ) - self:T( { "DCSUnitsAlive:", self.DCSUnitsAlive } ) + self:T( { "Objects in Set:", ObjectNames } ) end diff --git a/Moose Development/Moose/UnitSet.lua b/Moose Development/Moose/UnitSet.lua index 188d59a73..5bd542727 100644 --- a/Moose Development/Moose/UnitSet.lua +++ b/Moose Development/Moose/UnitSet.lua @@ -10,12 +10,6 @@ -- * Unit types -- * Starting with certain prefix strings. -- --- This list will grow over time. Planned developments are to include filters and iterators. --- Additional filters will be added around @{Zone#ZONEs}, Radiuses, Active players, ... --- More iterators will be implemented in the near future ... --- --- Administers the Initial Sets of the Mission Templates as defined within the Mission Editor. --- -- UNITSET construction methods: -- ================================= -- Create a new UNITSET object with the @{#UNITSET.New} method: @@ -56,16 +50,13 @@ -- * @{#UNITSET.ForEachUnitInGroup}: Calls a function for each group contained within the UNITSET. -- * @{#UNITSET.ForEachUnitInZone}: Calls a function for each unit within a certain zone contained within the UNITSET. -- --- @module Set +-- @module UnitSet -- @author FlightControl Include.File( "Routines" ) Include.File( "Base" ) -Include.File( "Menu" ) -Include.File( "Group" ) Include.File( "Unit" ) -Include.File( "Event" ) -Include.File( "Client" ) +Include.File( "Set" ) --- UNITSET class @@ -97,21 +88,6 @@ UNITSET = { }, } -local _DATABASECoalition = - { - [1] = "Red", - [2] = "Blue", - } - -local _DATABASECategory = - { - [Unit.Category.AIRPLANE] = "Plane", - [Unit.Category.HELICOPTER] = "Helicopter", - [Unit.Category.GROUND_UNIT] = "Vehicle", - [Unit.Category.SHIP] = "Ship", - [Unit.Category.STRUCTURE] = "Structure", - } - --- Creates a new UNITSET object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. -- @param #UNITSET self @@ -122,42 +98,25 @@ local _DATABASECategory = function UNITSET:New() -- Inherits from BASE - local self = BASE:Inherit( self, SET:New( _DATABASE.Units ) ) - - - --- -- Follow alive players and clients --- _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) --- _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) - --- self:_RegisterPlayers() + local self = BASE:Inherit( self, SET:New( _DATABASE.UNITS ) ) return self end + --- Finds a Unit based on the Unit Name. -- @param #UNITSET self -- @param #string UnitName -- @return Unit#UNIT The found Unit. function UNITSET:FindUnit( UnitName ) - local UnitFound = self.Units[UnitName] + local UnitFound = self.Set[UnitName] return UnitFound end ---- Finds a Unit based on the Unit Name. --- @param #UNITSET self --- @param Unit#UNIT UnitName --- @param Unit#UNIT UnitData --- @return Unit#UNIT The added Unit. -function UNITSET:_AddUnit( UnitName, UnitData ) - - self.Units[UnitName] = _DATABASE:FindUnit( UnitName ) -end - ---- Builds a set of units of coalitons. +--- Builds a set of units of coalitions. -- Possible current coalitions are red, blue and neutral. -- @param #UNITSET self -- @param #string Coalitions Can take the following values: "red", "blue", "neutral". @@ -252,23 +211,6 @@ function UNITSET:FilterPrefixes( Prefixes ) end ------ Builds a set of units of defined group prefixes. ----- All the units starting with the given group prefixes will be included within the set. ----- @param #UNITSET self ----- @param #string Prefixes The prefix of which the group name where the unit belongs to starts with. ----- @return #UNITSET self ---function UNITSET:FilterGroupPrefixes( Prefixes ) --- if not self.Filter.GroupPrefixes then --- self.Filter.GroupPrefixes = {} --- end --- if type( Prefixes ) ~= "table" then --- Prefixes = { Prefixes } --- end --- for PrefixID, Prefix in pairs( Prefixes ) do --- self.Filter.GroupPrefixes[Prefix] = Prefix --- end --- return self ---end --- Starts the filtering. @@ -277,173 +219,78 @@ end function UNITSET:FilterStart() if _DATABASE then - self:_FilterStart( self.DatabaseCollection ) + self:_FilterStart() end - FollowEventBirth( ) - - _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) - _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) - return self end ---- Events - ---- Handles the OnBirth event for the alive units set. +--- Handles the Database to check on an event (birth) that the Object was added in the Database. +-- This is required, because sometimes the _DATABASE birth event gets called later than the SET birth event! -- @param #UNITSET self -- @param Event#EVENTDATA Event -function UNITSET:_EventOnBirth( Event ) - self:F( { Event } ) +-- @return #string The name of the UNIT +-- @return #table The UNIT +function UNITSET:AddInDatabase( Event ) + self:F3( { Event } ) - if Event.IniDCSUnit then - if self:_IsIncludeUnit( Event.IniDCSUnit ) then - self.DCSUnits[Event.IniDCSUnitName] = Event.IniDCSUnit - self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit - self:_AddUnit( UNIT:Register( Event.IniDCSUnit ) ) - --self.Units[Event.IniDCSUnitName] = UNIT:Register( Event.IniDCSUnit ) - - --if not self.DCSGroups[Event.IniDCSGroupName] then - -- self.DCSGroups[Event.IniDCSGroupName] = Event.IniDCSGroupName - -- self.DCSGroupsAlive[Event.IniDCSGroupName] = Event.IniDCSGroupName - -- self.Groups[Event.IniDCSGroupName] = GROUP:New( Event.IniDCSGroup ) - --end - self:_EventOnPlayerEnterUnit( Event ) - end + if not self.Database[Event.IniDCSUnitName] then + self.Database[Event.IniDCSUnitName] = UNIT:Register( Event.IniDCSUnitName ) + self:T3( self.Database[Event.IniDCSUnitName] ) end + + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] end ---- Handles the OnDead or OnCrash event for alive units set. +--- Handles the Database to check on any event that Object exists in the Database. +-- This is required, because sometimes the _DATABASE event gets called later than the SET event or vise versa! -- @param #UNITSET self -- @param Event#EVENTDATA Event -function UNITSET:_EventOnDeadOrCrash( Event ) - self:F( { Event } ) +-- @return #string The name of the UNIT +-- @return #table The UNIT +function UNITSET:FindInDatabase( Event ) + self:F3( { Event } ) - if Event.IniDCSUnit then - if self.DCSUnitsAlive[Event.IniDCSUnitName] then - self.DCSUnits[Event.IniDCSUnitName] = nil - self.DCSUnitsAlive[Event.IniDCSUnitName] = nil - end - end + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] end ---- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +--- Interate the UNITSET and call an interator function for each **alive** UNIT, providing the UNIT and optional parameters. -- @param #UNITSET self --- @param Event#EVENTDATA Event -function UNITSET:_EventOnPlayerEnterUnit( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeUnit( Event.IniDCSUnit ) then - if not self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Add player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = Event.IniDCSUnit:getPlayerName() - self.ClientsAlive[Event.IniDCSUnitName] = _DATABASE.Clients[ Event.IniDCSUnitName ] - end - end - end -end - ---- Handles the OnPlayerLeaveUnit event to clean the active players table. --- @param #UNITSET self --- @param Event#EVENTDATA Event -function UNITSET:_EventOnPlayerLeaveUnit( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeUnit( Event.IniDCSUnit ) then - if self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Cleaning player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = nil - self.ClientsAlive[Event.IniDCSUnitName] = nil - end - end - end -end - ---- Iterators - ---- Interate the UNITSET and call an interator function for the given set, providing the Object for each element within the set and optional parameters. --- @param #UNITSET self --- @param #function IteratorFunction The function that will be called when there is an alive player in the UNITSET. +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the UNITSET. The function needs to accept a UNIT parameter. -- @return #UNITSET self -function UNITSET:ForEach( IteratorFunction, arg, Set ) - self:F( arg ) +function UNITSET:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) - local function CoRoutine() - local Count = 0 - for ObjectID, Object in pairs( Set ) do - self:T2( Object ) - IteratorFunction( Object, unpack( arg ) ) - Count = Count + 1 - if Count % 10 == 0 then - coroutine.yield( false ) - end - end - return true - end - - local co = coroutine.create( CoRoutine ) - - local function Schedule() - - local status, res = coroutine.resume( co ) - self:T( { status, res } ) - - if status == false then - error( res ) - end - if res == false then - return true -- resume next time the loop - end - - return false - end - - local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 ) - - return self -end - - ---- Interate the UNITSET and call an interator function for each **alive** unit, providing the Unit and optional parameters. --- @param #UNITSET self --- @param #function IteratorFunction The function that will be called when there is an alive unit in the UNITSET. The function needs to accept a UNIT parameter. --- @return #UNITSET self -function UNITSET:ForEachDCSUnitAlive( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.DCSUnitsAlive ) + self:ForEach( IteratorFunction, arg, self.Set ) return self end ---- Interate the UNITSET and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. --- @param #UNITSET self --- @param #function IteratorFunction The function that will be called when there is an alive player in the UNITSET. The function needs to accept a UNIT parameter. --- @return #UNITSET self -function UNITSET:ForEachPlayer( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.PlayersAlive ) - - return self -end - - ---- Interate the UNITSET and call an interator function for each client, providing the Client to the function and optional parameters. --- @param #UNITSET self --- @param #function IteratorFunction The function that will be called when there is an alive player in the UNITSET. The function needs to accept a CLIENT parameter. --- @return #UNITSET self -function UNITSET:ForEachClient( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.Clients ) - - return self -end +----- Interate the UNITSET and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. +---- @param #UNITSET self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the UNITSET. The function needs to accept a UNIT parameter. +---- @return #UNITSET self +--function UNITSET:ForEachPlayer( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the UNITSET and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #UNITSET self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the UNITSET. The function needs to accept a CLIENT parameter. +---- @return #UNITSET self +--function UNITSET:ForEachClient( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end --- @@ -451,13 +298,13 @@ end -- @param Unit#UNIT MUnit -- @return #UNITSET self function UNITSET:IsIncludeObject( MUnit ) - self:F( MUnit ) + self:F2( MUnit ) local MUnitInclude = true if self.Filter.Coalitions then local MUnitCoalition = false for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do - self:T( { "Coalition:", MUnit:GetCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) + self:T3( { "Coalition:", MUnit:GetCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == MUnit:GetCoalition() then MUnitCoalition = true end @@ -468,7 +315,7 @@ function UNITSET:IsIncludeObject( MUnit ) if self.Filter.Categories then local MUnitCategory = false for CategoryID, CategoryName in pairs( self.Filter.Categories ) do - self:T( { "Category:", MUnit:GetDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) + self:T3( { "Category:", MUnit:GetDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == MUnit:GetDesc().category then MUnitCategory = true end @@ -479,7 +326,7 @@ function UNITSET:IsIncludeObject( MUnit ) if self.Filter.Types then local MUnitType = false for TypeID, TypeName in pairs( self.Filter.Types ) do - self:T( { "Type:", MUnit:GetTypeName(), TypeName } ) + self:T3( { "Type:", MUnit:GetTypeName(), TypeName } ) if TypeName == MUnit:GetTypeName() then MUnitType = true end @@ -490,7 +337,7 @@ function UNITSET:IsIncludeObject( MUnit ) if self.Filter.Countries then local MUnitCountry = false for CountryID, CountryName in pairs( self.Filter.Countries ) do - self:T( { "Country:", MUnit:GetCountry(), CountryName } ) + self:T3( { "Country:", MUnit:GetCountry(), CountryName } ) if country.id[CountryName] == MUnit:GetCountry() then MUnitCountry = true end @@ -501,7 +348,7 @@ function UNITSET:IsIncludeObject( MUnit ) if self.Filter.UnitPrefixes then local MUnitPrefix = false for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do - self:T( { "Unit Prefix:", string.find( MUnit:GetName(), UnitPrefix, 1 ), UnitPrefix } ) + self:T3( { "Prefix:", string.find( MUnit:GetName(), UnitPrefix, 1 ), UnitPrefix } ) if string.find( MUnit:GetName(), UnitPrefix, 1 ) then MUnitPrefix = true end @@ -509,7 +356,7 @@ function UNITSET:IsIncludeObject( MUnit ) MUnitInclude = MUnitInclude and MUnitPrefix end - self:T( MUnitInclude ) + self:T2( MUnitInclude ) return MUnitInclude end diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index 8f1d04ce8..d4c566d6b 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,5 +1,6 @@ -env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160526_1413' ) +env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) +env.info( 'Moose Generation Timestamp: 20160527_1003' ) + local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) @@ -11,9 +12,27 @@ Include.Path = function() end Include.File = function( IncludeFile ) + if not Include.Files[ IncludeFile ] then + Include.Files[IncludeFile] = IncludeFile + env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath ) + local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) ) + if f == nil then + env.info( "Include:" .. IncludeFile .. " from " .. Include.MissionPath ) + local f = assert( base.loadfile( Include.MissionPath .. IncludeFile .. ".lua" ) ) + if f == nil then + error ("Could not load MOOSE file " .. IncludeFile .. ".lua" ) + else + env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.MissionPath ) + return f() + end + else + env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath ) + return f() + end + end end -Include.ProgramPath = "Scripts/Moose/Moose/" +Include.ProgramPath = "Scripts/Moose/" Include.MissionPath = Include.Path() env.info( "Include.ProgramPath = " .. Include.ProgramPath) @@ -23,16701 +42,4 @@ Include.Files = {} Include.File( "Moose" ) -env.info("Loaded MOOSE Include Engine") ---- Various routines --- @module routines --- @author Flightcontrol - ---Include.File( "Trace" ) ---Include.File( "Message" ) - - -env.setErrorMessageBoxEnabled(false) - ---- Extract of MIST functions. --- @author Grimes - -routines = {} - - --- don't change these -routines.majorVersion = 3 -routines.minorVersion = 3 -routines.build = 22 - ------------------------------------------------------------------------------------------------------------------ - ----------------------------------------------------------------------------------------------- --- Utils- conversion, Lua utils, etc. -routines.utils = {} - ---from http://lua-users.org/wiki/CopyTable -routines.utils.deepCopy = function(object) - local lookup_table = {} - local function _copy(object) - if type(object) ~= "table" then - return object - elseif lookup_table[object] then - return lookup_table[object] - end - local new_table = {} - lookup_table[object] = new_table - for index, value in pairs(object) do - new_table[_copy(index)] = _copy(value) - end - return setmetatable(new_table, getmetatable(object)) - end - local objectreturn = _copy(object) - return objectreturn -end - - --- porting in Slmod's serialize_slmod2 -routines.utils.oneLineSerialize = function(tbl) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function - - lookup_table = {} - - local function _Serialize( tbl ) - - if type(tbl) == 'table' then --function only works for tables! - - if lookup_table[tbl] then - return lookup_table[object] - end - - local tbl_str = {} - - lookup_table[tbl] = tbl_str - - tbl_str[#tbl_str + 1] = '{' - - for ind,val in pairs(tbl) do -- serialize its fields - local ind_str = {} - if type(ind) == "number" then - ind_str[#ind_str + 1] = '[' - ind_str[#ind_str + 1] = tostring(ind) - ind_str[#ind_str + 1] = ']=' - else --must be a string - ind_str[#ind_str + 1] = '[' - ind_str[#ind_str + 1] = routines.utils.basicSerialize(ind) - ind_str[#ind_str + 1] = ']=' - end - - local val_str = {} - if ((type(val) == 'number') or (type(val) == 'boolean')) then - val_str[#val_str + 1] = tostring(val) - val_str[#val_str + 1] = ',' - tbl_str[#tbl_str + 1] = table.concat(ind_str) - tbl_str[#tbl_str + 1] = table.concat(val_str) - elseif type(val) == 'string' then - val_str[#val_str + 1] = routines.utils.basicSerialize(val) - val_str[#val_str + 1] = ',' - tbl_str[#tbl_str + 1] = table.concat(ind_str) - tbl_str[#tbl_str + 1] = table.concat(val_str) - elseif type(val) == 'nil' then -- won't ever happen, right? - val_str[#val_str + 1] = 'nil,' - tbl_str[#tbl_str + 1] = table.concat(ind_str) - tbl_str[#tbl_str + 1] = table.concat(val_str) - elseif type(val) == 'table' then - if ind == "__index" then - -- tbl_str[#tbl_str + 1] = "__index" - -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it - else - - val_str[#val_str + 1] = _Serialize(val) - val_str[#val_str + 1] = ',' --I think this is right, I just added it - tbl_str[#tbl_str + 1] = table.concat(ind_str) - tbl_str[#tbl_str + 1] = table.concat(val_str) - end - elseif type(val) == 'function' then - -- tbl_str[#tbl_str + 1] = "function " .. tostring(ind) - -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it - else --- env.info('unable to serialize value type ' .. routines.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind)) --- env.info( debug.traceback() ) - end - - end - tbl_str[#tbl_str + 1] = '}' - return table.concat(tbl_str) - else - return tostring(tbl) - end - end - - local objectreturn = _Serialize(tbl) - return objectreturn -end - ---porting in Slmod's "safestring" basic serialize -routines.utils.basicSerialize = function(s) - if s == nil then - return "\"\"" - else - if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then - return tostring(s) - elseif type(s) == 'string' then - s = string.format('%q', s) - return s - end - end -end - - -routines.utils.toDegree = function(angle) - return angle*180/math.pi -end - -routines.utils.toRadian = function(angle) - return angle*math.pi/180 -end - -routines.utils.metersToNM = function(meters) - return meters/1852 -end - -routines.utils.metersToFeet = function(meters) - return meters/0.3048 -end - -routines.utils.NMToMeters = function(NM) - return NM*1852 -end - -routines.utils.feetToMeters = function(feet) - return feet*0.3048 -end - -routines.utils.mpsToKnots = function(mps) - return mps*3600/1852 -end - -routines.utils.mpsToKmph = function(mps) - return mps*3.6 -end - -routines.utils.knotsToMps = function(knots) - return knots*1852/3600 -end - -routines.utils.kmphToMps = function(kmph) - return kmph/3.6 -end - -function routines.utils.makeVec2(Vec3) - if Vec3.z then - return {x = Vec3.x, y = Vec3.z} - else - return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. - end -end - -function routines.utils.makeVec3(Vec2, y) - if not Vec2.z then - if not y then - y = 0 - end - return {x = Vec2.x, y = y, z = Vec2.y} - else - return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. - end -end - -function routines.utils.makeVec3GL(Vec2, offset) - local adj = offset or 0 - - if not Vec2.z then - return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} - else - return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} - end -end - -routines.utils.zoneToVec3 = function(zone) - local new = {} - if type(zone) == 'table' and zone.point then - new.x = zone.point.x - new.y = zone.point.y - new.z = zone.point.z - return new - elseif type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - if zone then - new.x = zone.point.x - new.y = zone.point.y - new.z = zone.point.z - return new - end - end -end - --- gets heading-error corrected direction from point along vector vec. -function routines.utils.getDir(vec, point) - local dir = math.atan2(vec.z, vec.x) - dir = dir + routines.getNorthCorrection(point) - if dir < 0 then - dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi - end - return dir -end - --- gets distance in meters between two points (2 dimensional) -function routines.utils.get2DDist(point1, point2) - point1 = routines.utils.makeVec3(point1) - point2 = routines.utils.makeVec3(point2) - return routines.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) -end - --- gets distance in meters between two points (3 dimensional) -function routines.utils.get3DDist(point1, point2) - return routines.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) -end - - - --- From http://lua-users.org/wiki/SimpleRound --- use negative idp for rounding ahead of decimal place, positive for rounding after decimal place -routines.utils.round = function(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end - --- porting in Slmod's dostring -routines.utils.dostring = function(s) - local f, err = loadstring(s) - if f then - return true, f() - else - return false, err - end -end - - ---3D Vector manipulation -routines.vec = {} - -routines.vec.add = function(vec1, vec2) - return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} -end - -routines.vec.sub = function(vec1, vec2) - return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} -end - -routines.vec.scalarMult = function(vec, mult) - return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} -end - -routines.vec.scalar_mult = routines.vec.scalarMult - -routines.vec.dp = function(vec1, vec2) - return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z -end - -routines.vec.cp = function(vec1, vec2) - return { x = vec1.y*vec2.z - vec1.z*vec2.y, y = vec1.z*vec2.x - vec1.x*vec2.z, z = vec1.x*vec2.y - vec1.y*vec2.x} -end - -routines.vec.mag = function(vec) - return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 -end - -routines.vec.getUnitVec = function(vec) - local mag = routines.vec.mag(vec) - return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } -end - -routines.vec.rotateVec2 = function(vec2, theta) - return { x = vec2.x*math.cos(theta) - vec2.y*math.sin(theta), y = vec2.x*math.sin(theta) + vec2.y*math.cos(theta)} -end ---------------------------------------------------------------------------------------------------------------------------- - - - - --- acc- the accuracy of each easting/northing. 0, 1, 2, 3, 4, or 5. -routines.tostringMGRS = function(MGRS, acc) - if acc == 0 then - return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph - else - return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Easting/(10^(5-acc)), 0)) - .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Northing/(10^(5-acc)), 0)) - end -end - ---[[acc: -in DM: decimal point of minutes. -In DMS: decimal point of seconds. -position after the decimal of the least significant digit: -So: -42.32 - acc of 2. -]] -routines.tostringLL = function(lat, lon, acc, DMS) - - local latHemi, lonHemi - if lat > 0 then - latHemi = 'N' - else - latHemi = 'S' - end - - if lon > 0 then - lonHemi = 'E' - else - lonHemi = 'W' - end - - lat = math.abs(lat) - lon = math.abs(lon) - - local latDeg = math.floor(lat) - local latMin = (lat - latDeg)*60 - - local lonDeg = math.floor(lon) - local lonMin = (lon - lonDeg)*60 - - if DMS then -- degrees, minutes, and seconds. - local oldLatMin = latMin - latMin = math.floor(latMin) - local latSec = routines.utils.round((oldLatMin - latMin)*60, acc) - - local oldLonMin = lonMin - lonMin = math.floor(lonMin) - local lonSec = routines.utils.round((oldLonMin - lonMin)*60, acc) - - if latSec == 60 then - latSec = 0 - latMin = latMin + 1 - end - - if lonSec == 60 then - lonSec = 0 - lonMin = lonMin + 1 - end - - local secFrmtStr -- create the formatting string for the seconds place - if acc <= 0 then -- no decimal place. - secFrmtStr = '%02d' - else - local width = 3 + acc -- 01.310 - that's a width of 6, for example. - secFrmtStr = '%0' .. width .. '.' .. acc .. 'f' - end - - return string.format('%02d', latDeg) .. ' ' .. string.format('%02d', latMin) .. '\' ' .. string.format(secFrmtStr, latSec) .. '"' .. latHemi .. ' ' - .. string.format('%02d', lonDeg) .. ' ' .. string.format('%02d', lonMin) .. '\' ' .. string.format(secFrmtStr, lonSec) .. '"' .. lonHemi - - else -- degrees, decimal minutes. - latMin = routines.utils.round(latMin, acc) - lonMin = routines.utils.round(lonMin, acc) - - if latMin == 60 then - latMin = 0 - latDeg = latDeg + 1 - end - - if lonMin == 60 then - lonMin = 0 - lonDeg = lonDeg + 1 - end - - local minFrmtStr -- create the formatting string for the minutes place - if acc <= 0 then -- no decimal place. - minFrmtStr = '%02d' - else - local width = 3 + acc -- 01.310 - that's a width of 6, for example. - minFrmtStr = '%0' .. width .. '.' .. acc .. 'f' - end - - return string.format('%02d', latDeg) .. ' ' .. string.format(minFrmtStr, latMin) .. '\'' .. latHemi .. ' ' - .. string.format('%02d', lonDeg) .. ' ' .. string.format(minFrmtStr, lonMin) .. '\'' .. lonHemi - - end -end - ---[[ required: az - radian - required: dist - meters - optional: alt - meters (set to false or nil if you don't want to use it). - optional: metric - set true to get dist and alt in km and m. - precision will always be nearest degree and NM or km.]] -routines.tostringBR = function(az, dist, alt, metric) - az = routines.utils.round(routines.utils.toDegree(az), 0) - - if metric then - dist = routines.utils.round(dist/1000, 2) - else - dist = routines.utils.round(routines.utils.metersToNM(dist), 2) - end - - local s = string.format('%03d', az) .. ' for ' .. dist - - if alt then - if metric then - s = s .. ' at ' .. routines.utils.round(alt, 0) - else - s = s .. ' at ' .. routines.utils.round(routines.utils.metersToFeet(alt), 0) - end - end - return s -end - -routines.getNorthCorrection = function(point) --gets the correction needed for true north - if not point.z then --Vec2; convert to Vec3 - point.z = point.y - point.y = 0 - end - local lat, lon = coord.LOtoLL(point) - local north_posit = coord.LLtoLO(lat + 1, lon) - return math.atan2(north_posit.z - point.z, north_posit.x - point.x) -end - - --- the main area -do - -- THE MAIN FUNCTION -- Accessed 100 times/sec. - routines.main = function() - timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) --reschedule first in case of Lua error - ---------------------------------------------------------------------------------------------------------- - --area to add new stuff in - - routines.do_scheduled_functions() - end -- end of routines.main - - timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) - -end - - -do - local idNum = 0 - - --Simplified event handler - routines.addEventHandler = function(f) --id is optional! - local handler = {} - idNum = idNum + 1 - handler.id = idNum - handler.f = f - handler.onEvent = function(self, event) - self.f(event) - end - world.addEventHandler(handler) - end - - routines.removeEventHandler = function(id) - for key, handler in pairs(world.eventHandlers) do - if handler.id and handler.id == id then - world.eventHandlers[key] = nil - return true - end - end - return false - end -end - --- need to return a Vec3 or Vec2? -function routines.getRandPointInCircle(point, radius, innerRadius) - local theta = 2*math.pi*math.random() - local rad = math.random() + math.random() - if rad > 1 then - rad = 2 - rad - end - - local radMult - if innerRadius and innerRadius <= radius then - radMult = (radius - innerRadius)*rad + innerRadius - else - radMult = radius*rad - end - - if not point.z then --might as well work with vec2/3 - point.z = point.y - end - - local rndCoord - if radius > 0 then - rndCoord = {x = math.cos(theta)*radMult + point.x, y = math.sin(theta)*radMult + point.z} - else - rndCoord = {x = point.x, y = point.z} - end - return rndCoord -end - -routines.goRoute = function(group, path) - local misTask = { - id = 'Mission', - params = { - route = { - points = routines.utils.deepCopy(path), - }, - }, - } - if type(group) == 'string' then - group = Group.getByName(group) - end - local groupCon = group:getController() - if groupCon then - groupCon:setTask(misTask) - return true - end - - Controller.setTask(groupCon, misTask) - return false -end - - --- Useful atomic functions from mist, ported. - -routines.ground = {} -routines.fixedWing = {} -routines.heli = {} - -routines.ground.buildWP = function(point, overRideForm, overRideSpeed) - - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - local form, speed - - if point.speed and not overRideSpeed then - wp.speed = point.speed - elseif type(overRideSpeed) == 'number' then - wp.speed = overRideSpeed - else - wp.speed = routines.utils.kmphToMps(20) - end - - if point.form and not overRideForm then - form = point.form - else - form = overRideForm - end - - if not form then - wp.action = 'Cone' - else - form = string.lower(form) - if form == 'off_road' or form == 'off road' then - wp.action = 'Off Road' - elseif form == 'on_road' or form == 'on road' then - wp.action = 'On Road' - elseif form == 'rank' or form == 'line_abrest' or form == 'line abrest' or form == 'lineabrest'then - wp.action = 'Rank' - elseif form == 'cone' then - wp.action = 'Cone' - elseif form == 'diamond' then - wp.action = 'Diamond' - elseif form == 'vee' then - wp.action = 'Vee' - elseif form == 'echelon_left' or form == 'echelon left' or form == 'echelonl' then - wp.action = 'EchelonL' - elseif form == 'echelon_right' or form == 'echelon right' or form == 'echelonr' then - wp.action = 'EchelonR' - else - wp.action = 'Cone' -- if nothing matched - end - end - - wp.type = 'Turning Point' - - return wp - -end - -routines.fixedWing.buildWP = function(point, WPtype, speed, alt, altType) - - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - - if alt and type(alt) == 'number' then - wp.alt = alt - else - wp.alt = 2000 - end - - if altType then - altType = string.lower(altType) - if altType == 'radio' or 'agl' then - wp.alt_type = 'RADIO' - elseif altType == 'baro' or 'asl' then - wp.alt_type = 'BARO' - end - else - wp.alt_type = 'RADIO' - end - - if point.speed then - speed = point.speed - end - - if point.type then - WPtype = point.type - end - - if not speed then - wp.speed = routines.utils.kmphToMps(500) - else - wp.speed = speed - end - - if not WPtype then - wp.action = 'Turning Point' - else - WPtype = string.lower(WPtype) - if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then - wp.action = 'Fly Over Point' - elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then - wp.action = 'Turning Point' - else - wp.action = 'Turning Point' - end - end - - wp.type = 'Turning Point' - return wp -end - -routines.heli.buildWP = function(point, WPtype, speed, alt, altType) - - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - - if alt and type(alt) == 'number' then - wp.alt = alt - else - wp.alt = 500 - end - - if altType then - altType = string.lower(altType) - if altType == 'radio' or 'agl' then - wp.alt_type = 'RADIO' - elseif altType == 'baro' or 'asl' then - wp.alt_type = 'BARO' - end - else - wp.alt_type = 'RADIO' - end - - if point.speed then - speed = point.speed - end - - if point.type then - WPtype = point.type - end - - if not speed then - wp.speed = routines.utils.kmphToMps(200) - else - wp.speed = speed - end - - if not WPtype then - wp.action = 'Turning Point' - else - WPtype = string.lower(WPtype) - if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then - wp.action = 'Fly Over Point' - elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then - wp.action = 'Turning Point' - else - wp.action = 'Turning Point' - end - end - - wp.type = 'Turning Point' - return wp -end - -routines.groupToRandomPoint = function(vars) - local group = vars.group --Required - local point = vars.point --required - local radius = vars.radius or 0 - local innerRadius = vars.innerRadius - local form = vars.form or 'Cone' - local heading = vars.heading or math.random()*2*math.pi - local headingDegrees = vars.headingDegrees - local speed = vars.speed or routines.utils.kmphToMps(20) - - - local useRoads - if not vars.disableRoads then - useRoads = true - else - useRoads = false - end - - local path = {} - - if headingDegrees then - heading = headingDegrees*math.pi/180 - end - - if heading >= 2*math.pi then - heading = heading - 2*math.pi - end - - local rndCoord = routines.getRandPointInCircle(point, radius, innerRadius) - - local offset = {} - local posStart = routines.getLeadPos(group) - - offset.x = routines.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) - offset.z = routines.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) - path[#path + 1] = routines.ground.buildWP(posStart, form, speed) - - - if useRoads == true and ((point.x - posStart.x)^2 + (point.z - posStart.z)^2)^0.5 > radius * 1.3 then - path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 11, ['z'] = posStart.z + 11}, 'off_road', speed) - path[#path + 1] = routines.ground.buildWP(posStart, 'on_road', speed) - path[#path + 1] = routines.ground.buildWP(offset, 'on_road', speed) - else - path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 25, ['z'] = posStart.z + 25}, form, speed) - end - - path[#path + 1] = routines.ground.buildWP(offset, form, speed) - path[#path + 1] = routines.ground.buildWP(rndCoord, form, speed) - - routines.goRoute(group, path) - - return -end - -routines.groupRandomDistSelf = function(gpData, dist, form, heading, speed) - local pos = routines.getLeadPos(gpData) - local fakeZone = {} - fakeZone.radius = dist or math.random(300, 1000) - fakeZone.point = {x = pos.x, y, pos.y, z = pos.z} - routines.groupToRandomZone(gpData, fakeZone, form, heading, speed) - - return -end - -routines.groupToRandomZone = function(gpData, zone, form, heading, speed) - if type(gpData) == 'string' then - gpData = Group.getByName(gpData) - end - - if type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - elseif type(zone) == 'table' and not zone.radius then - zone = trigger.misc.getZone(zone[math.random(1, #zone)]) - end - - if speed then - speed = routines.utils.kmphToMps(speed) - end - - local vars = {} - vars.group = gpData - vars.radius = zone.radius - vars.form = form - vars.headingDegrees = heading - vars.speed = speed - vars.point = routines.utils.zoneToVec3(zone) - - routines.groupToRandomPoint(vars) - - return -end - -routines.isTerrainValid = function(coord, terrainTypes) -- vec2/3 and enum or table of acceptable terrain types - if coord.z then - coord.y = coord.z - end - local typeConverted = {} - - if type(terrainTypes) == 'string' then -- if its a string it does this check - for constId, constData in pairs(land.SurfaceType) do - if string.lower(constId) == string.lower(terrainTypes) or string.lower(constData) == string.lower(terrainTypes) then - table.insert(typeConverted, constId) - end - end - elseif type(terrainTypes) == 'table' then -- if its a table it does this check - for typeId, typeData in pairs(terrainTypes) do - for constId, constData in pairs(land.SurfaceType) do - if string.lower(constId) == string.lower(typeData) or string.lower(constData) == string.lower(typeId) then - table.insert(typeConverted, constId) - end - end - end - end - for validIndex, validData in pairs(typeConverted) do - if land.getSurfaceType(coord) == land.SurfaceType[validData] then - return true - end - end - return false -end - -routines.groupToPoint = function(gpData, point, form, heading, speed, useRoads) - if type(point) == 'string' then - point = trigger.misc.getZone(point) - end - if speed then - speed = routines.utils.kmphToMps(speed) - end - - local vars = {} - vars.group = gpData - vars.form = form - vars.headingDegrees = heading - vars.speed = speed - vars.disableRoads = useRoads - vars.point = routines.utils.zoneToVec3(point) - routines.groupToRandomPoint(vars) - - return -end - - -routines.getLeadPos = function(group) - if type(group) == 'string' then -- group name - group = Group.getByName(group) - end - - local units = group:getUnits() - - local leader = units[1] - if not leader then -- SHOULD be good, but if there is a bug, this code future-proofs it then. - local lowestInd = math.huge - for ind, unit in pairs(units) do - if ind < lowestInd then - lowestInd = ind - leader = unit - end - end - end - if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... - return leader:getPosition().p - end -end - ---[[ vars for routines.getMGRSString: -vars.units - table of unit names (NOT unitNameTable- maybe this should change). -vars.acc - integer between 0 and 5, inclusive -]] -routines.getMGRSString = function(vars) - local units = vars.units - local acc = vars.acc or 5 - local avgPos = routines.getAvgPos(units) - if avgPos then - return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) - end -end - ---[[ vars for routines.getLLString -vars.units - table of unit names (NOT unitNameTable- maybe this should change). -vars.acc - integer, number of numbers after decimal place -vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. - - -]] -routines.getLLString = function(vars) - local units = vars.units - local acc = vars.acc or 3 - local DMS = vars.DMS - local avgPos = routines.getAvgPos(units) - if avgPos then - local lat, lon = coord.LOtoLL(avgPos) - return routines.tostringLL(lat, lon, acc, DMS) - end -end - ---[[ -vars.zone - table of a zone name. -vars.ref - vec3 ref point, maybe overload for vec2 as well? -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -]] -routines.getBRStringZone = function(vars) - local zone = trigger.misc.getZone( vars.zone ) - local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. - local alt = vars.alt - local metric = vars.metric - if zone then - local vec = {x = zone.point.x - ref.x, y = zone.point.y - ref.y, z = zone.point.z - ref.z} - local dir = routines.utils.getDir(vec, ref) - local dist = routines.utils.get2DDist(zone.point, ref) - if alt then - alt = zone.y - end - return routines.tostringBR(dir, dist, alt, metric) - else - env.info( 'routines.getBRStringZone: error: zone is nil' ) - end -end - ---[[ -vars.units- table of unit names (NOT unitNameTable- maybe this should change). -vars.ref - vec3 ref point, maybe overload for vec2 as well? -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -]] -routines.getBRString = function(vars) - local units = vars.units - local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. - local alt = vars.alt - local metric = vars.metric - local avgPos = routines.getAvgPos(units) - if avgPos then - local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} - local dir = routines.utils.getDir(vec, ref) - local dist = routines.utils.get2DDist(avgPos, ref) - if alt then - alt = avgPos.y - end - return routines.tostringBR(dir, dist, alt, metric) - end -end - - --- Returns the Vec3 coordinates of the average position of the concentration of units most in the heading direction. ---[[ vars for routines.getLeadingPos: -vars.units - table of unit names -vars.heading - direction -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -]] -routines.getLeadingPos = function(vars) - local units = vars.units - local heading = vars.heading - local radius = vars.radius - if vars.headingDegrees then - heading = routines.utils.toRadian(vars.headingDegrees) - end - - local unitPosTbl = {} - for i = 1, #units do - local unit = Unit.getByName(units[i]) - if unit and unit:isExist() then - unitPosTbl[#unitPosTbl + 1] = unit:getPosition().p - end - end - if #unitPosTbl > 0 then -- one more more units found. - -- first, find the unit most in the heading direction - local maxPos = -math.huge - - local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = - for i = 1, #unitPosTbl do - local rotatedVec2 = routines.vec.rotateVec2(routines.utils.makeVec2(unitPosTbl[i]), heading) - if (not maxPos) or maxPos < rotatedVec2.x then - maxPos = rotatedVec2.x - maxPosInd = i - end - end - - --now, get all the units around this unit... - local avgPos - if radius then - local maxUnitPos = unitPosTbl[maxPosInd] - local avgx, avgy, avgz, totNum = 0, 0, 0, 0 - for i = 1, #unitPosTbl do - if routines.utils.get2DDist(maxUnitPos, unitPosTbl[i]) <= radius then - avgx = avgx + unitPosTbl[i].x - avgy = avgy + unitPosTbl[i].y - avgz = avgz + unitPosTbl[i].z - totNum = totNum + 1 - end - end - avgPos = { x = avgx/totNum, y = avgy/totNum, z = avgz/totNum} - else - avgPos = unitPosTbl[maxPosInd] - end - - return avgPos - end -end - - ---[[ vars for routines.getLeadingMGRSString: -vars.units - table of unit names -vars.heading - direction -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -vars.acc - number, 0 to 5. -]] -routines.getLeadingMGRSString = function(vars) - local pos = routines.getLeadingPos(vars) - if pos then - local acc = vars.acc or 5 - return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) - end -end - ---[[ vars for routines.getLeadingLLString: -vars.units - table of unit names -vars.heading - direction, number -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -vars.acc - number of digits after decimal point (can be negative) -vars.DMS - boolean, true if you want DMS. -]] -routines.getLeadingLLString = function(vars) - local pos = routines.getLeadingPos(vars) - if pos then - local acc = vars.acc or 3 - local DMS = vars.DMS - local lat, lon = coord.LOtoLL(pos) - return routines.tostringLL(lat, lon, acc, DMS) - end -end - - - ---[[ vars for routines.getLeadingBRString: -vars.units - table of unit names -vars.heading - direction, number -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -vars.metric - boolean, if true, use km instead of NM. -vars.alt - boolean, if true, include altitude. -vars.ref - vec3/vec2 reference point. -]] -routines.getLeadingBRString = function(vars) - local pos = routines.getLeadingPos(vars) - if pos then - local ref = vars.ref - local alt = vars.alt - local metric = vars.metric - - local vec = {x = pos.x - ref.x, y = pos.y - ref.y, z = pos.z - ref.z} - local dir = routines.utils.getDir(vec, ref) - local dist = routines.utils.get2DDist(pos, ref) - if alt then - alt = pos.y - end - return routines.tostringBR(dir, dist, alt, metric) - end -end - ---[[ vars for routines.message.add - vars.text = 'Hello World' - vars.displayTime = 20 - vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} - -]] - ---[[ vars for routines.msgMGRS -vars.units - table of unit names (NOT unitNameTable- maybe this should change). -vars.acc - integer between 0 and 5, inclusive -vars.text - text in the message -vars.displayTime - self explanatory -vars.msgFor - scope -]] -routines.msgMGRS = function(vars) - local units = vars.units - local acc = vars.acc - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getMGRSString{units = units, acc = acc} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } -end - ---[[ vars for routines.msgLL -vars.units - table of unit names (NOT unitNameTable- maybe this should change) (Yes). -vars.acc - integer, number of numbers after decimal place -vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. -vars.text - text in the message -vars.displayTime - self explanatory -vars.msgFor - scope -]] -routines.msgLL = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local acc = vars.acc - local DMS = vars.DMS - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getLLString{units = units, acc = acc, DMS = DMS} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - -end - - ---[[ -vars.units- table of unit names (NOT unitNameTable- maybe this should change). -vars.ref - vec3 ref point, maybe overload for vec2 as well? -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgBR = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString - local alt = vars.alt - local metric = vars.metric - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getBRString{units = units, ref = ref, alt = alt, metric = metric} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - -end - - --------------------------------------------------------------------------------------------- --- basically, just sub-types of routines.msgBR... saves folks the work of getting the ref point. ---[[ -vars.units- table of unit names (NOT unitNameTable- maybe this should change). -vars.ref - string red, blue -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgBullseye = function(vars) - if string.lower(vars.ref) == 'red' then - vars.ref = routines.DBs.missionData.bullseye.red - routines.msgBR(vars) - elseif string.lower(vars.ref) == 'blue' then - vars.ref = routines.DBs.missionData.bullseye.blue - routines.msgBR(vars) - end -end - ---[[ -vars.units- table of unit names (NOT unitNameTable- maybe this should change). -vars.ref - unit name of reference point -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] - -routines.msgBRA = function(vars) - if Unit.getByName(vars.ref) then - vars.ref = Unit.getByName(vars.ref):getPosition().p - if not vars.alt then - vars.alt = true - end - routines.msgBR(vars) - end -end --------------------------------------------------------------------------------------------- - ---[[ vars for routines.msgLeadingMGRS: -vars.units - table of unit names -vars.heading - direction -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees (optional) -vars.acc - number, 0 to 5. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgLeadingMGRS = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local acc = vars.acc - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - - -end ---[[ vars for routines.msgLeadingLL: -vars.units - table of unit names -vars.heading - direction, number -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees (optional) -vars.acc - number of digits after decimal point (can be negative) -vars.DMS - boolean, true if you want DMS. (optional) -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgLeadingLL = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local acc = vars.acc - local DMS = vars.DMS - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - -end - ---[[ -vars.units - table of unit names -vars.heading - direction, number -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees (optional) -vars.metric - boolean, if true, use km instead of NM. (optional) -vars.alt - boolean, if true, include altitude. (optional) -vars.ref - vec3/vec2 reference point. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgLeadingBR = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local metric = vars.metric - local alt = vars.alt - local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } -end - - -function spairs(t, order) - -- collect the keys - local keys = {} - for k in pairs(t) do keys[#keys+1] = k end - - -- if order function given, sort by it by passing the table and keys a, b, - -- otherwise just sort the keys - if order then - table.sort(keys, function(a,b) return order(t, a, b) end) - else - table.sort(keys) - end - - -- return the iterator function - local i = 0 - return function() - i = i + 1 - if keys[i] then - return keys[i], t[keys[i]] - end - end -end - - -function routines.IsPartOfGroupInZones( CargoGroup, LandingZones ) ---trace.f() - - local CurrentZoneID = nil - - if CargoGroup then - local CargoUnits = CargoGroup:getUnits() - for CargoUnitID, CargoUnit in pairs( CargoUnits ) do - if CargoUnit and CargoUnit:getLife() >= 1.0 then - CurrentZoneID = routines.IsUnitInZones( CargoUnit, LandingZones ) - if CurrentZoneID then - break - end - end - end - end - ---trace.r( "", "", { CurrentZoneID } ) - return CurrentZoneID -end - - - -function routines.IsUnitInZones( TransportUnit, LandingZones ) ---trace.f("", "routines.IsUnitInZones" ) - - local TransportZoneResult = nil - local TransportZonePos = nil - local TransportZone = nil - - -- fill-up some local variables to support further calculations to determine location of units within the zone. - if TransportUnit then - local TransportUnitPos = TransportUnit:getPosition().p - if type( LandingZones ) == "table" then - for LandingZoneID, LandingZoneName in pairs( LandingZones ) do - TransportZone = trigger.misc.getZone( LandingZoneName ) - if TransportZone then - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then - TransportZoneResult = LandingZoneID - break - end - end - end - else - TransportZone = trigger.misc.getZone( LandingZones ) - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then - TransportZoneResult = 1 - end - end - if TransportZoneResult then - --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) - else - --trace.i( "routines", "TransportZone:nil logic" ) - end - return TransportZoneResult - else - --trace.i( "routines", "TransportZone:nil hard" ) - return nil - end -end - -function routines.IsUnitNearZonesRadius( TransportUnit, LandingZones, ZoneRadius ) ---trace.f("", "routines.IsUnitInZones" ) - - local TransportZoneResult = nil - local TransportZonePos = nil - local TransportZone = nil - - -- fill-up some local variables to support further calculations to determine location of units within the zone. - if TransportUnit then - local TransportUnitPos = TransportUnit:getPosition().p - if type( LandingZones ) == "table" then - for LandingZoneID, LandingZoneName in pairs( LandingZones ) do - TransportZone = trigger.misc.getZone( LandingZoneName ) - if TransportZone then - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then - TransportZoneResult = LandingZoneID - break - end - end - end - else - TransportZone = trigger.misc.getZone( LandingZones ) - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then - TransportZoneResult = 1 - end - end - if TransportZoneResult then - --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) - else - --trace.i( "routines", "TransportZone:nil logic" ) - end - return TransportZoneResult - else - --trace.i( "routines", "TransportZone:nil hard" ) - return nil - end -end - - -function routines.IsStaticInZones( TransportStatic, LandingZones ) ---trace.f() - - local TransportZoneResult = nil - local TransportZonePos = nil - local TransportZone = nil - - -- fill-up some local variables to support further calculations to determine location of units within the zone. - local TransportStaticPos = TransportStatic:getPosition().p - if type( LandingZones ) == "table" then - for LandingZoneID, LandingZoneName in pairs( LandingZones ) do - TransportZone = trigger.misc.getZone( LandingZoneName ) - if TransportZone then - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then - TransportZoneResult = LandingZoneID - break - end - end - end - else - TransportZone = trigger.misc.getZone( LandingZones ) - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then - TransportZoneResult = 1 - end - end - ---trace.r( "", "", { TransportZoneResult } ) - return TransportZoneResult -end - - -function routines.IsUnitInRadius( CargoUnit, ReferencePosition, Radius ) ---trace.f() - - local Valid = true - - -- fill-up some local variables to support further calculations to determine location of units within the zone. - local CargoPos = CargoUnit:getPosition().p - local ReferenceP = ReferencePosition.p - - if (((CargoPos.x - ReferenceP.x)^2 + (CargoPos.z - ReferenceP.z)^2)^0.5 <= Radius) then - else - Valid = false - end - - return Valid -end - -function routines.IsPartOfGroupInRadius( CargoGroup, ReferencePosition, Radius ) ---trace.f() - - local Valid = true - - Valid = routines.ValidateGroup( CargoGroup, "CargoGroup", Valid ) - - -- fill-up some local variables to support further calculations to determine location of units within the zone - local CargoUnits = CargoGroup:getUnits() - for CargoUnitId, CargoUnit in pairs( CargoUnits ) do - local CargoUnitPos = CargoUnit:getPosition().p --- env.info( 'routines.IsPartOfGroupInRadius: CargoUnitPos.x = ' .. CargoUnitPos.x .. ' CargoUnitPos.z = ' .. CargoUnitPos.z ) - local ReferenceP = ReferencePosition.p --- env.info( 'routines.IsPartOfGroupInRadius: ReferenceGroupPos.x = ' .. ReferenceGroupPos.x .. ' ReferenceGroupPos.z = ' .. ReferenceGroupPos.z ) - - if ((( CargoUnitPos.x - ReferenceP.x)^2 + (CargoUnitPos.z - ReferenceP.z)^2)^0.5 <= Radius) then - else - Valid = false - break - end - end - - return Valid -end - - -function routines.ValidateString( Variable, VariableName, Valid ) ---trace.f() - - if type( Variable ) == "string" then - if Variable == "" then - error( "routines.ValidateString: error: " .. VariableName .. " must be filled out!" ) - Valid = false - end - else - error( "routines.ValidateString: error: " .. VariableName .. " is not a string." ) - Valid = false - end - ---trace.r( "", "", { Valid } ) - return Valid -end - -function routines.ValidateNumber( Variable, VariableName, Valid ) ---trace.f() - - if type( Variable ) == "number" then - else - error( "routines.ValidateNumber: error: " .. VariableName .. " is not a number." ) - Valid = false - end - ---trace.r( "", "", { Valid } ) - return Valid - -end - -function routines.ValidateGroup( Variable, VariableName, Valid ) ---trace.f() - - if Variable == nil then - error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) - Valid = false - end - ---trace.r( "", "", { Valid } ) - return Valid -end - -function routines.ValidateZone( LandingZones, VariableName, Valid ) ---trace.f() - - if LandingZones == nil then - error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) - Valid = false - end - - if type( LandingZones ) == "table" then - for LandingZoneID, LandingZoneName in pairs( LandingZones ) do - if trigger.misc.getZone( LandingZoneName ) == nil then - error( "routines.ValidateGroup: error: Zone " .. LandingZoneName .. " does not exist!" ) - Valid = false - break - end - end - else - if trigger.misc.getZone( LandingZones ) == nil then - error( "routines.ValidateGroup: error: Zone " .. LandingZones .. " does not exist!" ) - Valid = false - end - end - ---trace.r( "", "", { Valid } ) - return Valid -end - -function routines.ValidateEnumeration( Variable, VariableName, Enum, Valid ) ---trace.f() - - local ValidVariable = false - - for EnumId, EnumData in pairs( Enum ) do - if Variable == EnumData then - ValidVariable = true - break - end - end - - if ValidVariable then - else - error( 'TransportValidateEnum: " .. VariableName .. " is not a valid type.' .. Variable ) - Valid = false - end - ---trace.r( "", "", { Valid } ) - return Valid -end - -function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints but returns speed and formation type along with vec2 of point} - -- refactor to search by groupId and allow groupId and groupName as inputs - local gpId = groupIdent - if type(groupIdent) == 'string' and not tonumber(groupIdent) then - gpId = _DATABASE.Templates.Groups[groupIdent].groupId - end - - for coa_name, coa_data in pairs(env.mission.coalition) do - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - for obj_type_name, obj_type_data in pairs(cntry_data) do - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - for group_num, group_data in pairs(obj_type_data.group) do - if group_data and group_data.groupId == gpId then -- this is the group we are looking for - if group_data.route and group_data.route.points and #group_data.route.points > 0 then - local points = {} - - for point_num, point in pairs(group_data.route.points) do - local routeData = {} - if not point.point then - routeData.x = point.x - routeData.y = point.y - else - routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation. - end - routeData.form = point.action - routeData.speed = point.speed - routeData.alt = point.alt - routeData.alt_type = point.alt_type - routeData.airdromeId = point.airdromeId - routeData.helipadId = point.helipadId - routeData.type = point.type - routeData.action = point.action - if task then - routeData.task = point.task - end - points[point_num] = routeData - end - - return points - end - return - end --if group_data and group_data.name and group_data.name == 'groupname' - end --for group_num, group_data in pairs(obj_type_data.group) do - end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then - end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then - end --for obj_type_name, obj_type_data in pairs(cntry_data) do - end --for cntry_id, cntry_data in pairs(coa_data.country) do - end --if coa_data.country then --there is a country table - end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then - end --for coa_name, coa_data in pairs(mission.coalition) do -end - -routines.ground.patrolRoute = function(vars) - - - local tempRoute = {} - local useRoute = {} - local gpData = vars.gpData - if type(gpData) == 'string' then - gpData = Group.getByName(gpData) - end - - local useGroupRoute - if not vars.useGroupRoute then - useGroupRoute = vars.gpData - else - useGroupRoute = vars.useGroupRoute - end - local routeProvided = false - if not vars.route then - if useGroupRoute then - tempRoute = routines.getGroupRoute(useGroupRoute) - end - else - useRoute = vars.route - local posStart = routines.getLeadPos(gpData) - useRoute[1] = routines.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed) - routeProvided = true - end - - - local overRideSpeed = vars.speed or 'default' - local pType = vars.pType - local offRoadForm = vars.offRoadForm or 'default' - local onRoadForm = vars.onRoadForm or 'default' - - if routeProvided == false and #tempRoute > 0 then - local posStart = routines.getLeadPos(gpData) - - - useRoute[#useRoute + 1] = routines.ground.buildWP(posStart, offRoadForm, overRideSpeed) - for i = 1, #tempRoute do - local tempForm = tempRoute[i].action - local tempSpeed = tempRoute[i].speed - - if offRoadForm == 'default' then - tempForm = tempRoute[i].action - end - if onRoadForm == 'default' then - onRoadForm = 'On Road' - end - if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then - tempForm = onRoadForm - else - tempForm = offRoadForm - end - - if type(overRideSpeed) == 'number' then - tempSpeed = overRideSpeed - end - - - useRoute[#useRoute + 1] = routines.ground.buildWP(tempRoute[i], tempForm, tempSpeed) - end - - if pType and string.lower(pType) == 'doubleback' then - local curRoute = routines.utils.deepCopy(useRoute) - for i = #curRoute, 2, -1 do - useRoute[#useRoute + 1] = routines.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed) - end - end - - useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP - end - - local cTask3 = {} - local newPatrol = {} - newPatrol.route = useRoute - newPatrol.gpData = gpData:getName() - cTask3[#cTask3 + 1] = 'routines.ground.patrolRoute(' - cTask3[#cTask3 + 1] = routines.utils.oneLineSerialize(newPatrol) - cTask3[#cTask3 + 1] = ')' - cTask3 = table.concat(cTask3) - local tempTask = { - id = 'WrappedAction', - params = { - action = { - id = 'Script', - params = { - command = cTask3, - - }, - }, - }, - } - - - useRoute[#useRoute].task = tempTask - routines.goRoute(gpData, useRoute) - - return -end - -routines.ground.patrol = function(gpData, pType, form, speed) - local vars = {} - - if type(gpData) == 'table' and gpData:getName() then - gpData = gpData:getName() - end - - vars.useGroupRoute = gpData - vars.gpData = gpData - vars.pType = pType - vars.offRoadForm = form - vars.speed = speed - - routines.ground.patrolRoute(vars) - - return -end - -function routines.GetUnitHeight( CheckUnit ) ---trace.f( "routines" ) - - local UnitPoint = CheckUnit:getPoint() - local UnitPosition = { x = UnitPoint.x, y = UnitPoint.z } - local UnitHeight = UnitPoint.y - - local LandHeight = land.getHeight( UnitPosition ) - - --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) - - --trace.f( "routines", "Unit Height = " .. UnitHeight - LandHeight ) - - return UnitHeight - LandHeight - -end - - - -Su34Status = { status = {} } -boardMsgRed = { statusMsg = "" } -boardMsgAll = { timeMsg = "" } -SpawnSettings = {} -Su34MenuPath = {} -Su34Menus = 0 - - -function Su34AttackCarlVinson(groupName) ---trace.menu("", "Su34AttackCarlVinson") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34.getController(groupSu34) - local groupCarlVinson = Group.getByName("US Carl Vinson #001") - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - if groupCarlVinson ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupCarlVinson:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) - end - Su34Status.status[groupName] = 1 - MessageToRed( string.format('%s: ',groupName) .. 'Attacking carrier Carl Vinson. ', 10, 'RedStatus' .. groupName ) -end - -function Su34AttackWest(groupName) ---trace.f("","Su34AttackWest") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34.getController(groupSu34) - local groupShipWest1 = Group.getByName("US Ship West #001") - local groupShipWest2 = Group.getByName("US Ship West #002") - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - if groupShipWest1 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) - end - if groupShipWest2 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) - end - Su34Status.status[groupName] = 2 - MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the west. ', 10, 'RedStatus' .. groupName ) -end - -function Su34AttackNorth(groupName) ---trace.menu("","Su34AttackNorth") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34.getController(groupSu34) - local groupShipNorth1 = Group.getByName("US Ship North #001") - local groupShipNorth2 = Group.getByName("US Ship North #002") - local groupShipNorth3 = Group.getByName("US Ship North #003") - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - if groupShipNorth1 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) - end - if groupShipNorth2 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) - end - if groupShipNorth3 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth3:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) - end - Su34Status.status[groupName] = 3 - MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the north. ', 10, 'RedStatus' .. groupName ) -end - -function Su34Orbit(groupName) ---trace.menu("","Su34Orbit") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34:getController() - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - controllerSu34:pushTask( {id = 'ControlledTask', params = { task = { id = 'Orbit', params = { pattern = AI.Task.OrbitPattern.RACE_TRACK } }, stopCondition = { duration = 600 } } } ) - Su34Status.status[groupName] = 4 - MessageToRed( string.format('%s: ',groupName) .. 'In orbit and awaiting further instructions. ', 10, 'RedStatus' .. groupName ) -end - -function Su34TakeOff(groupName) ---trace.menu("","Su34TakeOff") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34:getController() - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) - Su34Status.status[groupName] = 8 - MessageToRed( string.format('%s: ',groupName) .. 'Take-Off. ', 10, 'RedStatus' .. groupName ) -end - -function Su34Hold(groupName) ---trace.menu("","Su34Hold") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34:getController() - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) - Su34Status.status[groupName] = 5 - MessageToRed( string.format('%s: ',groupName) .. 'Holding Weapons. ', 10, 'RedStatus' .. groupName ) -end - -function Su34RTB(groupName) ---trace.menu("","Su34RTB") - Su34Status.status[groupName] = 6 - MessageToRed( string.format('%s: ',groupName) .. 'Return to Krasnodar. ', 10, 'RedStatus' .. groupName ) -end - -function Su34Destroyed(groupName) ---trace.menu("","Su34Destroyed") - Su34Status.status[groupName] = 7 - MessageToRed( string.format('%s: ',groupName) .. 'Destroyed. ', 30, 'RedStatus' .. groupName ) -end - -function GroupAlive( groupName ) ---trace.menu("","GroupAlive") - local groupTest = Group.getByName( groupName ) - - local groupExists = false - - if groupTest then - groupExists = groupTest:isExist() - end - - --trace.r( "", "", { groupExists } ) - return groupExists -end - -function Su34IsDead() ---trace.f() - -end - -function Su34OverviewStatus() ---trace.menu("","Su34OverviewStatus") - local msg = "" - local currentStatus = 0 - local Exists = false - - for groupName, currentStatus in pairs(Su34Status.status) do - - env.info(('Su34 Overview Status: GroupName = ' .. groupName )) - Alive = GroupAlive( groupName ) - - if Alive then - if currentStatus == 1 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Attacking carrier Carl Vinson. " - elseif currentStatus == 2 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Attacking supporting ships in the west. " - elseif currentStatus == 3 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Attacking invading ships in the north. " - elseif currentStatus == 4 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "In orbit and awaiting further instructions. " - elseif currentStatus == 5 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Holding Weapons. " - elseif currentStatus == 6 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Return to Krasnodar. " - elseif currentStatus == 7 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Destroyed. " - elseif currentStatus == 8 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Take-Off. " - end - else - if currentStatus == 7 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Destroyed. " - else - Su34Destroyed(groupName) - end - end - end - - boardMsgRed.statusMsg = msg -end - - -function UpdateBoardMsg() ---trace.f() - Su34OverviewStatus() - MessageToRed( boardMsgRed.statusMsg, 15, 'RedStatus' ) -end - -function MusicReset( flg ) ---trace.f() - trigger.action.setUserFlag(95,flg) -end - -function PlaneActivate(groupNameFormat, flg) ---trace.f() - local groupName = groupNameFormat .. string.format("#%03d", trigger.misc.getUserFlag(flg)) - --trigger.action.outText(groupName,10) - trigger.action.activateGroup(Group.getByName(groupName)) -end - -function Su34Menu(groupName) ---trace.f() - - --env.info(( 'Su34Menu(' .. groupName .. ')' )) - local groupSu34 = Group.getByName( groupName ) - - if Su34Status.status[groupName] == 1 or - Su34Status.status[groupName] == 2 or - Su34Status.status[groupName] == 3 or - Su34Status.status[groupName] == 4 or - Su34Status.status[groupName] == 5 then - if Su34MenuPath[groupName] == nil then - if planeMenuPath == nil then - planeMenuPath = missionCommands.addSubMenuForCoalition( - coalition.side.RED, - "SU-34 anti-ship flights", - nil - ) - end - Su34MenuPath[groupName] = missionCommands.addSubMenuForCoalition( - coalition.side.RED, - "Flight " .. groupName, - planeMenuPath - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Attack carrier Carl Vinson", - Su34MenuPath[groupName], - Su34AttackCarlVinson, - groupName - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Attack ships in the west", - Su34MenuPath[groupName], - Su34AttackWest, - groupName - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Attack ships in the north", - Su34MenuPath[groupName], - Su34AttackNorth, - groupName - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Hold position and await instructions", - Su34MenuPath[groupName], - Su34Orbit, - groupName - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Report status", - Su34MenuPath[groupName], - Su34OverviewStatus - ) - end - else - if Su34MenuPath[groupName] then - missionCommands.removeItemForCoalition(coalition.side.RED, Su34MenuPath[groupName]) - end - end -end - ---- Obsolete function, but kept to rework in framework. - -function ChooseInfantry ( TeleportPrefixTable, TeleportMax ) ---trace.f("Spawn") - --env.info(( 'ChooseInfantry: ' )) - - TeleportPrefixTableCount = #TeleportPrefixTable - TeleportPrefixTableIndex = math.random( 1, TeleportPrefixTableCount ) - - --env.info(( 'ChooseInfantry: TeleportPrefixTableIndex = ' .. TeleportPrefixTableIndex .. ' TeleportPrefixTableCount = ' .. TeleportPrefixTableCount .. ' TeleportMax = ' .. TeleportMax )) - - local TeleportFound = false - local TeleportLoop = true - local Index = TeleportPrefixTableIndex - local TeleportPrefix = '' - - while TeleportLoop do - TeleportPrefix = TeleportPrefixTable[Index] - if SpawnSettings[TeleportPrefix] then - if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then - SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 - TeleportFound = true - else - TeleportFound = false - end - else - SpawnSettings[TeleportPrefix] = {} - SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 - TeleportFound = true - end - if TeleportFound then - TeleportLoop = false - else - if Index < TeleportPrefixTableCount then - Index = Index + 1 - else - TeleportLoop = false - end - end - --env.info(( 'ChooseInfantry: Loop 1 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) - end - - if TeleportFound == false then - TeleportLoop = true - Index = 1 - while TeleportLoop do - TeleportPrefix = TeleportPrefixTable[Index] - if SpawnSettings[TeleportPrefix] then - if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then - SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 - TeleportFound = true - else - TeleportFound = false - end - else - SpawnSettings[TeleportPrefix] = {} - SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 - TeleportFound = true - end - if TeleportFound then - TeleportLoop = false - else - if Index < TeleportPrefixTableIndex then - Index = Index + 1 - else - TeleportLoop = false - end - end - --env.info(( 'ChooseInfantry: Loop 2 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) - end - end - - local TeleportGroupName = '' - if TeleportFound == true then - TeleportGroupName = TeleportPrefix .. string.format("#%03d", SpawnSettings[TeleportPrefix]['SpawnCount'] ) - else - TeleportGroupName = '' - end - - --env.info(('ChooseInfantry: TeleportGroupName = ' .. TeleportGroupName )) - --env.info(('ChooseInfantry: return')) - - return TeleportGroupName -end - -SpawnedInfantry = 0 - -function LandCarrier ( CarrierGroup, LandingZonePrefix ) ---trace.f() - --env.info(( 'LandCarrier: ' )) - --env.info(( 'LandCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) - --env.info(( 'LandCarrier: LandingZone = ' .. LandingZonePrefix )) - - local controllerGroup = CarrierGroup:getController() - - local LandingZone = trigger.misc.getZone(LandingZonePrefix) - local LandingZonePos = {} - LandingZonePos.x = LandingZone.point.x + math.random(LandingZone.radius * -1, LandingZone.radius) - LandingZonePos.y = LandingZone.point.z + math.random(LandingZone.radius * -1, LandingZone.radius) - - controllerGroup:pushTask( { id = 'Land', params = { point = LandingZonePos, durationFlag = true, duration = 10 } } ) - - --env.info(( 'LandCarrier: end' )) -end - -EscortCount = 0 -function EscortCarrier ( CarrierGroup, EscortPrefix, EscortLastWayPoint, EscortEngagementDistanceMax, EscortTargetTypes ) ---trace.f() - --env.info(( 'EscortCarrier: ' )) - --env.info(( 'EscortCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) - --env.info(( 'EscortCarrier: EscortPrefix = ' .. EscortPrefix )) - - local CarrierName = CarrierGroup:getName() - - local EscortMission = {} - local CarrierMission = {} - - local EscortMission = SpawnMissionGroup( EscortPrefix ) - local CarrierMission = SpawnMissionGroup( CarrierGroup:getName() ) - - if EscortMission ~= nil and CarrierMission ~= nil then - - EscortCount = EscortCount + 1 - EscortMissionName = string.format( EscortPrefix .. '#Escort %s', CarrierName ) - EscortMission.name = EscortMissionName - EscortMission.groupId = nil - EscortMission.lateActivation = false - EscortMission.taskSelected = false - - local EscortUnits = #EscortMission.units - for u = 1, EscortUnits do - EscortMission.units[u].name = string.format( EscortPrefix .. '#Escort %s %02d', CarrierName, u ) - EscortMission.units[u].unitId = nil - end - - - EscortMission.route.points[1].task = { id = "ComboTask", - params = - { - tasks = - { - [1] = - { - enabled = true, - auto = false, - id = "Escort", - number = 1, - params = - { - lastWptIndexFlagChangedManually = false, - groupId = CarrierGroup:getID(), - lastWptIndex = nil, - lastWptIndexFlag = false, - engagementDistMax = EscortEngagementDistanceMax, - targetTypes = EscortTargetTypes, - pos = - { - y = 20, - x = 20, - z = 0, - } -- end of ["pos"] - } -- end of ["params"] - } -- end of [1] - } -- end of ["tasks"] - } -- end of ["params"] - } -- end of ["task"] - - SpawnGroupAdd( EscortPrefix, EscortMission ) - - end -end - -function SendMessageToCarrier( CarrierGroup, CarrierMessage ) ---trace.f() - - if CarrierGroup ~= nil then - MessageToGroup( CarrierGroup, CarrierMessage, 30, 'Carrier/' .. CarrierGroup:getName() ) - end - -end - -function MessageToGroup( MsgGroup, MsgText, MsgTime, MsgName ) ---trace.f() - - if type(MsgGroup) == 'string' then - --env.info( 'MessageToGroup: Converted MsgGroup string "' .. MsgGroup .. '" into a Group structure.' ) - MsgGroup = Group.getByName( MsgGroup ) - end - - if MsgGroup ~= nil then - local MsgTable = {} - MsgTable.text = MsgText - MsgTable.displayTime = MsgTime - MsgTable.msgFor = { units = { MsgGroup:getUnits()[1]:getName() } } - MsgTable.name = MsgName - --routines.message.add( MsgTable ) - --env.info(('MessageToGroup: Message sent to ' .. MsgGroup:getUnits()[1]:getName() .. ' -> ' .. MsgText )) - end -end - -function MessageToUnit( UnitName, MsgText, MsgTime, MsgName ) ---trace.f() - - if UnitName ~= nil then - local MsgTable = {} - MsgTable.text = MsgText - MsgTable.displayTime = MsgTime - MsgTable.msgFor = { units = { UnitName } } - MsgTable.name = MsgName - --routines.message.add( MsgTable ) - end -end - -function MessageToAll( MsgText, MsgTime, MsgName ) ---trace.f() - - MESSAGE:New( MsgText, "Message", MsgTime, MsgName ):ToCoalition( coalition.side.RED ):ToCoalition( coalition.side.BLUE ) -end - -function MessageToRed( MsgText, MsgTime, MsgName ) ---trace.f() - - MESSAGE:New( MsgText, "To Red Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) -end - -function MessageToBlue( MsgText, MsgTime, MsgName ) ---trace.f() - - MESSAGE:New( MsgText, "To Blue Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) -end - -function getCarrierHeight( CarrierGroup ) ---trace.f() - - if CarrierGroup ~= nil then - if table.getn(CarrierGroup:getUnits()) == 1 then - local CarrierUnit = CarrierGroup:getUnits()[1] - local CurrentPoint = CarrierUnit:getPoint() - - local CurrentPosition = { x = CurrentPoint.x, y = CurrentPoint.z } - local CarrierHeight = CurrentPoint.y - - local LandHeight = land.getHeight( CurrentPosition ) - - --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) - - return CarrierHeight - LandHeight - else - return 999999 - end - else - return 999999 - end - -end - -function GetUnitHeight( CheckUnit ) ---trace.f() - - local UnitPoint = CheckUnit:getPoint() - local UnitPosition = { x = CurrentPoint.x, y = CurrentPoint.z } - local UnitHeight = CurrentPoint.y - - local LandHeight = land.getHeight( CurrentPosition ) - - --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) - - return UnitHeight - LandHeight - -end - - -_MusicTable = {} -_MusicTable.Files = {} -_MusicTable.Queue = {} -_MusicTable.FileCnt = 0 - - -function MusicRegister( SndRef, SndFile, SndTime ) ---trace.f() - - env.info(( 'MusicRegister: SndRef = ' .. SndRef )) - env.info(( 'MusicRegister: SndFile = ' .. SndFile )) - env.info(( 'MusicRegister: SndTime = ' .. SndTime )) - - - _MusicTable.FileCnt = _MusicTable.FileCnt + 1 - - _MusicTable.Files[_MusicTable.FileCnt] = {} - _MusicTable.Files[_MusicTable.FileCnt].Ref = SndRef - _MusicTable.Files[_MusicTable.FileCnt].File = SndFile - _MusicTable.Files[_MusicTable.FileCnt].Time = SndTime - - if not _MusicTable.Function then - _MusicTable.Function = routines.scheduleFunction( MusicScheduler, { }, timer.getTime() + 10, 10) - end - -end - -function MusicToPlayer( SndRef, PlayerName, SndContinue ) ---trace.f() - - --env.info(( 'MusicToPlayer: SndRef = ' .. SndRef )) - - local PlayerUnits = AlivePlayerUnits() - for PlayerUnitIdx, PlayerUnit in pairs(PlayerUnits) do - local PlayerUnitName = PlayerUnit:getPlayerName() - --env.info(( 'MusicToPlayer: PlayerUnitName = ' .. PlayerUnitName )) - if PlayerName == PlayerUnitName then - PlayerGroup = PlayerUnit:getGroup() - if PlayerGroup then - --env.info(( 'MusicToPlayer: PlayerGroup = ' .. PlayerGroup:getName() )) - MusicToGroup( SndRef, PlayerGroup, SndContinue ) - end - break - end - end - - --env.info(( 'MusicToPlayer: end' )) - -end - -function MusicToGroup( SndRef, SndGroup, SndContinue ) ---trace.f() - - --env.info(( 'MusicToGroup: SndRef = ' .. SndRef )) - - if SndGroup ~= nil then - if _MusicTable and _MusicTable.FileCnt > 0 then - if SndGroup:isExist() then - if MusicCanStart(SndGroup:getUnit(1):getPlayerName()) then - --env.info(( 'MusicToGroup: OK for Sound.' )) - local SndIdx = 0 - if SndRef == '' then - --env.info(( 'MusicToGroup: SndRef as empty. Queueing at random.' )) - SndIdx = math.random( 1, _MusicTable.FileCnt ) - else - for SndIdx = 1, _MusicTable.FileCnt do - if _MusicTable.Files[SndIdx].Ref == SndRef then - break - end - end - end - --env.info(( 'MusicToGroup: SndIdx = ' .. SndIdx )) - --env.info(( 'MusicToGroup: Queueing Music ' .. _MusicTable.Files[SndIdx].File .. ' for Group ' .. SndGroup:getID() )) - trigger.action.outSoundForGroup( SndGroup:getID(), _MusicTable.Files[SndIdx].File ) - MessageToGroup( SndGroup, 'Playing ' .. _MusicTable.Files[SndIdx].File, 15, 'Music-' .. SndGroup:getUnit(1):getPlayerName() ) - - local SndQueueRef = SndGroup:getUnit(1):getPlayerName() - if _MusicTable.Queue[SndQueueRef] == nil then - _MusicTable.Queue[SndQueueRef] = {} - end - _MusicTable.Queue[SndQueueRef].Start = timer.getTime() - _MusicTable.Queue[SndQueueRef].PlayerName = SndGroup:getUnit(1):getPlayerName() - _MusicTable.Queue[SndQueueRef].Group = SndGroup - _MusicTable.Queue[SndQueueRef].ID = SndGroup:getID() - _MusicTable.Queue[SndQueueRef].Ref = SndIdx - _MusicTable.Queue[SndQueueRef].Continue = SndContinue - _MusicTable.Queue[SndQueueRef].Type = Group - end - end - end - end -end - -function MusicCanStart(PlayerName) ---trace.f() - - --env.info(( 'MusicCanStart:' )) - - local MusicOut = false - - if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then - --env.info(( 'MusicCanStart: PlayerName = ' .. PlayerName )) - local PlayerFound = false - local MusicStart = 0 - local MusicTime = 0 - for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do - if SndQueue.PlayerName == PlayerName then - PlayerFound = true - MusicStart = SndQueue.Start - MusicTime = _MusicTable.Files[SndQueue.Ref].Time - break - end - end - if PlayerFound then - --env.info(( 'MusicCanStart: MusicStart = ' .. MusicStart )) - --env.info(( 'MusicCanStart: MusicTime = ' .. MusicTime )) - --env.info(( 'MusicCanStart: timer.getTime() = ' .. timer.getTime() )) - - if MusicStart + MusicTime <= timer.getTime() then - MusicOut = true - end - else - MusicOut = true - end - end - - if MusicOut then - --env.info(( 'MusicCanStart: true' )) - else - --env.info(( 'MusicCanStart: false' )) - end - - return MusicOut -end - -function MusicScheduler() ---trace.scheduled("", "MusicScheduler") - - --env.info(( 'MusicScheduler:' )) - if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then - --env.info(( 'MusicScheduler: Walking Sound Queue.')) - for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do - if SndQueue.Continue then - if MusicCanStart(SndQueue.PlayerName) then - --env.info(('MusicScheduler: MusicToGroup')) - MusicToPlayer( '', SndQueue.PlayerName, true ) - end - end - end - end - -end - - -env.info(( 'Init: Scripts Loaded v1.1' )) - ---- BASE classes. --- --- @{#BASE} class --- ============== --- The @{#BASE} class is the super class for most of the classes defined within MOOSE. --- --- It handles: --- --- * The construction and inheritance of child classes. --- * The tracing of objects during mission execution within the DCS.log file (under saved games folder). --- --- Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes. --- --- BASE Trace functionality --- ======================== --- The BASE class contains trace methods to trace progress within a mission execution of a certain object. --- Note that these trace methods are inherited by each MOOSE class interiting BASE. --- As such, each object created from derived class from BASE can use the tracing functions to trace its execution. --- --- Trace a function call --- --------------------- --- There are basically 3 types of tracing methods available within BASE: --- --- * @{#BASE.F}: Trace the beginning of a function and its given parameters. --- * @{#BASE.T}: Trace further logic within a function giving optional variables or parameters. --- * @{#BASE.E}: Trace an execption within a function giving optional variables or parameters. An exception will always be traced. --- --- Tracing levels --- -------------- --- There are 3 tracing levels within MOOSE. --- These tracing levels were defined to avoid bulks of tracing to be generated by lots of objects. --- --- As such, the F and T methods have additional variants to trace level 2 and 3 respectively: --- --- * @{#BASE.F2}: Trace the beginning of a function and its given parameters with tracing level 2. --- * @{#BASE.F3}: Trace the beginning of a function and its given parameters with tracing level 3. --- * @{#BASE.T2}: Trace further logic within a function giving optional variables or parameters with tracing level 2. --- * @{#BASE.T3}: Trace further logic within a function giving optional variables or parameters with tracing level 3. --- --- BASE Inheritance support --- ======================== --- The following methods are available to support inheritance: --- --- * @{#BASE.Inherit}: Inherits from a class. --- * @{#BASE.Inherited}: Returns the parent class from the class. --- --- Future --- ====== --- Further methods may be added to BASE whenever there is a need to make "overall" functions available within MOOSE. --- --- ==== --- --- @module Base --- @author FlightControl - -Include.File( "Routines" ) - -local _TraceOn = true -local _TraceLevel = 1 -local _TraceClass = { - --DATABASE = true, - --SEAD = true, - --DESTROYBASETASK = true, - --MOVEMENT = true, - --SPAWN = true, - --STAGE = true, - --ZONE = true, - --GROUP = true, - --UNIT = true, - --CLIENT = true, - --CARGO = true, - --CARGO_GROUP = true, - --CARGO_PACKAGE = true, - --CARGO_SLINGLOAD = true, - --CARGO_ZONE = true, - --CLEANUP = true, - --MENU_CLIENT = true, - --MENU_CLIENT_COMMAND = true, - --ESCORT = true, - } -local _TraceClassMethod = {} - ---- The BASE Class --- @type BASE --- @field ClassName The name of the class. --- @field ClassID The ID number of the class. -BASE = { - ClassName = "BASE", - ClassID = 0, - Events = {} -} - ---- The Formation Class --- @type FORMATION --- @field Cone A cone formation. -FORMATION = { - Cone = "Cone" -} - - - ---- The base constructor. This is the top top class of all classed defined within the MOOSE. --- Any new class needs to be derived from this class for proper inheritance. --- @param #BASE self --- @return #BASE The new instance of the BASE class. --- @usage --- function TASK:New() --- --- local self = BASE:Inherit( self, BASE:New() ) --- --- -- assign Task default values during construction --- self.TaskBriefing = "Task: No Task." --- self.Time = timer.getTime() --- self.ExecuteStage = _TransportExecuteStage.NONE --- --- return self --- end --- @todo need to investigate if the deepCopy is really needed... Don't think so. -function BASE:New() - local Child = routines.utils.deepCopy( self ) - local Parent = {} - setmetatable( Child, Parent ) - Child.__index = Child - self.ClassID = self.ClassID + 1 - Child.ClassID = self.ClassID - --Child.AddEvent( Child, S_EVENT_BIRTH, Child.EventBirth ) - return Child -end - ---- This is the worker method to inherit from a parent class. --- @param #BASE self --- @param Child is the Child class that inherits. --- @param #BASE Parent is the Parent class that the Child inherits from. --- @return #BASE Child -function BASE:Inherit( Child, Parent ) - local Child = routines.utils.deepCopy( Child ) - local Parent = routines.utils.deepCopy( Parent ) - if Child ~= nil then - setmetatable( Child, Parent ) - Child.__index = Child - end - --Child.ClassName = Child.ClassName .. '.' .. Child.ClassID - self:T( 'Inherited from ' .. Parent.ClassName ) - return Child -end - ---- This is the worker method to retrieve the Parent class. --- @param #BASE self --- @param #BASE Child is the Child class from which the Parent class needs to be retrieved. --- @return #BASE -function BASE:Inherited( Child ) - local Parent = getmetatable( Child ) --- env.info('Inherited class of ' .. Child.ClassName .. ' is ' .. Parent.ClassName ) - return Parent -end - ---- Get the ClassName + ClassID of the class instance. --- The ClassName + ClassID is formatted as '%s#%09d'. --- @param #BASE self --- @return #string The ClassName + ClassID of the class instance. -function BASE:GetClassNameAndID() - return string.format( '%s#%09d', self:GetClassName(), self:GetClassID() ) -end - ---- Get the ClassName of the class instance. --- @param #BASE self --- @return #string The ClassName of the class instance. -function BASE:GetClassName() - return self.ClassName -end - ---- Get the ClassID of the class instance. --- @param #BASE self --- @return #string The ClassID of the class instance. -function BASE:GetClassID() - return self.ClassID -end - ---- Set a new listener for the class. --- @param self --- @param DCSTypes#Event Event --- @param #function EventFunction --- @return #BASE -function BASE:AddEvent( Event, EventFunction ) - self:F( Event ) - - self.Events[#self.Events+1] = {} - self.Events[#self.Events].Event = Event - self.Events[#self.Events].EventFunction = EventFunction - self.Events[#self.Events].EventEnabled = false - - return self -end - ---- Returns the event dispatcher --- @param #BASE self --- @return Event#EVENT -function BASE:Event() - - return _EVENTDISPATCHER -end - - - - - ---- Enable the event listeners for the class. --- @param #BASE self --- @return #BASE -function BASE:EnableEvents() - self:F( #self.Events ) - - for EventID, Event in pairs( self.Events ) do - Event.Self = self - Event.EventEnabled = true - end - self.Events.Handler = world.addEventHandler( self ) - - return self -end - - ---- Disable the event listeners for the class. --- @param #BASE self --- @return #BASE -function BASE:DisableEvents() - self:F() - - world.removeEventHandler( self ) - for EventID, Event in pairs( self.Events ) do - Event.Self = nil - Event.EventEnabled = false - end - - return self -end - - -local BaseEventCodes = { - "S_EVENT_SHOT", - "S_EVENT_HIT", - "S_EVENT_TAKEOFF", - "S_EVENT_LAND", - "S_EVENT_CRASH", - "S_EVENT_EJECTION", - "S_EVENT_REFUELING", - "S_EVENT_DEAD", - "S_EVENT_PILOT_DEAD", - "S_EVENT_BASE_CAPTURED", - "S_EVENT_MISSION_START", - "S_EVENT_MISSION_END", - "S_EVENT_TOOK_CONTROL", - "S_EVENT_REFUELING_STOP", - "S_EVENT_BIRTH", - "S_EVENT_HUMAN_FAILURE", - "S_EVENT_ENGINE_STARTUP", - "S_EVENT_ENGINE_SHUTDOWN", - "S_EVENT_PLAYER_ENTER_UNIT", - "S_EVENT_PLAYER_LEAVE_UNIT", - "S_EVENT_PLAYER_COMMENT", - "S_EVENT_SHOOTING_START", - "S_EVENT_SHOOTING_END", - "S_EVENT_MAX", -} - ---onEvent( {[1]="S_EVENT_BIRTH",[2]={["subPlace"]=5,["time"]=0,["initiator"]={["id_"]=16884480,},["place"]={["id_"]=5000040,},["id"]=15,["IniUnitName"]="US F-15C@RAMP-Air Support Mountains#001-01",},} --- Event = { --- id = enum world.event, --- time = Time, --- initiator = Unit, --- target = Unit, --- place = Unit, --- subPlace = enum world.BirthPlace, --- weapon = Weapon --- } - ---- Creation of a Birth Event. --- @param #BASE self --- @param DCSTypes#Time EventTime The time stamp of the event. --- @param DCSObject#Object Initiator The initiating object of the event. --- @param #string IniUnitName The initiating unit name. --- @param place --- @param subplace -function BASE:CreateEventBirth( EventTime, Initiator, IniUnitName, place, subplace ) - self:F( { EventTime, Initiator, IniUnitName, place, subplace } ) - - local Event = { - id = world.event.S_EVENT_BIRTH, - time = EventTime, - initiator = Initiator, - IniUnitName = IniUnitName, - place = place, - subplace = subplace - } - - world.onEvent( Event ) -end - ---- Creation of a Crash Event. --- @param #BASE self --- @param DCSTypes#Time EventTime The time stamp of the event. --- @param DCSObject#Object Initiator The initiating object of the event. -function BASE:CreateEventCrash( EventTime, Initiator ) - self:F( { EventTime, Initiator } ) - - local Event = { - id = world.event.S_EVENT_CRASH, - time = EventTime, - initiator = Initiator, - } - - world.onEvent( Event ) -end - --- TODO: Complete DCSTypes#Event structure. ---- The main event handling function... This function captures all events generated for the class. --- @param #BASE self --- @param DCSTypes#Event event -function BASE:onEvent(event) - --self:F( { BaseEventCodes[event.id], event } ) - - if self then - for EventID, EventObject in pairs( self.Events ) do - if EventObject.EventEnabled then - --env.info( 'onEvent Table EventObject.Self = ' .. tostring(EventObject.Self) ) - --env.info( 'onEvent event.id = ' .. tostring(event.id) ) - --env.info( 'onEvent EventObject.Event = ' .. tostring(EventObject.Event) ) - if event.id == EventObject.Event then - if self == EventObject.Self then - if event.initiator and event.initiator:isExist() then - event.IniUnitName = event.initiator:getName() - end - if event.target and event.target:isExist() then - event.TgtUnitName = event.target:getName() - end - --self:T( { BaseEventCodes[event.id], event } ) - --EventObject.EventFunction( self, event ) - end - end - end - end - end -end - --- Trace section - --- Log a trace (only shown when trace is on) --- TODO: Make trace function using variable parameters. - ---- Set trace level --- @param #BASE self --- @param #number Level -function BASE:TraceLevel( Level ) - _TraceLevel = Level - self:E( "Tracing level " .. Level ) -end - ---- Set tracing for a class --- @param #BASE self --- @param #string Class -function BASE:TraceClass( Class ) - _TraceClass[Class] = true - _TraceClassMethod[Class] = {} - self:E( "Tracing class " .. Class ) -end - ---- Set tracing for a specific method of class --- @param #BASE self --- @param #string Class --- @param #string Method -function BASE:TraceClassMethod( Class, Method ) - if not _TraceClassMethod[Class] then - _TraceClassMethod[Class] = {} - _TraceClassMethod[Class].Method = {} - end - _TraceClassMethod[Class].Method[Method] = true - self:E( "Tracing method " .. Method .. " of class " .. Class ) -end - ---- Trace a function call. Must be at the beginning of the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:F( Arguments ) - - if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then - - local DebugInfoCurrent = debug.getinfo( 2, "nl" ) - local DebugInfoFrom = debug.getinfo( 3, "l" ) - - local Function = "function" - if DebugInfoCurrent.name then - Function = DebugInfoCurrent.name - end - - if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then - local LineCurrent = DebugInfoCurrent.currentline - local LineFrom = 0 - if DebugInfoFrom then - LineFrom = DebugInfoFrom.currentline - end - env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "F", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) - end - end -end - ---- Trace a function call level 2. Must be at the beginning of the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:F2( Arguments ) - - if _TraceLevel >= 2 then - self:F( Arguments ) - end - -end - ---- Trace a function call level 3. Must be at the beginning of the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:F3( Arguments ) - - if _TraceLevel >= 3 then - self:F( Arguments ) - end - -end - ---- Trace a function logic. Can be anywhere within the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:T( Arguments ) - - if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then - - local DebugInfoCurrent = debug.getinfo( 2, "nl" ) - local DebugInfoFrom = debug.getinfo( 3, "l" ) - - local Function = "function" - if DebugInfoCurrent.name then - Function = DebugInfoCurrent.name - end - - if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then - local LineCurrent = DebugInfoCurrent.currentline - local LineFrom = 0 - if DebugInfoFrom then - LineFrom = DebugInfoFrom.currentline - end - env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s" , LineCurrent, LineFrom, "T", self.ClassName, self.ClassID, routines.utils.oneLineSerialize( Arguments ) ) ) - end - end -end - ---- Trace a function logic level 2. Can be anywhere within the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:T2( Arguments ) - - if _TraceLevel >= 2 then - self:T( Arguments ) - end - -end - ---- Trace a function logic level 3. Can be anywhere within the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:T3( Arguments ) - - if _TraceLevel >= 3 then - self:T( Arguments ) - end - -end - ---- Log an exception which will be traced always. Can be anywhere within the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:E( Arguments ) - - local DebugInfoCurrent = debug.getinfo( 2, "nl" ) - local DebugInfoFrom = debug.getinfo( 3, "l" ) - - local Function = "function" - if DebugInfoCurrent.name then - Function = DebugInfoCurrent.name - end - - local LineCurrent = DebugInfoCurrent.currentline - local LineFrom = DebugInfoFrom.currentline - - env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "E", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) -end - - - ---- Models time events calling event handing functions. --- --- @{SCHEDULER} class --- =================== --- The @{SCHEDULER} class models time events calling given event handling functions. --- --- SCHEDULER constructor --- ===================== --- The SCHEDULER class is quite easy to use: --- --- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. --- --- SCHEDULER timer methods --- ======================= --- The SCHEDULER can be stopped and restarted with the following methods: --- --- * @{#SCHEDULER.Start}: (Re-)Start the scheduler. --- * @{#SCHEDULER.Start}: Stop the scheduler. --- --- @module Scheduler --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) - - ---- The SCHEDULER class --- @type SCHEDULER --- @extends Base#BASE -SCHEDULER = { - ClassName = "SCHEDULER", -} - - ---- Constructor. --- @param #SCHEDULER self --- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. --- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. --- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. --- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. --- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. --- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. --- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. --- @return #SCHEDULER self -function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) - local self = BASE:Inherit( self, BASE:New() ) - self:F2( { TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) - - self.TimeEventObject = TimeEventObject - self.TimeEventFunction = TimeEventFunction - self.TimeEventFunctionArguments = TimeEventFunctionArguments - self.StartSeconds = StartSeconds - - if RepeatSecondsInterval then - self.RepeatSecondsInterval = RepeatSecondsInterval - else - self.RepeatSecondsInterval = 0 - end - - if RandomizationFactor then - self.RandomizationFactor = RandomizationFactor - else - self.RandomizationFactor = 0 - end - - if StopSeconds then - self.StopSeconds = StopSeconds - end - - self.Repeat = false - - self.StartTime = timer.getTime() - - self:Start() - - return self -end - ---- (Re-)Starts the scheduler. --- @param #SCHEDULER self --- @return #SCHEDULER self -function SCHEDULER:Start() - self:F2( self.TimeEventObject ) - - self.Repeat = true - timer.scheduleFunction( self._Scheduler, self, timer.getTime() + self.StartSeconds + .01 ) - - return self -end - ---- Stops the scheduler. --- @param #SCHEDULER self --- @return #SCHEDULER self -function SCHEDULER:Stop() - self:F2( self.TimeEventObject ) - - self.Repeat = false - - return self -end - --- Private Functions - -function SCHEDULER:_Scheduler() - self:F2( self.TimeEventFunctionArguments ) - - local ErrorHandler = function( errmsg ) - - env.info( "Error in SCHEDULER function:" .. errmsg ) - env.info( debug.traceback() ) - - return errmsg - end - - local Status, Result - if self.TimeEventObject then - Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) - else - Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) - end - - self:T( { Status, Result } ) - - if Status and Status == true and Result and Result == true then - if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then - timer.scheduleFunction( - self._Scheduler, - self, - timer.getTime() + self.RepeatSecondsInterval + math.random( - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) ) + 0.01 - ) - end - end - -end - - - - - - - - ---- The EVENT class models an efficient event handling process between other classes and its units, weapons. --- @module Event --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) - ---- The EVENT structure --- @type EVENT --- @field #EVENT.Events Events -EVENT = { - ClassName = "EVENT", - ClassID = 0, -} - -local _EVENTCODES = { - "S_EVENT_SHOT", - "S_EVENT_HIT", - "S_EVENT_TAKEOFF", - "S_EVENT_LAND", - "S_EVENT_CRASH", - "S_EVENT_EJECTION", - "S_EVENT_REFUELING", - "S_EVENT_DEAD", - "S_EVENT_PILOT_DEAD", - "S_EVENT_BASE_CAPTURED", - "S_EVENT_MISSION_START", - "S_EVENT_MISSION_END", - "S_EVENT_TOOK_CONTROL", - "S_EVENT_REFUELING_STOP", - "S_EVENT_BIRTH", - "S_EVENT_HUMAN_FAILURE", - "S_EVENT_ENGINE_STARTUP", - "S_EVENT_ENGINE_SHUTDOWN", - "S_EVENT_PLAYER_ENTER_UNIT", - "S_EVENT_PLAYER_LEAVE_UNIT", - "S_EVENT_PLAYER_COMMENT", - "S_EVENT_SHOOTING_START", - "S_EVENT_SHOOTING_END", - "S_EVENT_MAX", -} - ---- The Event structure --- @type EVENTDATA --- @field id --- @field initiator --- @field target --- @field weapon --- @field IniDCSUnit --- @field IniDCSUnitName --- @field IniDCSGroup --- @field IniDCSGroupName --- @field TgtDCSUnit --- @field TgtDCSUnitName --- @field TgtDCSGroup --- @field TgtDCSGroupName --- @field Weapon --- @field WeaponName --- @field WeaponTgtDCSUnit - ---- The Events structure --- @type EVENT.Events --- @field #number IniUnit - -function EVENT:New() - local self = BASE:Inherit( self, BASE:New() ) - self:F() - self.EventHandler = world.addEventHandler( self ) - return self -end - -function EVENT:EventText( EventID ) - - local EventText = _EVENTCODES[EventID] - - return EventText -end - - ---- Initializes the Events structure for the event --- @param #EVENT self --- @param DCSWorld#world.event EventID --- @param #string EventClass --- @return #EVENT.Events -function EVENT:Init( EventID, EventClass ) - self:F3( { _EVENTCODES[EventID], EventClass } ) - if not self.Events[EventID] then - self.Events[EventID] = {} - end - if not self.Events[EventID][EventClass] then - self.Events[EventID][EventClass] = {} - end - return self.Events[EventID][EventClass] -end - - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param #table EventTemplate --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @param #function OnEventFunction --- @return #EVENT -function EVENT:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, OnEventFunction ) - self:F2( EventTemplate.name ) - - for EventUnitID, EventUnit in pairs( EventTemplate.units ) do - OnEventFunction( self, EventUnit.name, EventFunction, EventSelf ) - end - return self -end - ---- Set a new listener for an S_EVENT_X event independent from a unit or a weapon. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @param EventID --- @return #EVENT -function EVENT:OnEventGeneric( EventFunction, EventSelf, EventID ) - self:F2( { EventID } ) - - local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) - Event.EventFunction = EventFunction - Event.EventSelf = EventSelf - return self -end - - ---- Set a new listener for an S_EVENT_X event --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @param EventID --- @return #EVENT -function EVENT:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, EventID ) - self:F2( EventDCSUnitName ) - - local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) - if not Event.IniUnit then - Event.IniUnit = {} - end - Event.IniUnit[EventDCSUnitName] = {} - Event.IniUnit[EventDCSUnitName].EventFunction = EventFunction - Event.IniUnit[EventDCSUnitName].EventSelf = EventSelf - return self -end - - ---- Create an OnBirth event handler for a group --- @param #EVENT self --- @param Group#GROUP EventGroup --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnBirthForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnBirthForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_BIRTH event, and registers the unit born. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf --- @return #EVENT -function EVENT:OnBirth( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) - - return self -end - ---- Set a new listener for an S_EVENT_BIRTH event. --- @param #EVENT self --- @param #string EventDCSUnitName The id of the unit for the event to be handled. --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf --- @return #EVENT -function EVENT:OnBirthForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) - - return self -end - ---- Create an OnCrash event handler for a group --- @param #EVENT self --- @param Group#GROUP EventGroup --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnCrashForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnCrashForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_CRASH event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf --- @return #EVENT -function EVENT:OnCrash( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_CRASH ) - - return self -end - ---- Set a new listener for an S_EVENT_CRASH event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnCrashForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_CRASH ) - - return self -end - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param Group#GROUP EventGroup --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnDeadForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnDeadForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_DEAD event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf --- @return #EVENT -function EVENT:OnDead( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_DEAD ) - - return self -end - - ---- Set a new listener for an S_EVENT_DEAD event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_DEAD ) - - return self -end - ---- Set a new listener for an S_EVENT_PILOT_DEAD event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnPilotDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_PILOT_DEAD ) - - return self -end - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param #table EventTemplate --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnLandForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnLandForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_LAND event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnLandForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_LAND ) - - return self -end - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param #table EventTemplate --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnTakeOffForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnTakeOffForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_TAKEOFF event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnTakeOffForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_TAKEOFF ) - - return self -end - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param #table EventTemplate --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnEngineShutDownForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnEngineShutDownForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_ENGINE_SHUTDOWN event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnEngineShutDownForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_SHUTDOWN ) - - return self -end - ---- Set a new listener for an S_EVENT_ENGINE_STARTUP event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnEngineStartUpForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_STARTUP ) - - return self -end - ---- Set a new listener for an S_EVENT_SHOT event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnShot( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_SHOT ) - - return self -end - ---- Set a new listener for an S_EVENT_SHOT event for a unit. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnShotForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_SHOT ) - - return self -end - ---- Set a new listener for an S_EVENT_HIT event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnHit( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_HIT ) - - return self -end - ---- Set a new listener for an S_EVENT_HIT event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnHitForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_HIT ) - - return self -end - ---- Set a new listener for an S_EVENT_PLAYER_ENTER_UNIT event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnPlayerEnterUnit( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_ENTER_UNIT ) - - return self -end - ---- Set a new listener for an S_EVENT_PLAYER_LEAVE_UNIT event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnPlayerLeaveUnit( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_LEAVE_UNIT ) - - return self -end - - - -function EVENT:onEvent( Event ) - self:F( { _EVENTCODES[Event.id], Event } ) - - 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.IniDCSGroupName = "" - if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then - Event.IniDCSGroupName = Event.IniDCSGroup:getName() - end - end - if Event.target then - if Event.target and Event.target:getCategory() == Object.Category.UNIT then - Event.TgtDCSUnit = Event.target - Event.TgtDCSGroup = Event.TgtDCSUnit:getGroup() - Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() - Event.TgtDCSGroupName = "" - if Event.TgtDCSGroup and Event.TgtDCSGroup:isExist() then - Event.TgtDCSGroupName = Event.TgtDCSGroup:getName() - end - end - end - if Event.weapon then - Event.Weapon = Event.weapon - Event.WeaponName = Event.Weapon:getTypeName() - --Event.WeaponTgtDCSUnit = Event.Weapon:getTarget() - end - self:E( { _EVENTCODES[Event.id], Event } ) - for ClassName, EventData in pairs( self.Events[Event.id] ) do - if Event.IniDCSUnitName and EventData.IniUnit and EventData.IniUnit[Event.IniDCSUnitName] then - self:T2( { "Calling event function for class ", ClassName, " unit ", Event.IniDCSUnitName } ) - EventData.IniUnit[Event.IniDCSUnitName].EventFunction( EventData.IniUnit[Event.IniDCSUnitName].EventSelf, Event ) - else - if Event.IniDCSUnit and not EventData.IniUnit then - self:T2( { "Calling event function for class ", ClassName } ) - EventData.EventFunction( EventData.EventSelf, Event ) - end - end - end - end -end - ---- Encapsulation of DCS World Menu system in a set of MENU classes. --- @module Menu - -Include.File( "Routines" ) -Include.File( "Base" ) - ---- The MENU class --- @type MENU --- @extends Base#BASE -MENU = { - ClassName = "MENU", - MenuPath = nil, - MenuText = "", - MenuParentPath = nil -} - ---- -function MENU:New( MenuText, MenuParentPath ) - - -- Arrange meta tables - local Child = BASE:Inherit( self, BASE:New() ) - - Child.MenuPath = nil - Child.MenuText = MenuText - Child.MenuParentPath = MenuParentPath - return Child -end - ---- The COMMANDMENU class --- @type COMMANDMENU --- @extends Menu#MENU -COMMANDMENU = { - ClassName = "COMMANDMENU", - CommandMenuFunction = nil, - CommandMenuArgument = nil -} - -function COMMANDMENU:New( MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) - - -- Arrange meta tables - - local MenuParentPath = nil - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - - Child.MenuPath = missionCommands.addCommand( MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) - Child.CommandMenuFunction = CommandMenuFunction - Child.CommandMenuArgument = CommandMenuArgument - return Child -end - ---- The SUBMENU class --- @type SUBMENU --- @extends Menu#MENU -SUBMENU = { - ClassName = "SUBMENU" -} - -function SUBMENU:New( MenuText, ParentMenu ) - - -- Arrange meta tables - local MenuParentPath = nil - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - - Child.MenuPath = missionCommands.addSubMenu( MenuText, MenuParentPath ) - return Child -end - --- This local variable is used to cache the menus registered under clients. --- Menus don't dissapear when clients are destroyed and restarted. --- So every menu for a client created must be tracked so that program logic accidentally does not create --- the same menus twice during initialization logic. --- These menu classes are handling this logic with this variable. -local _MENUCLIENTS = {} - ---- The MENU_CLIENT class --- @type MENU_CLIENT --- @extends Menu#MENU -MENU_CLIENT = { - ClassName = "MENU_CLIENT" -} - ---- Creates a new menu item for a group --- @param self --- @param Client#CLIENT MenuClient The Client owning the menu. --- @param #string MenuText The text for the menu. --- @param #table ParentMenu The parent menu. --- @return #MENU_CLIENT self -function MENU_CLIENT:New( MenuClient, MenuText, ParentMenu ) - - -- Arrange meta tables - local MenuParentPath = {} - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - self:F( { MenuClient, MenuText, ParentMenu } ) - - self.MenuClient = MenuClient - self.MenuClientGroupID = MenuClient:GetClientGroupID() - self.MenuParentPath = MenuParentPath - self.MenuText = MenuText - self.ParentMenu = ParentMenu - - self.Menus = {} - - if not _MENUCLIENTS[self.MenuClientGroupID] then - _MENUCLIENTS[self.MenuClientGroupID] = {} - end - - local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] - - self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText } ) - - local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText - if MenuPath[MenuPathID] then - missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) - end - - self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath ) - MenuPath[MenuPathID] = self.MenuPath - - self:T( { MenuClient:GetClientGroupName(), self.MenuPath } ) - - if ParentMenu and ParentMenu.Menus then - ParentMenu.Menus[self.MenuPath] = self - end - return self -end - ---- Removes the sub menus recursively of this MENU_CLIENT. --- @param #MENU_CLIENT self --- @return #MENU_CLIENT self -function MENU_CLIENT:RemoveSubMenus() - self:F( self.MenuPath ) - - for MenuID, Menu in pairs( self.Menus ) do - Menu:Remove() - end - -end - ---- Removes the sub menus recursively of this MENU_CLIENT. --- @param #MENU_CLIENT self --- @return #MENU_CLIENT self -function MENU_CLIENT:Remove() - self:F( self.MenuPath ) - - self:RemoveSubMenus() - - if not _MENUCLIENTS[self.MenuClientGroupID] then - _MENUCLIENTS[self.MenuClientGroupID] = {} - end - - local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] - - if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then - MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil - end - - missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) - self.ParentMenu.Menus[self.MenuPath] = nil - return nil -end - - ---- The MENU_CLIENT_COMMAND class --- @type MENU_CLIENT_COMMAND --- @extends Menu#MENU -MENU_CLIENT_COMMAND = { - ClassName = "MENU_CLIENT_COMMAND" -} - ---- Creates a new radio command item for a group --- @param self --- @param Client#CLIENT MenuClient The Client owning the menu. --- @param MenuText The text for the menu. --- @param ParentMenu The parent menu. --- @param CommandMenuFunction A function that is called when the menu key is pressed. --- @param CommandMenuArgument An argument for the function. --- @return Menu#MENU_CLIENT_COMMAND self -function MENU_CLIENT_COMMAND:New( MenuClient, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) - - -- Arrange meta tables - - local MenuParentPath = {} - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - - self.MenuClient = MenuClient - self.MenuClientGroupID = MenuClient:GetClientGroupID() - self.MenuParentPath = MenuParentPath - self.MenuText = MenuText - self.ParentMenu = ParentMenu - - if not _MENUCLIENTS[self.MenuClientGroupID] then - _MENUCLIENTS[self.MenuClientGroupID] = {} - end - - local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] - - self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) - - local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText - if MenuPath[MenuPathID] then - missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) - end - - self.MenuPath = missionCommands.addCommandForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) - MenuPath[MenuPathID] = self.MenuPath - - self.CommandMenuFunction = CommandMenuFunction - self.CommandMenuArgument = CommandMenuArgument - - ParentMenu.Menus[self.MenuPath] = self - - return self -end - -function MENU_CLIENT_COMMAND:Remove() - self:F( self.MenuPath ) - - if not _MENUCLIENTS[self.MenuClientGroupID] then - _MENUCLIENTS[self.MenuClientGroupID] = {} - end - - local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] - - if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then - MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil - end - - missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) - self.ParentMenu.Menus[self.MenuPath] = nil - return nil -end - - ---- The MENU_COALITION class --- @type MENU_COALITION --- @extends Menu#MENU -MENU_COALITION = { - ClassName = "MENU_COALITION" -} - ---- Creates a new coalition menu item --- @param #MENU_COALITION self --- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. --- @param #string MenuText The text for the menu. --- @param #table ParentMenu The parent menu. --- @return #MENU_COALITION self -function MENU_COALITION:New( MenuCoalition, MenuText, ParentMenu ) - - -- Arrange meta tables - local MenuParentPath = {} - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - self:F( { MenuCoalition, MenuText, ParentMenu } ) - - self.MenuCoalition = MenuCoalition - self.MenuParentPath = MenuParentPath - self.MenuText = MenuText - self.ParentMenu = ParentMenu - - self.Menus = {} - - self:T( { MenuParentPath, MenuText } ) - - self.MenuPath = missionCommands.addSubMenuForCoalition( self.MenuCoalition, MenuText, MenuParentPath ) - - self:T( { self.MenuPath } ) - - if ParentMenu and ParentMenu.Menus then - ParentMenu.Menus[self.MenuPath] = self - end - return self -end - ---- Removes the sub menus recursively of this MENU_COALITION. --- @param #MENU_COALITION self --- @return #MENU_COALITION self -function MENU_COALITION:RemoveSubMenus() - self:F( self.MenuPath ) - - for MenuID, Menu in pairs( self.Menus ) do - Menu:Remove() - end - -end - ---- Removes the sub menus recursively of this MENU_COALITION. --- @param #MENU_COALITION self --- @return #MENU_COALITION self -function MENU_COALITION:Remove() - self:F( self.MenuPath ) - - self:RemoveSubMenus() - missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) - self.ParentMenu.Menus[self.MenuPath] = nil - - return nil -end - - ---- The MENU_COALITION_COMMAND class --- @type MENU_COALITION_COMMAND --- @extends Menu#MENU -MENU_COALITION_COMMAND = { - ClassName = "MENU_COALITION_COMMAND" -} - ---- Creates a new radio command item for a group --- @param #MENU_COALITION_COMMAND self --- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. --- @param MenuText The text for the menu. --- @param ParentMenu The parent menu. --- @param CommandMenuFunction A function that is called when the menu key is pressed. --- @param CommandMenuArgument An argument for the function. --- @return #MENU_COALITION_COMMAND self -function MENU_COALITION_COMMAND:New( MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) - - -- Arrange meta tables - - local MenuParentPath = {} - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - - self.MenuCoalition = MenuCoalition - self.MenuParentPath = MenuParentPath - self.MenuText = MenuText - self.ParentMenu = ParentMenu - - self:T( { MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) - - self.MenuPath = missionCommands.addCommandForCoalition( self.MenuCoalition, MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) - - self.CommandMenuFunction = CommandMenuFunction - self.CommandMenuArgument = CommandMenuArgument - - ParentMenu.Menus[self.MenuPath] = self - - return self -end - ---- Removes a radio command item for a coalition --- @param #MENU_COALITION_COMMAND self --- @return #MENU_COALITION_COMMAND self -function MENU_COALITION_COMMAND:Remove() - self:F( self.MenuPath ) - - missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) - self.ParentMenu.Menus[self.MenuPath] = nil - return nil -end ---- GROUP class. --- --- @{GROUP} class --- ============== --- The @{GROUP} class is a wrapper class to handle the DCS Group objects: --- --- * Support all DCS Group APIs. --- * Enhance with Group specific APIs not in the DCS Group API set. --- * Handle local Group Controller. --- * Manage the "state" of the DCS Group. --- --- --- GROUP reference methods --- ======================= --- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. --- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). --- --- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference --- using the DCS Group or the DCS GroupName. --- --- Another thing to know is that GROUP objects do not "contain" the DCS Group object. --- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. --- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. --- --- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: --- --- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. --- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. --- --- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). --- @module Group --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Message" ) -Include.File( "Unit" ) - ---- The GROUP class --- @type GROUP --- @extends Base#BASE --- @field DCSGroup#Group DCSGroup The DCS group class. --- @field #string GroupName The name of the group. -GROUP = { - ClassName = "GROUP", - GroupName = "", - GroupID = 0, - Controller = nil, - DCSGroup = nil, - WayPointFunctions = {}, - } - ---- A DCSGroup --- @type DCSGroup --- @field id_ The ID of the group in DCS - ---- Create a new GROUP from a DCSGroup --- @param #GROUP self --- @param DCSGroup#Group GroupName The DCS Group name --- @return #GROUP self -function GROUP:Register( GroupName ) - local self = BASE:Inherit( self, BASE:New() ) - self:F2( GroupName ) - self.GroupName = GroupName - return self -end - --- Reference methods. - ---- Find the GROUP wrapper class instance using the DCS Group. --- @param #GROUP self --- @param DCSGroup#Group DCSGroup The DCS Group. --- @return #GROUP The GROUP. -function GROUP:Find( DCSGroup ) - - local GroupName = DCSGroup:getName() -- Group#GROUP - local GroupFound = _DATABASE:FindGroup( GroupName ) - return GroupFound -end - ---- Find the created GROUP using the DCS Group Name. --- @param #GROUP self --- @param #string GroupName The DCS Group Name. --- @return #GROUP The GROUP. -function GROUP:FindByName( GroupName ) - - local GroupFound = _DATABASE:FindGroup( GroupName ) - return GroupFound -end - --- DCS Group methods support. - ---- Returns the DCS Group. --- @param #GROUP self --- @return DCSGroup#Group The DCS Group. -function GROUP:GetDCSGroup() - local DCSGroup = Group.getByName( self.GroupName ) - - if DCSGroup then - return DCSGroup - end - - return nil -end - - ---- Returns if the DCS Group is alive. --- When the group exists at run-time, this method will return true, otherwise false. --- @param #GROUP self --- @return #boolean true if the DCS Group is alive. -function GROUP:IsAlive() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupIsAlive = DCSGroup:isExist() - self:T3( GroupIsAlive ) - return GroupIsAlive - end - - return nil -end - ---- Destroys the DCS Group and all of its DCS Units. --- Note that this destroy method also raises a destroy event at run-time. --- So all event listeners will catch the destroy event of this DCS Group. --- @param #GROUP self -function GROUP:Destroy() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - self:CreateEventCrash( timer.getTime(), UnitData ) - end - DCSGroup:destroy() - DCSGroup = nil - end - - return nil -end - ---- Returns category of the DCS Group. --- @param #GROUP self --- @return DCSGroup#Group.Category The category ID -function GROUP:GetCategory() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T3( GroupCategory ) - return GroupCategory - end - - return nil -end - ---- Returns the category name of the DCS Group. --- @param #GROUP self --- @return #string Category name = Helicopter, Airplane, Ground Unit, Ship -function GROUP:GetCategoryName() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local CategoryNames = { - [Group.Category.AIRPLANE] = "Airplane", - [Group.Category.HELICOPTER] = "Helicopter", - [Group.Category.GROUND] = "Ground Unit", - [Group.Category.SHIP] = "Ship", - } - local GroupCategory = DCSGroup:getCategory() - self:T3( GroupCategory ) - - return CategoryNames[GroupCategory] - end - - return nil -end - - ---- Returns the coalition of the DCS Group. --- @param #GROUP self --- @return DCSCoalitionObject#coalition.side The coalition side of the DCS Group. -function GROUP:GetCoalition() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local GroupCoalition = DCSGroup:getCoalition() - self:T3( GroupCoalition ) - return GroupCoalition - end - - return nil -end - ---- Returns the name of the DCS Group. --- @param #GROUP self --- @return #string The DCS Group name. -function GROUP:GetName() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupName = DCSGroup:getName() - self:T3( GroupName ) - return GroupName - end - - return nil -end - ---- Returns the DCS Group identifier. --- @param #GROUP self --- @return #number The identifier of the DCS Group. -function GROUP:GetID() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupID = DCSGroup:getID() - self:T3( GroupID ) - return GroupID - end - - return nil -end - ---- Returns the UNIT wrapper class with number UnitNumber. --- If the underlying DCS Unit does not exist, the method will return nil. . --- @param #GROUP self --- @param #number UnitNumber The number of the UNIT wrapper class to be returned. --- @return Unit#UNIT The UNIT wrapper class. -function GROUP:GetUnit( UnitNumber ) - self:F2( { self.GroupName, UnitNumber } ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) - self:T3( UnitFound.UnitName ) - self:T2( UnitFound ) - return UnitFound - end - - return nil -end - ---- Returns the DCS Unit with number UnitNumber. --- If the underlying DCS Unit does not exist, the method will return nil. . --- @param #GROUP self --- @param #number UnitNumber The number of the DCS Unit to be returned. --- @return DCSUnit#Unit The DCS Unit. -function GROUP:GetDCSUnit( UnitNumber ) - self:F2( { self.GroupName, UnitNumber } ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) - self:T3( DCSUnitFound ) - return DCSUnitFound - end - - return nil -end - ---- Returns current size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. --- @param #GROUP self --- @return #number The DCS Group size. -function GROUP:GetSize() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupSize = DCSGroup:getSize() - self:T3( GroupSize ) - return GroupSize - end - - return nil -end - ---- ---- Returns the initial size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. --- @param #GROUP self --- @return #number The DCS Group initial size. -function GROUP:GetInitialSize() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupInitialSize = DCSGroup:getInitialSize() - self:T3( GroupInitialSize ) - return GroupInitialSize - end - - return nil -end - ---- Returns the UNITs wrappers of the DCS Units of the DCS Group. --- @param #GROUP self --- @return #table The UNITs wrappers. -function GROUP:GetUnits() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local DCSUnits = DCSGroup:getUnits() - local Units = {} - for Index, UnitData in pairs( DCSUnits ) do - Units[#Units+1] = UNIT:Find( UnitData ) - end - self:T3( Units ) - return Units - end - - return nil -end - - ---- Returns the DCS Units of the DCS Group. --- @param #GROUP self --- @return #table The DCS Units. -function GROUP:GetDCSUnits() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local DCSUnits = DCSGroup:getUnits() - self:T3( DCSUnits ) - return DCSUnits - end - - return nil -end - ---- Get the controller for the GROUP. --- @param #GROUP self --- @return DCSController#Controller -function GROUP:_GetController() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupController = DCSGroup:getController() - self:T3( GroupController ) - return GroupController - end - - return nil -end - - ---- Retrieve the group mission and allow to place function hooks within the mission waypoint plan. --- Use the method @{Group#GROUP:WayPointFunction} to define the hook functions for specific waypoints. --- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. --- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! --- @param #GROUP self --- @return #GROUP -function GROUP:WayPointInitialize() - - self.WayPoints = self:GetTaskRoute() - - return self -end - - ---- Registers a waypoint function that will be executed when the group moves over the WayPoint. --- @param #GROUP self --- @param #number WayPoint The waypoint number. Note that the start waypoint on the route is WayPoint 1! --- @param #number WayPointIndex When defining multiple WayPoint functions for one WayPoint, use WayPointIndex to set the sequence of actions. --- @param #function WayPointFunction The waypoint function to be called when the group moves over the waypoint. The waypoint function takes variable parameters. --- @return #GROUP -function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) - self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) - - table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) - self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) - return self -end - - -function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) - - local DCSTask - - local DCSScript = {} - DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " - - if FunctionArguments.n > 0 then - DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" - else - DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" - end - - DCSTask = self:TaskWrappedAction( - self:CommandDoScript( - table.concat( DCSScript ) - ), WayPointIndex - ) - - self:T3( DCSTask ) - - return DCSTask - -end - - - ---- Executes the WayPoint plan. --- The function gets a WayPoint parameter, that you can use to restart the mission at a specific WayPoint. --- Note that when the WayPoint parameter is used, the new start mission waypoint of the group will be 1! --- @param #GROUP self --- @param #number WayPoint The WayPoint from where to execute the mission. --- @param #WaitTime The amount seconds to wait before initiating the mission. --- @return #GROUP -function GROUP:WayPointExecute( WayPoint, WaitTime ) - - if not WayPoint then - WayPoint = 1 - end - - -- When starting the mission from a certain point, the TaskPoints need to be deleted before the given WayPoint. - for TaskPointID = 1, WayPoint - 1 do - table.remove( self.WayPoints, 1 ) - end - - self:T3( self.WayPoints ) - - self:SetTask( self:TaskRoute( self.WayPoints ), WaitTime ) - - return self -end - - ---- Activates a GROUP. --- @param #GROUP self -function GROUP:Activate() - self:F2( { self.GroupName } ) - trigger.action.activateGroup( self:GetDCSGroup() ) - return self:GetDCSGroup() -end - - ---- Gets the type name of the group. --- @param #GROUP self --- @return #string The type name of the group. -function GROUP:GetTypeName() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupTypeName = DCSGroup:getUnit(1):getTypeName() - self:T3( GroupTypeName ) - return( GroupTypeName ) - end - - return nil -end - ---- Gets the CallSign of the first DCS Unit of the DCS Group. --- @param #GROUP self --- @return #string The CallSign of the first DCS Unit of the DCS Group. -function GROUP:GetCallsign() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCallSign = DCSGroup:getUnit(1):getCallsign() - self:T3( GroupCallSign ) - return GroupCallSign - end - - return nil -end - ---- Returns the current point (Vec2 vector) of the first DCS Unit in the DCS Group. --- @return DCSTypes#Vec2 Current Vec2 point of the first DCS Unit of the DCS Group. -function GROUP:GetPointVec2() - self:F2( self.GroupName ) - - local GroupPointVec2 = self:GetUnit(1):GetPointVec2() - self:T3( GroupPointVec2 ) - return GroupPointVec2 -end - ---- Returns the current point (Vec3 vector) of the first DCS Unit in the DCS Group. --- @return DCSTypes#Vec3 Current Vec3 point of the first DCS Unit of the DCS Group. -function GROUP:GetPointVec3() - self:F2( self.GroupName ) - - local GroupPointVec3 = self:GetUnit(1):GetPointVec3() - self:T3( GroupPointVec3 ) - return GroupPointVec3 -end - - - --- Is Functions - ---- Returns if the group is of an air category. --- If the group is a helicopter or a plane, then this method will return true, otherwise false. --- @param #GROUP self --- @return #boolean Air category evaluation result. -function GROUP:IsAir() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER - self:T3( IsAirResult ) - return IsAirResult - end - - return nil -end - ---- Returns if the DCS Group contains Helicopters. --- @param #GROUP self --- @return #boolean true if DCS Group contains Helicopters. -function GROUP:IsHelicopter() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) - return GroupCategory == Group.Category.HELICOPTER - end - - return nil -end - ---- Returns if the DCS Group contains AirPlanes. --- @param #GROUP self --- @return #boolean true if DCS Group contains AirPlanes. -function GROUP:IsAirPlane() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) - return GroupCategory == Group.Category.AIRPLANE - end - - return nil -end - ---- Returns if the DCS Group contains Ground troops. --- @param #GROUP self --- @return #boolean true if DCS Group contains Ground troops. -function GROUP:IsGround() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) - return GroupCategory == Group.Category.GROUND - end - - return nil -end - ---- Returns if the DCS Group contains Ships. --- @param #GROUP self --- @return #boolean true if DCS Group contains Ships. -function GROUP:IsShip() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) - return GroupCategory == Group.Category.SHIP - end - - return nil -end - ---- Returns if all units of the group are on the ground or landed. --- If all units of this group are on the ground, this function will return true, otherwise false. --- @param #GROUP self --- @return #boolean All units on the ground result. -function GROUP:AllOnGround() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local AllOnGroundResult = true - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - if UnitData:inAir() then - AllOnGroundResult = false - end - end - - self:T3( AllOnGroundResult ) - return AllOnGroundResult - end - - return nil -end - ---- Returns the current maximum velocity of the group. --- Each unit within the group gets evaluated, and the maximum velocity (= the unit which is going the fastest) is returned. --- @param #GROUP self --- @return #number Maximum velocity found. -function GROUP:GetMaxVelocity() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local MaxVelocity = 0 - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - - local Velocity = UnitData:getVelocity() - local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) - - if VelocityTotal < MaxVelocity then - MaxVelocity = VelocityTotal - end - end - - return MaxVelocity - end - - return nil -end - ---- Returns the current minimum height of the group. --- Each unit within the group gets evaluated, and the minimum height (= the unit which is the lowest elevated) is returned. --- @param #GROUP self --- @return #number Minimum height found. -function GROUP:GetMinHeight() - self:F2() - -end - ---- Returns the current maximum height of the group. --- Each unit within the group gets evaluated, and the maximum height (= the unit which is the highest elevated) is returned. --- @param #GROUP self --- @return #number Maximum height found. -function GROUP:GetMaxHeight() - self:F2() - -end - --- Tasks - ---- Popping current Task from the group. --- @param #GROUP self --- @return Group#GROUP self -function GROUP:PopCurrentTask() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local Controller = self:_GetController() - Controller:popTask() - return self - end - - return nil -end - ---- Pushing Task on the queue from the group. --- @param #GROUP self --- @return Group#GROUP self -function GROUP:PushTask( DCSTask, WaitTime ) - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local Controller = self:_GetController() - - -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. - -- Therefore we schedule the functions to set the mission and options for the Group. - -- Controller:pushTask( DCSTask ) - - if WaitTime then - --routines.scheduleFunction( Controller.pushTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) - SCHEDULER:New( Controller, Controller.pushTask, { DCSTask }, WaitTime ) - else - Controller:pushTask( DCSTask ) - end - - return self - end - - return nil -end - ---- Clearing the Task Queue and Setting the Task on the queue from the group. --- @param #GROUP self --- @return Group#GROUP self -function GROUP:SetTask( DCSTask, WaitTime ) - self:F2( { DCSTask } ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - - local Controller = self:_GetController() - - -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. - -- Therefore we schedule the functions to set the mission and options for the Group. - -- Controller.setTask( Controller, DCSTask ) - - if not WaitTime then - WaitTime = 1 - end - --routines.scheduleFunction( Controller.setTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) - SCHEDULER:New( Controller, Controller.setTask, { DCSTask }, WaitTime ) - - return self - end - - return nil -end - - ---- Return a condition section for a controlled task --- @param #GROUP self --- @param DCSTime#Time time --- @param #string userFlag --- @param #boolean userFlagValue --- @param #string condition --- @param DCSTime#Time duration --- @param #number lastWayPoint --- return DCSTask#Task -function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration, lastWayPoint ) - self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) - - local DCSStopCondition = {} - DCSStopCondition.time = time - DCSStopCondition.userFlag = userFlag - DCSStopCondition.userFlagValue = userFlagValue - DCSStopCondition.condition = condition - DCSStopCondition.duration = duration - DCSStopCondition.lastWayPoint = lastWayPoint - - self:T3( { DCSStopCondition } ) - return DCSStopCondition -end - ---- Return a Controlled Task taking a Task and a TaskCondition --- @param #GROUP self --- @param DCSTask#Task DCSTask --- @param #DCSStopCondition DCSStopCondition --- @return DCSTask#Task -function GROUP:TaskControlled( DCSTask, DCSStopCondition ) - self:F2( { DCSTask, DCSStopCondition } ) - - local DCSTaskControlled - - DCSTaskControlled = { - id = 'ControlledTask', - params = { - task = DCSTask, - stopCondition = DCSStopCondition - } - } - - self:T3( { DCSTaskControlled } ) - return DCSTaskControlled -end - ---- Return a Combo Task taking an array of Tasks --- @param #GROUP self --- @param #list DCSTasks --- @return DCSTask#Task -function GROUP:TaskCombo( DCSTasks ) - self:F2( { DCSTasks } ) - - local DCSTaskCombo - - DCSTaskCombo = { - id = 'ComboTask', - params = { - tasks = DCSTasks - } - } - - self:T3( { DCSTaskCombo } ) - return DCSTaskCombo -end - ---- Return a WrappedAction Task taking a Command --- @param #GROUP self --- @param DCSCommand#Command DCSCommand --- @return DCSTask#Task -function GROUP:TaskWrappedAction( DCSCommand, Index ) - self:F2( { DCSCommand } ) - - local DCSTaskWrappedAction - - DCSTaskWrappedAction = { - id = "WrappedAction", - enabled = true, - number = Index, - auto = false, - params = { - action = DCSCommand, - }, - } - - self:T3( { DCSTaskWrappedAction } ) - return DCSTaskWrappedAction -end - ---- Executes a command action --- @param #GROUP self --- @param DCSCommand#Command DCSCommand --- @return #GROUP self -function GROUP:SetCommand( DCSCommand ) - self:F2( DCSCommand ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local Controller = self:_GetController() - Controller:setCommand( DCSCommand ) - return self - end - - return nil -end - ---- Perform a switch waypoint command --- @param #GROUP self --- @param #number FromWayPoint --- @param #number ToWayPoint --- @return DCSTask#Task -function GROUP:CommandSwitchWayPoint( FromWayPoint, ToWayPoint, Index ) - self:F2( { FromWayPoint, ToWayPoint, Index } ) - - local CommandSwitchWayPoint = { - id = 'SwitchWaypoint', - params = { - fromWaypointIndex = FromWayPoint, - goToWaypointIndex = ToWayPoint, - }, - } - - self:T3( { CommandSwitchWayPoint } ) - return CommandSwitchWayPoint -end - - ---- Orbit at a specified position at a specified alititude during a specified duration with a specified speed. --- @param #GROUP self --- @param DCSTypes#Vec2 Point The point to hold the position. --- @param #number Altitude The altitude to hold the position. --- @param #number Speed The speed flying when holding the position. --- @return #GROUP self -function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed ) - self:F2( { self.GroupName, Point, Altitude, Speed } ) - --- pattern = enum AI.Task.OribtPattern, --- point = Vec2, --- point2 = Vec2, --- speed = Distance, --- altitude = Distance - - local LandHeight = land.getHeight( Point ) - - self:T3( { LandHeight } ) - - local DCSTask = { id = 'Orbit', - params = { pattern = AI.Task.OrbitPattern.CIRCLE, - point = Point, - speed = Speed, - altitude = Altitude + LandHeight - } - } - - --- local AITask = { id = 'ControlledTask', --- params = { task = { id = 'Orbit', --- params = { pattern = AI.Task.OrbitPattern.CIRCLE, --- point = Point, --- speed = Speed, --- altitude = Altitude + LandHeight --- } --- }, --- stopCondition = { duration = Duration --- } --- } --- } --- ) - - return DCSTask -end - ---- Orbit at the current position of the first unit of the group at a specified alititude --- @param #GROUP self --- @param #number Altitude The altitude to hold the position. --- @param #number Speed The speed flying when holding the position. --- @return #GROUP self -function GROUP:TaskOrbitCircle( Altitude, Speed ) - self:F2( { self.GroupName, Altitude, Speed } ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupPoint = self:GetPointVec2() - return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) - end - - return nil -end - - - ---- Hold position at the current position of the first unit of the group. --- @param #GROUP self --- @param #number Duration The maximum duration in seconds to hold the position. --- @return #GROUP self -function GROUP:TaskHoldPosition() - self:F2( { self.GroupName } ) - - return self:TaskOrbitCircle( 30, 10 ) -end - - ---- Land the group at a Vec2Point. --- @param #GROUP self --- @param DCSTypes#Vec2 Point The point where to land. --- @param #number Duration The duration in seconds to stay on the ground. --- @return #GROUP self -function GROUP:TaskLandAtVec2( Point, Duration ) - self:F2( { self.GroupName, Point, Duration } ) - - local DCSTask - - if Duration and Duration > 0 then - DCSTask = { id = 'Land', params = { point = Point, durationFlag = true, duration = Duration } } - else - DCSTask = { id = 'Land', params = { point = Point, durationFlag = false } } - end - - self:T3( DCSTask ) - return DCSTask -end - ---- Land the group at a @{Zone#ZONE). --- @param #GROUP self --- @param Zone#ZONE Zone The zone where to land. --- @param #number Duration The duration in seconds to stay on the ground. --- @return #GROUP self -function GROUP:TaskLandAtZone( Zone, Duration, RandomPoint ) - self:F2( { self.GroupName, Zone, Duration, RandomPoint } ) - - local Point - if RandomPoint then - Point = Zone:GetRandomPointVec2() - else - Point = Zone:GetPointVec2() - end - - local DCSTask = self:TaskLandAtVec2( Point, Duration ) - - self:T3( DCSTask ) - return DCSTask -end - - ---- Attack the Unit. --- @param #GROUP self --- @param Unit#UNIT The unit. --- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackUnit( AttackUnit ) - self:F2( { self.GroupName, AttackUnit } ) - --- AttackUnit = { --- id = 'AttackUnit', --- params = { --- unitId = Unit.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend --- attackQty = number, --- direction = Azimuth, --- attackQtyLimit = boolean, --- groupAttack = boolean, --- } --- } - - local DCSTask - DCSTask = { id = 'AttackUnit', - params = { unitId = AttackUnit:GetID(), - expend = AI.Task.WeaponExpend.TWO, - groupAttack = true, - }, - }, - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Attack a Group. --- @param #GROUP self --- @param Group#GROUP AttackGroup The Group to be attacked. --- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackGroup( AttackGroup ) - self:F2( { self.GroupName, AttackGroup } ) - --- AttackGroup = { --- id = 'AttackGroup', --- params = { --- groupId = Group.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend, --- attackQty = number, --- directionEnabled = boolean, --- direction = Azimuth, --- altitudeEnabled = boolean, --- altitude = Distance, --- attackQtyLimit = boolean, --- } --- } - - local DCSTask - DCSTask = { id = 'AttackGroup', - params = { groupId = AttackGroup:GetID(), - expend = AI.Task.WeaponExpend.TWO, - }, - }, - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Fires at a VEC2 point. --- @param #GROUP self --- @param DCSTypes#Vec2 The point to fire at. --- @param DCSTypes#Distance Radius The radius of the zone to deploy the fire at. --- @return DCSTask#Task The DCS task structure. -function GROUP:TaskFireAtPoint( PointVec2, Radius ) - self:F2( { self.GroupName, PointVec2, Radius } ) - --- FireAtPoint = { --- id = 'FireAtPoint', --- params = { --- point = Vec2, --- radius = Distance, --- } --- } - - local DCSTask - DCSTask = { id = 'FireAtPoint', - params = { point = PointVec2, - radius = Radius, - } - } - - self:T3( { DCSTask } ) - return DCSTask -end - - - ---- Move the group to a Vec2 Point, wait for a defined duration and embark a group. --- @param #GROUP self --- @param DCSTypes#Vec2 Point The point where to wait. --- @param #number Duration The duration in seconds to wait. --- @param #GROUP EmbarkingGroup The group to be embarked. --- @return DCSTask#Task The DCS task structure -function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) - self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) - - local DCSTask - DCSTask = { id = 'Embarking', - params = { x = Point.x, - y = Point.y, - duration = Duration, - groupsForEmbarking = { EmbarkingGroup.GroupID }, - durationFlag = true, - distributionFlag = false, - distribution = {}, - } - } - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. --- @param #GROUP self --- @param DCSTypes#Vec2 Point The point where to wait. --- @param #number Radius The radius of the embarking zone around the Point. --- @return DCSTask#Task The DCS task structure. -function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) - self:F2( { self.GroupName, Point, Radius } ) - - local DCSTask --DCSTask#Task - DCSTask = { id = 'EmbarkToTransport', - params = { x = Point.x, - y = Point.y, - zoneRadius = Radius, - } - } - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Return a Misson task from a mission template. --- @param #GROUP self --- @param #table TaskMission A table containing the mission task. --- @return DCSTask#Task -function GROUP:TaskMission( TaskMission ) - self:F2( Points ) - - local DCSTask - DCSTask = { id = 'Mission', params = { TaskMission, }, } - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Return a Misson task to follow a given route defined by Points. --- @param #GROUP self --- @param #table Points A table of route points. --- @return DCSTask#Task -function GROUP:TaskRoute( Points ) - self:F2( Points ) - - local DCSTask - DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Make the DCS Group to fly to a given point and hover. --- @param #GROUP self --- @param DCSTypes#Vec3 Point The destination point in Vec3 format. --- @param #number Speed The speed to travel. --- @return #GROUP self -function GROUP:TaskRouteToVec2( Point, Speed ) - self:F2( { Point, Speed } ) - - local GroupPoint = self:GetUnit( 1 ):GetPointVec2() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.y - PointFrom.type = "Turning Point" - PointFrom.action = "Turning Point" - PointFrom.speed = Speed - PointFrom.speed_locked = true - PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, - } - - - local PointTo = {} - PointTo.x = Point.x - PointTo.y = Point.y - PointTo.type = "Turning Point" - PointTo.action = "Fly Over Point" - PointTo.speed = Speed - PointTo.speed_locked = true - PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, - } - - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self -end - ---- Make the DCS Group to fly to a given point and hover. --- @param #GROUP self --- @param DCSTypes#Vec3 Point The destination point in Vec3 format. --- @param #number Speed The speed to travel. --- @return #GROUP self -function GROUP:TaskRouteToVec3( Point, Speed ) - self:F2( { Point, Speed } ) - - local GroupPoint = self:GetUnit( 1 ):GetPointVec3() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.z - PointFrom.alt = GroupPoint.y - PointFrom.alt_type = "BARO" - PointFrom.type = "Turning Point" - PointFrom.action = "Turning Point" - PointFrom.speed = Speed - PointFrom.speed_locked = true - PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, - } - - - local PointTo = {} - PointTo.x = Point.x - PointTo.y = Point.z - PointTo.alt = Point.y - PointTo.alt_type = "BARO" - PointTo.type = "Turning Point" - PointTo.action = "Fly Over Point" - PointTo.speed = Speed - PointTo.speed_locked = true - PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, - } - - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self -end - - - ---- Make the group to follow a given route. --- @param #GROUP self --- @param #table GoPoints A table of Route Points. --- @return #GROUP self -function GROUP:Route( GoPoints ) - self:F2( GoPoints ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local Points = routines.utils.deepCopy( GoPoints ) - local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } - local Controller = self:_GetController() - --Controller.setTask( Controller, MissionTask ) - --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) - SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) - return self - end - - return nil -end - - - ---- Route the group to a given zone. --- The group final destination point can be randomized. --- A speed can be given in km/h. --- A given formation can be given. --- @param #GROUP self --- @param Zone#ZONE Zone The zone where to route to. --- @param #boolean Randomize Defines whether to target point gets randomized within the Zone. --- @param #number Speed The speed. --- @param Base#FORMATION Formation The formation string. -function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) - self:F2( Zone ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - - local GroupPoint = self:GetPointVec2() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.y - PointFrom.type = "Turning Point" - PointFrom.action = "Cone" - PointFrom.speed = 20 / 1.6 - - - local PointTo = {} - local ZonePoint - - if Randomize then - ZonePoint = Zone:GetRandomPointVec2() - else - ZonePoint = Zone:GetPointVec2() - end - - PointTo.x = ZonePoint.x - PointTo.y = ZonePoint.y - PointTo.type = "Turning Point" - - if Formation then - PointTo.action = Formation - else - PointTo.action = "Cone" - end - - if Speed then - PointTo.speed = Speed - else - PointTo.speed = 20 / 1.6 - end - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self - end - - return nil -end - --- Commands - ---- Do Script command --- @param #GROUP self --- @param #string DoScript --- @return #DCSCommand -function GROUP:CommandDoScript( DoScript ) - - local DCSDoScript = { - id = "Script", - params = { - command = DoScript, - }, - } - - self:T3( DCSDoScript ) - return DCSDoScript -end - - ---- Return the mission template of the group. --- @param #GROUP self --- @return #table The MissionTemplate -function GROUP:GetTaskMission() - self:F2( self.GroupName ) - - return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template ) -end - ---- Return the mission route of the group. --- @param #GROUP self --- @return #table The mission route defined by points. -function GROUP:GetTaskRoute() - self:F2( self.GroupName ) - - return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template.route.points ) -end - ---- Return the route of a group by using the @{Database#DATABASE} class. --- @param #GROUP self --- @param #number Begin The route point from where the copy will start. The base route point is 0. --- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. --- @param #boolean Randomize Randomization of the route, when true. --- @param #number Radius When randomization is on, the randomization is within the radius. -function GROUP:CopyRoute( Begin, End, Randomize, Radius ) - self:F2( { Begin, End } ) - - local Points = {} - - -- Could be a Spawned Group - local GroupName = string.match( self:GetName(), ".*#" ) - if GroupName then - GroupName = GroupName:sub( 1, -2 ) - else - GroupName = self:GetName() - end - - self:T3( { GroupName } ) - - local Template = _DATABASE.Templates.Groups[GroupName].Template - - if Template then - if not Begin then - Begin = 0 - end - if not End then - End = 0 - end - - for TPointID = Begin + 1, #Template.route.points - End do - if Template.route.points[TPointID] then - Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) - if Randomize then - if not Radius then - Radius = 500 - end - Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) - Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) - end - end - end - return Points - end - - return nil -end - - -function GROUP:GetDetectedTargets() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - return self:_GetController():getDetectedTargets() - end - - return nil -end - -function GROUP:IsTargetDetected( DCSObject ) - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - - local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity - = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, - Controller.Detection.VISUAL, - Controller.Detection.OPTIC, - Controller.Detection.RADAR, - Controller.Detection.IRST, - Controller.Detection.RWR, - Controller.Detection.DLINK - ) - return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity - end - - return nil -end - --- Options - ---- Can the GROUP hold their weapons? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROEHoldFirePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() or self:IsGround() or self:IsShip() then - return true - end - - return false - end - - return nil -end - ---- Holding weapons. --- @param Group#GROUP self --- @return Group#GROUP self -function GROUP:OptionROEHoldFire() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) - elseif self:IsGround() then - Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.WEAPON_HOLD ) - elseif self:IsShip() then - Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) - end - - return self - end - - return nil -end - ---- Can the GROUP attack returning on enemy fire? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROEReturnFirePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() or self:IsGround() or self:IsShip() then - return true - end - - return false - end - - return nil -end - ---- Return fire. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROEReturnFire() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) - elseif self:IsGround() then - Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.RETURN_FIRE ) - elseif self:IsShip() then - Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) - end - - return self - end - - return nil -end - ---- Can the GROUP attack designated targets? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROEOpenFirePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() or self:IsGround() or self:IsShip() then - return true - end - - return false - end - - return nil -end - ---- Openfire. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROEOpenFire() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) - elseif self:IsGround() then - Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.OPEN_FIRE ) - elseif self:IsShip() then - Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) - end - - return self - end - - return nil -end - ---- Can the GROUP attack targets of opportunity? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROEWeaponFreePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - ---- Weapon free. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROEWeaponFree() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) - end - - return self - end - - return nil -end - ---- Can the GROUP ignore enemy fire? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROTNoReactionPossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - - ---- No evasion on enemy threats. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROTNoReaction() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) - end - - return self - end - - return nil -end - ---- Can the GROUP evade using passive defenses? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROTPassiveDefensePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - ---- Evasion passive defense. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROTPassiveDefense() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) - end - - return self - end - - return nil -end - ---- Can the GROUP evade on enemy fire? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROTEvadeFirePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - - ---- Evade on fire. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROTEvadeFire() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - end - - return self - end - - return nil -end - ---- Can the GROUP evade on fire using vertical manoeuvres? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROTVerticalPossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - - ---- Evade on fire using vertical manoeuvres. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROTVertical() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) - end - - return self - end - - return nil -end - --- Message APIs - ---- Returns a message for a coalition or a client. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. --- @return Message#MESSAGE -function GROUP:Message( Message, Duration ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - return MESSAGE:New( Message, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) - end - - return nil -end - ---- Send a message to all coalitions. --- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. -function GROUP:MessageToAll( Message, Duration ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - self:Message( Message, Duration ):ToAll() - end - - return nil -end - ---- Send a message to the red coalition. --- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. -function GROUP:MessageToRed( Message, Duration ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - self:Message( Message, Duration ):ToRed() - end - - return nil -end - ---- Send a message to the blue coalition. --- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. -function GROUP:MessageToBlue( Message, Duration ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - self:Message( Message, Duration ):ToBlue() - end - - return nil -end - ---- Send a message to a client. --- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. --- @param Client#CLIENT Client The client object receiving the message. -function GROUP:MessageToClient( Message, Duration, Client ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - self:Message( Message, Duration ):ToClient( Client ) - end - - return nil -end ---- UNIT Class --- --- @{UNIT} class --- ============== --- The @{UNIT} class is a wrapper class to handle the DCS Unit objects: --- --- * Support all DCS Unit APIs. --- * Enhance with Unit specific APIs not in the DCS Unit API set. --- * Handle local Unit Controller. --- * Manage the "state" of the DCS Unit. --- --- --- UNIT reference methods --- ====================== --- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object. --- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class). --- --- The UNIT class **does not contain a :New()** method, rather it provides **:Find()** methods to retrieve the object reference --- using the DCS Unit or the DCS UnitName. --- --- Another thing to know is that UNIT objects do not "contain" the DCS Unit object. --- The UNIT methods will reference the DCS Unit object by name when it is needed during API execution. --- If the DCS Unit object does not exist or is nil, the UNIT methods will return nil and log an exception in the DCS.log file. --- --- The UNIT class provides the following functions to retrieve quickly the relevant UNIT instance: --- --- * @{#UNIT.Find}(): Find a UNIT instance from the _DATABASE object using a DCS Unit object. --- * @{#UNIT.FindByName}(): Find a UNIT instance from the _DATABASE object using a DCS Unit name. --- --- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil). --- --- DCS UNIT APIs --- ============= --- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method. --- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call, --- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSUnit#Unit.getName}() --- is implemented in the UNIT class as @{#UNIT.GetName}(). --- --- Additional UNIT APIs --- ==================== --- The UNIT class comes with additional methods. Find below a summary. --- --- Smoke, Flare Units --- ------------------ --- The UNIT class provides methods to smoke or flare units easily. --- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods --- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit. --- When the DCS Unit moves for whatever reason, the smoking will still continue! --- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}() --- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration. --- --- Position, Point --- --------------- --- The UNIT class provides methods to obtain the current point or position of the DCS Unit. --- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetPointVec3}() will obtain the current location of the DCS Unit in a Vec2 (2D) or a Vec3 (3D) vector respectively. --- If you want to obtain the complete 3D position including oriëntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively. --- --- Alive --- ----- --- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active. --- --- Test for other units in radius --- ------------------------------ --- One can test if another DCS Unit is within a given radius of the current DCS Unit, by using the @{#UNIT.OtherUnitInRadius}() method. --- --- More functions will be added --- ---------------------------- --- During the MOOSE development, more functions will be added. A complete list of the current functions is below. --- --- --- --- --- @module Unit --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Message" ) - ---- The UNIT class --- @type UNIT --- @extends Base#BASE --- @field #UNIT.FlareColor FlareColor --- @field #UNIT.SmokeColor SmokeColor -UNIT = { - ClassName="UNIT", - CategoryName = { - [Unit.Category.AIRPLANE] = "Airplane", - [Unit.Category.HELICOPTER] = "Helicoper", - [Unit.Category.GROUND_UNIT] = "Ground Unit", - [Unit.Category.SHIP] = "Ship", - [Unit.Category.STRUCTURE] = "Structure", - }, - FlareColor = { - Green = trigger.flareColor.Green, - Red = trigger.flareColor.Red, - White = trigger.flareColor.White, - Yellow = trigger.flareColor.Yellow - }, - SmokeColor = { - Green = trigger.smokeColor.Green, - Red = trigger.smokeColor.Red, - White = trigger.smokeColor.White, - Orange = trigger.smokeColor.Orange, - Blue = trigger.smokeColor.Blue - }, - } - ---- FlareColor --- @type UNIT.FlareColor --- @field Green --- @field Red --- @field White --- @field Yellow - ---- SmokeColor --- @type UNIT.SmokeColor --- @field Green --- @field Red --- @field White --- @field Orange --- @field Blue - --- Registration. - ---- Create a new UNIT from DCSUnit. --- @param #UNIT self --- @param DCSUnit#Unit DCSUnit --- @param Database#DATABASE Database --- @return Unit#UNIT -function UNIT:Register( UnitName ) - - local self = BASE:Inherit( self, BASE:New() ) - self:F2( UnitName ) - self.UnitName = UnitName - return self -end - --- Reference methods. - ---- Finds a UNIT from the _DATABASE using a DCSUnit object. --- @param #UNIT self --- @param DCSUnit#Unit DCSUnit An existing DCS Unit object reference. --- @return Unit#UNIT self -function UNIT:Find( DCSUnit ) - - local UnitName = DCSUnit:getName() - local UnitFound = _DATABASE:FindUnit( UnitName ) - return UnitFound -end - ---- Find a UNIT in the _DATABASE using the name of an existing DCS Unit. --- @param #UNIT self --- @param #string UnitName The Unit Name. --- @return Unit#UNIT self -function UNIT:FindByName( UnitName ) - - local UnitFound = _DATABASE:FindUnit( UnitName ) - return UnitFound -end - -function UNIT:GetDCSUnit() - local DCSUnit = Unit.getByName( self.UnitName ) - - if DCSUnit then - return DCSUnit - end - - return nil -end - ---- Returns coalition of the Unit. --- @param Unit#UNIT self --- @return DCSCoalitionObject#coalition.side The side of the coalition. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetCoalition() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitCoalition = DCSUnit:getCoalition() - self:T3( UnitCoalition ) - return UnitCoalition - end - - return nil -end - ---- Returns country of the Unit. --- @param Unit#UNIT self --- @return DCScountry#country.id The country identifier. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetCountry() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitCountry = DCSUnit:getCountry() - self:T3( UnitCountry ) - return UnitCountry - end - - return nil -end - - ---- Returns DCS Unit object name. --- The function provides access to non-activated units too. --- @param Unit#UNIT self --- @return #string The name of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetName() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitName = self.UnitName - return UnitName - end - - return nil -end - - ---- Returns if the unit is alive. --- @param Unit#UNIT self --- @return #boolean true if Unit is alive. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:IsAlive() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitIsAlive = DCSUnit:isExist() - return UnitIsAlive - end - - return false -end - ---- Returns if the unit is activated. --- @param Unit#UNIT self --- @return #boolean true if Unit is activated. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:IsActive() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - - local UnitIsActive = DCSUnit:isActive() - return UnitIsActive - end - - return nil -end - ---- Returns name of the player that control the unit or nil if the unit is controlled by A.I. --- @param Unit#UNIT self --- @return #string Player Name --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPlayerName() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - - local PlayerName = DCSUnit:getPlayerName() - if PlayerName == nil then - PlayerName = "" - end - return PlayerName - end - - return nil -end - ---- Returns the unit's unique identifier. --- @param Unit#UNIT self --- @return DCSUnit#Unit.ID Unit ID --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetID() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitID = DCSUnit:getID() - return UnitID - end - - return nil -end - ---- Returns the unit's number in the group. --- The number is the same number the unit has in ME. --- It may not be changed during the mission. --- If any unit in the group is destroyed, the numbers of another units will not be changed. --- @param Unit#UNIT self --- @return #number The Unit number. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetNumber() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitNumber = DCSUnit:getNumber() - return UnitNumber - end - - return nil -end - ---- Returns the unit's group if it exist and nil otherwise. --- @param Unit#UNIT self --- @return Group#GROUP The Group of the Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetGroup() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitGroup = DCSUnit:getGroup() - return UnitGroup - end - - return nil -end - - ---- Returns the unit's callsign - the localized string. --- @param Unit#UNIT self --- @return #string The Callsign of the Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetCallSign() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitCallSign = DCSUnit:getCallsign() - return UnitCallSign - end - - return nil -end - ---- Returns the unit's health. Dead units has health <= 1.0. --- @param Unit#UNIT self --- @return #number The Unit's health value. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetLife() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitLife = DCSUnit:getLife() - return UnitLife - end - - return nil -end - ---- Returns the Unit's initial health. --- @param Unit#UNIT self --- @return #number The Unit's initial health value. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetLife0() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitLife0 = DCSUnit:getLife0() - return UnitLife0 - end - - return nil -end - ---- Returns relative amount of fuel (from 0.0 to 1.0) the unit has in its internal tanks. If there are additional fuel tanks the value may be greater than 1.0. --- @param Unit#UNIT self --- @return #number The relative amount of fuel (from 0.0 to 1.0). --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetFuel() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitFuel = DCSUnit:getFuel() - return UnitFuel - end - - return nil -end - ---- Returns the Unit's ammunition. --- @param Unit#UNIT self --- @return DCSUnit#Unit.Ammo --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetAmmo() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitAmmo = DCSUnit:getAmmo() - return UnitAmmo - end - - return nil -end - ---- Returns the unit sensors. --- @param Unit#UNIT self --- @return DCSUnit#Unit.Sensors --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetSensors() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitSensors = DCSUnit:getSensors() - return UnitSensors - end - - return nil -end - --- Need to add here a function per sensortype --- unit:hasSensors(Unit.SensorType.RADAR, Unit.RadarType.AS) - ---- Returns two values: --- --- * First value indicates if at least one of the unit's radar(s) is on. --- * Second value is the object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. --- @param Unit#UNIT self --- @return #boolean Indicates if at least one of the unit's radar(s) is on. --- @return DCSObject#Object The object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetRadar() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitRadarOn, UnitRadarObject = DCSUnit:getRadar() - return UnitRadarOn, UnitRadarObject - end - - return nil, nil -end - --- Need to add here functions to check if radar is on and which object etc. - ---- Returns unit descriptor. Descriptor type depends on unit category. --- @param Unit#UNIT self --- @return DCSUnit#Unit.Desc The Unit descriptor. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetDesc() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitDesc = DCSUnit:getDesc() - return UnitDesc - end - - return nil -end - - ---- Returns the type name of the DCS Unit. --- @param Unit#UNIT self --- @return #string The type name of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetTypeName() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitTypeName = DCSUnit:getTypeName() - self:T3( UnitTypeName ) - return UnitTypeName - end - - return nil -end - - - ---- Returns the prefix name of the DCS Unit. A prefix name is a part of the name before a '#'-sign. --- DCS Units spawned with the @{SPAWN} class contain a '#'-sign to indicate the end of the (base) DCS Unit name. --- The spawn sequence number and unit number are contained within the name after the '#' sign. --- @param Unit#UNIT self --- @return #string The name of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPrefix() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPrefix = string.match( self.UnitName, ".*#" ):sub( 1, -2 ) - self:T3( UnitPrefix ) - return UnitPrefix - end - - return nil -end - - - ---- Returns the @{DCSTypes#Vec2} vector indicating the point in 2D of the DCS Unit within the mission. --- @param Unit#UNIT self --- @return DCSTypes#Vec2 The 2D point vector of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPointVec2() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPointVec3 = DCSUnit:getPosition().p - - local UnitPointVec2 = {} - UnitPointVec2.x = UnitPointVec3.x - UnitPointVec2.y = UnitPointVec3.z - - self:T3( UnitPointVec2 ) - return UnitPointVec2 - end - - return nil -end - - ---- Returns the @{DCSTypes#Vec3} vector indicating the point in 3D of the DCS Unit within the mission. --- @param Unit#UNIT self --- @return DCSTypes#Vec3 The 3D point vector of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPointVec3() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPointVec3 = DCSUnit:getPosition().p - self:T3( UnitPointVec3 ) - return UnitPointVec3 - end - - return nil -end - ---- Returns the @{DCSTypes#Position3} position vectors indicating the point and direction vectors in 3D of the DCS Unit within the mission. --- @param Unit#UNIT self --- @return DCSTypes#Position The 3D position vectors of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPositionVec3() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPosition = DCSUnit:getPosition() - self:T3( UnitPosition ) - return UnitPosition - end - - return nil -end - ---- Returns the DCS Unit velocity vector. --- @param Unit#UNIT self --- @return DCSTypes#Vec3 The velocity vector --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetVelocity() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitVelocityVec3 = DCSUnit:getVelocity() - self:T3( UnitVelocityVec3 ) - return UnitVelocityVec3 - end - - return nil -end - ---- Returns true if the DCS Unit is in the air. --- @param Unit#UNIT self --- @return #boolean true if in the air. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:InAir() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitInAir = DCSUnit:inAir() - self:T3( UnitInAir ) - return UnitInAir - end - - return nil -end - ---- Returns the altitude of the DCS Unit. --- @param Unit#UNIT self --- @return DCSTypes#Distance The altitude of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetAltitude() - self:F2() - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPointVec3 = DCSUnit:getPoint() --DCSTypes#Vec3 - return UnitPointVec3.y - end - - return nil -end - ---- Returns true if there is an **other** DCS Unit within a radius of the current 2D point of the DCS Unit. --- @param Unit#UNIT self --- @param Unit#UNIT AwaitUnit The other UNIT wrapper object. --- @param Radius The radius in meters with the DCS Unit in the centre. --- @return true If the other DCS Unit is within the radius of the 2D point of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:OtherUnitInRadius( AwaitUnit, Radius ) - self:F2( { self.UnitName, AwaitUnit.UnitName, Radius } ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPos = self:GetPointVec3() - local AwaitUnitPos = AwaitUnit:GetPointVec3() - - if (((UnitPos.x - AwaitUnitPos.x)^2 + (UnitPos.z - AwaitUnitPos.z)^2)^0.5 <= Radius) then - self:T3( "true" ) - return true - else - self:T3( "false" ) - return false - end - end - - return nil -end - ---- Returns the DCS Unit category name as defined within the DCS Unit Descriptor. --- @param Unit#UNIT self --- @return #string The DCS Unit Category Name -function UNIT:GetCategoryName() - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitCategoryName = self.CategoryName[ self:GetDesc().category ] - return UnitCategoryName - end - - return nil -end - ---- Signal a flare at the position of the UNIT. --- @param #UNIT self -function UNIT:Flare( FlareColor ) - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), FlareColor , 0 ) -end - ---- Signal a white flare at the position of the UNIT. --- @param #UNIT self -function UNIT:FlareWhite() - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.White , 0 ) -end - ---- Signal a yellow flare at the position of the UNIT. --- @param #UNIT self -function UNIT:FlareYellow() - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Yellow , 0 ) -end - ---- Signal a green flare at the position of the UNIT. --- @param #UNIT self -function UNIT:FlareGreen() - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Green , 0 ) -end - ---- Signal a red flare at the position of the UNIT. --- @param #UNIT self -function UNIT:FlareRed() - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Red, 0 ) -end - ---- Smoke the UNIT. --- @param #UNIT self -function UNIT:Smoke( SmokeColor ) - self:F2() - trigger.action.smoke( self:GetPointVec3(), SmokeColor ) -end - ---- Smoke the UNIT Green. --- @param #UNIT self -function UNIT:SmokeGreen() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Green ) -end - ---- Smoke the UNIT Red. --- @param #UNIT self -function UNIT:SmokeRed() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Red ) -end - ---- Smoke the UNIT White. --- @param #UNIT self -function UNIT:SmokeWhite() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.White ) -end - ---- Smoke the UNIT Orange. --- @param #UNIT self -function UNIT:SmokeOrange() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Orange ) -end - ---- Smoke the UNIT Blue. --- @param #UNIT self -function UNIT:SmokeBlue() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Blue ) -end - --- Is methods - ---- Returns if the unit is of an air category. --- If the unit is a helicopter or a plane, then this method will return true, otherwise false. --- @param #UNIT self --- @return #boolean Air category evaluation result. -function UNIT:IsAir() - self:F2() - - local UnitDescriptor = self.DCSUnit:getDesc() - self:T3( { UnitDescriptor.category, Unit.Category.AIRPLANE, Unit.Category.HELICOPTER } ) - - local IsAirResult = ( UnitDescriptor.category == Unit.Category.AIRPLANE ) or ( UnitDescriptor.category == Unit.Category.HELICOPTER ) - - self:T3( IsAirResult ) - return IsAirResult -end - ---- ZONE Classes --- @module Zone - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Message" ) - ---- The ZONE class --- @type ZONE --- @Extends Base#BASE -ZONE = { - ClassName="ZONE", - } - -function ZONE:New( ZoneName ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( ZoneName ) - - local Zone = trigger.misc.getZone( ZoneName ) - - if not Zone then - error( "Zone " .. ZoneName .. " does not exist." ) - return nil - end - - self.Zone = Zone - self.ZoneName = ZoneName - - return self -end - -function ZONE:GetPointVec2() - self:F( self.ZoneName ) - - local Zone = trigger.misc.getZone( self.ZoneName ) - local Point = { x = Zone.point.x, y = Zone.point.z } - - self:T( { Zone, Point } ) - - return Point -end - -function ZONE:GetPointVec3( Height ) - self:F( self.ZoneName ) - - local Zone = trigger.misc.getZone( self.ZoneName ) - local Point = { x = Zone.point.x, y = land.getHeight( self:GetPointVec2() ) + Height, z = Zone.point.z } - - self:T( { Zone, Point } ) - - return Point -end - -function ZONE:GetRandomPointVec2() - self:F( self.ZoneName ) - - local Point = {} - - local Zone = trigger.misc.getZone( self.ZoneName ) - - local angle = math.random() * math.pi*2; - Point.x = Zone.point.x + math.cos( angle ) * math.random() * Zone.radius; - Point.y = Zone.point.z + math.sin( angle ) * math.random() * Zone.radius; - - self:T( { Zone, Point } ) - - return Point -end - -function ZONE:GetRadius() - self:F( self.ZoneName ) - - local Zone = trigger.misc.getZone( self.ZoneName ) - - self:T( { Zone } ) - - return Zone.radius -end - ---- The CLIENT models client units in multi player missions. --- --- @{#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. --- The @{CLIENT} class is a wrapper class to handle the DCS Unit objects that have the skillset defined as __Client__ or __Player__: --- --- * Wraps the DCS Unit objects with skill level set to Player or Client. --- * Support all DCS Unit APIs. --- * Enhance with Unit specific APIs not in the DCS Group API set. --- * When player joins Unit, execute alive init logic. --- * Handles messages to players. --- * Manage the "state" of the DCS Unit. --- --- Clients are being used by the @{MISSION} class to follow players and register their successes. --- --- CLIENT reference methods --- ======================= --- For each DCS Unit having skill level Player or Client, a CLIENT wrapper object (instance) will be created within the _@{DATABASE} object. --- This is done at the beginning of the mission (when the mission starts). --- --- The CLIENT class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference --- using the DCS Unit or the DCS UnitName. --- --- Another thing to know is that CLIENT objects do not "contain" the DCS Unit object. --- The CLIENT methods will reference the DCS Unit object by name when it is needed during API execution. --- If the DCS Unit object does not exist or is nil, the CLIENT methods will return nil and log an exception in the DCS.log file. --- --- The CLIENT class provides the following functions to retrieve quickly the relevant CLIENT instance: --- --- * @{#CLIENT.Find}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit object. --- * @{#CLIENT.FindByName}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit name. --- --- IMPORTANT: ONE SHOULD NEVER SANATIZE these CLIENT OBJECT REFERENCES! (make the CLIENT object references nil). --- --- @module Client --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Cargo" ) -Include.File( "Message" ) - - ---- The CLIENT class --- @type CLIENT --- @extends Unit#UNIT -CLIENT = { - ONBOARDSIDE = { - NONE = 0, - LEFT = 1, - RIGHT = 2, - BACK = 3, - FRONT = 4 - }, - ClassName = "CLIENT", - ClientName = nil, - ClientAlive = false, - ClientTransport = false, - ClientBriefingShown = false, - _Menus = {}, - _Tasks = {}, - Messages = { - } -} - - ---- Finds a CLIENT from the _DATABASE using the relevant DCS Unit. --- @param #CLIENT self --- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. --- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. --- @return #CLIENT --- @usage --- -- Create new Clients. --- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) --- Mission:AddGoal( DeploySA6TroopsGoal ) --- --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) -function CLIENT:Find( DCSUnit ) - local ClientName = DCSUnit:getName() - local ClientFound = _DATABASE:FindClient( ClientName ) - - if ClientFound then - ClientFound:F( ClientName ) - return ClientFound - end - - error( "CLIENT not found for: " .. ClientName ) -end - - ---- Finds a CLIENT from the _DATABASE using the relevant Client Unit Name. --- As an optional parameter, a briefing text can be given also. --- @param #CLIENT self --- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. --- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. --- @return #CLIENT --- @usage --- -- Create new Clients. --- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) --- Mission:AddGoal( DeploySA6TroopsGoal ) --- --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) -function CLIENT:FindByName( ClientName, ClientBriefing ) - local ClientFound = _DATABASE:FindClient( ClientName ) - - if ClientFound then - ClientFound:F( { ClientName, ClientBriefing } ) - ClientFound:AddBriefing( ClientBriefing ) - ClientFound.MessageSwitch = true - - return ClientFound - end - - error( "CLIENT not found for: " .. ClientName ) -end - -function CLIENT:Register( ClientName ) - local self = BASE:Inherit( self, UNIT:Register( ClientName ) ) - - self:F( ClientName ) - self.ClientName = ClientName - self.MessageSwitch = true - self.ClientAlive2 = false - - --self.AliveCheckScheduler = routines.scheduleFunction( self._AliveCheckScheduler, { self }, timer.getTime() + 1, 5 ) - self.AliveCheckScheduler = SCHEDULER:New( self, self._AliveCheckScheduler, {}, 1, 5 ) - - return self -end - - ---- Transport defines that the Client is a Transport. Transports show cargo. --- @param #CLIENT self --- @return #CLIENT -function CLIENT:Transport() - self:F() - - self.ClientTransport = true - return self -end - ---- AddBriefing adds a briefing to a CLIENT when a player joins a mission. --- @param #CLIENT self --- @param #string ClientBriefing is the text defining the Mission briefing. --- @return #CLIENT self -function CLIENT:AddBriefing( ClientBriefing ) - self:F( ClientBriefing ) - self.ClientBriefing = ClientBriefing - self.ClientBriefingShown = false - - return self -end - ---- Show the briefing of a CLIENT. --- @param #CLIENT self --- @return #CLIENT self -function CLIENT:ShowBriefing() - self:F( { self.ClientName, self.ClientBriefingShown } ) - - if not self.ClientBriefingShown then - self.ClientBriefingShown = true - local Briefing = "" - if self.ClientBriefing then - Briefing = Briefing .. self.ClientBriefing - end - Briefing = Briefing .. " Press [LEFT ALT]+[B] to view the complete mission briefing." - self:Message( Briefing, 60, self.ClientName .. '/ClientBriefing', "Briefing" ) - end - - return self -end - ---- Show the mission briefing of a MISSION to the CLIENT. --- @param #CLIENT self --- @param #string MissionBriefing --- @return #CLIENT self -function CLIENT:ShowMissionBriefing( MissionBriefing ) - self:F( { self.ClientName } ) - - if MissionBriefing then - self:Message( MissionBriefing, 60, self.ClientName .. '/MissionBriefing', "Mission Briefing" ) - end - - return self -end - - - ---- Resets a CLIENT. --- @param #CLIENT self --- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client. -function CLIENT:Reset( ClientName ) - self:F() - self._Menus = {} -end - --- Is Functions - ---- Checks if the CLIENT is a multi-seated UNIT. --- @param #CLIENT self --- @return #boolean true if multi-seated. -function CLIENT:IsMultiSeated() - self:F( self.ClientName ) - - local ClientMultiSeatedTypes = { - ["Mi-8MT"] = "Mi-8MT", - ["UH-1H"] = "UH-1H", - ["P-51B"] = "P-51B" - } - - if self:IsAlive() then - local ClientTypeName = self:GetClientGroupUnit():GetTypeName() - if ClientMultiSeatedTypes[ClientTypeName] then - return true - end - end - - return false -end - ---- Checks for a client alive event and calls a function on a continuous basis. --- @param #CLIENT self --- @param #function CallBack Function. --- @return #CLIENT -function CLIENT:Alive( CallBack, ... ) - self:F() - - self.ClientCallBack = CallBack - self.ClientParameters = arg - - return self -end - ---- @param #CLIENT self -function CLIENT:_AliveCheckScheduler() - self:F( { self.ClientName, self.ClientAlive2, self.ClientBriefingShown } ) - - if self:IsAlive() then -- Polymorphic call of UNIT - if self.ClientAlive2 == false then - self:ShowBriefing() - if self.ClientCallBack then - self:T("Calling Callback function") - self.ClientCallBack( self, unpack( self.ClientParameters ) ) - end - self.ClientAlive2 = true - end - else - if self.ClientAlive2 == true then - self.ClientAlive2 = false - end - end - - return true -end - ---- Return the DCSGroup of a Client. --- This function is modified to deal with a couple of bugs in DCS 1.5.3 --- @param #CLIENT self --- @return DCSGroup#Group -function CLIENT:GetDCSGroup() - self:F3() - --- local ClientData = Group.getByName( self.ClientName ) --- if ClientData and ClientData:isExist() then --- self:T( self.ClientName .. " : group found!" ) --- return ClientData --- else --- return nil --- end - - local ClientUnit = Unit.getByName( self.ClientName ) - - local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - self:T3( { "CoalitionData:", CoalitionData } ) - for UnitId, UnitData in pairs( CoalitionData ) do - self:T3( { "UnitData:", UnitData } ) - if UnitData and UnitData:isExist() then - - --self:E(self.ClientName) - if ClientUnit then - local ClientGroup = ClientUnit:getGroup() - if ClientGroup then - self:T3( "ClientGroup = " .. self.ClientName ) - if ClientGroup:isExist() and UnitData:getGroup():isExist() then - if ClientGroup:getID() == UnitData:getGroup():getID() then - self:T3( "Normal logic" ) - self:T3( self.ClientName .. " : group found!" ) - self.ClientGroupID = ClientGroup:getID() - self.ClientGroupName = ClientGroup:getName() - return ClientGroup - end - else - -- Now we need to resolve the bugs in DCS 1.5 ... - -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) - self:T3( "Bug 1.5 logic" ) - local ClientGroupTemplate = _DATABASE.Templates.Units[self.ClientName].GroupTemplate - self.ClientGroupID = ClientGroupTemplate.groupId - self.ClientGroupName = _DATABASE.Templates.Units[self.ClientName].GroupName - self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) - return ClientGroup - end - -- else - -- error( "Client " .. self.ClientName .. " not found!" ) - end - else - --self:E( { "Client not found!", self.ClientName } ) - end - end - end - end - - -- For non player clients - if ClientUnit then - local ClientGroup = ClientUnit:getGroup() - if ClientGroup then - self:T3( "ClientGroup = " .. self.ClientName ) - if ClientGroup:isExist() then - self:T3( "Normal logic" ) - self:T3( self.ClientName .. " : group found!" ) - return ClientGroup - end - end - end - - self.ClientGroupID = nil - self.ClientGroupUnit = nil - - return nil -end - - --- TODO: Check DCSTypes#Group.ID ---- Get the group ID of the client. --- @param #CLIENT self --- @return DCSTypes#Group.ID -function CLIENT:GetClientGroupID() - - local ClientGroup = self:GetDCSGroup() - - --self:E( self.ClientGroupID ) -- Determined in GetDCSGroup() - return self.ClientGroupID -end - - ---- Get the name of the group of the client. --- @param #CLIENT self --- @return #string -function CLIENT:GetClientGroupName() - - local ClientGroup = self:GetDCSGroup() - - self:T( self.ClientGroupName ) -- Determined in GetDCSGroup() - return self.ClientGroupName -end - ---- Returns the UNIT of the CLIENT. --- @param #CLIENT self --- @return Unit#UNIT -function CLIENT:GetClientGroupUnit() - self:F2() - - local ClientDCSUnit = Unit.getByName( self.ClientName ) - - self:T( self.ClientDCSUnit ) - if ClientDCSUnit and ClientDCSUnit:isExist() then - local ClientUnit = _DATABASE:FindUnit( self.ClientName ) - self:T2( ClientUnit ) - return ClientUnit - end -end - ---- Returns the DCSUnit of the CLIENT. --- @param #CLIENT self --- @return DCSTypes#Unit -function CLIENT:GetClientGroupDCSUnit() - self:F2() - - local ClientDCSUnit = Unit.getByName( self.ClientName ) - - if ClientDCSUnit and ClientDCSUnit:isExist() then - self:T2( ClientDCSUnit ) - return ClientDCSUnit - end -end - - ---- Evaluates if the CLIENT is a transport. --- @param #CLIENT self --- @return #boolean true is a transport. -function CLIENT:IsTransport() - self:F() - return self.ClientTransport -end - ---- Shows the @{Cargo#CARGO} contained within the CLIENT to the player as a message. --- The @{Cargo#CARGO} is shown using the @{Message#MESSAGE} distribution system. --- @param #CLIENT self -function CLIENT:ShowCargo() - self:F() - - local CargoMsg = "" - - for CargoName, Cargo in pairs( CARGOS ) do - if self == Cargo:IsLoadedInClient() then - CargoMsg = CargoMsg .. Cargo.CargoName .. " Type:" .. Cargo.CargoType .. " Weight: " .. Cargo.CargoWeight .. "\n" - end - end - - if CargoMsg == "" then - CargoMsg = "empty" - end - - self:Message( CargoMsg, 15, self.ClientName .. "/Cargo", "Co-Pilot: Cargo Status", 30 ) - -end - --- TODO (1) I urgently need to revise this. ---- A local function called by the DCS World Menu system to switch off messages. -function CLIENT.SwitchMessages( PrmTable ) - PrmTable[1].MessageSwitch = PrmTable[2] -end - ---- The main message driver for the CLIENT. --- This function displays various messages to the Player logged into the CLIENT through the DCS World Messaging system. --- @param #CLIENT self --- @param #string Message is the text describing the message. --- @param #number MessageDuration is the duration in seconds that the Message should be displayed. --- @param #string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId --- @param #string MessageCategory is the category of the message (the title). --- @param #number MessageInterval is the interval in seconds between the display of the @{Message#MESSAGE} when the CLIENT is in the air. -function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, MessageInterval ) - self:F( { Message, MessageDuration, MessageId, MessageCategory, MessageInterval } ) - - if not self.MenuMessages then - if self:GetClientGroupID() then - self.MenuMessages = MENU_CLIENT:New( self, 'Messages' ) - self.MenuRouteMessageOn = MENU_CLIENT_COMMAND:New( self, 'Messages On', self.MenuMessages, CLIENT.SwitchMessages, { self, true } ) - self.MenuRouteMessageOff = MENU_CLIENT_COMMAND:New( self,'Messages Off', self.MenuMessages, CLIENT.SwitchMessages, { self, false } ) - end - end - - if self.MessageSwitch == true then - if MessageCategory == nil then - MessageCategory = "Messages" - end - if self.Messages[MessageId] == nil then - self.Messages[MessageId] = {} - self.Messages[MessageId].MessageId = MessageId - self.Messages[MessageId].MessageTime = timer.getTime() - self.Messages[MessageId].MessageDuration = MessageDuration - if MessageInterval == nil then - self.Messages[MessageId].MessageInterval = 600 - else - self.Messages[MessageId].MessageInterval = MessageInterval - end - MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) - else - if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then - if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then - MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) - self.Messages[MessageId].MessageTime = timer.getTime() - end - else - if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + self.Messages[MessageId].MessageInterval then - MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) - self.Messages[MessageId].MessageTime = timer.getTime() - end - end - end - end -end ---- Manage sets of units and groups. --- --- @{#Database} class --- ================== --- Mission designers can use the DATABASE class to build sets of units belonging to certain: --- --- * Coalitions --- * Categories --- * Countries --- * Unit types --- * Starting with certain prefix strings. --- --- This list will grow over time. Planned developments are to include filters and iterators. --- Additional filters will be added around @{Zone#ZONEs}, Radiuses, Active players, ... --- More iterators will be implemented in the near future ... --- --- Administers the Initial Sets of the Mission Templates as defined within the Mission Editor. --- --- DATABASE construction methods: --- ================================= --- Create a new DATABASE object with the @{#DATABASE.New} method: --- --- * @{#DATABASE.New}: Creates a new DATABASE object. --- --- --- DATABASE filter criteria: --- ========================= --- You can set filter criteria to define the set of units within the database. --- Filter criteria are defined by: --- --- * @{#DATABASE.FilterCoalitions}: Builds the DATABASE with the units belonging to the coalition(s). --- * @{#DATABASE.FilterCategories}: Builds the DATABASE with the units belonging to the category(ies). --- * @{#DATABASE.FilterTypes}: Builds the DATABASE with the units belonging to the unit type(s). --- * @{#DATABASE.FilterCountries}: Builds the DATABASE with the units belonging to the country(ies). --- * @{#DATABASE.FilterUnitPrefixes}: Builds the DATABASE with the units starting with the same prefix string(s). --- --- Once the filter criteria have been set for the DATABASE, you can start filtering using: --- --- * @{#DATABASE.FilterStart}: Starts the filtering of the units within the database. --- --- Planned filter criteria within development are (so these are not yet available): --- --- * @{#DATABASE.FilterGroupPrefixes}: Builds the DATABASE with the groups of the units starting with the same prefix string(s). --- * @{#DATABASE.FilterZones}: Builds the DATABASE with the units within a @{Zone#ZONE}. --- --- --- DATABASE iterators: --- =================== --- Once the filters have been defined and the DATABASE has been built, you can iterate the database with the available iterator methods. --- The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. --- The following iterator methods are currently available within the DATABASE: --- --- * @{#DATABASE.ForEachAliveUnit}: Calls a function for each alive unit it finds within the DATABASE. --- --- Planned iterators methods in development are (so these are not yet available): --- --- * @{#DATABASE.ForEachUnit}: Calls a function for each unit contained within the DATABASE. --- * @{#DATABASE.ForEachGroup}: Calls a function for each group contained within the DATABASE. --- * @{#DATABASE.ForEachUnitInZone}: Calls a function for each unit within a certain zone contained within the DATABASE. --- --- ==== --- @module Database --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Menu" ) -Include.File( "Group" ) -Include.File( "Unit" ) -Include.File( "Event" ) -Include.File( "Client" ) - ---- DATABASE class --- @type DATABASE --- @extends Base#BASE -DATABASE = { - ClassName = "DATABASE", - Templates = { - Units = {}, - Groups = {}, - ClientsByName = {}, - ClientsByID = {}, - }, - DCSUnits = {}, - DCSGroups = {}, - UNITS = {}, - GROUPS = {}, - NavPoints = {}, - Statics = {}, - Players = {}, - PlayersAlive = {}, - CLIENTS = {}, - ClientsAlive = {}, - Filter = { - Coalitions = nil, - Categories = nil, - Types = nil, - Countries = nil, - UnitPrefixes = nil, - GroupPrefixes = nil, - }, - FilterMeta = { - Coalitions = { - red = coalition.side.RED, - blue = coalition.side.BLUE, - neutral = coalition.side.NEUTRAL, - }, - Categories = { - plane = Unit.Category.AIRPLANE, - helicopter = Unit.Category.HELICOPTER, - ground = Unit.Category.GROUND_UNIT, - ship = Unit.Category.SHIP, - structure = Unit.Category.STRUCTURE, - }, - }, -} - -local _DATABASECoalition = - { - [1] = "Red", - [2] = "Blue", - } - -local _DATABASECategory = - { - [Unit.Category.AIRPLANE] = "Plane", - [Unit.Category.HELICOPTER] = "Helicopter", - [Unit.Category.GROUND_UNIT] = "Vehicle", - [Unit.Category.SHIP] = "Ship", - [Unit.Category.STRUCTURE] = "Structure", - } - - ---- Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. --- @param #DATABASE self --- @return #DATABASE --- @usage --- -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. --- DBObject = DATABASE:New() -function DATABASE:New() - - -- Inherits from BASE - local self = BASE:Inherit( self, BASE:New() ) - - _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) - _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) - - - -- Add database with registered clients and already alive players - - -- Follow alive players and clients - _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) - _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) - - - return self -end - ---- Finds a Unit based on the Unit Name. --- @param #DATABASE self --- @param #string UnitName --- @return Unit#UNIT The found Unit. -function DATABASE:FindUnit( UnitName ) - - local UnitFound = self.UNITS[UnitName] - return UnitFound -end - ---- Adds a Unit based on the Unit Name in the DATABASE. --- @param #DATABASE self -function DATABASE:AddUnit( DCSUnit, DCSUnitName ) - - self.DCSUnits[DCSUnitName] = DCSUnit - self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) -end - ---- Deletes a Unit from the DATABASE based on the Unit Name. --- @param #DATABASE self -function DATABASE:DeleteUnit( DCSUnitName ) - - self.DCSUnits[DCSUnitName] = nil -end - ---- Finds a CLIENT based on the ClientName. --- @param #DATABASE self --- @param #string ClientName --- @return Client#CLIENT The found CLIENT. -function DATABASE:FindClient( ClientName ) - - local ClientFound = self.CLIENTS[ClientName] - return ClientFound -end - ---- Adds a CLIENT based on the ClientName in the DATABASE. --- @param #DATABASE self -function DATABASE:AddClient( ClientName ) - - self.CLIENTS[ClientName] = CLIENT:Register( ClientName ) - self:E( self.CLIENTS[ClientName]:GetClassNameAndID() ) -end - ---- Finds a GROUP based on the GroupName. --- @param #DATABASE self --- @param #string GroupName --- @return Group#GROUP The found GROUP. -function DATABASE:FindGroup( GroupName ) - - local GroupFound = self.GROUPS[GroupName] - return GroupFound -end - ---- Adds a GROUP based on the GroupName in the DATABASE. --- @param #DATABASE self -function DATABASE:AddGroup( DCSGroup, GroupName ) - - self.DCSGroups[GroupName] = DCSGroup - self.GROUPS[GroupName] = GROUP:Register( GroupName ) -end - ---- Instantiate new Groups within the DCSRTE. --- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: --- SpawnCountryID, SpawnCategoryID --- This method is used by the SPAWN class. --- @param #DATABASE self --- @param #table SpawnTemplate --- @return #DATABASE self -function DATABASE:Spawn( SpawnTemplate ) - self:F( SpawnTemplate.name ) - - self:T( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) - - -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. - local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID - local SpawnCountryID = SpawnTemplate.SpawnCountryID - local SpawnCategoryID = SpawnTemplate.SpawnCategoryID - - -- Nullify - SpawnTemplate.SpawnCoalitionID = nil - SpawnTemplate.SpawnCountryID = nil - SpawnTemplate.SpawnCategoryID = nil - - self:_RegisterGroup( SpawnTemplate ) - coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) - - -- Restore - SpawnTemplate.SpawnCoalitionID = SpawnCoalitionID - SpawnTemplate.SpawnCountryID = SpawnCountryID - SpawnTemplate.SpawnCategoryID = SpawnCategoryID - - - local SpawnGroup = GROUP:Register( SpawnTemplate.name ) - return SpawnGroup -end - - ---- Set a status to a Group within the Database, this to check crossing events for example. -function DATABASE:SetStatusGroup( GroupName, Status ) - self:F( Status ) - - self.Templates.Groups[GroupName].Status = Status -end - - ---- Get a status to a Group within the Database, this to check crossing events for example. -function DATABASE:GetStatusGroup( GroupName ) - self:F( Status ) - - if self.Templates.Groups[GroupName] then - return self.Templates.Groups[GroupName].Status - else - return "" - end -end - ---- Private method that registers new Group Templates within the DATABASE Object. --- @param #DATABASE self --- @param #table GroupTemplate --- @return #DATABASE self -function DATABASE:_RegisterGroup( GroupTemplate ) - - local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) - - if not self.Templates.Groups[GroupTemplateName] then - self.Templates.Groups[GroupTemplateName] = {} - self.Templates.Groups[GroupTemplateName].Status = nil - end - - -- Delete the spans from the route, it is not needed and takes memory. - if GroupTemplate.route and GroupTemplate.route.spans then - GroupTemplate.route.spans = nil - end - - self.Templates.Groups[GroupTemplateName].GroupName = GroupTemplateName - self.Templates.Groups[GroupTemplateName].Template = GroupTemplate - self.Templates.Groups[GroupTemplateName].groupId = GroupTemplate.groupId - self.Templates.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units - self.Templates.Groups[GroupTemplateName].Units = GroupTemplate.units - - self:T( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } ) - - for unit_num, UnitTemplate in pairs( GroupTemplate.units ) do - - local UnitTemplateName = env.getValueDictByKey(UnitTemplate.name) - self.Templates.Units[UnitTemplateName] = {} - self.Templates.Units[UnitTemplateName].UnitName = UnitTemplateName - self.Templates.Units[UnitTemplateName].Template = UnitTemplate - self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName - self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate - self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId - self:E( {"skill",UnitTemplate.skill}) - if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then - self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate - self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate - end - self:E( { "Unit", self.Templates.Units[UnitTemplateName].UnitName } ) - end -end - ---- Private method that registers all alive players in the mission. --- @param #DATABASE self --- @return #DATABASE self -function DATABASE:_RegisterPlayers() - - local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - for UnitId, UnitData in pairs( CoalitionData ) do - self:T3( { "UnitData:", UnitData } ) - if UnitData and UnitData:isExist() then - local UnitName = UnitData:getName() - if not self.PlayersAlive[UnitName] then - self:E( { "Add player for unit:", UnitName, UnitData:getPlayerName() } ) - self.PlayersAlive[UnitName] = UnitData:getPlayerName() - end - end - end - end - - return self -end - ---- Private method that registers all datapoints within in the mission. --- @param #DATABASE self --- @return #DATABASE self -function DATABASE:_RegisterDatabase() - - local CoalitionsData = { GroupsRed = coalition.getGroups( coalition.side.RED ), GroupsBlue = coalition.getGroups( coalition.side.BLUE ) } - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - for DCSGroupId, DCSGroup in pairs( CoalitionData ) do - - if DCSGroup:isExist() then - local DCSGroupName = DCSGroup:getName() - - self:E( { "Register Group:", DCSGroup, DCSGroupName } ) - self:AddGroup( DCSGroup, DCSGroupName ) - - for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do - - local DCSUnitName = DCSUnit:getName() - self:E( { "Register Unit:", DCSUnit, DCSUnitName } ) - self:AddUnit( DCSUnit, DCSUnitName ) - end - else - self:E( { "Group does not exist: ", DCSGroup } ) - end - - end - end - - for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do - self:E( { "Adding Client:", ClientName } ) - self:AddClient( ClientName ) - end - - return self -end - ---- Events - ---- Handles the OnBirth event for the alive units set. --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnBirth( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - self:AddUnit( Event.IniDCSUnit, Event.IniDCSUnitName ) - self:AddGroup( Event.IniDCSGroup, Event.IniDCSGroupName ) - self:_EventOnPlayerEnterUnit( Event ) - end - end -end - ---- Handles the OnDead or OnCrash event for alive units set. --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnDeadOrCrash( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self.DCSUnits[Event.IniDCSUnitName] then - self:DeleteUnit( Event.IniDCSUnitName ) - -- add logic to correctly remove a group once all units are destroyed... - end - end -end - ---- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnPlayerEnterUnit( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - if not self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Add player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = Event.IniDCSUnit:getPlayerName() - self.ClientsAlive[Event.IniDCSUnitName] = self.CLIENTS[ Event.IniDCSUnitName ] - end - end - end -end - ---- Handles the OnPlayerLeaveUnit event to clean the active players table. --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnPlayerLeaveUnit( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - if self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Cleaning player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = nil - self.ClientsAlive[Event.IniDCSUnitName] = nil - end - end - end -end - ---- Iterators - ---- Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters. --- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive player in the database. --- @return #DATABASE self -function DATABASE:ForEach( IteratorFunction, arg, Set ) - self:F( arg ) - - local function CoRoutine() - local Count = 0 - for ObjectID, Object in pairs( Set ) do - self:T2( Object ) - IteratorFunction( Object, unpack( arg ) ) - Count = Count + 1 - if Count % 10 == 0 then - coroutine.yield( false ) - end - end - return true - end - - local co = coroutine.create( CoRoutine ) - - local function Schedule() - - local status, res = coroutine.resume( co ) - self:T( { status, res } ) - - if status == false then - error( res ) - end - if res == false then - return true -- resume next time the loop - end - - return false - end - - local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 ) - - return self -end - - ---- Interate the DATABASE and call an interator function for each **alive** unit, providing the Unit and optional parameters. --- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter. --- @return #DATABASE self -function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.DCSUnits ) - - return self -end - ---- Interate the DATABASE and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. --- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. --- @return #DATABASE self -function DATABASE:ForEachPlayer( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.PlayersAlive ) - - return self -end - - ---- Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters. --- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter. --- @return #DATABASE self -function DATABASE:ForEachClient( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.CLIENTS ) - - return self -end - - -function DATABASE:ScanEnvironment() - self:F() - - self.Navpoints = {} - self.UNITS = {} - --Build routines.db.units and self.Navpoints - for coa_name, coa_data in pairs(env.mission.coalition) do - - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - --self.Units[coa_name] = {} - - ---------------------------------------------- - -- build nav points DB - self.Navpoints[coa_name] = {} - if coa_data.nav_points then --navpoints - for nav_ind, nav_data in pairs(coa_data.nav_points) do - - if type(nav_data) == 'table' then - self.Navpoints[coa_name][nav_ind] = routines.utils.deepCopy(nav_data) - - self.Navpoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. - self.Navpoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. - self.Navpoints[coa_name][nav_ind]['point']['x'] = nav_data.x - self.Navpoints[coa_name][nav_ind]['point']['y'] = 0 - self.Navpoints[coa_name][nav_ind]['point']['z'] = nav_data.y - end - end - end - ------------------------------------------------- - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - - local countryName = string.lower(cntry_data.name) - --self.Units[coa_name][countryName] = {} - --self.Units[coa_name][countryName]["countryId"] = cntry_data.id - - if type(cntry_data) == 'table' then --just making sure - - for obj_type_name, obj_type_data in pairs(cntry_data) do - - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check - - local category = obj_type_name - - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - - --self.Units[coa_name][countryName][category] = {} - - for group_num, GroupTemplate in pairs(obj_type_data.group) do - - if GroupTemplate and GroupTemplate.units and type(GroupTemplate.units) == 'table' then --making sure again- this is a valid group - self:_RegisterGroup( GroupTemplate ) - end --if GroupTemplate and GroupTemplate.units then - end --for group_num, GroupTemplate in pairs(obj_type_data.group) do - end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then - end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then - end --for obj_type_name, obj_type_data in pairs(cntry_data) do - end --if type(cntry_data) == 'table' then - end --for cntry_id, cntry_data in pairs(coa_data.country) do - end --if coa_data.country then --there is a country table - end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then - end --for coa_name, coa_data in pairs(mission.coalition) do - - self:_RegisterDatabase() - self:_RegisterPlayers() - - return self -end - - ---- --- @param #DATABASE self --- @param DCSUnit#Unit DCSUnit --- @return #DATABASE self -function DATABASE:_IsIncludeDCSUnit( DCSUnit ) - self:F( DCSUnit ) - local DCSUnitInclude = true - - if self.Filter.Coalitions then - local DCSUnitCoalition = false - for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do - self:T( { "Coalition:", DCSUnit:getCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) - if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == DCSUnit:getCoalition() then - DCSUnitCoalition = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCoalition - end - - if self.Filter.Categories then - local DCSUnitCategory = false - for CategoryID, CategoryName in pairs( self.Filter.Categories ) do - self:T( { "Category:", DCSUnit:getDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) - if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == DCSUnit:getDesc().category then - DCSUnitCategory = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCategory - end - - if self.Filter.Types then - local DCSUnitType = false - for TypeID, TypeName in pairs( self.Filter.Types ) do - self:T( { "Type:", DCSUnit:getTypeName(), TypeName } ) - if TypeName == DCSUnit:getTypeName() then - DCSUnitType = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitType - end - - if self.Filter.Countries then - local DCSUnitCountry = false - for CountryID, CountryName in pairs( self.Filter.Countries ) do - self:T( { "Country:", DCSUnit:getCountry(), CountryName } ) - if country.id[CountryName] == DCSUnit:getCountry() then - DCSUnitCountry = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCountry - end - - if self.Filter.UnitPrefixes then - local DCSUnitPrefix = false - for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do - self:T( { "Unit Prefix:", string.find( DCSUnit:getName(), UnitPrefix, 1 ), UnitPrefix } ) - if string.find( DCSUnit:getName(), UnitPrefix, 1 ) then - DCSUnitPrefix = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitPrefix - end - - self:T( DCSUnitInclude ) - return DCSUnitInclude -end - ---- --- @param #DATABASE self --- @param DCSUnit#Unit DCSUnit --- @return #DATABASE self -function DATABASE:_IsAliveDCSUnit( DCSUnit ) - self:F( DCSUnit ) - local DCSUnitAlive = false - if DCSUnit and DCSUnit:isExist() and DCSUnit:isActive() then - if self.DCSUnits[DCSUnit:getName()] then - DCSUnitAlive = true - end - end - self:T( DCSUnitAlive ) - return DCSUnitAlive -end - ---- --- @param #DATABASE self --- @param DCSGroup#Group DCSGroup --- @return #DATABASE self -function DATABASE:_IsAliveDCSGroup( DCSGroup ) - self:F( DCSGroup ) - local DCSGroupAlive = false - if DCSGroup and DCSGroup:isExist() then - if self.DCSGroups[DCSGroup:getName()] then - DCSGroupAlive = true - end - end - self:T( DCSGroupAlive ) - return DCSGroupAlive -end - - ---- Traces the current database contents in the log ... (for debug reasons). --- @param #DATABASE self --- @return #DATABASE self -function DATABASE:TraceDatabase() - self:F() - - self:T( { "DCSUnits:", self.DCSUnits } ) -end - - ---- The main include file for the MOOSE system. - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Database" ) -Include.File( "Event" ) - --- The order of the declarations is important here. Don't touch it. - ---- Declare the event dispatcher based on the EVENT class -_EVENTDISPATCHER = EVENT:New() -- #EVENT - ---- Declare the main database object, which is used internally by the MOOSE classes. -_DATABASE = DATABASE:New():ScanEnvironment() -- Database#DATABASE - ---- Scoring system for MOOSE. --- This scoring class calculates the hits and kills that players make within a simulation session. --- Scoring is calculated using a defined algorithm. --- With a small change in MissionScripting.lua, the scoring can also be logged in a CSV file, that can then be uploaded --- to a database or a BI tool to publish the scoring results to the player community. --- @module Scoring --- @author FlightControl - - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Menu" ) -Include.File( "Group" ) -Include.File( "Event" ) - - ---- The Scoring class --- @type SCORING --- @field Players A collection of the current players that have joined the game. --- @extends Base#BASE -SCORING = { - ClassName = "SCORING", - ClassID = 0, - Players = {}, -} - -local _SCORINGCoalition = - { - [1] = "Red", - [2] = "Blue", - } - -local _SCORINGCategory = - { - [Unit.Category.AIRPLANE] = "Plane", - [Unit.Category.HELICOPTER] = "Helicopter", - [Unit.Category.GROUND_UNIT] = "Vehicle", - [Unit.Category.SHIP] = "Ship", - [Unit.Category.STRUCTURE] = "Structure", - } - ---- Creates a new SCORING object to administer the scoring achieved by players. --- @param #SCORING self --- @param #string GameName The name of the game. This name is also logged in the CSV score file. --- @return #SCORING self --- @usage --- -- Define a new scoring object for the mission Gori Valley. --- ScoringObject = SCORING:New( "Gori Valley" ) -function SCORING:New( GameName ) - - -- Inherits from BASE - local self = BASE:Inherit( self, BASE:New() ) - - if GameName then - self.GameName = GameName - else - error( "A game name must be given to register the scoring results" ) - end - - - _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnHit( self._EventOnHit, self ) - - --self.SchedulerId = routines.scheduleFunction( SCORING._FollowPlayersScheduled, { self }, 0, 5 ) - self.SchedulerId = SCHEDULER:New( self, self._FollowPlayersScheduled, {}, 0, 5 ) - - self:ScoreMenu() - - return self - -end - ---- Creates a score radio menu. Can be accessed using Radio -> F10. --- @param #SCORING self --- @return #SCORING self -function SCORING:ScoreMenu() - self.Menu = SUBMENU:New( 'Scoring' ) - self.AllScoresMenu = COMMANDMENU:New( 'Score All Active Players', self.Menu, SCORING.ReportScoreAll, self ) - --- = COMMANDMENU:New('Your Current Score', ReportScore, SCORING.ReportScorePlayer, self ) - return self -end - ---- Follows new players entering Clients within the DCSRTE. --- TODO: Need to see if i can catch this also with an event. It will eliminate the schedule ... -function SCORING:_FollowPlayersScheduled() - self:F3( "_FollowPlayersScheduled" ) - - local ClientUnit = 0 - local CoalitionsData = { AlivePlayersRed = coalition.getPlayers(coalition.side.RED), AlivePlayersBlue = coalition.getPlayers(coalition.side.BLUE) } - local unitId - local unitData - local AlivePlayerUnits = {} - - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - self:T3( { "_FollowPlayersScheduled", CoalitionData } ) - for UnitId, UnitData in pairs( CoalitionData ) do - self:_AddPlayerFromUnit( UnitData ) - end - end - - return true -end - - ---- Track DEAD or CRASH events for the scoring. --- @param #SCORING self --- @param Event#EVENTDATA Event -function SCORING:_EventOnDeadOrCrash( Event ) - self:F( { Event } ) - - local TargetUnit = nil - local TargetGroup = nil - local TargetUnitName = "" - local TargetGroupName = "" - local TargetPlayerName = "" - local TargetCoalition = nil - local TargetCategory = nil - local TargetType = nil - local TargetUnitCoalition = nil - local TargetUnitCategory = nil - local TargetUnitType = nil - - if Event.IniDCSUnit then - - TargetUnit = Event.IniDCSUnit - TargetUnitName = Event.IniDCSUnitName - TargetGroup = Event.IniDCSGroup - TargetGroupName = Event.IniDCSGroupName - TargetPlayerName = TargetUnit:getPlayerName() - - TargetCoalition = TargetUnit:getCoalition() - --TargetCategory = TargetUnit:getCategory() - TargetCategory = TargetUnit:getDesc().category -- Workaround - TargetType = TargetUnit:getTypeName() - - TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] - TargetUnitCategory = _SCORINGCategory[TargetCategory] - TargetUnitType = TargetType - - self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } ) - end - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Something got killed" ) - - -- Some variables - local InitUnitName = PlayerData.UnitName - local InitUnitType = PlayerData.UnitType - local InitCoalition = PlayerData.UnitCoalition - local InitCategory = PlayerData.UnitCategory - local InitUnitCoalition = _SCORINGCoalition[InitCoalition] - local InitUnitCategory = _SCORINGCategory[InitCategory] - - self:T( { InitUnitName, InitUnitType, InitUnitCoalition, InitCoalition, InitUnitCategory, InitCategory } ) - - -- What is he hitting? - if TargetCategory then - if PlayerData and PlayerData.Hit and PlayerData.Hit[TargetCategory] and PlayerData.Hit[TargetCategory][TargetUnitName] then -- Was there a hit for this unit for this player before registered??? - if not PlayerData.Kill[TargetCategory] then - PlayerData.Kill[TargetCategory] = {} - end - if not PlayerData.Kill[TargetCategory][TargetType] then - PlayerData.Kill[TargetCategory][TargetType] = {} - PlayerData.Kill[TargetCategory][TargetType].Score = 0 - PlayerData.Kill[TargetCategory][TargetType].ScoreKill = 0 - PlayerData.Kill[TargetCategory][TargetType].Penalty = 0 - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = 0 - end - - if InitCoalition == TargetCoalition then - PlayerData.Penalty = PlayerData.Penalty + 25 - PlayerData.Kill[TargetCategory][TargetType].Penalty = PlayerData.Kill[TargetCategory][TargetType].Penalty + 25 - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = PlayerData.Kill[TargetCategory][TargetType].PenaltyKill + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' killed a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill .. " times. Penalty: -" .. PlayerData.Kill[TargetCategory][TargetType].Penalty .. - ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, - "", 5, "/PENALTY" .. PlayerName .. "/" .. InitUnitName ):ToAll() - self:ScoreCSV( PlayerName, "KILL_PENALTY", 1, -125, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - else - PlayerData.Score = PlayerData.Score + 10 - PlayerData.Kill[TargetCategory][TargetType].Score = PlayerData.Kill[TargetCategory][TargetType].Score + 10 - PlayerData.Kill[TargetCategory][TargetType].ScoreKill = PlayerData.Kill[TargetCategory][TargetType].ScoreKill + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' killed an enemy " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - PlayerData.Kill[TargetCategory][TargetType].ScoreKill .. " times. Score: " .. PlayerData.Kill[TargetCategory][TargetType].Score .. - ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, - "", 5, "/SCORE" .. PlayerName .. "/" .. InitUnitName ):ToAll() - self:ScoreCSV( PlayerName, "KILL_SCORE", 1, 10, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - end - end - end - end - end -end - - - ---- Add a new player entering a Unit. -function SCORING:_AddPlayerFromUnit( UnitData ) - self:F( UnitData ) - - if UnitData and UnitData:isExist() then - local UnitName = UnitData:getName() - local PlayerName = UnitData:getPlayerName() - local UnitDesc = UnitData:getDesc() - local UnitCategory = UnitDesc.category - local UnitCoalition = UnitData:getCoalition() - local UnitTypeName = UnitData:getTypeName() - - self:T( { PlayerName, UnitName, UnitCategory, UnitCoalition, UnitTypeName } ) - - if self.Players[PlayerName] == nil then -- I believe this is the place where a Player gets a life in a mission when he enters a unit ... - self.Players[PlayerName] = {} - self.Players[PlayerName].Hit = {} - self.Players[PlayerName].Kill = {} - self.Players[PlayerName].Mission = {} - - -- for CategoryID, CategoryName in pairs( SCORINGCategory ) do - -- self.Players[PlayerName].Hit[CategoryID] = {} - -- self.Players[PlayerName].Kill[CategoryID] = {} - -- end - self.Players[PlayerName].HitPlayers = {} - self.Players[PlayerName].HitUnits = {} - self.Players[PlayerName].Score = 0 - self.Players[PlayerName].Penalty = 0 - self.Players[PlayerName].PenaltyCoalition = 0 - self.Players[PlayerName].PenaltyWarning = 0 - end - - if not self.Players[PlayerName].UnitCoalition then - self.Players[PlayerName].UnitCoalition = UnitCoalition - else - if self.Players[PlayerName].UnitCoalition ~= UnitCoalition then - self.Players[PlayerName].Penalty = self.Players[PlayerName].Penalty + 50 - self.Players[PlayerName].PenaltyCoalition = self.Players[PlayerName].PenaltyCoalition + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' changed coalition from " .. _SCORINGCoalition[self.Players[PlayerName].UnitCoalition] .. " to " .. _SCORINGCoalition[UnitCoalition] .. - "(changed " .. self.Players[PlayerName].PenaltyCoalition .. " times the coalition). 50 Penalty points added.", - "", - 2, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - self:ScoreCSV( PlayerName, "COALITION_PENALTY", 1, -50, self.Players[PlayerName].UnitName, _SCORINGCoalition[self.Players[PlayerName].UnitCoalition], _SCORINGCategory[self.Players[PlayerName].UnitCategory], self.Players[PlayerName].UnitType, - UnitName, _SCORINGCoalition[UnitCoalition], _SCORINGCategory[UnitCategory], UnitData:getTypeName() ) - end - end - self.Players[PlayerName].UnitName = UnitName - self.Players[PlayerName].UnitCoalition = UnitCoalition - self.Players[PlayerName].UnitCategory = UnitCategory - self.Players[PlayerName].UnitType = UnitTypeName - - if self.Players[PlayerName].Penalty > 100 then - if self.Players[PlayerName].PenaltyWarning < 1 then - MESSAGE:New( "Player '" .. PlayerName .. "': WARNING! If you continue to commit FRATRICIDE and have a PENALTY score higher than 150, you will be COURT MARTIALED and DISMISSED from this mission! \nYour total penalty is: " .. self.Players[PlayerName].Penalty, - "", - 30, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - self.Players[PlayerName].PenaltyWarning = self.Players[PlayerName].PenaltyWarning + 1 - end - end - - if self.Players[PlayerName].Penalty > 150 then - ClientGroup = GROUP:NewFromDCSUnit( UnitData ) - ClientGroup:Destroy() - MESSAGE:New( "Player '" .. PlayerName .. "' committed FRATRICIDE, he will be COURT MARTIALED and is DISMISSED from this mission!", - "", - 10, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - end - - end -end - - ---- Registers Scores the players completing a Mission Task. -function SCORING:_AddMissionTaskScore( PlayerUnit, MissionName, Score ) - self:F( { PlayerUnit, MissionName, Score } ) - - local PlayerName = PlayerUnit:getPlayerName() - - if not self.Players[PlayerName].Mission[MissionName] then - self.Players[PlayerName].Mission[MissionName] = {} - self.Players[PlayerName].Mission[MissionName].ScoreTask = 0 - self.Players[PlayerName].Mission[MissionName].ScoreMission = 0 - end - - self:T( PlayerName ) - self:T( self.Players[PlayerName].Mission[MissionName] ) - - self.Players[PlayerName].Score = self.Players[PlayerName].Score + Score - self.Players[PlayerName].Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score - - MESSAGE:New( "Player '" .. PlayerName .. "' has finished another Task in Mission '" .. MissionName .. "'. " .. - Score .. " Score points added.", - "", 20, "/SCORETASK" .. PlayerName ):ToAll() - - self:ScoreCSV( PlayerName, "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score, PlayerUnit:getName() ) -end - - ---- Registers Mission Scores for possible multiple players that contributed in the Mission. -function SCORING:_AddMissionScore( MissionName, Score ) - self:F( { MissionName, Score } ) - - for PlayerName, PlayerData in pairs( self.Players ) do - - if PlayerData.Mission[MissionName] then - PlayerData.Score = PlayerData.Score + Score - PlayerData.Mission[MissionName].ScoreMission = PlayerData.Mission[MissionName].ScoreMission + Score - MESSAGE:New( "Player '" .. PlayerName .. "' has finished Mission '" .. MissionName .. "'. " .. - Score .. " Score points added.", - "", 20, "/SCOREMISSION" .. PlayerName ):ToAll() - self:ScoreCSV( PlayerName, "MISSION_" .. MissionName:gsub( ' ', '_' ), 1, Score ) - end - end -end - ---- Handles the OnHit event for the scoring. --- @param #SCORING self --- @param Event#EVENTDATA Event -function SCORING:_EventOnHit( Event ) - self:F( { Event } ) - - local InitUnit = nil - local InitUnitName = "" - local InitGroup = nil - local InitGroupName = "" - local InitPlayerName = nil - - local InitCoalition = nil - local InitCategory = nil - local InitType = nil - local InitUnitCoalition = nil - local InitUnitCategory = nil - local InitUnitType = nil - - local TargetUnit = nil - local TargetUnitName = "" - local TargetGroup = nil - local TargetGroupName = "" - local TargetPlayerName = "" - - local TargetCoalition = nil - local TargetCategory = nil - local TargetType = nil - local TargetUnitCoalition = nil - local TargetUnitCategory = nil - local TargetUnitType = nil - - if Event.IniDCSUnit then - - InitUnit = Event.IniDCSUnit - InitUnitName = Event.IniDCSUnitName - InitGroup = Event.IniDCSGroup - InitGroupName = Event.IniDCSGroupName - InitPlayerName = InitUnit:getPlayerName() - - InitCoalition = InitUnit:getCoalition() - --TODO: Workaround Client DCS Bug - --InitCategory = InitUnit:getCategory() - InitCategory = InitUnit:getDesc().category - InitType = InitUnit:getTypeName() - - InitUnitCoalition = _SCORINGCoalition[InitCoalition] - InitUnitCategory = _SCORINGCategory[InitCategory] - InitUnitType = InitType - - self:T( { InitUnitName, InitGroupName, InitPlayerName, InitCoalition, InitCategory, InitType , InitUnitCoalition, InitUnitCategory, InitUnitType } ) - end - - - if Event.TgtDCSUnit then - - TargetUnit = Event.TgtDCSUnit - TargetUnitName = Event.TgtDCSUnitName - TargetGroup = Event.TgtDCSGroup - TargetGroupName = Event.TgtDCSGroupName - TargetPlayerName = TargetUnit:getPlayerName() - - TargetCoalition = TargetUnit:getCoalition() - --TODO: Workaround Client DCS Bug - --TargetCategory = TargetUnit:getCategory() - TargetCategory = TargetUnit:getDesc().category - TargetType = TargetUnit:getTypeName() - - TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] - TargetUnitCategory = _SCORINGCategory[TargetCategory] - TargetUnitType = TargetType - - self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType, TargetUnitCoalition, TargetUnitCategory, TargetUnitType } ) - end - - if InitPlayerName ~= nil then -- It is a player that is hitting something - self:_AddPlayerFromUnit( InitUnit ) - if self.Players[InitPlayerName] then -- This should normally not happen, but i'll test it anyway. - if TargetPlayerName ~= nil then -- It is a player hitting another player ... - self:_AddPlayerFromUnit( TargetUnit ) - self.Players[InitPlayerName].HitPlayers = self.Players[InitPlayerName].HitPlayers + 1 - end - - self:T( "Hitting Something" ) - -- What is he hitting? - if TargetCategory then - if not self.Players[InitPlayerName].Hit[TargetCategory] then - self.Players[InitPlayerName].Hit[TargetCategory] = {} - end - if not self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] then - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] = {} - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = 0 - end - local Score = 0 - if InitCoalition == TargetCoalition then - self.Players[InitPlayerName].Penalty = self.Players[InitPlayerName].Penalty + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit + 1 - MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit .. " times. Penalty: -" .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty .. - ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, - "", - 2, - "/PENALTY" .. InitPlayerName .. "/" .. InitUnitName - ):ToAll() - self:ScoreCSV( InitPlayerName, "HIT_PENALTY", 1, -25, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - else - self.Players[InitPlayerName].Score = self.Players[InitPlayerName].Score + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score + 1 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit + 1 - MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a target " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit .. " times. Score: " .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score .. - ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, - "", - 2, - "/SCORE" .. InitPlayerName .. "/" .. InitUnitName - ):ToAll() - self:ScoreCSV( InitPlayerName, "HIT_SCORE", 1, 1, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - end - end - end - elseif InitPlayerName == nil then -- It is an AI hitting a player??? - - end -end - - -function SCORING:ReportScoreAll() - - env.info( "Hello World " ) - - local ScoreMessage = "" - local PlayerMessage = "" - - self:T( "Score Report" ) - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Score Player: " .. PlayerName ) - - -- Some variables - local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] - local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] - local InitUnitType = PlayerData.UnitType - local InitUnitName = PlayerData.UnitName - - local PlayerScore = 0 - local PlayerPenalty = 0 - - ScoreMessage = ":\n" - - local ScoreMessageHits = "" - - for CategoryID, CategoryName in pairs( _SCORINGCategory ) do - self:T( CategoryName ) - if PlayerData.Hit[CategoryID] then - local Score = 0 - local ScoreHit = 0 - local Penalty = 0 - local PenaltyHit = 0 - self:T( "Hit scores exist for player " .. PlayerName ) - for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do - Score = Score + UnitData.Score - ScoreHit = ScoreHit + UnitData.ScoreHit - Penalty = Penalty + UnitData.Penalty - PenaltyHit = UnitData.PenaltyHit - end - local ScoreMessageHit = string.format( "%s:%d ", CategoryName, Score - Penalty ) - self:T( ScoreMessageHit ) - ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageHits ~= "" then - ScoreMessage = ScoreMessage .. " Hits: " .. ScoreMessageHits .. "\n" - end - - local ScoreMessageKills = "" - for CategoryID, CategoryName in pairs( _SCORINGCategory ) do - self:T( "Kill scores exist for player " .. PlayerName ) - if PlayerData.Kill[CategoryID] then - local Score = 0 - local ScoreKill = 0 - local Penalty = 0 - local PenaltyKill = 0 - - for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do - Score = Score + UnitData.Score - ScoreKill = ScoreKill + UnitData.ScoreKill - Penalty = Penalty + UnitData.Penalty - PenaltyKill = PenaltyKill + UnitData.PenaltyKill - end - - local ScoreMessageKill = string.format( " %s:%d ", CategoryName, Score - Penalty ) - self:T( ScoreMessageKill ) - ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill - - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageKills ~= "" then - ScoreMessage = ScoreMessage .. " Kills: " .. ScoreMessageKills .. "\n" - end - - local ScoreMessageCoalitionChangePenalties = "" - if PlayerData.PenaltyCoalition ~= 0 then - ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) - PlayerPenalty = PlayerPenalty + PlayerData.Penalty - end - if ScoreMessageCoalitionChangePenalties ~= "" then - ScoreMessage = ScoreMessage .. " Coalition Penalties: " .. ScoreMessageCoalitionChangePenalties .. "\n" - end - - local ScoreMessageMission = "" - local ScoreMission = 0 - local ScoreTask = 0 - for MissionName, MissionData in pairs( PlayerData.Mission ) do - ScoreMission = ScoreMission + MissionData.ScoreMission - ScoreTask = ScoreTask + MissionData.ScoreTask - ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " - end - PlayerScore = PlayerScore + ScoreMission + ScoreTask - - if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. " Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")\n" - end - - PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score:%d (%d Score -%d Penalties)%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) - end - end - MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() -end - - -function SCORING:ReportScorePlayer() - - env.info( "Hello World " ) - - local ScoreMessage = "" - local PlayerMessage = "" - - self:T( "Score Report" ) - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Score Player: " .. PlayerName ) - - -- Some variables - local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] - local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] - local InitUnitType = PlayerData.UnitType - local InitUnitName = PlayerData.UnitName - - local PlayerScore = 0 - local PlayerPenalty = 0 - - ScoreMessage = "" - - local ScoreMessageHits = "" - - for CategoryID, CategoryName in pairs( _SCORINGCategory ) do - self:T( CategoryName ) - if PlayerData.Hit[CategoryID] then - local Score = 0 - local ScoreHit = 0 - local Penalty = 0 - local PenaltyHit = 0 - self:T( "Hit scores exist for player " .. PlayerName ) - for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do - Score = Score + UnitData.Score - ScoreHit = ScoreHit + UnitData.ScoreHit - Penalty = Penalty + UnitData.Penalty - PenaltyHit = UnitData.PenaltyHit - end - local ScoreMessageHit = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreHit, PenaltyHit ) - self:T( ScoreMessageHit ) - ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageHits ~= "" then - ScoreMessage = ScoreMessage .. "\n Hits: " .. ScoreMessageHits .. " " - end - - local ScoreMessageKills = "" - for CategoryID, CategoryName in pairs( _SCORINGCategory ) do - self:T( "Kill scores exist for player " .. PlayerName ) - if PlayerData.Kill[CategoryID] then - local Score = 0 - local ScoreKill = 0 - local Penalty = 0 - local PenaltyKill = 0 - - for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do - Score = Score + UnitData.Score - ScoreKill = ScoreKill + UnitData.ScoreKill - Penalty = Penalty + UnitData.Penalty - PenaltyKill = PenaltyKill + UnitData.PenaltyKill - end - - local ScoreMessageKill = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreKill, PenaltyKill ) - self:T( ScoreMessageKill ) - ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill - - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageKills ~= "" then - ScoreMessage = ScoreMessage .. "\n Kills: " .. ScoreMessageKills .. " " - end - - local ScoreMessageCoalitionChangePenalties = "" - if PlayerData.PenaltyCoalition ~= 0 then - ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) - PlayerPenalty = PlayerPenalty + PlayerData.Penalty - end - if ScoreMessageCoalitionChangePenalties ~= "" then - ScoreMessage = ScoreMessage .. "\n Coalition: " .. ScoreMessageCoalitionChangePenalties .. " " - end - - local ScoreMessageMission = "" - local ScoreMission = 0 - local ScoreTask = 0 - for MissionName, MissionData in pairs( PlayerData.Mission ) do - ScoreMission = ScoreMission + MissionData.ScoreMission - ScoreTask = ScoreTask + MissionData.ScoreTask - ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " - end - PlayerScore = PlayerScore + ScoreMission + ScoreTask - - if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. "\n Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ") " - end - - PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties ):%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) - end - end - MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() - -end - - -function SCORING:SecondsToClock(sSeconds) - local nSeconds = sSeconds - if nSeconds == 0 then - --return nil; - return "00:00:00"; - else - nHours = string.format("%02.f", math.floor(nSeconds/3600)); - nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); - nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); - return nHours..":"..nMins..":"..nSecs - end -end - ---- Opens a score CSV file to log the scores. --- @param #SCORING self --- @param #string ScoringCSV --- @return #SCORING self --- @usage --- -- Open a new CSV file to log the scores of the game Gori Valley. Let the name of the CSV file begin with "Player Scores". --- ScoringObject = SCORING:New( "Gori Valley" ) --- ScoringObject:OpenCSV( "Player Scores" ) -function SCORING:OpenCSV( ScoringCSV ) - self:F( ScoringCSV ) - - if lfs and io and os then - if ScoringCSV then - self.ScoringCSV = ScoringCSV - local fdir = lfs.writedir() .. [[Logs\]] .. self.ScoringCSV .. " " .. os.date( "%Y-%m-%d %H-%M-%S" ) .. ".csv" - - self.CSVFile, self.err = io.open( fdir, "w+" ) - if not self.CSVFile then - error( "Error: Cannot open CSV file in " .. lfs.writedir() ) - end - - self.CSVFile:write( '"GameName","RunTime","Time","PlayerName","ScoreType","PlayerUnitCoaltion","PlayerUnitCategory","PlayerUnitType","PlayerUnitName","TargetUnitCoalition","TargetUnitCategory","TargetUnitType","TargetUnitName","Times","Score"\n' ) - - self.RunTime = os.date("%y-%m-%d_%H-%M-%S") - else - error( "A string containing the CSV file name must be given." ) - end - else - self:E( "The MissionScripting.lua file has not been changed to allow lfs, io and os modules to be used..." ) - end - return self -end - - ---- Registers a score for a player. --- @param #SCORING self --- @param #string PlayerName The name of the player. --- @param #string ScoreType The type of the score. --- @param #string ScoreTimes The amount of scores achieved. --- @param #string ScoreAmount The score given. --- @param #string PlayerUnitName The unit name of the player. --- @param #string PlayerUnitCoalition The coalition of the player unit. --- @param #string PlayerUnitCategory The category of the player unit. --- @param #string PlayerUnitType The type of the player unit. --- @param #string TargetUnitName The name of the target unit. --- @param #string TargetUnitCoalition The coalition of the target unit. --- @param #string TargetUnitCategory The category of the target unit. --- @param #string TargetUnitType The type of the target unit. --- @return #SCORING self -function SCORING:ScoreCSV( PlayerName, ScoreType, ScoreTimes, ScoreAmount, PlayerUnitName, PlayerUnitCoalition, PlayerUnitCategory, PlayerUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - --write statistic information to file - local ScoreTime = self:SecondsToClock( timer.getTime() ) - PlayerName = PlayerName:gsub( '"', '_' ) - - if PlayerUnitName and PlayerUnitName ~= '' then - local PlayerUnit = Unit.getByName( PlayerUnitName ) - - if PlayerUnit then - if not PlayerUnitCategory then - --PlayerUnitCategory = SCORINGCategory[PlayerUnit:getCategory()] - PlayerUnitCategory = _SCORINGCategory[PlayerUnit:getDesc().category] - end - - if not PlayerUnitCoalition then - PlayerUnitCoalition = _SCORINGCoalition[PlayerUnit:getCoalition()] - end - - if not PlayerUnitType then - PlayerUnitType = PlayerUnit:getTypeName() - end - else - PlayerUnitName = '' - PlayerUnitCategory = '' - PlayerUnitCoalition = '' - PlayerUnitType = '' - end - else - PlayerUnitName = '' - PlayerUnitCategory = '' - PlayerUnitCoalition = '' - PlayerUnitType = '' - end - - if not TargetUnitCoalition then - TargetUnitCoalition = '' - end - - if not TargetUnitCategory then - TargetUnitCategory = '' - end - - if not TargetUnitType then - TargetUnitType = '' - end - - if not TargetUnitName then - TargetUnitName = '' - end - - if lfs and io and os then - self.CSVFile:write( - '"' .. self.GameName .. '"' .. ',' .. - '"' .. self.RunTime .. '"' .. ',' .. - '' .. ScoreTime .. '' .. ',' .. - '"' .. PlayerName .. '"' .. ',' .. - '"' .. ScoreType .. '"' .. ',' .. - '"' .. PlayerUnitCoalition .. '"' .. ',' .. - '"' .. PlayerUnitCategory .. '"' .. ',' .. - '"' .. PlayerUnitType .. '"' .. ',' .. - '"' .. PlayerUnitName .. '"' .. ',' .. - '"' .. TargetUnitCoalition .. '"' .. ',' .. - '"' .. TargetUnitCategory .. '"' .. ',' .. - '"' .. TargetUnitType .. '"' .. ',' .. - '"' .. TargetUnitName .. '"' .. ',' .. - '' .. ScoreTimes .. '' .. ',' .. - '' .. ScoreAmount - ) - - self.CSVFile:write( "\n" ) - end -end - - -function SCORING:CloseCSV() - if lfs and io and os then - self.CSVFile:close() - end -end - ---- CARGO Classes --- @module CARGO - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Message" ) -Include.File( "Scheduler" ) - - ---- Clients are those Groups defined within the Mission Editor that have the skillset defined as "Client" or "Player". --- These clients are defined within the Mission Orchestration Framework (MOF) - -CARGOS = {} - - -CARGO_ZONE = { - ClassName="CARGO_ZONE", - CargoZoneName = '', - CargoHostUnitName = '', - SIGNAL = { - TYPE = { - SMOKE = { ID = 1, TEXT = "smoke" }, - FLARE = { ID = 2, TEXT = "flare" } - }, - COLOR = { - GREEN = { ID = 1, TRIGGERCOLOR = trigger.smokeColor.Green, TEXT = "A green" }, - RED = { ID = 2, TRIGGERCOLOR = trigger.smokeColor.Red, TEXT = "A red" }, - WHITE = { ID = 3, TRIGGERCOLOR = trigger.smokeColor.White, TEXT = "A white" }, - ORANGE = { ID = 4, TRIGGERCOLOR = trigger.smokeColor.Orange, TEXT = "An orange" }, - BLUE = { ID = 5, TRIGGERCOLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, - YELLOW = { ID = 6, TRIGGERCOLOR = trigger.flareColor.Yellow, TEXT = "A yellow" } - } - } -} - ---- Creates a new zone where cargo can be collected or deployed. --- The zone functionality is useful to smoke or indicate routes for cargo pickups or deployments. --- Provide the zone name as declared in the mission file into the CargoZoneName in the :New method. --- An optional parameter is the CargoHostName, which is a Group declared with Late Activation switched on in the mission file. --- The CargoHostName is the "host" of the cargo zone: --- --- * It will smoke the zone position when a client is approaching the zone. --- * Depending on the cargo type, it will assist in the delivery of the cargo by driving to and from the client. --- --- @param #CARGO_ZONE self --- @param #string CargoZoneName The name of the zone as declared within the mission editor. --- @param #string CargoHostName The name of the Group "hosting" the zone. The Group MUST NOT be a static, and must be a "mobile" unit. -function CARGO_ZONE:New( CargoZoneName, CargoHostName ) local self = BASE:Inherit( self, ZONE:New( CargoZoneName ) ) - self:F( { CargoZoneName, CargoHostName } ) - - self.CargoZoneName = CargoZoneName - self.SignalHeight = 2 - --self.CargoZone = trigger.misc.getZone( CargoZoneName ) - - - if CargoHostName then - self.CargoHostName = CargoHostName - end - - self:T( self.CargoZoneName ) - - return self -end - -function CARGO_ZONE:Spawn() - self:F( self.CargoHostName ) - - if self.CargoHostName then -- Only spawn a host in the zone when there is one given as a parameter in the New function. - if self.CargoHostSpawn then - local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() - if CargoHostGroup and CargoHostGroup:IsAlive() then - else - self.CargoHostSpawn:ReSpawn( 1 ) - end - else - self:T( "Initialize CargoHostSpawn" ) - self.CargoHostSpawn = SPAWN:New( self.CargoHostName ):Limit( 1, 1 ) - self.CargoHostSpawn:ReSpawn( 1 ) - end - end - - return self -end - -function CARGO_ZONE:GetHostUnit() - self:F( self ) - - if self.CargoHostName then - - -- A Host has been given, signal the host - local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() - local CargoHostUnit - if CargoHostGroup and CargoHostGroup:IsAlive() then - CargoHostUnit = CargoHostGroup:GetUnit(1) - else - CargoHostUnit = StaticObject.getByName( self.CargoHostName ) - end - - return CargoHostUnit - end - - return nil -end - -function CARGO_ZONE:ReportCargosToClient( Client, CargoType ) - self:F() - - local SignalUnit = self:GetHostUnit() - - if SignalUnit then - - local SignalUnitTypeName = SignalUnit:getTypeName() - - local HostMessage = "" - - local IsCargo = false - for CargoID, Cargo in pairs( CARGOS ) do - if Cargo.CargoType == Task.CargoType then - if Cargo:IsStatusNone() then - HostMessage = HostMessage .. " - " .. Cargo.CargoName .. " - " .. Cargo.CargoType .. " (" .. Cargo.Weight .. "kg)" .. "\n" - IsCargo = true - end - end - end - - if not IsCargo then - HostMessage = "No Cargo Available." - end - - Client:Message( HostMessage, 20, Mission.Name .. "/StageHosts." .. SignalUnitTypeName, SignalUnitTypeName .. ": Reporting Cargo", 10 ) - end -end - - -function CARGO_ZONE:Signal() - self:F() - - local Signalled = false - - if self.SignalType then - - if self.CargoHostName then - - -- A Host has been given, signal the host - - local SignalUnit = self:GetHostUnit() - - if SignalUnit then - - self:T( 'Signalling Unit' ) - local SignalVehiclePos = SignalUnit:GetPointVec3() - SignalVehiclePos.y = SignalVehiclePos.y + 2 - - if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then - - trigger.action.smoke( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR ) - Signalled = true - - elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then - - trigger.action.signalFlare( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR , 0 ) - Signalled = false - - end - end - - else - - local ZonePointVec3 = self:GetPointVec3( self.SignalHeight ) -- Get the zone position + the landheight + 2 meters - - if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then - - trigger.action.smoke( ZonePointVec3, self.SignalColor.TRIGGERCOLOR ) - Signalled = true - - elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then - trigger.action.signalFlare( ZonePointVec3, self.SignalColor.TRIGGERCOLOR, 0 ) - Signalled = false - - end - end - end - - return Signalled - -end - -function CARGO_ZONE:WhiteSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:BlueSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.BLUE - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:RedSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:OrangeSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.ORANGE - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:GreenSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - - -function CARGO_ZONE:WhiteFlare( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:RedFlare( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:GreenFlare( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:YellowFlare( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.YELLOW - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - - -function CARGO_ZONE:GetCargoHostUnit() - self:F( self ) - - if self.CargoHostSpawn then - local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex(1) - if CargoHostGroup and CargoHostGroup:IsAlive() then - local CargoHostUnit = CargoHostGroup:GetUnit(1) - if CargoHostUnit and CargoHostUnit:IsAlive() then - return CargoHostUnit - end - end - end - - return nil -end - -function CARGO_ZONE:GetCargoZoneName() - self:F() - - return self.CargoZoneName -end - -CARGO = { - ClassName = "CARGO", - STATUS = { - NONE = 0, - LOADED = 1, - UNLOADED = 2, - LOADING = 3 - }, - CargoClient = nil -} - ---- Add Cargo to the mission... Cargo functionality needs to be reworked a bit, so this is still under construction. I need to make a CARGO Class... -function CARGO:New( CargoType, CargoName, CargoWeight ) local self = BASE:Inherit( self, BASE:New() ) - self:F( { CargoType, CargoName, CargoWeight } ) - - - self.CargoType = CargoType - self.CargoName = CargoName - self.CargoWeight = CargoWeight - - self:StatusNone() - - return self -end - -function CARGO:Spawn( Client ) - self:F() - - return self - -end - -function CARGO:IsNear( Client, LandingZone ) - self:F() - - local Near = true - - return Near - -end - - -function CARGO:IsLoadingToClient() - self:F() - - if self:IsStatusLoading() then - return self.CargoClient - end - - return nil - -end - - -function CARGO:IsLoadedInClient() - self:F() - - if self:IsStatusLoaded() then - return self.CargoClient - end - - return nil - -end - - -function CARGO:UnLoad( Client, TargetZoneName ) - self:F() - - self:StatusUnLoaded() - - return self -end - -function CARGO:OnBoard( Client, LandingZone ) - self:F() - - local Valid = true - - self.CargoClient = Client - local ClientUnit = Client:GetClientGroupDCSUnit() - - return Valid -end - -function CARGO:OnBoarded( Client, LandingZone ) - self:F() - - local OnBoarded = true - - return OnBoarded -end - -function CARGO:Load( Client ) - self:F() - - self:StatusLoaded( Client ) - - return self -end - -function CARGO:IsLandingRequired() - self:F() - return true -end - -function CARGO:IsSlingLoad() - self:F() - return false -end - - -function CARGO:StatusNone() - self:F() - - self.CargoClient = nil - self.CargoStatus = CARGO.STATUS.NONE - - return self -end - -function CARGO:StatusLoading( Client ) - self:F() - - self.CargoClient = Client - self.CargoStatus = CARGO.STATUS.LOADING - self:T( "Cargo " .. self.CargoName .. " loading to Client: " .. self.CargoClient:GetClientGroupName() ) - - return self -end - -function CARGO:StatusLoaded( Client ) - self:F() - - self.CargoClient = Client - self.CargoStatus = CARGO.STATUS.LOADED - self:T( "Cargo " .. self.CargoName .. " loaded in Client: " .. self.CargoClient:GetClientGroupName() ) - - return self -end - -function CARGO:StatusUnLoaded() - self:F() - - self.CargoClient = nil - self.CargoStatus = CARGO.STATUS.UNLOADED - - return self -end - - -function CARGO:IsStatusNone() - self:F() - - return self.CargoStatus == CARGO.STATUS.NONE -end - -function CARGO:IsStatusLoading() - self:F() - - return self.CargoStatus == CARGO.STATUS.LOADING -end - -function CARGO:IsStatusLoaded() - self:F() - - return self.CargoStatus == CARGO.STATUS.LOADED -end - -function CARGO:IsStatusUnLoaded() - self:F() - - return self.CargoStatus == CARGO.STATUS.UNLOADED -end - - -CARGO_GROUP = { - ClassName = "CARGO_GROUP" -} - - -function CARGO_GROUP:New( CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) - self:F( { CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone } ) - - self.CargoSpawn = SPAWN:NewWithAlias( CargoGroupTemplate, CargoName ) - self.CargoZone = CargoZone - - CARGOS[self.CargoName] = self - - return self - -end - -function CARGO_GROUP:Spawn( Client ) - self:F( { Client } ) - - local SpawnCargo = true - - if self:IsStatusNone() then - local CargoGroup = Group.getByName( self.CargoName ) - if CargoGroup and CargoGroup:isExist() then - SpawnCargo = false - end - - elseif self:IsStatusLoading() then - - local Client = self:IsLoadingToClient() - if Client and Client:GetDCSGroup() then - SpawnCargo = false - else - local CargoGroup = Group.getByName( self.CargoName ) - if CargoGroup and CargoGroup:isExist() then - SpawnCargo = false - end - end - - elseif self:IsStatusLoaded() then - - local ClientLoaded = self:IsLoadedInClient() - -- Now test if another Client is alive (not this one), and it has the CARGO, then this cargo does not need to be initialized and spawned. - if ClientLoaded and ClientLoaded ~= Client then - local ClientGroup = Client:GetDCSGroup() - if ClientLoaded:GetClientGroupDCSUnit() and ClientLoaded:GetClientGroupDCSUnit():isExist() then - SpawnCargo = false - else - self:StatusNone() - end - else - -- Same Client, but now in initialize, so set back the status to None. - self:StatusNone() - end - - elseif self:IsStatusUnLoaded() then - - SpawnCargo = false - - end - - if SpawnCargo then - if self.CargoZone:GetCargoHostUnit() then - --- ReSpawn the Cargo from the CargoHost - self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30, 1 ):GetName() - else - --- ReSpawn the Cargo in the CargoZone without a host ... - self:T( self.CargoZone ) - self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone, true, 1 ):GetName() - end - self:StatusNone() - end - - self:T( { self.CargoGroupName, CARGOS[self.CargoName].CargoGroupName } ) - - return self -end - -function CARGO_GROUP:IsNear( Client, LandingZone ) - self:F() - - local Near = false - - if self.CargoGroupName then - local CargoGroup = Group.getByName( self.CargoGroupName ) - if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 250 ) then - Near = true - end - end - - return Near - -end - - -function CARGO_GROUP:OnBoard( Client, LandingZone, OnBoardSide ) - self:F() - - local Valid = true - - local ClientUnit = Client:GetClientGroupDCSUnit() - - local CarrierPos = ClientUnit:getPoint() - local CarrierPosMove = ClientUnit:getPoint() - local CarrierPosOnBoard = ClientUnit:getPoint() - - local CargoGroup = Group.getByName( self.CargoGroupName ) - - local CargoUnit = CargoGroup:getUnit(1) - local CargoPos = CargoUnit:getPoint() - - self.CargoInAir = CargoUnit:inAir() - - self:T( self.CargoInAir ) - - -- Only move the group to the carrier when the cargo is not in the air - -- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea). - if not self.CargoInAir then - - local Points = {} - - self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) - self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) - - Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) - - self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) - - if OnBoardSide == nil then - OnBoardSide = CLIENT.ONBOARDSIDE.NONE - end - - if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then - - self:T( "TransportCargoOnBoard: Onboarding LEFT" ) - CarrierPosMove.z = CarrierPosMove.z - 25 - CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then - - self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) - CarrierPosMove.z = CarrierPosMove.z + 25 - CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then - - self:T( "TransportCargoOnBoard: Onboarding BACK" ) - CarrierPosMove.x = CarrierPosMove.x - 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then - - self:T( "TransportCargoOnBoard: Onboarding FRONT" ) - CarrierPosMove.x = CarrierPosMove.x + 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then - - self:T( "TransportCargoOnBoard: Onboarding CENTRAL" ) - Points[#Points+1] = routines.ground.buildWP( CarrierPos, "Cone", 10 ) - - end - self:T( "TransportCargoOnBoard: Routing " .. self.CargoGroupName ) - - --routines.scheduleFunction( routines.goRoute, { self.CargoGroupName, Points}, timer.getTime() + 4 ) - SCHEDULER:New( self, routines.goRoute, { self.CargoGroupName, Points}, 4 ) - end - - self:StatusLoading( Client ) - - return Valid - -end - - -function CARGO_GROUP:OnBoarded( Client, LandingZone ) - self:F() - - local OnBoarded = false - - local CargoGroup = Group.getByName( self.CargoGroupName ) - - if not self.CargoInAir then - if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 25 ) then - CargoGroup:destroy() - self:StatusLoaded( Client ) - OnBoarded = true - end - else - CargoGroup:destroy() - self:StatusLoaded( Client ) - OnBoarded = true - end - - return OnBoarded -end - - -function CARGO_GROUP:UnLoad( Client, TargetZoneName ) - self:F() - - self:T( 'self.CargoName = ' .. self.CargoName ) - - local CargoGroup = self.CargoSpawn:SpawnFromUnit( Client:GetClientGroupUnit(), 60, 30 ) - - self.CargoGroupName = CargoGroup:GetName() - self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) - - CargoGroup:TaskRouteToZone( ZONE:New( TargetZoneName ), true ) - - self:StatusUnLoaded() - - return self -end - - -CARGO_PACKAGE = { - ClassName = "CARGO_PACKAGE" -} - - -function CARGO_PACKAGE:New( CargoType, CargoName, CargoWeight, CargoClient ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) - self:F( { CargoType, CargoName, CargoWeight, CargoClient } ) - - self.CargoClient = CargoClient - - CARGOS[self.CargoName] = self - - return self - -end - - -function CARGO_PACKAGE:Spawn( Client ) - self:F( { self, Client } ) - - -- this needs to be checked thoroughly - - local CargoClientGroup = self.CargoClient:GetDCSGroup() - if not CargoClientGroup then - if not self.CargoClientSpawn then - self.CargoClientSpawn = SPAWN:New( self.CargoClient:GetClientGroupName() ):Limit( 1, 1 ) - end - self.CargoClientSpawn:ReSpawn( 1 ) - end - - local SpawnCargo = true - - if self:IsStatusNone() then - - elseif self:IsStatusLoading() or self:IsStatusLoaded() then - - local CargoClientLoaded = self:IsLoadedInClient() - if CargoClientLoaded and CargoClientLoaded:GetDCSGroup() then - SpawnCargo = false - end - - elseif self:IsStatusUnLoaded() then - - SpawnCargo = false - - else - - end - - if SpawnCargo then - self:StatusLoaded( self.CargoClient ) - end - - return self -end - - -function CARGO_PACKAGE:IsNear( Client, LandingZone ) - self:F() - - local Near = false - - if self.CargoClient and self.CargoClient:GetDCSGroup() then - self:T( self.CargoClient.ClientName ) - self:T( 'Client Exists.' ) - - if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), Client:GetPositionVec3(), 150 ) then - Near = true - end - end - - return Near - -end - - -function CARGO_PACKAGE:OnBoard( Client, LandingZone, OnBoardSide ) - self:F() - - local Valid = true - - local ClientUnit = Client:GetClientGroupDCSUnit() - - local CarrierPos = ClientUnit:getPoint() - local CarrierPosMove = ClientUnit:getPoint() - local CarrierPosOnBoard = ClientUnit:getPoint() - local CarrierPosMoveAway = ClientUnit:getPoint() - - local CargoHostGroup = self.CargoClient:GetDCSGroup() - local CargoHostName = self.CargoClient:GetDCSGroup():getName() - - local CargoHostUnits = CargoHostGroup:getUnits() - local CargoPos = CargoHostUnits[1]:getPoint() - - local Points = {} - - self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) - self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) - - Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) - - self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) - - if OnBoardSide == nil then - OnBoardSide = CLIENT.ONBOARDSIDE.NONE - end - - if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then - - self:T( "TransportCargoOnBoard: Onboarding LEFT" ) - CarrierPosMove.z = CarrierPosMove.z - 25 - CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 - CarrierPosMoveAway.z = CarrierPosMoveAway.z - 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then - - self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) - CarrierPosMove.z = CarrierPosMove.z + 25 - CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 - CarrierPosMoveAway.z = CarrierPosMoveAway.z + 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then - - self:T( "TransportCargoOnBoard: Onboarding BACK" ) - CarrierPosMove.x = CarrierPosMove.x - 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 - CarrierPosMoveAway.x = CarrierPosMoveAway.x - 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then - - self:T( "TransportCargoOnBoard: Onboarding FRONT" ) - CarrierPosMove.x = CarrierPosMove.x + 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 - CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then - - self:T( "TransportCargoOnBoard: Onboarding FRONT" ) - CarrierPosMove.x = CarrierPosMove.x + 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 - CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - end - self:T( "Routing " .. CargoHostName ) - - --routines.scheduleFunction( routines.goRoute, { CargoHostName, Points}, timer.getTime() + 4 ) - SCHEDULER:New( self, routines.goRoute, { CargoHostName, Points }, 4 ) - - return Valid - -end - - -function CARGO_PACKAGE:OnBoarded( Client, LandingZone ) - self:F() - - local OnBoarded = false - - if self.CargoClient and self.CargoClient:GetDCSGroup() then - if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), self.CargoClient:GetPositionVec3(), 10 ) then - - -- Switch Cargo from self.CargoClient to Client ... Each cargo can have only one client. So assigning the new client for the cargo is enough. - self:StatusLoaded( Client ) - - -- All done, onboarded the Cargo to the new Client. - OnBoarded = true - end - end - - return OnBoarded -end - - -function CARGO_PACKAGE:UnLoad( Client, TargetZoneName ) - self:F() - - self:T( 'self.CargoName = ' .. self.CargoName ) - --self:T( 'self.CargoHostName = ' .. self.CargoHostName ) - - --self.CargoSpawn:FromCarrier( Client:GetDCSGroup(), TargetZoneName, self.CargoHostName ) - self:StatusUnLoaded() - - return Cargo -end - - -CARGO_SLINGLOAD = { - ClassName = "CARGO_SLINGLOAD" -} - - -function CARGO_SLINGLOAD:New( CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID ) - local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) - self:F( { CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID } ) - - self.CargoHostName = CargoHostName - - -- Cargo will be initialized around the CargoZone position. - self.CargoZone = CargoZone - - self.CargoCount = 0 - self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) - - -- The country ID needs to be correctly set. - self.CargoCountryID = CargoCountryID - - CARGOS[self.CargoName] = self - - return self - -end - - -function CARGO_SLINGLOAD:IsLandingRequired() - self:F() - return false -end - - -function CARGO_SLINGLOAD:IsSlingLoad() - self:F() - return true -end - - -function CARGO_SLINGLOAD:Spawn( Client ) - self:F( { self, Client } ) - - local Zone = trigger.misc.getZone( self.CargoZone ) - - local ZonePos = {} - ZonePos.x = Zone.point.x + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) - ZonePos.y = Zone.point.z + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) - - self:T( "Cargo Location = " .. ZonePos.x .. ", " .. ZonePos.y ) - - --[[ - -- This does not work in 1.5.2. - CargoStatic = StaticObject.getByName( self.CargoName ) - if CargoStatic then - CargoStatic:destroy() - end - --]] - - CargoStatic = StaticObject.getByName( self.CargoStaticName ) - - if CargoStatic and CargoStatic:isExist() then - CargoStatic:destroy() - end - - -- I need to make every time a new cargo due to bugs in 1.5.2. - - self.CargoCount = self.CargoCount + 1 - self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) - - local CargoTemplate = { - ["category"] = "Cargo", - ["shape_name"] = "ab-212_cargo", - ["type"] = "Cargo1", - ["x"] = ZonePos.x, - ["y"] = ZonePos.y, - ["mass"] = self.CargoWeight, - ["name"] = self.CargoStaticName, - ["canCargo"] = true, - ["heading"] = 0, - } - - coalition.addStaticObject( self.CargoCountryID, CargoTemplate ) - --- end - - return self -end - - -function CARGO_SLINGLOAD:IsNear( Client, LandingZone ) - self:F() - - local Near = false - - return Near -end - - -function CARGO_SLINGLOAD:IsInLandingZone( Client, LandingZone ) - self:F() - - local Near = false - - local CargoStaticUnit = StaticObject.getByName( self.CargoName ) - if CargoStaticUnit then - if routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then - Near = true - end - end - - return Near -end - - -function CARGO_SLINGLOAD:OnBoard( Client, LandingZone, OnBoardSide ) - self:F() - - local Valid = true - - - return Valid -end - - -function CARGO_SLINGLOAD:OnBoarded( Client, LandingZone ) - self:F() - - local OnBoarded = false - - local CargoStaticUnit = StaticObject.getByName( self.CargoName ) - if CargoStaticUnit then - if not routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then - OnBoarded = true - end - end - - return OnBoarded -end - - -function CARGO_SLINGLOAD:UnLoad( Client, TargetZoneName ) - self:F() - - self:T( 'self.CargoName = ' .. self.CargoName ) - self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) - - self:StatusUnLoaded() - - return Cargo -end ---- Message System to display Messages for Clients and Coalitions or All. --- Messages are grouped on the display panel per Category to improve readability for the players. --- Messages are shown on the display panel for an amount of seconds, and will then disappear. --- Messages are identified by an ID. The messages with the same ID belonging to the same category will be overwritten if they were still being displayed on the display panel. --- Messages are created with MESSAGE:@{New}(). --- Messages are sent to Clients with MESSAGE:@{ToClient}(). --- Messages are sent to Coalitions with MESSAGE:@{ToCoalition}(). --- Messages are sent to All Players with MESSAGE:@{ToAll}(). --- @module Message - -Include.File( "Base" ) - ---- The MESSAGE class --- @type MESSAGE -MESSAGE = { - ClassName = "MESSAGE", - MessageCategory = 0, - MessageID = 0, -} - - ---- Creates a new MESSAGE object. Note that these MESSAGE objects are not yet displayed on the display panel. You must use the functions @{ToClient} or @{ToCoalition} or @{ToAll} to send these Messages to the respective recipients. --- @param self --- @param #string MessageText is the text of the Message. --- @param #string MessageCategory is a string expressing the Category of the Message. Messages are grouped on the display panel per Category to improve readability. --- @param #number MessageDuration is a number in seconds of how long the MESSAGE should be shown on the display panel. --- @param #string MessageID is a string expressing the ID of the Message. --- @return #MESSAGE --- @usage --- -- Create a series of new Messages. --- -- MessageAll is meant to be sent to all players, for 25 seconds, and is classified as "Score". --- -- MessageRED is meant to be sent to the RED players only, for 10 seconds, and is classified as "End of Mission", with ID "Win". --- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". --- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". --- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ) --- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) --- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) --- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) -function MESSAGE:New( MessageText, MessageCategory, MessageDuration, MessageID ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { MessageText, MessageCategory, MessageDuration, MessageID } ) - - -- When no messagecategory is given, we don't show it as a title... - if MessageCategory and MessageCategory ~= "" then - self.MessageCategory = MessageCategory .. ": " - else - self.MessageCategory = "" - end - - self.MessageDuration = MessageDuration - self.MessageID = MessageID - self.MessageTime = timer.getTime() - self.MessageText = MessageText - - self.MessageSent = false - self.MessageGroup = false - self.MessageCoalition = false - - return self -end - ---- Sends a MESSAGE to a Client Group. Note that the Group needs to be defined within the ME with the skillset "Client" or "Player". --- @param #MESSAGE self --- @param Client#CLIENT Client is the Group of the Client. --- @return #MESSAGE --- @usage --- -- Send the 2 messages created with the @{New} method to the Client Group. --- -- Note that the Message of MessageClient2 is overwriting the Message of MessageClient1. --- ClientGroup = Group.getByName( "ClientGroup" ) --- --- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) --- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) --- or --- MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) --- MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) --- or --- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) --- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) --- MessageClient1:ToClient( ClientGroup ) --- MessageClient2:ToClient( ClientGroup ) -function MESSAGE:ToClient( Client ) - self:F( Client ) - - if Client and Client:GetClientGroupID() then - - local ClientGroupID = Client:GetClientGroupID() - self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) - trigger.action.outTextForGroup( ClientGroupID, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) - end - - return self -end - ---- Sends a MESSAGE to the Blue coalition. --- @param #MESSAGE self --- @return #MESSAGE --- @usage --- -- Send a message created with the @{New} method to the BLUE coalition. --- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() --- or --- MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() --- or --- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) --- MessageBLUE:ToBlue() -function MESSAGE:ToBlue() - self:F() - - self:ToCoalition( coalition.side.BLUE ) - - return self -end - ---- Sends a MESSAGE to the Red Coalition. --- @param #MESSAGE self --- @return #MESSAGE --- @usage --- -- Send a message created with the @{New} method to the RED coalition. --- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() --- or --- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() --- 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:ToRed() -function MESSAGE:ToRed( ) - self:F() - - self:ToCoalition( coalition.side.RED ) - - return self -end - ---- Sends a MESSAGE to a Coalition. --- @param #MESSAGE self --- @param CoalitionSide needs to be filled out by the defined structure of the standard scripting engine @{coalition.side}. --- @return #MESSAGE --- @usage --- -- Send a message created with the @{New} method to the RED coalition. --- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) --- or --- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) --- 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 ) -function MESSAGE:ToCoalition( CoalitionSide ) - self:F( CoalitionSide ) - - if CoalitionSide then - self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) - trigger.action.outTextForCoalition( CoalitionSide, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) - end - - return self -end - ---- Sends a MESSAGE to all players. --- @param #MESSAGE self --- @return #MESSAGE --- @usage --- -- Send a message created to all players. --- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() --- or --- MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() --- or --- 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:ToCoalition( coalition.side.RED ) - self:ToCoalition( coalition.side.BLUE ) - - return self -end - - - ---- The MESSAGEQUEUE class --- @type MESSAGEQUEUE -MESSAGEQUEUE = { - ClientGroups = {}, - CoalitionSides = {} -} - -function MESSAGEQUEUE:New( RefreshInterval ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { RefreshInterval } ) - - self.RefreshInterval = RefreshInterval - - --self.DisplayFunction = routines.scheduleFunction( self._DisplayMessages, { self }, 0, RefreshInterval ) - self.DisplayFunction = SCHEDULER:New( self, self._DisplayMessages, {}, 0, RefreshInterval ) - - return self -end - ---- This function is called automatically by the MESSAGEQUEUE scheduler. -function MESSAGEQUEUE:_DisplayMessages() - - -- First we display all messages that a coalition needs to receive... Also those who are not in a client (CA module clients...). - for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do - for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do - if MessageData.MessageSent == false then - --trigger.action.outTextForCoalition( CoalitionSideID, MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) - MessageData.MessageSent = true - end - local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() - if MessageTimeLeft <= 0 then - MessageData = nil - end - end - end - - -- Then we send the messages for each individual client, but also to be included are those Coalition messages for the Clients who belong to a coalition. - -- Because the Client messages will overwrite the Coalition messages (for that Client). - for ClientGroupName, ClientGroupData in pairs( self.ClientGroups ) do - for MessageID, MessageData in pairs( ClientGroupData.Messages ) do - if MessageData.MessageGroup == false then - trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) - MessageData.MessageGroup = true - end - local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() - if MessageTimeLeft <= 0 then - MessageData = nil - end - end - - -- Now check if the Client also has messages that belong to the Coalition of the Client... - for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do - for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do - local CoalitionGroup = Group.getByName( ClientGroupName ) - if CoalitionGroup and CoalitionGroup:getCoalition() == CoalitionSideID then - if MessageData.MessageCoalition == false then - trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) - MessageData.MessageCoalition = true - end - end - local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() - if MessageTimeLeft <= 0 then - MessageData = nil - end - end - end - end - - return true -end - ---- The _MessageQueue object is created when the MESSAGE class module is loaded. ---_MessageQueue = MESSAGEQUEUE:New( 0.5 ) - ---- Stages within a @{TASK} within a @{MISSION}. All of the STAGE functionality is considered internally administered and not to be used by any Mission designer. --- @module STAGE --- @author Flightcontrol - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Mission" ) -Include.File( "Client" ) -Include.File( "Task" ) - ---- The STAGE class --- @type -STAGE = { - ClassName = "STAGE", - MSG = { ID = "None", TIME = 10 }, - FREQUENCY = { NONE = 0, ONCE = 1, REPEAT = -1 }, - - Name = "NoStage", - StageType = '', - WaitTime = 1, - Frequency = 1, - MessageCount = 0, - MessageInterval = 15, - MessageShown = {}, - MessageShow = false, - MessageFlash = false -} - - -function STAGE:New() - local self = BASE:Inherit( self, BASE:New() ) - self:F() - return self -end - -function STAGE:Execute( Mission, Client, Task ) - - local Valid = true - - return Valid -end - -function STAGE:Executing( Mission, Client, Task ) - -end - -function STAGE:Validate( Mission, Client, Task ) - local Valid = true - - return Valid -end - - -STAGEBRIEF = { - ClassName = "BRIEF", - MSG = { ID = "Brief", TIME = 1 }, - Name = "Brief", - StageBriefingTime = 0, - StageBriefingDuration = 1 -} - -function STAGEBRIEF:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - ---- Execute --- @param #STAGEBRIEF self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task --- @return #boolean -function STAGEBRIEF:Execute( Mission, Client, Task ) - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - self:F() - Client:ShowMissionBriefing( Mission.MissionBriefing ) - self.StageBriefingTime = timer.getTime() - return Valid -end - -function STAGEBRIEF:Validate( Mission, Client, Task ) - local Valid = STAGE:Validate( Mission, Client, Task ) - self:T() - - if timer.getTime() - self.StageBriefingTime <= self.StageBriefingDuration then - return 0 - else - self.StageBriefingTime = timer.getTime() - return 1 - end - -end - - -STAGESTART = { - ClassName = "START", - MSG = { ID = "Start", TIME = 1 }, - Name = "Start", - StageStartTime = 0, - StageStartDuration = 1 -} - -function STAGESTART:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGESTART:Execute( Mission, Client, Task ) - self:F() - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - if Task.TaskBriefing then - Client:Message( Task.TaskBriefing, 30, Mission.Name .. "/Stage", "Command" ) - else - Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, Mission.Name .. "/Stage", "Command" ) - end - self.StageStartTime = timer.getTime() - return Valid -end - -function STAGESTART:Validate( Mission, Client, Task ) - self:F() - local Valid = STAGE:Validate( Mission, Client, Task ) - - if timer.getTime() - self.StageStartTime <= self.StageStartDuration then - return 0 - else - self.StageStartTime = timer.getTime() - return 1 - end - - return 1 - -end - -STAGE_CARGO_LOAD = { - ClassName = "STAGE_CARGO_LOAD" -} - -function STAGE_CARGO_LOAD:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGE_CARGO_LOAD:Execute( Mission, Client, Task ) - self:F() - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - - for LoadCargoID, LoadCargo in pairs( Task.Cargos.LoadCargos ) do - LoadCargo:Load( Client ) - end - - if Mission.MissionReportFlash and Client:IsTransport() then - Client:ShowCargo() - end - - return Valid -end - -function STAGE_CARGO_LOAD:Validate( Mission, Client, Task ) - self:F() - local Valid = STAGE:Validate( Mission, Client, Task ) - - return 1 -end - - -STAGE_CARGO_INIT = { - ClassName = "STAGE_CARGO_INIT" -} - -function STAGE_CARGO_INIT:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGE_CARGO_INIT:Execute( Mission, Client, Task ) - self:F() - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - - for InitLandingZoneID, InitLandingZone in pairs( Task.LandingZones.LandingZones ) do - self:T( InitLandingZone ) - InitLandingZone:Spawn() - end - - - self:T( Task.Cargos.InitCargos ) - for InitCargoID, InitCargoData in pairs( Task.Cargos.InitCargos ) do - self:T( { InitCargoData } ) - InitCargoData:Spawn( Client ) - end - - return Valid -end - - -function STAGE_CARGO_INIT:Validate( Mission, Client, Task ) - self:F() - local Valid = STAGE:Validate( Mission, Client, Task ) - - return 1 -end - - - -STAGEROUTE = { - ClassName = "STAGEROUTE", - MSG = { ID = "Route", TIME = 5 }, - Frequency = STAGE.FREQUENCY.REPEAT, - Name = "Route" -} - -function STAGEROUTE:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - self.MessageSwitch = true - return self -end - - ---- Execute the routing. --- @param #STAGEROUTE self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGEROUTE:Execute( Mission, Client, Task ) - self:F() - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - - local RouteMessage = "Fly to: " - self:T( Task.LandingZones ) - for LandingZoneID, LandingZoneName in pairs( Task.LandingZones.LandingZoneNames ) do - RouteMessage = RouteMessage .. "\n " .. LandingZoneName .. ' at ' .. routines.getBRStringZone( { zone = LandingZoneName, ref = Client:GetClientGroupDCSUnit():getPoint(), true, true } ) .. ' km.' - end - - if Client:IsMultiSeated() then - Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot", 20 ) - else - Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Command", 20 ) - end - - - if Mission.MissionReportFlash and Client:IsTransport() then - Client:ShowCargo() - end - - return Valid -end - -function STAGEROUTE:Validate( Mission, Client, Task ) - self:F() - local Valid = STAGE:Validate( Mission, Client, Task ) - - -- check if the Client is in the landing zone - self:T( Task.LandingZones.LandingZoneNames ) - Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) - - if Task.CurrentLandingZoneName then - - Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone - Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] - - if Task.CurrentCargoZone then - if not Task.Signalled then - Task.Signalled = Task.CurrentCargoZone:Signal() - end - end - - self:T( 1 ) - return 1 - end - - self:T( 0 ) - return 0 -end - - - -STAGELANDING = { - ClassName = "STAGELANDING", - MSG = { ID = "Landing", TIME = 10 }, - Name = "Landing", - Signalled = false -} - -function STAGELANDING:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - ---- Execute the landing coordination. --- @param #STAGELANDING self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGELANDING:Execute( Mission, Client, Task ) - self:F() - - if Client:IsMultiSeated() then - Client:Message( "We have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Co-Pilot", 10 ) - else - Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Command", 10 ) - end - - Task.HostUnit = Task.CurrentCargoZone:GetHostUnit() - - self:T( { Task.HostUnit } ) - - if Task.HostUnit then - - Task.HostUnitName = Task.HostUnit:GetPrefix() - Task.HostUnitTypeName = Task.HostUnit:GetTypeName() - - local HostMessage = "" - Task.CargoNames = "" - - local IsFirst = true - - for CargoID, Cargo in pairs( CARGOS ) do - if Cargo.CargoType == Task.CargoType then - - if Cargo:IsLandingRequired() then - self:T( "Task for cargo " .. Cargo.CargoType .. " requires landing.") - Task.IsLandingRequired = true - end - - if Cargo:IsSlingLoad() then - self:T( "Task for cargo " .. Cargo.CargoType .. " is a slingload.") - Task.IsSlingLoad = true - end - - if IsFirst then - IsFirst = false - Task.CargoNames = Task.CargoNames .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" - else - Task.CargoNames = Task.CargoNames .. "; " .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" - end - end - end - - if Task.IsLandingRequired then - HostMessage = "Land the helicopter to " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." - else - HostMessage = "Use the Radio menu and F6 to find the cargo, then fly or land near the cargo and " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." - end - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Host, Host, 10 ) - - end -end - -function STAGELANDING:Validate( Mission, Client, Task ) - self:F() - - Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) - if Task.CurrentLandingZoneName then - - -- Client is in de landing zone. - self:T( Task.CurrentLandingZoneName ) - - Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone - Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] - - if Task.CurrentCargoZone then - if not Task.Signalled then - Task.Signalled = Task.CurrentCargoZone:Signal() - end - end - else - if Task.CurrentLandingZone then - Task.CurrentLandingZone = nil - end - if Task.CurrentCargoZone then - Task.CurrentCargoZone = nil - end - Task.Signalled = false - Task:RemoveCargoMenus( Client ) - self:T( -1 ) - return -1 - end - - - local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() - local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 - - local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() - local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) - local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight - - self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) - if Task.IsLandingRequired and not Client:GetClientGroupDCSUnit():inAir() then - self:T( 1 ) - Task.IsInAirTestRequired = true - return 1 - end - - self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) - if Task.IsLandingRequired and DCSUnitVelocity <= 0.05 and DCSUnitHeight <= Task.CurrentCargoZone.SignalHeight then - self:T( 1 ) - Task.IsInAirTestRequired = false - return 1 - end - - self:T( 0 ) - return 0 -end - -STAGELANDED = { - ClassName = "STAGELANDED", - MSG = { ID = "Land", TIME = 10 }, - Name = "Landed", - MenusAdded = false -} - -function STAGELANDED:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGELANDED:Execute( Mission, Client, Task ) - self:F() - - if Task.IsLandingRequired then - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.', - self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC" .. Host, Host ) - - if not self.MenusAdded then - Task.Cargo = nil - Task:RemoveCargoMenus( Client ) - Task:AddCargoMenus( Client, CARGOS, 250 ) - end - end -end - - - -function STAGELANDED:Validate( Mission, Client, Task ) - self:F() - - if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then - self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." ) - Task.Signalled = false - Task:RemoveCargoMenus( Client ) - self:T( -2 ) - return -2 - end - - local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() - local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 - - local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() - local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) - local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight - - self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) - if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then - self:T( "Client went back in the air. Go back to stage Landing." ) - self:T( -1 ) - return -1 - end - - self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) - if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then - self:T( "It seems the Client went back in the air and over the boundary limits. Go back to stage Landing." ) - self:T( -1 ) - return -1 - end - - -- Wait until cargo is selected from the menu. - if Task.IsLandingRequired then - if not Task.Cargo then - self:T( 0 ) - return 0 - end - end - - self:T( 1 ) - return 1 -end - -STAGEUNLOAD = { - ClassName = "STAGEUNLOAD", - MSG = { ID = "Unload", TIME = 10 }, - Name = "Unload" -} - -function STAGEUNLOAD:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - ---- Coordinate UnLoading --- @param #STAGEUNLOAD self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGEUNLOAD:Execute( Mission, Client, Task ) - self:F() - - if Client:IsMultiSeated() then - Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', - self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Co-Pilot" ) - else - Client:Message( 'You are unloading the ' .. Task.CargoType .. ' ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', - self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Command" ) - end - Task:RemoveCargoMenus( Client ) -end - -function STAGEUNLOAD:Executing( Mission, Client, Task ) - self:F() - env.info( 'STAGEUNLOAD:Executing() Task.Cargo.CargoName = ' .. Task.Cargo.CargoName ) - - local TargetZoneName - - if Task.TargetZoneName then - TargetZoneName = Task.TargetZoneName - else - TargetZoneName = Task.CurrentLandingZoneName - end - - if Task.Cargo:UnLoad( Client, TargetZoneName ) then - Task.ExecuteStage = _TransportExecuteStage.SUCCESS - if Mission.MissionReportFlash then - Client:ShowCargo() - end - end -end - ---- Validate UnLoading --- @param #STAGEUNLOAD self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGEUNLOAD:Validate( Mission, Client, Task ) - self:F() - env.info( 'STAGEUNLOAD:Validate()' ) - - if routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then - else - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task:RemoveCargoMenus( Client ) - if Client:IsMultiSeated() then - Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', - _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) - else - Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', - _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) - end - return 1 - end - - if not Client:GetClientGroupDCSUnit():inAir() then - else - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task:RemoveCargoMenus( Client ) - if Client:IsMultiSeated() then - Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', - _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) - else - Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', - _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) - end - return 1 - end - - if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then - if Client:IsMultiSeated() then - Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Co-Pilot" ) - else - Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Command" ) - end - Task:RemoveCargoMenus( Client ) - Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) -- We set the cargo as one more goal completed in the mission. - return 1 - end - - return 1 -end - -STAGELOAD = { - ClassName = "STAGELOAD", - MSG = { ID = "Load", TIME = 10 }, - Name = "Load" -} - -function STAGELOAD:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGELOAD:Execute( Mission, Client, Task ) - self:F() - - if not Task.IsSlingLoad then - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', - _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Host, Host ) - - -- Route the cargo to the Carrier - - Task.Cargo:OnBoard( Client, Task.CurrentCargoZone, Task.OnBoardSide ) - Task.ExecuteStage = _TransportExecuteStage.EXECUTING - else - Task.ExecuteStage = _TransportExecuteStage.EXECUTING - end -end - -function STAGELOAD:Executing( Mission, Client, Task ) - self:F() - - -- If the Cargo is ready to be loaded, load it into the Client. - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - if not Task.IsSlingLoad then - self:T( Task.Cargo.CargoName) - - if Task.Cargo:OnBoarded( Client, Task.CurrentCargoZone ) then - - -- Load the Cargo onto the Client - Task.Cargo:Load( Client ) - - -- Message to the pilot that cargo has been loaded. - Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.", - 20, Mission.Name .. "/STAGELANDING.LOADING1." .. Host, Host ) - Task.ExecuteStage = _TransportExecuteStage.SUCCESS - - Client:ShowCargo() - end - else - Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.", - _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Host, Host , 10 ) - for CargoID, Cargo in pairs( CARGOS ) do - self:T( "Cargo.CargoName = " .. Cargo.CargoName ) - - if Cargo:IsSlingLoad() then - local CargoStatic = StaticObject.getByName( Cargo.CargoStaticName ) - if CargoStatic then - self:T( "Cargo is found in the DCS simulator.") - local CargoStaticPosition = CargoStatic:getPosition().p - self:T( "Cargo Position x = " .. CargoStaticPosition.x .. ", y = " .. CargoStaticPosition.y .. ", z = " .. CargoStaticPosition.z ) - local CargoStaticHeight = routines.GetUnitHeight( CargoStatic ) - if CargoStaticHeight > 5 then - self:T( "Cargo is airborne.") - Cargo:StatusLoaded() - Task.Cargo = Cargo - Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.', - self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Host, Host ) - Task.ExecuteStage = _TransportExecuteStage.SUCCESS - break - end - else - self:T( "Cargo not found in the DCS simulator." ) - end - end - end - end - -end - -function STAGELOAD:Validate( Mission, Client, Task ) - self:F() - - self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName ) - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - if not Task.IsSlingLoad then - if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then - Task:RemoveCargoMenus( Client ) - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task.CargoName = nil - Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) - self:T( -1 ) - return -1 - end - - local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() - local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 - - local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() - local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) - local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight - - self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) - if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then - Task:RemoveCargoMenus( Client ) - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task.CargoName = nil - Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) - self:T( -1 ) - return -1 - end - - self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) - if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then - Task:RemoveCargoMenus( Client ) - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task.CargoName = nil - Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) - self:T( -1 ) - return -1 - end - - if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then - Task:RemoveCargoMenus( Client ) - Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Host, Host ) - Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) - self:T( 1 ) - return 1 - end - - else - if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then - CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName ) - if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then - Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Host, Host ) - Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 ) - self:T( 1 ) - return 1 - end - end - - end - - - self:T( 0 ) - return 0 -end - - -STAGEDONE = { - ClassName = "STAGEDONE", - MSG = { ID = "Done", TIME = 10 }, - Name = "Done" -} - -function STAGEDONE:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'AI' - return self -end - -function STAGEDONE:Execute( Mission, Client, Task ) - self:F() - -end - -function STAGEDONE:Validate( Mission, Client, Task ) - self:F() - - Task:Done() - - return 0 -end - -STAGEARRIVE = { - ClassName = "STAGEARRIVE", - MSG = { ID = "Arrive", TIME = 10 }, - Name = "Arrive" -} - -function STAGEARRIVE:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - - ---- Execute Arrival --- @param #STAGEARRIVE self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGEARRIVE:Execute( Mission, Client, Task ) - self:F() - - if Client:IsMultiSeated() then - Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Co-Pilot" ) - else - Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Command" ) - end - -end - -function STAGEARRIVE:Validate( Mission, Client, Task ) - self:F() - - Task.CurrentLandingZoneID = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones ) - if ( Task.CurrentLandingZoneID ) then - else - return -1 - end - - return 1 -end - -STAGEGROUPSDESTROYED = { - ClassName = "STAGEGROUPSDESTROYED", - DestroyGroupSize = -1, - Frequency = STAGE.FREQUENCY.REPEAT, - MSG = { ID = "DestroyGroup", TIME = 10 }, - Name = "GroupsDestroyed" -} - -function STAGEGROUPSDESTROYED:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'AI' - return self -end - ---function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) --- --- Client:Message( 'Task: Still ' .. DestroyGroupSize .. " of " .. Task.DestroyGroupCount .. " " .. Task.DestroyGroupType .. " to be destroyed!", self.MSG.TIME, Mission.Name .. "/Stage" ) --- ---end - -function STAGEGROUPSDESTROYED:Validate( Mission, Client, Task ) - self:F() - - if Task.MissionTask:IsGoalReached() then - return 1 - else - return 0 - end -end - -function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) - self:F() - self:T( { Task.ClassName, Task.Destroyed } ) - --env.info( 'Event Table Task = ' .. tostring(Task) ) - -end - - - - - - - - - - - - - ---[[ - _TransportStage: Defines the different stages of which of transport missions can be in. This table is internal and is used to control the sequence of messages, actions and flow. - - - _TransportStage.START - - _TransportStage.ROUTE - - _TransportStage.LAND - - _TransportStage.EXECUTE - - _TransportStage.DONE - - _TransportStage.REMOVE ---]] -_TransportStage = { - HOLD = "HOLD", - START = "START", - ROUTE = "ROUTE", - LANDING = "LANDING", - LANDED = "LANDED", - EXECUTING = "EXECUTING", - LOAD = "LOAD", - UNLOAD = "UNLOAD", - DONE = "DONE", - NEXT = "NEXT" -} - -_TransportStageMsgTime = { - HOLD = 10, - START = 60, - ROUTE = 5, - LANDING = 10, - LANDED = 30, - EXECUTING = 30, - LOAD = 30, - UNLOAD = 30, - DONE = 30, - NEXT = 0 -} - -_TransportStageTime = { - HOLD = 10, - START = 5, - ROUTE = 5, - LANDING = 1, - LANDED = 1, - EXECUTING = 5, - LOAD = 5, - UNLOAD = 5, - DONE = 1, - NEXT = 0 -} - -_TransportStageAction = { - REPEAT = -1, - NONE = 0, - ONCE = 1 -} ---- The TASK Classes define major end-to-end activities within a MISSION. The TASK Class is the Master Class to orchestrate these activities. From this class, many concrete TASK classes are inherited. --- @module TASK - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Mission" ) -Include.File( "Client" ) -Include.File( "Stage" ) - ---- The TASK class --- @type TASK --- @extends Base#BASE -TASK = { - - -- Defines the different signal types with a Task. - SIGNAL = { - COLOR = { - RED = { ID = 1, COLOR = trigger.smokeColor.Red, TEXT = "A red" }, - GREEN = { ID = 2, COLOR = trigger.smokeColor.Green, TEXT = "A green" }, - BLUE = { ID = 3, COLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, - WHITE = { ID = 4, COLOR = trigger.smokeColor.White, TEXT = "A white" }, - ORANGE = { ID = 5, COLOR = trigger.smokeColor.Orange, TEXT = "An orange" } - }, - TYPE = { - SMOKE = { ID = 1, TEXT = "smoke" }, - FLARE = { ID = 2, TEXT = "flare" } - } - }, - ClassName = "TASK", - Mission = {}, -- Owning mission of the Task - Name = '', - Stages = {}, - Stage = {}, - Cargos = { - InitCargos = {}, - LoadCargos = {} - }, - LandingZones = { - LandingZoneNames = {}, - LandingZones = {} - }, - ActiveStage = 0, - TaskDone = false, - TaskFailed = false, - GoalTasks = {} -} - ---- Instantiates a new TASK Base. Should never be used. Interface Class. --- @return TASK -function TASK:New() - local self = BASE:Inherit( self, BASE:New() ) - self:F() - - -- assign Task default values during construction - self.TaskBriefing = "Task: No Task." - self.Time = timer.getTime() - self.ExecuteStage = _TransportExecuteStage.NONE - - return self -end - -function TASK:SetStage( StageSequenceIncrement ) - self:F( { StageSequenceIncrement } ) - - local Valid = false - if StageSequenceIncrement ~= 0 then - self.ActiveStage = self.ActiveStage + StageSequenceIncrement - if 1 <= self.ActiveStage and self.ActiveStage <= #self.Stages then - self.Stage = self.Stages[self.ActiveStage] - self:T( { self.Stage.Name } ) - self.Frequency = self.Stage.Frequency - Valid = true - else - Valid = false - env.info( "TASK:SetStage() self.ActiveStage is smaller or larger than self.Stages array. self.ActiveStage = " .. self.ActiveStage ) - end - end - self.Time = timer.getTime() - return Valid -end - -function TASK:Init() - self:F() - self.ActiveStage = 0 - self:SetStage(1) - self.TaskDone = false - self.TaskFailed = false -end - - ---- Get progress of a TASK. --- @return string GoalsText -function TASK:GetGoalProgress() - self:F2() - - local GoalsText = "" - for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do - local Goals = self:GetGoalCompletion( GoalVerb ) - if Goals and Goals ~= "" then - Goals = '(' .. Goals .. ')' - else - Goals = '( - )' - end - GoalsText = GoalsText .. GoalVerb .. ': ' .. self:GetGoalCount(GoalVerb) .. ' goals ' .. Goals .. ' of ' .. self:GetGoalTotal(GoalVerb) .. ' goals completed (' .. self:GetGoalPercentage(GoalVerb) .. '%); ' - end - - if GoalsText == "" then - GoalsText = "( - )" - end - - return GoalsText -end - ---- Show progress of a TASK. --- @param MISSION Mission Group structure describing the Mission. --- @param CLIENT Client Group structure describing the Client. -function TASK:ShowGoalProgress( Mission, Client ) - self:F2() - - local GoalsText = "" - for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do - if Mission:IsCompleted() then - else - local Goals = self:GetGoalCompletion( GoalVerb ) - if Goals and Goals ~= "" then - else - Goals = "-" - end - GoalsText = GoalsText .. self:GetGoalProgress() - end - end - - if Mission.MissionReportFlash or Mission.MissionReportShow then - Client:Message( GoalsText, 10, "/TASKPROGRESS" .. self.ClassName, "Mission Command: Task Status", 30 ) - end -end - ---- Sets a TASK to status Done. -function TASK:Done() - self:F2() - self.TaskDone = true -end - ---- Returns if a TASK is done. --- @return bool -function TASK:IsDone() - self:F2( self.TaskDone ) - return self.TaskDone -end - ---- Sets a TASK to status failed. -function TASK:Failed() - self:F() - self.TaskFailed = true -end - ---- Returns if a TASk has failed. --- @return bool -function TASK:IsFailed() - self:F2( self.TaskFailed ) - return self.TaskFailed -end - -function TASK:Reset( Mission, Client ) - self:F2() - self.ExecuteStage = _TransportExecuteStage.NONE -end - ---- Returns the Goals of a TASK --- @return @table Goals -function TASK:GetGoals() - return self.GoalTasks -end - ---- Returns if a TASK has Goal(s). --- @param #TASK self --- @param #string GoalVerb is the name of the Goal of the TASK. --- @return bool -function TASK:Goal( GoalVerb ) - self:F2( { GoalVerb } ) - if not GoalVerb then - GoalVerb = self.GoalVerb - end - self:T2( {self.GoalTasks[GoalVerb] } ) - if self.GoalTasks[GoalVerb] and self.GoalTasks[GoalVerb].GoalTotal > 0 then - return true - else - return false - end -end - ---- Sets the total Goals to be achieved of the Goal Name --- @param number GoalTotal is the number of times the GoalVerb needs to be achieved. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. -function TASK:SetGoalTotal( GoalTotal, GoalVerb ) - self:F2( { GoalTotal, GoalVerb } ) - - if not GoalVerb then - GoalVerb = self.GoalVerb - end - self.GoalTasks[GoalVerb] = {} - self.GoalTasks[GoalVerb].Goals = {} - self.GoalTasks[GoalVerb].GoalTotal = GoalTotal - self.GoalTasks[GoalVerb].GoalCount = 0 - return self -end - ---- Gets the total of Goals to be achieved within the TASK of the GoalVerb. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. -function TASK:GetGoalTotal( GoalVerb ) - self:F2( { GoalVerb } ) - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb ) then - return self.GoalTasks[GoalVerb].GoalTotal - else - return 0 - end -end - ---- Sets the total of Goals currently achieved within the TASK of the GoalVerb. --- @param number GoalCount is the total number of Goals achieved within the TASK. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return TASK -function TASK:SetGoalCount( GoalCount, GoalVerb ) - self:F2() - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb) then - self.GoalTasks[GoalVerb].GoalCount = GoalCount - end - return self -end - ---- Increments the total of Goals currently achieved within the TASK of the GoalVerb, with the given GoalCountIncrease. --- @param number GoalCountIncrease is the number of new Goals achieved within the TASK. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return TASK -function TASK:IncreaseGoalCount( GoalCountIncrease, GoalVerb ) - self:F2( { GoalCountIncrease, GoalVerb } ) - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb) then - self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalCountIncrease - end - return self -end - ---- Gets the total of Goals currently achieved within the TASK of the GoalVerb. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return TASK -function TASK:GetGoalCount( GoalVerb ) - self:F2() - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb ) then - return self.GoalTasks[GoalVerb].GoalCount - else - return 0 - end -end - ---- Gets the percentage of Goals currently achieved within the TASK of the GoalVerb. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return TASK -function TASK:GetGoalPercentage( GoalVerb ) - self:F2() - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb ) then - return math.floor( self:GetGoalCount( GoalVerb ) / self:GetGoalTotal( GoalVerb ) * 100 + .5 ) - else - return 100 - end -end - ---- Returns if all the Goals of the TASK were achieved. --- @return bool -function TASK:IsGoalReached() - self:F2() - - local GoalReached = true - - for GoalVerb, Goals in pairs( self.GoalTasks ) do - self:T2( { "GoalVerb", GoalVerb } ) - if self:Goal( GoalVerb ) then - local GoalToDo = self:GetGoalTotal( GoalVerb ) - self:GetGoalCount( GoalVerb ) - self:T2( "GoalToDo = " .. GoalToDo ) - if GoalToDo <= 0 then - else - GoalReached = false - break - end - else - break - end - end - - self:T( { GoalReached, self.GoalTasks } ) - return GoalReached -end - ---- Adds an Additional Goal for the TASK to be achieved. --- @param string GoalVerb is the name of the Goal of the TASK. --- @param string GoalTask is a text describing the Goal of the TASK to be achieved. --- @param number GoalIncrease is a number by which the Goal achievement is increasing. -function TASK:AddGoalCompletion( GoalVerb, GoalTask, GoalIncrease ) - self:F2( { GoalVerb, GoalTask, GoalIncrease } ) - - if self:Goal( GoalVerb ) then - self.GoalTasks[GoalVerb].Goals[#self.GoalTasks[GoalVerb].Goals+1] = GoalTask - self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalIncrease - end - return self -end - ---- Returns if the additional Goal for the TASK was completed. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return string Goals -function TASK:GetGoalCompletion( GoalVerb ) - self:F2( { GoalVerb } ) - - if self:Goal( GoalVerb ) then - local Goals = "" - for GoalID, GoalName in pairs( self.GoalTasks[GoalVerb].Goals ) do Goals = Goals .. GoalName .. " + " end - return Goals:gsub(" + $", ""), self.GoalTasks[GoalVerb].GoalCount - end -end - -function TASK.MenuAction( Parameter ) - Parameter.ReferenceTask.ExecuteStage = _TransportExecuteStage.EXECUTING - Parameter.ReferenceTask.Cargo = Parameter.CargoTask -end - -function TASK:StageExecute() - self:F() - - local Execute = false - - if self.Frequency == STAGE.FREQUENCY.REPEAT then - Execute = true - elseif self.Frequency == STAGE.FREQUENCY.NONE then - Execute = false - elseif self.Frequency >= 0 then - Execute = true - self.Frequency = self.Frequency - 1 - end - - return Execute - -end - ---- Work function to set signal events within a TASK. -function TASK:AddSignal( SignalUnitNames, SignalType, SignalColor, SignalHeight ) - self:F() - - local Valid = true - - if Valid then - if type( SignalUnitNames ) == "table" then - self.LandingZoneSignalUnitNames = SignalUnitNames - else - self.LandingZoneSignalUnitNames = { SignalUnitNames } - end - self.LandingZoneSignalType = SignalType - self.LandingZoneSignalColor = SignalColor - self.Signalled = false - if SignalHeight ~= nil then - self.LandingZoneSignalHeight = SignalHeight - else - self.LandingZoneSignalHeight = 0 - end - - if self.TaskBriefing then - self.TaskBriefing = self.TaskBriefing .. " " .. SignalColor.TEXT .. " " .. SignalType.TEXT .. " will be fired when entering the landing zone." - end - end - - return Valid -end - ---- When the CLIENT is approaching the landing zone, a RED SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeRed( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.RED, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a GREEN SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeGreen( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a BLUE SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeBlue( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a WHITE SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeWhite( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, an ORANGE SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeOrange( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a RED FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareRed( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.RED, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a GREEN FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareGreen( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a BLUE FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareBlue( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a WHITE FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareWhite( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, an ORANGE FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareOrange( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) -end ---- A GOHOMETASK orchestrates the travel back to the home base, which is a specific zone defined within the ME. --- @module GOHOMETASK - -Include.File("Task") - ---- The GOHOMETASK class --- @type -GOHOMETASK = { - ClassName = "GOHOMETASK", -} - ---- Creates a new GOHOMETASK. --- @param table{string,...}|string LandingZones Table of Landing Zone names where Home(s) are located. --- @return GOHOMETASK -function GOHOMETASK:New( LandingZones ) - local self = BASE:Inherit( self, TASK:New() ) - self:F( { LandingZones } ) - local Valid = true - - Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) - - if Valid then - self.Name = 'Fly Home' - self.TaskBriefing = "Task: Fly back to your home base. Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to your home base." - if type( LandingZones ) == "table" then - self.LandingZones = LandingZones - else - self.LandingZones = { LandingZones } - end - self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end ---- A DESTROYBASETASK will monitor the destruction of Groups and Units. This is a BASE class, other classes are derived from this class. --- @module DESTROYBASETASK --- @see DESTROYGROUPSTASK --- @see DESTROYUNITTYPESTASK --- @see DESTROY_RADARS_TASK - -Include.File("Task") - ---- The DESTROYBASETASK class --- @type DESTROYBASETASK -DESTROYBASETASK = { - ClassName = "DESTROYBASETASK", - Destroyed = 0, - GoalVerb = "Destroy", - DestroyPercentage = 100, -} - ---- Creates a new DESTROYBASETASK. --- @param #DESTROYBASETASK self --- @param #string DestroyGroupType Text describing the group to be destroyed. f.e. "Radar Installations", "Ships", "Vehicles", "Command Centers". --- @param #string DestroyUnitType Text describing the unit types to be destroyed. f.e. "SA-6", "Row Boats", "Tanks", "Tents". --- @param #list<#string> DestroyGroupPrefixes Table of Prefixes of the Groups to be destroyed before task is completed. --- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. --- @return DESTROYBASETASK -function DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupPrefixes, DestroyPercentage ) - local self = BASE:Inherit( self, TASK:New() ) - self:F() - - self.Name = 'Destroy' - self.Destroyed = 0 - self.DestroyGroupPrefixes = DestroyGroupPrefixes - self.DestroyGroupType = DestroyGroupType - self.DestroyUnitType = DestroyUnitType - if DestroyPercentage then - self.DestroyPercentage = DestroyPercentage - end - self.TaskBriefing = "Task: Destroy " .. DestroyGroupType .. "." - self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEGROUPSDESTROYED:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - - return self -end - ---- Handle the S_EVENT_DEAD events to validate the destruction of units for the task monitoring. --- @param #DESTROYBASETASK self --- @param Event#EVENTDATA Event structure of MOOSE. -function DESTROYBASETASK:EventDead( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - local DestroyUnit = Event.IniDCSUnit - local DestroyUnitName = Event.IniDCSUnitName - local DestroyGroup = Event.IniDCSGroup - local DestroyGroupName = Event.IniDCSGroupName - - --TODO: I need to fix here if 2 groups in the mission have a similar name with GroupPrefix equal, then i should differentiate for which group the goal was reached! - --I may need to test if for the goalverb that group goal was reached or something. Need to think about it a bit more ... - local UnitsDestroyed = 0 - for DestroyGroupPrefixID, DestroyGroupPrefix in pairs( self.DestroyGroupPrefixes ) do - self:T( DestroyGroupPrefix ) - if string.find( DestroyGroupName, DestroyGroupPrefix, 1, true ) then - self:T( BASE:Inherited(self).ClassName ) - UnitsDestroyed = self:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:T( UnitsDestroyed ) - end - end - - self:T( { UnitsDestroyed } ) - self:IncreaseGoalCount( UnitsDestroyed, self.GoalVerb ) - end - -end - ---- Validate task completeness of DESTROYBASETASK. --- @param DestroyGroup Group structure describing the group to be evaluated. --- @param DestroyUnit Unit structure describing the Unit to be evaluated. -function DESTROYBASETASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:F() - - return 0 -end ---- DESTROYGROUPSTASK --- @module DESTROYGROUPSTASK - -Include.File("DestroyBaseTask") - ---- The DESTROYGROUPSTASK class --- @type -DESTROYGROUPSTASK = { - ClassName = "DESTROYGROUPSTASK", - GoalVerb = "Destroy Groups", -} - ---- Creates a new DESTROYGROUPSTASK. --- @param #DESTROYGROUPSTASK self --- @param #string DestroyGroupType String describing the group to be destroyed. --- @param #string DestroyUnitType String describing the unit to be destroyed. --- @param #list<#string> DestroyGroupNames Table of string containing the name of the groups to be destroyed before task is completed. --- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. ----@return DESTROYGROUPSTASK -function DESTROYGROUPSTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) - local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) ) - self:F() - - self.Name = 'Destroy Groups' - self.GoalVerb = "Destroy " .. DestroyGroupType - - _EVENTDISPATCHER:OnDead( self.EventDead , self ) - _EVENTDISPATCHER:OnCrash( self.EventDead , self ) - - return self -end - ---- Report Goal Progress. --- @param #DESTROYGROUPSTASK self --- @param DCSGroup#Group DestroyGroup Group structure describing the group to be evaluated. --- @param DCSUnit#Unit DestroyUnit Unit structure describing the Unit to be evaluated. --- @return #number The DestroyCount reflecting the amount of units destroyed within the group. -function DESTROYGROUPSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:F( { DestroyGroup, DestroyUnit, self.DestroyPercentage } ) - - local DestroyGroupSize = DestroyGroup:getSize() - 1 -- When a DEAD event occurs, the getSize is still one larger than the destroyed unit. - local DestroyGroupInitialSize = DestroyGroup:getInitialSize() - self:T( { DestroyGroupSize, DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) } ) - - local DestroyCount = 0 - if DestroyGroup then - if DestroyGroupSize <= DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) then - DestroyCount = 1 - end - else - DestroyCount = 1 - end - - self:T( DestroyCount ) - - return DestroyCount -end ---- Task class to destroy radar installations. --- @module DESTROYRADARSTASK - -Include.File("DestroyBaseTask") - ---- The DESTROYRADARS class --- @type -DESTROYRADARSTASK = { - ClassName = "DESTROYRADARSTASK", - GoalVerb = "Destroy Radars" -} - ---- Creates a new DESTROYRADARSTASK. --- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. --- @return DESTROYRADARSTASK -function DESTROYRADARSTASK:New( DestroyGroupNames ) - local self = BASE:Inherit( self, DESTROYGROUPSTASK:New( 'radar installations', 'radars', DestroyGroupNames ) ) - self:F() - - self.Name = 'Destroy Radars' - - _EVENTDISPATCHER:OnDead( self.EventDead , self ) - - return self -end - ---- Report Goal Progress. --- @param Group DestroyGroup Group structure describing the group to be evaluated. --- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. -function DESTROYRADARSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:F( { DestroyGroup, DestroyUnit } ) - - local DestroyCount = 0 - if DestroyUnit and DestroyUnit:hasSensors( Unit.SensorType.RADAR, Unit.RadarType.AS ) then - if DestroyUnit and DestroyUnit:getLife() <= 1.0 then - self:T( 'Destroyed a radar' ) - DestroyCount = 1 - end - end - return DestroyCount -end ---- Set TASK to destroy certain unit types. --- @module DESTROYUNITTYPESTASK - -Include.File("DestroyBaseTask") - ---- The DESTROYUNITTYPESTASK class --- @type -DESTROYUNITTYPESTASK = { - ClassName = "DESTROYUNITTYPESTASK", - GoalVerb = "Destroy", -} - ---- Creates a new DESTROYUNITTYPESTASK. --- @param string DestroyGroupType String describing the group to be destroyed. f.e. "Radar Installations", "Fleet", "Batallion", "Command Centers". --- @param string DestroyUnitType String describing the unit to be destroyed. f.e. "radars", "ships", "tanks", "centers". --- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. --- @param string DestroyUnitTypes Table of string containing the type names of the units to achieve mission success. --- @return DESTROYUNITTYPESTASK -function DESTROYUNITTYPESTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes ) - local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames ) ) - self:F( { DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes } ) - - if type(DestroyUnitTypes) == 'table' then - self.DestroyUnitTypes = DestroyUnitTypes - else - self.DestroyUnitTypes = { DestroyUnitTypes } - end - - self.Name = 'Destroy Unit Types' - self.GoalVerb = "Destroy " .. DestroyGroupType - - _EVENTDISPATCHER:OnDead( self.EventDead , self ) - - return self -end - ---- Report Goal Progress. --- @param Group DestroyGroup Group structure describing the group to be evaluated. --- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. -function DESTROYUNITTYPESTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:F( { DestroyGroup, DestroyUnit } ) - - local DestroyCount = 0 - for UnitTypeID, UnitType in pairs( self.DestroyUnitTypes ) do - if DestroyUnit and DestroyUnit:getTypeName() == UnitType then - if DestroyUnit and DestroyUnit:getLife() <= 1.0 then - DestroyCount = DestroyCount + 1 - end - end - end - return DestroyCount -end ---- A PICKUPTASK orchestrates the loading of CARGO at a specific landing zone. --- @module PICKUPTASK --- @parent TASK - -Include.File("Task") -Include.File("Cargo") - ---- The PICKUPTASK class --- @type -PICKUPTASK = { - ClassName = "PICKUPTASK", - TEXT = { "Pick-Up", "picked-up", "loaded" }, - GoalVerb = "Pick-Up" -} - ---- Creates a new PICKUPTASK. --- @param table{string,...}|string LandingZones Table of Zone names where Cargo is to be loaded. --- @param CARGO_TYPE CargoType Type of the Cargo. The type must be of the following Enumeration:.. --- @param number OnBoardSide Reflects from which side the cargo Group will be on-boarded on the Carrier. -function PICKUPTASK:New( CargoType, OnBoardSide ) - local self = BASE:Inherit( self, TASK:New() ) - self:F() - - -- self holds the inherited instance of the PICKUPTASK Class to the BASE class. - - local Valid = true - - if Valid then - self.Name = 'Pickup Cargo' - self.TaskBriefing = "Task: Fly to the indicated landing zones and pickup " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the pickup zone." - self.CargoType = CargoType - self.GoalVerb = CargoType .. " " .. self.GoalVerb - self.OnBoardSide = OnBoardSide - self.IsLandingRequired = true -- required to decide whether the client needs to land or not - self.IsSlingLoad = false -- Indicates whether the cargo is a sling load cargo - self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGELOAD:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end - -function PICKUPTASK:FromZone( LandingZone ) - self:F() - - self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName - self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone - - return self -end - -function PICKUPTASK:InitCargo( InitCargos ) - self:F( { InitCargos } ) - - if type( InitCargos ) == "table" then - self.Cargos.InitCargos = InitCargos - else - self.Cargos.InitCargos = { InitCargos } - end - - return self -end - -function PICKUPTASK:LoadCargo( LoadCargos ) - self:F( { LoadCargos } ) - - if type( LoadCargos ) == "table" then - self.Cargos.LoadCargos = LoadCargos - else - self.Cargos.LoadCargos = { LoadCargos } - end - - return self -end - -function PICKUPTASK:AddCargoMenus( Client, Cargos, TransportRadius ) - self:F() - - for CargoID, Cargo in pairs( Cargos ) do - - self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) - - -- If the Cargo has no status, allow the menu option. - if Cargo:IsStatusNone() or ( Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() ) then - - local MenuAdd = false - if Cargo:IsNear( Client, self.CurrentCargoZone ) then - MenuAdd = true - end - - if MenuAdd then - if Client._Menus[Cargo.CargoType] == nil then - Client._Menus[Cargo.CargoType] = {} - end - - if not Client._Menus[Cargo.CargoType].PickupMenu then - Client._Menus[Cargo.CargoType].PickupMenu = missionCommands.addSubMenuForGroup( - Client:GetClientGroupID(), - self.TEXT[1] .. " " .. Cargo.CargoType, - nil - ) - self:T( 'Added PickupMenu: ' .. self.TEXT[1] .. " " .. Cargo.CargoType ) - end - - if Client._Menus[Cargo.CargoType].PickupSubMenus == nil then - Client._Menus[Cargo.CargoType].PickupSubMenus = {} - end - - Client._Menus[Cargo.CargoType].PickupSubMenus[ #Client._Menus[Cargo.CargoType].PickupSubMenus + 1 ] = missionCommands.addCommandForGroup( - Client:GetClientGroupID(), - Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", - Client._Menus[Cargo.CargoType].PickupMenu, - self.MenuAction, - { ReferenceTask = self, CargoTask = Cargo } - ) - self:T( 'Added PickupSubMenu' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) - end - end - end - -end - -function PICKUPTASK:RemoveCargoMenus( Client ) - self:F() - - for MenuID, MenuData in pairs( Client._Menus ) do - for SubMenuID, SubMenuData in pairs( MenuData.PickupSubMenus ) do - missionCommands.removeItemForGroup( Client:GetClientGroupID(), SubMenuData ) - self:T( "Removed PickupSubMenu " ) - SubMenuData = nil - end - if MenuData.PickupMenu then - missionCommands.removeItemForGroup( Client:GetClientGroupID(), MenuData.PickupMenu ) - self:T( "Removed PickupMenu " ) - MenuData.PickupMenu = nil - end - end - - for CargoID, Cargo in pairs( CARGOS ) do - self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) - if Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() then - Cargo:StatusNone() - end - end - -end - - - -function PICKUPTASK:HasFailed( ClientDead ) - self:F() - - local TaskHasFailed = self.TaskFailed - return TaskHasFailed -end - ---- A DEPLOYTASK orchestrates the deployment of CARGO within a specific landing zone. --- @module DEPLOYTASK - -Include.File( "Task" ) - ---- A DeployTask --- @type DEPLOYTASK -DEPLOYTASK = { - ClassName = "DEPLOYTASK", - TEXT = { "Deploy", "deployed", "unloaded" }, - GoalVerb = "Deployment" -} - - ---- Creates a new DEPLOYTASK object, which models the sequence of STAGEs to unload a cargo. --- @function [parent=#DEPLOYTASK] New --- @param #string CargoType Type of the Cargo. --- @return #DEPLOYTASK The created DeployTask -function DEPLOYTASK:New( CargoType ) - local self = BASE:Inherit( self, TASK:New() ) - self:F() - - local Valid = true - - if Valid then - self.Name = 'Deploy Cargo' - self.TaskBriefing = "Fly to one of the indicated landing zones and deploy " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the deployment zone." - self.CargoType = CargoType - self.GoalVerb = CargoType .. " " .. self.GoalVerb - self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGEUNLOAD:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end - -function DEPLOYTASK:ToZone( LandingZone ) - self:F() - - self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName - self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone - - return self -end - - -function DEPLOYTASK:InitCargo( InitCargos ) - self:F( { InitCargos } ) - - if type( InitCargos ) == "table" then - self.Cargos.InitCargos = InitCargos - else - self.Cargos.InitCargos = { InitCargos } - end - - return self -end - - -function DEPLOYTASK:LoadCargo( LoadCargos ) - self:F( { LoadCargos } ) - - if type( LoadCargos ) == "table" then - self.Cargos.LoadCargos = LoadCargos - else - self.Cargos.LoadCargos = { LoadCargos } - end - - return self -end - - ---- When the cargo is unloaded, it will move to the target zone name. --- @param string TargetZoneName Name of the Zone to where the Cargo should move after unloading. -function DEPLOYTASK:SetCargoTargetZoneName( TargetZoneName ) - self:F() - - local Valid = true - - Valid = routines.ValidateString( TargetZoneName, "TargetZoneName", Valid ) - - if Valid then - self.TargetZoneName = TargetZoneName - end - - return Valid - -end - -function DEPLOYTASK:AddCargoMenus( Client, Cargos, TransportRadius ) - self:F() - - local ClientGroupID = Client:GetClientGroupID() - - self:T( ClientGroupID ) - - for CargoID, Cargo in pairs( Cargos ) do - - self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo.CargoWeight } ) - - if Cargo:IsStatusLoaded() and Client == Cargo:IsLoadedInClient() then - - if Client._Menus[Cargo.CargoType] == nil then - Client._Menus[Cargo.CargoType] = {} - end - - if not Client._Menus[Cargo.CargoType].DeployMenu then - Client._Menus[Cargo.CargoType].DeployMenu = missionCommands.addSubMenuForGroup( - ClientGroupID, - self.TEXT[1] .. " " .. Cargo.CargoType, - nil - ) - self:T( 'Added DeployMenu ' .. self.TEXT[1] ) - end - - if Client._Menus[Cargo.CargoType].DeploySubMenus == nil then - Client._Menus[Cargo.CargoType].DeploySubMenus = {} - end - - if Client._Menus[Cargo.CargoType].DeployMenu == nil then - self:T( 'deploymenu is nil' ) - end - - Client._Menus[Cargo.CargoType].DeploySubMenus[ #Client._Menus[Cargo.CargoType].DeploySubMenus + 1 ] = missionCommands.addCommandForGroup( - ClientGroupID, - Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", - Client._Menus[Cargo.CargoType].DeployMenu, - self.MenuAction, - { ReferenceTask = self, CargoTask = Cargo } - ) - self:T( 'Added DeploySubMenu ' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) - end - end - -end - -function DEPLOYTASK:RemoveCargoMenus( Client ) - self:F() - - local ClientGroupID = Client:GetClientGroupID() - self:T( ClientGroupID ) - - for MenuID, MenuData in pairs( Client._Menus ) do - if MenuData.DeploySubMenus ~= nil then - for SubMenuID, SubMenuData in pairs( MenuData.DeploySubMenus ) do - missionCommands.removeItemForGroup( ClientGroupID, SubMenuData ) - self:T( "Removed DeploySubMenu " ) - SubMenuData = nil - end - end - if MenuData.DeployMenu then - missionCommands.removeItemForGroup( ClientGroupID, MenuData.DeployMenu ) - self:T( "Removed DeployMenu " ) - MenuData.DeployMenu = nil - end - end - -end ---- A NOTASK is a dummy activity... But it will show a Mission Briefing... --- @module NOTASK - -Include.File("Task") - ---- The NOTASK class --- @type -NOTASK = { - ClassName = "NOTASK", -} - ---- Creates a new NOTASK. -function NOTASK:New() - local self = BASE:Inherit( self, TASK:New() ) - self:F() - - local Valid = true - - if Valid then - self.Name = 'Nothing' - self.TaskBriefing = "Task: Execute your mission." - self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end ---- A ROUTETASK orchestrates the travel to a specific zone defined within the ME. --- @module ROUTETASK - ---- The ROUTETASK class --- @type -ROUTETASK = { - ClassName = "ROUTETASK", - GoalVerb = "Route", -} - ---- Creates a new ROUTETASK. --- @param table{sring,...}|string LandingZones Table of Zone Names where the target is located. --- @param string TaskBriefing (optional) Defines a text describing the briefing of the task. --- @return ROUTETASK -function ROUTETASK:New( LandingZones, TaskBriefing ) - local self = BASE:Inherit( self, TASK:New() ) - self:F( { LandingZones, TaskBriefing } ) - - local Valid = true - - Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) - - if Valid then - self.Name = 'Route To Zone' - if TaskBriefing then - self.TaskBriefing = TaskBriefing .. " Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." - else - self.TaskBriefing = "Task: Fly to specified zone(s). Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." - end - if type( LandingZones ) == "table" then - self.LandingZones = LandingZones - else - self.LandingZones = { LandingZones } - end - self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end - ---- A MISSION is the main owner of a Mission orchestration within MOOSE . The Mission framework orchestrates @{CLIENT}s, @{TASK}s, @{STAGE}s etc. --- A @{CLIENT} needs to be registered within the @{MISSION} through the function @{AddClient}. A @{TASK} needs to be registered within the @{MISSION} through the function @{AddTask}. --- @module Mission - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Client" ) -Include.File( "Task" ) - ---- The MISSION class --- @type MISSION --- @extends Base#BASE --- @field #MISSION.Clients _Clients --- @field #string MissionBriefing -MISSION = { - ClassName = "MISSION", - Name = "", - MissionStatus = "PENDING", - _Clients = {}, - _Tasks = {}, - _ActiveTasks = {}, - GoalFunction = nil, - MissionReportTrigger = 0, - MissionProgressTrigger = 0, - MissionReportShow = false, - MissionReportFlash = false, - MissionTimeInterval = 0, - MissionCoalition = "", - SUCCESS = 1, - FAILED = 2, - REPEAT = 3, - _GoalTasks = {} -} - ---- @type MISSION.Clients --- @list - -function MISSION:Meta() - - local self = BASE:Inherit( self, BASE:New() ) - self:F() - - return self -end - ---- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. --- @param string MissionName is the name of the mission. This name will be used to reference the status of each mission by the players. --- @param string MissionPriority is a string indicating the "priority" of the Mission. f.e. "Primary", "Secondary" or "First", "Second". It is free format and up to the Mission designer to choose. There are no rules behind this field. --- @param string MissionBriefing is a string indicating the mission briefing to be shown when a player joins a @{CLIENT}. --- @param string MissionCoalition is a string indicating the coalition or party to which this mission belongs to. It is free format and can be chosen freely by the mission designer. Note that this field is not to be confused with the coalition concept of the ME. Examples of a Mission Coalition could be "NATO", "CCCP", "Intruders", "Terrorists"... --- @return MISSION --- @usage --- -- Declare a few missions. --- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'Patriots', 'Primary', 'Our intelligence reports that 3 Patriot SAM defense batteries are located near Ruisi, Kvarhiti and Gori.', 'Russia' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'Package Delivery', 'Operational', 'In order to be in full control of the situation, we need you to deliver a very important package at a secret location. Fly undetected through the NATO defenses and deliver the secret package. The secret agent is located at waypoint 4.', 'Russia' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue General', 'Tactical', 'Our intelligence has received a remote signal behind Gori. We believe it is a very important Russian General that was captured by Georgia. Go out there and rescue him! Ensure you stay out of the battle zone, keep south. Waypoint 4 is the location of our Russian General.', 'Russia' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'SA-6 SAMs', 'Primary', 'Our intelligence reports that 3 SA-6 SAM defense batteries are located near Didmukha, Khetagurov and Berula. Eliminate the Russian SAMs.', 'NATO' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Sling Load', 'Operational', 'Fly to the cargo pickup zone at Dzegvi or Kaspi, and sling the cargo to Soganlug airbase.', 'NATO' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue secret agent', 'Tactical', 'In order to be in full control of the situation, we need you to rescue a secret agent from the woods behind enemy lines. Avoid the Russian defenses and rescue the agent. Keep south until Khasuri, and keep your eyes open for any SAM presence. The agent is located at waypoint 4 on your kneeboard.', 'NATO' ) -function MISSION:New( MissionName, MissionPriority, MissionBriefing, MissionCoalition ) - - self = MISSION:Meta() - self:T({ MissionName, MissionPriority, MissionBriefing, MissionCoalition }) - - local Valid = true - - Valid = routines.ValidateString( MissionName, "MissionName", Valid ) - Valid = routines.ValidateString( MissionPriority, "MissionPriority", Valid ) - Valid = routines.ValidateString( MissionBriefing, "MissionBriefing", Valid ) - Valid = routines.ValidateString( MissionCoalition, "MissionCoalition", Valid ) - - if Valid then - self.Name = MissionName - self.MissionPriority = MissionPriority - self.MissionBriefing = MissionBriefing - self.MissionCoalition = MissionCoalition - end - - return self -end - ---- Returns if a Mission has completed. --- @return bool -function MISSION:IsCompleted() - self:F() - return self.MissionStatus == "ACCOMPLISHED" -end - ---- Set a Mission to completed. -function MISSION:Completed() - self:F() - self.MissionStatus = "ACCOMPLISHED" - self:StatusToClients() -end - ---- Returns if a Mission is ongoing. --- treturn bool -function MISSION:IsOngoing() - self:F() - return self.MissionStatus == "ONGOING" -end - ---- Set a Mission to ongoing. -function MISSION:Ongoing() - self:F() - self.MissionStatus = "ONGOING" - --self:StatusToClients() -end - ---- Returns if a Mission is pending. --- treturn bool -function MISSION:IsPending() - self:F() - return self.MissionStatus == "PENDING" -end - ---- Set a Mission to pending. -function MISSION:Pending() - self:F() - self.MissionStatus = "PENDING" - self:StatusToClients() -end - ---- Returns if a Mission has failed. --- treturn bool -function MISSION:IsFailed() - self:F() - return self.MissionStatus == "FAILED" -end - ---- Set a Mission to failed. -function MISSION:Failed() - self:F() - self.MissionStatus = "FAILED" - self:StatusToClients() -end - ---- Send the status of the MISSION to all Clients. -function MISSION:StatusToClients() - self:F() - if self.MissionReportFlash then - for ClientID, Client in pairs( self._Clients ) do - Client:Message( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. '! ( ' .. self.MissionPriority .. ' mission ) ', 10, self.Name .. '/Status', "Mission Command: Mission Status") - end - end -end - ---- Handles the reporting. After certain time intervals, a MISSION report MESSAGE will be shown to All Players. -function MISSION:ReportTrigger() - self:F() - - if self.MissionReportShow == true then - self.MissionReportShow = false - return true - else - if self.MissionReportFlash == true then - if timer.getTime() >= self.MissionReportTrigger then - self.MissionReportTrigger = timer.getTime() + self.MissionTimeInterval - return true - else - return false - end - else - return false - end - end -end - ---- Report the status of all MISSIONs to all active Clients. -function MISSION:ReportToAll() - self:F() - - local AlivePlayers = '' - for ClientID, Client in pairs( self._Clients ) do - if Client:GetDCSGroup() then - if Client:GetClientGroupDCSUnit() then - if Client:GetClientGroupDCSUnit():getLife() > 0.0 then - if AlivePlayers == '' then - AlivePlayers = ' Players: ' .. Client:GetClientGroupDCSUnit():getPlayerName() - else - AlivePlayers = AlivePlayers .. ' / ' .. Client:GetClientGroupDCSUnit():getPlayerName() - end - end - end - end - end - local Tasks = self:GetTasks() - local TaskText = "" - for TaskID, TaskData in pairs( Tasks ) do - TaskText = TaskText .. " - Task " .. TaskID .. ": " .. TaskData.Name .. ": " .. TaskData:GetGoalProgress() .. "\n" - end - MESSAGE:New( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. ' ( ' .. self.MissionPriority .. ' mission )' .. AlivePlayers .. "\n" .. TaskText:gsub("\n$",""), "Mission Command: Mission Report", 10, self.Name .. '/Status'):ToAll() -end - - ---- Add a goal function to a MISSION. Goal functions are called when a @{TASK} within a mission has been completed. --- @param function GoalFunction is the function defined by the mission designer to evaluate whether a certain goal has been reached after a @{TASK} finishes within the @{MISSION}. A GoalFunction must accept 2 parameters: Mission, Client, which contains the current MISSION object and the current CLIENT object respectively. --- @usage --- PatriotActivation = { --- { "US SAM Patriot Zerti", false }, --- { "US SAM Patriot Zegduleti", false }, --- { "US SAM Patriot Gvleti", false } --- } --- --- function DeployPatriotTroopsGoal( Mission, Client ) --- --- --- -- Check if the cargo is all deployed for mission success. --- for CargoID, CargoData in pairs( Mission._Cargos ) do --- if Group.getByName( CargoData.CargoGroupName ) then --- CargoGroup = Group.getByName( CargoData.CargoGroupName ) --- if CargoGroup then --- -- Check if the cargo is ready to activate --- CurrentLandingZoneID = routines.IsUnitInZones( CargoGroup:getUnits()[1], Mission:GetTask( 2 ).LandingZones ) -- The second task is the Deploytask to measure mission success upon --- if CurrentLandingZoneID then --- if PatriotActivation[CurrentLandingZoneID][2] == false then --- -- Now check if this is a new Mission Task to be completed... --- trigger.action.setGroupAIOn( Group.getByName( PatriotActivation[CurrentLandingZoneID][1] ) ) --- PatriotActivation[CurrentLandingZoneID][2] = true --- MessageToBlue( "Mission Command: Message to all airborne units! The " .. PatriotActivation[CurrentLandingZoneID][1] .. " is armed. Our air defenses are now stronger.", 60, "BLUE/PatriotDefense" ) --- MessageToRed( "Mission Command: Our satellite systems are detecting additional NATO air defenses. To all airborne units: Take care!!!", 60, "RED/PatriotDefense" ) --- Mission:GetTask( 2 ):AddGoalCompletion( "Patriots activated", PatriotActivation[CurrentLandingZoneID][1], 1 ) -- Register Patriot activation as part of mission goal. --- end --- end --- end --- end --- end --- end --- --- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) --- Mission:AddGoalFunction( DeployPatriotTroopsGoal ) -function MISSION:AddGoalFunction( GoalFunction ) - self:F() - self.GoalFunction = GoalFunction -end - ---- Register a new @{CLIENT} to participate within the mission. --- @param CLIENT Client is the @{CLIENT} object. The object must have been instantiated with @{CLIENT:New}. --- @return CLIENT --- @usage --- Add a number of Client objects to the Mission. --- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 1', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 3', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 2', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 4', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) -function MISSION:AddClient( Client ) - self:F( { Client } ) - - local Valid = true - - if Valid then - self._Clients[Client.ClientName] = Client - end - - return Client -end - ---- Find a @{CLIENT} object within the @{MISSION} by its ClientName. --- @param CLIENT ClientName is a string defining the Client Group as defined within the ME. --- @return CLIENT --- @usage --- -- Seach for Client "Bomber" within the Mission. --- local BomberClient = Mission:FindClient( "Bomber" ) -function MISSION:FindClient( ClientName ) - self:F( { self._Clients[ClientName] } ) - return self._Clients[ClientName] -end - - ---- Register a @{TASK} to be completed within the @{MISSION}. Note that there can be multiple @{TASK}s registered to be completed. Each TASK can be set a certain Goal. The MISSION will not be completed until all Goals are reached. --- @param TASK Task is the @{TASK} object. The object must have been instantiated with @{TASK:New} or any of its inherited @{TASK}s. --- @param number TaskNumber is the sequence number of the TASK within the MISSION. This number does have to be chronological. --- @return TASK --- @usage --- -- Define a few tasks for the Mission. --- PickupZones = { "NATO Gold Pickup Zone", "NATO Titan Pickup Zone" } --- PickupSignalUnits = { "NATO Gold Coordination Center", "NATO Titan Coordination Center" } --- --- -- Assign the Pickup Task --- local PickupTask = PICKUPTASK:New( PickupZones, CARGO_TYPE.ENGINEERS, CLIENT.ONBOARDSIDE.LEFT ) --- PickupTask:AddSmokeBlue( PickupSignalUnits ) --- PickupTask:SetGoalTotal( 3 ) --- Mission:AddTask( PickupTask, 1 ) --- --- -- Assign the Deploy Task --- local PatriotActivationZones = { "US Patriot Battery 1 Activation", "US Patriot Battery 2 Activation", "US Patriot Battery 3 Activation" } --- local PatriotActivationZonesSmokeUnits = { "US SAM Patriot - Battery 1 Control", "US SAM Patriot - Battery 2 Control", "US SAM Patriot - Battery 3 Control" } --- local DeployTask = DEPLOYTASK:New( PatriotActivationZones, CARGO_TYPE.ENGINEERS ) --- --DeployTask:SetCargoTargetZoneName( 'US Troops Attack ' .. math.random(2) ) --- DeployTask:AddSmokeBlue( PatriotActivationZonesSmokeUnits ) --- DeployTask:SetGoalTotal( 3 ) --- DeployTask:SetGoalTotal( 3, "Patriots activated" ) --- Mission:AddTask( DeployTask, 2 ) - -function MISSION:AddTask( Task, TaskNumber ) - self:F() - - self._Tasks[TaskNumber] = Task - self._Tasks[TaskNumber]:EnableEvents() - self._Tasks[TaskNumber].ID = TaskNumber - - return Task - end - ---- Get the TASK idenified by the TaskNumber from the Mission. This function is useful in GoalFunctions. --- @param number TaskNumber is the number of the @{TASK} within the @{MISSION}. --- @return TASK --- @usage --- -- Get Task 2 from the Mission. --- Task2 = Mission:GetTask( 2 ) - -function MISSION:GetTask( TaskNumber ) - self:F() - - local Valid = true - - local Task = nil - - if type(TaskNumber) ~= "number" then - Valid = false - end - - if Valid then - Task = self._Tasks[TaskNumber] - end - - return Task -end - ---- Get all the TASKs from the Mission. This function is useful in GoalFunctions. --- @return {TASK,...} Structure of TASKS with the @{TASK} number as the key. --- @usage --- -- Get Tasks from the Mission. --- Tasks = Mission:GetTasks() --- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" ) -function MISSION:GetTasks() - self:F() - - return self._Tasks -end - - ---[[ - _TransportExecuteStage: Defines the different stages of Transport unload/load execution. This table is internal and is used to control the validity of Transport load/unload timing. - - - _TransportExecuteStage.EXECUTING - - _TransportExecuteStage.SUCCESS - - _TransportExecuteStage.FAILED - ---]] -_TransportExecuteStage = { - NONE = 0, - EXECUTING = 1, - SUCCESS = 2, - FAILED = 3 -} - - ---- The MISSIONSCHEDULER is an OBJECT and is the main scheduler of ALL active MISSIONs registered within this scheduler. It's workings are considered internal and is automatically created when the Mission.lua file is included. --- @type MISSIONSCHEDULER --- @field #MISSIONSCHEDULER.MISSIONS Missions -MISSIONSCHEDULER = { - Missions = {}, - MissionCount = 0, - TimeIntervalCount = 0, - TimeIntervalShow = 150, - TimeSeconds = 14400, - TimeShow = 5 -} - ---- @type MISSIONSCHEDULER.MISSIONS --- @list <#MISSION> Mission - ---- This is the main MISSIONSCHEDULER Scheduler function. It is considered internal and is automatically created when the Mission.lua file is included. -function MISSIONSCHEDULER.Scheduler() - - - -- loop through the missions in the TransportTasks - for MissionName, MissionData in pairs( MISSIONSCHEDULER.Missions ) do - - local Mission = MissionData -- #MISSION - - if not Mission:IsCompleted() then - - -- This flag will monitor if for this mission, there are clients alive. If this flag is still false at the end of the loop, the mission status will be set to Pending (if not Failed or Completed). - local ClientsAlive = false - - for ClientID, ClientData in pairs( Mission._Clients ) do - - local Client = ClientData -- Client#CLIENT - - if Client:IsAlive() then - - -- There is at least one Client that is alive... So the Mission status is set to Ongoing. - ClientsAlive = true - - -- If this Client was not registered as Alive before: - -- 1. We register the Client as Alive. - -- 2. We initialize the Client Tasks and make a link to the original Mission Task. - -- 3. We initialize the Cargos. - -- 4. We flag the Mission as Ongoing. - if not Client.ClientAlive then - Client.ClientAlive = true - Client.ClientBriefingShown = false - for TaskNumber, Task in pairs( Mission._Tasks ) do - -- Note that this a deepCopy. Each client must have their own Tasks with own Stages!!! - Client._Tasks[TaskNumber] = routines.utils.deepCopy( Mission._Tasks[TaskNumber] ) - -- Each MissionTask must point to the original Mission. - Client._Tasks[TaskNumber].MissionTask = Mission._Tasks[TaskNumber] - Client._Tasks[TaskNumber].Cargos = Mission._Tasks[TaskNumber].Cargos - Client._Tasks[TaskNumber].LandingZones = Mission._Tasks[TaskNumber].LandingZones - end - - Mission:Ongoing() - end - - - -- For each Client, check for each Task the state and evolve the mission. - -- This flag will indicate if the Task of the Client is Complete. - local TaskComplete = false - - for TaskNumber, Task in pairs( Client._Tasks ) do - - if not Task.Stage then - Task:SetStage( 1 ) - end - - - local TransportTime = timer.getTime() - - if not Task:IsDone() then - - if Task:Goal() then - Task:ShowGoalProgress( Mission, Client ) - end - - --env.info( 'Scheduler: Mission = ' .. Mission.Name .. ' / Client = ' .. Client.ClientName .. ' / Task = ' .. Task.Name .. ' / Stage = ' .. Task.ActiveStage .. ' - ' .. Task.Stage.Name .. ' - ' .. Task.Stage.StageType ) - - -- Action - if Task:StageExecute() then - Task.Stage:Execute( Mission, Client, Task ) - end - - -- Wait until execution is finished - if Task.ExecuteStage == _TransportExecuteStage.EXECUTING then - Task.Stage:Executing( Mission, Client, Task ) - end - - -- Validate completion or reverse to earlier stage - if Task.Time + Task.Stage.WaitTime <= TransportTime then - Task:SetStage( Task.Stage:Validate( Mission, Client, Task ) ) - end - - if Task:IsDone() then - --env.info( 'Scheduler: Mission '.. Mission.Name .. ' Task ' .. Task.Name .. ' Stage ' .. Task.Stage.Name .. ' done. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) - TaskComplete = true -- when a task is not yet completed, a mission cannot be completed - - else - -- break only if this task is not yet done, so that future task are not yet activated. - TaskComplete = false -- when a task is not yet completed, a mission cannot be completed - --env.info( 'Scheduler: Mission "'.. Mission.Name .. '" Task "' .. Task.Name .. '" Stage "' .. Task.Stage.Name .. '" break. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) - break - end - - if TaskComplete then - - if Mission.GoalFunction ~= nil then - Mission.GoalFunction( Mission, Client ) - end - if MISSIONSCHEDULER.Scoring then - MISSIONSCHEDULER.Scoring:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) - end - --- if not Mission:IsCompleted() then --- end - end - end - end - - local MissionComplete = true - for TaskNumber, Task in pairs( Mission._Tasks ) do - if Task:Goal() then --- Task:ShowGoalProgress( Mission, Client ) - if Task:IsGoalReached() then - else - MissionComplete = false - end - else - MissionComplete = false -- If there is no goal, the mission should never be ended. The goal status will be set somewhere else. - end - end - - if MissionComplete then - Mission:Completed() - if MISSIONSCHEDULER.Scoring then - MISSIONSCHEDULER.Scoring:_AddMissionScore( Mission.Name, 100 ) - end - else - if TaskComplete then - -- Reset for new tasking of active client - Client.ClientAlive = false -- Reset the client tasks. - end - end - - - else - if Client.ClientAlive then - env.info( 'Scheduler: Client "' .. Client.ClientName .. '" is inactive.' ) - Client.ClientAlive = false - - -- This is tricky. If we sanitize Client._Tasks before sanitizing Client._Tasks[TaskNumber].MissionTask, then the original MissionTask will be sanitized, and will be lost within the garbage collector. - -- So first sanitize Client._Tasks[TaskNumber].MissionTask, after that, sanitize only the whole _Tasks structure... - --Client._Tasks[TaskNumber].MissionTask = nil - --Client._Tasks = nil - end - end - end - - -- If all Clients of this Mission are not activated, then the Mission status needs to be put back into Pending status. - -- But only if the Mission was Ongoing. In case the Mission is Completed or Failed, the Mission status may not be changed. In these cases, this will be the last run of this Mission in the Scheduler. - if ClientsAlive == false then - if Mission:IsOngoing() then - -- Mission status back to pending... - Mission:Pending() - end - end - end - - Mission:StatusToClients() - - if Mission:ReportTrigger() then - Mission:ReportToAll() - end - end - - return true -end - ---- Start the MISSIONSCHEDULER. -function MISSIONSCHEDULER.Start() - if MISSIONSCHEDULER ~= nil then - --MISSIONSCHEDULER.SchedulerId = routines.scheduleFunction( MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) - MISSIONSCHEDULER.SchedulerId = SCHEDULER:New( nil, MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) - end -end - ---- Stop the MISSIONSCHEDULER. -function MISSIONSCHEDULER.Stop() - if MISSIONSCHEDULER.SchedulerId then - routines.removeFunction(MISSIONSCHEDULER.SchedulerId) - MISSIONSCHEDULER.SchedulerId = nil - end -end - ---- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. --- @param Mission is the MISSION object instantiated by @{MISSION:New}. --- @return MISSION --- @usage --- -- Declare a mission. --- Mission = MISSION:New( 'Russia Transport Troops SA-6', --- 'Operational', --- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', --- 'Russia' ) --- MISSIONSCHEDULER:AddMission( Mission ) -function MISSIONSCHEDULER.AddMission( Mission ) - MISSIONSCHEDULER.Missions[Mission.Name] = Mission - MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount + 1 - -- Add an overall AI Client for the AI tasks... This AI Client will facilitate the Events in the background for each Task. - --MissionAdd:AddClient( CLIENT:Register( 'AI' ) ) - - return Mission -end - ---- Remove a MISSION from the MISSIONSCHEDULER. --- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. --- @usage --- -- Declare a mission. --- Mission = MISSION:New( 'Russia Transport Troops SA-6', --- 'Operational', --- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', --- 'Russia' ) --- MISSIONSCHEDULER:AddMission( Mission ) --- --- -- Now remove the Mission. --- MISSIONSCHEDULER:RemoveMission( 'Russia Transport Troops SA-6' ) -function MISSIONSCHEDULER.RemoveMission( MissionName ) - MISSIONSCHEDULER.Missions[MissionName] = nil - MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount - 1 -end - ---- Find a MISSION within the MISSIONSCHEDULER. --- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. --- @return MISSION --- @usage --- -- Declare a mission. --- Mission = MISSION:New( 'Russia Transport Troops SA-6', --- 'Operational', --- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', --- 'Russia' ) --- MISSIONSCHEDULER:AddMission( Mission ) --- --- -- Now find the Mission. --- MissionFind = MISSIONSCHEDULER:FindMission( 'Russia Transport Troops SA-6' ) -function MISSIONSCHEDULER.FindMission( MissionName ) - return MISSIONSCHEDULER.Missions[MissionName] -end - --- Internal function used by the MISSIONSCHEDULER menu. -function MISSIONSCHEDULER.ReportMissionsShow( ) - for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do - Mission.MissionReportShow = true - Mission.MissionReportFlash = false - end -end - --- Internal function used by the MISSIONSCHEDULER menu. -function MISSIONSCHEDULER.ReportMissionsFlash( TimeInterval ) - local Count = 0 - for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do - Mission.MissionReportShow = false - Mission.MissionReportFlash = true - Mission.MissionReportTrigger = timer.getTime() + Count * TimeInterval - Mission.MissionTimeInterval = MISSIONSCHEDULER.MissionCount * TimeInterval - env.info( "TimeInterval = " .. Mission.MissionTimeInterval ) - Count = Count + 1 - end -end - --- Internal function used by the MISSIONSCHEDULER menu. -function MISSIONSCHEDULER.ReportMissionsHide( Prm ) - for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do - Mission.MissionReportShow = false - Mission.MissionReportFlash = false - end -end - ---- Enables a MENU option in the communications menu under F10 to control the status of the active missions. --- This function should be called only once when starting the MISSIONSCHEDULER. -function MISSIONSCHEDULER.ReportMenu() - local ReportMenu = SUBMENU:New( 'Status' ) - local ReportMenuShow = COMMANDMENU:New( 'Show Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsShow, 0 ) - local ReportMenuFlash = COMMANDMENU:New('Flash Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsFlash, 120 ) - local ReportMenuHide = COMMANDMENU:New( 'Hide Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsHide, 0 ) -end - ---- Show the remaining mission time. -function MISSIONSCHEDULER:TimeShow() - self.TimeIntervalCount = self.TimeIntervalCount + 1 - if self.TimeIntervalCount >= self.TimeTriggerShow then - local TimeMsg = string.format("%00d", ( self.TimeSeconds / 60 ) - ( timer.getTime() / 60 )) .. ' minutes left until mission reload.' - MESSAGE:New( TimeMsg, "Mission time", self.TimeShow, '/TimeMsg' ):ToAll() - self.TimeIntervalCount = 0 - end -end - -function MISSIONSCHEDULER:Time( TimeSeconds, TimeIntervalShow, TimeShow ) - - self.TimeIntervalCount = 0 - self.TimeSeconds = TimeSeconds - self.TimeIntervalShow = TimeIntervalShow - self.TimeShow = TimeShow -end - ---- Adds a mission scoring to the game. -function MISSIONSCHEDULER:Scoring( Scoring ) - - self.Scoring = Scoring -end - ---- The CLEANUP class keeps an area clean of crashing or colliding airplanes. It also prevents airplanes from firing within this area. --- @module CleanUp --- @author Flightcontrol - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Mission" ) -Include.File( "Client" ) -Include.File( "Task" ) - ---- The CLEANUP class. --- @type CLEANUP --- @extends Base#BASE -CLEANUP = { - ClassName = "CLEANUP", - ZoneNames = {}, - TimeInterval = 300, - CleanUpList = {}, -} - ---- Creates the main object which is handling the cleaning of the debris within the given Zone Names. --- @param #CLEANUP self --- @param #table ZoneNames Is a table of zone names where the debris should be cleaned. Also a single string can be passed with one zone name. --- @param #number TimeInterval The interval in seconds when the clean activity takes place. The default is 300 seconds, thus every 5 minutes. --- @return #CLEANUP --- @usage --- -- Clean these Zones. --- CleanUpAirports = CLEANUP:New( { 'CLEAN Tbilisi', 'CLEAN Kutaisi' }, 150 ) --- or --- CleanUpTbilisi = CLEANUP:New( 'CLEAN Tbilisi', 150 ) --- CleanUpKutaisi = CLEANUP:New( 'CLEAN Kutaisi', 600 ) -function CLEANUP:New( ZoneNames, TimeInterval ) local self = BASE:Inherit( self, BASE:New() ) - self:F( { ZoneNames, TimeInterval } ) - - if type( ZoneNames ) == 'table' then - self.ZoneNames = ZoneNames - else - self.ZoneNames = { ZoneNames } - end - if TimeInterval then - self.TimeInterval = TimeInterval - end - - _EVENTDISPATCHER:OnBirth( self._OnEventBirth, self ) - - --self.CleanUpScheduler = routines.scheduleFunction( self._CleanUpScheduler, { self }, timer.getTime() + 1, TimeInterval ) - self.CleanUpScheduler = SCHEDULER:New( self, self._CleanUpScheduler, {}, 1, TimeInterval ) - - return self -end - - ---- Destroys a group from the simulator, but checks first if it is still existing! --- @param #CLEANUP self --- @param DCSGroup#Group GroupObject The object to be destroyed. --- @param #string CleanUpGroupName The groupname... -function CLEANUP:_DestroyGroup( GroupObject, CleanUpGroupName ) - self:F( { GroupObject, CleanUpGroupName } ) - - if GroupObject then -- and GroupObject:isExist() then - --MESSAGE:New( "Destroy Group " .. CleanUpGroupName, CleanUpGroupName, 1, CleanUpGroupName ):ToAll() - trigger.action.deactivateGroup(GroupObject) - self:T( { "GroupObject Destroyed", GroupObject } ) - end -end - ---- Destroys a @{DCSUnit#Unit} from the simulator, but checks first if it is still existing! --- @param #CLEANUP self --- @param DCSUnit#Unit CleanUpUnit The object to be destroyed. --- @param #string CleanUpUnitName The Unit name ... -function CLEANUP:_DestroyUnit( CleanUpUnit, CleanUpUnitName ) - self:F( { CleanUpUnit, CleanUpUnitName } ) - - if CleanUpUnit then - --MESSAGE:New( "Destroy " .. CleanUpUnitName, CleanUpUnitName, 1, CleanUpUnitName ):ToAll() - local CleanUpGroup = Unit.getGroup(CleanUpUnit) - -- TODO Client bug in 1.5.3 - if CleanUpGroup and CleanUpGroup:isExist() then - local CleanUpGroupUnits = CleanUpGroup:getUnits() - if #CleanUpGroupUnits == 1 then - local CleanUpGroupName = CleanUpGroup:getName() - --self:CreateEventCrash( timer.getTime(), CleanUpUnit ) - CleanUpGroup:destroy() - self:T( { "Destroyed Group:", CleanUpGroupName } ) - else - CleanUpUnit:destroy() - self:T( { "Destroyed Unit:", CleanUpUnitName } ) - end - self.CleanUpList[CleanUpUnitName] = nil -- Cleaning from the list - CleanUpUnit = nil - end - end -end - --- TODO check DCSTypes#Weapon ---- Destroys a missile from the simulator, but checks first if it is still existing! --- @param #CLEANUP self --- @param DCSTypes#Weapon MissileObject -function CLEANUP:_DestroyMissile( MissileObject ) - self:F( { MissileObject } ) - - if MissileObject and MissileObject:isExist() then - MissileObject:destroy() - self:T( "MissileObject Destroyed") - end -end - -function CLEANUP:_OnEventBirth( Event ) - self:F( { Event } ) - - self.CleanUpList[Event.IniDCSUnitName] = {} - self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit - self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup - self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName - self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName - - _EVENTDISPATCHER:OnEngineShutDownForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) - _EVENTDISPATCHER:OnEngineStartUpForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) - _EVENTDISPATCHER:OnHitForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) - _EVENTDISPATCHER:OnPilotDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) - _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) - _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self._EventCrash, self ) - _EVENTDISPATCHER:OnShotForUnit( Event.IniDCSUnitName, self._EventShot, self ) - - --self:AddEvent( world.event.S_EVENT_ENGINE_SHUTDOWN, self._EventAddForCleanUp ) - --self:AddEvent( world.event.S_EVENT_ENGINE_STARTUP, self._EventAddForCleanUp ) --- self:AddEvent( world.event.S_EVENT_HIT, self._EventAddForCleanUp ) -- , self._EventHitCleanUp ) --- self:AddEvent( world.event.S_EVENT_CRASH, self._EventCrash ) -- , self._EventHitCleanUp ) --- --self:AddEvent( world.event.S_EVENT_DEAD, self._EventCrash ) --- self:AddEvent( world.event.S_EVENT_SHOT, self._EventShot ) --- --- self:EnableEvents() - - -end - ---- Detects if a crash event occurs. --- Crashed units go into a CleanUpList for removal. --- @param #CLEANUP self --- @param DCSTypes#Event event -function CLEANUP:_EventCrash( Event ) - self:F( { Event } ) - - --TODO: This stuff is not working due to a DCS bug. Burning units cannot be destroyed. - --MESSAGE:New( "Crash ", "Crash", 10, "Crash" ):ToAll() - -- self:T("before getGroup") - -- local _grp = Unit.getGroup(event.initiator)-- Identify the group that fired - -- self:T("after getGroup") - -- _grp:destroy() - -- self:T("after deactivateGroup") - -- event.initiator:destroy() - - self.CleanUpList[Event.IniDCSUnitName] = {} - self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit - self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup - self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName - self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName - -end - ---- Detects if a unit shoots a missile. --- If this occurs within one of the zones, then the weapon used must be destroyed. --- @param #CLEANUP self --- @param DCSTypes#Event event -function CLEANUP:_EventShot( Event ) - self:F( { Event } ) - - -- Test if the missile was fired within one of the CLEANUP.ZoneNames. - local CurrentLandingZoneID = 0 - CurrentLandingZoneID = routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) - if ( CurrentLandingZoneID ) then - -- Okay, the missile was fired within the CLEANUP.ZoneNames, destroy the fired weapon. - --_SEADmissile:destroy() - --routines.scheduleFunction( CLEANUP._DestroyMissile, { self, Event.Weapon }, timer.getTime() + 0.1) - SCHEDULER:New( self, CLEANUP._DestroyMissile, { Event.Weapon }, 0.1 ) - end -end - - ---- Detects if the Unit has an S_EVENT_HIT within the given ZoneNames. If this is the case, destroy the unit. --- @param #CLEANUP self --- @param DCSTypes#Event event -function CLEANUP:_EventHitCleanUp( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then - self:T( { "Life: ", Event.IniDCSUnitName, ' = ', Event.IniDCSUnit:getLife(), "/", Event.IniDCSUnit:getLife0() } ) - if Event.IniDCSUnit:getLife() < Event.IniDCSUnit:getLife0() then - self:T( "CleanUp: Destroy: " .. Event.IniDCSUnitName ) - --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.IniDCSUnit }, timer.getTime() + 0.1) - SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.IniDCSUnit }, 0.1 ) - end - end - end - - if Event.TgtDCSUnit then - if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then - self:T( { "Life: ", Event.TgtDCSUnitName, ' = ', Event.TgtDCSUnit:getLife(), "/", Event.TgtDCSUnit:getLife0() } ) - if Event.TgtDCSUnit:getLife() < Event.TgtDCSUnit:getLife0() then - self:T( "CleanUp: Destroy: " .. Event.TgtDCSUnitName ) - --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.TgtDCSUnit }, timer.getTime() + 0.1 ) - SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.TgtDCSUnit }, 0.1 ) - end - end - end -end - ---- Add the @{DCSUnit#Unit} to the CleanUpList for CleanUp. -function CLEANUP:_AddForCleanUp( CleanUpUnit, CleanUpUnitName ) - self:F( { CleanUpUnit, CleanUpUnitName } ) - - self.CleanUpList[CleanUpUnitName] = {} - self.CleanUpList[CleanUpUnitName].CleanUpUnit = CleanUpUnit - self.CleanUpList[CleanUpUnitName].CleanUpUnitName = CleanUpUnitName - self.CleanUpList[CleanUpUnitName].CleanUpGroup = Unit.getGroup(CleanUpUnit) - self.CleanUpList[CleanUpUnitName].CleanUpGroupName = Unit.getGroup(CleanUpUnit):getName() - self.CleanUpList[CleanUpUnitName].CleanUpTime = timer.getTime() - self.CleanUpList[CleanUpUnitName].CleanUpMoved = false - - self:T( { "CleanUp: Add to CleanUpList: ", Unit.getGroup(CleanUpUnit):getName(), CleanUpUnitName } ) - -end - ---- Detects if the Unit has an S_EVENT_ENGINE_SHUTDOWN or an S_EVENT_HIT within the given ZoneNames. If this is the case, add the Group to the CLEANUP List. --- @param #CLEANUP self --- @param DCSTypes#Event event -function CLEANUP:_EventAddForCleanUp( Event ) - - if Event.IniDCSUnit then - if self.CleanUpList[Event.IniDCSUnitName] == nil then - if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then - self:_AddForCleanUp( Event.IniDCSUnit, Event.IniDCSUnitName ) - end - end - end - - if Event.TgtDCSUnit then - if self.CleanUpList[Event.TgtDCSUnitName] == nil then - if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then - self:_AddForCleanUp( Event.TgtDCSUnit, Event.TgtDCSUnitName ) - end - end - end - -end - -local CleanUpSurfaceTypeText = { - "LAND", - "SHALLOW_WATER", - "WATER", - "ROAD", - "RUNWAY" - } - ---- At the defined time interval, CleanUp the Groups within the CleanUpList. --- @param #CLEANUP self -function CLEANUP:_CleanUpScheduler() - self:F( { "CleanUp Scheduler" } ) - - local CleanUpCount = 0 - for CleanUpUnitName, UnitData in pairs( self.CleanUpList ) do - CleanUpCount = CleanUpCount + 1 - - self:T( { CleanUpUnitName, UnitData } ) - local CleanUpUnit = Unit.getByName(UnitData.CleanUpUnitName) - local CleanUpGroupName = UnitData.CleanUpGroupName - local CleanUpUnitName = UnitData.CleanUpUnitName - if CleanUpUnit then - self:T( { "CleanUp Scheduler", "Checking:", CleanUpUnitName } ) - if _DATABASE:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then - local CleanUpUnitVec3 = CleanUpUnit:getPoint() - --self:T( CleanUpUnitVec3 ) - local CleanUpUnitVec2 = {} - CleanUpUnitVec2.x = CleanUpUnitVec3.x - CleanUpUnitVec2.y = CleanUpUnitVec3.z - --self:T( CleanUpUnitVec2 ) - local CleanUpSurfaceType = land.getSurfaceType(CleanUpUnitVec2) - --self:T( CleanUpSurfaceType ) - --MESSAGE:New( "Surface " .. CleanUpUnitName .. " = " .. CleanUpSurfaceTypeText[CleanUpSurfaceType], CleanUpUnitName, 10, CleanUpUnitName ):ToAll() - - if CleanUpUnit and CleanUpUnit:getLife() <= CleanUpUnit:getLife0() * 0.95 then - if CleanUpSurfaceType == land.SurfaceType.RUNWAY then - if CleanUpUnit:inAir() then - local CleanUpLandHeight = land.getHeight(CleanUpUnitVec2) - local CleanUpUnitHeight = CleanUpUnitVec3.y - CleanUpLandHeight - self:T( { "CleanUp Scheduler", "Height = " .. CleanUpUnitHeight } ) - if CleanUpUnitHeight < 30 then - self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because below safe height and damaged." } ) - self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) - end - else - self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because on runway and damaged." } ) - self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) - end - end - end - -- Clean Units which are waiting for a very long time in the CleanUpZone. - if CleanUpUnit then - local CleanUpUnitVelocity = CleanUpUnit:getVelocity() - local CleanUpUnitVelocityTotal = math.abs(CleanUpUnitVelocity.x) + math.abs(CleanUpUnitVelocity.y) + math.abs(CleanUpUnitVelocity.z) - if CleanUpUnitVelocityTotal < 1 then - if UnitData.CleanUpMoved then - if UnitData.CleanUpTime + 180 <= timer.getTime() then - self:T( { "CleanUp Scheduler", "Destroy due to not moving anymore " .. CleanUpUnitName } ) - self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) - end - end - else - UnitData.CleanUpTime = timer.getTime() - UnitData.CleanUpMoved = true - --MESSAGE:New( "Moved " .. CleanUpUnitName, CleanUpUnitName, 10, CleanUpUnitName ):ToAll() - end - end - - else - -- Do nothing ... - self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE - end - else - self:T( "CleanUp: Group " .. CleanUpUnitName .. " cannot be found in DCS RTE, removing ..." ) - self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE - end - end - self:T(CleanUpCount) - - return true -end - ---- Dynamic spawning of groups (and units). --- --- @{#SPAWN} class --- =============== --- The @{#SPAWN} class allows to spawn dynamically new groups, based on pre-defined initialization settings, modifying the behaviour when groups are spawned. --- For each group to be spawned, within the mission editor, a group has to be created with the "late activation flag" set. We call this group the *"Spawn Template"* of the SPAWN object. --- A reference to this Spawn Template needs to be provided when constructing the SPAWN object, by indicating the name of the group within the mission editor in the constructor methods. --- --- Within the SPAWN object, there is an internal index that keeps track of which group from the internal group list was spawned. --- When new groups get spawned by using the SPAWN functions (see below), it will be validated whether the Limits (@{#SPAWN.Limit}) of the SPAWN object are not reached. --- When all is valid, a new group will be created by the spawning methods, and the internal index will be increased with 1. --- --- Regarding the name of new spawned groups, a _SpawnPrefix_ will be assigned for each new group created. --- If you want to have the Spawn Template name to be used as the _SpawnPrefix_ name, use the @{#SPAWN.New} constructor. --- However, when the @{#SPAWN.NewWithAlias} constructor was used, the Alias name will define the _SpawnPrefix_ name. --- Groups will follow the following naming structure when spawned at run-time: --- --- 1. Spawned groups will have the name _SpawnPrefix_#ggg, where ggg is a counter from 0 to 999. --- 2. Spawned units will have the name _SpawnPrefix_#ggg-uu, where uu is a counter from 0 to 99 for each new spawned unit belonging to the group. --- --- Some additional notes that need to be remembered: --- --- * Templates are actually groups defined within the mission editor, with the flag "Late Activation" set. As such, these groups are never used within the mission, but are used by the @{#SPAWN} module. --- * It is important to defined BEFORE you spawn new groups, a proper initialization of the SPAWN instance is done with the options you want to use. --- * When designing a mission, NEVER name groups using a "#" within the name of the group Spawn Template(s), or the SPAWN module logic won't work anymore. --- --- SPAWN construction methods: --- =========================== --- Create a new SPAWN object with the @{#SPAWN.New} or the @{#SPAWN.NewWithAlias} methods: --- --- * @{#SPAWN.New}: Creates a new SPAWN object taking the name of the group that functions as the Template. --- --- It is important to understand how the SPAWN class works internally. The SPAWN object created will contain internally a list of groups that will be spawned and that are already spawned. --- The initialization functions will modify this list of groups so that when a group gets spawned, ALL information is already prepared when spawning. This is done for performance reasons. --- So in principle, the group list will contain all parameters and configurations after initialization, and when groups get actually spawned, this spawning can be done quickly and efficient. --- --- SPAWN initialization methods: --- ============================= --- A spawn object will behave differently based on the usage of initialization methods: --- --- * @{#SPAWN.Limit}: Limits the amount of groups that can be alive at the same time and that can be dynamically spawned. --- * @{#SPAWN.RandomizeRoute}: Randomize the routes of spawned groups. --- * @{#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.InitRepeat}: Re-spawn groups when they land at the home base. Similar functions are @{#SPAWN.InitRepeatOnLanding} and @{#SPAWN.InitRepeatOnEngineShutDown}. --- --- SPAWN spawning methods: --- ======================= --- Groups can be spawned at different times and methods: --- --- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index. --- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index. --- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively. --- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}. --- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}. --- --- Note that @{#SPAWN.Spawn} and @{#SPAWN.ReSpawn} return a @{GROUP#GROUP.New} object, that contains a reference to the DCSGroup object. --- You can use the @{GROUP} object to do further actions with the DCSGroup. --- --- SPAWN object cleaning: --- ========================= --- Sometimes, it will occur during a mission run-time, that ground or especially air objects get damaged, and will while being damged stop their activities, while remaining alive. --- In such cases, the SPAWN object will just sit there and wait until that group gets destroyed, but most of the time it won't, --- and it may occur that no new groups are or can be spawned as limits are reached. --- To prevent this, a @{#SPAWN.CleanUp} initialization method has been defined that will silently monitor the status of each spawned group. --- Once a group has a velocity = 0, and has been waiting for a defined interval, that group will be cleaned or removed from run-time. --- There is a catch however :-) If a damaged group has returned to an airbase within the coalition, that group will not be considered as "lost"... --- In such a case, when the inactive group is cleaned, a new group will Re-spawned automatically. --- This models AI that has succesfully returned to their airbase, to restart their combat activities. --- Check the @{#SPAWN.CleanUp} for further info. --- --- ==== --- @module Spawn --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Database" ) -Include.File( "Group" ) -Include.File( "Zone" ) -Include.File( "Event" ) -Include.File( "Scheduler" ) - ---- SPAWN Class --- @type SPAWN --- @extends Base#BASE --- @field ClassName --- @field #string SpawnTemplatePrefix --- @field #string SpawnAliasPrefix -SPAWN = { - ClassName = "SPAWN", - SpawnTemplatePrefix = nil, - SpawnAliasPrefix = nil, -} - - - ---- Creates the main object to spawn a GROUP defined in the DCS ME. --- @param #SPAWN self --- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. Each new group will have the name starting with SpawnTemplatePrefix. --- @return #SPAWN --- @usage --- -- NATO helicopters engaging in the battle field. --- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ) --- @usage local Plane = SPAWN:New( "Plane" ) -- Creates a new local variable that can initiate new planes with the name "Plane#ddd" using the template "Plane" as defined within the ME. -function SPAWN:New( SpawnTemplatePrefix ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { SpawnTemplatePrefix } ) - - local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) - if TemplateGroup then - self.SpawnTemplatePrefix = SpawnTemplatePrefix - self.SpawnIndex = 0 - self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. - self.AliveUnits = 0 -- Contains the counter how many units are currently alive - self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. - self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! - self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. - self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. - self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. - self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. - self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. - self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. - - self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. - else - error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) - end - - return self -end - ---- Creates a new SPAWN instance to create new groups based on the defined template and using a new alias for each new group. --- @param #SPAWN self --- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. --- @param #string SpawnAliasPrefix is the name that will be given to the Group at runtime. --- @return #SPAWN --- @usage --- -- NATO helicopters engaging in the battle field. --- Spawn_BE_KA50 = SPAWN:NewWithAlias( 'BE KA-50@RAMP-Ground Defense', 'Helicopter Attacking a City' ) --- @usage local PlaneWithAlias = SPAWN:NewWithAlias( "Plane", "Bomber" ) -- Creates a new local variable that can instantiate new planes with the name "Bomber#ddd" using the template "Plane" as defined within the ME. -function SPAWN:NewWithAlias( SpawnTemplatePrefix, SpawnAliasPrefix ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { SpawnTemplatePrefix, SpawnAliasPrefix } ) - - local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) - if TemplateGroup then - self.SpawnTemplatePrefix = SpawnTemplatePrefix - self.SpawnAliasPrefix = SpawnAliasPrefix - self.SpawnIndex = 0 - self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. - self.AliveUnits = 0 -- Contains the counter how many units are currently alive - self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. - self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! - self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. - self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. - self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. - self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. - self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. - self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. - - self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. - else - error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) - end - - return self -end - - ---- Limits the Maximum amount of Units that can be alive at the same time, and the maximum amount of groups that can be spawned. --- Note that this method is exceptionally important to balance the performance of the mission. Depending on the machine etc, a mission can only process a maximum amount of units. --- If the time interval must be short, but there should not be more Units or Groups alive than a maximum amount of units, then this function should be used... --- When a @{#SPAWN.New} is executed and the limit of the amount of units alive is reached, then no new spawn will happen of the group, until some of these units of the spawn object will be destroyed. --- @param #SPAWN self --- @param #number SpawnMaxUnitsAlive The maximum amount of units that can be alive at runtime. --- @param #number SpawnMaxGroups The maximum amount of groups that can be spawned. When the limit is reached, then no more actual spawns will happen of the group. --- This parameter is useful to define a maximum amount of airplanes, ground troops, helicopters, ships etc within a supply area. --- This parameter accepts the value 0, which defines that there are no maximum group limits, but there are limits on the maximum of units that can be alive at the same time. --- @return #SPAWN self --- @usage --- -- NATO helicopters engaging in the battle field. --- -- This helicopter group consists of one Unit. So, this group will SPAWN maximum 2 groups simultaneously within the DCSRTE. --- -- There will be maximum 24 groups spawned during the whole mission lifetime. --- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Limit( 2, 24 ) -function SPAWN:Limit( SpawnMaxUnitsAlive, SpawnMaxGroups ) - self:F( { self.SpawnTemplatePrefix, SpawnMaxUnitsAlive, SpawnMaxGroups } ) - - self.SpawnMaxUnitsAlive = SpawnMaxUnitsAlive -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. - self.SpawnMaxGroups = SpawnMaxGroups -- The maximum amount of groups that can be spawned. - - for SpawnGroupID = 1, self.SpawnMaxGroups do - self:_InitializeSpawnGroups( SpawnGroupID ) - end - - return self -end - - ---- Randomizes the defined route of the SpawnTemplatePrefix group in the ME. This is very useful to define extra variation of the behaviour of groups. --- @param #SPAWN self --- @param #number SpawnStartPoint is the waypoint where the randomization begins. --- Note that the StartPoint = 0 equaling the point where the group is spawned. --- @param #number SpawnEndPoint is the waypoint where the randomization ends counting backwards. --- This parameter is useful to avoid randomization to end at a waypoint earlier than the last waypoint on the route. --- @param #number SpawnRadius is the radius in meters in which the randomization of the new waypoints, with the original waypoint of the original template located in the middle ... --- @return #SPAWN --- @usage --- -- NATO helicopters engaging in the battle field. --- -- The KA-50 has waypoints Start point ( =0 or SP ), 1, 2, 3, 4, End point (= 5 or DP). --- -- Waypoints 2 and 3 will only be randomized. The others will remain on their original position with each new spawn of the helicopter. --- -- The randomization of waypoint 2 and 3 will take place within a radius of 2000 meters. --- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):RandomizeRoute( 2, 2, 2000 ) -function SPAWN:RandomizeRoute( SpawnStartPoint, SpawnEndPoint, SpawnRadius ) - self:F( { self.SpawnTemplatePrefix, SpawnStartPoint, SpawnEndPoint, SpawnRadius } ) - - self.SpawnRandomizeRoute = true - self.SpawnRandomizeRouteStartPoint = SpawnStartPoint - self.SpawnRandomizeRouteEndPoint = SpawnEndPoint - self.SpawnRandomizeRouteRadius = SpawnRadius - - for GroupID = 1, self.SpawnMaxGroups do - self:_RandomizeRoute( GroupID ) - end - - return self -end - - ---- This function is rather complicated to understand. But I'll try to explain. --- This function becomes useful when you need to spawn groups with random templates of groups defined within the mission editor, --- but they will all follow the same Template route and have the same prefix name. --- In other words, this method randomizes between a defined set of groups the template to be used for each new spawn of a group. --- @param #SPAWN self --- @param #string SpawnTemplatePrefixTable A table with the names of the groups defined within the mission editor, from which one will be choosen when a new group will be spawned. --- @return #SPAWN --- @usage --- -- NATO Tank Platoons invading Gori. --- -- Choose between 13 different 'US Tank Platoon' configurations for each new SPAWN the Group to be spawned for the --- -- 'US Tank Platoon Left', 'US Tank Platoon Middle' and 'US Tank Platoon Right' SpawnTemplatePrefixes. --- -- Each new SPAWN will randomize the route, with a defined time interval of 200 seconds with 40% time variation (randomization) and --- -- with a limit set of maximum 12 Units alive simulteneously and 150 Groups to be spawned during the whole mission. --- Spawn_US_Platoon = { 'US Tank Platoon 1', 'US Tank Platoon 2', 'US Tank Platoon 3', 'US Tank Platoon 4', 'US Tank Platoon 5', --- 'US Tank Platoon 6', 'US Tank Platoon 7', 'US Tank Platoon 8', 'US Tank Platoon 9', 'US Tank Platoon 10', --- 'US Tank Platoon 11', 'US Tank Platoon 12', 'US Tank Platoon 13' } --- Spawn_US_Platoon_Left = SPAWN:New( 'US Tank Platoon Left' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) --- Spawn_US_Platoon_Middle = SPAWN:New( 'US Tank Platoon Middle' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) --- Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) -function SPAWN:RandomizeTemplate( SpawnTemplatePrefixTable ) - self:F( { self.SpawnTemplatePrefix, SpawnTemplatePrefixTable } ) - - self.SpawnTemplatePrefixTable = SpawnTemplatePrefixTable - self.SpawnRandomizeTemplate = true - - for SpawnGroupID = 1, self.SpawnMaxGroups do - self:_RandomizeTemplate( SpawnGroupID ) - end - - return self -end - - - - - ---- 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 ... --- @param #SPAWN self --- @return #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() -function SPAWN:InitRepeat() - self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) - - self.Repeat = true - self.RepeatOnEngineShutDown = false - self.RepeatOnLanding = true - - return self -end - ---- Respawn group after landing. --- @param #SPAWN self --- @return #SPAWN self -function SPAWN:InitRepeatOnLanding() - self:F( { self.SpawnTemplatePrefix } ) - - self:InitRepeat() - self.RepeatOnEngineShutDown = false - self.RepeatOnLanding = true - - return self -end - - ---- Respawn after landing when its engines have shut down. --- @param #SPAWN self --- @return #SPAWN self -function SPAWN:InitRepeatOnEngineShutDown() - self:F( { self.SpawnTemplatePrefix } ) - - self:InitRepeat() - self.RepeatOnEngineShutDown = true - self.RepeatOnLanding = false - - return self -end - - ---- CleanUp groups when they are still alive, but inactive. --- When groups are still alive and have become inactive due to damage and are unable to contribute anything, then this group will be removed at defined intervals in seconds. --- @param #SPAWN self --- @param #string SpawnCleanUpInterval The interval to check for inactive groups within seconds. --- @return #SPAWN self --- @usage Spawn_Helicopter:CleanUp( 20 ) -- CleanUp the spawning of the helicopters every 20 seconds when they become inactive. -function SPAWN:CleanUp( SpawnCleanUpInterval ) - self:F( { self.SpawnTemplatePrefix, SpawnCleanUpInterval } ) - - self.SpawnCleanUpInterval = SpawnCleanUpInterval - self.SpawnCleanUpTimeStamps = {} - --self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval ) - self.CleanUpScheduler = SCHEDULER:New( self, self._SpawnCleanUpScheduler, {}, 1, SpawnCleanUpInterval, 0.2 ) - return self -end - - - ---- Makes the groups visible before start (like a batallion). --- The method will take the position of the group as the first position in the array. --- @param #SPAWN self --- @param #number SpawnAngle The angle in degrees how the groups and each unit of the group will be positioned. --- @param #number SpawnWidth The amount of Groups that will be positioned on the X axis. --- @param #number SpawnDeltaX The space between each Group on the X-axis. --- @param #number SpawnDeltaY The space between each Group on the Y-axis. --- @return #SPAWN self --- @usage --- -- Define an array of Groups. --- Spawn_BE_Ground = SPAWN:New( 'BE Ground' ):Limit( 2, 24 ):Visible( 90, "Diamond", 10, 100, 50 ) -function SPAWN:Array( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) - self:F( { self.SpawnTemplatePrefix, SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY } ) - - self.SpawnVisible = true -- When the first Spawn executes, all the Groups need to be made visible before start. - - local SpawnX = 0 - local SpawnY = 0 - local SpawnXIndex = 0 - local SpawnYIndex = 0 - - for SpawnGroupID = 1, self.SpawnMaxGroups do - self:T( { SpawnX, SpawnY, SpawnXIndex, SpawnYIndex } ) - - self.SpawnGroups[SpawnGroupID].Visible = true - self.SpawnGroups[SpawnGroupID].Spawned = false - - SpawnXIndex = SpawnXIndex + 1 - if SpawnWidth and SpawnWidth ~= 0 then - if SpawnXIndex >= SpawnWidth then - SpawnXIndex = 0 - SpawnYIndex = SpawnYIndex + 1 - end - end - - local SpawnRootX = self.SpawnGroups[SpawnGroupID].SpawnTemplate.x - local SpawnRootY = self.SpawnGroups[SpawnGroupID].SpawnTemplate.y - - self:_TranslateRotate( SpawnGroupID, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) - - self.SpawnGroups[SpawnGroupID].SpawnTemplate.lateActivation = true - self.SpawnGroups[SpawnGroupID].SpawnTemplate.visible = true - - self.SpawnGroups[SpawnGroupID].Visible = true - - _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnBirth, self ) - _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) - _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) - - if self.Repeat then - _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnTakeOff, self ) - _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnLand, self ) - end - if self.RepeatOnEngineShutDown then - _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnEngineShutDown, self ) - end - - self.SpawnGroups[SpawnGroupID].Group = _DATABASE:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) - - SpawnX = SpawnXIndex * SpawnDeltaX - SpawnY = SpawnYIndex * SpawnDeltaY - end - - return self -end - - - ---- Will spawn a group based on the internal index. --- Note: Uses @{DATABASE} module defined in MOOSE. --- @param #SPAWN self --- @return Group#GROUP The group that was spawned. You can use this group for further actions. -function SPAWN:Spawn() - self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) - - return self:SpawnWithIndex( self.SpawnIndex + 1 ) -end - ---- Will re-spawn a group based on a given index. --- Note: Uses @{DATABASE} module defined in MOOSE. --- @param #SPAWN self --- @param #string SpawnIndex The index of the group to be spawned. --- @return Group#GROUP The group that was spawned. You can use this group for further actions. -function SPAWN:ReSpawn( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) - - if not SpawnIndex then - SpawnIndex = 1 - end - --- TODO: This logic makes DCS crash and i don't know why (yet). - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - if SpawnGroup then - local SpawnDCSGroup = SpawnGroup:GetDCSGroup() - if SpawnDCSGroup then - SpawnGroup:Destroy() - end - end - - return self:SpawnWithIndex( SpawnIndex ) -end - ---- Will spawn a group with a specified index number. --- Uses @{DATABASE} global object defined in MOOSE. --- @param #SPAWN self --- @return Group#GROUP The group that was spawned. You can use this group for further actions. -function SPAWN:SpawnWithIndex( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups } ) - - if self:_GetSpawnIndex( SpawnIndex ) then - - if self.SpawnGroups[self.SpawnIndex].Visible then - self.SpawnGroups[self.SpawnIndex].Group:Activate() - else - self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) - _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnBirth, self ) - _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) - _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) - - if self.Repeat then - _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnTakeOff, self ) - _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnLand, self ) - end - if self.RepeatOnEngineShutDown then - _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) - end - - self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) - - self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) - - -- If there is a SpawnFunction hook defined, call it. - if self.SpawnFunctionHook then - self.SpawnFunctionHook( self.SpawnGroups[self.SpawnIndex].Group, unpack( self.SpawnFunctionArguments ) ) - end - -- TODO: Need to fix this by putting an "R" in the name of the group when the group repeats. - --if self.Repeat then - -- _DATABASE:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) - --end - end - - self.SpawnGroups[self.SpawnIndex].Spawned = true - return self.SpawnGroups[self.SpawnIndex].Group - else - --self:E( { self.SpawnTemplatePrefix, "No more Groups to Spawn:", SpawnIndex, self.SpawnMaxGroups } ) - end - - return nil -end - ---- Spawns new groups at varying time intervals. --- This is useful if you want to have continuity within your missions of certain (AI) groups to be present (alive) within your missions. --- @param #SPAWN self --- @param #number SpawnTime The time interval defined in seconds between each new spawn of new groups. --- @param #number SpawnTimeVariation The variation to be applied on the defined time interval between each new spawn. --- The variation is a number between 0 and 1, representing the %-tage of variation to be applied on the time interval. --- @return #SPAWN self --- @usage --- -- NATO helicopters engaging in the battle field. --- -- The time interval is set to SPAWN new helicopters between each 600 seconds, with a time variation of 50%. --- -- The time variation in this case will be between 450 seconds and 750 seconds. --- -- This is calculated as follows: --- -- Low limit: 600 * ( 1 - 0.5 / 2 ) = 450 --- -- High limit: 600 * ( 1 + 0.5 / 2 ) = 750 --- -- Between these two values, a random amount of seconds will be choosen for each new spawn of the helicopters. --- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) -function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation ) - self:F( { SpawnTime, SpawnTimeVariation } ) - - if SpawnTime ~= nil and SpawnTimeVariation ~= nil then - self.SpawnScheduler = SCHEDULER:New( self, self._Scheduler, {}, 1, SpawnTime, SpawnTimeVariation ) - end - - return self -end - ---- Will re-start the spawning scheduler. --- Note: This function is only required to be called when the schedule was stopped. -function SPAWN:SpawnScheduleStart() - self:F( { self.SpawnTemplatePrefix } ) - - self.SpawnScheduler:Start() -end - ---- Will stop the scheduled spawning scheduler. -function SPAWN:SpawnScheduleStop() - self:F( { self.SpawnTemplatePrefix } ) - - self.SpawnScheduler:Stop() -end - - ---- Allows to place a CallFunction hook when a new group spawns. --- The provided function will be called when a new group is spawned, including its given parameters. --- The first parameter of the SpawnFunction is the @{Group#GROUP} that was spawned. --- @param #SPAWN self --- @param #function SpawnFunctionHook The function to be called when a group spawns. --- @param SpawnFunctionArguments A random amount of arguments to be provided to the function when the group spawns. --- @return #SPAWN -function SPAWN:SpawnFunction( SpawnFunctionHook, ... ) - self:F( SpawnFunction ) - - self.SpawnFunctionHook = SpawnFunctionHook - self.SpawnFunctionArguments = {} - if arg then - self.SpawnFunctionArguments = arg - end - - return self -end - - - - ---- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone. --- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. --- You can use the returned group to further define the route to be followed. --- @param #SPAWN self --- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group. --- @param #number OuterRadius The outer radius in meters where the new group will be spawned. --- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned. --- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. --- @return Group#GROUP that was spawned. --- @return #nil Nothing was spawned. -function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } ) - - if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then - - if SpawnIndex then - else - SpawnIndex = self.SpawnIndex + 1 - end - - if self:_GetSpawnIndex( SpawnIndex ) then - - local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate - - if SpawnTemplate then - - local UnitPoint = HostUnit:GetPointVec2() - - self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } ) - - --for PointID, Point in pairs( SpawnTemplate.route.points ) do - --Point.x = UnitPoint.x - --Point.y = UnitPoint.y - --Point.alt = nil - --Point.alt_type = nil - --end - - SpawnTemplate.route.points[1].x = UnitPoint.x - SpawnTemplate.route.points[1].y = UnitPoint.y - - if not InnerRadius then - InnerRadius = 10 - end - - if not OuterRadius then - OuterRadius = 50 - end - - -- Apply SpawnFormation - for UnitID = 1, #SpawnTemplate.units do - if InnerRadius == 0 then - SpawnTemplate.units[UnitID].x = UnitPoint.x - SpawnTemplate.units[UnitID].y = UnitPoint.y - else - local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) - SpawnTemplate.units[UnitID].x = CirclePos.x - SpawnTemplate.units[UnitID].y = CirclePos.y - end - self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) - end - - local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) - local Point = {} - Point.type = "Turning Point" - Point.x = SpawnPos.x - Point.y = SpawnPos.y - Point.action = "Cone" - Point.speed = 5 - - table.insert( SpawnTemplate.route.points, 2, Point ) - - return self:SpawnWithIndex( self.SpawnIndex ) - end - end - end - - return nil -end - ---- Will spawn a Group within a given @{Zone#ZONE}. --- Once the group is spawned within the zone, it will continue on its route. --- The first waypoint (where the group is spawned) is replaced with the zone coordinates. --- @param #SPAWN self --- @param Zone#ZONE Zone The zone where the group is to be spawned. --- @param #number ZoneRandomize (Optional) Set to true if you want to randomize the starting point in the zone. --- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. --- @return Group#GROUP that was spawned. --- @return #nil when nothing was spawned. -function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } ) - - if Zone then - - if SpawnIndex then - else - SpawnIndex = self.SpawnIndex + 1 - end - - if self:_GetSpawnIndex( SpawnIndex ) then - - local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate - - if SpawnTemplate then - - local ZonePoint - - if ZoneRandomize == true then - ZonePoint = Zone:GetRandomPointVec2() - else - ZonePoint = Zone:GetPointVec2() - end - - SpawnTemplate.route.points[1].x = ZonePoint.x - SpawnTemplate.route.points[1].y = ZonePoint.y - - -- Apply SpawnFormation - for UnitID = 1, #SpawnTemplate.units do - local ZonePointUnit = Zone:GetRandomPointVec2() - SpawnTemplate.units[UnitID].x = ZonePointUnit.x - SpawnTemplate.units[UnitID].y = ZonePointUnit.y - self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) - end - - return self:SpawnWithIndex( self.SpawnIndex ) - end - end - end - - return nil -end - - - - ---- Will spawn a plane group in uncontrolled mode... --- This will be similar to the uncontrolled flag setting in the ME. --- @return #SPAWN self -function SPAWN:UnControlled() - self:F( { self.SpawnTemplatePrefix } ) - - self.SpawnUnControlled = true - - for SpawnGroupID = 1, self.SpawnMaxGroups do - self.SpawnGroups[SpawnGroupID].UnControlled = true - end - - return self -end - - - ---- Will return the SpawnGroupName either with with a specific count number or without any count. --- @param #SPAWN self --- @param #number SpawnIndex Is the number of the Group that is to be spawned. --- @return #string SpawnGroupName -function SPAWN:SpawnGroupName( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) - - local SpawnPrefix = self.SpawnTemplatePrefix - if self.SpawnAliasPrefix then - SpawnPrefix = self.SpawnAliasPrefix - end - - if SpawnIndex then - local SpawnName = string.format( '%s#%03d', SpawnPrefix, SpawnIndex ) - self:T( SpawnName ) - return SpawnName - else - self:T( SpawnPrefix ) - return SpawnPrefix - end - -end - ---- Find the first alive group. --- @param #SPAWN self --- @param #number SpawnCursor A number holding the index from where to find the first group from. --- @return Group#GROUP, #number The group found, the new index where the group was found. --- @return #nil, #nil When no group is found, #nil is returned. -function SPAWN:GetFirstAliveGroup( SpawnCursor ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) - - for SpawnIndex = 1, self.SpawnCount do - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - if SpawnGroup and SpawnGroup:IsAlive() then - SpawnCursor = SpawnIndex - return SpawnGroup, SpawnCursor - end - end - - return nil, nil -end - - ---- Find the next alive group. --- @param #SPAWN self --- @param #number SpawnCursor A number holding the last found previous index. --- @return Group#GROUP, #number The group found, the new index where the group was found. --- @return #nil, #nil When no group is found, #nil is returned. -function SPAWN:GetNextAliveGroup( SpawnCursor ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) - - SpawnCursor = SpawnCursor + 1 - for SpawnIndex = SpawnCursor, self.SpawnCount do - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - if SpawnGroup and SpawnGroup:IsAlive() then - SpawnCursor = SpawnIndex - return SpawnGroup, SpawnCursor - end - end - - return nil, nil -end - ---- Find the last alive group during runtime. -function SPAWN:GetLastAliveGroup() - self:F( { self.SpawnTemplatePrefixself.SpawnAliasPrefix } ) - - self.SpawnIndex = self:_GetLastIndex() - for SpawnIndex = self.SpawnIndex, 1, -1 do - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - if SpawnGroup and SpawnGroup:IsAlive() then - self.SpawnIndex = SpawnIndex - return SpawnGroup - end - end - - self.SpawnIndex = nil - return nil -end - - - ---- Get the group from an index. --- Returns the group from the SpawnGroups list. --- If no index is given, it will return the first group in the list. --- @param #SPAWN self --- @param #number SpawnIndex The index of the group to return. --- @return Group#GROUP -function SPAWN:GetGroupFromIndex( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) - - if not SpawnIndex then - SpawnIndex = 1 - end - - if self.SpawnGroups and self.SpawnGroups[SpawnIndex] then - local SpawnGroup = self.SpawnGroups[SpawnIndex].Group - return SpawnGroup - else - return nil - end -end - ---- Get the group index from a DCSUnit. --- The method will search for a #-mark, and will return the index behind the #-mark of the DCSUnit. --- It will return nil of no prefix was found. --- @param #SPAWN self --- @param DCSUnit The DCS unit to be searched. --- @return #string The prefix --- @return #nil Nothing found -function SPAWN:_GetGroupIndexFromDCSUnit( DCSUnit ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) - - if DCSUnit and DCSUnit:getName() then - local IndexString = string.match( DCSUnit:getName(), "#.*-" ):sub( 2, -2 ) - self:T( IndexString ) - - if IndexString then - local Index = tonumber( IndexString ) - self:T( { "Index:", IndexString, Index } ) - return Index - end - end - - return nil -end - ---- Return the prefix of a DCSUnit. --- The method will search for a #-mark, and will return the text before the #-mark. --- It will return nil of no prefix was found. --- @param #SPAWN self --- @param DCSUnit The DCS unit to be searched. --- @return #string The prefix --- @return #nil Nothing found -function SPAWN:_GetPrefixFromDCSUnit( DCSUnit ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) - - if DCSUnit and DCSUnit:getName() then - local SpawnPrefix = string.match( DCSUnit:getName(), ".*#" ) - if SpawnPrefix then - SpawnPrefix = SpawnPrefix:sub( 1, -2 ) - end - self:T( SpawnPrefix ) - return SpawnPrefix - end - - return nil -end - ---- Return the group within the SpawnGroups collection with input a DCSUnit. -function SPAWN:_GetGroupFromDCSUnit( DCSUnit ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) - - if DCSUnit then - local SpawnPrefix = self:_GetPrefixFromDCSUnit( DCSUnit ) - - if self.SpawnTemplatePrefix == SpawnPrefix or ( self.SpawnAliasPrefix and self.SpawnAliasPrefix == SpawnPrefix ) then - local SpawnGroupIndex = self:_GetGroupIndexFromDCSUnit( DCSUnit ) - local SpawnGroup = self.SpawnGroups[SpawnGroupIndex].Group - self:T( SpawnGroup ) - return SpawnGroup - end - end - - return nil -end - - ---- Get the index from a given group. --- The function will search the name of the group for a #, and will return the number behind the #-mark. -function SPAWN:GetSpawnIndexFromGroup( SpawnGroup ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnGroup } ) - - local IndexString = string.match( SpawnGroup:GetName(), "#.*$" ):sub( 2 ) - local Index = tonumber( IndexString ) - - self:T( IndexString, Index ) - return Index - -end - ---- Return the last maximum index that can be used. -function SPAWN:_GetLastIndex() - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) - - return self.SpawnMaxGroups -end - ---- Initalize the SpawnGroups collection. -function SPAWN:_InitializeSpawnGroups( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) - - if not self.SpawnGroups[SpawnIndex] then - self.SpawnGroups[SpawnIndex] = {} - self.SpawnGroups[SpawnIndex].Visible = false - self.SpawnGroups[SpawnIndex].Spawned = false - self.SpawnGroups[SpawnIndex].UnControlled = false - self.SpawnGroups[SpawnIndex].SpawnTime = 0 - - self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefix - self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) - end - - self:_RandomizeTemplate( SpawnIndex ) - self:_RandomizeRoute( SpawnIndex ) - --self:_TranslateRotate( SpawnIndex ) - - return self.SpawnGroups[SpawnIndex] -end - - - ---- Gets the CategoryID of the Group with the given SpawnPrefix -function SPAWN:_GetGroupCategoryID( SpawnPrefix ) - local TemplateGroup = Group.getByName( SpawnPrefix ) - - if TemplateGroup then - return TemplateGroup:getCategory() - else - return nil - end -end - ---- Gets the CoalitionID of the Group with the given SpawnPrefix -function SPAWN:_GetGroupCoalitionID( SpawnPrefix ) - local TemplateGroup = Group.getByName( SpawnPrefix ) - - if TemplateGroup then - return TemplateGroup:getCoalition() - else - return nil - end -end - ---- Gets the CountryID of the Group with the given SpawnPrefix -function SPAWN:_GetGroupCountryID( SpawnPrefix ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnPrefix } ) - - local TemplateGroup = Group.getByName( SpawnPrefix ) - - if TemplateGroup then - local TemplateUnits = TemplateGroup:getUnits() - return TemplateUnits[1]:getCountry() - else - return nil - end -end - ---- Gets the Group Template from the ME environment definition. --- This method used the @{DATABASE} object, which contains ALL initial and new spawned object in MOOSE. --- @param #SPAWN self --- @param #string SpawnTemplatePrefix --- @return @SPAWN self -function SPAWN:_GetTemplate( SpawnTemplatePrefix ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnTemplatePrefix } ) - - local SpawnTemplate = nil - - SpawnTemplate = routines.utils.deepCopy( _DATABASE.Templates.Groups[SpawnTemplatePrefix].Template ) - - if SpawnTemplate == nil then - error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) - end - - SpawnTemplate.SpawnCoalitionID = self:_GetGroupCoalitionID( SpawnTemplatePrefix ) - SpawnTemplate.SpawnCategoryID = self:_GetGroupCategoryID( SpawnTemplatePrefix ) - SpawnTemplate.SpawnCountryID = self:_GetGroupCountryID( SpawnTemplatePrefix ) - - self:T( { SpawnTemplate } ) - return SpawnTemplate -end - ---- Prepares the new Group Template. --- @param #SPAWN self --- @param #string SpawnTemplatePrefix --- @param #number SpawnIndex --- @return #SPAWN self -function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) - - local SpawnTemplate = self:_GetTemplate( SpawnTemplatePrefix ) - SpawnTemplate.name = self:SpawnGroupName( SpawnIndex ) - - SpawnTemplate.groupId = nil - SpawnTemplate.lateActivation = false - - if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then - self:T( "For ground units, visible needs to be false..." ) - SpawnTemplate.visible = false - end - - if SpawnTemplate.SpawnCategoryID == Group.Category.HELICOPTER or SpawnTemplate.SpawnCategoryID == Group.Category.AIRPLANE then - SpawnTemplate.uncontrolled = false - end - - for UnitID = 1, #SpawnTemplate.units do - SpawnTemplate.units[UnitID].name = string.format( SpawnTemplate.name .. '-%02d', UnitID ) - SpawnTemplate.units[UnitID].unitId = nil - SpawnTemplate.units[UnitID].x = SpawnTemplate.route.points[1].x - SpawnTemplate.units[UnitID].y = SpawnTemplate.route.points[1].y - end - - self:T( { "Template:", SpawnTemplate } ) - return SpawnTemplate - -end - ---- Private method randomizing the routes. --- @param #SPAWN self --- @param #number SpawnIndex The index of the group to be spawned. --- @return #SPAWN -function SPAWN:_RandomizeRoute( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnRandomizeRoute, self.SpawnRandomizeRouteStartPoint, self.SpawnRandomizeRouteEndPoint, self.SpawnRandomizeRouteRadius } ) - - if self.SpawnRandomizeRoute then - local SpawnTemplate = self.SpawnGroups[SpawnIndex].SpawnTemplate - local RouteCount = #SpawnTemplate.route.points - - for t = self.SpawnRandomizeRouteStartPoint + 1, ( RouteCount - self.SpawnRandomizeRouteEndPoint ) do - SpawnTemplate.route.points[t].x = SpawnTemplate.route.points[t].x + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) - SpawnTemplate.route.points[t].y = SpawnTemplate.route.points[t].y + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) - -- TODO: manage altitude for airborne units ... - SpawnTemplate.route.points[t].alt = nil - --SpawnGroup.route.points[t].alt_type = nil - self:T( 'SpawnTemplate.route.points[' .. t .. '].x = ' .. SpawnTemplate.route.points[t].x .. ', SpawnTemplate.route.points[' .. t .. '].y = ' .. SpawnTemplate.route.points[t].y ) - end - end - - return self -end - ---- Private method that randomizes the template of the group. --- @param #SPAWN self --- @param #number SpawnIndex --- @return #SPAWN self -function SPAWN:_RandomizeTemplate( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) - - if self.SpawnRandomizeTemplate then - self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefixTable[ math.random( 1, #self.SpawnTemplatePrefixTable ) ] - self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) - self.SpawnGroups[SpawnIndex].SpawnTemplate.route = routines.utils.deepCopy( self.SpawnTemplate.route ) - 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 - for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do - self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading - end - end - - self:_RandomizeRoute( SpawnIndex ) - - return self -end - -function SPAWN:_TranslateRotate( SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle } ) - - -- Translate - local TranslatedX = SpawnX - local TranslatedY = SpawnY - - -- Rotate - -- From Wikipedia: https://en.wikipedia.org/wiki/Rotation_matrix#Common_rotations - -- x' = x \cos \theta - y \sin \theta\ - -- y' = x \sin \theta + y \cos \theta\ - local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) - + TranslatedY * math.sin( math.rad( SpawnAngle ) ) - local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) - + TranslatedY * math.cos( math.rad( SpawnAngle ) ) - - -- Assign - self.SpawnGroups[SpawnIndex].SpawnTemplate.x = SpawnRootX - RotatedX - self.SpawnGroups[SpawnIndex].SpawnTemplate.y = SpawnRootY + RotatedY - - - local SpawnUnitCount = table.getn( self.SpawnGroups[SpawnIndex].SpawnTemplate.units ) - for u = 1, SpawnUnitCount do - - -- Translate - local TranslatedX = SpawnX - local TranslatedY = SpawnY - 10 * ( u - 1 ) - - -- Rotate - local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) - + TranslatedY * math.sin( math.rad( SpawnAngle ) ) - local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) - + TranslatedY * math.cos( math.rad( SpawnAngle ) ) - - -- Assign - self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].x = SpawnRootX - RotatedX - self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].y = SpawnRootY + RotatedY - self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading = self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading + math.rad( SpawnAngle ) - end - - return self -end - ---- Get the next index of the groups to be spawned. This function is complicated, as it is used at several spaces. -function SPAWN:_GetSpawnIndex( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive, self.AliveUnits, #self.SpawnTemplate.units } ) - - - if ( self.SpawnMaxGroups == 0 ) or ( SpawnIndex <= self.SpawnMaxGroups ) then - if ( self.SpawnMaxUnitsAlive == 0 ) or ( self.AliveUnits < self.SpawnMaxUnitsAlive * #self.SpawnTemplate.units ) or self.UnControlled then - if SpawnIndex and SpawnIndex >= self.SpawnCount + 1 then - self.SpawnCount = self.SpawnCount + 1 - SpawnIndex = self.SpawnCount - end - self.SpawnIndex = SpawnIndex - if not self.SpawnGroups[self.SpawnIndex] then - self:_InitializeSpawnGroups( self.SpawnIndex ) - end - else - return nil - end - else - return nil - end - - return self.SpawnIndex -end - - --- TODO Need to delete this... _DATABASE does this now ... -function SPAWN:_OnBirth( event ) - - if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line - if event.initiator and event.initiator:getName() then - local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) - if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then - self:T( { "Birth event: " .. event.initiator:getName(), event } ) - --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " spawned." , 5, EventPrefix .. '/Event') - self.AliveUnits = self.AliveUnits + 1 - self:T( "Alive Units: " .. self.AliveUnits ) - end - end - end - -end - ---- Obscolete --- @todo Need to delete this... _DATABASE does this now ... -function SPAWN:_OnDeadOrCrash( event ) - self:F( self.SpawnTemplatePrefix, event ) - - if event.initiator and event.initiator:getName() then - local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) - if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then - self:T( { "Dead event: " .. event.initiator:getName(), event } ) --- local DestroyedUnit = Unit.getByName( EventPrefix ) --- if DestroyedUnit and DestroyedUnit.getLife() <= 1.0 then - --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " crashed." , 5, EventPrefix .. '/Event') - self.AliveUnits = self.AliveUnits - 1 - self:T( "Alive Units: " .. self.AliveUnits ) --- end - end - end -end - ---- Will detect AIR Units taking off... When the event takes place, the spawned Group is registered as airborne... --- This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups. --- @todo Need to test for AIR Groups only... -function SPAWN:_OnTakeOff( event ) - self:F( self.SpawnTemplatePrefix, event ) - - if event.initiator and event.initiator:getName() then - local SpawnGroup = self:_GetGroupFromDCSUnit( event.initiator ) - if SpawnGroup then - self:T( { "TakeOff event: " .. event.initiator:getName(), event } ) - self:T( "self.Landed = false" ) - self.Landed = false - end - end -end - ---- Will detect AIR Units landing... When the event takes place, the spawned Group is registered as landed. --- This is needed to ensure that Re-SPAWNing is only done for landed AIR Groups. --- @todo Need to test for AIR Groups only... -function SPAWN:_OnLand( event ) - self:F( self.SpawnTemplatePrefix, event ) - - local SpawnUnit = event.initiator - if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then - local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) - if SpawnGroup then - self:T( { "Landed event:" .. SpawnUnit:getName(), event } ) - self.Landed = true - self:T( "self.Landed = true" ) - if self.Landed and self.RepeatOnLanding then - local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) - self:T( { "Landed:", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) - self:ReSpawn( SpawnGroupIndex ) - end - end - end -end - ---- Will detect AIR Units shutting down their engines ... --- When the event takes place, and the method @{RepeatOnEngineShutDown} was called, the spawned Group will Re-SPAWN. --- But only when the Unit was registered to have landed. --- @param #SPAWN self --- @see _OnTakeOff --- @see _OnLand --- @todo Need to test for AIR Groups only... -function SPAWN:_OnEngineShutDown( event ) - self:F( self.SpawnTemplatePrefix, event ) - - local SpawnUnit = event.initiator - if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then - local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) - if SpawnGroup then - self:T( { "EngineShutDown event: " .. SpawnUnit:getName(), event } ) - if self.Landed and self.RepeatOnEngineShutDown then - local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) - self:T( { "EngineShutDown: ", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) - self:ReSpawn( SpawnGroupIndex ) - end - end - end -end - ---- This function is called automatically by the Spawning scheduler. --- It is the internal worker method SPAWNing new Groups on the defined time intervals. -function SPAWN:_Scheduler() - self:F( { "_Scheduler", self.SpawnTemplatePrefix, self.SpawnAliasPrefix, self.SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive } ) - - -- Validate if there are still groups left in the batch... - self:Spawn() - - return true -end - -function SPAWN:_SpawnCleanUpScheduler() - self:F( { "CleanUp Scheduler:", self.SpawnTemplatePrefix } ) - - local SpawnCursor - local SpawnGroup, SpawnCursor = self:GetFirstAliveGroup( SpawnCursor ) - - self:T( { "CleanUp Scheduler:", SpawnGroup } ) - - while SpawnGroup do - - if SpawnGroup:AllOnGround() and SpawnGroup:GetMaxVelocity() < 1 then - if not self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] then - self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = timer.getTime() - else - if self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] + self.SpawnCleanUpInterval < timer.getTime() then - self:T( { "CleanUp Scheduler:", "Cleaning:", SpawnGroup } ) - SpawnGroup:Destroy() - end - end - else - self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = nil - end - - SpawnGroup, SpawnCursor = self:GetNextAliveGroup( SpawnCursor ) - - self:T( { "CleanUp Scheduler:", SpawnGroup } ) - - end - - return true -- Repeat - -end ---- Limit the simultaneous movement of Groups within a running Mission. --- This module is defined to improve the performance in missions, and to bring additional realism for GROUND vehicles. --- Performance: If in a DCSRTE there are a lot of moving GROUND units, then in a multi player mission, this WILL create lag if --- the main DCS execution core of your CPU is fully utilized. So, this class will limit the amount of simultaneous moving GROUND units --- on defined intervals (currently every minute). --- @module MOVEMENT - -Include.File( "Routines" ) - ---- the MOVEMENT class --- @type -MOVEMENT = { - ClassName = "MOVEMENT", -} - ---- Creates the main object which is handling the GROUND forces movement. --- @param table{string,...}|string MovePrefixes is a table of the Prefixes (names) of the GROUND Groups that need to be controlled by the MOVEMENT Object. --- @param number MoveMaximum is a number that defines the maximum amount of GROUND Units to be moving during one minute. --- @return MOVEMENT --- @usage --- -- Limit the amount of simultaneous moving units on the ground to prevent lag. --- Movement_US_Platoons = MOVEMENT:New( { 'US Tank Platoon Left', 'US Tank Platoon Middle', 'US Tank Platoon Right', 'US CH-47D Troops' }, 15 ) - -function MOVEMENT:New( MovePrefixes, MoveMaximum ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { MovePrefixes, MoveMaximum } ) - - if type( MovePrefixes ) == 'table' then - self.MovePrefixes = MovePrefixes - else - self.MovePrefixes = { MovePrefixes } - end - self.MoveCount = 0 -- The internal counter of the amount of Moveing the has happened since MoveStart. - self.MoveMaximum = MoveMaximum -- Contains the Maximum amount of units that are allowed to move... - self.AliveUnits = 0 -- Contains the counter how many units are currently alive - self.MoveUnits = {} -- Reflects if the Moving for this MovePrefixes is going to be scheduled or not. - - _EVENTDISPATCHER:OnBirth( self.OnBirth, self ) - --- self:AddEvent( world.event.S_EVENT_BIRTH, self.OnBirth ) --- --- self:EnableEvents() - - self:ScheduleStart() - - return self -end - ---- Call this function to start the MOVEMENT scheduling. -function MOVEMENT:ScheduleStart() - self:F() - --self.MoveFunction = routines.scheduleFunction( self._Scheduler, { self }, timer.getTime() + 1, 120 ) - self.MoveFunction = SCHEDULER:New( self, self._Scheduler, {}, 1, 120 ) -end - ---- Call this function to stop the MOVEMENT scheduling. --- @todo need to implement it ... Forgot. -function MOVEMENT:ScheduleStop() - self:F() - -end - ---- Captures the birth events when new Units were spawned. --- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. -function MOVEMENT:OnBirth( Event ) - self:F( { Event } ) - - if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line - if Event.IniDCSUnit then - self:T( "Birth object : " .. Event.IniDCSUnitName ) - if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then - for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do - if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then - self.AliveUnits = self.AliveUnits + 1 - self.MoveUnits[Event.IniDCSUnitName] = Event.IniDCSGroupName - self:T( self.AliveUnits ) - end - end - end - end - _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) - _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) - end - -end - ---- Captures the Dead or Crash events when Units crash or are destroyed. --- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. -function MOVEMENT:OnDeadOrCrash( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - self:T( "Dead object : " .. Event.IniDCSUnitName ) - for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do - if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then - self.AliveUnits = self.AliveUnits - 1 - self.MoveUnits[Event.IniDCSUnitName] = nil - self:T( self.AliveUnits ) - end - end - end -end - ---- This function is called automatically by the MOVEMENT scheduler. A new function is scheduled when MoveScheduled is true. -function MOVEMENT:_Scheduler() - self:F( { self.MovePrefixes, self.MoveMaximum, self.AliveUnits, self.MovementGroups } ) - - if self.AliveUnits > 0 then - local MoveProbability = ( self.MoveMaximum * 100 ) / self.AliveUnits - self:T( 'Move Probability = ' .. MoveProbability ) - - for MovementUnitName, MovementGroupName in pairs( self.MoveUnits ) do - local MovementGroup = Group.getByName( MovementGroupName ) - if MovementGroup and MovementGroup:isExist() then - local MoveOrStop = math.random( 1, 100 ) - self:T( 'MoveOrStop = ' .. MoveOrStop ) - if MoveOrStop <= MoveProbability then - self:T( 'Group continues moving = ' .. MovementGroupName ) - trigger.action.groupContinueMoving( MovementGroup ) - else - self:T( 'Group stops moving = ' .. MovementGroupName ) - trigger.action.groupStopMoving( MovementGroup ) - end - else - self.MoveUnits[MovementUnitName] = nil - end - end - end - return true -end ---- Provides defensive behaviour to a set of SAM sites within a running Mission. --- @module Sead --- @author to be searched on the forum --- @author (co) Flightcontrol (Modified and enriched with functionality) - -Include.File( "Routines" ) -Include.File( "Event" ) -Include.File( "Base" ) -Include.File( "Mission" ) -Include.File( "Client" ) -Include.File( "Task" ) - ---- The SEAD class --- @type SEAD --- @extends Base#BASE -SEAD = { - ClassName = "SEAD", - TargetSkill = { - Average = { Evade = 50, DelayOff = { 10, 25 }, DelayOn = { 10, 30 } } , - Good = { Evade = 30, DelayOff = { 8, 20 }, DelayOn = { 20, 40 } } , - High = { Evade = 15, DelayOff = { 5, 17 }, DelayOn = { 30, 50 } } , - Excellent = { Evade = 10, DelayOff = { 3, 10 }, DelayOn = { 30, 60 } } - }, - SEADGroupPrefixes = {} -} - ---- Creates the main object which is handling defensive actions for SA sites or moving SA vehicles. --- When an anti radiation missile is fired (KH-58, KH-31P, KH-31A, KH-25MPU, HARM missiles), the SA will shut down their radars and will take evasive actions... --- Chances are big that the missile will miss. --- @param table{string,...}|string SEADGroupPrefixes which is a table of Prefixes of the SA Groups in the DCSRTE on which evasive actions need to be taken. --- @return SEAD --- @usage --- -- CCCP SEAD Defenses --- -- Defends the Russian SA installations from SEAD attacks. --- SEAD_RU_SAM_Defenses = SEAD:New( { 'RU SA-6 Kub', 'RU SA-6 Defenses', 'RU MI-26 Troops', 'RU Attack Gori' } ) -function SEAD:New( SEADGroupPrefixes ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( SEADGroupPrefixes ) - if type( SEADGroupPrefixes ) == 'table' then - for SEADGroupPrefixID, SEADGroupPrefix in pairs( SEADGroupPrefixes ) do - self.SEADGroupPrefixes[SEADGroupPrefix] = SEADGroupPrefix - end - else - self.SEADGroupNames[SEADGroupPrefixes] = SEADGroupPrefixes - end - _EVENTDISPATCHER:OnShot( self.EventShot, self ) - - return self -end - ---- 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. --- @see SEAD -function SEAD:EventShot( Event ) - self:F( { Event } ) - - local SEADUnit = Event.IniDCSUnit - local SEADUnitName = Event.IniDCSUnitName - local SEADWeapon = Event.Weapon -- Identify the weapon fired - local SEADWeaponName = Event.WeaponName -- return weapon type - --trigger.action.outText( string.format("Alerte, depart missile " ..string.format(SEADWeaponName)), 20) --debug message - -- Start of the 2nd loop - self:T( "Missile Launched = " .. SEADWeaponName ) - if SEADWeaponName == "KH-58" or SEADWeaponName == "KH-25MPU" or SEADWeaponName == "AGM-88" or SEADWeaponName == "KH-31A" or SEADWeaponName == "KH-31P" then -- Check if the missile is a SEAD - local _evade = math.random (1,100) -- random number for chance of evading action - local _targetMim = Event.Weapon:getTarget() -- Identify target - local _targetMimname = Unit.getName(_targetMim) - local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) - local _targetMimgroupName = _targetMimgroup:getName() - local _targetMimcont= _targetMimgroup:getController() - local _targetskill = _DATABASE.Templates.Units[_targetMimname].Template.skill - self:T( self.SEADGroupPrefixes ) - self:T( _targetMimgroupName ) - local SEADGroupFound = false - for SEADGroupPrefixID, SEADGroupPrefix in pairs( self.SEADGroupPrefixes ) do - if string.find( _targetMimgroupName, SEADGroupPrefix, 1, true ) then - SEADGroupFound = true - self:T( 'Group Found' ) - break - end - end - if SEADGroupFound == true then - if _targetskill == "Random" then -- when skill is random, choose a skill - local Skills = { "Average", "Good", "High", "Excellent" } - _targetskill = Skills[ math.random(1,4) ] - end - self:T( _targetskill ) -- debug message for skill check - if self.TargetSkill[_targetskill] then - if (_evade > self.TargetSkill[_targetskill].Evade) then - self:T( string.format("Evading, target skill " ..string.format(_targetskill)) ) --debug message - local _targetMim = Weapon.getTarget(SEADWeapon) - local _targetMimname = Unit.getName(_targetMim) - local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) - local _targetMimcont= _targetMimgroup:getController() - routines.groupRandomDistSelf(_targetMimgroup,300,'Diamond',250,20) -- move randomly - local SuppressedGroups1 = {} -- unit suppressed radar off for a random time - local function SuppressionEnd1(id) - id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) - SuppressedGroups1[id.groupName] = nil - end - local id = { - groupName = _targetMimgroup, - ctrl = _targetMimcont - } - local delay1 = math.random(self.TargetSkill[_targetskill].DelayOff[1], self.TargetSkill[_targetskill].DelayOff[2]) - if SuppressedGroups1[id.groupName] == nil then - SuppressedGroups1[id.groupName] = { - SuppressionEndTime1 = timer.getTime() + delay1, - SuppressionEndN1 = SuppressionEndCounter1 --Store instance of SuppressionEnd() scheduled function - } - Controller.setOption(_targetMimcont, AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) - timer.scheduleFunction(SuppressionEnd1, id, SuppressedGroups1[id.groupName].SuppressionEndTime1) --Schedule the SuppressionEnd() function - --trigger.action.outText( string.format("Radar Off " ..string.format(delay1)), 20) - end - - local SuppressedGroups = {} - local function SuppressionEnd(id) - id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.RED) - SuppressedGroups[id.groupName] = nil - end - local id = { - groupName = _targetMimgroup, - ctrl = _targetMimcont - } - local delay = math.random(self.TargetSkill[_targetskill].DelayOn[1], self.TargetSkill[_targetskill].DelayOn[2]) - if SuppressedGroups[id.groupName] == nil then - SuppressedGroups[id.groupName] = { - SuppressionEndTime = timer.getTime() + delay, - SuppressionEndN = SuppressionEndCounter --Store instance of SuppressionEnd() scheduled function - } - timer.scheduleFunction(SuppressionEnd, id, SuppressedGroups[id.groupName].SuppressionEndTime) --Schedule the SuppressionEnd() function - --trigger.action.outText( string.format("Radar On " ..string.format(delay)), 20) - end - end - end - end - end -end ---- Taking the lead of AI escorting your flight. --- --- @{#ESCORT} class --- ================ --- The @{#ESCORT} class allows you to interact with escorting AI on your flight and take the lead. --- Each escorting group can be commanded with a whole set of radio commands (radio menu in your flight, and then F10). --- --- The radio commands will vary according the category of the group. The richest set of commands are with Helicopters and AirPlanes. --- Ships and Ground troops will have a more limited set, but they can provide support through the bombing of targets designated by the other escorts. --- --- RADIO MENUs that can be created: --- ================================ --- Find a summary below of the current available commands: --- --- Navigation ...: --- --------------- --- Escort group navigation functions: --- --- * **"Join-Up and Follow at x meters":** The escort group fill follow you at about x meters, and they will follow you. --- * **"Flare":** Provides menu commands to let the escort group shoot a flare in the air in a color. --- * **"Smoke":** Provides menu commands to let the escort group smoke the air in a color. Note that smoking is only available for ground and naval troops. --- --- Hold position ...: --- ------------------ --- Escort group navigation functions: --- --- * **"At current location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. --- * **"At client location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. --- --- Report targets ...: --- ------------------- --- Report targets will make the escort group to report any target that it identifies within a 8km range. Any detected target can be attacked using the 4. Attack nearby targets function. (see below). --- --- * **"Report now":** Will report the current detected targets. --- * **"Report targets on":** Will make the escort group to report detected targets and will fill the "Attack nearby targets" menu list. --- * **"Report targets off":** Will stop detecting targets. --- --- Scan targets ...: --- ----------------- --- Menu items to pop-up the escort group for target scanning. After scanning, the escort group will resume with the mission or defined task. --- --- * **"Scan targets 30 seconds":** Scan 30 seconds for targets. --- * **"Scan targets 60 seconds":** Scan 60 seconds for targets. --- --- Attack targets ...: --- ------------------- --- This menu item will list all detected targets within a 15km range. Depending on the level of detection (known/unknown) and visuality, the targets type will also be listed. --- --- Request assistance from ...: --- ---------------------------- --- This menu item will list all detected targets within a 15km range, as with the menu item **Attack Targets**. --- This menu item allows to request attack support from other escorts supporting the current client group. --- eg. the function allows a player to request support from the Ship escort to attack a target identified by the Plane escort with its Tomahawk missiles. --- eg. the function allows a player to request support from other Planes escorting to bomb the unit with illumination missiles or bombs, so that the main plane escort can attack the area. --- --- ROE ...: --- -------- --- Sets the Rules of Engagement (ROE) of the escort group when in flight. --- --- * **"Hold Fire":** The escort group will hold fire. --- * **"Return Fire":** The escort group will return fire. --- * **"Open Fire":** The escort group will open fire on designated targets. --- * **"Weapon Free":** The escort group will engage with any target. --- --- Evasion ...: --- ------------ --- Will define the evasion techniques that the escort group will perform during flight or combat. --- --- * **"Fight until death":** The escort group will have no reaction to threats. --- * **"Use flares, chaff and jammers":** The escort group will use passive defense using flares and jammers. No evasive manoeuvres are executed. --- * **"Evade enemy fire":** The rescort group will evade enemy fire before firing. --- * **"Go below radar and evade fire":** The escort group will perform evasive vertical manoeuvres. --- --- Resume Mission ...: --- ------------------- --- Escort groups can have their own mission. This menu item will allow the escort group to resume their Mission from a given waypoint. --- Note that this is really fantastic, as you now have the dynamic of taking control of the escort groups, and allowing them to resume their path or mission. --- --- ESCORT construction methods. --- ============================ --- Create a new SPAWN object with the @{#ESCORT.New} method: --- --- * @{#ESCORT.New}: Creates a new ESCORT object from a @{Group#GROUP} for a @{Client#CLIENT}, with an optional briefing text. --- --- ESCORT initialization methods. --- ============================== --- The following menus are created within the RADIO MENU of an active unit hosted by a player: --- --- * @{#ESCORT.MenuFollowAt}: Creates a menu to make the escort follow the client. --- * @{#ESCORT.MenuHoldAtEscortPosition}: Creates a menu to hold the escort at its current position. --- * @{#ESCORT.MenuHoldAtLeaderPosition}: Creates a menu to hold the escort at the client position. --- * @{#ESCORT.MenuScanForTargets}: Creates a menu so that the escort scans targets. --- * @{#ESCORT.MenuFlare}: Creates a menu to disperse flares. --- * @{#ESCORT.MenuSmoke}: Creates a menu to disparse smoke. --- * @{#ESCORT.MenuReportTargets}: Creates a menu so that the escort reports targets. --- * @{#ESCORT.MenuReportPosition}: Creates a menu so that the escort reports its current position from bullseye. --- * @{#ESCORT.MenuAssistedAttack: Creates a menu so that the escort supportes assisted attack from other escorts with the client. --- * @{#ESCORT.MenuROE: Creates a menu structure to set the rules of engagement of the escort. --- * @{#ESCORT.MenuEvasion: Creates a menu structure to set the evasion techniques when the escort is under threat. --- * @{#ESCORT.MenuResumeMission}: Creates a menu structure so that the escort can resume from a waypoint. --- --- @module Escort --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Database" ) -Include.File( "Group" ) -Include.File( "Zone" ) - ---- --- @type ESCORT --- @extends Base#BASE --- @field Client#CLIENT EscortClient --- @field Group#GROUP EscortGroup --- @field #string EscortName --- @field #ESCORT.MODE EscortMode The mode the escort is in. --- @field #number FollowScheduler The id of the _FollowScheduler function. --- @field #boolean ReportTargets If true, nearby targets are reported. --- @Field DCSTypes#AI.Option.Air.val.ROE OptionROE Which ROE is set to the EscortGroup. --- @field DCSTypes#AI.Option.Air.val.REACTION_ON_THREAT OptionReactionOnThreat Which REACTION_ON_THREAT is set to the EscortGroup. --- @field Menu#MENU_CLIENT EscortMenuResumeMission -ESCORT = { - ClassName = "ESCORT", - EscortName = nil, -- The Escort Name - EscortClient = nil, - EscortGroup = nil, - EscortMode = nil, - MODE = { - FOLLOW = 1, - MISSION = 2, - }, - Targets = {}, -- The identified targets - FollowScheduler = nil, - ReportTargets = true, - OptionROE = AI.Option.Air.val.ROE.OPEN_FIRE, - OptionReactionOnThreat = AI.Option.Air.val.REACTION_ON_THREAT.ALLOW_ABORT_MISSION, - TaskPoints = {} -} - ---- ESCORT.Mode class --- @type ESCORT.MODE --- @field #number FOLLOW --- @field #number MISSION - ---- MENUPARAM type --- @type MENUPARAM --- @field #ESCORT ParamSelf --- @field #Distance ParamDistance --- @field #function ParamFunction --- @field #string ParamMessage - ---- ESCORT class constructor for an AI group --- @param #ESCORT self --- @param Client#CLIENT EscortClient The client escorted by the EscortGroup. --- @param Group#GROUP EscortGroup The group AI escorting the EscortClient. --- @param #string EscortName Name of the escort. --- @return #ESCORT self -function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { EscortClient, EscortGroup, EscortName } ) - - self.EscortClient = EscortClient -- Client#CLIENT - self.EscortGroup = EscortGroup -- Group#GROUP - self.EscortName = EscortName - self.EscortBriefing = EscortBriefing - - self:T( EscortGroup:GetClassNameAndID() ) - - -- Set EscortGroup known at EscortClient. - if not self.EscortClient._EscortGroups then - self.EscortClient._EscortGroups = {} - end - - if not self.EscortClient._EscortGroups[EscortGroup:GetName()] then - self.EscortClient._EscortGroups[EscortGroup:GetName()] = {} - self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortGroup = self.EscortGroup - self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortName = self.EscortName - self.EscortClient._EscortGroups[EscortGroup:GetName()].Targets = {} - self.EscortMode = ESCORT.MODE.FOLLOW - end - - - self.EscortMenu = MENU_CLIENT:New( self.EscortClient, self.EscortName ) - - self.EscortGroup:WayPointInitialize(1) - - self.EscortGroup:OptionROTVertical() - self.EscortGroup:OptionROEOpenFire() - - EscortGroup:MessageToClient( EscortGroup:GetCategoryName() .. " '" .. EscortName .. "' (" .. EscortGroup:GetCallsign() .. ") reporting! " .. - "We're escorting your flight. " .. - "Use the Radio Menu and F10 and use the options under + " .. EscortName .. "\n", - 60, EscortClient - ) - - return self -end - - ---- Defines the default menus --- @param #ESCORT self --- @return #ESCORT -function ESCORT:Menus() - self:F() - - self:MenuFollowAt( 100 ) - self:MenuFollowAt( 200 ) - self:MenuFollowAt( 300 ) - self:MenuFollowAt( 400 ) - - self:MenuScanForTargets( 100, 60 ) - - self:MenuHoldAtEscortPosition( 30 ) - self:MenuHoldAtLeaderPosition( 30 ) - - self:MenuFlare() - self:MenuSmoke() - - self:MenuReportTargets( 60 ) - self:MenuAssistedAttack() - self:MenuROE() - self:MenuEvasion() - self:MenuResumeMission() - - return self -end - - - ---- Defines a menu slot to let the escort Join and Follow you at a certain distance. --- This menu will appear under **Navigation**. --- @param #ESCORT self --- @param DCSTypes#Distance Distance The distance in meters that the escort needs to follow the client. --- @return #ESCORT -function ESCORT:MenuFollowAt( Distance ) - self:F(Distance) - - if self.EscortGroup:IsAir() then - if not self.EscortMenuReportNavigation then - self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) - end - - if not self.EscortMenuJoinUpAndFollow then - self.EscortMenuJoinUpAndFollow = {} - end - - self.EscortMenuJoinUpAndFollow[#self.EscortMenuJoinUpAndFollow+1] = MENU_CLIENT_COMMAND:New( self.EscortClient, "Join-Up and Follow at " .. Distance, self.EscortMenuReportNavigation, ESCORT._JoinUpAndFollow, { ParamSelf = self, ParamDistance = Distance } ) - - self.EscortMode = ESCORT.MODE.FOLLOW - end - - return self -end - ---- Defines a menu slot to let the escort hold at their current position and stay low with a specified height during a specified time in seconds. --- This menu will appear under **Hold position**. --- @param #ESCORT self --- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. --- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. --- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. --- @return #ESCORT --- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. -function ESCORT:MenuHoldAtEscortPosition( Height, Seconds, MenuTextFormat ) - self:F( { Height, Seconds, MenuTextFormat } ) - - if self.EscortGroup:IsAir() then - - if not self.EscortMenuHold then - self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) - end - - if not Height then - Height = 30 - end - - if not Seconds then - Seconds = 0 - end - - local MenuText = "" - if not MenuTextFormat then - if Seconds == 0 then - MenuText = string.format( "Hold at %d meter", Height ) - else - MenuText = string.format( "Hold at %d meter for %d seconds", Height, Seconds ) - end - else - if Seconds == 0 then - MenuText = string.format( MenuTextFormat, Height ) - else - MenuText = string.format( MenuTextFormat, Height, Seconds ) - end - end - - if not self.EscortMenuHoldPosition then - self.EscortMenuHoldPosition = {} - end - - self.EscortMenuHoldPosition[#self.EscortMenuHoldPosition+1] = MENU_CLIENT_COMMAND - :New( - self.EscortClient, - MenuText, - self.EscortMenuHold, - ESCORT._HoldPosition, - { ParamSelf = self, - ParamOrbitGroup = self.EscortGroup, - ParamHeight = Height, - ParamSeconds = Seconds - } - ) - end - - return self -end - - ---- Defines a menu slot to let the escort hold at the client position and stay low with a specified height during a specified time in seconds. --- This menu will appear under **Navigation**. --- @param #ESCORT self --- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. --- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. --- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. --- @return #ESCORT --- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. -function ESCORT:MenuHoldAtLeaderPosition( Height, Seconds, MenuTextFormat ) - self:F( { Height, Seconds, MenuTextFormat } ) - - if self.EscortGroup:IsAir() then - - if not self.EscortMenuHold then - self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) - end - - if not Height then - Height = 30 - end - - if not Seconds then - Seconds = 0 - end - - local MenuText = "" - if not MenuTextFormat then - if Seconds == 0 then - MenuText = string.format( "Rejoin and hold at %d meter", Height ) - else - MenuText = string.format( "Rejoin and hold at %d meter for %d seconds", Height, Seconds ) - end - else - if Seconds == 0 then - MenuText = string.format( MenuTextFormat, Height ) - else - MenuText = string.format( MenuTextFormat, Height, Seconds ) - end - end - - if not self.EscortMenuHoldAtLeaderPosition then - self.EscortMenuHoldAtLeaderPosition = {} - end - - self.EscortMenuHoldAtLeaderPosition[#self.EscortMenuHoldAtLeaderPosition+1] = MENU_CLIENT_COMMAND - :New( - self.EscortClient, - MenuText, - self.EscortMenuHold, - ESCORT._HoldPosition, - { ParamSelf = self, - ParamOrbitGroup = self.EscortClient, - ParamHeight = Height, - ParamSeconds = Seconds - } - ) - end - - return self -end - ---- Defines a menu slot to let the escort scan for targets at a certain height for a certain time in seconds. --- This menu will appear under **Scan targets**. --- @param #ESCORT self --- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. --- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. --- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. --- @return #ESCORT -function ESCORT:MenuScanForTargets( Height, Seconds, MenuTextFormat ) - self:F( { Height, Seconds, MenuTextFormat } ) - - if self.EscortGroup:IsAir() then - if not self.EscortMenuScan then - self.EscortMenuScan = MENU_CLIENT:New( self.EscortClient, "Scan for targets", self.EscortMenu ) - end - - if not Height then - Height = 100 - end - - if not Seconds then - Seconds = 30 - end - - local MenuText = "" - if not MenuTextFormat then - if Seconds == 0 then - MenuText = string.format( "At %d meter", Height ) - else - MenuText = string.format( "At %d meter for %d seconds", Height, Seconds ) - end - else - if Seconds == 0 then - MenuText = string.format( MenuTextFormat, Height ) - else - MenuText = string.format( MenuTextFormat, Height, Seconds ) - end - end - - if not self.EscortMenuScanForTargets then - self.EscortMenuScanForTargets = {} - end - - self.EscortMenuScanForTargets[#self.EscortMenuScanForTargets+1] = MENU_CLIENT_COMMAND - :New( - self.EscortClient, - MenuText, - self.EscortMenuScan, - ESCORT._ScanTargets, - { ParamSelf = self, - ParamScanDuration = 30 - } - ) - end - - return self -end - - - ---- Defines a menu slot to let the escort disperse a flare in a certain color. --- This menu will appear under **Navigation**. --- The flare will be fired from the first unit in the group. --- @param #ESCORT self --- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. --- @return #ESCORT -function ESCORT:MenuFlare( MenuTextFormat ) - self:F() - - if not self.EscortMenuReportNavigation then - self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) - end - - local MenuText = "" - if not MenuTextFormat then - MenuText = "Flare" - else - MenuText = MenuTextFormat - end - - if not self.EscortMenuFlare then - self.EscortMenuFlare = MENU_CLIENT:New( self.EscortClient, MenuText, self.EscortMenuReportNavigation, ESCORT._Flare, { ParamSelf = self } ) - self.EscortMenuFlareGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Green, ParamMessage = "Released a green flare!" } ) - self.EscortMenuFlareRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Red, ParamMessage = "Released a red flare!" } ) - self.EscortMenuFlareWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.White, ParamMessage = "Released a white flare!" } ) - self.EscortMenuFlareYellow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release yellow flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Yellow, ParamMessage = "Released a yellow flare!" } ) - end - - return self -end - ---- Defines a menu slot to let the escort disperse a smoke in a certain color. --- This menu will appear under **Navigation**. --- Note that smoke menu options will only be displayed for ships and ground units. Not for air units. --- The smoke will be fired from the first unit in the group. --- @param #ESCORT self --- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. --- @return #ESCORT -function ESCORT:MenuSmoke( MenuTextFormat ) - self:F() - - if not self.EscortGroup:IsAir() then - if not self.EscortMenuReportNavigation then - self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) - end - - local MenuText = "" - if not MenuTextFormat then - MenuText = "Smoke" - else - MenuText = MenuTextFormat - end - - if not self.EscortMenuSmoke then - self.EscortMenuSmoke = MENU_CLIENT:New( self.EscortClient, "Smoke", self.EscortMenuReportNavigation, ESCORT._Smoke, { ParamSelf = self } ) - self.EscortMenuSmokeGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Green, ParamMessage = "Releasing green smoke!" } ) - self.EscortMenuSmokeRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Red, ParamMessage = "Releasing red smoke!" } ) - self.EscortMenuSmokeWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.White, ParamMessage = "Releasing white smoke!" } ) - self.EscortMenuSmokeOrange = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release orange smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Orange, ParamMessage = "Releasing orange smoke!" } ) - self.EscortMenuSmokeBlue = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release blue smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Blue, ParamMessage = "Releasing blue smoke!" } ) - end - end - - return self -end - ---- Defines a menu slot to let the escort report their current detected targets with a specified time interval in seconds. --- This menu will appear under **Report targets**. --- Note that if a report targets menu is not specified, no targets will be detected by the escort, and the attack and assisted attack menus will not be displayed. --- @param #ESCORT self --- @param DCSTypes#Time Seconds Optional parameter that lets the escort report their current detected targets after specified time interval in seconds. The default time is 30 seconds. --- @return #ESCORT -function ESCORT:MenuReportTargets( Seconds ) - self:F( { Seconds } ) - - if not self.EscortMenuReportNearbyTargets then - self.EscortMenuReportNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Report targets", self.EscortMenu ) - end - - if not Seconds then - Seconds = 30 - end - - -- Report Targets - self.EscortMenuReportNearbyTargetsNow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets now!", self.EscortMenuReportNearbyTargets, ESCORT._ReportNearbyTargetsNow, { ParamSelf = self } ) - self.EscortMenuReportNearbyTargetsOn = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets on", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = true } ) - self.EscortMenuReportNearbyTargetsOff = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets off", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = false, } ) - - -- Attack Targets - self.EscortMenuAttackNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Attack targets", self.EscortMenu ) - - - --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, Seconds ) - self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, Seconds ) - - return self -end - ---- Defines a menu slot to let the escort attack its detected targets using assisted attack from another escort joined also with the client. --- This menu will appear under **Request assistance from**. --- Note that this method needs to be preceded with the method MenuReportTargets. --- @param #ESCORT self --- @return #ESCORT -function ESCORT:MenuAssistedAttack() - self:F() - - -- Request assistance from other escorts. - -- This is very useful to let f.e. an escorting ship attack a target detected by an escorting plane... - self.EscortMenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, "Request assistance from", self.EscortMenu ) - - return self -end - ---- Defines a menu to let the escort set its rules of engagement. --- All rules of engagement will appear under the menu **ROE**. --- @param #ESCORT self --- @return #ESCORT -function ESCORT:MenuROE( MenuTextFormat ) - self:F( MenuTextFormat ) - - if not self.EscortMenuROE then - -- Rules of Engagement - self.EscortMenuROE = MENU_CLIENT:New( self.EscortClient, "ROE", self.EscortMenu ) - if self.EscortGroup:OptionROEHoldFirePossible() then - self.EscortMenuROEHoldFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Hold Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEHoldFire(), ParamMessage = "Holding weapons!" } ) - end - if self.EscortGroup:OptionROEReturnFirePossible() then - self.EscortMenuROEReturnFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Return Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEReturnFire(), ParamMessage = "Returning fire!" } ) - end - if self.EscortGroup:OptionROEOpenFirePossible() then - self.EscortMenuROEOpenFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Open Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEOpenFire(), ParamMessage = "Opening fire on designated targets!!" } ) - end - if self.EscortGroup:OptionROEWeaponFreePossible() then - self.EscortMenuROEWeaponFree = MENU_CLIENT_COMMAND:New( self.EscortClient, "Weapon Free", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEWeaponFree(), ParamMessage = "Opening fire on targets of opportunity!" } ) - end - end - - return self -end - - ---- Defines a menu to let the escort set its evasion when under threat. --- All rules of engagement will appear under the menu **Evasion**. --- @param #ESCORT self --- @return #ESCORT -function ESCORT:MenuEvasion( MenuTextFormat ) - self:F( MenuTextFormat ) - - if self.EscortGroup:IsAir() then - if not self.EscortMenuEvasion then - -- Reaction to Threats - self.EscortMenuEvasion = MENU_CLIENT:New( self.EscortClient, "Evasion", self.EscortMenu ) - if self.EscortGroup:OptionROTNoReactionPossible() then - self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTNoReaction(), ParamMessage = "Fighting until death!" } ) - end - if self.EscortGroup:OptionROTPassiveDefensePossible() then - self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTPassiveDefense(), ParamMessage = "Defending using jammers, chaff and flares!" } ) - end - if self.EscortGroup:OptionROTEvadeFirePossible() then - self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTEvadeFire(), ParamMessage = "Evading on enemy fire!" } ) - end - if self.EscortGroup:OptionROTVerticalPossible() then - self.EscortMenuOptionEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTVertical(), ParamMessage = "Evading on enemy fire with vertical manoeuvres!" } ) - end - end - end - - return self -end - ---- Defines a menu to let the escort resume its mission from a waypoint on its route. --- All rules of engagement will appear under the menu **Resume mission from**. --- @param #ESCORT self --- @return #ESCORT -function ESCORT:MenuResumeMission() - self:F() - - if not self.EscortMenuResumeMission then - -- Mission Resume Menu Root - self.EscortMenuResumeMission = MENU_CLIENT:New( self.EscortClient, "Resume mission from", self.EscortMenu ) - end - - return self -end - - ---- @param #MENUPARAM MenuParam -function ESCORT._HoldPosition( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local OrbitGroup = MenuParam.ParamOrbitGroup -- Group#GROUP - local OrbitUnit = OrbitGroup:GetUnit(1) -- Unit#UNIT - local OrbitHeight = MenuParam.ParamHeight - local OrbitSeconds = MenuParam.ParamSeconds -- Not implemented yet - - routines.removeFunction( self.FollowScheduler ) - - local PointFrom = {} - local GroupPoint = EscortGroup:GetUnit(1):GetPointVec3() - PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.z - PointFrom.speed = 250 - PointFrom.type = AI.Task.WaypointType.TURNING_POINT - PointFrom.alt = GroupPoint.y - PointFrom.alt_type = AI.Task.AltitudeType.BARO - - local OrbitPoint = OrbitUnit:GetPointVec2() - local PointTo = {} - PointTo.x = OrbitPoint.x - PointTo.y = OrbitPoint.y - PointTo.speed = 250 - PointTo.type = AI.Task.WaypointType.TURNING_POINT - PointTo.alt = OrbitHeight - PointTo.alt_type = AI.Task.AltitudeType.BARO - PointTo.task = EscortGroup:TaskOrbitCircleAtVec2( OrbitPoint, OrbitHeight, 0 ) - - local Points = { PointFrom, PointTo } - - EscortGroup:OptionROEHoldFire() - EscortGroup:OptionROTPassiveDefense() - - EscortGroup:SetTask( EscortGroup:TaskRoute( Points ) ) - EscortGroup:MessageToClient( "Orbiting at location.", 10, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._JoinUpAndFollow( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - self.Distance = MenuParam.ParamDistance - - self:JoinUpAndFollow( EscortGroup, EscortClient, self.Distance ) -end - ---- JoinsUp and Follows a CLIENT. --- @param Escort#ESCORT self --- @param Group#GROUP EscortGroup --- @param Client#CLIENT EscortClient --- @param DCSTypes#Distance Distance -function ESCORT:JoinUpAndFollow( EscortGroup, EscortClient, Distance ) - self:F( { EscortGroup, EscortClient, Distance } ) - - if self.FollowScheduler then - routines.removeFunction( self.FollowScheduler ) - end - - EscortGroup:OptionROEHoldFire() - EscortGroup:OptionROTPassiveDefense() - - self.EscortMode = ESCORT.MODE.FOLLOW - - self.CT1 = 0 - self.GT1 = 0 - --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + 1, .5 ) - self.FollowScheduler = SCHEDULER:New( self, self._FollowScheduler, { Distance }, 1, .5, .1 ) - EscortGroup:MessageToClient( "Rejoining and Following at " .. Distance .. "!", 30, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._Flare( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local Color = MenuParam.ParamColor - local Message = MenuParam.ParamMessage - - EscortGroup:GetUnit(1):Flare( Color ) - EscortGroup:MessageToClient( Message, 10, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._Smoke( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local Color = MenuParam.ParamColor - local Message = MenuParam.ParamMessage - - EscortGroup:GetUnit(1):Smoke( Color ) - EscortGroup:MessageToClient( Message, 10, EscortClient ) -end - - ---- @param #MENUPARAM MenuParam -function ESCORT._ReportNearbyTargetsNow( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - self:_ReportTargetsScheduler() - -end - -function ESCORT._SwitchReportNearbyTargets( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - self.ReportTargets = MenuParam.ParamReportTargets - - if self.ReportTargets then - if not self.ReportTargetsScheduler then - --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, 30 ) - self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, 30 ) - end - else - routines.removeFunction( self.ReportTargetsScheduler ) - self.ReportTargetsScheduler = nil - end -end - ---- @param #MENUPARAM MenuParam -function ESCORT._ScanTargets( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local ScanDuration = MenuParam.ParamScanDuration - - if self.FollowScheduler then - routines.removeFunction( self.FollowScheduler ) - end - - self:T( { "FollowScheduler after removefunction: ", self.FollowScheduler } ) - - if EscortGroup:IsHelicopter() then - SCHEDULER:New( EscortGroup, EscortGroup.PushTask, - { EscortGroup:TaskControlled( - EscortGroup:TaskOrbitCircle( 200, 20 ), - EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) - ) - }, - 1 - ) - elseif EscortGroup:IsAirPlane() then - SCHEDULER:New( EscortGroup, EscortGroup.PushTask, - { EscortGroup:TaskControlled( - EscortGroup:TaskOrbitCircle( 1000, 500 ), - EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) - ) - }, - 1 - ) - end - - EscortGroup:MessageToClient( "Scanning targets for " .. ScanDuration .. " seconds.", ScanDuration, EscortClient ) - - if self.EscortMode == ESCORT.MODE.FOLLOW then - --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + ScanDuration, 1 ) - self.FollowScheduler:Start() - end - -end - -function _Resume( EscortGroup ) - env.info( '_Resume' ) - - local Escort = EscortGroup.Escort -- #ESCORT - env.info( "EscortMode = " .. Escort.EscortMode ) - if Escort.EscortMode == ESCORT.MODE.FOLLOW then - Escort:JoinUpAndFollow( EscortGroup, Escort.EscortClient, Escort.Distance ) - end - -end - ---- @param #MENUPARAM MenuParam -function ESCORT._AttackTarget( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT - - if self.FollowScheduler then - routines.removeFunction( self.FollowScheduler ) - end - - self:T( AttackUnit ) - - if EscortGroup:IsAir() then - EscortGroup:OptionROEOpenFire() - EscortGroup:OptionROTPassiveDefense() - EscortGroup.Escort = self -- Need to do this trick to get the reference for the escort in the _Resume function. --- routines.scheduleFunction( --- EscortGroup.PushTask, --- { EscortGroup, --- EscortGroup:TaskCombo( --- { EscortGroup:TaskAttackUnit( AttackUnit ), --- EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) --- } --- ) --- }, timer.getTime() + 10 --- ) - SCHEDULER:New( EscortGroup, - EscortGroup.PushTask, - { EscortGroup:TaskCombo( - { EscortGroup:TaskAttackUnit( AttackUnit ), - EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) - } - ) - }, 10 - ) - else --- routines.scheduleFunction( --- EscortGroup.PushTask, --- { EscortGroup, --- EscortGroup:TaskCombo( --- { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) --- } --- ) --- }, timer.getTime() + 10 --- ) - SCHEDULER:New( EscortGroup, - EscortGroup.PushTask, - { EscortGroup:TaskCombo( - { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) - } - ) - }, 10 - ) - end - EscortGroup:MessageToClient( "Engaging Designated Unit!", 10, EscortClient ) - - -end - ---- @param #MENUPARAM MenuParam -function ESCORT._AssistTarget( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - local EscortGroupAttack = MenuParam.ParamEscortGroup - local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT - - if self.FollowScheduler then - routines.removeFunction( self.FollowScheduler ) - end - - - self:T( AttackUnit ) - - if EscortGroupAttack:IsAir() then - EscortGroupAttack:OptionROEOpenFire() - EscortGroupAttack:OptionROTVertical() --- routines.scheduleFunction( --- EscortGroupAttack.PushTask, --- { EscortGroupAttack, --- EscortGroupAttack:TaskCombo( --- { EscortGroupAttack:TaskAttackUnit( AttackUnit ), --- EscortGroupAttack:TaskOrbitCircle( 500, 350 ) --- } --- ) --- }, timer.getTime() + 10 --- ) - SCHDULER:New( EscortGroupAttack, - EscortGroupAttack.PushTask, - { EscortGroupAttack:TaskCombo( - { EscortGroupAttack:TaskAttackUnit( AttackUnit ), - EscortGroupAttack:TaskOrbitCircle( 500, 350 ) - } - ) - }, 10 - ) - else --- routines.scheduleFunction( --- EscortGroupAttack.PushTask, --- { EscortGroupAttack, --- EscortGroupAttack:TaskCombo( --- { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) --- } --- ) --- }, timer.getTime() + 10 --- ) - SCHEDULER:New( EscortGroupAttack, - EscortGroupAttack.PushTask, - { EscortGroupAttack:TaskCombo( - { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) - } - ) - }, 10 - ) - end - EscortGroupAttack:MessageToClient( "Assisting with the destroying the enemy unit!", 10, EscortClient ) - -end - ---- @param #MENUPARAM MenuParam -function ESCORT._ROE( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local EscortROEFunction = MenuParam.ParamFunction - local EscortROEMessage = MenuParam.ParamMessage - - pcall( function() EscortROEFunction() end ) - EscortGroup:MessageToClient( EscortROEMessage, 10, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._ROT( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local EscortROTFunction = MenuParam.ParamFunction - local EscortROTMessage = MenuParam.ParamMessage - - pcall( function() EscortROTFunction() end ) - EscortGroup:MessageToClient( EscortROTMessage, 10, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._ResumeMission( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local WayPoint = MenuParam.ParamWayPoint - - routines.removeFunction( self.FollowScheduler ) - self.FollowScheduler = nil - - local WayPoints = EscortGroup:GetTaskRoute() - self:T( WayPoint, WayPoints ) - - for WayPointIgnore = 1, WayPoint do - table.remove( WayPoints, 1 ) - end - - --routines.scheduleFunction( EscortGroup.SetTask, {EscortGroup, EscortGroup:TaskRoute( WayPoints ) }, timer.getTime() + 1 ) - SCHEDULER:New( EscortGroup, EscortGroup.SetTask, { EscortGroup:TaskRoute( WayPoints ) }, 1 ) - - EscortGroup:MessageToClient( "Resuming mission from waypoint " .. WayPoint .. ".", 10, EscortClient ) -end - ---- Registers the waypoints --- @param #ESCORT self --- @return #table -function ESCORT:RegisterRoute() - self:F() - - local EscortGroup = self.EscortGroup -- Group#GROUP - - local TaskPoints = EscortGroup:GetTaskRoute() - - self:T( TaskPoints ) - - return TaskPoints -end - ---- @param Escort#ESCORT self -function ESCORT:_FollowScheduler( FollowDistance ) - self:F( { FollowDistance }) - - if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then - - local ClientUnit = self.EscortClient:GetClientGroupUnit() - local GroupUnit = self.EscortGroup:GetUnit( 1 ) - - if self.CT1 == 0 and self.GT1 == 0 then - self.CV1 = ClientUnit:GetPointVec3() - self.CT1 = timer.getTime() - self.GV1 = GroupUnit:GetPointVec3() - self.GT1 = timer.getTime() - else - local CT1 = self.CT1 - local CT2 = timer.getTime() - local CV1 = self.CV1 - local CV2 = ClientUnit:GetPointVec3() - self.CT1 = CT2 - self.CV1 = CV2 - - local CD = ( ( CV2.x - CV1.x )^2 + ( CV2.y - CV1.y )^2 + ( CV2.z - CV1.z )^2 ) ^ 0.5 - local CT = CT2 - CT1 - - local CS = ( 3600 / CT ) * ( CD / 1000 ) - - self:T2( { "Client:", CS, CD, CT, CV2, CV1, CT2, CT1 } ) - - local GT1 = self.GT1 - local GT2 = timer.getTime() - local GV1 = self.GV1 - local GV2 = GroupUnit:GetPointVec3() - self.GT1 = GT2 - self.GV1 = GV2 - - local GD = ( ( GV2.x - GV1.x )^2 + ( GV2.y - GV1.y )^2 + ( GV2.z - GV1.z )^2 ) ^ 0.5 - local GT = GT2 - GT1 - - local GS = ( 3600 / GT ) * ( GD / 1000 ) - - self:T2( { "Group:", GS, GD, GT, GV2, GV1, GT2, GT1 } ) - - -- Calculate the group direction vector - local GV = { x = GV2.x - CV2.x, y = GV2.y - CV2.y, z = GV2.z - CV2.z } - - -- Calculate GH2, GH2 with the same height as CV2. - local GH2 = { x = GV2.x, y = CV2.y, z = GV2.z } - - -- Calculate the angle of GV to the orthonormal plane - local alpha = math.atan2( GV.z, GV.x ) - - -- Now we calculate the intersecting vector between the circle around CV2 with radius FollowDistance and GH2. - -- From the GeoGebra model: CVI = (x(CV2) + FollowDistance cos(alpha), y(GH2) + FollowDistance sin(alpha), z(CV2)) - local CVI = { x = CV2.x + FollowDistance * math.cos(alpha), - y = GH2.y, - z = CV2.z + FollowDistance * math.sin(alpha), - } - - -- Calculate the direction vector DV of the escort group. We use CVI as the base and CV2 as the direction. - local DV = { x = CV2.x - CVI.x, y = CV2.y - CVI.y, z = CV2.z - CVI.z } - - -- We now calculate the unary direction vector DVu, so that we can multiply DVu with the speed, which is expressed in meters / s. - -- We need to calculate this vector to predict the point the escort group needs to fly to according its speed. - -- The distance of the destination point should be far enough not to have the aircraft starting to swipe left to right... - local DVu = { x = DV.x / FollowDistance, y = DV.y / FollowDistance, z = DV.z / FollowDistance } - - -- Now we can calculate the group destination vector GDV. - local GDV = { x = DVu.x * CS * 8 + CVI.x, y = CVI.y, z = DVu.z * CS * 8 + CVI.z } - - --trigger.action.smoke( GDV, trigger.smokeColor.Red ) - self:T2( { "CV2:", CV2 } ) - self:T2( { "CVI:", CVI } ) - self:T2( { "GDV:", GDV } ) - - -- Measure distance between client and group - local CatchUpDistance = ( ( GDV.x - GV2.x )^2 + ( GDV.y - GV2.y )^2 + ( GDV.z - GV2.z )^2 ) ^ 0.5 - - -- The calculation of the Speed would simulate that the group would take 30 seconds to overcome - -- the requested Distance). - local Time = 10 - local CatchUpSpeed = ( CatchUpDistance - ( CS * 8.4 ) ) / Time - - local Speed = CS + CatchUpSpeed - if Speed < 0 then - Speed = 0 - end - - self:T( { "Client Speed, Escort Speed, Speed, FlyDistance, Time:", CS, GS, Speed, Distance, Time } ) - - -- Now route the escort to the desired point with the desired speed. - self.EscortGroup:TaskRouteToVec3( GDV, Speed / 3.6 ) -- DCS models speed in Mps (Miles per second) - end - return true - end - - return false -end - - ---- Report Targets Scheduler. --- @param #ESCORT self -function ESCORT:_ReportTargetsScheduler() - self:F( self.EscortGroup:GetName() ) - - if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then - local EscortGroupName = self.EscortGroup:GetName() - local EscortTargets = self.EscortGroup:GetDetectedTargets() - - local ClientEscortTargets = self.EscortClient._EscortGroups[EscortGroupName].Targets - - local EscortTargetMessages = "" - for EscortTargetID, EscortTarget in pairs( EscortTargets ) do - local EscortObject = EscortTarget.object - self:T( EscortObject ) - if EscortObject and EscortObject:isExist() and EscortObject.id_ < 50000000 then - - local EscortTargetUnit = UNIT:Find( EscortObject ) - local EscortTargetUnitName = EscortTargetUnit:GetName() - - - - -- local EscortTargetIsDetected, - -- EscortTargetIsVisible, - -- EscortTargetLastTime, - -- EscortTargetKnowType, - -- EscortTargetKnowDistance, - -- EscortTargetLastPos, - -- EscortTargetLastVelocity - -- = self.EscortGroup:IsTargetDetected( EscortObject ) - -- - -- self:T( { EscortTargetIsDetected, - -- EscortTargetIsVisible, - -- EscortTargetLastTime, - -- EscortTargetKnowType, - -- EscortTargetKnowDistance, - -- EscortTargetLastPos, - -- EscortTargetLastVelocity } ) - - - local EscortTargetUnitPositionVec3 = EscortTargetUnit:GetPointVec3() - local EscortPositionVec3 = self.EscortGroup:GetPointVec3() - local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + - ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + - ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 - ) ^ 0.5 / 1000 - - self:T( { self.EscortGroup:GetName(), EscortTargetUnit:GetName(), Distance, EscortTarget } ) - - if Distance <= 15 then - - if not ClientEscortTargets[EscortTargetUnitName] then - ClientEscortTargets[EscortTargetUnitName] = {} - end - ClientEscortTargets[EscortTargetUnitName].AttackUnit = EscortTargetUnit - ClientEscortTargets[EscortTargetUnitName].visible = EscortTarget.visible - ClientEscortTargets[EscortTargetUnitName].type = EscortTarget.type - ClientEscortTargets[EscortTargetUnitName].distance = EscortTarget.distance - else - if ClientEscortTargets[EscortTargetUnitName] then - ClientEscortTargets[EscortTargetUnitName] = nil - end - end - end - end - - self:T( { "Sorting Targets Table:", ClientEscortTargets } ) - table.sort( ClientEscortTargets, function( a, b ) return a.Distance < b.Distance end ) - self:T( { "Sorted Targets Table:", ClientEscortTargets } ) - - -- Remove the sub menus of the Attack menu of the Escort for the EscortGroup. - self.EscortMenuAttackNearbyTargets:RemoveSubMenus() - - if self.EscortMenuTargetAssistance then - self.EscortMenuTargetAssistance:RemoveSubMenus() - end - - --for MenuIndex = 1, #self.EscortMenuAttackTargets do - -- self:T( { "Remove Menu:", self.EscortMenuAttackTargets[MenuIndex] } ) - -- self.EscortMenuAttackTargets[MenuIndex] = self.EscortMenuAttackTargets[MenuIndex]:Remove() - --end - - - if ClientEscortTargets then - for ClientEscortTargetUnitName, ClientEscortTargetData in pairs( ClientEscortTargets ) do - - for ClientEscortGroupName, EscortGroupData in pairs( self.EscortClient._EscortGroups ) do - - if ClientEscortTargetData and ClientEscortTargetData.AttackUnit:IsAlive() then - - local EscortTargetMessage = "" - local EscortTargetCategoryName = ClientEscortTargetData.AttackUnit:GetCategoryName() - local EscortTargetCategoryType = ClientEscortTargetData.AttackUnit:GetTypeName() - if ClientEscortTargetData.type then - EscortTargetMessage = EscortTargetMessage .. EscortTargetCategoryName .. " (" .. EscortTargetCategoryType .. ") at " - else - EscortTargetMessage = EscortTargetMessage .. "Unknown target at " - end - - local EscortTargetUnitPositionVec3 = ClientEscortTargetData.AttackUnit:GetPointVec3() - local EscortPositionVec3 = self.EscortGroup:GetPointVec3() - local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + - ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + - ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 - ) ^ 0.5 / 1000 - - self:T( { self.EscortGroup:GetName(), ClientEscortTargetData.AttackUnit:GetName(), Distance, ClientEscortTargetData.AttackUnit } ) - if ClientEscortTargetData.visible == false then - EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " estimated km" - else - EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " km" - end - - if ClientEscortTargetData.visible then - EscortTargetMessage = EscortTargetMessage .. ", visual" - end - - if ClientEscortGroupName == EscortGroupName then - - MENU_CLIENT_COMMAND:New( self.EscortClient, - EscortTargetMessage, - self.EscortMenuAttackNearbyTargets, - ESCORT._AttackTarget, - { ParamSelf = self, - ParamUnit = ClientEscortTargetData.AttackUnit - } - ) - EscortTargetMessages = EscortTargetMessages .. "\n - " .. EscortTargetMessage - else - if self.EscortMenuTargetAssistance then - local MenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, EscortGroupData.EscortName, self.EscortMenuTargetAssistance ) - MENU_CLIENT_COMMAND:New( self.EscortClient, - EscortTargetMessage, - MenuTargetAssistance, - ESCORT._AssistTarget, - { ParamSelf = self, - ParamEscortGroup = EscortGroupData.EscortGroup, - ParamUnit = ClientEscortTargetData.AttackUnit - } - ) - end - end - else - ClientEscortTargetData = nil - end - end - end - - if EscortTargetMessages ~= "" and self.ReportTargets == true then - self.EscortGroup:MessageToClient( "Detected targets within 15 km range:" .. EscortTargetMessages:gsub("\n$",""), 20, self.EscortClient ) - else - self.EscortGroup:MessageToClient( "No targets detected!", 20, self.EscortClient ) - end - end - - if self.EscortMenuResumeMission then - self.EscortMenuResumeMission:RemoveSubMenus() - - -- if self.EscortMenuResumeWayPoints then - -- for MenuIndex = 1, #self.EscortMenuResumeWayPoints do - -- self:T( { "Remove Menu:", self.EscortMenuResumeWayPoints[MenuIndex] } ) - -- self.EscortMenuResumeWayPoints[MenuIndex] = self.EscortMenuResumeWayPoints[MenuIndex]:Remove() - -- end - -- end - - local TaskPoints = self:RegisterRoute() - for WayPointID, WayPoint in pairs( TaskPoints ) do - local EscortPositionVec3 = self.EscortGroup:GetPointVec3() - local Distance = ( ( WayPoint.x - EscortPositionVec3.x )^2 + - ( WayPoint.y - EscortPositionVec3.z )^2 - ) ^ 0.5 / 1000 - MENU_CLIENT_COMMAND:New( self.EscortClient, "Waypoint " .. WayPointID .. " at " .. string.format( "%.2f", Distance ).. "km", self.EscortMenuResumeMission, ESCORT._ResumeMission, { ParamSelf = self, ParamWayPoint = WayPointID } ) - end - end - return true - end - - return false -end ---- Provides missile training functions. --- --- @{#MISSILETRAINER} class --- ======================== --- 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. --- --- When running a mission where MISSILETRAINER is used, the following radio menu structure ( 'Radio Menu' -> 'Other (F10)' -> 'MissileTrainer' ) options are available for the players: --- --- * **Messages**: Menu to configure all messages. --- * **Messages On**: Show all messages. --- * **Messages Off**: Disable all messages. --- * **Tracking**: Menu to configure missile tracking messages. --- * **To All**: Shows missile tracking messages to all players. --- * **To Target**: Shows missile tracking messages only to the player where the missile is targetted at. --- * **Tracking On**: Show missile tracking messages. --- * **Tracking Off**: Disable missile tracking messages. --- * **Frequency Increase**: Increases the missile tracking message frequency with one second. --- * **Frequency Decrease**: Decreases the missile tracking message frequency with one second. --- * **Alerts**: Menu to configure alert messages. --- * **To All**: Shows alert messages to all players. --- * **To Target**: Shows alert messages only to the player where the missile is (was) targetted at. --- * **Hits On**: Show missile hit alert messages. --- * **Hits Off**: Disable missile hit alert messages. --- * **Launches On**: Show missile launch messages. --- * **Launches Off**: Disable missile launch messages. --- * **Details**: Menu to configure message details. --- * **Range On**: Shows range information when a missile is fired to a target. --- * **Range Off**: Disable range information when a missile is fired to a target. --- * **Bearing On**: Shows bearing information when a missile is fired to a target. --- * **Bearing Off**: Disable bearing information when a missile is fired to a target. --- * **Distance**: Menu to configure the distance when a missile needs to be destroyed when near to a player, during tracking. This will improve/influence hit calculation accuracy, but has the risk of damaging the aircraft when the missile reaches the aircraft before the distance is measured. --- * **50 meter**: Destroys the missile when the distance to the aircraft is below or equal to 50 meter. --- * **100 meter**: Destroys the missile when the distance to the aircraft is below or equal to 100 meter. --- * **150 meter**: Destroys the missile when the distance to the aircraft is below or equal to 150 meter. --- * **200 meter**: Destroys the missile when the distance to the aircraft is below or equal to 200 meter. --- --- --- 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: --- --- * @{#MISSILETRAINER.InitMessagesOnOff}: Sets by default the display of any message to be ON or OFF. --- * @{#MISSILETRAINER.InitTrackingToAll}: Sets by default the missile tracking report for all players or only for those missiles targetted to you. --- * @{#MISSILETRAINER.InitTrackingOnOff}: Sets by default the display of missile tracking report to be ON or OFF. --- * @{#MISSILETRAINER.InitTrackingFrequency}: Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. --- * @{#MISSILETRAINER.InitAlertsToAll}: Sets by default the display of alerts to be shown to all players or only to you. --- * @{#MISSILETRAINER.InitAlertsHitsOnOff}: Sets by default the display of hit alerts ON or OFF. --- * @{#MISSILETRAINER.InitAlertsLaunchesOnOff}: Sets by default the display of launch alerts ON or OFF. --- * @{#MISSILETRAINER.InitRangeOnOff}: Sets by default the display of range information of missiles ON of OFF. --- * @{#MISSILETRAINER.InitBearingOnOff}: Sets by default the display of bearing information of missiles ON of OFF. --- * @{#MISSILETRAINER.InitMenusOnOff}: Allows to configure the options through the radio menu. --- --- @module MissileTrainer --- @author FlightControl - - -Include.File( "Client" ) -Include.File( "Scheduler" ) - ---- The MISSILETRAINER class --- @type MISSILETRAINER --- @extends Base#BASE -MISSILETRAINER = { - ClassName = "MISSILETRAINER", -} - ---- 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. --- @param #MISSILETRAINER self --- @param #number Distance The distance in meters when a tracked missile needs to be destroyed when close to a player. --- @param #string Briefing (Optional) Will show a text to the players when starting their mission. Can be used for briefing purposes. --- @return #MISSILETRAINER -function MISSILETRAINER:New( Distance, Briefing ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( Distance ) - - if Briefing then - self.Briefing = Briefing - end - - self.Schedulers = {} - self.SchedulerID = 0 - - self.MessageInterval = 2 - self.MessageLastTime = timer.getTime() - - self.Distance = Distance / 1000 - - _EVENTDISPATCHER:OnShot( self._EventShot, self ) - - self.DB = DATABASE:New():FilterStart() - self.DBClients = self.DB.Clients - self.DBUnits = self.DB.Units - - for ClientID, Client in pairs( self.DBClients ) do - - local function _Alive( Client ) - - if self.Briefing then - Client:Message( self.Briefing, 15, "HELLO WORLD", "Trainer" ) - end - - if self.MenusOnOff == true then - Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "MENU", "Trainer" ) - - Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) -- Menu#MENU_CLIENT - - Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu ) - Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } ) - Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } ) - - Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu ) - Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } ) - Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } ) - Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = true } ) - Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = false } ) - Client.MenuTrackIncrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Increase", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = -1 } ) - Client.MenuTrackDecrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Decrease", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = 1 } ) - - Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu ) - Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } ) - Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } ) - Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = true } ) - Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = false } ) - Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = true } ) - Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = false } ) - - Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu ) - Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = true } ) - Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = false } ) - Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = true } ) - Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = false } ) - - Client.MenuDistance = MENU_CLIENT:New( Client, "Set distance to plane", Client.MainMenu ) - Client.MenuDistance50 = MENU_CLIENT_COMMAND:New( Client, "50 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 50 / 1000 } ) - Client.MenuDistance100 = MENU_CLIENT_COMMAND:New( Client, "100 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 100 / 1000 } ) - Client.MenuDistance150 = MENU_CLIENT_COMMAND:New( Client, "150 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 150 / 1000 } ) - Client.MenuDistance200 = MENU_CLIENT_COMMAND:New( Client, "200 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 200 / 1000 } ) - else - if Client.MainMenu then - Client.MainMenu:Remove() - end - end - - - local ClientID = Client:GetID() - self:T( ClientID ) - if not self.TrackingMissiles[ClientID] then - self.TrackingMissiles[ClientID] = {} - end - self.TrackingMissiles[ClientID].Client = Client - if not self.TrackingMissiles[ClientID].MissileData then - self.TrackingMissiles[ClientID].MissileData = {} - end - end - - Client:Alive( _Alive ) - - end - --- self.DB:ForEachClient( --- --- @param Client#CLIENT Client --- function( Client ) --- --- ... actions ... --- --- end --- ) - - self.MessagesOnOff = true - - self.TrackingToAll = false - self.TrackingOnOff = true - self.TrackingFrequency = 3 - - self.AlertsToAll = true - self.AlertsHitsOnOff = true - self.AlertsLaunchesOnOff = true - - self.DetailsRangeOnOff = true - self.DetailsBearingOnOff = true - - self.MenusOnOff = true - - self.TrackingMissiles = {} - - self.TrackingScheduler = SCHEDULER:New( self, self._TrackMissiles, {}, 0.5, 0.05, 0 ) - - return self -end - --- Initialization methods. - - ---- Sets by default the display of any message to be ON or OFF. --- @param #MISSILETRAINER self --- @param #boolean MessagesOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitMessagesOnOff( MessagesOnOff ) - self:F( MessagesOnOff ) - - self.MessagesOnOff = MessagesOnOff - if self.MessagesOnOff == true then - MESSAGE:New( "Messages ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Messages OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the missile tracking report for all players or only for those missiles targetted to you. --- @param #MISSILETRAINER self --- @param #boolean TrackingToAll true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitTrackingToAll( TrackingToAll ) - self:F( TrackingToAll ) - - self.TrackingToAll = TrackingToAll - if self.TrackingToAll == true then - MESSAGE:New( "Missile tracking to all players ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Missile tracking to all players OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of missile tracking report to be ON or OFF. --- @param #MISSILETRAINER self --- @param #boolean TrackingOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitTrackingOnOff( TrackingOnOff ) - self:F( TrackingOnOff ) - - self.TrackingOnOff = TrackingOnOff - if self.TrackingOnOff == true then - MESSAGE:New( "Missile tracking ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Missile tracking OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. --- The default frequency is a 3 second interval, so the Tracking Frequency parameter specifies the increase or decrease from the default 3 seconds or the last frequency update. --- @param #MISSILETRAINER self --- @param #number TrackingFrequency Provide a negative or positive value in seconds to incraese or decrease the display frequency. --- @return #MISSILETRAINER self -function MISSILETRAINER:InitTrackingFrequency( TrackingFrequency ) - self:F( TrackingFrequency ) - - self.TrackingFrequency = self.TrackingFrequency + TrackingFrequency - if self.TrackingFrequency < 0.5 then - self.TrackingFrequency = 0.5 - end - if self.TrackingFrequency then - MESSAGE:New( "Missile tracking frequency is " .. self.TrackingFrequency .. " seconds.", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of alerts to be shown to all players or only to you. --- @param #MISSILETRAINER self --- @param #boolean AlertsToAll true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitAlertsToAll( AlertsToAll ) - self:F( AlertsToAll ) - - self.AlertsToAll = AlertsToAll - if self.AlertsToAll == true then - MESSAGE:New( "Alerts to all players ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Alerts to all players OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of hit alerts ON or OFF. --- @param #MISSILETRAINER self --- @param #boolean AlertsHitsOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitAlertsHitsOnOff( AlertsHitsOnOff ) - self:F( AlertsHitsOnOff ) - - self.AlertsHitsOnOff = AlertsHitsOnOff - if self.AlertsHitsOnOff == true then - MESSAGE:New( "Alerts Hits ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Alerts Hits OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of launch alerts ON or OFF. --- @param #MISSILETRAINER self --- @param #boolean AlertsLaunchesOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitAlertsLaunchesOnOff( AlertsLaunchesOnOff ) - self:F( AlertsLaunchesOnOff ) - - self.AlertsLaunchesOnOff = AlertsLaunchesOnOff - if self.AlertsLaunchesOnOff == true then - MESSAGE:New( "Alerts Launches ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Alerts Launches OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of range information of missiles ON of OFF. --- @param #MISSILETRAINER self --- @param #boolean DetailsRangeOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitRangeOnOff( DetailsRangeOnOff ) - self:F( DetailsRangeOnOff ) - - self.DetailsRangeOnOff = DetailsRangeOnOff - if self.DetailsRangeOnOff == true then - MESSAGE:New( "Range display ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Range display OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of bearing information of missiles ON of OFF. --- @param #MISSILETRAINER self --- @param #boolean DetailsBearingOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitBearingOnOff( DetailsBearingOnOff ) - self:F( DetailsBearingOnOff ) - - self.DetailsBearingOnOff = DetailsBearingOnOff - if self.DetailsBearingOnOff == true then - MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Enables / Disables the menus. --- @param #MISSILETRAINER self --- @param #boolean MenusOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitMenusOnOff( MenusOnOff ) - self:F( MenusOnOff ) - - self.MenusOnOff = MenusOnOff - if self.MenusOnOff == true then - MESSAGE:New( "Menus are ENABLED (only when a player rejoins a slot)", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Menus are DISABLED", "Menu", 15, "ID" ):ToAll() - end - - return self -end - - --- Menu functions - -function MISSILETRAINER._MenuMessages( MenuParameters ) - - local self = MenuParameters.MenuSelf - - if MenuParameters.MessagesOnOff ~= nil then - self:InitMessagesOnOff( MenuParameters.MessagesOnOff ) - end - - if MenuParameters.TrackingToAll ~= nil then - self:InitTrackingToAll( MenuParameters.TrackingToAll ) - end - - if MenuParameters.TrackingOnOff ~= nil then - self:InitTrackingOnOff( MenuParameters.TrackingOnOff ) - end - - if MenuParameters.TrackingFrequency ~= nil then - self:InitTrackingFrequency( MenuParameters.TrackingFrequency ) - end - - if MenuParameters.AlertsToAll ~= nil then - self:InitAlertsToAll( MenuParameters.AlertsToAll ) - end - - if MenuParameters.AlertsHitsOnOff ~= nil then - self:InitAlertsHitsOnOff( MenuParameters.AlertsHitsOnOff ) - end - - if MenuParameters.AlertsLaunchesOnOff ~= nil then - self:InitAlertsLaunchesOnOff( MenuParameters.AlertsLaunchesOnOff ) - end - - if MenuParameters.DetailsRangeOnOff ~= nil then - self:InitRangeOnOff( MenuParameters.DetailsRangeOnOff ) - end - - if MenuParameters.DetailsBearingOnOff ~= nil then - self:InitBearingOnOff( MenuParameters.DetailsBearingOnOff ) - end - - if MenuParameters.Distance ~= nil then - self.Distance = MenuParameters.Distance - MESSAGE:New( "Hit detection distance set to " .. self.Distance .. " meters", "Menu", 15, "ID" ):ToAll() - end - -end - ---- 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. --- @param #MISSILETRAINER self --- @param Event#EVENTDATA Event -function MISSILETRAINER:_EventShot( Event ) - self:F( { Event } ) - - local TrainerSourceDCSUnit = Event.IniDCSUnit - local TrainerSourceDCSUnitName = Event.IniDCSUnitName - local TrainerWeapon = Event.Weapon -- Identify the weapon fired - local TrainerWeaponName = Event.WeaponName -- return weapon type - - self:T( "Missile Launched = " .. TrainerWeaponName ) - - local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target - local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit ) - local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill - - self:T(TrainerTargetDCSUnitName ) - - local Client = self.DBClients[TrainerTargetDCSUnitName] - if Client then - - local TrainerSourceUnit = UNIT:Find( TrainerSourceDCSUnit ) - local TrainerTargetUnit = UNIT:Find( TrainerTargetDCSUnit ) - - if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then - - local Message = MESSAGE:New( - string.format( "%s launched a %s", - TrainerSourceUnit:GetTypeName(), - TrainerWeaponName - ) .. self:_AddRange( Client, TrainerWeapon ) .. self:_AddBearing( Client, TrainerWeapon ),"Launch Alert", 5, "ID" ) - - if self.AlertsToAll then - Message:ToAll() - else - Message:ToClient( Client ) - end - end - - local ClientID = Client:GetID() - local MissileData = {} - MissileData.TrainerSourceUnit = TrainerSourceUnit - MissileData.TrainerWeapon = TrainerWeapon - MissileData.TrainerTargetUnit = TrainerTargetUnit - MissileData.TrainerWeaponTypeName = TrainerWeapon:getTypeName() - MissileData.TrainerWeaponLaunched = true - table.insert( self.TrackingMissiles[ClientID].MissileData, MissileData ) - --self:T( self.TrackingMissiles ) - end -end - -function MISSILETRAINER:_AddRange( Client, TrainerWeapon ) - - local RangeText = "" - - if self.DetailsRangeOnOff then - - local PositionMissile = TrainerWeapon:getPoint() - local PositionTarget = Client:GetPointVec3() - - local Range = ( ( PositionMissile.x - PositionTarget.x )^2 + - ( PositionMissile.y - PositionTarget.y )^2 + - ( PositionMissile.z - PositionTarget.z )^2 - ) ^ 0.5 / 1000 - - RangeText = string.format( ", at %4.2fkm", Range ) - end - - return RangeText -end - -function MISSILETRAINER:_AddBearing( Client, TrainerWeapon ) - - local BearingText = "" - - if self.DetailsBearingOnOff then - - local PositionMissile = TrainerWeapon:getPoint() - local PositionTarget = Client:GetPointVec3() - - self:T2( { PositionTarget, PositionMissile }) - - local DirectionVector = { x = PositionMissile.x - PositionTarget.x, y = PositionMissile.y - PositionTarget.y, z = PositionMissile.z - PositionTarget.z } - local DirectionRadians = math.atan2( DirectionVector.z, DirectionVector.x ) - --DirectionRadians = DirectionRadians + routines.getNorthCorrection( PositionTarget ) - if DirectionRadians < 0 then - DirectionRadians = DirectionRadians + 2 * math.pi - end - local DirectionDegrees = DirectionRadians * 180 / math.pi - - BearingText = string.format( ", %d degrees", DirectionDegrees ) - end - - return BearingText -end - - -function MISSILETRAINER:_TrackMissiles() - self:F2() - - - local ShowMessages = false - if self.MessagesOnOff and self.MessageLastTime + self.TrackingFrequency <= timer.getTime() then - self.MessageLastTime = timer.getTime() - ShowMessages = true - end - - -- ALERTS PART - - -- Loop for all Player Clients to check the alerts and deletion of missiles. - for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do - - local Client = ClientData.Client - self:T2( { Client:GetName() } ) - - for MissileDataID, MissileData in pairs( ClientData.MissileData ) do - self:T3( MissileDataID ) - - local TrainerSourceUnit = MissileData.TrainerSourceUnit - local TrainerWeapon = MissileData.TrainerWeapon - local TrainerTargetUnit = MissileData.TrainerTargetUnit - local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName - local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched - - if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then - local PositionMissile = TrainerWeapon:getPosition().p - local PositionTarget = Client:GetPointVec3() - - local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 + - ( PositionMissile.y - PositionTarget.y )^2 + - ( PositionMissile.z - PositionTarget.z )^2 - ) ^ 0.5 / 1000 - - if Distance <= self.Distance then - -- Hit alert - TrainerWeapon:destroy() - if self.MessagesOnOff == true and self.AlertsHitsOnOff == true then - - self:T( "killed" ) - - local Message = MESSAGE:New( - string.format( "%s launched by %s killed %s", - TrainerWeapon:getTypeName(), - TrainerSourceUnit:GetTypeName(), - TrainerTargetUnit:GetPlayerName() - ),"Hit Alert", 15, "ID" ) - - if self.AlertsToAll == true then - Message:ToAll() - else - Message:ToClient( Client ) - end - - MissileData = nil - table.remove( ClientData.MissileData, MissileDataID ) - self:T(ClientData.MissileData) - end - end - else - if not ( TrainerWeapon and TrainerWeapon:isExist() ) then - if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then - -- Weapon does not exist anymore. Delete from Table - local Message = MESSAGE:New( - string.format( "%s launched by %s self destructed!", - TrainerWeaponTypeName, - TrainerSourceUnit:GetTypeName() - ),"Tracking", 5, "ID" ) - - if self.AlertsToAll == true then - Message:ToAll() - else - Message:ToClient( Client ) - end - end - MissileData = nil - table.remove( ClientData.MissileData, MissileDataID ) - self:T( ClientData.MissileData ) - end - end - end - end - - if ShowMessages == true and self.MessagesOnOff == true and self.TrackingOnOff == true then -- Only do this when tracking information needs to be displayed. - - -- TRACKING PART - - -- For the current client, the missile range and bearing details are displayed To the Player Client. - -- For the other clients, the missile range and bearing details are displayed To the other Player Clients. - -- To achieve this, a cross loop is done for each Player Client <-> Other Player Client missile information. - - -- Main Player Client loop - for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do - - local Client = ClientData.Client - self:T2( { Client:GetName() } ) - - - ClientData.MessageToClient = "" - ClientData.MessageToAll = "" - - -- Other Players Client loop - for TrackingDataID, TrackingData in pairs( self.TrackingMissiles ) do - - for MissileDataID, MissileData in pairs( TrackingData.MissileData ) do - self:T3( MissileDataID ) - - local TrainerSourceUnit = MissileData.TrainerSourceUnit - local TrainerWeapon = MissileData.TrainerWeapon - local TrainerTargetUnit = MissileData.TrainerTargetUnit - local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName - local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched - - if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then - - if ShowMessages == true then - local TrackingTo - TrackingTo = string.format( " -> %s", - TrainerWeaponTypeName - ) - - if ClientDataID == TrackingDataID then - if ClientData.MessageToClient == "" then - ClientData.MessageToClient = "Missiles to You:\n" - end - ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. "\n" - else - if self.TrackingToAll == true then - if ClientData.MessageToAll == "" then - ClientData.MessageToAll = "Missiles to other Players:\n" - end - ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. " ( " .. TrainerTargetUnit:GetPlayerName() .. " )\n" - end - end - end - end - end - end - - -- Once the Player Client and the Other Player Client tracking messages are prepared, show them. - if ClientData.MessageToClient ~= "" or ClientData.MessageToAll ~= "" then - local Message = MESSAGE:New( ClientData.MessageToClient .. ClientData.MessageToAll, "Tracking", 1, "ID" ):ToClient( Client ) - end - end - end - - return true -end -env.info( '*** MOOSE INCLUDE END *** ' ) +env.info("Loaded MOOSE Include Engine")env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 8f1d04ce8..d4c566d6b 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,6 @@ -env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160526_1413' ) +env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) +env.info( 'Moose Generation Timestamp: 20160527_1003' ) + local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) @@ -11,9 +12,27 @@ Include.Path = function() end Include.File = function( IncludeFile ) + if not Include.Files[ IncludeFile ] then + Include.Files[IncludeFile] = IncludeFile + env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath ) + local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) ) + if f == nil then + env.info( "Include:" .. IncludeFile .. " from " .. Include.MissionPath ) + local f = assert( base.loadfile( Include.MissionPath .. IncludeFile .. ".lua" ) ) + if f == nil then + error ("Could not load MOOSE file " .. IncludeFile .. ".lua" ) + else + env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.MissionPath ) + return f() + end + else + env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath ) + return f() + end + end end -Include.ProgramPath = "Scripts/Moose/Moose/" +Include.ProgramPath = "Scripts/Moose/" Include.MissionPath = Include.Path() env.info( "Include.ProgramPath = " .. Include.ProgramPath) @@ -23,16701 +42,4 @@ Include.Files = {} Include.File( "Moose" ) -env.info("Loaded MOOSE Include Engine") ---- Various routines --- @module routines --- @author Flightcontrol - ---Include.File( "Trace" ) ---Include.File( "Message" ) - - -env.setErrorMessageBoxEnabled(false) - ---- Extract of MIST functions. --- @author Grimes - -routines = {} - - --- don't change these -routines.majorVersion = 3 -routines.minorVersion = 3 -routines.build = 22 - ------------------------------------------------------------------------------------------------------------------ - ----------------------------------------------------------------------------------------------- --- Utils- conversion, Lua utils, etc. -routines.utils = {} - ---from http://lua-users.org/wiki/CopyTable -routines.utils.deepCopy = function(object) - local lookup_table = {} - local function _copy(object) - if type(object) ~= "table" then - return object - elseif lookup_table[object] then - return lookup_table[object] - end - local new_table = {} - lookup_table[object] = new_table - for index, value in pairs(object) do - new_table[_copy(index)] = _copy(value) - end - return setmetatable(new_table, getmetatable(object)) - end - local objectreturn = _copy(object) - return objectreturn -end - - --- porting in Slmod's serialize_slmod2 -routines.utils.oneLineSerialize = function(tbl) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function - - lookup_table = {} - - local function _Serialize( tbl ) - - if type(tbl) == 'table' then --function only works for tables! - - if lookup_table[tbl] then - return lookup_table[object] - end - - local tbl_str = {} - - lookup_table[tbl] = tbl_str - - tbl_str[#tbl_str + 1] = '{' - - for ind,val in pairs(tbl) do -- serialize its fields - local ind_str = {} - if type(ind) == "number" then - ind_str[#ind_str + 1] = '[' - ind_str[#ind_str + 1] = tostring(ind) - ind_str[#ind_str + 1] = ']=' - else --must be a string - ind_str[#ind_str + 1] = '[' - ind_str[#ind_str + 1] = routines.utils.basicSerialize(ind) - ind_str[#ind_str + 1] = ']=' - end - - local val_str = {} - if ((type(val) == 'number') or (type(val) == 'boolean')) then - val_str[#val_str + 1] = tostring(val) - val_str[#val_str + 1] = ',' - tbl_str[#tbl_str + 1] = table.concat(ind_str) - tbl_str[#tbl_str + 1] = table.concat(val_str) - elseif type(val) == 'string' then - val_str[#val_str + 1] = routines.utils.basicSerialize(val) - val_str[#val_str + 1] = ',' - tbl_str[#tbl_str + 1] = table.concat(ind_str) - tbl_str[#tbl_str + 1] = table.concat(val_str) - elseif type(val) == 'nil' then -- won't ever happen, right? - val_str[#val_str + 1] = 'nil,' - tbl_str[#tbl_str + 1] = table.concat(ind_str) - tbl_str[#tbl_str + 1] = table.concat(val_str) - elseif type(val) == 'table' then - if ind == "__index" then - -- tbl_str[#tbl_str + 1] = "__index" - -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it - else - - val_str[#val_str + 1] = _Serialize(val) - val_str[#val_str + 1] = ',' --I think this is right, I just added it - tbl_str[#tbl_str + 1] = table.concat(ind_str) - tbl_str[#tbl_str + 1] = table.concat(val_str) - end - elseif type(val) == 'function' then - -- tbl_str[#tbl_str + 1] = "function " .. tostring(ind) - -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it - else --- env.info('unable to serialize value type ' .. routines.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind)) --- env.info( debug.traceback() ) - end - - end - tbl_str[#tbl_str + 1] = '}' - return table.concat(tbl_str) - else - return tostring(tbl) - end - end - - local objectreturn = _Serialize(tbl) - return objectreturn -end - ---porting in Slmod's "safestring" basic serialize -routines.utils.basicSerialize = function(s) - if s == nil then - return "\"\"" - else - if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then - return tostring(s) - elseif type(s) == 'string' then - s = string.format('%q', s) - return s - end - end -end - - -routines.utils.toDegree = function(angle) - return angle*180/math.pi -end - -routines.utils.toRadian = function(angle) - return angle*math.pi/180 -end - -routines.utils.metersToNM = function(meters) - return meters/1852 -end - -routines.utils.metersToFeet = function(meters) - return meters/0.3048 -end - -routines.utils.NMToMeters = function(NM) - return NM*1852 -end - -routines.utils.feetToMeters = function(feet) - return feet*0.3048 -end - -routines.utils.mpsToKnots = function(mps) - return mps*3600/1852 -end - -routines.utils.mpsToKmph = function(mps) - return mps*3.6 -end - -routines.utils.knotsToMps = function(knots) - return knots*1852/3600 -end - -routines.utils.kmphToMps = function(kmph) - return kmph/3.6 -end - -function routines.utils.makeVec2(Vec3) - if Vec3.z then - return {x = Vec3.x, y = Vec3.z} - else - return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. - end -end - -function routines.utils.makeVec3(Vec2, y) - if not Vec2.z then - if not y then - y = 0 - end - return {x = Vec2.x, y = y, z = Vec2.y} - else - return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. - end -end - -function routines.utils.makeVec3GL(Vec2, offset) - local adj = offset or 0 - - if not Vec2.z then - return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} - else - return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} - end -end - -routines.utils.zoneToVec3 = function(zone) - local new = {} - if type(zone) == 'table' and zone.point then - new.x = zone.point.x - new.y = zone.point.y - new.z = zone.point.z - return new - elseif type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - if zone then - new.x = zone.point.x - new.y = zone.point.y - new.z = zone.point.z - return new - end - end -end - --- gets heading-error corrected direction from point along vector vec. -function routines.utils.getDir(vec, point) - local dir = math.atan2(vec.z, vec.x) - dir = dir + routines.getNorthCorrection(point) - if dir < 0 then - dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi - end - return dir -end - --- gets distance in meters between two points (2 dimensional) -function routines.utils.get2DDist(point1, point2) - point1 = routines.utils.makeVec3(point1) - point2 = routines.utils.makeVec3(point2) - return routines.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) -end - --- gets distance in meters between two points (3 dimensional) -function routines.utils.get3DDist(point1, point2) - return routines.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) -end - - - --- From http://lua-users.org/wiki/SimpleRound --- use negative idp for rounding ahead of decimal place, positive for rounding after decimal place -routines.utils.round = function(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end - --- porting in Slmod's dostring -routines.utils.dostring = function(s) - local f, err = loadstring(s) - if f then - return true, f() - else - return false, err - end -end - - ---3D Vector manipulation -routines.vec = {} - -routines.vec.add = function(vec1, vec2) - return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} -end - -routines.vec.sub = function(vec1, vec2) - return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} -end - -routines.vec.scalarMult = function(vec, mult) - return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} -end - -routines.vec.scalar_mult = routines.vec.scalarMult - -routines.vec.dp = function(vec1, vec2) - return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z -end - -routines.vec.cp = function(vec1, vec2) - return { x = vec1.y*vec2.z - vec1.z*vec2.y, y = vec1.z*vec2.x - vec1.x*vec2.z, z = vec1.x*vec2.y - vec1.y*vec2.x} -end - -routines.vec.mag = function(vec) - return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 -end - -routines.vec.getUnitVec = function(vec) - local mag = routines.vec.mag(vec) - return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } -end - -routines.vec.rotateVec2 = function(vec2, theta) - return { x = vec2.x*math.cos(theta) - vec2.y*math.sin(theta), y = vec2.x*math.sin(theta) + vec2.y*math.cos(theta)} -end ---------------------------------------------------------------------------------------------------------------------------- - - - - --- acc- the accuracy of each easting/northing. 0, 1, 2, 3, 4, or 5. -routines.tostringMGRS = function(MGRS, acc) - if acc == 0 then - return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph - else - return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Easting/(10^(5-acc)), 0)) - .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Northing/(10^(5-acc)), 0)) - end -end - ---[[acc: -in DM: decimal point of minutes. -In DMS: decimal point of seconds. -position after the decimal of the least significant digit: -So: -42.32 - acc of 2. -]] -routines.tostringLL = function(lat, lon, acc, DMS) - - local latHemi, lonHemi - if lat > 0 then - latHemi = 'N' - else - latHemi = 'S' - end - - if lon > 0 then - lonHemi = 'E' - else - lonHemi = 'W' - end - - lat = math.abs(lat) - lon = math.abs(lon) - - local latDeg = math.floor(lat) - local latMin = (lat - latDeg)*60 - - local lonDeg = math.floor(lon) - local lonMin = (lon - lonDeg)*60 - - if DMS then -- degrees, minutes, and seconds. - local oldLatMin = latMin - latMin = math.floor(latMin) - local latSec = routines.utils.round((oldLatMin - latMin)*60, acc) - - local oldLonMin = lonMin - lonMin = math.floor(lonMin) - local lonSec = routines.utils.round((oldLonMin - lonMin)*60, acc) - - if latSec == 60 then - latSec = 0 - latMin = latMin + 1 - end - - if lonSec == 60 then - lonSec = 0 - lonMin = lonMin + 1 - end - - local secFrmtStr -- create the formatting string for the seconds place - if acc <= 0 then -- no decimal place. - secFrmtStr = '%02d' - else - local width = 3 + acc -- 01.310 - that's a width of 6, for example. - secFrmtStr = '%0' .. width .. '.' .. acc .. 'f' - end - - return string.format('%02d', latDeg) .. ' ' .. string.format('%02d', latMin) .. '\' ' .. string.format(secFrmtStr, latSec) .. '"' .. latHemi .. ' ' - .. string.format('%02d', lonDeg) .. ' ' .. string.format('%02d', lonMin) .. '\' ' .. string.format(secFrmtStr, lonSec) .. '"' .. lonHemi - - else -- degrees, decimal minutes. - latMin = routines.utils.round(latMin, acc) - lonMin = routines.utils.round(lonMin, acc) - - if latMin == 60 then - latMin = 0 - latDeg = latDeg + 1 - end - - if lonMin == 60 then - lonMin = 0 - lonDeg = lonDeg + 1 - end - - local minFrmtStr -- create the formatting string for the minutes place - if acc <= 0 then -- no decimal place. - minFrmtStr = '%02d' - else - local width = 3 + acc -- 01.310 - that's a width of 6, for example. - minFrmtStr = '%0' .. width .. '.' .. acc .. 'f' - end - - return string.format('%02d', latDeg) .. ' ' .. string.format(minFrmtStr, latMin) .. '\'' .. latHemi .. ' ' - .. string.format('%02d', lonDeg) .. ' ' .. string.format(minFrmtStr, lonMin) .. '\'' .. lonHemi - - end -end - ---[[ required: az - radian - required: dist - meters - optional: alt - meters (set to false or nil if you don't want to use it). - optional: metric - set true to get dist and alt in km and m. - precision will always be nearest degree and NM or km.]] -routines.tostringBR = function(az, dist, alt, metric) - az = routines.utils.round(routines.utils.toDegree(az), 0) - - if metric then - dist = routines.utils.round(dist/1000, 2) - else - dist = routines.utils.round(routines.utils.metersToNM(dist), 2) - end - - local s = string.format('%03d', az) .. ' for ' .. dist - - if alt then - if metric then - s = s .. ' at ' .. routines.utils.round(alt, 0) - else - s = s .. ' at ' .. routines.utils.round(routines.utils.metersToFeet(alt), 0) - end - end - return s -end - -routines.getNorthCorrection = function(point) --gets the correction needed for true north - if not point.z then --Vec2; convert to Vec3 - point.z = point.y - point.y = 0 - end - local lat, lon = coord.LOtoLL(point) - local north_posit = coord.LLtoLO(lat + 1, lon) - return math.atan2(north_posit.z - point.z, north_posit.x - point.x) -end - - --- the main area -do - -- THE MAIN FUNCTION -- Accessed 100 times/sec. - routines.main = function() - timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) --reschedule first in case of Lua error - ---------------------------------------------------------------------------------------------------------- - --area to add new stuff in - - routines.do_scheduled_functions() - end -- end of routines.main - - timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) - -end - - -do - local idNum = 0 - - --Simplified event handler - routines.addEventHandler = function(f) --id is optional! - local handler = {} - idNum = idNum + 1 - handler.id = idNum - handler.f = f - handler.onEvent = function(self, event) - self.f(event) - end - world.addEventHandler(handler) - end - - routines.removeEventHandler = function(id) - for key, handler in pairs(world.eventHandlers) do - if handler.id and handler.id == id then - world.eventHandlers[key] = nil - return true - end - end - return false - end -end - --- need to return a Vec3 or Vec2? -function routines.getRandPointInCircle(point, radius, innerRadius) - local theta = 2*math.pi*math.random() - local rad = math.random() + math.random() - if rad > 1 then - rad = 2 - rad - end - - local radMult - if innerRadius and innerRadius <= radius then - radMult = (radius - innerRadius)*rad + innerRadius - else - radMult = radius*rad - end - - if not point.z then --might as well work with vec2/3 - point.z = point.y - end - - local rndCoord - if radius > 0 then - rndCoord = {x = math.cos(theta)*radMult + point.x, y = math.sin(theta)*radMult + point.z} - else - rndCoord = {x = point.x, y = point.z} - end - return rndCoord -end - -routines.goRoute = function(group, path) - local misTask = { - id = 'Mission', - params = { - route = { - points = routines.utils.deepCopy(path), - }, - }, - } - if type(group) == 'string' then - group = Group.getByName(group) - end - local groupCon = group:getController() - if groupCon then - groupCon:setTask(misTask) - return true - end - - Controller.setTask(groupCon, misTask) - return false -end - - --- Useful atomic functions from mist, ported. - -routines.ground = {} -routines.fixedWing = {} -routines.heli = {} - -routines.ground.buildWP = function(point, overRideForm, overRideSpeed) - - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - local form, speed - - if point.speed and not overRideSpeed then - wp.speed = point.speed - elseif type(overRideSpeed) == 'number' then - wp.speed = overRideSpeed - else - wp.speed = routines.utils.kmphToMps(20) - end - - if point.form and not overRideForm then - form = point.form - else - form = overRideForm - end - - if not form then - wp.action = 'Cone' - else - form = string.lower(form) - if form == 'off_road' or form == 'off road' then - wp.action = 'Off Road' - elseif form == 'on_road' or form == 'on road' then - wp.action = 'On Road' - elseif form == 'rank' or form == 'line_abrest' or form == 'line abrest' or form == 'lineabrest'then - wp.action = 'Rank' - elseif form == 'cone' then - wp.action = 'Cone' - elseif form == 'diamond' then - wp.action = 'Diamond' - elseif form == 'vee' then - wp.action = 'Vee' - elseif form == 'echelon_left' or form == 'echelon left' or form == 'echelonl' then - wp.action = 'EchelonL' - elseif form == 'echelon_right' or form == 'echelon right' or form == 'echelonr' then - wp.action = 'EchelonR' - else - wp.action = 'Cone' -- if nothing matched - end - end - - wp.type = 'Turning Point' - - return wp - -end - -routines.fixedWing.buildWP = function(point, WPtype, speed, alt, altType) - - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - - if alt and type(alt) == 'number' then - wp.alt = alt - else - wp.alt = 2000 - end - - if altType then - altType = string.lower(altType) - if altType == 'radio' or 'agl' then - wp.alt_type = 'RADIO' - elseif altType == 'baro' or 'asl' then - wp.alt_type = 'BARO' - end - else - wp.alt_type = 'RADIO' - end - - if point.speed then - speed = point.speed - end - - if point.type then - WPtype = point.type - end - - if not speed then - wp.speed = routines.utils.kmphToMps(500) - else - wp.speed = speed - end - - if not WPtype then - wp.action = 'Turning Point' - else - WPtype = string.lower(WPtype) - if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then - wp.action = 'Fly Over Point' - elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then - wp.action = 'Turning Point' - else - wp.action = 'Turning Point' - end - end - - wp.type = 'Turning Point' - return wp -end - -routines.heli.buildWP = function(point, WPtype, speed, alt, altType) - - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - - if alt and type(alt) == 'number' then - wp.alt = alt - else - wp.alt = 500 - end - - if altType then - altType = string.lower(altType) - if altType == 'radio' or 'agl' then - wp.alt_type = 'RADIO' - elseif altType == 'baro' or 'asl' then - wp.alt_type = 'BARO' - end - else - wp.alt_type = 'RADIO' - end - - if point.speed then - speed = point.speed - end - - if point.type then - WPtype = point.type - end - - if not speed then - wp.speed = routines.utils.kmphToMps(200) - else - wp.speed = speed - end - - if not WPtype then - wp.action = 'Turning Point' - else - WPtype = string.lower(WPtype) - if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then - wp.action = 'Fly Over Point' - elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then - wp.action = 'Turning Point' - else - wp.action = 'Turning Point' - end - end - - wp.type = 'Turning Point' - return wp -end - -routines.groupToRandomPoint = function(vars) - local group = vars.group --Required - local point = vars.point --required - local radius = vars.radius or 0 - local innerRadius = vars.innerRadius - local form = vars.form or 'Cone' - local heading = vars.heading or math.random()*2*math.pi - local headingDegrees = vars.headingDegrees - local speed = vars.speed or routines.utils.kmphToMps(20) - - - local useRoads - if not vars.disableRoads then - useRoads = true - else - useRoads = false - end - - local path = {} - - if headingDegrees then - heading = headingDegrees*math.pi/180 - end - - if heading >= 2*math.pi then - heading = heading - 2*math.pi - end - - local rndCoord = routines.getRandPointInCircle(point, radius, innerRadius) - - local offset = {} - local posStart = routines.getLeadPos(group) - - offset.x = routines.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) - offset.z = routines.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) - path[#path + 1] = routines.ground.buildWP(posStart, form, speed) - - - if useRoads == true and ((point.x - posStart.x)^2 + (point.z - posStart.z)^2)^0.5 > radius * 1.3 then - path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 11, ['z'] = posStart.z + 11}, 'off_road', speed) - path[#path + 1] = routines.ground.buildWP(posStart, 'on_road', speed) - path[#path + 1] = routines.ground.buildWP(offset, 'on_road', speed) - else - path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 25, ['z'] = posStart.z + 25}, form, speed) - end - - path[#path + 1] = routines.ground.buildWP(offset, form, speed) - path[#path + 1] = routines.ground.buildWP(rndCoord, form, speed) - - routines.goRoute(group, path) - - return -end - -routines.groupRandomDistSelf = function(gpData, dist, form, heading, speed) - local pos = routines.getLeadPos(gpData) - local fakeZone = {} - fakeZone.radius = dist or math.random(300, 1000) - fakeZone.point = {x = pos.x, y, pos.y, z = pos.z} - routines.groupToRandomZone(gpData, fakeZone, form, heading, speed) - - return -end - -routines.groupToRandomZone = function(gpData, zone, form, heading, speed) - if type(gpData) == 'string' then - gpData = Group.getByName(gpData) - end - - if type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - elseif type(zone) == 'table' and not zone.radius then - zone = trigger.misc.getZone(zone[math.random(1, #zone)]) - end - - if speed then - speed = routines.utils.kmphToMps(speed) - end - - local vars = {} - vars.group = gpData - vars.radius = zone.radius - vars.form = form - vars.headingDegrees = heading - vars.speed = speed - vars.point = routines.utils.zoneToVec3(zone) - - routines.groupToRandomPoint(vars) - - return -end - -routines.isTerrainValid = function(coord, terrainTypes) -- vec2/3 and enum or table of acceptable terrain types - if coord.z then - coord.y = coord.z - end - local typeConverted = {} - - if type(terrainTypes) == 'string' then -- if its a string it does this check - for constId, constData in pairs(land.SurfaceType) do - if string.lower(constId) == string.lower(terrainTypes) or string.lower(constData) == string.lower(terrainTypes) then - table.insert(typeConverted, constId) - end - end - elseif type(terrainTypes) == 'table' then -- if its a table it does this check - for typeId, typeData in pairs(terrainTypes) do - for constId, constData in pairs(land.SurfaceType) do - if string.lower(constId) == string.lower(typeData) or string.lower(constData) == string.lower(typeId) then - table.insert(typeConverted, constId) - end - end - end - end - for validIndex, validData in pairs(typeConverted) do - if land.getSurfaceType(coord) == land.SurfaceType[validData] then - return true - end - end - return false -end - -routines.groupToPoint = function(gpData, point, form, heading, speed, useRoads) - if type(point) == 'string' then - point = trigger.misc.getZone(point) - end - if speed then - speed = routines.utils.kmphToMps(speed) - end - - local vars = {} - vars.group = gpData - vars.form = form - vars.headingDegrees = heading - vars.speed = speed - vars.disableRoads = useRoads - vars.point = routines.utils.zoneToVec3(point) - routines.groupToRandomPoint(vars) - - return -end - - -routines.getLeadPos = function(group) - if type(group) == 'string' then -- group name - group = Group.getByName(group) - end - - local units = group:getUnits() - - local leader = units[1] - if not leader then -- SHOULD be good, but if there is a bug, this code future-proofs it then. - local lowestInd = math.huge - for ind, unit in pairs(units) do - if ind < lowestInd then - lowestInd = ind - leader = unit - end - end - end - if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... - return leader:getPosition().p - end -end - ---[[ vars for routines.getMGRSString: -vars.units - table of unit names (NOT unitNameTable- maybe this should change). -vars.acc - integer between 0 and 5, inclusive -]] -routines.getMGRSString = function(vars) - local units = vars.units - local acc = vars.acc or 5 - local avgPos = routines.getAvgPos(units) - if avgPos then - return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) - end -end - ---[[ vars for routines.getLLString -vars.units - table of unit names (NOT unitNameTable- maybe this should change). -vars.acc - integer, number of numbers after decimal place -vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. - - -]] -routines.getLLString = function(vars) - local units = vars.units - local acc = vars.acc or 3 - local DMS = vars.DMS - local avgPos = routines.getAvgPos(units) - if avgPos then - local lat, lon = coord.LOtoLL(avgPos) - return routines.tostringLL(lat, lon, acc, DMS) - end -end - ---[[ -vars.zone - table of a zone name. -vars.ref - vec3 ref point, maybe overload for vec2 as well? -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -]] -routines.getBRStringZone = function(vars) - local zone = trigger.misc.getZone( vars.zone ) - local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. - local alt = vars.alt - local metric = vars.metric - if zone then - local vec = {x = zone.point.x - ref.x, y = zone.point.y - ref.y, z = zone.point.z - ref.z} - local dir = routines.utils.getDir(vec, ref) - local dist = routines.utils.get2DDist(zone.point, ref) - if alt then - alt = zone.y - end - return routines.tostringBR(dir, dist, alt, metric) - else - env.info( 'routines.getBRStringZone: error: zone is nil' ) - end -end - ---[[ -vars.units- table of unit names (NOT unitNameTable- maybe this should change). -vars.ref - vec3 ref point, maybe overload for vec2 as well? -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -]] -routines.getBRString = function(vars) - local units = vars.units - local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. - local alt = vars.alt - local metric = vars.metric - local avgPos = routines.getAvgPos(units) - if avgPos then - local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} - local dir = routines.utils.getDir(vec, ref) - local dist = routines.utils.get2DDist(avgPos, ref) - if alt then - alt = avgPos.y - end - return routines.tostringBR(dir, dist, alt, metric) - end -end - - --- Returns the Vec3 coordinates of the average position of the concentration of units most in the heading direction. ---[[ vars for routines.getLeadingPos: -vars.units - table of unit names -vars.heading - direction -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -]] -routines.getLeadingPos = function(vars) - local units = vars.units - local heading = vars.heading - local radius = vars.radius - if vars.headingDegrees then - heading = routines.utils.toRadian(vars.headingDegrees) - end - - local unitPosTbl = {} - for i = 1, #units do - local unit = Unit.getByName(units[i]) - if unit and unit:isExist() then - unitPosTbl[#unitPosTbl + 1] = unit:getPosition().p - end - end - if #unitPosTbl > 0 then -- one more more units found. - -- first, find the unit most in the heading direction - local maxPos = -math.huge - - local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = - for i = 1, #unitPosTbl do - local rotatedVec2 = routines.vec.rotateVec2(routines.utils.makeVec2(unitPosTbl[i]), heading) - if (not maxPos) or maxPos < rotatedVec2.x then - maxPos = rotatedVec2.x - maxPosInd = i - end - end - - --now, get all the units around this unit... - local avgPos - if radius then - local maxUnitPos = unitPosTbl[maxPosInd] - local avgx, avgy, avgz, totNum = 0, 0, 0, 0 - for i = 1, #unitPosTbl do - if routines.utils.get2DDist(maxUnitPos, unitPosTbl[i]) <= radius then - avgx = avgx + unitPosTbl[i].x - avgy = avgy + unitPosTbl[i].y - avgz = avgz + unitPosTbl[i].z - totNum = totNum + 1 - end - end - avgPos = { x = avgx/totNum, y = avgy/totNum, z = avgz/totNum} - else - avgPos = unitPosTbl[maxPosInd] - end - - return avgPos - end -end - - ---[[ vars for routines.getLeadingMGRSString: -vars.units - table of unit names -vars.heading - direction -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -vars.acc - number, 0 to 5. -]] -routines.getLeadingMGRSString = function(vars) - local pos = routines.getLeadingPos(vars) - if pos then - local acc = vars.acc or 5 - return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) - end -end - ---[[ vars for routines.getLeadingLLString: -vars.units - table of unit names -vars.heading - direction, number -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -vars.acc - number of digits after decimal point (can be negative) -vars.DMS - boolean, true if you want DMS. -]] -routines.getLeadingLLString = function(vars) - local pos = routines.getLeadingPos(vars) - if pos then - local acc = vars.acc or 3 - local DMS = vars.DMS - local lat, lon = coord.LOtoLL(pos) - return routines.tostringLL(lat, lon, acc, DMS) - end -end - - - ---[[ vars for routines.getLeadingBRString: -vars.units - table of unit names -vars.heading - direction, number -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -vars.metric - boolean, if true, use km instead of NM. -vars.alt - boolean, if true, include altitude. -vars.ref - vec3/vec2 reference point. -]] -routines.getLeadingBRString = function(vars) - local pos = routines.getLeadingPos(vars) - if pos then - local ref = vars.ref - local alt = vars.alt - local metric = vars.metric - - local vec = {x = pos.x - ref.x, y = pos.y - ref.y, z = pos.z - ref.z} - local dir = routines.utils.getDir(vec, ref) - local dist = routines.utils.get2DDist(pos, ref) - if alt then - alt = pos.y - end - return routines.tostringBR(dir, dist, alt, metric) - end -end - ---[[ vars for routines.message.add - vars.text = 'Hello World' - vars.displayTime = 20 - vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} - -]] - ---[[ vars for routines.msgMGRS -vars.units - table of unit names (NOT unitNameTable- maybe this should change). -vars.acc - integer between 0 and 5, inclusive -vars.text - text in the message -vars.displayTime - self explanatory -vars.msgFor - scope -]] -routines.msgMGRS = function(vars) - local units = vars.units - local acc = vars.acc - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getMGRSString{units = units, acc = acc} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } -end - ---[[ vars for routines.msgLL -vars.units - table of unit names (NOT unitNameTable- maybe this should change) (Yes). -vars.acc - integer, number of numbers after decimal place -vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. -vars.text - text in the message -vars.displayTime - self explanatory -vars.msgFor - scope -]] -routines.msgLL = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local acc = vars.acc - local DMS = vars.DMS - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getLLString{units = units, acc = acc, DMS = DMS} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - -end - - ---[[ -vars.units- table of unit names (NOT unitNameTable- maybe this should change). -vars.ref - vec3 ref point, maybe overload for vec2 as well? -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgBR = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString - local alt = vars.alt - local metric = vars.metric - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getBRString{units = units, ref = ref, alt = alt, metric = metric} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - -end - - --------------------------------------------------------------------------------------------- --- basically, just sub-types of routines.msgBR... saves folks the work of getting the ref point. ---[[ -vars.units- table of unit names (NOT unitNameTable- maybe this should change). -vars.ref - string red, blue -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgBullseye = function(vars) - if string.lower(vars.ref) == 'red' then - vars.ref = routines.DBs.missionData.bullseye.red - routines.msgBR(vars) - elseif string.lower(vars.ref) == 'blue' then - vars.ref = routines.DBs.missionData.bullseye.blue - routines.msgBR(vars) - end -end - ---[[ -vars.units- table of unit names (NOT unitNameTable- maybe this should change). -vars.ref - unit name of reference point -vars.alt - boolean, if used, includes altitude in string -vars.metric - boolean, gives distance in km instead of NM. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] - -routines.msgBRA = function(vars) - if Unit.getByName(vars.ref) then - vars.ref = Unit.getByName(vars.ref):getPosition().p - if not vars.alt then - vars.alt = true - end - routines.msgBR(vars) - end -end --------------------------------------------------------------------------------------------- - ---[[ vars for routines.msgLeadingMGRS: -vars.units - table of unit names -vars.heading - direction -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees (optional) -vars.acc - number, 0 to 5. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgLeadingMGRS = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local acc = vars.acc - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - - -end ---[[ vars for routines.msgLeadingLL: -vars.units - table of unit names -vars.heading - direction, number -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees (optional) -vars.acc - number of digits after decimal point (can be negative) -vars.DMS - boolean, true if you want DMS. (optional) -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgLeadingLL = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local acc = vars.acc - local DMS = vars.DMS - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - -end - ---[[ -vars.units - table of unit names -vars.heading - direction, number -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees (optional) -vars.metric - boolean, if true, use km instead of NM. (optional) -vars.alt - boolean, if true, include altitude. (optional) -vars.ref - vec3/vec2 reference point. -vars.text - text of the message -vars.displayTime -vars.msgFor - scope -]] -routines.msgLeadingBR = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local metric = vars.metric - local alt = vars.alt - local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = routines.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} - local newText - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - - routines.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } -end - - -function spairs(t, order) - -- collect the keys - local keys = {} - for k in pairs(t) do keys[#keys+1] = k end - - -- if order function given, sort by it by passing the table and keys a, b, - -- otherwise just sort the keys - if order then - table.sort(keys, function(a,b) return order(t, a, b) end) - else - table.sort(keys) - end - - -- return the iterator function - local i = 0 - return function() - i = i + 1 - if keys[i] then - return keys[i], t[keys[i]] - end - end -end - - -function routines.IsPartOfGroupInZones( CargoGroup, LandingZones ) ---trace.f() - - local CurrentZoneID = nil - - if CargoGroup then - local CargoUnits = CargoGroup:getUnits() - for CargoUnitID, CargoUnit in pairs( CargoUnits ) do - if CargoUnit and CargoUnit:getLife() >= 1.0 then - CurrentZoneID = routines.IsUnitInZones( CargoUnit, LandingZones ) - if CurrentZoneID then - break - end - end - end - end - ---trace.r( "", "", { CurrentZoneID } ) - return CurrentZoneID -end - - - -function routines.IsUnitInZones( TransportUnit, LandingZones ) ---trace.f("", "routines.IsUnitInZones" ) - - local TransportZoneResult = nil - local TransportZonePos = nil - local TransportZone = nil - - -- fill-up some local variables to support further calculations to determine location of units within the zone. - if TransportUnit then - local TransportUnitPos = TransportUnit:getPosition().p - if type( LandingZones ) == "table" then - for LandingZoneID, LandingZoneName in pairs( LandingZones ) do - TransportZone = trigger.misc.getZone( LandingZoneName ) - if TransportZone then - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then - TransportZoneResult = LandingZoneID - break - end - end - end - else - TransportZone = trigger.misc.getZone( LandingZones ) - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then - TransportZoneResult = 1 - end - end - if TransportZoneResult then - --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) - else - --trace.i( "routines", "TransportZone:nil logic" ) - end - return TransportZoneResult - else - --trace.i( "routines", "TransportZone:nil hard" ) - return nil - end -end - -function routines.IsUnitNearZonesRadius( TransportUnit, LandingZones, ZoneRadius ) ---trace.f("", "routines.IsUnitInZones" ) - - local TransportZoneResult = nil - local TransportZonePos = nil - local TransportZone = nil - - -- fill-up some local variables to support further calculations to determine location of units within the zone. - if TransportUnit then - local TransportUnitPos = TransportUnit:getPosition().p - if type( LandingZones ) == "table" then - for LandingZoneID, LandingZoneName in pairs( LandingZones ) do - TransportZone = trigger.misc.getZone( LandingZoneName ) - if TransportZone then - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then - TransportZoneResult = LandingZoneID - break - end - end - end - else - TransportZone = trigger.misc.getZone( LandingZones ) - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then - TransportZoneResult = 1 - end - end - if TransportZoneResult then - --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) - else - --trace.i( "routines", "TransportZone:nil logic" ) - end - return TransportZoneResult - else - --trace.i( "routines", "TransportZone:nil hard" ) - return nil - end -end - - -function routines.IsStaticInZones( TransportStatic, LandingZones ) ---trace.f() - - local TransportZoneResult = nil - local TransportZonePos = nil - local TransportZone = nil - - -- fill-up some local variables to support further calculations to determine location of units within the zone. - local TransportStaticPos = TransportStatic:getPosition().p - if type( LandingZones ) == "table" then - for LandingZoneID, LandingZoneName in pairs( LandingZones ) do - TransportZone = trigger.misc.getZone( LandingZoneName ) - if TransportZone then - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then - TransportZoneResult = LandingZoneID - break - end - end - end - else - TransportZone = trigger.misc.getZone( LandingZones ) - TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} - if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then - TransportZoneResult = 1 - end - end - ---trace.r( "", "", { TransportZoneResult } ) - return TransportZoneResult -end - - -function routines.IsUnitInRadius( CargoUnit, ReferencePosition, Radius ) ---trace.f() - - local Valid = true - - -- fill-up some local variables to support further calculations to determine location of units within the zone. - local CargoPos = CargoUnit:getPosition().p - local ReferenceP = ReferencePosition.p - - if (((CargoPos.x - ReferenceP.x)^2 + (CargoPos.z - ReferenceP.z)^2)^0.5 <= Radius) then - else - Valid = false - end - - return Valid -end - -function routines.IsPartOfGroupInRadius( CargoGroup, ReferencePosition, Radius ) ---trace.f() - - local Valid = true - - Valid = routines.ValidateGroup( CargoGroup, "CargoGroup", Valid ) - - -- fill-up some local variables to support further calculations to determine location of units within the zone - local CargoUnits = CargoGroup:getUnits() - for CargoUnitId, CargoUnit in pairs( CargoUnits ) do - local CargoUnitPos = CargoUnit:getPosition().p --- env.info( 'routines.IsPartOfGroupInRadius: CargoUnitPos.x = ' .. CargoUnitPos.x .. ' CargoUnitPos.z = ' .. CargoUnitPos.z ) - local ReferenceP = ReferencePosition.p --- env.info( 'routines.IsPartOfGroupInRadius: ReferenceGroupPos.x = ' .. ReferenceGroupPos.x .. ' ReferenceGroupPos.z = ' .. ReferenceGroupPos.z ) - - if ((( CargoUnitPos.x - ReferenceP.x)^2 + (CargoUnitPos.z - ReferenceP.z)^2)^0.5 <= Radius) then - else - Valid = false - break - end - end - - return Valid -end - - -function routines.ValidateString( Variable, VariableName, Valid ) ---trace.f() - - if type( Variable ) == "string" then - if Variable == "" then - error( "routines.ValidateString: error: " .. VariableName .. " must be filled out!" ) - Valid = false - end - else - error( "routines.ValidateString: error: " .. VariableName .. " is not a string." ) - Valid = false - end - ---trace.r( "", "", { Valid } ) - return Valid -end - -function routines.ValidateNumber( Variable, VariableName, Valid ) ---trace.f() - - if type( Variable ) == "number" then - else - error( "routines.ValidateNumber: error: " .. VariableName .. " is not a number." ) - Valid = false - end - ---trace.r( "", "", { Valid } ) - return Valid - -end - -function routines.ValidateGroup( Variable, VariableName, Valid ) ---trace.f() - - if Variable == nil then - error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) - Valid = false - end - ---trace.r( "", "", { Valid } ) - return Valid -end - -function routines.ValidateZone( LandingZones, VariableName, Valid ) ---trace.f() - - if LandingZones == nil then - error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) - Valid = false - end - - if type( LandingZones ) == "table" then - for LandingZoneID, LandingZoneName in pairs( LandingZones ) do - if trigger.misc.getZone( LandingZoneName ) == nil then - error( "routines.ValidateGroup: error: Zone " .. LandingZoneName .. " does not exist!" ) - Valid = false - break - end - end - else - if trigger.misc.getZone( LandingZones ) == nil then - error( "routines.ValidateGroup: error: Zone " .. LandingZones .. " does not exist!" ) - Valid = false - end - end - ---trace.r( "", "", { Valid } ) - return Valid -end - -function routines.ValidateEnumeration( Variable, VariableName, Enum, Valid ) ---trace.f() - - local ValidVariable = false - - for EnumId, EnumData in pairs( Enum ) do - if Variable == EnumData then - ValidVariable = true - break - end - end - - if ValidVariable then - else - error( 'TransportValidateEnum: " .. VariableName .. " is not a valid type.' .. Variable ) - Valid = false - end - ---trace.r( "", "", { Valid } ) - return Valid -end - -function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints but returns speed and formation type along with vec2 of point} - -- refactor to search by groupId and allow groupId and groupName as inputs - local gpId = groupIdent - if type(groupIdent) == 'string' and not tonumber(groupIdent) then - gpId = _DATABASE.Templates.Groups[groupIdent].groupId - end - - for coa_name, coa_data in pairs(env.mission.coalition) do - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - for obj_type_name, obj_type_data in pairs(cntry_data) do - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - for group_num, group_data in pairs(obj_type_data.group) do - if group_data and group_data.groupId == gpId then -- this is the group we are looking for - if group_data.route and group_data.route.points and #group_data.route.points > 0 then - local points = {} - - for point_num, point in pairs(group_data.route.points) do - local routeData = {} - if not point.point then - routeData.x = point.x - routeData.y = point.y - else - routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation. - end - routeData.form = point.action - routeData.speed = point.speed - routeData.alt = point.alt - routeData.alt_type = point.alt_type - routeData.airdromeId = point.airdromeId - routeData.helipadId = point.helipadId - routeData.type = point.type - routeData.action = point.action - if task then - routeData.task = point.task - end - points[point_num] = routeData - end - - return points - end - return - end --if group_data and group_data.name and group_data.name == 'groupname' - end --for group_num, group_data in pairs(obj_type_data.group) do - end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then - end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then - end --for obj_type_name, obj_type_data in pairs(cntry_data) do - end --for cntry_id, cntry_data in pairs(coa_data.country) do - end --if coa_data.country then --there is a country table - end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then - end --for coa_name, coa_data in pairs(mission.coalition) do -end - -routines.ground.patrolRoute = function(vars) - - - local tempRoute = {} - local useRoute = {} - local gpData = vars.gpData - if type(gpData) == 'string' then - gpData = Group.getByName(gpData) - end - - local useGroupRoute - if not vars.useGroupRoute then - useGroupRoute = vars.gpData - else - useGroupRoute = vars.useGroupRoute - end - local routeProvided = false - if not vars.route then - if useGroupRoute then - tempRoute = routines.getGroupRoute(useGroupRoute) - end - else - useRoute = vars.route - local posStart = routines.getLeadPos(gpData) - useRoute[1] = routines.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed) - routeProvided = true - end - - - local overRideSpeed = vars.speed or 'default' - local pType = vars.pType - local offRoadForm = vars.offRoadForm or 'default' - local onRoadForm = vars.onRoadForm or 'default' - - if routeProvided == false and #tempRoute > 0 then - local posStart = routines.getLeadPos(gpData) - - - useRoute[#useRoute + 1] = routines.ground.buildWP(posStart, offRoadForm, overRideSpeed) - for i = 1, #tempRoute do - local tempForm = tempRoute[i].action - local tempSpeed = tempRoute[i].speed - - if offRoadForm == 'default' then - tempForm = tempRoute[i].action - end - if onRoadForm == 'default' then - onRoadForm = 'On Road' - end - if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then - tempForm = onRoadForm - else - tempForm = offRoadForm - end - - if type(overRideSpeed) == 'number' then - tempSpeed = overRideSpeed - end - - - useRoute[#useRoute + 1] = routines.ground.buildWP(tempRoute[i], tempForm, tempSpeed) - end - - if pType and string.lower(pType) == 'doubleback' then - local curRoute = routines.utils.deepCopy(useRoute) - for i = #curRoute, 2, -1 do - useRoute[#useRoute + 1] = routines.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed) - end - end - - useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP - end - - local cTask3 = {} - local newPatrol = {} - newPatrol.route = useRoute - newPatrol.gpData = gpData:getName() - cTask3[#cTask3 + 1] = 'routines.ground.patrolRoute(' - cTask3[#cTask3 + 1] = routines.utils.oneLineSerialize(newPatrol) - cTask3[#cTask3 + 1] = ')' - cTask3 = table.concat(cTask3) - local tempTask = { - id = 'WrappedAction', - params = { - action = { - id = 'Script', - params = { - command = cTask3, - - }, - }, - }, - } - - - useRoute[#useRoute].task = tempTask - routines.goRoute(gpData, useRoute) - - return -end - -routines.ground.patrol = function(gpData, pType, form, speed) - local vars = {} - - if type(gpData) == 'table' and gpData:getName() then - gpData = gpData:getName() - end - - vars.useGroupRoute = gpData - vars.gpData = gpData - vars.pType = pType - vars.offRoadForm = form - vars.speed = speed - - routines.ground.patrolRoute(vars) - - return -end - -function routines.GetUnitHeight( CheckUnit ) ---trace.f( "routines" ) - - local UnitPoint = CheckUnit:getPoint() - local UnitPosition = { x = UnitPoint.x, y = UnitPoint.z } - local UnitHeight = UnitPoint.y - - local LandHeight = land.getHeight( UnitPosition ) - - --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) - - --trace.f( "routines", "Unit Height = " .. UnitHeight - LandHeight ) - - return UnitHeight - LandHeight - -end - - - -Su34Status = { status = {} } -boardMsgRed = { statusMsg = "" } -boardMsgAll = { timeMsg = "" } -SpawnSettings = {} -Su34MenuPath = {} -Su34Menus = 0 - - -function Su34AttackCarlVinson(groupName) ---trace.menu("", "Su34AttackCarlVinson") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34.getController(groupSu34) - local groupCarlVinson = Group.getByName("US Carl Vinson #001") - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - if groupCarlVinson ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupCarlVinson:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) - end - Su34Status.status[groupName] = 1 - MessageToRed( string.format('%s: ',groupName) .. 'Attacking carrier Carl Vinson. ', 10, 'RedStatus' .. groupName ) -end - -function Su34AttackWest(groupName) ---trace.f("","Su34AttackWest") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34.getController(groupSu34) - local groupShipWest1 = Group.getByName("US Ship West #001") - local groupShipWest2 = Group.getByName("US Ship West #002") - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - if groupShipWest1 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) - end - if groupShipWest2 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) - end - Su34Status.status[groupName] = 2 - MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the west. ', 10, 'RedStatus' .. groupName ) -end - -function Su34AttackNorth(groupName) ---trace.menu("","Su34AttackNorth") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34.getController(groupSu34) - local groupShipNorth1 = Group.getByName("US Ship North #001") - local groupShipNorth2 = Group.getByName("US Ship North #002") - local groupShipNorth3 = Group.getByName("US Ship North #003") - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - if groupShipNorth1 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) - end - if groupShipNorth2 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) - end - if groupShipNorth3 ~= nil then - controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth3:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) - end - Su34Status.status[groupName] = 3 - MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the north. ', 10, 'RedStatus' .. groupName ) -end - -function Su34Orbit(groupName) ---trace.menu("","Su34Orbit") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34:getController() - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - controllerSu34:pushTask( {id = 'ControlledTask', params = { task = { id = 'Orbit', params = { pattern = AI.Task.OrbitPattern.RACE_TRACK } }, stopCondition = { duration = 600 } } } ) - Su34Status.status[groupName] = 4 - MessageToRed( string.format('%s: ',groupName) .. 'In orbit and awaiting further instructions. ', 10, 'RedStatus' .. groupName ) -end - -function Su34TakeOff(groupName) ---trace.menu("","Su34TakeOff") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34:getController() - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) - Su34Status.status[groupName] = 8 - MessageToRed( string.format('%s: ',groupName) .. 'Take-Off. ', 10, 'RedStatus' .. groupName ) -end - -function Su34Hold(groupName) ---trace.menu("","Su34Hold") - local groupSu34 = Group.getByName( groupName ) - local controllerSu34 = groupSu34:getController() - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) - controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) - Su34Status.status[groupName] = 5 - MessageToRed( string.format('%s: ',groupName) .. 'Holding Weapons. ', 10, 'RedStatus' .. groupName ) -end - -function Su34RTB(groupName) ---trace.menu("","Su34RTB") - Su34Status.status[groupName] = 6 - MessageToRed( string.format('%s: ',groupName) .. 'Return to Krasnodar. ', 10, 'RedStatus' .. groupName ) -end - -function Su34Destroyed(groupName) ---trace.menu("","Su34Destroyed") - Su34Status.status[groupName] = 7 - MessageToRed( string.format('%s: ',groupName) .. 'Destroyed. ', 30, 'RedStatus' .. groupName ) -end - -function GroupAlive( groupName ) ---trace.menu("","GroupAlive") - local groupTest = Group.getByName( groupName ) - - local groupExists = false - - if groupTest then - groupExists = groupTest:isExist() - end - - --trace.r( "", "", { groupExists } ) - return groupExists -end - -function Su34IsDead() ---trace.f() - -end - -function Su34OverviewStatus() ---trace.menu("","Su34OverviewStatus") - local msg = "" - local currentStatus = 0 - local Exists = false - - for groupName, currentStatus in pairs(Su34Status.status) do - - env.info(('Su34 Overview Status: GroupName = ' .. groupName )) - Alive = GroupAlive( groupName ) - - if Alive then - if currentStatus == 1 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Attacking carrier Carl Vinson. " - elseif currentStatus == 2 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Attacking supporting ships in the west. " - elseif currentStatus == 3 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Attacking invading ships in the north. " - elseif currentStatus == 4 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "In orbit and awaiting further instructions. " - elseif currentStatus == 5 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Holding Weapons. " - elseif currentStatus == 6 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Return to Krasnodar. " - elseif currentStatus == 7 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Destroyed. " - elseif currentStatus == 8 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Take-Off. " - end - else - if currentStatus == 7 then - msg = msg .. string.format("%s: ",groupName) - msg = msg .. "Destroyed. " - else - Su34Destroyed(groupName) - end - end - end - - boardMsgRed.statusMsg = msg -end - - -function UpdateBoardMsg() ---trace.f() - Su34OverviewStatus() - MessageToRed( boardMsgRed.statusMsg, 15, 'RedStatus' ) -end - -function MusicReset( flg ) ---trace.f() - trigger.action.setUserFlag(95,flg) -end - -function PlaneActivate(groupNameFormat, flg) ---trace.f() - local groupName = groupNameFormat .. string.format("#%03d", trigger.misc.getUserFlag(flg)) - --trigger.action.outText(groupName,10) - trigger.action.activateGroup(Group.getByName(groupName)) -end - -function Su34Menu(groupName) ---trace.f() - - --env.info(( 'Su34Menu(' .. groupName .. ')' )) - local groupSu34 = Group.getByName( groupName ) - - if Su34Status.status[groupName] == 1 or - Su34Status.status[groupName] == 2 or - Su34Status.status[groupName] == 3 or - Su34Status.status[groupName] == 4 or - Su34Status.status[groupName] == 5 then - if Su34MenuPath[groupName] == nil then - if planeMenuPath == nil then - planeMenuPath = missionCommands.addSubMenuForCoalition( - coalition.side.RED, - "SU-34 anti-ship flights", - nil - ) - end - Su34MenuPath[groupName] = missionCommands.addSubMenuForCoalition( - coalition.side.RED, - "Flight " .. groupName, - planeMenuPath - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Attack carrier Carl Vinson", - Su34MenuPath[groupName], - Su34AttackCarlVinson, - groupName - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Attack ships in the west", - Su34MenuPath[groupName], - Su34AttackWest, - groupName - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Attack ships in the north", - Su34MenuPath[groupName], - Su34AttackNorth, - groupName - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Hold position and await instructions", - Su34MenuPath[groupName], - Su34Orbit, - groupName - ) - - missionCommands.addCommandForCoalition( - coalition.side.RED, - "Report status", - Su34MenuPath[groupName], - Su34OverviewStatus - ) - end - else - if Su34MenuPath[groupName] then - missionCommands.removeItemForCoalition(coalition.side.RED, Su34MenuPath[groupName]) - end - end -end - ---- Obsolete function, but kept to rework in framework. - -function ChooseInfantry ( TeleportPrefixTable, TeleportMax ) ---trace.f("Spawn") - --env.info(( 'ChooseInfantry: ' )) - - TeleportPrefixTableCount = #TeleportPrefixTable - TeleportPrefixTableIndex = math.random( 1, TeleportPrefixTableCount ) - - --env.info(( 'ChooseInfantry: TeleportPrefixTableIndex = ' .. TeleportPrefixTableIndex .. ' TeleportPrefixTableCount = ' .. TeleportPrefixTableCount .. ' TeleportMax = ' .. TeleportMax )) - - local TeleportFound = false - local TeleportLoop = true - local Index = TeleportPrefixTableIndex - local TeleportPrefix = '' - - while TeleportLoop do - TeleportPrefix = TeleportPrefixTable[Index] - if SpawnSettings[TeleportPrefix] then - if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then - SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 - TeleportFound = true - else - TeleportFound = false - end - else - SpawnSettings[TeleportPrefix] = {} - SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 - TeleportFound = true - end - if TeleportFound then - TeleportLoop = false - else - if Index < TeleportPrefixTableCount then - Index = Index + 1 - else - TeleportLoop = false - end - end - --env.info(( 'ChooseInfantry: Loop 1 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) - end - - if TeleportFound == false then - TeleportLoop = true - Index = 1 - while TeleportLoop do - TeleportPrefix = TeleportPrefixTable[Index] - if SpawnSettings[TeleportPrefix] then - if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then - SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 - TeleportFound = true - else - TeleportFound = false - end - else - SpawnSettings[TeleportPrefix] = {} - SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 - TeleportFound = true - end - if TeleportFound then - TeleportLoop = false - else - if Index < TeleportPrefixTableIndex then - Index = Index + 1 - else - TeleportLoop = false - end - end - --env.info(( 'ChooseInfantry: Loop 2 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) - end - end - - local TeleportGroupName = '' - if TeleportFound == true then - TeleportGroupName = TeleportPrefix .. string.format("#%03d", SpawnSettings[TeleportPrefix]['SpawnCount'] ) - else - TeleportGroupName = '' - end - - --env.info(('ChooseInfantry: TeleportGroupName = ' .. TeleportGroupName )) - --env.info(('ChooseInfantry: return')) - - return TeleportGroupName -end - -SpawnedInfantry = 0 - -function LandCarrier ( CarrierGroup, LandingZonePrefix ) ---trace.f() - --env.info(( 'LandCarrier: ' )) - --env.info(( 'LandCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) - --env.info(( 'LandCarrier: LandingZone = ' .. LandingZonePrefix )) - - local controllerGroup = CarrierGroup:getController() - - local LandingZone = trigger.misc.getZone(LandingZonePrefix) - local LandingZonePos = {} - LandingZonePos.x = LandingZone.point.x + math.random(LandingZone.radius * -1, LandingZone.radius) - LandingZonePos.y = LandingZone.point.z + math.random(LandingZone.radius * -1, LandingZone.radius) - - controllerGroup:pushTask( { id = 'Land', params = { point = LandingZonePos, durationFlag = true, duration = 10 } } ) - - --env.info(( 'LandCarrier: end' )) -end - -EscortCount = 0 -function EscortCarrier ( CarrierGroup, EscortPrefix, EscortLastWayPoint, EscortEngagementDistanceMax, EscortTargetTypes ) ---trace.f() - --env.info(( 'EscortCarrier: ' )) - --env.info(( 'EscortCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) - --env.info(( 'EscortCarrier: EscortPrefix = ' .. EscortPrefix )) - - local CarrierName = CarrierGroup:getName() - - local EscortMission = {} - local CarrierMission = {} - - local EscortMission = SpawnMissionGroup( EscortPrefix ) - local CarrierMission = SpawnMissionGroup( CarrierGroup:getName() ) - - if EscortMission ~= nil and CarrierMission ~= nil then - - EscortCount = EscortCount + 1 - EscortMissionName = string.format( EscortPrefix .. '#Escort %s', CarrierName ) - EscortMission.name = EscortMissionName - EscortMission.groupId = nil - EscortMission.lateActivation = false - EscortMission.taskSelected = false - - local EscortUnits = #EscortMission.units - for u = 1, EscortUnits do - EscortMission.units[u].name = string.format( EscortPrefix .. '#Escort %s %02d', CarrierName, u ) - EscortMission.units[u].unitId = nil - end - - - EscortMission.route.points[1].task = { id = "ComboTask", - params = - { - tasks = - { - [1] = - { - enabled = true, - auto = false, - id = "Escort", - number = 1, - params = - { - lastWptIndexFlagChangedManually = false, - groupId = CarrierGroup:getID(), - lastWptIndex = nil, - lastWptIndexFlag = false, - engagementDistMax = EscortEngagementDistanceMax, - targetTypes = EscortTargetTypes, - pos = - { - y = 20, - x = 20, - z = 0, - } -- end of ["pos"] - } -- end of ["params"] - } -- end of [1] - } -- end of ["tasks"] - } -- end of ["params"] - } -- end of ["task"] - - SpawnGroupAdd( EscortPrefix, EscortMission ) - - end -end - -function SendMessageToCarrier( CarrierGroup, CarrierMessage ) ---trace.f() - - if CarrierGroup ~= nil then - MessageToGroup( CarrierGroup, CarrierMessage, 30, 'Carrier/' .. CarrierGroup:getName() ) - end - -end - -function MessageToGroup( MsgGroup, MsgText, MsgTime, MsgName ) ---trace.f() - - if type(MsgGroup) == 'string' then - --env.info( 'MessageToGroup: Converted MsgGroup string "' .. MsgGroup .. '" into a Group structure.' ) - MsgGroup = Group.getByName( MsgGroup ) - end - - if MsgGroup ~= nil then - local MsgTable = {} - MsgTable.text = MsgText - MsgTable.displayTime = MsgTime - MsgTable.msgFor = { units = { MsgGroup:getUnits()[1]:getName() } } - MsgTable.name = MsgName - --routines.message.add( MsgTable ) - --env.info(('MessageToGroup: Message sent to ' .. MsgGroup:getUnits()[1]:getName() .. ' -> ' .. MsgText )) - end -end - -function MessageToUnit( UnitName, MsgText, MsgTime, MsgName ) ---trace.f() - - if UnitName ~= nil then - local MsgTable = {} - MsgTable.text = MsgText - MsgTable.displayTime = MsgTime - MsgTable.msgFor = { units = { UnitName } } - MsgTable.name = MsgName - --routines.message.add( MsgTable ) - end -end - -function MessageToAll( MsgText, MsgTime, MsgName ) ---trace.f() - - MESSAGE:New( MsgText, "Message", MsgTime, MsgName ):ToCoalition( coalition.side.RED ):ToCoalition( coalition.side.BLUE ) -end - -function MessageToRed( MsgText, MsgTime, MsgName ) ---trace.f() - - MESSAGE:New( MsgText, "To Red Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) -end - -function MessageToBlue( MsgText, MsgTime, MsgName ) ---trace.f() - - MESSAGE:New( MsgText, "To Blue Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) -end - -function getCarrierHeight( CarrierGroup ) ---trace.f() - - if CarrierGroup ~= nil then - if table.getn(CarrierGroup:getUnits()) == 1 then - local CarrierUnit = CarrierGroup:getUnits()[1] - local CurrentPoint = CarrierUnit:getPoint() - - local CurrentPosition = { x = CurrentPoint.x, y = CurrentPoint.z } - local CarrierHeight = CurrentPoint.y - - local LandHeight = land.getHeight( CurrentPosition ) - - --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) - - return CarrierHeight - LandHeight - else - return 999999 - end - else - return 999999 - end - -end - -function GetUnitHeight( CheckUnit ) ---trace.f() - - local UnitPoint = CheckUnit:getPoint() - local UnitPosition = { x = CurrentPoint.x, y = CurrentPoint.z } - local UnitHeight = CurrentPoint.y - - local LandHeight = land.getHeight( CurrentPosition ) - - --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) - - return UnitHeight - LandHeight - -end - - -_MusicTable = {} -_MusicTable.Files = {} -_MusicTable.Queue = {} -_MusicTable.FileCnt = 0 - - -function MusicRegister( SndRef, SndFile, SndTime ) ---trace.f() - - env.info(( 'MusicRegister: SndRef = ' .. SndRef )) - env.info(( 'MusicRegister: SndFile = ' .. SndFile )) - env.info(( 'MusicRegister: SndTime = ' .. SndTime )) - - - _MusicTable.FileCnt = _MusicTable.FileCnt + 1 - - _MusicTable.Files[_MusicTable.FileCnt] = {} - _MusicTable.Files[_MusicTable.FileCnt].Ref = SndRef - _MusicTable.Files[_MusicTable.FileCnt].File = SndFile - _MusicTable.Files[_MusicTable.FileCnt].Time = SndTime - - if not _MusicTable.Function then - _MusicTable.Function = routines.scheduleFunction( MusicScheduler, { }, timer.getTime() + 10, 10) - end - -end - -function MusicToPlayer( SndRef, PlayerName, SndContinue ) ---trace.f() - - --env.info(( 'MusicToPlayer: SndRef = ' .. SndRef )) - - local PlayerUnits = AlivePlayerUnits() - for PlayerUnitIdx, PlayerUnit in pairs(PlayerUnits) do - local PlayerUnitName = PlayerUnit:getPlayerName() - --env.info(( 'MusicToPlayer: PlayerUnitName = ' .. PlayerUnitName )) - if PlayerName == PlayerUnitName then - PlayerGroup = PlayerUnit:getGroup() - if PlayerGroup then - --env.info(( 'MusicToPlayer: PlayerGroup = ' .. PlayerGroup:getName() )) - MusicToGroup( SndRef, PlayerGroup, SndContinue ) - end - break - end - end - - --env.info(( 'MusicToPlayer: end' )) - -end - -function MusicToGroup( SndRef, SndGroup, SndContinue ) ---trace.f() - - --env.info(( 'MusicToGroup: SndRef = ' .. SndRef )) - - if SndGroup ~= nil then - if _MusicTable and _MusicTable.FileCnt > 0 then - if SndGroup:isExist() then - if MusicCanStart(SndGroup:getUnit(1):getPlayerName()) then - --env.info(( 'MusicToGroup: OK for Sound.' )) - local SndIdx = 0 - if SndRef == '' then - --env.info(( 'MusicToGroup: SndRef as empty. Queueing at random.' )) - SndIdx = math.random( 1, _MusicTable.FileCnt ) - else - for SndIdx = 1, _MusicTable.FileCnt do - if _MusicTable.Files[SndIdx].Ref == SndRef then - break - end - end - end - --env.info(( 'MusicToGroup: SndIdx = ' .. SndIdx )) - --env.info(( 'MusicToGroup: Queueing Music ' .. _MusicTable.Files[SndIdx].File .. ' for Group ' .. SndGroup:getID() )) - trigger.action.outSoundForGroup( SndGroup:getID(), _MusicTable.Files[SndIdx].File ) - MessageToGroup( SndGroup, 'Playing ' .. _MusicTable.Files[SndIdx].File, 15, 'Music-' .. SndGroup:getUnit(1):getPlayerName() ) - - local SndQueueRef = SndGroup:getUnit(1):getPlayerName() - if _MusicTable.Queue[SndQueueRef] == nil then - _MusicTable.Queue[SndQueueRef] = {} - end - _MusicTable.Queue[SndQueueRef].Start = timer.getTime() - _MusicTable.Queue[SndQueueRef].PlayerName = SndGroup:getUnit(1):getPlayerName() - _MusicTable.Queue[SndQueueRef].Group = SndGroup - _MusicTable.Queue[SndQueueRef].ID = SndGroup:getID() - _MusicTable.Queue[SndQueueRef].Ref = SndIdx - _MusicTable.Queue[SndQueueRef].Continue = SndContinue - _MusicTable.Queue[SndQueueRef].Type = Group - end - end - end - end -end - -function MusicCanStart(PlayerName) ---trace.f() - - --env.info(( 'MusicCanStart:' )) - - local MusicOut = false - - if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then - --env.info(( 'MusicCanStart: PlayerName = ' .. PlayerName )) - local PlayerFound = false - local MusicStart = 0 - local MusicTime = 0 - for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do - if SndQueue.PlayerName == PlayerName then - PlayerFound = true - MusicStart = SndQueue.Start - MusicTime = _MusicTable.Files[SndQueue.Ref].Time - break - end - end - if PlayerFound then - --env.info(( 'MusicCanStart: MusicStart = ' .. MusicStart )) - --env.info(( 'MusicCanStart: MusicTime = ' .. MusicTime )) - --env.info(( 'MusicCanStart: timer.getTime() = ' .. timer.getTime() )) - - if MusicStart + MusicTime <= timer.getTime() then - MusicOut = true - end - else - MusicOut = true - end - end - - if MusicOut then - --env.info(( 'MusicCanStart: true' )) - else - --env.info(( 'MusicCanStart: false' )) - end - - return MusicOut -end - -function MusicScheduler() ---trace.scheduled("", "MusicScheduler") - - --env.info(( 'MusicScheduler:' )) - if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then - --env.info(( 'MusicScheduler: Walking Sound Queue.')) - for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do - if SndQueue.Continue then - if MusicCanStart(SndQueue.PlayerName) then - --env.info(('MusicScheduler: MusicToGroup')) - MusicToPlayer( '', SndQueue.PlayerName, true ) - end - end - end - end - -end - - -env.info(( 'Init: Scripts Loaded v1.1' )) - ---- BASE classes. --- --- @{#BASE} class --- ============== --- The @{#BASE} class is the super class for most of the classes defined within MOOSE. --- --- It handles: --- --- * The construction and inheritance of child classes. --- * The tracing of objects during mission execution within the DCS.log file (under saved games folder). --- --- Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes. --- --- BASE Trace functionality --- ======================== --- The BASE class contains trace methods to trace progress within a mission execution of a certain object. --- Note that these trace methods are inherited by each MOOSE class interiting BASE. --- As such, each object created from derived class from BASE can use the tracing functions to trace its execution. --- --- Trace a function call --- --------------------- --- There are basically 3 types of tracing methods available within BASE: --- --- * @{#BASE.F}: Trace the beginning of a function and its given parameters. --- * @{#BASE.T}: Trace further logic within a function giving optional variables or parameters. --- * @{#BASE.E}: Trace an execption within a function giving optional variables or parameters. An exception will always be traced. --- --- Tracing levels --- -------------- --- There are 3 tracing levels within MOOSE. --- These tracing levels were defined to avoid bulks of tracing to be generated by lots of objects. --- --- As such, the F and T methods have additional variants to trace level 2 and 3 respectively: --- --- * @{#BASE.F2}: Trace the beginning of a function and its given parameters with tracing level 2. --- * @{#BASE.F3}: Trace the beginning of a function and its given parameters with tracing level 3. --- * @{#BASE.T2}: Trace further logic within a function giving optional variables or parameters with tracing level 2. --- * @{#BASE.T3}: Trace further logic within a function giving optional variables or parameters with tracing level 3. --- --- BASE Inheritance support --- ======================== --- The following methods are available to support inheritance: --- --- * @{#BASE.Inherit}: Inherits from a class. --- * @{#BASE.Inherited}: Returns the parent class from the class. --- --- Future --- ====== --- Further methods may be added to BASE whenever there is a need to make "overall" functions available within MOOSE. --- --- ==== --- --- @module Base --- @author FlightControl - -Include.File( "Routines" ) - -local _TraceOn = true -local _TraceLevel = 1 -local _TraceClass = { - --DATABASE = true, - --SEAD = true, - --DESTROYBASETASK = true, - --MOVEMENT = true, - --SPAWN = true, - --STAGE = true, - --ZONE = true, - --GROUP = true, - --UNIT = true, - --CLIENT = true, - --CARGO = true, - --CARGO_GROUP = true, - --CARGO_PACKAGE = true, - --CARGO_SLINGLOAD = true, - --CARGO_ZONE = true, - --CLEANUP = true, - --MENU_CLIENT = true, - --MENU_CLIENT_COMMAND = true, - --ESCORT = true, - } -local _TraceClassMethod = {} - ---- The BASE Class --- @type BASE --- @field ClassName The name of the class. --- @field ClassID The ID number of the class. -BASE = { - ClassName = "BASE", - ClassID = 0, - Events = {} -} - ---- The Formation Class --- @type FORMATION --- @field Cone A cone formation. -FORMATION = { - Cone = "Cone" -} - - - ---- The base constructor. This is the top top class of all classed defined within the MOOSE. --- Any new class needs to be derived from this class for proper inheritance. --- @param #BASE self --- @return #BASE The new instance of the BASE class. --- @usage --- function TASK:New() --- --- local self = BASE:Inherit( self, BASE:New() ) --- --- -- assign Task default values during construction --- self.TaskBriefing = "Task: No Task." --- self.Time = timer.getTime() --- self.ExecuteStage = _TransportExecuteStage.NONE --- --- return self --- end --- @todo need to investigate if the deepCopy is really needed... Don't think so. -function BASE:New() - local Child = routines.utils.deepCopy( self ) - local Parent = {} - setmetatable( Child, Parent ) - Child.__index = Child - self.ClassID = self.ClassID + 1 - Child.ClassID = self.ClassID - --Child.AddEvent( Child, S_EVENT_BIRTH, Child.EventBirth ) - return Child -end - ---- This is the worker method to inherit from a parent class. --- @param #BASE self --- @param Child is the Child class that inherits. --- @param #BASE Parent is the Parent class that the Child inherits from. --- @return #BASE Child -function BASE:Inherit( Child, Parent ) - local Child = routines.utils.deepCopy( Child ) - local Parent = routines.utils.deepCopy( Parent ) - if Child ~= nil then - setmetatable( Child, Parent ) - Child.__index = Child - end - --Child.ClassName = Child.ClassName .. '.' .. Child.ClassID - self:T( 'Inherited from ' .. Parent.ClassName ) - return Child -end - ---- This is the worker method to retrieve the Parent class. --- @param #BASE self --- @param #BASE Child is the Child class from which the Parent class needs to be retrieved. --- @return #BASE -function BASE:Inherited( Child ) - local Parent = getmetatable( Child ) --- env.info('Inherited class of ' .. Child.ClassName .. ' is ' .. Parent.ClassName ) - return Parent -end - ---- Get the ClassName + ClassID of the class instance. --- The ClassName + ClassID is formatted as '%s#%09d'. --- @param #BASE self --- @return #string The ClassName + ClassID of the class instance. -function BASE:GetClassNameAndID() - return string.format( '%s#%09d', self:GetClassName(), self:GetClassID() ) -end - ---- Get the ClassName of the class instance. --- @param #BASE self --- @return #string The ClassName of the class instance. -function BASE:GetClassName() - return self.ClassName -end - ---- Get the ClassID of the class instance. --- @param #BASE self --- @return #string The ClassID of the class instance. -function BASE:GetClassID() - return self.ClassID -end - ---- Set a new listener for the class. --- @param self --- @param DCSTypes#Event Event --- @param #function EventFunction --- @return #BASE -function BASE:AddEvent( Event, EventFunction ) - self:F( Event ) - - self.Events[#self.Events+1] = {} - self.Events[#self.Events].Event = Event - self.Events[#self.Events].EventFunction = EventFunction - self.Events[#self.Events].EventEnabled = false - - return self -end - ---- Returns the event dispatcher --- @param #BASE self --- @return Event#EVENT -function BASE:Event() - - return _EVENTDISPATCHER -end - - - - - ---- Enable the event listeners for the class. --- @param #BASE self --- @return #BASE -function BASE:EnableEvents() - self:F( #self.Events ) - - for EventID, Event in pairs( self.Events ) do - Event.Self = self - Event.EventEnabled = true - end - self.Events.Handler = world.addEventHandler( self ) - - return self -end - - ---- Disable the event listeners for the class. --- @param #BASE self --- @return #BASE -function BASE:DisableEvents() - self:F() - - world.removeEventHandler( self ) - for EventID, Event in pairs( self.Events ) do - Event.Self = nil - Event.EventEnabled = false - end - - return self -end - - -local BaseEventCodes = { - "S_EVENT_SHOT", - "S_EVENT_HIT", - "S_EVENT_TAKEOFF", - "S_EVENT_LAND", - "S_EVENT_CRASH", - "S_EVENT_EJECTION", - "S_EVENT_REFUELING", - "S_EVENT_DEAD", - "S_EVENT_PILOT_DEAD", - "S_EVENT_BASE_CAPTURED", - "S_EVENT_MISSION_START", - "S_EVENT_MISSION_END", - "S_EVENT_TOOK_CONTROL", - "S_EVENT_REFUELING_STOP", - "S_EVENT_BIRTH", - "S_EVENT_HUMAN_FAILURE", - "S_EVENT_ENGINE_STARTUP", - "S_EVENT_ENGINE_SHUTDOWN", - "S_EVENT_PLAYER_ENTER_UNIT", - "S_EVENT_PLAYER_LEAVE_UNIT", - "S_EVENT_PLAYER_COMMENT", - "S_EVENT_SHOOTING_START", - "S_EVENT_SHOOTING_END", - "S_EVENT_MAX", -} - ---onEvent( {[1]="S_EVENT_BIRTH",[2]={["subPlace"]=5,["time"]=0,["initiator"]={["id_"]=16884480,},["place"]={["id_"]=5000040,},["id"]=15,["IniUnitName"]="US F-15C@RAMP-Air Support Mountains#001-01",},} --- Event = { --- id = enum world.event, --- time = Time, --- initiator = Unit, --- target = Unit, --- place = Unit, --- subPlace = enum world.BirthPlace, --- weapon = Weapon --- } - ---- Creation of a Birth Event. --- @param #BASE self --- @param DCSTypes#Time EventTime The time stamp of the event. --- @param DCSObject#Object Initiator The initiating object of the event. --- @param #string IniUnitName The initiating unit name. --- @param place --- @param subplace -function BASE:CreateEventBirth( EventTime, Initiator, IniUnitName, place, subplace ) - self:F( { EventTime, Initiator, IniUnitName, place, subplace } ) - - local Event = { - id = world.event.S_EVENT_BIRTH, - time = EventTime, - initiator = Initiator, - IniUnitName = IniUnitName, - place = place, - subplace = subplace - } - - world.onEvent( Event ) -end - ---- Creation of a Crash Event. --- @param #BASE self --- @param DCSTypes#Time EventTime The time stamp of the event. --- @param DCSObject#Object Initiator The initiating object of the event. -function BASE:CreateEventCrash( EventTime, Initiator ) - self:F( { EventTime, Initiator } ) - - local Event = { - id = world.event.S_EVENT_CRASH, - time = EventTime, - initiator = Initiator, - } - - world.onEvent( Event ) -end - --- TODO: Complete DCSTypes#Event structure. ---- The main event handling function... This function captures all events generated for the class. --- @param #BASE self --- @param DCSTypes#Event event -function BASE:onEvent(event) - --self:F( { BaseEventCodes[event.id], event } ) - - if self then - for EventID, EventObject in pairs( self.Events ) do - if EventObject.EventEnabled then - --env.info( 'onEvent Table EventObject.Self = ' .. tostring(EventObject.Self) ) - --env.info( 'onEvent event.id = ' .. tostring(event.id) ) - --env.info( 'onEvent EventObject.Event = ' .. tostring(EventObject.Event) ) - if event.id == EventObject.Event then - if self == EventObject.Self then - if event.initiator and event.initiator:isExist() then - event.IniUnitName = event.initiator:getName() - end - if event.target and event.target:isExist() then - event.TgtUnitName = event.target:getName() - end - --self:T( { BaseEventCodes[event.id], event } ) - --EventObject.EventFunction( self, event ) - end - end - end - end - end -end - --- Trace section - --- Log a trace (only shown when trace is on) --- TODO: Make trace function using variable parameters. - ---- Set trace level --- @param #BASE self --- @param #number Level -function BASE:TraceLevel( Level ) - _TraceLevel = Level - self:E( "Tracing level " .. Level ) -end - ---- Set tracing for a class --- @param #BASE self --- @param #string Class -function BASE:TraceClass( Class ) - _TraceClass[Class] = true - _TraceClassMethod[Class] = {} - self:E( "Tracing class " .. Class ) -end - ---- Set tracing for a specific method of class --- @param #BASE self --- @param #string Class --- @param #string Method -function BASE:TraceClassMethod( Class, Method ) - if not _TraceClassMethod[Class] then - _TraceClassMethod[Class] = {} - _TraceClassMethod[Class].Method = {} - end - _TraceClassMethod[Class].Method[Method] = true - self:E( "Tracing method " .. Method .. " of class " .. Class ) -end - ---- Trace a function call. Must be at the beginning of the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:F( Arguments ) - - if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then - - local DebugInfoCurrent = debug.getinfo( 2, "nl" ) - local DebugInfoFrom = debug.getinfo( 3, "l" ) - - local Function = "function" - if DebugInfoCurrent.name then - Function = DebugInfoCurrent.name - end - - if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then - local LineCurrent = DebugInfoCurrent.currentline - local LineFrom = 0 - if DebugInfoFrom then - LineFrom = DebugInfoFrom.currentline - end - env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "F", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) - end - end -end - ---- Trace a function call level 2. Must be at the beginning of the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:F2( Arguments ) - - if _TraceLevel >= 2 then - self:F( Arguments ) - end - -end - ---- Trace a function call level 3. Must be at the beginning of the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:F3( Arguments ) - - if _TraceLevel >= 3 then - self:F( Arguments ) - end - -end - ---- Trace a function logic. Can be anywhere within the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:T( Arguments ) - - if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then - - local DebugInfoCurrent = debug.getinfo( 2, "nl" ) - local DebugInfoFrom = debug.getinfo( 3, "l" ) - - local Function = "function" - if DebugInfoCurrent.name then - Function = DebugInfoCurrent.name - end - - if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then - local LineCurrent = DebugInfoCurrent.currentline - local LineFrom = 0 - if DebugInfoFrom then - LineFrom = DebugInfoFrom.currentline - end - env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s" , LineCurrent, LineFrom, "T", self.ClassName, self.ClassID, routines.utils.oneLineSerialize( Arguments ) ) ) - end - end -end - ---- Trace a function logic level 2. Can be anywhere within the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:T2( Arguments ) - - if _TraceLevel >= 2 then - self:T( Arguments ) - end - -end - ---- Trace a function logic level 3. Can be anywhere within the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:T3( Arguments ) - - if _TraceLevel >= 3 then - self:T( Arguments ) - end - -end - ---- Log an exception which will be traced always. Can be anywhere within the function logic. --- @param #BASE self --- @param Arguments A #table or any field. -function BASE:E( Arguments ) - - local DebugInfoCurrent = debug.getinfo( 2, "nl" ) - local DebugInfoFrom = debug.getinfo( 3, "l" ) - - local Function = "function" - if DebugInfoCurrent.name then - Function = DebugInfoCurrent.name - end - - local LineCurrent = DebugInfoCurrent.currentline - local LineFrom = DebugInfoFrom.currentline - - env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "E", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) -end - - - ---- Models time events calling event handing functions. --- --- @{SCHEDULER} class --- =================== --- The @{SCHEDULER} class models time events calling given event handling functions. --- --- SCHEDULER constructor --- ===================== --- The SCHEDULER class is quite easy to use: --- --- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. --- --- SCHEDULER timer methods --- ======================= --- The SCHEDULER can be stopped and restarted with the following methods: --- --- * @{#SCHEDULER.Start}: (Re-)Start the scheduler. --- * @{#SCHEDULER.Start}: Stop the scheduler. --- --- @module Scheduler --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) - - ---- The SCHEDULER class --- @type SCHEDULER --- @extends Base#BASE -SCHEDULER = { - ClassName = "SCHEDULER", -} - - ---- Constructor. --- @param #SCHEDULER self --- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. --- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. --- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. --- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. --- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. --- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. --- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. --- @return #SCHEDULER self -function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) - local self = BASE:Inherit( self, BASE:New() ) - self:F2( { TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) - - self.TimeEventObject = TimeEventObject - self.TimeEventFunction = TimeEventFunction - self.TimeEventFunctionArguments = TimeEventFunctionArguments - self.StartSeconds = StartSeconds - - if RepeatSecondsInterval then - self.RepeatSecondsInterval = RepeatSecondsInterval - else - self.RepeatSecondsInterval = 0 - end - - if RandomizationFactor then - self.RandomizationFactor = RandomizationFactor - else - self.RandomizationFactor = 0 - end - - if StopSeconds then - self.StopSeconds = StopSeconds - end - - self.Repeat = false - - self.StartTime = timer.getTime() - - self:Start() - - return self -end - ---- (Re-)Starts the scheduler. --- @param #SCHEDULER self --- @return #SCHEDULER self -function SCHEDULER:Start() - self:F2( self.TimeEventObject ) - - self.Repeat = true - timer.scheduleFunction( self._Scheduler, self, timer.getTime() + self.StartSeconds + .01 ) - - return self -end - ---- Stops the scheduler. --- @param #SCHEDULER self --- @return #SCHEDULER self -function SCHEDULER:Stop() - self:F2( self.TimeEventObject ) - - self.Repeat = false - - return self -end - --- Private Functions - -function SCHEDULER:_Scheduler() - self:F2( self.TimeEventFunctionArguments ) - - local ErrorHandler = function( errmsg ) - - env.info( "Error in SCHEDULER function:" .. errmsg ) - env.info( debug.traceback() ) - - return errmsg - end - - local Status, Result - if self.TimeEventObject then - Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) - else - Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) - end - - self:T( { Status, Result } ) - - if Status and Status == true and Result and Result == true then - if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then - timer.scheduleFunction( - self._Scheduler, - self, - timer.getTime() + self.RepeatSecondsInterval + math.random( - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) ) + 0.01 - ) - end - end - -end - - - - - - - - ---- The EVENT class models an efficient event handling process between other classes and its units, weapons. --- @module Event --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) - ---- The EVENT structure --- @type EVENT --- @field #EVENT.Events Events -EVENT = { - ClassName = "EVENT", - ClassID = 0, -} - -local _EVENTCODES = { - "S_EVENT_SHOT", - "S_EVENT_HIT", - "S_EVENT_TAKEOFF", - "S_EVENT_LAND", - "S_EVENT_CRASH", - "S_EVENT_EJECTION", - "S_EVENT_REFUELING", - "S_EVENT_DEAD", - "S_EVENT_PILOT_DEAD", - "S_EVENT_BASE_CAPTURED", - "S_EVENT_MISSION_START", - "S_EVENT_MISSION_END", - "S_EVENT_TOOK_CONTROL", - "S_EVENT_REFUELING_STOP", - "S_EVENT_BIRTH", - "S_EVENT_HUMAN_FAILURE", - "S_EVENT_ENGINE_STARTUP", - "S_EVENT_ENGINE_SHUTDOWN", - "S_EVENT_PLAYER_ENTER_UNIT", - "S_EVENT_PLAYER_LEAVE_UNIT", - "S_EVENT_PLAYER_COMMENT", - "S_EVENT_SHOOTING_START", - "S_EVENT_SHOOTING_END", - "S_EVENT_MAX", -} - ---- The Event structure --- @type EVENTDATA --- @field id --- @field initiator --- @field target --- @field weapon --- @field IniDCSUnit --- @field IniDCSUnitName --- @field IniDCSGroup --- @field IniDCSGroupName --- @field TgtDCSUnit --- @field TgtDCSUnitName --- @field TgtDCSGroup --- @field TgtDCSGroupName --- @field Weapon --- @field WeaponName --- @field WeaponTgtDCSUnit - ---- The Events structure --- @type EVENT.Events --- @field #number IniUnit - -function EVENT:New() - local self = BASE:Inherit( self, BASE:New() ) - self:F() - self.EventHandler = world.addEventHandler( self ) - return self -end - -function EVENT:EventText( EventID ) - - local EventText = _EVENTCODES[EventID] - - return EventText -end - - ---- Initializes the Events structure for the event --- @param #EVENT self --- @param DCSWorld#world.event EventID --- @param #string EventClass --- @return #EVENT.Events -function EVENT:Init( EventID, EventClass ) - self:F3( { _EVENTCODES[EventID], EventClass } ) - if not self.Events[EventID] then - self.Events[EventID] = {} - end - if not self.Events[EventID][EventClass] then - self.Events[EventID][EventClass] = {} - end - return self.Events[EventID][EventClass] -end - - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param #table EventTemplate --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @param #function OnEventFunction --- @return #EVENT -function EVENT:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, OnEventFunction ) - self:F2( EventTemplate.name ) - - for EventUnitID, EventUnit in pairs( EventTemplate.units ) do - OnEventFunction( self, EventUnit.name, EventFunction, EventSelf ) - end - return self -end - ---- Set a new listener for an S_EVENT_X event independent from a unit or a weapon. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @param EventID --- @return #EVENT -function EVENT:OnEventGeneric( EventFunction, EventSelf, EventID ) - self:F2( { EventID } ) - - local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) - Event.EventFunction = EventFunction - Event.EventSelf = EventSelf - return self -end - - ---- Set a new listener for an S_EVENT_X event --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @param EventID --- @return #EVENT -function EVENT:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, EventID ) - self:F2( EventDCSUnitName ) - - local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) - if not Event.IniUnit then - Event.IniUnit = {} - end - Event.IniUnit[EventDCSUnitName] = {} - Event.IniUnit[EventDCSUnitName].EventFunction = EventFunction - Event.IniUnit[EventDCSUnitName].EventSelf = EventSelf - return self -end - - ---- Create an OnBirth event handler for a group --- @param #EVENT self --- @param Group#GROUP EventGroup --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnBirthForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnBirthForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_BIRTH event, and registers the unit born. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf --- @return #EVENT -function EVENT:OnBirth( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) - - return self -end - ---- Set a new listener for an S_EVENT_BIRTH event. --- @param #EVENT self --- @param #string EventDCSUnitName The id of the unit for the event to be handled. --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf --- @return #EVENT -function EVENT:OnBirthForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) - - return self -end - ---- Create an OnCrash event handler for a group --- @param #EVENT self --- @param Group#GROUP EventGroup --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnCrashForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnCrashForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_CRASH event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf --- @return #EVENT -function EVENT:OnCrash( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_CRASH ) - - return self -end - ---- Set a new listener for an S_EVENT_CRASH event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnCrashForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_CRASH ) - - return self -end - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param Group#GROUP EventGroup --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnDeadForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnDeadForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_DEAD event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf --- @return #EVENT -function EVENT:OnDead( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_DEAD ) - - return self -end - - ---- Set a new listener for an S_EVENT_DEAD event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_DEAD ) - - return self -end - ---- Set a new listener for an S_EVENT_PILOT_DEAD event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnPilotDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_PILOT_DEAD ) - - return self -end - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param #table EventTemplate --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnLandForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnLandForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_LAND event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnLandForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_LAND ) - - return self -end - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param #table EventTemplate --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnTakeOffForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnTakeOffForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_TAKEOFF event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnTakeOffForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_TAKEOFF ) - - return self -end - ---- Create an OnDead event handler for a group --- @param #EVENT self --- @param #table EventTemplate --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnEngineShutDownForTemplate( EventTemplate, EventFunction, EventSelf ) - self:F( EventTemplate.name ) - - self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnEngineShutDownForUnit ) - - return self -end - ---- Set a new listener for an S_EVENT_ENGINE_SHUTDOWN event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnEngineShutDownForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_SHUTDOWN ) - - return self -end - ---- Set a new listener for an S_EVENT_ENGINE_STARTUP event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnEngineStartUpForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_STARTUP ) - - return self -end - ---- Set a new listener for an S_EVENT_SHOT event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnShot( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_SHOT ) - - return self -end - ---- Set a new listener for an S_EVENT_SHOT event for a unit. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnShotForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_SHOT ) - - return self -end - ---- Set a new listener for an S_EVENT_HIT event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnHit( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_HIT ) - - return self -end - ---- Set a new listener for an S_EVENT_HIT event. --- @param #EVENT self --- @param #string EventDCSUnitName --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnHitForUnit( EventDCSUnitName, EventFunction, EventSelf ) - self:F( EventDCSUnitName ) - - self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_HIT ) - - return self -end - ---- Set a new listener for an S_EVENT_PLAYER_ENTER_UNIT event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnPlayerEnterUnit( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_ENTER_UNIT ) - - return self -end - ---- Set a new listener for an S_EVENT_PLAYER_LEAVE_UNIT event. --- @param #EVENT self --- @param #function EventFunction The function to be called when the event occurs for the unit. --- @param Base#BASE EventSelf The self instance of the class for which the event is. --- @return #EVENT -function EVENT:OnPlayerLeaveUnit( EventFunction, EventSelf ) - self:F() - - self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_LEAVE_UNIT ) - - return self -end - - - -function EVENT:onEvent( Event ) - self:F( { _EVENTCODES[Event.id], Event } ) - - 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.IniDCSGroupName = "" - if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then - Event.IniDCSGroupName = Event.IniDCSGroup:getName() - end - end - if Event.target then - if Event.target and Event.target:getCategory() == Object.Category.UNIT then - Event.TgtDCSUnit = Event.target - Event.TgtDCSGroup = Event.TgtDCSUnit:getGroup() - Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() - Event.TgtDCSGroupName = "" - if Event.TgtDCSGroup and Event.TgtDCSGroup:isExist() then - Event.TgtDCSGroupName = Event.TgtDCSGroup:getName() - end - end - end - if Event.weapon then - Event.Weapon = Event.weapon - Event.WeaponName = Event.Weapon:getTypeName() - --Event.WeaponTgtDCSUnit = Event.Weapon:getTarget() - end - self:E( { _EVENTCODES[Event.id], Event } ) - for ClassName, EventData in pairs( self.Events[Event.id] ) do - if Event.IniDCSUnitName and EventData.IniUnit and EventData.IniUnit[Event.IniDCSUnitName] then - self:T2( { "Calling event function for class ", ClassName, " unit ", Event.IniDCSUnitName } ) - EventData.IniUnit[Event.IniDCSUnitName].EventFunction( EventData.IniUnit[Event.IniDCSUnitName].EventSelf, Event ) - else - if Event.IniDCSUnit and not EventData.IniUnit then - self:T2( { "Calling event function for class ", ClassName } ) - EventData.EventFunction( EventData.EventSelf, Event ) - end - end - end - end -end - ---- Encapsulation of DCS World Menu system in a set of MENU classes. --- @module Menu - -Include.File( "Routines" ) -Include.File( "Base" ) - ---- The MENU class --- @type MENU --- @extends Base#BASE -MENU = { - ClassName = "MENU", - MenuPath = nil, - MenuText = "", - MenuParentPath = nil -} - ---- -function MENU:New( MenuText, MenuParentPath ) - - -- Arrange meta tables - local Child = BASE:Inherit( self, BASE:New() ) - - Child.MenuPath = nil - Child.MenuText = MenuText - Child.MenuParentPath = MenuParentPath - return Child -end - ---- The COMMANDMENU class --- @type COMMANDMENU --- @extends Menu#MENU -COMMANDMENU = { - ClassName = "COMMANDMENU", - CommandMenuFunction = nil, - CommandMenuArgument = nil -} - -function COMMANDMENU:New( MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) - - -- Arrange meta tables - - local MenuParentPath = nil - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - - Child.MenuPath = missionCommands.addCommand( MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) - Child.CommandMenuFunction = CommandMenuFunction - Child.CommandMenuArgument = CommandMenuArgument - return Child -end - ---- The SUBMENU class --- @type SUBMENU --- @extends Menu#MENU -SUBMENU = { - ClassName = "SUBMENU" -} - -function SUBMENU:New( MenuText, ParentMenu ) - - -- Arrange meta tables - local MenuParentPath = nil - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - - Child.MenuPath = missionCommands.addSubMenu( MenuText, MenuParentPath ) - return Child -end - --- This local variable is used to cache the menus registered under clients. --- Menus don't dissapear when clients are destroyed and restarted. --- So every menu for a client created must be tracked so that program logic accidentally does not create --- the same menus twice during initialization logic. --- These menu classes are handling this logic with this variable. -local _MENUCLIENTS = {} - ---- The MENU_CLIENT class --- @type MENU_CLIENT --- @extends Menu#MENU -MENU_CLIENT = { - ClassName = "MENU_CLIENT" -} - ---- Creates a new menu item for a group --- @param self --- @param Client#CLIENT MenuClient The Client owning the menu. --- @param #string MenuText The text for the menu. --- @param #table ParentMenu The parent menu. --- @return #MENU_CLIENT self -function MENU_CLIENT:New( MenuClient, MenuText, ParentMenu ) - - -- Arrange meta tables - local MenuParentPath = {} - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - self:F( { MenuClient, MenuText, ParentMenu } ) - - self.MenuClient = MenuClient - self.MenuClientGroupID = MenuClient:GetClientGroupID() - self.MenuParentPath = MenuParentPath - self.MenuText = MenuText - self.ParentMenu = ParentMenu - - self.Menus = {} - - if not _MENUCLIENTS[self.MenuClientGroupID] then - _MENUCLIENTS[self.MenuClientGroupID] = {} - end - - local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] - - self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText } ) - - local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText - if MenuPath[MenuPathID] then - missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) - end - - self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath ) - MenuPath[MenuPathID] = self.MenuPath - - self:T( { MenuClient:GetClientGroupName(), self.MenuPath } ) - - if ParentMenu and ParentMenu.Menus then - ParentMenu.Menus[self.MenuPath] = self - end - return self -end - ---- Removes the sub menus recursively of this MENU_CLIENT. --- @param #MENU_CLIENT self --- @return #MENU_CLIENT self -function MENU_CLIENT:RemoveSubMenus() - self:F( self.MenuPath ) - - for MenuID, Menu in pairs( self.Menus ) do - Menu:Remove() - end - -end - ---- Removes the sub menus recursively of this MENU_CLIENT. --- @param #MENU_CLIENT self --- @return #MENU_CLIENT self -function MENU_CLIENT:Remove() - self:F( self.MenuPath ) - - self:RemoveSubMenus() - - if not _MENUCLIENTS[self.MenuClientGroupID] then - _MENUCLIENTS[self.MenuClientGroupID] = {} - end - - local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] - - if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then - MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil - end - - missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) - self.ParentMenu.Menus[self.MenuPath] = nil - return nil -end - - ---- The MENU_CLIENT_COMMAND class --- @type MENU_CLIENT_COMMAND --- @extends Menu#MENU -MENU_CLIENT_COMMAND = { - ClassName = "MENU_CLIENT_COMMAND" -} - ---- Creates a new radio command item for a group --- @param self --- @param Client#CLIENT MenuClient The Client owning the menu. --- @param MenuText The text for the menu. --- @param ParentMenu The parent menu. --- @param CommandMenuFunction A function that is called when the menu key is pressed. --- @param CommandMenuArgument An argument for the function. --- @return Menu#MENU_CLIENT_COMMAND self -function MENU_CLIENT_COMMAND:New( MenuClient, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) - - -- Arrange meta tables - - local MenuParentPath = {} - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - - self.MenuClient = MenuClient - self.MenuClientGroupID = MenuClient:GetClientGroupID() - self.MenuParentPath = MenuParentPath - self.MenuText = MenuText - self.ParentMenu = ParentMenu - - if not _MENUCLIENTS[self.MenuClientGroupID] then - _MENUCLIENTS[self.MenuClientGroupID] = {} - end - - local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] - - self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) - - local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText - if MenuPath[MenuPathID] then - missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) - end - - self.MenuPath = missionCommands.addCommandForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) - MenuPath[MenuPathID] = self.MenuPath - - self.CommandMenuFunction = CommandMenuFunction - self.CommandMenuArgument = CommandMenuArgument - - ParentMenu.Menus[self.MenuPath] = self - - return self -end - -function MENU_CLIENT_COMMAND:Remove() - self:F( self.MenuPath ) - - if not _MENUCLIENTS[self.MenuClientGroupID] then - _MENUCLIENTS[self.MenuClientGroupID] = {} - end - - local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] - - if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then - MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil - end - - missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) - self.ParentMenu.Menus[self.MenuPath] = nil - return nil -end - - ---- The MENU_COALITION class --- @type MENU_COALITION --- @extends Menu#MENU -MENU_COALITION = { - ClassName = "MENU_COALITION" -} - ---- Creates a new coalition menu item --- @param #MENU_COALITION self --- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. --- @param #string MenuText The text for the menu. --- @param #table ParentMenu The parent menu. --- @return #MENU_COALITION self -function MENU_COALITION:New( MenuCoalition, MenuText, ParentMenu ) - - -- Arrange meta tables - local MenuParentPath = {} - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - self:F( { MenuCoalition, MenuText, ParentMenu } ) - - self.MenuCoalition = MenuCoalition - self.MenuParentPath = MenuParentPath - self.MenuText = MenuText - self.ParentMenu = ParentMenu - - self.Menus = {} - - self:T( { MenuParentPath, MenuText } ) - - self.MenuPath = missionCommands.addSubMenuForCoalition( self.MenuCoalition, MenuText, MenuParentPath ) - - self:T( { self.MenuPath } ) - - if ParentMenu and ParentMenu.Menus then - ParentMenu.Menus[self.MenuPath] = self - end - return self -end - ---- Removes the sub menus recursively of this MENU_COALITION. --- @param #MENU_COALITION self --- @return #MENU_COALITION self -function MENU_COALITION:RemoveSubMenus() - self:F( self.MenuPath ) - - for MenuID, Menu in pairs( self.Menus ) do - Menu:Remove() - end - -end - ---- Removes the sub menus recursively of this MENU_COALITION. --- @param #MENU_COALITION self --- @return #MENU_COALITION self -function MENU_COALITION:Remove() - self:F( self.MenuPath ) - - self:RemoveSubMenus() - missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) - self.ParentMenu.Menus[self.MenuPath] = nil - - return nil -end - - ---- The MENU_COALITION_COMMAND class --- @type MENU_COALITION_COMMAND --- @extends Menu#MENU -MENU_COALITION_COMMAND = { - ClassName = "MENU_COALITION_COMMAND" -} - ---- Creates a new radio command item for a group --- @param #MENU_COALITION_COMMAND self --- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. --- @param MenuText The text for the menu. --- @param ParentMenu The parent menu. --- @param CommandMenuFunction A function that is called when the menu key is pressed. --- @param CommandMenuArgument An argument for the function. --- @return #MENU_COALITION_COMMAND self -function MENU_COALITION_COMMAND:New( MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) - - -- Arrange meta tables - - local MenuParentPath = {} - if ParentMenu ~= nil then - MenuParentPath = ParentMenu.MenuPath - end - - local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) - - self.MenuCoalition = MenuCoalition - self.MenuParentPath = MenuParentPath - self.MenuText = MenuText - self.ParentMenu = ParentMenu - - self:T( { MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) - - self.MenuPath = missionCommands.addCommandForCoalition( self.MenuCoalition, MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) - - self.CommandMenuFunction = CommandMenuFunction - self.CommandMenuArgument = CommandMenuArgument - - ParentMenu.Menus[self.MenuPath] = self - - return self -end - ---- Removes a radio command item for a coalition --- @param #MENU_COALITION_COMMAND self --- @return #MENU_COALITION_COMMAND self -function MENU_COALITION_COMMAND:Remove() - self:F( self.MenuPath ) - - missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) - self.ParentMenu.Menus[self.MenuPath] = nil - return nil -end ---- GROUP class. --- --- @{GROUP} class --- ============== --- The @{GROUP} class is a wrapper class to handle the DCS Group objects: --- --- * Support all DCS Group APIs. --- * Enhance with Group specific APIs not in the DCS Group API set. --- * Handle local Group Controller. --- * Manage the "state" of the DCS Group. --- --- --- GROUP reference methods --- ======================= --- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. --- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). --- --- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference --- using the DCS Group or the DCS GroupName. --- --- Another thing to know is that GROUP objects do not "contain" the DCS Group object. --- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. --- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. --- --- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: --- --- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. --- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. --- --- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). --- @module Group --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Message" ) -Include.File( "Unit" ) - ---- The GROUP class --- @type GROUP --- @extends Base#BASE --- @field DCSGroup#Group DCSGroup The DCS group class. --- @field #string GroupName The name of the group. -GROUP = { - ClassName = "GROUP", - GroupName = "", - GroupID = 0, - Controller = nil, - DCSGroup = nil, - WayPointFunctions = {}, - } - ---- A DCSGroup --- @type DCSGroup --- @field id_ The ID of the group in DCS - ---- Create a new GROUP from a DCSGroup --- @param #GROUP self --- @param DCSGroup#Group GroupName The DCS Group name --- @return #GROUP self -function GROUP:Register( GroupName ) - local self = BASE:Inherit( self, BASE:New() ) - self:F2( GroupName ) - self.GroupName = GroupName - return self -end - --- Reference methods. - ---- Find the GROUP wrapper class instance using the DCS Group. --- @param #GROUP self --- @param DCSGroup#Group DCSGroup The DCS Group. --- @return #GROUP The GROUP. -function GROUP:Find( DCSGroup ) - - local GroupName = DCSGroup:getName() -- Group#GROUP - local GroupFound = _DATABASE:FindGroup( GroupName ) - return GroupFound -end - ---- Find the created GROUP using the DCS Group Name. --- @param #GROUP self --- @param #string GroupName The DCS Group Name. --- @return #GROUP The GROUP. -function GROUP:FindByName( GroupName ) - - local GroupFound = _DATABASE:FindGroup( GroupName ) - return GroupFound -end - --- DCS Group methods support. - ---- Returns the DCS Group. --- @param #GROUP self --- @return DCSGroup#Group The DCS Group. -function GROUP:GetDCSGroup() - local DCSGroup = Group.getByName( self.GroupName ) - - if DCSGroup then - return DCSGroup - end - - return nil -end - - ---- Returns if the DCS Group is alive. --- When the group exists at run-time, this method will return true, otherwise false. --- @param #GROUP self --- @return #boolean true if the DCS Group is alive. -function GROUP:IsAlive() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupIsAlive = DCSGroup:isExist() - self:T3( GroupIsAlive ) - return GroupIsAlive - end - - return nil -end - ---- Destroys the DCS Group and all of its DCS Units. --- Note that this destroy method also raises a destroy event at run-time. --- So all event listeners will catch the destroy event of this DCS Group. --- @param #GROUP self -function GROUP:Destroy() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - self:CreateEventCrash( timer.getTime(), UnitData ) - end - DCSGroup:destroy() - DCSGroup = nil - end - - return nil -end - ---- Returns category of the DCS Group. --- @param #GROUP self --- @return DCSGroup#Group.Category The category ID -function GROUP:GetCategory() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T3( GroupCategory ) - return GroupCategory - end - - return nil -end - ---- Returns the category name of the DCS Group. --- @param #GROUP self --- @return #string Category name = Helicopter, Airplane, Ground Unit, Ship -function GROUP:GetCategoryName() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local CategoryNames = { - [Group.Category.AIRPLANE] = "Airplane", - [Group.Category.HELICOPTER] = "Helicopter", - [Group.Category.GROUND] = "Ground Unit", - [Group.Category.SHIP] = "Ship", - } - local GroupCategory = DCSGroup:getCategory() - self:T3( GroupCategory ) - - return CategoryNames[GroupCategory] - end - - return nil -end - - ---- Returns the coalition of the DCS Group. --- @param #GROUP self --- @return DCSCoalitionObject#coalition.side The coalition side of the DCS Group. -function GROUP:GetCoalition() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local GroupCoalition = DCSGroup:getCoalition() - self:T3( GroupCoalition ) - return GroupCoalition - end - - return nil -end - ---- Returns the name of the DCS Group. --- @param #GROUP self --- @return #string The DCS Group name. -function GROUP:GetName() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupName = DCSGroup:getName() - self:T3( GroupName ) - return GroupName - end - - return nil -end - ---- Returns the DCS Group identifier. --- @param #GROUP self --- @return #number The identifier of the DCS Group. -function GROUP:GetID() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupID = DCSGroup:getID() - self:T3( GroupID ) - return GroupID - end - - return nil -end - ---- Returns the UNIT wrapper class with number UnitNumber. --- If the underlying DCS Unit does not exist, the method will return nil. . --- @param #GROUP self --- @param #number UnitNumber The number of the UNIT wrapper class to be returned. --- @return Unit#UNIT The UNIT wrapper class. -function GROUP:GetUnit( UnitNumber ) - self:F2( { self.GroupName, UnitNumber } ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) - self:T3( UnitFound.UnitName ) - self:T2( UnitFound ) - return UnitFound - end - - return nil -end - ---- Returns the DCS Unit with number UnitNumber. --- If the underlying DCS Unit does not exist, the method will return nil. . --- @param #GROUP self --- @param #number UnitNumber The number of the DCS Unit to be returned. --- @return DCSUnit#Unit The DCS Unit. -function GROUP:GetDCSUnit( UnitNumber ) - self:F2( { self.GroupName, UnitNumber } ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) - self:T3( DCSUnitFound ) - return DCSUnitFound - end - - return nil -end - ---- Returns current size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. --- @param #GROUP self --- @return #number The DCS Group size. -function GROUP:GetSize() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupSize = DCSGroup:getSize() - self:T3( GroupSize ) - return GroupSize - end - - return nil -end - ---- ---- Returns the initial size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. --- @param #GROUP self --- @return #number The DCS Group initial size. -function GROUP:GetInitialSize() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupInitialSize = DCSGroup:getInitialSize() - self:T3( GroupInitialSize ) - return GroupInitialSize - end - - return nil -end - ---- Returns the UNITs wrappers of the DCS Units of the DCS Group. --- @param #GROUP self --- @return #table The UNITs wrappers. -function GROUP:GetUnits() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local DCSUnits = DCSGroup:getUnits() - local Units = {} - for Index, UnitData in pairs( DCSUnits ) do - Units[#Units+1] = UNIT:Find( UnitData ) - end - self:T3( Units ) - return Units - end - - return nil -end - - ---- Returns the DCS Units of the DCS Group. --- @param #GROUP self --- @return #table The DCS Units. -function GROUP:GetDCSUnits() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local DCSUnits = DCSGroup:getUnits() - self:T3( DCSUnits ) - return DCSUnits - end - - return nil -end - ---- Get the controller for the GROUP. --- @param #GROUP self --- @return DCSController#Controller -function GROUP:_GetController() - self:F2( { self.GroupName } ) - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupController = DCSGroup:getController() - self:T3( GroupController ) - return GroupController - end - - return nil -end - - ---- Retrieve the group mission and allow to place function hooks within the mission waypoint plan. --- Use the method @{Group#GROUP:WayPointFunction} to define the hook functions for specific waypoints. --- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. --- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! --- @param #GROUP self --- @return #GROUP -function GROUP:WayPointInitialize() - - self.WayPoints = self:GetTaskRoute() - - return self -end - - ---- Registers a waypoint function that will be executed when the group moves over the WayPoint. --- @param #GROUP self --- @param #number WayPoint The waypoint number. Note that the start waypoint on the route is WayPoint 1! --- @param #number WayPointIndex When defining multiple WayPoint functions for one WayPoint, use WayPointIndex to set the sequence of actions. --- @param #function WayPointFunction The waypoint function to be called when the group moves over the waypoint. The waypoint function takes variable parameters. --- @return #GROUP -function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) - self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) - - table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) - self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) - return self -end - - -function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) - - local DCSTask - - local DCSScript = {} - DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " - - if FunctionArguments.n > 0 then - DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" - else - DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" - end - - DCSTask = self:TaskWrappedAction( - self:CommandDoScript( - table.concat( DCSScript ) - ), WayPointIndex - ) - - self:T3( DCSTask ) - - return DCSTask - -end - - - ---- Executes the WayPoint plan. --- The function gets a WayPoint parameter, that you can use to restart the mission at a specific WayPoint. --- Note that when the WayPoint parameter is used, the new start mission waypoint of the group will be 1! --- @param #GROUP self --- @param #number WayPoint The WayPoint from where to execute the mission. --- @param #WaitTime The amount seconds to wait before initiating the mission. --- @return #GROUP -function GROUP:WayPointExecute( WayPoint, WaitTime ) - - if not WayPoint then - WayPoint = 1 - end - - -- When starting the mission from a certain point, the TaskPoints need to be deleted before the given WayPoint. - for TaskPointID = 1, WayPoint - 1 do - table.remove( self.WayPoints, 1 ) - end - - self:T3( self.WayPoints ) - - self:SetTask( self:TaskRoute( self.WayPoints ), WaitTime ) - - return self -end - - ---- Activates a GROUP. --- @param #GROUP self -function GROUP:Activate() - self:F2( { self.GroupName } ) - trigger.action.activateGroup( self:GetDCSGroup() ) - return self:GetDCSGroup() -end - - ---- Gets the type name of the group. --- @param #GROUP self --- @return #string The type name of the group. -function GROUP:GetTypeName() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupTypeName = DCSGroup:getUnit(1):getTypeName() - self:T3( GroupTypeName ) - return( GroupTypeName ) - end - - return nil -end - ---- Gets the CallSign of the first DCS Unit of the DCS Group. --- @param #GROUP self --- @return #string The CallSign of the first DCS Unit of the DCS Group. -function GROUP:GetCallsign() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCallSign = DCSGroup:getUnit(1):getCallsign() - self:T3( GroupCallSign ) - return GroupCallSign - end - - return nil -end - ---- Returns the current point (Vec2 vector) of the first DCS Unit in the DCS Group. --- @return DCSTypes#Vec2 Current Vec2 point of the first DCS Unit of the DCS Group. -function GROUP:GetPointVec2() - self:F2( self.GroupName ) - - local GroupPointVec2 = self:GetUnit(1):GetPointVec2() - self:T3( GroupPointVec2 ) - return GroupPointVec2 -end - ---- Returns the current point (Vec3 vector) of the first DCS Unit in the DCS Group. --- @return DCSTypes#Vec3 Current Vec3 point of the first DCS Unit of the DCS Group. -function GROUP:GetPointVec3() - self:F2( self.GroupName ) - - local GroupPointVec3 = self:GetUnit(1):GetPointVec3() - self:T3( GroupPointVec3 ) - return GroupPointVec3 -end - - - --- Is Functions - ---- Returns if the group is of an air category. --- If the group is a helicopter or a plane, then this method will return true, otherwise false. --- @param #GROUP self --- @return #boolean Air category evaluation result. -function GROUP:IsAir() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER - self:T3( IsAirResult ) - return IsAirResult - end - - return nil -end - ---- Returns if the DCS Group contains Helicopters. --- @param #GROUP self --- @return #boolean true if DCS Group contains Helicopters. -function GROUP:IsHelicopter() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) - return GroupCategory == Group.Category.HELICOPTER - end - - return nil -end - ---- Returns if the DCS Group contains AirPlanes. --- @param #GROUP self --- @return #boolean true if DCS Group contains AirPlanes. -function GROUP:IsAirPlane() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) - return GroupCategory == Group.Category.AIRPLANE - end - - return nil -end - ---- Returns if the DCS Group contains Ground troops. --- @param #GROUP self --- @return #boolean true if DCS Group contains Ground troops. -function GROUP:IsGround() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) - return GroupCategory == Group.Category.GROUND - end - - return nil -end - ---- Returns if the DCS Group contains Ships. --- @param #GROUP self --- @return #boolean true if DCS Group contains Ships. -function GROUP:IsShip() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) - return GroupCategory == Group.Category.SHIP - end - - return nil -end - ---- Returns if all units of the group are on the ground or landed. --- If all units of this group are on the ground, this function will return true, otherwise false. --- @param #GROUP self --- @return #boolean All units on the ground result. -function GROUP:AllOnGround() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local AllOnGroundResult = true - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - if UnitData:inAir() then - AllOnGroundResult = false - end - end - - self:T3( AllOnGroundResult ) - return AllOnGroundResult - end - - return nil -end - ---- Returns the current maximum velocity of the group. --- Each unit within the group gets evaluated, and the maximum velocity (= the unit which is going the fastest) is returned. --- @param #GROUP self --- @return #number Maximum velocity found. -function GROUP:GetMaxVelocity() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local MaxVelocity = 0 - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - - local Velocity = UnitData:getVelocity() - local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) - - if VelocityTotal < MaxVelocity then - MaxVelocity = VelocityTotal - end - end - - return MaxVelocity - end - - return nil -end - ---- Returns the current minimum height of the group. --- Each unit within the group gets evaluated, and the minimum height (= the unit which is the lowest elevated) is returned. --- @param #GROUP self --- @return #number Minimum height found. -function GROUP:GetMinHeight() - self:F2() - -end - ---- Returns the current maximum height of the group. --- Each unit within the group gets evaluated, and the maximum height (= the unit which is the highest elevated) is returned. --- @param #GROUP self --- @return #number Maximum height found. -function GROUP:GetMaxHeight() - self:F2() - -end - --- Tasks - ---- Popping current Task from the group. --- @param #GROUP self --- @return Group#GROUP self -function GROUP:PopCurrentTask() - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local Controller = self:_GetController() - Controller:popTask() - return self - end - - return nil -end - ---- Pushing Task on the queue from the group. --- @param #GROUP self --- @return Group#GROUP self -function GROUP:PushTask( DCSTask, WaitTime ) - self:F2() - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local Controller = self:_GetController() - - -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. - -- Therefore we schedule the functions to set the mission and options for the Group. - -- Controller:pushTask( DCSTask ) - - if WaitTime then - --routines.scheduleFunction( Controller.pushTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) - SCHEDULER:New( Controller, Controller.pushTask, { DCSTask }, WaitTime ) - else - Controller:pushTask( DCSTask ) - end - - return self - end - - return nil -end - ---- Clearing the Task Queue and Setting the Task on the queue from the group. --- @param #GROUP self --- @return Group#GROUP self -function GROUP:SetTask( DCSTask, WaitTime ) - self:F2( { DCSTask } ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - - local Controller = self:_GetController() - - -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. - -- Therefore we schedule the functions to set the mission and options for the Group. - -- Controller.setTask( Controller, DCSTask ) - - if not WaitTime then - WaitTime = 1 - end - --routines.scheduleFunction( Controller.setTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) - SCHEDULER:New( Controller, Controller.setTask, { DCSTask }, WaitTime ) - - return self - end - - return nil -end - - ---- Return a condition section for a controlled task --- @param #GROUP self --- @param DCSTime#Time time --- @param #string userFlag --- @param #boolean userFlagValue --- @param #string condition --- @param DCSTime#Time duration --- @param #number lastWayPoint --- return DCSTask#Task -function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration, lastWayPoint ) - self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) - - local DCSStopCondition = {} - DCSStopCondition.time = time - DCSStopCondition.userFlag = userFlag - DCSStopCondition.userFlagValue = userFlagValue - DCSStopCondition.condition = condition - DCSStopCondition.duration = duration - DCSStopCondition.lastWayPoint = lastWayPoint - - self:T3( { DCSStopCondition } ) - return DCSStopCondition -end - ---- Return a Controlled Task taking a Task and a TaskCondition --- @param #GROUP self --- @param DCSTask#Task DCSTask --- @param #DCSStopCondition DCSStopCondition --- @return DCSTask#Task -function GROUP:TaskControlled( DCSTask, DCSStopCondition ) - self:F2( { DCSTask, DCSStopCondition } ) - - local DCSTaskControlled - - DCSTaskControlled = { - id = 'ControlledTask', - params = { - task = DCSTask, - stopCondition = DCSStopCondition - } - } - - self:T3( { DCSTaskControlled } ) - return DCSTaskControlled -end - ---- Return a Combo Task taking an array of Tasks --- @param #GROUP self --- @param #list DCSTasks --- @return DCSTask#Task -function GROUP:TaskCombo( DCSTasks ) - self:F2( { DCSTasks } ) - - local DCSTaskCombo - - DCSTaskCombo = { - id = 'ComboTask', - params = { - tasks = DCSTasks - } - } - - self:T3( { DCSTaskCombo } ) - return DCSTaskCombo -end - ---- Return a WrappedAction Task taking a Command --- @param #GROUP self --- @param DCSCommand#Command DCSCommand --- @return DCSTask#Task -function GROUP:TaskWrappedAction( DCSCommand, Index ) - self:F2( { DCSCommand } ) - - local DCSTaskWrappedAction - - DCSTaskWrappedAction = { - id = "WrappedAction", - enabled = true, - number = Index, - auto = false, - params = { - action = DCSCommand, - }, - } - - self:T3( { DCSTaskWrappedAction } ) - return DCSTaskWrappedAction -end - ---- Executes a command action --- @param #GROUP self --- @param DCSCommand#Command DCSCommand --- @return #GROUP self -function GROUP:SetCommand( DCSCommand ) - self:F2( DCSCommand ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local Controller = self:_GetController() - Controller:setCommand( DCSCommand ) - return self - end - - return nil -end - ---- Perform a switch waypoint command --- @param #GROUP self --- @param #number FromWayPoint --- @param #number ToWayPoint --- @return DCSTask#Task -function GROUP:CommandSwitchWayPoint( FromWayPoint, ToWayPoint, Index ) - self:F2( { FromWayPoint, ToWayPoint, Index } ) - - local CommandSwitchWayPoint = { - id = 'SwitchWaypoint', - params = { - fromWaypointIndex = FromWayPoint, - goToWaypointIndex = ToWayPoint, - }, - } - - self:T3( { CommandSwitchWayPoint } ) - return CommandSwitchWayPoint -end - - ---- Orbit at a specified position at a specified alititude during a specified duration with a specified speed. --- @param #GROUP self --- @param DCSTypes#Vec2 Point The point to hold the position. --- @param #number Altitude The altitude to hold the position. --- @param #number Speed The speed flying when holding the position. --- @return #GROUP self -function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed ) - self:F2( { self.GroupName, Point, Altitude, Speed } ) - --- pattern = enum AI.Task.OribtPattern, --- point = Vec2, --- point2 = Vec2, --- speed = Distance, --- altitude = Distance - - local LandHeight = land.getHeight( Point ) - - self:T3( { LandHeight } ) - - local DCSTask = { id = 'Orbit', - params = { pattern = AI.Task.OrbitPattern.CIRCLE, - point = Point, - speed = Speed, - altitude = Altitude + LandHeight - } - } - - --- local AITask = { id = 'ControlledTask', --- params = { task = { id = 'Orbit', --- params = { pattern = AI.Task.OrbitPattern.CIRCLE, --- point = Point, --- speed = Speed, --- altitude = Altitude + LandHeight --- } --- }, --- stopCondition = { duration = Duration --- } --- } --- } --- ) - - return DCSTask -end - ---- Orbit at the current position of the first unit of the group at a specified alititude --- @param #GROUP self --- @param #number Altitude The altitude to hold the position. --- @param #number Speed The speed flying when holding the position. --- @return #GROUP self -function GROUP:TaskOrbitCircle( Altitude, Speed ) - self:F2( { self.GroupName, Altitude, Speed } ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local GroupPoint = self:GetPointVec2() - return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) - end - - return nil -end - - - ---- Hold position at the current position of the first unit of the group. --- @param #GROUP self --- @param #number Duration The maximum duration in seconds to hold the position. --- @return #GROUP self -function GROUP:TaskHoldPosition() - self:F2( { self.GroupName } ) - - return self:TaskOrbitCircle( 30, 10 ) -end - - ---- Land the group at a Vec2Point. --- @param #GROUP self --- @param DCSTypes#Vec2 Point The point where to land. --- @param #number Duration The duration in seconds to stay on the ground. --- @return #GROUP self -function GROUP:TaskLandAtVec2( Point, Duration ) - self:F2( { self.GroupName, Point, Duration } ) - - local DCSTask - - if Duration and Duration > 0 then - DCSTask = { id = 'Land', params = { point = Point, durationFlag = true, duration = Duration } } - else - DCSTask = { id = 'Land', params = { point = Point, durationFlag = false } } - end - - self:T3( DCSTask ) - return DCSTask -end - ---- Land the group at a @{Zone#ZONE). --- @param #GROUP self --- @param Zone#ZONE Zone The zone where to land. --- @param #number Duration The duration in seconds to stay on the ground. --- @return #GROUP self -function GROUP:TaskLandAtZone( Zone, Duration, RandomPoint ) - self:F2( { self.GroupName, Zone, Duration, RandomPoint } ) - - local Point - if RandomPoint then - Point = Zone:GetRandomPointVec2() - else - Point = Zone:GetPointVec2() - end - - local DCSTask = self:TaskLandAtVec2( Point, Duration ) - - self:T3( DCSTask ) - return DCSTask -end - - ---- Attack the Unit. --- @param #GROUP self --- @param Unit#UNIT The unit. --- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackUnit( AttackUnit ) - self:F2( { self.GroupName, AttackUnit } ) - --- AttackUnit = { --- id = 'AttackUnit', --- params = { --- unitId = Unit.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend --- attackQty = number, --- direction = Azimuth, --- attackQtyLimit = boolean, --- groupAttack = boolean, --- } --- } - - local DCSTask - DCSTask = { id = 'AttackUnit', - params = { unitId = AttackUnit:GetID(), - expend = AI.Task.WeaponExpend.TWO, - groupAttack = true, - }, - }, - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Attack a Group. --- @param #GROUP self --- @param Group#GROUP AttackGroup The Group to be attacked. --- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackGroup( AttackGroup ) - self:F2( { self.GroupName, AttackGroup } ) - --- AttackGroup = { --- id = 'AttackGroup', --- params = { --- groupId = Group.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend, --- attackQty = number, --- directionEnabled = boolean, --- direction = Azimuth, --- altitudeEnabled = boolean, --- altitude = Distance, --- attackQtyLimit = boolean, --- } --- } - - local DCSTask - DCSTask = { id = 'AttackGroup', - params = { groupId = AttackGroup:GetID(), - expend = AI.Task.WeaponExpend.TWO, - }, - }, - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Fires at a VEC2 point. --- @param #GROUP self --- @param DCSTypes#Vec2 The point to fire at. --- @param DCSTypes#Distance Radius The radius of the zone to deploy the fire at. --- @return DCSTask#Task The DCS task structure. -function GROUP:TaskFireAtPoint( PointVec2, Radius ) - self:F2( { self.GroupName, PointVec2, Radius } ) - --- FireAtPoint = { --- id = 'FireAtPoint', --- params = { --- point = Vec2, --- radius = Distance, --- } --- } - - local DCSTask - DCSTask = { id = 'FireAtPoint', - params = { point = PointVec2, - radius = Radius, - } - } - - self:T3( { DCSTask } ) - return DCSTask -end - - - ---- Move the group to a Vec2 Point, wait for a defined duration and embark a group. --- @param #GROUP self --- @param DCSTypes#Vec2 Point The point where to wait. --- @param #number Duration The duration in seconds to wait. --- @param #GROUP EmbarkingGroup The group to be embarked. --- @return DCSTask#Task The DCS task structure -function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) - self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) - - local DCSTask - DCSTask = { id = 'Embarking', - params = { x = Point.x, - y = Point.y, - duration = Duration, - groupsForEmbarking = { EmbarkingGroup.GroupID }, - durationFlag = true, - distributionFlag = false, - distribution = {}, - } - } - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. --- @param #GROUP self --- @param DCSTypes#Vec2 Point The point where to wait. --- @param #number Radius The radius of the embarking zone around the Point. --- @return DCSTask#Task The DCS task structure. -function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) - self:F2( { self.GroupName, Point, Radius } ) - - local DCSTask --DCSTask#Task - DCSTask = { id = 'EmbarkToTransport', - params = { x = Point.x, - y = Point.y, - zoneRadius = Radius, - } - } - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Return a Misson task from a mission template. --- @param #GROUP self --- @param #table TaskMission A table containing the mission task. --- @return DCSTask#Task -function GROUP:TaskMission( TaskMission ) - self:F2( Points ) - - local DCSTask - DCSTask = { id = 'Mission', params = { TaskMission, }, } - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Return a Misson task to follow a given route defined by Points. --- @param #GROUP self --- @param #table Points A table of route points. --- @return DCSTask#Task -function GROUP:TaskRoute( Points ) - self:F2( Points ) - - local DCSTask - DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } - - self:T3( { DCSTask } ) - return DCSTask -end - ---- Make the DCS Group to fly to a given point and hover. --- @param #GROUP self --- @param DCSTypes#Vec3 Point The destination point in Vec3 format. --- @param #number Speed The speed to travel. --- @return #GROUP self -function GROUP:TaskRouteToVec2( Point, Speed ) - self:F2( { Point, Speed } ) - - local GroupPoint = self:GetUnit( 1 ):GetPointVec2() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.y - PointFrom.type = "Turning Point" - PointFrom.action = "Turning Point" - PointFrom.speed = Speed - PointFrom.speed_locked = true - PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, - } - - - local PointTo = {} - PointTo.x = Point.x - PointTo.y = Point.y - PointTo.type = "Turning Point" - PointTo.action = "Fly Over Point" - PointTo.speed = Speed - PointTo.speed_locked = true - PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, - } - - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self -end - ---- Make the DCS Group to fly to a given point and hover. --- @param #GROUP self --- @param DCSTypes#Vec3 Point The destination point in Vec3 format. --- @param #number Speed The speed to travel. --- @return #GROUP self -function GROUP:TaskRouteToVec3( Point, Speed ) - self:F2( { Point, Speed } ) - - local GroupPoint = self:GetUnit( 1 ):GetPointVec3() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.z - PointFrom.alt = GroupPoint.y - PointFrom.alt_type = "BARO" - PointFrom.type = "Turning Point" - PointFrom.action = "Turning Point" - PointFrom.speed = Speed - PointFrom.speed_locked = true - PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, - } - - - local PointTo = {} - PointTo.x = Point.x - PointTo.y = Point.z - PointTo.alt = Point.y - PointTo.alt_type = "BARO" - PointTo.type = "Turning Point" - PointTo.action = "Fly Over Point" - PointTo.speed = Speed - PointTo.speed_locked = true - PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, - } - - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self -end - - - ---- Make the group to follow a given route. --- @param #GROUP self --- @param #table GoPoints A table of Route Points. --- @return #GROUP self -function GROUP:Route( GoPoints ) - self:F2( GoPoints ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - local Points = routines.utils.deepCopy( GoPoints ) - local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } - local Controller = self:_GetController() - --Controller.setTask( Controller, MissionTask ) - --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) - SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) - return self - end - - return nil -end - - - ---- Route the group to a given zone. --- The group final destination point can be randomized. --- A speed can be given in km/h. --- A given formation can be given. --- @param #GROUP self --- @param Zone#ZONE Zone The zone where to route to. --- @param #boolean Randomize Defines whether to target point gets randomized within the Zone. --- @param #number Speed The speed. --- @param Base#FORMATION Formation The formation string. -function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) - self:F2( Zone ) - - local DCSGroup = self:GetDCSGroup() - - if DCSGroup then - - local GroupPoint = self:GetPointVec2() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.y - PointFrom.type = "Turning Point" - PointFrom.action = "Cone" - PointFrom.speed = 20 / 1.6 - - - local PointTo = {} - local ZonePoint - - if Randomize then - ZonePoint = Zone:GetRandomPointVec2() - else - ZonePoint = Zone:GetPointVec2() - end - - PointTo.x = ZonePoint.x - PointTo.y = ZonePoint.y - PointTo.type = "Turning Point" - - if Formation then - PointTo.action = Formation - else - PointTo.action = "Cone" - end - - if Speed then - PointTo.speed = Speed - else - PointTo.speed = 20 / 1.6 - end - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self - end - - return nil -end - --- Commands - ---- Do Script command --- @param #GROUP self --- @param #string DoScript --- @return #DCSCommand -function GROUP:CommandDoScript( DoScript ) - - local DCSDoScript = { - id = "Script", - params = { - command = DoScript, - }, - } - - self:T3( DCSDoScript ) - return DCSDoScript -end - - ---- Return the mission template of the group. --- @param #GROUP self --- @return #table The MissionTemplate -function GROUP:GetTaskMission() - self:F2( self.GroupName ) - - return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template ) -end - ---- Return the mission route of the group. --- @param #GROUP self --- @return #table The mission route defined by points. -function GROUP:GetTaskRoute() - self:F2( self.GroupName ) - - return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template.route.points ) -end - ---- Return the route of a group by using the @{Database#DATABASE} class. --- @param #GROUP self --- @param #number Begin The route point from where the copy will start. The base route point is 0. --- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. --- @param #boolean Randomize Randomization of the route, when true. --- @param #number Radius When randomization is on, the randomization is within the radius. -function GROUP:CopyRoute( Begin, End, Randomize, Radius ) - self:F2( { Begin, End } ) - - local Points = {} - - -- Could be a Spawned Group - local GroupName = string.match( self:GetName(), ".*#" ) - if GroupName then - GroupName = GroupName:sub( 1, -2 ) - else - GroupName = self:GetName() - end - - self:T3( { GroupName } ) - - local Template = _DATABASE.Templates.Groups[GroupName].Template - - if Template then - if not Begin then - Begin = 0 - end - if not End then - End = 0 - end - - for TPointID = Begin + 1, #Template.route.points - End do - if Template.route.points[TPointID] then - Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) - if Randomize then - if not Radius then - Radius = 500 - end - Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) - Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) - end - end - end - return Points - end - - return nil -end - - -function GROUP:GetDetectedTargets() - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - return self:_GetController():getDetectedTargets() - end - - return nil -end - -function GROUP:IsTargetDetected( DCSObject ) - self:F2( self.GroupName ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - - local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity - = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, - Controller.Detection.VISUAL, - Controller.Detection.OPTIC, - Controller.Detection.RADAR, - Controller.Detection.IRST, - Controller.Detection.RWR, - Controller.Detection.DLINK - ) - return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity - end - - return nil -end - --- Options - ---- Can the GROUP hold their weapons? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROEHoldFirePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() or self:IsGround() or self:IsShip() then - return true - end - - return false - end - - return nil -end - ---- Holding weapons. --- @param Group#GROUP self --- @return Group#GROUP self -function GROUP:OptionROEHoldFire() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) - elseif self:IsGround() then - Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.WEAPON_HOLD ) - elseif self:IsShip() then - Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) - end - - return self - end - - return nil -end - ---- Can the GROUP attack returning on enemy fire? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROEReturnFirePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() or self:IsGround() or self:IsShip() then - return true - end - - return false - end - - return nil -end - ---- Return fire. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROEReturnFire() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) - elseif self:IsGround() then - Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.RETURN_FIRE ) - elseif self:IsShip() then - Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) - end - - return self - end - - return nil -end - ---- Can the GROUP attack designated targets? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROEOpenFirePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() or self:IsGround() or self:IsShip() then - return true - end - - return false - end - - return nil -end - ---- Openfire. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROEOpenFire() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) - elseif self:IsGround() then - Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.OPEN_FIRE ) - elseif self:IsShip() then - Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) - end - - return self - end - - return nil -end - ---- Can the GROUP attack targets of opportunity? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROEWeaponFreePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - ---- Weapon free. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROEWeaponFree() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) - end - - return self - end - - return nil -end - ---- Can the GROUP ignore enemy fire? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROTNoReactionPossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - - ---- No evasion on enemy threats. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROTNoReaction() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) - end - - return self - end - - return nil -end - ---- Can the GROUP evade using passive defenses? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROTPassiveDefensePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - ---- Evasion passive defense. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROTPassiveDefense() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) - end - - return self - end - - return nil -end - ---- Can the GROUP evade on enemy fire? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROTEvadeFirePossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - - ---- Evade on fire. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROTEvadeFire() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) - end - - return self - end - - return nil -end - ---- Can the GROUP evade on fire using vertical manoeuvres? --- @param #GROUP self --- @return #boolean -function GROUP:OptionROTVerticalPossible() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - if self:IsAir() then - return true - end - - return false - end - - return nil -end - - ---- Evade on fire using vertical manoeuvres. --- @param #GROUP self --- @return #GROUP self -function GROUP:OptionROTVertical() - self:F2( { self.GroupName } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - local Controller = self:_GetController() - - if self:IsAir() then - Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) - end - - return self - end - - return nil -end - --- Message APIs - ---- Returns a message for a coalition or a client. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. --- @return Message#MESSAGE -function GROUP:Message( Message, Duration ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - return MESSAGE:New( Message, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) - end - - return nil -end - ---- Send a message to all coalitions. --- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. -function GROUP:MessageToAll( Message, Duration ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - self:Message( Message, Duration ):ToAll() - end - - return nil -end - ---- Send a message to the red coalition. --- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. -function GROUP:MessageToRed( Message, Duration ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - self:Message( Message, Duration ):ToRed() - end - - return nil -end - ---- Send a message to the blue coalition. --- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. -function GROUP:MessageToBlue( Message, Duration ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - self:Message( Message, Duration ):ToBlue() - end - - return nil -end - ---- Send a message to a client. --- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. --- @param #GROUP self --- @param #string Message The message text --- @param #Duration Duration The duration of the message. --- @param Client#CLIENT Client The client object receiving the message. -function GROUP:MessageToClient( Message, Duration, Client ) - self:F2( { Message, Duration } ) - - local DCSGroup = self:GetDCSGroup() - if DCSGroup then - self:Message( Message, Duration ):ToClient( Client ) - end - - return nil -end ---- UNIT Class --- --- @{UNIT} class --- ============== --- The @{UNIT} class is a wrapper class to handle the DCS Unit objects: --- --- * Support all DCS Unit APIs. --- * Enhance with Unit specific APIs not in the DCS Unit API set. --- * Handle local Unit Controller. --- * Manage the "state" of the DCS Unit. --- --- --- UNIT reference methods --- ====================== --- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object. --- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class). --- --- The UNIT class **does not contain a :New()** method, rather it provides **:Find()** methods to retrieve the object reference --- using the DCS Unit or the DCS UnitName. --- --- Another thing to know is that UNIT objects do not "contain" the DCS Unit object. --- The UNIT methods will reference the DCS Unit object by name when it is needed during API execution. --- If the DCS Unit object does not exist or is nil, the UNIT methods will return nil and log an exception in the DCS.log file. --- --- The UNIT class provides the following functions to retrieve quickly the relevant UNIT instance: --- --- * @{#UNIT.Find}(): Find a UNIT instance from the _DATABASE object using a DCS Unit object. --- * @{#UNIT.FindByName}(): Find a UNIT instance from the _DATABASE object using a DCS Unit name. --- --- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil). --- --- DCS UNIT APIs --- ============= --- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method. --- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call, --- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSUnit#Unit.getName}() --- is implemented in the UNIT class as @{#UNIT.GetName}(). --- --- Additional UNIT APIs --- ==================== --- The UNIT class comes with additional methods. Find below a summary. --- --- Smoke, Flare Units --- ------------------ --- The UNIT class provides methods to smoke or flare units easily. --- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods --- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit. --- When the DCS Unit moves for whatever reason, the smoking will still continue! --- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}() --- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration. --- --- Position, Point --- --------------- --- The UNIT class provides methods to obtain the current point or position of the DCS Unit. --- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetPointVec3}() will obtain the current location of the DCS Unit in a Vec2 (2D) or a Vec3 (3D) vector respectively. --- If you want to obtain the complete 3D position including oriëntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively. --- --- Alive --- ----- --- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active. --- --- Test for other units in radius --- ------------------------------ --- One can test if another DCS Unit is within a given radius of the current DCS Unit, by using the @{#UNIT.OtherUnitInRadius}() method. --- --- More functions will be added --- ---------------------------- --- During the MOOSE development, more functions will be added. A complete list of the current functions is below. --- --- --- --- --- @module Unit --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Message" ) - ---- The UNIT class --- @type UNIT --- @extends Base#BASE --- @field #UNIT.FlareColor FlareColor --- @field #UNIT.SmokeColor SmokeColor -UNIT = { - ClassName="UNIT", - CategoryName = { - [Unit.Category.AIRPLANE] = "Airplane", - [Unit.Category.HELICOPTER] = "Helicoper", - [Unit.Category.GROUND_UNIT] = "Ground Unit", - [Unit.Category.SHIP] = "Ship", - [Unit.Category.STRUCTURE] = "Structure", - }, - FlareColor = { - Green = trigger.flareColor.Green, - Red = trigger.flareColor.Red, - White = trigger.flareColor.White, - Yellow = trigger.flareColor.Yellow - }, - SmokeColor = { - Green = trigger.smokeColor.Green, - Red = trigger.smokeColor.Red, - White = trigger.smokeColor.White, - Orange = trigger.smokeColor.Orange, - Blue = trigger.smokeColor.Blue - }, - } - ---- FlareColor --- @type UNIT.FlareColor --- @field Green --- @field Red --- @field White --- @field Yellow - ---- SmokeColor --- @type UNIT.SmokeColor --- @field Green --- @field Red --- @field White --- @field Orange --- @field Blue - --- Registration. - ---- Create a new UNIT from DCSUnit. --- @param #UNIT self --- @param DCSUnit#Unit DCSUnit --- @param Database#DATABASE Database --- @return Unit#UNIT -function UNIT:Register( UnitName ) - - local self = BASE:Inherit( self, BASE:New() ) - self:F2( UnitName ) - self.UnitName = UnitName - return self -end - --- Reference methods. - ---- Finds a UNIT from the _DATABASE using a DCSUnit object. --- @param #UNIT self --- @param DCSUnit#Unit DCSUnit An existing DCS Unit object reference. --- @return Unit#UNIT self -function UNIT:Find( DCSUnit ) - - local UnitName = DCSUnit:getName() - local UnitFound = _DATABASE:FindUnit( UnitName ) - return UnitFound -end - ---- Find a UNIT in the _DATABASE using the name of an existing DCS Unit. --- @param #UNIT self --- @param #string UnitName The Unit Name. --- @return Unit#UNIT self -function UNIT:FindByName( UnitName ) - - local UnitFound = _DATABASE:FindUnit( UnitName ) - return UnitFound -end - -function UNIT:GetDCSUnit() - local DCSUnit = Unit.getByName( self.UnitName ) - - if DCSUnit then - return DCSUnit - end - - return nil -end - ---- Returns coalition of the Unit. --- @param Unit#UNIT self --- @return DCSCoalitionObject#coalition.side The side of the coalition. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetCoalition() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitCoalition = DCSUnit:getCoalition() - self:T3( UnitCoalition ) - return UnitCoalition - end - - return nil -end - ---- Returns country of the Unit. --- @param Unit#UNIT self --- @return DCScountry#country.id The country identifier. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetCountry() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitCountry = DCSUnit:getCountry() - self:T3( UnitCountry ) - return UnitCountry - end - - return nil -end - - ---- Returns DCS Unit object name. --- The function provides access to non-activated units too. --- @param Unit#UNIT self --- @return #string The name of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetName() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitName = self.UnitName - return UnitName - end - - return nil -end - - ---- Returns if the unit is alive. --- @param Unit#UNIT self --- @return #boolean true if Unit is alive. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:IsAlive() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitIsAlive = DCSUnit:isExist() - return UnitIsAlive - end - - return false -end - ---- Returns if the unit is activated. --- @param Unit#UNIT self --- @return #boolean true if Unit is activated. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:IsActive() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - - local UnitIsActive = DCSUnit:isActive() - return UnitIsActive - end - - return nil -end - ---- Returns name of the player that control the unit or nil if the unit is controlled by A.I. --- @param Unit#UNIT self --- @return #string Player Name --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPlayerName() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - - local PlayerName = DCSUnit:getPlayerName() - if PlayerName == nil then - PlayerName = "" - end - return PlayerName - end - - return nil -end - ---- Returns the unit's unique identifier. --- @param Unit#UNIT self --- @return DCSUnit#Unit.ID Unit ID --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetID() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitID = DCSUnit:getID() - return UnitID - end - - return nil -end - ---- Returns the unit's number in the group. --- The number is the same number the unit has in ME. --- It may not be changed during the mission. --- If any unit in the group is destroyed, the numbers of another units will not be changed. --- @param Unit#UNIT self --- @return #number The Unit number. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetNumber() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitNumber = DCSUnit:getNumber() - return UnitNumber - end - - return nil -end - ---- Returns the unit's group if it exist and nil otherwise. --- @param Unit#UNIT self --- @return Group#GROUP The Group of the Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetGroup() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitGroup = DCSUnit:getGroup() - return UnitGroup - end - - return nil -end - - ---- Returns the unit's callsign - the localized string. --- @param Unit#UNIT self --- @return #string The Callsign of the Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetCallSign() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitCallSign = DCSUnit:getCallsign() - return UnitCallSign - end - - return nil -end - ---- Returns the unit's health. Dead units has health <= 1.0. --- @param Unit#UNIT self --- @return #number The Unit's health value. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetLife() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitLife = DCSUnit:getLife() - return UnitLife - end - - return nil -end - ---- Returns the Unit's initial health. --- @param Unit#UNIT self --- @return #number The Unit's initial health value. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetLife0() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitLife0 = DCSUnit:getLife0() - return UnitLife0 - end - - return nil -end - ---- Returns relative amount of fuel (from 0.0 to 1.0) the unit has in its internal tanks. If there are additional fuel tanks the value may be greater than 1.0. --- @param Unit#UNIT self --- @return #number The relative amount of fuel (from 0.0 to 1.0). --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetFuel() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitFuel = DCSUnit:getFuel() - return UnitFuel - end - - return nil -end - ---- Returns the Unit's ammunition. --- @param Unit#UNIT self --- @return DCSUnit#Unit.Ammo --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetAmmo() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitAmmo = DCSUnit:getAmmo() - return UnitAmmo - end - - return nil -end - ---- Returns the unit sensors. --- @param Unit#UNIT self --- @return DCSUnit#Unit.Sensors --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetSensors() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitSensors = DCSUnit:getSensors() - return UnitSensors - end - - return nil -end - --- Need to add here a function per sensortype --- unit:hasSensors(Unit.SensorType.RADAR, Unit.RadarType.AS) - ---- Returns two values: --- --- * First value indicates if at least one of the unit's radar(s) is on. --- * Second value is the object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. --- @param Unit#UNIT self --- @return #boolean Indicates if at least one of the unit's radar(s) is on. --- @return DCSObject#Object The object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetRadar() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitRadarOn, UnitRadarObject = DCSUnit:getRadar() - return UnitRadarOn, UnitRadarObject - end - - return nil, nil -end - --- Need to add here functions to check if radar is on and which object etc. - ---- Returns unit descriptor. Descriptor type depends on unit category. --- @param Unit#UNIT self --- @return DCSUnit#Unit.Desc The Unit descriptor. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetDesc() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitDesc = DCSUnit:getDesc() - return UnitDesc - end - - return nil -end - - ---- Returns the type name of the DCS Unit. --- @param Unit#UNIT self --- @return #string The type name of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetTypeName() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitTypeName = DCSUnit:getTypeName() - self:T3( UnitTypeName ) - return UnitTypeName - end - - return nil -end - - - ---- Returns the prefix name of the DCS Unit. A prefix name is a part of the name before a '#'-sign. --- DCS Units spawned with the @{SPAWN} class contain a '#'-sign to indicate the end of the (base) DCS Unit name. --- The spawn sequence number and unit number are contained within the name after the '#' sign. --- @param Unit#UNIT self --- @return #string The name of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPrefix() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPrefix = string.match( self.UnitName, ".*#" ):sub( 1, -2 ) - self:T3( UnitPrefix ) - return UnitPrefix - end - - return nil -end - - - ---- Returns the @{DCSTypes#Vec2} vector indicating the point in 2D of the DCS Unit within the mission. --- @param Unit#UNIT self --- @return DCSTypes#Vec2 The 2D point vector of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPointVec2() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPointVec3 = DCSUnit:getPosition().p - - local UnitPointVec2 = {} - UnitPointVec2.x = UnitPointVec3.x - UnitPointVec2.y = UnitPointVec3.z - - self:T3( UnitPointVec2 ) - return UnitPointVec2 - end - - return nil -end - - ---- Returns the @{DCSTypes#Vec3} vector indicating the point in 3D of the DCS Unit within the mission. --- @param Unit#UNIT self --- @return DCSTypes#Vec3 The 3D point vector of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPointVec3() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPointVec3 = DCSUnit:getPosition().p - self:T3( UnitPointVec3 ) - return UnitPointVec3 - end - - return nil -end - ---- Returns the @{DCSTypes#Position3} position vectors indicating the point and direction vectors in 3D of the DCS Unit within the mission. --- @param Unit#UNIT self --- @return DCSTypes#Position The 3D position vectors of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetPositionVec3() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPosition = DCSUnit:getPosition() - self:T3( UnitPosition ) - return UnitPosition - end - - return nil -end - ---- Returns the DCS Unit velocity vector. --- @param Unit#UNIT self --- @return DCSTypes#Vec3 The velocity vector --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetVelocity() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitVelocityVec3 = DCSUnit:getVelocity() - self:T3( UnitVelocityVec3 ) - return UnitVelocityVec3 - end - - return nil -end - ---- Returns true if the DCS Unit is in the air. --- @param Unit#UNIT self --- @return #boolean true if in the air. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:InAir() - self:F2( self.UnitName ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitInAir = DCSUnit:inAir() - self:T3( UnitInAir ) - return UnitInAir - end - - return nil -end - ---- Returns the altitude of the DCS Unit. --- @param Unit#UNIT self --- @return DCSTypes#Distance The altitude of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:GetAltitude() - self:F2() - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPointVec3 = DCSUnit:getPoint() --DCSTypes#Vec3 - return UnitPointVec3.y - end - - return nil -end - ---- Returns true if there is an **other** DCS Unit within a radius of the current 2D point of the DCS Unit. --- @param Unit#UNIT self --- @param Unit#UNIT AwaitUnit The other UNIT wrapper object. --- @param Radius The radius in meters with the DCS Unit in the centre. --- @return true If the other DCS Unit is within the radius of the 2D point of the DCS Unit. --- @return #nil The DCS Unit is not existing or alive. -function UNIT:OtherUnitInRadius( AwaitUnit, Radius ) - self:F2( { self.UnitName, AwaitUnit.UnitName, Radius } ) - - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitPos = self:GetPointVec3() - local AwaitUnitPos = AwaitUnit:GetPointVec3() - - if (((UnitPos.x - AwaitUnitPos.x)^2 + (UnitPos.z - AwaitUnitPos.z)^2)^0.5 <= Radius) then - self:T3( "true" ) - return true - else - self:T3( "false" ) - return false - end - end - - return nil -end - ---- Returns the DCS Unit category name as defined within the DCS Unit Descriptor. --- @param Unit#UNIT self --- @return #string The DCS Unit Category Name -function UNIT:GetCategoryName() - local DCSUnit = self:GetDCSUnit() - - if DCSUnit then - local UnitCategoryName = self.CategoryName[ self:GetDesc().category ] - return UnitCategoryName - end - - return nil -end - ---- Signal a flare at the position of the UNIT. --- @param #UNIT self -function UNIT:Flare( FlareColor ) - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), FlareColor , 0 ) -end - ---- Signal a white flare at the position of the UNIT. --- @param #UNIT self -function UNIT:FlareWhite() - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.White , 0 ) -end - ---- Signal a yellow flare at the position of the UNIT. --- @param #UNIT self -function UNIT:FlareYellow() - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Yellow , 0 ) -end - ---- Signal a green flare at the position of the UNIT. --- @param #UNIT self -function UNIT:FlareGreen() - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Green , 0 ) -end - ---- Signal a red flare at the position of the UNIT. --- @param #UNIT self -function UNIT:FlareRed() - self:F2() - trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Red, 0 ) -end - ---- Smoke the UNIT. --- @param #UNIT self -function UNIT:Smoke( SmokeColor ) - self:F2() - trigger.action.smoke( self:GetPointVec3(), SmokeColor ) -end - ---- Smoke the UNIT Green. --- @param #UNIT self -function UNIT:SmokeGreen() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Green ) -end - ---- Smoke the UNIT Red. --- @param #UNIT self -function UNIT:SmokeRed() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Red ) -end - ---- Smoke the UNIT White. --- @param #UNIT self -function UNIT:SmokeWhite() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.White ) -end - ---- Smoke the UNIT Orange. --- @param #UNIT self -function UNIT:SmokeOrange() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Orange ) -end - ---- Smoke the UNIT Blue. --- @param #UNIT self -function UNIT:SmokeBlue() - self:F2() - trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Blue ) -end - --- Is methods - ---- Returns if the unit is of an air category. --- If the unit is a helicopter or a plane, then this method will return true, otherwise false. --- @param #UNIT self --- @return #boolean Air category evaluation result. -function UNIT:IsAir() - self:F2() - - local UnitDescriptor = self.DCSUnit:getDesc() - self:T3( { UnitDescriptor.category, Unit.Category.AIRPLANE, Unit.Category.HELICOPTER } ) - - local IsAirResult = ( UnitDescriptor.category == Unit.Category.AIRPLANE ) or ( UnitDescriptor.category == Unit.Category.HELICOPTER ) - - self:T3( IsAirResult ) - return IsAirResult -end - ---- ZONE Classes --- @module Zone - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Message" ) - ---- The ZONE class --- @type ZONE --- @Extends Base#BASE -ZONE = { - ClassName="ZONE", - } - -function ZONE:New( ZoneName ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( ZoneName ) - - local Zone = trigger.misc.getZone( ZoneName ) - - if not Zone then - error( "Zone " .. ZoneName .. " does not exist." ) - return nil - end - - self.Zone = Zone - self.ZoneName = ZoneName - - return self -end - -function ZONE:GetPointVec2() - self:F( self.ZoneName ) - - local Zone = trigger.misc.getZone( self.ZoneName ) - local Point = { x = Zone.point.x, y = Zone.point.z } - - self:T( { Zone, Point } ) - - return Point -end - -function ZONE:GetPointVec3( Height ) - self:F( self.ZoneName ) - - local Zone = trigger.misc.getZone( self.ZoneName ) - local Point = { x = Zone.point.x, y = land.getHeight( self:GetPointVec2() ) + Height, z = Zone.point.z } - - self:T( { Zone, Point } ) - - return Point -end - -function ZONE:GetRandomPointVec2() - self:F( self.ZoneName ) - - local Point = {} - - local Zone = trigger.misc.getZone( self.ZoneName ) - - local angle = math.random() * math.pi*2; - Point.x = Zone.point.x + math.cos( angle ) * math.random() * Zone.radius; - Point.y = Zone.point.z + math.sin( angle ) * math.random() * Zone.radius; - - self:T( { Zone, Point } ) - - return Point -end - -function ZONE:GetRadius() - self:F( self.ZoneName ) - - local Zone = trigger.misc.getZone( self.ZoneName ) - - self:T( { Zone } ) - - return Zone.radius -end - ---- The CLIENT models client units in multi player missions. --- --- @{#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. --- The @{CLIENT} class is a wrapper class to handle the DCS Unit objects that have the skillset defined as __Client__ or __Player__: --- --- * Wraps the DCS Unit objects with skill level set to Player or Client. --- * Support all DCS Unit APIs. --- * Enhance with Unit specific APIs not in the DCS Group API set. --- * When player joins Unit, execute alive init logic. --- * Handles messages to players. --- * Manage the "state" of the DCS Unit. --- --- Clients are being used by the @{MISSION} class to follow players and register their successes. --- --- CLIENT reference methods --- ======================= --- For each DCS Unit having skill level Player or Client, a CLIENT wrapper object (instance) will be created within the _@{DATABASE} object. --- This is done at the beginning of the mission (when the mission starts). --- --- The CLIENT class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference --- using the DCS Unit or the DCS UnitName. --- --- Another thing to know is that CLIENT objects do not "contain" the DCS Unit object. --- The CLIENT methods will reference the DCS Unit object by name when it is needed during API execution. --- If the DCS Unit object does not exist or is nil, the CLIENT methods will return nil and log an exception in the DCS.log file. --- --- The CLIENT class provides the following functions to retrieve quickly the relevant CLIENT instance: --- --- * @{#CLIENT.Find}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit object. --- * @{#CLIENT.FindByName}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit name. --- --- IMPORTANT: ONE SHOULD NEVER SANATIZE these CLIENT OBJECT REFERENCES! (make the CLIENT object references nil). --- --- @module Client --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Cargo" ) -Include.File( "Message" ) - - ---- The CLIENT class --- @type CLIENT --- @extends Unit#UNIT -CLIENT = { - ONBOARDSIDE = { - NONE = 0, - LEFT = 1, - RIGHT = 2, - BACK = 3, - FRONT = 4 - }, - ClassName = "CLIENT", - ClientName = nil, - ClientAlive = false, - ClientTransport = false, - ClientBriefingShown = false, - _Menus = {}, - _Tasks = {}, - Messages = { - } -} - - ---- Finds a CLIENT from the _DATABASE using the relevant DCS Unit. --- @param #CLIENT self --- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. --- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. --- @return #CLIENT --- @usage --- -- Create new Clients. --- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) --- Mission:AddGoal( DeploySA6TroopsGoal ) --- --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) -function CLIENT:Find( DCSUnit ) - local ClientName = DCSUnit:getName() - local ClientFound = _DATABASE:FindClient( ClientName ) - - if ClientFound then - ClientFound:F( ClientName ) - return ClientFound - end - - error( "CLIENT not found for: " .. ClientName ) -end - - ---- Finds a CLIENT from the _DATABASE using the relevant Client Unit Name. --- As an optional parameter, a briefing text can be given also. --- @param #CLIENT self --- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. --- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. --- @return #CLIENT --- @usage --- -- Create new Clients. --- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) --- Mission:AddGoal( DeploySA6TroopsGoal ) --- --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) -function CLIENT:FindByName( ClientName, ClientBriefing ) - local ClientFound = _DATABASE:FindClient( ClientName ) - - if ClientFound then - ClientFound:F( { ClientName, ClientBriefing } ) - ClientFound:AddBriefing( ClientBriefing ) - ClientFound.MessageSwitch = true - - return ClientFound - end - - error( "CLIENT not found for: " .. ClientName ) -end - -function CLIENT:Register( ClientName ) - local self = BASE:Inherit( self, UNIT:Register( ClientName ) ) - - self:F( ClientName ) - self.ClientName = ClientName - self.MessageSwitch = true - self.ClientAlive2 = false - - --self.AliveCheckScheduler = routines.scheduleFunction( self._AliveCheckScheduler, { self }, timer.getTime() + 1, 5 ) - self.AliveCheckScheduler = SCHEDULER:New( self, self._AliveCheckScheduler, {}, 1, 5 ) - - return self -end - - ---- Transport defines that the Client is a Transport. Transports show cargo. --- @param #CLIENT self --- @return #CLIENT -function CLIENT:Transport() - self:F() - - self.ClientTransport = true - return self -end - ---- AddBriefing adds a briefing to a CLIENT when a player joins a mission. --- @param #CLIENT self --- @param #string ClientBriefing is the text defining the Mission briefing. --- @return #CLIENT self -function CLIENT:AddBriefing( ClientBriefing ) - self:F( ClientBriefing ) - self.ClientBriefing = ClientBriefing - self.ClientBriefingShown = false - - return self -end - ---- Show the briefing of a CLIENT. --- @param #CLIENT self --- @return #CLIENT self -function CLIENT:ShowBriefing() - self:F( { self.ClientName, self.ClientBriefingShown } ) - - if not self.ClientBriefingShown then - self.ClientBriefingShown = true - local Briefing = "" - if self.ClientBriefing then - Briefing = Briefing .. self.ClientBriefing - end - Briefing = Briefing .. " Press [LEFT ALT]+[B] to view the complete mission briefing." - self:Message( Briefing, 60, self.ClientName .. '/ClientBriefing', "Briefing" ) - end - - return self -end - ---- Show the mission briefing of a MISSION to the CLIENT. --- @param #CLIENT self --- @param #string MissionBriefing --- @return #CLIENT self -function CLIENT:ShowMissionBriefing( MissionBriefing ) - self:F( { self.ClientName } ) - - if MissionBriefing then - self:Message( MissionBriefing, 60, self.ClientName .. '/MissionBriefing', "Mission Briefing" ) - end - - return self -end - - - ---- Resets a CLIENT. --- @param #CLIENT self --- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client. -function CLIENT:Reset( ClientName ) - self:F() - self._Menus = {} -end - --- Is Functions - ---- Checks if the CLIENT is a multi-seated UNIT. --- @param #CLIENT self --- @return #boolean true if multi-seated. -function CLIENT:IsMultiSeated() - self:F( self.ClientName ) - - local ClientMultiSeatedTypes = { - ["Mi-8MT"] = "Mi-8MT", - ["UH-1H"] = "UH-1H", - ["P-51B"] = "P-51B" - } - - if self:IsAlive() then - local ClientTypeName = self:GetClientGroupUnit():GetTypeName() - if ClientMultiSeatedTypes[ClientTypeName] then - return true - end - end - - return false -end - ---- Checks for a client alive event and calls a function on a continuous basis. --- @param #CLIENT self --- @param #function CallBack Function. --- @return #CLIENT -function CLIENT:Alive( CallBack, ... ) - self:F() - - self.ClientCallBack = CallBack - self.ClientParameters = arg - - return self -end - ---- @param #CLIENT self -function CLIENT:_AliveCheckScheduler() - self:F( { self.ClientName, self.ClientAlive2, self.ClientBriefingShown } ) - - if self:IsAlive() then -- Polymorphic call of UNIT - if self.ClientAlive2 == false then - self:ShowBriefing() - if self.ClientCallBack then - self:T("Calling Callback function") - self.ClientCallBack( self, unpack( self.ClientParameters ) ) - end - self.ClientAlive2 = true - end - else - if self.ClientAlive2 == true then - self.ClientAlive2 = false - end - end - - return true -end - ---- Return the DCSGroup of a Client. --- This function is modified to deal with a couple of bugs in DCS 1.5.3 --- @param #CLIENT self --- @return DCSGroup#Group -function CLIENT:GetDCSGroup() - self:F3() - --- local ClientData = Group.getByName( self.ClientName ) --- if ClientData and ClientData:isExist() then --- self:T( self.ClientName .. " : group found!" ) --- return ClientData --- else --- return nil --- end - - local ClientUnit = Unit.getByName( self.ClientName ) - - local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - self:T3( { "CoalitionData:", CoalitionData } ) - for UnitId, UnitData in pairs( CoalitionData ) do - self:T3( { "UnitData:", UnitData } ) - if UnitData and UnitData:isExist() then - - --self:E(self.ClientName) - if ClientUnit then - local ClientGroup = ClientUnit:getGroup() - if ClientGroup then - self:T3( "ClientGroup = " .. self.ClientName ) - if ClientGroup:isExist() and UnitData:getGroup():isExist() then - if ClientGroup:getID() == UnitData:getGroup():getID() then - self:T3( "Normal logic" ) - self:T3( self.ClientName .. " : group found!" ) - self.ClientGroupID = ClientGroup:getID() - self.ClientGroupName = ClientGroup:getName() - return ClientGroup - end - else - -- Now we need to resolve the bugs in DCS 1.5 ... - -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) - self:T3( "Bug 1.5 logic" ) - local ClientGroupTemplate = _DATABASE.Templates.Units[self.ClientName].GroupTemplate - self.ClientGroupID = ClientGroupTemplate.groupId - self.ClientGroupName = _DATABASE.Templates.Units[self.ClientName].GroupName - self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) - return ClientGroup - end - -- else - -- error( "Client " .. self.ClientName .. " not found!" ) - end - else - --self:E( { "Client not found!", self.ClientName } ) - end - end - end - end - - -- For non player clients - if ClientUnit then - local ClientGroup = ClientUnit:getGroup() - if ClientGroup then - self:T3( "ClientGroup = " .. self.ClientName ) - if ClientGroup:isExist() then - self:T3( "Normal logic" ) - self:T3( self.ClientName .. " : group found!" ) - return ClientGroup - end - end - end - - self.ClientGroupID = nil - self.ClientGroupUnit = nil - - return nil -end - - --- TODO: Check DCSTypes#Group.ID ---- Get the group ID of the client. --- @param #CLIENT self --- @return DCSTypes#Group.ID -function CLIENT:GetClientGroupID() - - local ClientGroup = self:GetDCSGroup() - - --self:E( self.ClientGroupID ) -- Determined in GetDCSGroup() - return self.ClientGroupID -end - - ---- Get the name of the group of the client. --- @param #CLIENT self --- @return #string -function CLIENT:GetClientGroupName() - - local ClientGroup = self:GetDCSGroup() - - self:T( self.ClientGroupName ) -- Determined in GetDCSGroup() - return self.ClientGroupName -end - ---- Returns the UNIT of the CLIENT. --- @param #CLIENT self --- @return Unit#UNIT -function CLIENT:GetClientGroupUnit() - self:F2() - - local ClientDCSUnit = Unit.getByName( self.ClientName ) - - self:T( self.ClientDCSUnit ) - if ClientDCSUnit and ClientDCSUnit:isExist() then - local ClientUnit = _DATABASE:FindUnit( self.ClientName ) - self:T2( ClientUnit ) - return ClientUnit - end -end - ---- Returns the DCSUnit of the CLIENT. --- @param #CLIENT self --- @return DCSTypes#Unit -function CLIENT:GetClientGroupDCSUnit() - self:F2() - - local ClientDCSUnit = Unit.getByName( self.ClientName ) - - if ClientDCSUnit and ClientDCSUnit:isExist() then - self:T2( ClientDCSUnit ) - return ClientDCSUnit - end -end - - ---- Evaluates if the CLIENT is a transport. --- @param #CLIENT self --- @return #boolean true is a transport. -function CLIENT:IsTransport() - self:F() - return self.ClientTransport -end - ---- Shows the @{Cargo#CARGO} contained within the CLIENT to the player as a message. --- The @{Cargo#CARGO} is shown using the @{Message#MESSAGE} distribution system. --- @param #CLIENT self -function CLIENT:ShowCargo() - self:F() - - local CargoMsg = "" - - for CargoName, Cargo in pairs( CARGOS ) do - if self == Cargo:IsLoadedInClient() then - CargoMsg = CargoMsg .. Cargo.CargoName .. " Type:" .. Cargo.CargoType .. " Weight: " .. Cargo.CargoWeight .. "\n" - end - end - - if CargoMsg == "" then - CargoMsg = "empty" - end - - self:Message( CargoMsg, 15, self.ClientName .. "/Cargo", "Co-Pilot: Cargo Status", 30 ) - -end - --- TODO (1) I urgently need to revise this. ---- A local function called by the DCS World Menu system to switch off messages. -function CLIENT.SwitchMessages( PrmTable ) - PrmTable[1].MessageSwitch = PrmTable[2] -end - ---- The main message driver for the CLIENT. --- This function displays various messages to the Player logged into the CLIENT through the DCS World Messaging system. --- @param #CLIENT self --- @param #string Message is the text describing the message. --- @param #number MessageDuration is the duration in seconds that the Message should be displayed. --- @param #string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId --- @param #string MessageCategory is the category of the message (the title). --- @param #number MessageInterval is the interval in seconds between the display of the @{Message#MESSAGE} when the CLIENT is in the air. -function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, MessageInterval ) - self:F( { Message, MessageDuration, MessageId, MessageCategory, MessageInterval } ) - - if not self.MenuMessages then - if self:GetClientGroupID() then - self.MenuMessages = MENU_CLIENT:New( self, 'Messages' ) - self.MenuRouteMessageOn = MENU_CLIENT_COMMAND:New( self, 'Messages On', self.MenuMessages, CLIENT.SwitchMessages, { self, true } ) - self.MenuRouteMessageOff = MENU_CLIENT_COMMAND:New( self,'Messages Off', self.MenuMessages, CLIENT.SwitchMessages, { self, false } ) - end - end - - if self.MessageSwitch == true then - if MessageCategory == nil then - MessageCategory = "Messages" - end - if self.Messages[MessageId] == nil then - self.Messages[MessageId] = {} - self.Messages[MessageId].MessageId = MessageId - self.Messages[MessageId].MessageTime = timer.getTime() - self.Messages[MessageId].MessageDuration = MessageDuration - if MessageInterval == nil then - self.Messages[MessageId].MessageInterval = 600 - else - self.Messages[MessageId].MessageInterval = MessageInterval - end - MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) - else - if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then - if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then - MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) - self.Messages[MessageId].MessageTime = timer.getTime() - end - else - if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + self.Messages[MessageId].MessageInterval then - MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) - self.Messages[MessageId].MessageTime = timer.getTime() - end - end - end - end -end ---- Manage sets of units and groups. --- --- @{#Database} class --- ================== --- Mission designers can use the DATABASE class to build sets of units belonging to certain: --- --- * Coalitions --- * Categories --- * Countries --- * Unit types --- * Starting with certain prefix strings. --- --- This list will grow over time. Planned developments are to include filters and iterators. --- Additional filters will be added around @{Zone#ZONEs}, Radiuses, Active players, ... --- More iterators will be implemented in the near future ... --- --- Administers the Initial Sets of the Mission Templates as defined within the Mission Editor. --- --- DATABASE construction methods: --- ================================= --- Create a new DATABASE object with the @{#DATABASE.New} method: --- --- * @{#DATABASE.New}: Creates a new DATABASE object. --- --- --- DATABASE filter criteria: --- ========================= --- You can set filter criteria to define the set of units within the database. --- Filter criteria are defined by: --- --- * @{#DATABASE.FilterCoalitions}: Builds the DATABASE with the units belonging to the coalition(s). --- * @{#DATABASE.FilterCategories}: Builds the DATABASE with the units belonging to the category(ies). --- * @{#DATABASE.FilterTypes}: Builds the DATABASE with the units belonging to the unit type(s). --- * @{#DATABASE.FilterCountries}: Builds the DATABASE with the units belonging to the country(ies). --- * @{#DATABASE.FilterUnitPrefixes}: Builds the DATABASE with the units starting with the same prefix string(s). --- --- Once the filter criteria have been set for the DATABASE, you can start filtering using: --- --- * @{#DATABASE.FilterStart}: Starts the filtering of the units within the database. --- --- Planned filter criteria within development are (so these are not yet available): --- --- * @{#DATABASE.FilterGroupPrefixes}: Builds the DATABASE with the groups of the units starting with the same prefix string(s). --- * @{#DATABASE.FilterZones}: Builds the DATABASE with the units within a @{Zone#ZONE}. --- --- --- DATABASE iterators: --- =================== --- Once the filters have been defined and the DATABASE has been built, you can iterate the database with the available iterator methods. --- The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. --- The following iterator methods are currently available within the DATABASE: --- --- * @{#DATABASE.ForEachAliveUnit}: Calls a function for each alive unit it finds within the DATABASE. --- --- Planned iterators methods in development are (so these are not yet available): --- --- * @{#DATABASE.ForEachUnit}: Calls a function for each unit contained within the DATABASE. --- * @{#DATABASE.ForEachGroup}: Calls a function for each group contained within the DATABASE. --- * @{#DATABASE.ForEachUnitInZone}: Calls a function for each unit within a certain zone contained within the DATABASE. --- --- ==== --- @module Database --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Menu" ) -Include.File( "Group" ) -Include.File( "Unit" ) -Include.File( "Event" ) -Include.File( "Client" ) - ---- DATABASE class --- @type DATABASE --- @extends Base#BASE -DATABASE = { - ClassName = "DATABASE", - Templates = { - Units = {}, - Groups = {}, - ClientsByName = {}, - ClientsByID = {}, - }, - DCSUnits = {}, - DCSGroups = {}, - UNITS = {}, - GROUPS = {}, - NavPoints = {}, - Statics = {}, - Players = {}, - PlayersAlive = {}, - CLIENTS = {}, - ClientsAlive = {}, - Filter = { - Coalitions = nil, - Categories = nil, - Types = nil, - Countries = nil, - UnitPrefixes = nil, - GroupPrefixes = nil, - }, - FilterMeta = { - Coalitions = { - red = coalition.side.RED, - blue = coalition.side.BLUE, - neutral = coalition.side.NEUTRAL, - }, - Categories = { - plane = Unit.Category.AIRPLANE, - helicopter = Unit.Category.HELICOPTER, - ground = Unit.Category.GROUND_UNIT, - ship = Unit.Category.SHIP, - structure = Unit.Category.STRUCTURE, - }, - }, -} - -local _DATABASECoalition = - { - [1] = "Red", - [2] = "Blue", - } - -local _DATABASECategory = - { - [Unit.Category.AIRPLANE] = "Plane", - [Unit.Category.HELICOPTER] = "Helicopter", - [Unit.Category.GROUND_UNIT] = "Vehicle", - [Unit.Category.SHIP] = "Ship", - [Unit.Category.STRUCTURE] = "Structure", - } - - ---- Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. --- @param #DATABASE self --- @return #DATABASE --- @usage --- -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. --- DBObject = DATABASE:New() -function DATABASE:New() - - -- Inherits from BASE - local self = BASE:Inherit( self, BASE:New() ) - - _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) - _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) - - - -- Add database with registered clients and already alive players - - -- Follow alive players and clients - _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) - _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) - - - return self -end - ---- Finds a Unit based on the Unit Name. --- @param #DATABASE self --- @param #string UnitName --- @return Unit#UNIT The found Unit. -function DATABASE:FindUnit( UnitName ) - - local UnitFound = self.UNITS[UnitName] - return UnitFound -end - ---- Adds a Unit based on the Unit Name in the DATABASE. --- @param #DATABASE self -function DATABASE:AddUnit( DCSUnit, DCSUnitName ) - - self.DCSUnits[DCSUnitName] = DCSUnit - self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) -end - ---- Deletes a Unit from the DATABASE based on the Unit Name. --- @param #DATABASE self -function DATABASE:DeleteUnit( DCSUnitName ) - - self.DCSUnits[DCSUnitName] = nil -end - ---- Finds a CLIENT based on the ClientName. --- @param #DATABASE self --- @param #string ClientName --- @return Client#CLIENT The found CLIENT. -function DATABASE:FindClient( ClientName ) - - local ClientFound = self.CLIENTS[ClientName] - return ClientFound -end - ---- Adds a CLIENT based on the ClientName in the DATABASE. --- @param #DATABASE self -function DATABASE:AddClient( ClientName ) - - self.CLIENTS[ClientName] = CLIENT:Register( ClientName ) - self:E( self.CLIENTS[ClientName]:GetClassNameAndID() ) -end - ---- Finds a GROUP based on the GroupName. --- @param #DATABASE self --- @param #string GroupName --- @return Group#GROUP The found GROUP. -function DATABASE:FindGroup( GroupName ) - - local GroupFound = self.GROUPS[GroupName] - return GroupFound -end - ---- Adds a GROUP based on the GroupName in the DATABASE. --- @param #DATABASE self -function DATABASE:AddGroup( DCSGroup, GroupName ) - - self.DCSGroups[GroupName] = DCSGroup - self.GROUPS[GroupName] = GROUP:Register( GroupName ) -end - ---- Instantiate new Groups within the DCSRTE. --- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: --- SpawnCountryID, SpawnCategoryID --- This method is used by the SPAWN class. --- @param #DATABASE self --- @param #table SpawnTemplate --- @return #DATABASE self -function DATABASE:Spawn( SpawnTemplate ) - self:F( SpawnTemplate.name ) - - self:T( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) - - -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. - local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID - local SpawnCountryID = SpawnTemplate.SpawnCountryID - local SpawnCategoryID = SpawnTemplate.SpawnCategoryID - - -- Nullify - SpawnTemplate.SpawnCoalitionID = nil - SpawnTemplate.SpawnCountryID = nil - SpawnTemplate.SpawnCategoryID = nil - - self:_RegisterGroup( SpawnTemplate ) - coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) - - -- Restore - SpawnTemplate.SpawnCoalitionID = SpawnCoalitionID - SpawnTemplate.SpawnCountryID = SpawnCountryID - SpawnTemplate.SpawnCategoryID = SpawnCategoryID - - - local SpawnGroup = GROUP:Register( SpawnTemplate.name ) - return SpawnGroup -end - - ---- Set a status to a Group within the Database, this to check crossing events for example. -function DATABASE:SetStatusGroup( GroupName, Status ) - self:F( Status ) - - self.Templates.Groups[GroupName].Status = Status -end - - ---- Get a status to a Group within the Database, this to check crossing events for example. -function DATABASE:GetStatusGroup( GroupName ) - self:F( Status ) - - if self.Templates.Groups[GroupName] then - return self.Templates.Groups[GroupName].Status - else - return "" - end -end - ---- Private method that registers new Group Templates within the DATABASE Object. --- @param #DATABASE self --- @param #table GroupTemplate --- @return #DATABASE self -function DATABASE:_RegisterGroup( GroupTemplate ) - - local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) - - if not self.Templates.Groups[GroupTemplateName] then - self.Templates.Groups[GroupTemplateName] = {} - self.Templates.Groups[GroupTemplateName].Status = nil - end - - -- Delete the spans from the route, it is not needed and takes memory. - if GroupTemplate.route and GroupTemplate.route.spans then - GroupTemplate.route.spans = nil - end - - self.Templates.Groups[GroupTemplateName].GroupName = GroupTemplateName - self.Templates.Groups[GroupTemplateName].Template = GroupTemplate - self.Templates.Groups[GroupTemplateName].groupId = GroupTemplate.groupId - self.Templates.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units - self.Templates.Groups[GroupTemplateName].Units = GroupTemplate.units - - self:T( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } ) - - for unit_num, UnitTemplate in pairs( GroupTemplate.units ) do - - local UnitTemplateName = env.getValueDictByKey(UnitTemplate.name) - self.Templates.Units[UnitTemplateName] = {} - self.Templates.Units[UnitTemplateName].UnitName = UnitTemplateName - self.Templates.Units[UnitTemplateName].Template = UnitTemplate - self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName - self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate - self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId - self:E( {"skill",UnitTemplate.skill}) - if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then - self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate - self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate - end - self:E( { "Unit", self.Templates.Units[UnitTemplateName].UnitName } ) - end -end - ---- Private method that registers all alive players in the mission. --- @param #DATABASE self --- @return #DATABASE self -function DATABASE:_RegisterPlayers() - - local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - for UnitId, UnitData in pairs( CoalitionData ) do - self:T3( { "UnitData:", UnitData } ) - if UnitData and UnitData:isExist() then - local UnitName = UnitData:getName() - if not self.PlayersAlive[UnitName] then - self:E( { "Add player for unit:", UnitName, UnitData:getPlayerName() } ) - self.PlayersAlive[UnitName] = UnitData:getPlayerName() - end - end - end - end - - return self -end - ---- Private method that registers all datapoints within in the mission. --- @param #DATABASE self --- @return #DATABASE self -function DATABASE:_RegisterDatabase() - - local CoalitionsData = { GroupsRed = coalition.getGroups( coalition.side.RED ), GroupsBlue = coalition.getGroups( coalition.side.BLUE ) } - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - for DCSGroupId, DCSGroup in pairs( CoalitionData ) do - - if DCSGroup:isExist() then - local DCSGroupName = DCSGroup:getName() - - self:E( { "Register Group:", DCSGroup, DCSGroupName } ) - self:AddGroup( DCSGroup, DCSGroupName ) - - for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do - - local DCSUnitName = DCSUnit:getName() - self:E( { "Register Unit:", DCSUnit, DCSUnitName } ) - self:AddUnit( DCSUnit, DCSUnitName ) - end - else - self:E( { "Group does not exist: ", DCSGroup } ) - end - - end - end - - for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do - self:E( { "Adding Client:", ClientName } ) - self:AddClient( ClientName ) - end - - return self -end - ---- Events - ---- Handles the OnBirth event for the alive units set. --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnBirth( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - self:AddUnit( Event.IniDCSUnit, Event.IniDCSUnitName ) - self:AddGroup( Event.IniDCSGroup, Event.IniDCSGroupName ) - self:_EventOnPlayerEnterUnit( Event ) - end - end -end - ---- Handles the OnDead or OnCrash event for alive units set. --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnDeadOrCrash( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self.DCSUnits[Event.IniDCSUnitName] then - self:DeleteUnit( Event.IniDCSUnitName ) - -- add logic to correctly remove a group once all units are destroyed... - end - end -end - ---- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnPlayerEnterUnit( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - if not self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Add player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = Event.IniDCSUnit:getPlayerName() - self.ClientsAlive[Event.IniDCSUnitName] = self.CLIENTS[ Event.IniDCSUnitName ] - end - end - end -end - ---- Handles the OnPlayerLeaveUnit event to clean the active players table. --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnPlayerLeaveUnit( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - if self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Cleaning player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = nil - self.ClientsAlive[Event.IniDCSUnitName] = nil - end - end - end -end - ---- Iterators - ---- Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters. --- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive player in the database. --- @return #DATABASE self -function DATABASE:ForEach( IteratorFunction, arg, Set ) - self:F( arg ) - - local function CoRoutine() - local Count = 0 - for ObjectID, Object in pairs( Set ) do - self:T2( Object ) - IteratorFunction( Object, unpack( arg ) ) - Count = Count + 1 - if Count % 10 == 0 then - coroutine.yield( false ) - end - end - return true - end - - local co = coroutine.create( CoRoutine ) - - local function Schedule() - - local status, res = coroutine.resume( co ) - self:T( { status, res } ) - - if status == false then - error( res ) - end - if res == false then - return true -- resume next time the loop - end - - return false - end - - local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 ) - - return self -end - - ---- Interate the DATABASE and call an interator function for each **alive** unit, providing the Unit and optional parameters. --- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter. --- @return #DATABASE self -function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.DCSUnits ) - - return self -end - ---- Interate the DATABASE and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. --- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. --- @return #DATABASE self -function DATABASE:ForEachPlayer( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.PlayersAlive ) - - return self -end - - ---- Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters. --- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter. --- @return #DATABASE self -function DATABASE:ForEachClient( IteratorFunction, ... ) - self:F( arg ) - - self:ForEach( IteratorFunction, arg, self.CLIENTS ) - - return self -end - - -function DATABASE:ScanEnvironment() - self:F() - - self.Navpoints = {} - self.UNITS = {} - --Build routines.db.units and self.Navpoints - for coa_name, coa_data in pairs(env.mission.coalition) do - - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - --self.Units[coa_name] = {} - - ---------------------------------------------- - -- build nav points DB - self.Navpoints[coa_name] = {} - if coa_data.nav_points then --navpoints - for nav_ind, nav_data in pairs(coa_data.nav_points) do - - if type(nav_data) == 'table' then - self.Navpoints[coa_name][nav_ind] = routines.utils.deepCopy(nav_data) - - self.Navpoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. - self.Navpoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. - self.Navpoints[coa_name][nav_ind]['point']['x'] = nav_data.x - self.Navpoints[coa_name][nav_ind]['point']['y'] = 0 - self.Navpoints[coa_name][nav_ind]['point']['z'] = nav_data.y - end - end - end - ------------------------------------------------- - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - - local countryName = string.lower(cntry_data.name) - --self.Units[coa_name][countryName] = {} - --self.Units[coa_name][countryName]["countryId"] = cntry_data.id - - if type(cntry_data) == 'table' then --just making sure - - for obj_type_name, obj_type_data in pairs(cntry_data) do - - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check - - local category = obj_type_name - - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - - --self.Units[coa_name][countryName][category] = {} - - for group_num, GroupTemplate in pairs(obj_type_data.group) do - - if GroupTemplate and GroupTemplate.units and type(GroupTemplate.units) == 'table' then --making sure again- this is a valid group - self:_RegisterGroup( GroupTemplate ) - end --if GroupTemplate and GroupTemplate.units then - end --for group_num, GroupTemplate in pairs(obj_type_data.group) do - end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then - end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then - end --for obj_type_name, obj_type_data in pairs(cntry_data) do - end --if type(cntry_data) == 'table' then - end --for cntry_id, cntry_data in pairs(coa_data.country) do - end --if coa_data.country then --there is a country table - end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then - end --for coa_name, coa_data in pairs(mission.coalition) do - - self:_RegisterDatabase() - self:_RegisterPlayers() - - return self -end - - ---- --- @param #DATABASE self --- @param DCSUnit#Unit DCSUnit --- @return #DATABASE self -function DATABASE:_IsIncludeDCSUnit( DCSUnit ) - self:F( DCSUnit ) - local DCSUnitInclude = true - - if self.Filter.Coalitions then - local DCSUnitCoalition = false - for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do - self:T( { "Coalition:", DCSUnit:getCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) - if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == DCSUnit:getCoalition() then - DCSUnitCoalition = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCoalition - end - - if self.Filter.Categories then - local DCSUnitCategory = false - for CategoryID, CategoryName in pairs( self.Filter.Categories ) do - self:T( { "Category:", DCSUnit:getDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) - if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == DCSUnit:getDesc().category then - DCSUnitCategory = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCategory - end - - if self.Filter.Types then - local DCSUnitType = false - for TypeID, TypeName in pairs( self.Filter.Types ) do - self:T( { "Type:", DCSUnit:getTypeName(), TypeName } ) - if TypeName == DCSUnit:getTypeName() then - DCSUnitType = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitType - end - - if self.Filter.Countries then - local DCSUnitCountry = false - for CountryID, CountryName in pairs( self.Filter.Countries ) do - self:T( { "Country:", DCSUnit:getCountry(), CountryName } ) - if country.id[CountryName] == DCSUnit:getCountry() then - DCSUnitCountry = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCountry - end - - if self.Filter.UnitPrefixes then - local DCSUnitPrefix = false - for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do - self:T( { "Unit Prefix:", string.find( DCSUnit:getName(), UnitPrefix, 1 ), UnitPrefix } ) - if string.find( DCSUnit:getName(), UnitPrefix, 1 ) then - DCSUnitPrefix = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitPrefix - end - - self:T( DCSUnitInclude ) - return DCSUnitInclude -end - ---- --- @param #DATABASE self --- @param DCSUnit#Unit DCSUnit --- @return #DATABASE self -function DATABASE:_IsAliveDCSUnit( DCSUnit ) - self:F( DCSUnit ) - local DCSUnitAlive = false - if DCSUnit and DCSUnit:isExist() and DCSUnit:isActive() then - if self.DCSUnits[DCSUnit:getName()] then - DCSUnitAlive = true - end - end - self:T( DCSUnitAlive ) - return DCSUnitAlive -end - ---- --- @param #DATABASE self --- @param DCSGroup#Group DCSGroup --- @return #DATABASE self -function DATABASE:_IsAliveDCSGroup( DCSGroup ) - self:F( DCSGroup ) - local DCSGroupAlive = false - if DCSGroup and DCSGroup:isExist() then - if self.DCSGroups[DCSGroup:getName()] then - DCSGroupAlive = true - end - end - self:T( DCSGroupAlive ) - return DCSGroupAlive -end - - ---- Traces the current database contents in the log ... (for debug reasons). --- @param #DATABASE self --- @return #DATABASE self -function DATABASE:TraceDatabase() - self:F() - - self:T( { "DCSUnits:", self.DCSUnits } ) -end - - ---- The main include file for the MOOSE system. - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Database" ) -Include.File( "Event" ) - --- The order of the declarations is important here. Don't touch it. - ---- Declare the event dispatcher based on the EVENT class -_EVENTDISPATCHER = EVENT:New() -- #EVENT - ---- Declare the main database object, which is used internally by the MOOSE classes. -_DATABASE = DATABASE:New():ScanEnvironment() -- Database#DATABASE - ---- Scoring system for MOOSE. --- This scoring class calculates the hits and kills that players make within a simulation session. --- Scoring is calculated using a defined algorithm. --- With a small change in MissionScripting.lua, the scoring can also be logged in a CSV file, that can then be uploaded --- to a database or a BI tool to publish the scoring results to the player community. --- @module Scoring --- @author FlightControl - - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Menu" ) -Include.File( "Group" ) -Include.File( "Event" ) - - ---- The Scoring class --- @type SCORING --- @field Players A collection of the current players that have joined the game. --- @extends Base#BASE -SCORING = { - ClassName = "SCORING", - ClassID = 0, - Players = {}, -} - -local _SCORINGCoalition = - { - [1] = "Red", - [2] = "Blue", - } - -local _SCORINGCategory = - { - [Unit.Category.AIRPLANE] = "Plane", - [Unit.Category.HELICOPTER] = "Helicopter", - [Unit.Category.GROUND_UNIT] = "Vehicle", - [Unit.Category.SHIP] = "Ship", - [Unit.Category.STRUCTURE] = "Structure", - } - ---- Creates a new SCORING object to administer the scoring achieved by players. --- @param #SCORING self --- @param #string GameName The name of the game. This name is also logged in the CSV score file. --- @return #SCORING self --- @usage --- -- Define a new scoring object for the mission Gori Valley. --- ScoringObject = SCORING:New( "Gori Valley" ) -function SCORING:New( GameName ) - - -- Inherits from BASE - local self = BASE:Inherit( self, BASE:New() ) - - if GameName then - self.GameName = GameName - else - error( "A game name must be given to register the scoring results" ) - end - - - _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnHit( self._EventOnHit, self ) - - --self.SchedulerId = routines.scheduleFunction( SCORING._FollowPlayersScheduled, { self }, 0, 5 ) - self.SchedulerId = SCHEDULER:New( self, self._FollowPlayersScheduled, {}, 0, 5 ) - - self:ScoreMenu() - - return self - -end - ---- Creates a score radio menu. Can be accessed using Radio -> F10. --- @param #SCORING self --- @return #SCORING self -function SCORING:ScoreMenu() - self.Menu = SUBMENU:New( 'Scoring' ) - self.AllScoresMenu = COMMANDMENU:New( 'Score All Active Players', self.Menu, SCORING.ReportScoreAll, self ) - --- = COMMANDMENU:New('Your Current Score', ReportScore, SCORING.ReportScorePlayer, self ) - return self -end - ---- Follows new players entering Clients within the DCSRTE. --- TODO: Need to see if i can catch this also with an event. It will eliminate the schedule ... -function SCORING:_FollowPlayersScheduled() - self:F3( "_FollowPlayersScheduled" ) - - local ClientUnit = 0 - local CoalitionsData = { AlivePlayersRed = coalition.getPlayers(coalition.side.RED), AlivePlayersBlue = coalition.getPlayers(coalition.side.BLUE) } - local unitId - local unitData - local AlivePlayerUnits = {} - - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - self:T3( { "_FollowPlayersScheduled", CoalitionData } ) - for UnitId, UnitData in pairs( CoalitionData ) do - self:_AddPlayerFromUnit( UnitData ) - end - end - - return true -end - - ---- Track DEAD or CRASH events for the scoring. --- @param #SCORING self --- @param Event#EVENTDATA Event -function SCORING:_EventOnDeadOrCrash( Event ) - self:F( { Event } ) - - local TargetUnit = nil - local TargetGroup = nil - local TargetUnitName = "" - local TargetGroupName = "" - local TargetPlayerName = "" - local TargetCoalition = nil - local TargetCategory = nil - local TargetType = nil - local TargetUnitCoalition = nil - local TargetUnitCategory = nil - local TargetUnitType = nil - - if Event.IniDCSUnit then - - TargetUnit = Event.IniDCSUnit - TargetUnitName = Event.IniDCSUnitName - TargetGroup = Event.IniDCSGroup - TargetGroupName = Event.IniDCSGroupName - TargetPlayerName = TargetUnit:getPlayerName() - - TargetCoalition = TargetUnit:getCoalition() - --TargetCategory = TargetUnit:getCategory() - TargetCategory = TargetUnit:getDesc().category -- Workaround - TargetType = TargetUnit:getTypeName() - - TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] - TargetUnitCategory = _SCORINGCategory[TargetCategory] - TargetUnitType = TargetType - - self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } ) - end - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Something got killed" ) - - -- Some variables - local InitUnitName = PlayerData.UnitName - local InitUnitType = PlayerData.UnitType - local InitCoalition = PlayerData.UnitCoalition - local InitCategory = PlayerData.UnitCategory - local InitUnitCoalition = _SCORINGCoalition[InitCoalition] - local InitUnitCategory = _SCORINGCategory[InitCategory] - - self:T( { InitUnitName, InitUnitType, InitUnitCoalition, InitCoalition, InitUnitCategory, InitCategory } ) - - -- What is he hitting? - if TargetCategory then - if PlayerData and PlayerData.Hit and PlayerData.Hit[TargetCategory] and PlayerData.Hit[TargetCategory][TargetUnitName] then -- Was there a hit for this unit for this player before registered??? - if not PlayerData.Kill[TargetCategory] then - PlayerData.Kill[TargetCategory] = {} - end - if not PlayerData.Kill[TargetCategory][TargetType] then - PlayerData.Kill[TargetCategory][TargetType] = {} - PlayerData.Kill[TargetCategory][TargetType].Score = 0 - PlayerData.Kill[TargetCategory][TargetType].ScoreKill = 0 - PlayerData.Kill[TargetCategory][TargetType].Penalty = 0 - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = 0 - end - - if InitCoalition == TargetCoalition then - PlayerData.Penalty = PlayerData.Penalty + 25 - PlayerData.Kill[TargetCategory][TargetType].Penalty = PlayerData.Kill[TargetCategory][TargetType].Penalty + 25 - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = PlayerData.Kill[TargetCategory][TargetType].PenaltyKill + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' killed a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill .. " times. Penalty: -" .. PlayerData.Kill[TargetCategory][TargetType].Penalty .. - ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, - "", 5, "/PENALTY" .. PlayerName .. "/" .. InitUnitName ):ToAll() - self:ScoreCSV( PlayerName, "KILL_PENALTY", 1, -125, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - else - PlayerData.Score = PlayerData.Score + 10 - PlayerData.Kill[TargetCategory][TargetType].Score = PlayerData.Kill[TargetCategory][TargetType].Score + 10 - PlayerData.Kill[TargetCategory][TargetType].ScoreKill = PlayerData.Kill[TargetCategory][TargetType].ScoreKill + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' killed an enemy " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - PlayerData.Kill[TargetCategory][TargetType].ScoreKill .. " times. Score: " .. PlayerData.Kill[TargetCategory][TargetType].Score .. - ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, - "", 5, "/SCORE" .. PlayerName .. "/" .. InitUnitName ):ToAll() - self:ScoreCSV( PlayerName, "KILL_SCORE", 1, 10, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - end - end - end - end - end -end - - - ---- Add a new player entering a Unit. -function SCORING:_AddPlayerFromUnit( UnitData ) - self:F( UnitData ) - - if UnitData and UnitData:isExist() then - local UnitName = UnitData:getName() - local PlayerName = UnitData:getPlayerName() - local UnitDesc = UnitData:getDesc() - local UnitCategory = UnitDesc.category - local UnitCoalition = UnitData:getCoalition() - local UnitTypeName = UnitData:getTypeName() - - self:T( { PlayerName, UnitName, UnitCategory, UnitCoalition, UnitTypeName } ) - - if self.Players[PlayerName] == nil then -- I believe this is the place where a Player gets a life in a mission when he enters a unit ... - self.Players[PlayerName] = {} - self.Players[PlayerName].Hit = {} - self.Players[PlayerName].Kill = {} - self.Players[PlayerName].Mission = {} - - -- for CategoryID, CategoryName in pairs( SCORINGCategory ) do - -- self.Players[PlayerName].Hit[CategoryID] = {} - -- self.Players[PlayerName].Kill[CategoryID] = {} - -- end - self.Players[PlayerName].HitPlayers = {} - self.Players[PlayerName].HitUnits = {} - self.Players[PlayerName].Score = 0 - self.Players[PlayerName].Penalty = 0 - self.Players[PlayerName].PenaltyCoalition = 0 - self.Players[PlayerName].PenaltyWarning = 0 - end - - if not self.Players[PlayerName].UnitCoalition then - self.Players[PlayerName].UnitCoalition = UnitCoalition - else - if self.Players[PlayerName].UnitCoalition ~= UnitCoalition then - self.Players[PlayerName].Penalty = self.Players[PlayerName].Penalty + 50 - self.Players[PlayerName].PenaltyCoalition = self.Players[PlayerName].PenaltyCoalition + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' changed coalition from " .. _SCORINGCoalition[self.Players[PlayerName].UnitCoalition] .. " to " .. _SCORINGCoalition[UnitCoalition] .. - "(changed " .. self.Players[PlayerName].PenaltyCoalition .. " times the coalition). 50 Penalty points added.", - "", - 2, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - self:ScoreCSV( PlayerName, "COALITION_PENALTY", 1, -50, self.Players[PlayerName].UnitName, _SCORINGCoalition[self.Players[PlayerName].UnitCoalition], _SCORINGCategory[self.Players[PlayerName].UnitCategory], self.Players[PlayerName].UnitType, - UnitName, _SCORINGCoalition[UnitCoalition], _SCORINGCategory[UnitCategory], UnitData:getTypeName() ) - end - end - self.Players[PlayerName].UnitName = UnitName - self.Players[PlayerName].UnitCoalition = UnitCoalition - self.Players[PlayerName].UnitCategory = UnitCategory - self.Players[PlayerName].UnitType = UnitTypeName - - if self.Players[PlayerName].Penalty > 100 then - if self.Players[PlayerName].PenaltyWarning < 1 then - MESSAGE:New( "Player '" .. PlayerName .. "': WARNING! If you continue to commit FRATRICIDE and have a PENALTY score higher than 150, you will be COURT MARTIALED and DISMISSED from this mission! \nYour total penalty is: " .. self.Players[PlayerName].Penalty, - "", - 30, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - self.Players[PlayerName].PenaltyWarning = self.Players[PlayerName].PenaltyWarning + 1 - end - end - - if self.Players[PlayerName].Penalty > 150 then - ClientGroup = GROUP:NewFromDCSUnit( UnitData ) - ClientGroup:Destroy() - MESSAGE:New( "Player '" .. PlayerName .. "' committed FRATRICIDE, he will be COURT MARTIALED and is DISMISSED from this mission!", - "", - 10, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - end - - end -end - - ---- Registers Scores the players completing a Mission Task. -function SCORING:_AddMissionTaskScore( PlayerUnit, MissionName, Score ) - self:F( { PlayerUnit, MissionName, Score } ) - - local PlayerName = PlayerUnit:getPlayerName() - - if not self.Players[PlayerName].Mission[MissionName] then - self.Players[PlayerName].Mission[MissionName] = {} - self.Players[PlayerName].Mission[MissionName].ScoreTask = 0 - self.Players[PlayerName].Mission[MissionName].ScoreMission = 0 - end - - self:T( PlayerName ) - self:T( self.Players[PlayerName].Mission[MissionName] ) - - self.Players[PlayerName].Score = self.Players[PlayerName].Score + Score - self.Players[PlayerName].Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score - - MESSAGE:New( "Player '" .. PlayerName .. "' has finished another Task in Mission '" .. MissionName .. "'. " .. - Score .. " Score points added.", - "", 20, "/SCORETASK" .. PlayerName ):ToAll() - - self:ScoreCSV( PlayerName, "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score, PlayerUnit:getName() ) -end - - ---- Registers Mission Scores for possible multiple players that contributed in the Mission. -function SCORING:_AddMissionScore( MissionName, Score ) - self:F( { MissionName, Score } ) - - for PlayerName, PlayerData in pairs( self.Players ) do - - if PlayerData.Mission[MissionName] then - PlayerData.Score = PlayerData.Score + Score - PlayerData.Mission[MissionName].ScoreMission = PlayerData.Mission[MissionName].ScoreMission + Score - MESSAGE:New( "Player '" .. PlayerName .. "' has finished Mission '" .. MissionName .. "'. " .. - Score .. " Score points added.", - "", 20, "/SCOREMISSION" .. PlayerName ):ToAll() - self:ScoreCSV( PlayerName, "MISSION_" .. MissionName:gsub( ' ', '_' ), 1, Score ) - end - end -end - ---- Handles the OnHit event for the scoring. --- @param #SCORING self --- @param Event#EVENTDATA Event -function SCORING:_EventOnHit( Event ) - self:F( { Event } ) - - local InitUnit = nil - local InitUnitName = "" - local InitGroup = nil - local InitGroupName = "" - local InitPlayerName = nil - - local InitCoalition = nil - local InitCategory = nil - local InitType = nil - local InitUnitCoalition = nil - local InitUnitCategory = nil - local InitUnitType = nil - - local TargetUnit = nil - local TargetUnitName = "" - local TargetGroup = nil - local TargetGroupName = "" - local TargetPlayerName = "" - - local TargetCoalition = nil - local TargetCategory = nil - local TargetType = nil - local TargetUnitCoalition = nil - local TargetUnitCategory = nil - local TargetUnitType = nil - - if Event.IniDCSUnit then - - InitUnit = Event.IniDCSUnit - InitUnitName = Event.IniDCSUnitName - InitGroup = Event.IniDCSGroup - InitGroupName = Event.IniDCSGroupName - InitPlayerName = InitUnit:getPlayerName() - - InitCoalition = InitUnit:getCoalition() - --TODO: Workaround Client DCS Bug - --InitCategory = InitUnit:getCategory() - InitCategory = InitUnit:getDesc().category - InitType = InitUnit:getTypeName() - - InitUnitCoalition = _SCORINGCoalition[InitCoalition] - InitUnitCategory = _SCORINGCategory[InitCategory] - InitUnitType = InitType - - self:T( { InitUnitName, InitGroupName, InitPlayerName, InitCoalition, InitCategory, InitType , InitUnitCoalition, InitUnitCategory, InitUnitType } ) - end - - - if Event.TgtDCSUnit then - - TargetUnit = Event.TgtDCSUnit - TargetUnitName = Event.TgtDCSUnitName - TargetGroup = Event.TgtDCSGroup - TargetGroupName = Event.TgtDCSGroupName - TargetPlayerName = TargetUnit:getPlayerName() - - TargetCoalition = TargetUnit:getCoalition() - --TODO: Workaround Client DCS Bug - --TargetCategory = TargetUnit:getCategory() - TargetCategory = TargetUnit:getDesc().category - TargetType = TargetUnit:getTypeName() - - TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] - TargetUnitCategory = _SCORINGCategory[TargetCategory] - TargetUnitType = TargetType - - self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType, TargetUnitCoalition, TargetUnitCategory, TargetUnitType } ) - end - - if InitPlayerName ~= nil then -- It is a player that is hitting something - self:_AddPlayerFromUnit( InitUnit ) - if self.Players[InitPlayerName] then -- This should normally not happen, but i'll test it anyway. - if TargetPlayerName ~= nil then -- It is a player hitting another player ... - self:_AddPlayerFromUnit( TargetUnit ) - self.Players[InitPlayerName].HitPlayers = self.Players[InitPlayerName].HitPlayers + 1 - end - - self:T( "Hitting Something" ) - -- What is he hitting? - if TargetCategory then - if not self.Players[InitPlayerName].Hit[TargetCategory] then - self.Players[InitPlayerName].Hit[TargetCategory] = {} - end - if not self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] then - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] = {} - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = 0 - end - local Score = 0 - if InitCoalition == TargetCoalition then - self.Players[InitPlayerName].Penalty = self.Players[InitPlayerName].Penalty + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit + 1 - MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit .. " times. Penalty: -" .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty .. - ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, - "", - 2, - "/PENALTY" .. InitPlayerName .. "/" .. InitUnitName - ):ToAll() - self:ScoreCSV( InitPlayerName, "HIT_PENALTY", 1, -25, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - else - self.Players[InitPlayerName].Score = self.Players[InitPlayerName].Score + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score + 1 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit + 1 - MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a target " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit .. " times. Score: " .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score .. - ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, - "", - 2, - "/SCORE" .. InitPlayerName .. "/" .. InitUnitName - ):ToAll() - self:ScoreCSV( InitPlayerName, "HIT_SCORE", 1, 1, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - end - end - end - elseif InitPlayerName == nil then -- It is an AI hitting a player??? - - end -end - - -function SCORING:ReportScoreAll() - - env.info( "Hello World " ) - - local ScoreMessage = "" - local PlayerMessage = "" - - self:T( "Score Report" ) - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Score Player: " .. PlayerName ) - - -- Some variables - local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] - local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] - local InitUnitType = PlayerData.UnitType - local InitUnitName = PlayerData.UnitName - - local PlayerScore = 0 - local PlayerPenalty = 0 - - ScoreMessage = ":\n" - - local ScoreMessageHits = "" - - for CategoryID, CategoryName in pairs( _SCORINGCategory ) do - self:T( CategoryName ) - if PlayerData.Hit[CategoryID] then - local Score = 0 - local ScoreHit = 0 - local Penalty = 0 - local PenaltyHit = 0 - self:T( "Hit scores exist for player " .. PlayerName ) - for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do - Score = Score + UnitData.Score - ScoreHit = ScoreHit + UnitData.ScoreHit - Penalty = Penalty + UnitData.Penalty - PenaltyHit = UnitData.PenaltyHit - end - local ScoreMessageHit = string.format( "%s:%d ", CategoryName, Score - Penalty ) - self:T( ScoreMessageHit ) - ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageHits ~= "" then - ScoreMessage = ScoreMessage .. " Hits: " .. ScoreMessageHits .. "\n" - end - - local ScoreMessageKills = "" - for CategoryID, CategoryName in pairs( _SCORINGCategory ) do - self:T( "Kill scores exist for player " .. PlayerName ) - if PlayerData.Kill[CategoryID] then - local Score = 0 - local ScoreKill = 0 - local Penalty = 0 - local PenaltyKill = 0 - - for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do - Score = Score + UnitData.Score - ScoreKill = ScoreKill + UnitData.ScoreKill - Penalty = Penalty + UnitData.Penalty - PenaltyKill = PenaltyKill + UnitData.PenaltyKill - end - - local ScoreMessageKill = string.format( " %s:%d ", CategoryName, Score - Penalty ) - self:T( ScoreMessageKill ) - ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill - - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageKills ~= "" then - ScoreMessage = ScoreMessage .. " Kills: " .. ScoreMessageKills .. "\n" - end - - local ScoreMessageCoalitionChangePenalties = "" - if PlayerData.PenaltyCoalition ~= 0 then - ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) - PlayerPenalty = PlayerPenalty + PlayerData.Penalty - end - if ScoreMessageCoalitionChangePenalties ~= "" then - ScoreMessage = ScoreMessage .. " Coalition Penalties: " .. ScoreMessageCoalitionChangePenalties .. "\n" - end - - local ScoreMessageMission = "" - local ScoreMission = 0 - local ScoreTask = 0 - for MissionName, MissionData in pairs( PlayerData.Mission ) do - ScoreMission = ScoreMission + MissionData.ScoreMission - ScoreTask = ScoreTask + MissionData.ScoreTask - ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " - end - PlayerScore = PlayerScore + ScoreMission + ScoreTask - - if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. " Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")\n" - end - - PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score:%d (%d Score -%d Penalties)%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) - end - end - MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() -end - - -function SCORING:ReportScorePlayer() - - env.info( "Hello World " ) - - local ScoreMessage = "" - local PlayerMessage = "" - - self:T( "Score Report" ) - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Score Player: " .. PlayerName ) - - -- Some variables - local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] - local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] - local InitUnitType = PlayerData.UnitType - local InitUnitName = PlayerData.UnitName - - local PlayerScore = 0 - local PlayerPenalty = 0 - - ScoreMessage = "" - - local ScoreMessageHits = "" - - for CategoryID, CategoryName in pairs( _SCORINGCategory ) do - self:T( CategoryName ) - if PlayerData.Hit[CategoryID] then - local Score = 0 - local ScoreHit = 0 - local Penalty = 0 - local PenaltyHit = 0 - self:T( "Hit scores exist for player " .. PlayerName ) - for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do - Score = Score + UnitData.Score - ScoreHit = ScoreHit + UnitData.ScoreHit - Penalty = Penalty + UnitData.Penalty - PenaltyHit = UnitData.PenaltyHit - end - local ScoreMessageHit = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreHit, PenaltyHit ) - self:T( ScoreMessageHit ) - ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageHits ~= "" then - ScoreMessage = ScoreMessage .. "\n Hits: " .. ScoreMessageHits .. " " - end - - local ScoreMessageKills = "" - for CategoryID, CategoryName in pairs( _SCORINGCategory ) do - self:T( "Kill scores exist for player " .. PlayerName ) - if PlayerData.Kill[CategoryID] then - local Score = 0 - local ScoreKill = 0 - local Penalty = 0 - local PenaltyKill = 0 - - for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do - Score = Score + UnitData.Score - ScoreKill = ScoreKill + UnitData.ScoreKill - Penalty = Penalty + UnitData.Penalty - PenaltyKill = PenaltyKill + UnitData.PenaltyKill - end - - local ScoreMessageKill = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreKill, PenaltyKill ) - self:T( ScoreMessageKill ) - ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill - - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageKills ~= "" then - ScoreMessage = ScoreMessage .. "\n Kills: " .. ScoreMessageKills .. " " - end - - local ScoreMessageCoalitionChangePenalties = "" - if PlayerData.PenaltyCoalition ~= 0 then - ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) - PlayerPenalty = PlayerPenalty + PlayerData.Penalty - end - if ScoreMessageCoalitionChangePenalties ~= "" then - ScoreMessage = ScoreMessage .. "\n Coalition: " .. ScoreMessageCoalitionChangePenalties .. " " - end - - local ScoreMessageMission = "" - local ScoreMission = 0 - local ScoreTask = 0 - for MissionName, MissionData in pairs( PlayerData.Mission ) do - ScoreMission = ScoreMission + MissionData.ScoreMission - ScoreTask = ScoreTask + MissionData.ScoreTask - ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " - end - PlayerScore = PlayerScore + ScoreMission + ScoreTask - - if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. "\n Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ") " - end - - PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties ):%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) - end - end - MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() - -end - - -function SCORING:SecondsToClock(sSeconds) - local nSeconds = sSeconds - if nSeconds == 0 then - --return nil; - return "00:00:00"; - else - nHours = string.format("%02.f", math.floor(nSeconds/3600)); - nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); - nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); - return nHours..":"..nMins..":"..nSecs - end -end - ---- Opens a score CSV file to log the scores. --- @param #SCORING self --- @param #string ScoringCSV --- @return #SCORING self --- @usage --- -- Open a new CSV file to log the scores of the game Gori Valley. Let the name of the CSV file begin with "Player Scores". --- ScoringObject = SCORING:New( "Gori Valley" ) --- ScoringObject:OpenCSV( "Player Scores" ) -function SCORING:OpenCSV( ScoringCSV ) - self:F( ScoringCSV ) - - if lfs and io and os then - if ScoringCSV then - self.ScoringCSV = ScoringCSV - local fdir = lfs.writedir() .. [[Logs\]] .. self.ScoringCSV .. " " .. os.date( "%Y-%m-%d %H-%M-%S" ) .. ".csv" - - self.CSVFile, self.err = io.open( fdir, "w+" ) - if not self.CSVFile then - error( "Error: Cannot open CSV file in " .. lfs.writedir() ) - end - - self.CSVFile:write( '"GameName","RunTime","Time","PlayerName","ScoreType","PlayerUnitCoaltion","PlayerUnitCategory","PlayerUnitType","PlayerUnitName","TargetUnitCoalition","TargetUnitCategory","TargetUnitType","TargetUnitName","Times","Score"\n' ) - - self.RunTime = os.date("%y-%m-%d_%H-%M-%S") - else - error( "A string containing the CSV file name must be given." ) - end - else - self:E( "The MissionScripting.lua file has not been changed to allow lfs, io and os modules to be used..." ) - end - return self -end - - ---- Registers a score for a player. --- @param #SCORING self --- @param #string PlayerName The name of the player. --- @param #string ScoreType The type of the score. --- @param #string ScoreTimes The amount of scores achieved. --- @param #string ScoreAmount The score given. --- @param #string PlayerUnitName The unit name of the player. --- @param #string PlayerUnitCoalition The coalition of the player unit. --- @param #string PlayerUnitCategory The category of the player unit. --- @param #string PlayerUnitType The type of the player unit. --- @param #string TargetUnitName The name of the target unit. --- @param #string TargetUnitCoalition The coalition of the target unit. --- @param #string TargetUnitCategory The category of the target unit. --- @param #string TargetUnitType The type of the target unit. --- @return #SCORING self -function SCORING:ScoreCSV( PlayerName, ScoreType, ScoreTimes, ScoreAmount, PlayerUnitName, PlayerUnitCoalition, PlayerUnitCategory, PlayerUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - --write statistic information to file - local ScoreTime = self:SecondsToClock( timer.getTime() ) - PlayerName = PlayerName:gsub( '"', '_' ) - - if PlayerUnitName and PlayerUnitName ~= '' then - local PlayerUnit = Unit.getByName( PlayerUnitName ) - - if PlayerUnit then - if not PlayerUnitCategory then - --PlayerUnitCategory = SCORINGCategory[PlayerUnit:getCategory()] - PlayerUnitCategory = _SCORINGCategory[PlayerUnit:getDesc().category] - end - - if not PlayerUnitCoalition then - PlayerUnitCoalition = _SCORINGCoalition[PlayerUnit:getCoalition()] - end - - if not PlayerUnitType then - PlayerUnitType = PlayerUnit:getTypeName() - end - else - PlayerUnitName = '' - PlayerUnitCategory = '' - PlayerUnitCoalition = '' - PlayerUnitType = '' - end - else - PlayerUnitName = '' - PlayerUnitCategory = '' - PlayerUnitCoalition = '' - PlayerUnitType = '' - end - - if not TargetUnitCoalition then - TargetUnitCoalition = '' - end - - if not TargetUnitCategory then - TargetUnitCategory = '' - end - - if not TargetUnitType then - TargetUnitType = '' - end - - if not TargetUnitName then - TargetUnitName = '' - end - - if lfs and io and os then - self.CSVFile:write( - '"' .. self.GameName .. '"' .. ',' .. - '"' .. self.RunTime .. '"' .. ',' .. - '' .. ScoreTime .. '' .. ',' .. - '"' .. PlayerName .. '"' .. ',' .. - '"' .. ScoreType .. '"' .. ',' .. - '"' .. PlayerUnitCoalition .. '"' .. ',' .. - '"' .. PlayerUnitCategory .. '"' .. ',' .. - '"' .. PlayerUnitType .. '"' .. ',' .. - '"' .. PlayerUnitName .. '"' .. ',' .. - '"' .. TargetUnitCoalition .. '"' .. ',' .. - '"' .. TargetUnitCategory .. '"' .. ',' .. - '"' .. TargetUnitType .. '"' .. ',' .. - '"' .. TargetUnitName .. '"' .. ',' .. - '' .. ScoreTimes .. '' .. ',' .. - '' .. ScoreAmount - ) - - self.CSVFile:write( "\n" ) - end -end - - -function SCORING:CloseCSV() - if lfs and io and os then - self.CSVFile:close() - end -end - ---- CARGO Classes --- @module CARGO - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Message" ) -Include.File( "Scheduler" ) - - ---- Clients are those Groups defined within the Mission Editor that have the skillset defined as "Client" or "Player". --- These clients are defined within the Mission Orchestration Framework (MOF) - -CARGOS = {} - - -CARGO_ZONE = { - ClassName="CARGO_ZONE", - CargoZoneName = '', - CargoHostUnitName = '', - SIGNAL = { - TYPE = { - SMOKE = { ID = 1, TEXT = "smoke" }, - FLARE = { ID = 2, TEXT = "flare" } - }, - COLOR = { - GREEN = { ID = 1, TRIGGERCOLOR = trigger.smokeColor.Green, TEXT = "A green" }, - RED = { ID = 2, TRIGGERCOLOR = trigger.smokeColor.Red, TEXT = "A red" }, - WHITE = { ID = 3, TRIGGERCOLOR = trigger.smokeColor.White, TEXT = "A white" }, - ORANGE = { ID = 4, TRIGGERCOLOR = trigger.smokeColor.Orange, TEXT = "An orange" }, - BLUE = { ID = 5, TRIGGERCOLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, - YELLOW = { ID = 6, TRIGGERCOLOR = trigger.flareColor.Yellow, TEXT = "A yellow" } - } - } -} - ---- Creates a new zone where cargo can be collected or deployed. --- The zone functionality is useful to smoke or indicate routes for cargo pickups or deployments. --- Provide the zone name as declared in the mission file into the CargoZoneName in the :New method. --- An optional parameter is the CargoHostName, which is a Group declared with Late Activation switched on in the mission file. --- The CargoHostName is the "host" of the cargo zone: --- --- * It will smoke the zone position when a client is approaching the zone. --- * Depending on the cargo type, it will assist in the delivery of the cargo by driving to and from the client. --- --- @param #CARGO_ZONE self --- @param #string CargoZoneName The name of the zone as declared within the mission editor. --- @param #string CargoHostName The name of the Group "hosting" the zone. The Group MUST NOT be a static, and must be a "mobile" unit. -function CARGO_ZONE:New( CargoZoneName, CargoHostName ) local self = BASE:Inherit( self, ZONE:New( CargoZoneName ) ) - self:F( { CargoZoneName, CargoHostName } ) - - self.CargoZoneName = CargoZoneName - self.SignalHeight = 2 - --self.CargoZone = trigger.misc.getZone( CargoZoneName ) - - - if CargoHostName then - self.CargoHostName = CargoHostName - end - - self:T( self.CargoZoneName ) - - return self -end - -function CARGO_ZONE:Spawn() - self:F( self.CargoHostName ) - - if self.CargoHostName then -- Only spawn a host in the zone when there is one given as a parameter in the New function. - if self.CargoHostSpawn then - local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() - if CargoHostGroup and CargoHostGroup:IsAlive() then - else - self.CargoHostSpawn:ReSpawn( 1 ) - end - else - self:T( "Initialize CargoHostSpawn" ) - self.CargoHostSpawn = SPAWN:New( self.CargoHostName ):Limit( 1, 1 ) - self.CargoHostSpawn:ReSpawn( 1 ) - end - end - - return self -end - -function CARGO_ZONE:GetHostUnit() - self:F( self ) - - if self.CargoHostName then - - -- A Host has been given, signal the host - local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() - local CargoHostUnit - if CargoHostGroup and CargoHostGroup:IsAlive() then - CargoHostUnit = CargoHostGroup:GetUnit(1) - else - CargoHostUnit = StaticObject.getByName( self.CargoHostName ) - end - - return CargoHostUnit - end - - return nil -end - -function CARGO_ZONE:ReportCargosToClient( Client, CargoType ) - self:F() - - local SignalUnit = self:GetHostUnit() - - if SignalUnit then - - local SignalUnitTypeName = SignalUnit:getTypeName() - - local HostMessage = "" - - local IsCargo = false - for CargoID, Cargo in pairs( CARGOS ) do - if Cargo.CargoType == Task.CargoType then - if Cargo:IsStatusNone() then - HostMessage = HostMessage .. " - " .. Cargo.CargoName .. " - " .. Cargo.CargoType .. " (" .. Cargo.Weight .. "kg)" .. "\n" - IsCargo = true - end - end - end - - if not IsCargo then - HostMessage = "No Cargo Available." - end - - Client:Message( HostMessage, 20, Mission.Name .. "/StageHosts." .. SignalUnitTypeName, SignalUnitTypeName .. ": Reporting Cargo", 10 ) - end -end - - -function CARGO_ZONE:Signal() - self:F() - - local Signalled = false - - if self.SignalType then - - if self.CargoHostName then - - -- A Host has been given, signal the host - - local SignalUnit = self:GetHostUnit() - - if SignalUnit then - - self:T( 'Signalling Unit' ) - local SignalVehiclePos = SignalUnit:GetPointVec3() - SignalVehiclePos.y = SignalVehiclePos.y + 2 - - if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then - - trigger.action.smoke( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR ) - Signalled = true - - elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then - - trigger.action.signalFlare( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR , 0 ) - Signalled = false - - end - end - - else - - local ZonePointVec3 = self:GetPointVec3( self.SignalHeight ) -- Get the zone position + the landheight + 2 meters - - if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then - - trigger.action.smoke( ZonePointVec3, self.SignalColor.TRIGGERCOLOR ) - Signalled = true - - elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then - trigger.action.signalFlare( ZonePointVec3, self.SignalColor.TRIGGERCOLOR, 0 ) - Signalled = false - - end - end - end - - return Signalled - -end - -function CARGO_ZONE:WhiteSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:BlueSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.BLUE - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:RedSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:OrangeSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.ORANGE - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:GreenSmoke( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - - -function CARGO_ZONE:WhiteFlare( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:RedFlare( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:GreenFlare( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - -function CARGO_ZONE:YellowFlare( SignalHeight ) - self:F() - - self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE - self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.YELLOW - - if SignalHeight then - self.SignalHeight = SignalHeight - end - - return self -end - - -function CARGO_ZONE:GetCargoHostUnit() - self:F( self ) - - if self.CargoHostSpawn then - local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex(1) - if CargoHostGroup and CargoHostGroup:IsAlive() then - local CargoHostUnit = CargoHostGroup:GetUnit(1) - if CargoHostUnit and CargoHostUnit:IsAlive() then - return CargoHostUnit - end - end - end - - return nil -end - -function CARGO_ZONE:GetCargoZoneName() - self:F() - - return self.CargoZoneName -end - -CARGO = { - ClassName = "CARGO", - STATUS = { - NONE = 0, - LOADED = 1, - UNLOADED = 2, - LOADING = 3 - }, - CargoClient = nil -} - ---- Add Cargo to the mission... Cargo functionality needs to be reworked a bit, so this is still under construction. I need to make a CARGO Class... -function CARGO:New( CargoType, CargoName, CargoWeight ) local self = BASE:Inherit( self, BASE:New() ) - self:F( { CargoType, CargoName, CargoWeight } ) - - - self.CargoType = CargoType - self.CargoName = CargoName - self.CargoWeight = CargoWeight - - self:StatusNone() - - return self -end - -function CARGO:Spawn( Client ) - self:F() - - return self - -end - -function CARGO:IsNear( Client, LandingZone ) - self:F() - - local Near = true - - return Near - -end - - -function CARGO:IsLoadingToClient() - self:F() - - if self:IsStatusLoading() then - return self.CargoClient - end - - return nil - -end - - -function CARGO:IsLoadedInClient() - self:F() - - if self:IsStatusLoaded() then - return self.CargoClient - end - - return nil - -end - - -function CARGO:UnLoad( Client, TargetZoneName ) - self:F() - - self:StatusUnLoaded() - - return self -end - -function CARGO:OnBoard( Client, LandingZone ) - self:F() - - local Valid = true - - self.CargoClient = Client - local ClientUnit = Client:GetClientGroupDCSUnit() - - return Valid -end - -function CARGO:OnBoarded( Client, LandingZone ) - self:F() - - local OnBoarded = true - - return OnBoarded -end - -function CARGO:Load( Client ) - self:F() - - self:StatusLoaded( Client ) - - return self -end - -function CARGO:IsLandingRequired() - self:F() - return true -end - -function CARGO:IsSlingLoad() - self:F() - return false -end - - -function CARGO:StatusNone() - self:F() - - self.CargoClient = nil - self.CargoStatus = CARGO.STATUS.NONE - - return self -end - -function CARGO:StatusLoading( Client ) - self:F() - - self.CargoClient = Client - self.CargoStatus = CARGO.STATUS.LOADING - self:T( "Cargo " .. self.CargoName .. " loading to Client: " .. self.CargoClient:GetClientGroupName() ) - - return self -end - -function CARGO:StatusLoaded( Client ) - self:F() - - self.CargoClient = Client - self.CargoStatus = CARGO.STATUS.LOADED - self:T( "Cargo " .. self.CargoName .. " loaded in Client: " .. self.CargoClient:GetClientGroupName() ) - - return self -end - -function CARGO:StatusUnLoaded() - self:F() - - self.CargoClient = nil - self.CargoStatus = CARGO.STATUS.UNLOADED - - return self -end - - -function CARGO:IsStatusNone() - self:F() - - return self.CargoStatus == CARGO.STATUS.NONE -end - -function CARGO:IsStatusLoading() - self:F() - - return self.CargoStatus == CARGO.STATUS.LOADING -end - -function CARGO:IsStatusLoaded() - self:F() - - return self.CargoStatus == CARGO.STATUS.LOADED -end - -function CARGO:IsStatusUnLoaded() - self:F() - - return self.CargoStatus == CARGO.STATUS.UNLOADED -end - - -CARGO_GROUP = { - ClassName = "CARGO_GROUP" -} - - -function CARGO_GROUP:New( CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) - self:F( { CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone } ) - - self.CargoSpawn = SPAWN:NewWithAlias( CargoGroupTemplate, CargoName ) - self.CargoZone = CargoZone - - CARGOS[self.CargoName] = self - - return self - -end - -function CARGO_GROUP:Spawn( Client ) - self:F( { Client } ) - - local SpawnCargo = true - - if self:IsStatusNone() then - local CargoGroup = Group.getByName( self.CargoName ) - if CargoGroup and CargoGroup:isExist() then - SpawnCargo = false - end - - elseif self:IsStatusLoading() then - - local Client = self:IsLoadingToClient() - if Client and Client:GetDCSGroup() then - SpawnCargo = false - else - local CargoGroup = Group.getByName( self.CargoName ) - if CargoGroup and CargoGroup:isExist() then - SpawnCargo = false - end - end - - elseif self:IsStatusLoaded() then - - local ClientLoaded = self:IsLoadedInClient() - -- Now test if another Client is alive (not this one), and it has the CARGO, then this cargo does not need to be initialized and spawned. - if ClientLoaded and ClientLoaded ~= Client then - local ClientGroup = Client:GetDCSGroup() - if ClientLoaded:GetClientGroupDCSUnit() and ClientLoaded:GetClientGroupDCSUnit():isExist() then - SpawnCargo = false - else - self:StatusNone() - end - else - -- Same Client, but now in initialize, so set back the status to None. - self:StatusNone() - end - - elseif self:IsStatusUnLoaded() then - - SpawnCargo = false - - end - - if SpawnCargo then - if self.CargoZone:GetCargoHostUnit() then - --- ReSpawn the Cargo from the CargoHost - self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30, 1 ):GetName() - else - --- ReSpawn the Cargo in the CargoZone without a host ... - self:T( self.CargoZone ) - self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone, true, 1 ):GetName() - end - self:StatusNone() - end - - self:T( { self.CargoGroupName, CARGOS[self.CargoName].CargoGroupName } ) - - return self -end - -function CARGO_GROUP:IsNear( Client, LandingZone ) - self:F() - - local Near = false - - if self.CargoGroupName then - local CargoGroup = Group.getByName( self.CargoGroupName ) - if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 250 ) then - Near = true - end - end - - return Near - -end - - -function CARGO_GROUP:OnBoard( Client, LandingZone, OnBoardSide ) - self:F() - - local Valid = true - - local ClientUnit = Client:GetClientGroupDCSUnit() - - local CarrierPos = ClientUnit:getPoint() - local CarrierPosMove = ClientUnit:getPoint() - local CarrierPosOnBoard = ClientUnit:getPoint() - - local CargoGroup = Group.getByName( self.CargoGroupName ) - - local CargoUnit = CargoGroup:getUnit(1) - local CargoPos = CargoUnit:getPoint() - - self.CargoInAir = CargoUnit:inAir() - - self:T( self.CargoInAir ) - - -- Only move the group to the carrier when the cargo is not in the air - -- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea). - if not self.CargoInAir then - - local Points = {} - - self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) - self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) - - Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) - - self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) - - if OnBoardSide == nil then - OnBoardSide = CLIENT.ONBOARDSIDE.NONE - end - - if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then - - self:T( "TransportCargoOnBoard: Onboarding LEFT" ) - CarrierPosMove.z = CarrierPosMove.z - 25 - CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then - - self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) - CarrierPosMove.z = CarrierPosMove.z + 25 - CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then - - self:T( "TransportCargoOnBoard: Onboarding BACK" ) - CarrierPosMove.x = CarrierPosMove.x - 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then - - self:T( "TransportCargoOnBoard: Onboarding FRONT" ) - CarrierPosMove.x = CarrierPosMove.x + 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then - - self:T( "TransportCargoOnBoard: Onboarding CENTRAL" ) - Points[#Points+1] = routines.ground.buildWP( CarrierPos, "Cone", 10 ) - - end - self:T( "TransportCargoOnBoard: Routing " .. self.CargoGroupName ) - - --routines.scheduleFunction( routines.goRoute, { self.CargoGroupName, Points}, timer.getTime() + 4 ) - SCHEDULER:New( self, routines.goRoute, { self.CargoGroupName, Points}, 4 ) - end - - self:StatusLoading( Client ) - - return Valid - -end - - -function CARGO_GROUP:OnBoarded( Client, LandingZone ) - self:F() - - local OnBoarded = false - - local CargoGroup = Group.getByName( self.CargoGroupName ) - - if not self.CargoInAir then - if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 25 ) then - CargoGroup:destroy() - self:StatusLoaded( Client ) - OnBoarded = true - end - else - CargoGroup:destroy() - self:StatusLoaded( Client ) - OnBoarded = true - end - - return OnBoarded -end - - -function CARGO_GROUP:UnLoad( Client, TargetZoneName ) - self:F() - - self:T( 'self.CargoName = ' .. self.CargoName ) - - local CargoGroup = self.CargoSpawn:SpawnFromUnit( Client:GetClientGroupUnit(), 60, 30 ) - - self.CargoGroupName = CargoGroup:GetName() - self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) - - CargoGroup:TaskRouteToZone( ZONE:New( TargetZoneName ), true ) - - self:StatusUnLoaded() - - return self -end - - -CARGO_PACKAGE = { - ClassName = "CARGO_PACKAGE" -} - - -function CARGO_PACKAGE:New( CargoType, CargoName, CargoWeight, CargoClient ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) - self:F( { CargoType, CargoName, CargoWeight, CargoClient } ) - - self.CargoClient = CargoClient - - CARGOS[self.CargoName] = self - - return self - -end - - -function CARGO_PACKAGE:Spawn( Client ) - self:F( { self, Client } ) - - -- this needs to be checked thoroughly - - local CargoClientGroup = self.CargoClient:GetDCSGroup() - if not CargoClientGroup then - if not self.CargoClientSpawn then - self.CargoClientSpawn = SPAWN:New( self.CargoClient:GetClientGroupName() ):Limit( 1, 1 ) - end - self.CargoClientSpawn:ReSpawn( 1 ) - end - - local SpawnCargo = true - - if self:IsStatusNone() then - - elseif self:IsStatusLoading() or self:IsStatusLoaded() then - - local CargoClientLoaded = self:IsLoadedInClient() - if CargoClientLoaded and CargoClientLoaded:GetDCSGroup() then - SpawnCargo = false - end - - elseif self:IsStatusUnLoaded() then - - SpawnCargo = false - - else - - end - - if SpawnCargo then - self:StatusLoaded( self.CargoClient ) - end - - return self -end - - -function CARGO_PACKAGE:IsNear( Client, LandingZone ) - self:F() - - local Near = false - - if self.CargoClient and self.CargoClient:GetDCSGroup() then - self:T( self.CargoClient.ClientName ) - self:T( 'Client Exists.' ) - - if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), Client:GetPositionVec3(), 150 ) then - Near = true - end - end - - return Near - -end - - -function CARGO_PACKAGE:OnBoard( Client, LandingZone, OnBoardSide ) - self:F() - - local Valid = true - - local ClientUnit = Client:GetClientGroupDCSUnit() - - local CarrierPos = ClientUnit:getPoint() - local CarrierPosMove = ClientUnit:getPoint() - local CarrierPosOnBoard = ClientUnit:getPoint() - local CarrierPosMoveAway = ClientUnit:getPoint() - - local CargoHostGroup = self.CargoClient:GetDCSGroup() - local CargoHostName = self.CargoClient:GetDCSGroup():getName() - - local CargoHostUnits = CargoHostGroup:getUnits() - local CargoPos = CargoHostUnits[1]:getPoint() - - local Points = {} - - self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) - self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) - - Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) - - self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) - - if OnBoardSide == nil then - OnBoardSide = CLIENT.ONBOARDSIDE.NONE - end - - if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then - - self:T( "TransportCargoOnBoard: Onboarding LEFT" ) - CarrierPosMove.z = CarrierPosMove.z - 25 - CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 - CarrierPosMoveAway.z = CarrierPosMoveAway.z - 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then - - self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) - CarrierPosMove.z = CarrierPosMove.z + 25 - CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 - CarrierPosMoveAway.z = CarrierPosMoveAway.z + 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then - - self:T( "TransportCargoOnBoard: Onboarding BACK" ) - CarrierPosMove.x = CarrierPosMove.x - 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 - CarrierPosMoveAway.x = CarrierPosMoveAway.x - 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then - - self:T( "TransportCargoOnBoard: Onboarding FRONT" ) - CarrierPosMove.x = CarrierPosMove.x + 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 - CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then - - self:T( "TransportCargoOnBoard: Onboarding FRONT" ) - CarrierPosMove.x = CarrierPosMove.x + 25 - CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 - CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 - Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) - Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) - - end - self:T( "Routing " .. CargoHostName ) - - --routines.scheduleFunction( routines.goRoute, { CargoHostName, Points}, timer.getTime() + 4 ) - SCHEDULER:New( self, routines.goRoute, { CargoHostName, Points }, 4 ) - - return Valid - -end - - -function CARGO_PACKAGE:OnBoarded( Client, LandingZone ) - self:F() - - local OnBoarded = false - - if self.CargoClient and self.CargoClient:GetDCSGroup() then - if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), self.CargoClient:GetPositionVec3(), 10 ) then - - -- Switch Cargo from self.CargoClient to Client ... Each cargo can have only one client. So assigning the new client for the cargo is enough. - self:StatusLoaded( Client ) - - -- All done, onboarded the Cargo to the new Client. - OnBoarded = true - end - end - - return OnBoarded -end - - -function CARGO_PACKAGE:UnLoad( Client, TargetZoneName ) - self:F() - - self:T( 'self.CargoName = ' .. self.CargoName ) - --self:T( 'self.CargoHostName = ' .. self.CargoHostName ) - - --self.CargoSpawn:FromCarrier( Client:GetDCSGroup(), TargetZoneName, self.CargoHostName ) - self:StatusUnLoaded() - - return Cargo -end - - -CARGO_SLINGLOAD = { - ClassName = "CARGO_SLINGLOAD" -} - - -function CARGO_SLINGLOAD:New( CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID ) - local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) - self:F( { CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID } ) - - self.CargoHostName = CargoHostName - - -- Cargo will be initialized around the CargoZone position. - self.CargoZone = CargoZone - - self.CargoCount = 0 - self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) - - -- The country ID needs to be correctly set. - self.CargoCountryID = CargoCountryID - - CARGOS[self.CargoName] = self - - return self - -end - - -function CARGO_SLINGLOAD:IsLandingRequired() - self:F() - return false -end - - -function CARGO_SLINGLOAD:IsSlingLoad() - self:F() - return true -end - - -function CARGO_SLINGLOAD:Spawn( Client ) - self:F( { self, Client } ) - - local Zone = trigger.misc.getZone( self.CargoZone ) - - local ZonePos = {} - ZonePos.x = Zone.point.x + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) - ZonePos.y = Zone.point.z + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) - - self:T( "Cargo Location = " .. ZonePos.x .. ", " .. ZonePos.y ) - - --[[ - -- This does not work in 1.5.2. - CargoStatic = StaticObject.getByName( self.CargoName ) - if CargoStatic then - CargoStatic:destroy() - end - --]] - - CargoStatic = StaticObject.getByName( self.CargoStaticName ) - - if CargoStatic and CargoStatic:isExist() then - CargoStatic:destroy() - end - - -- I need to make every time a new cargo due to bugs in 1.5.2. - - self.CargoCount = self.CargoCount + 1 - self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) - - local CargoTemplate = { - ["category"] = "Cargo", - ["shape_name"] = "ab-212_cargo", - ["type"] = "Cargo1", - ["x"] = ZonePos.x, - ["y"] = ZonePos.y, - ["mass"] = self.CargoWeight, - ["name"] = self.CargoStaticName, - ["canCargo"] = true, - ["heading"] = 0, - } - - coalition.addStaticObject( self.CargoCountryID, CargoTemplate ) - --- end - - return self -end - - -function CARGO_SLINGLOAD:IsNear( Client, LandingZone ) - self:F() - - local Near = false - - return Near -end - - -function CARGO_SLINGLOAD:IsInLandingZone( Client, LandingZone ) - self:F() - - local Near = false - - local CargoStaticUnit = StaticObject.getByName( self.CargoName ) - if CargoStaticUnit then - if routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then - Near = true - end - end - - return Near -end - - -function CARGO_SLINGLOAD:OnBoard( Client, LandingZone, OnBoardSide ) - self:F() - - local Valid = true - - - return Valid -end - - -function CARGO_SLINGLOAD:OnBoarded( Client, LandingZone ) - self:F() - - local OnBoarded = false - - local CargoStaticUnit = StaticObject.getByName( self.CargoName ) - if CargoStaticUnit then - if not routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then - OnBoarded = true - end - end - - return OnBoarded -end - - -function CARGO_SLINGLOAD:UnLoad( Client, TargetZoneName ) - self:F() - - self:T( 'self.CargoName = ' .. self.CargoName ) - self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) - - self:StatusUnLoaded() - - return Cargo -end ---- Message System to display Messages for Clients and Coalitions or All. --- Messages are grouped on the display panel per Category to improve readability for the players. --- Messages are shown on the display panel for an amount of seconds, and will then disappear. --- Messages are identified by an ID. The messages with the same ID belonging to the same category will be overwritten if they were still being displayed on the display panel. --- Messages are created with MESSAGE:@{New}(). --- Messages are sent to Clients with MESSAGE:@{ToClient}(). --- Messages are sent to Coalitions with MESSAGE:@{ToCoalition}(). --- Messages are sent to All Players with MESSAGE:@{ToAll}(). --- @module Message - -Include.File( "Base" ) - ---- The MESSAGE class --- @type MESSAGE -MESSAGE = { - ClassName = "MESSAGE", - MessageCategory = 0, - MessageID = 0, -} - - ---- Creates a new MESSAGE object. Note that these MESSAGE objects are not yet displayed on the display panel. You must use the functions @{ToClient} or @{ToCoalition} or @{ToAll} to send these Messages to the respective recipients. --- @param self --- @param #string MessageText is the text of the Message. --- @param #string MessageCategory is a string expressing the Category of the Message. Messages are grouped on the display panel per Category to improve readability. --- @param #number MessageDuration is a number in seconds of how long the MESSAGE should be shown on the display panel. --- @param #string MessageID is a string expressing the ID of the Message. --- @return #MESSAGE --- @usage --- -- Create a series of new Messages. --- -- MessageAll is meant to be sent to all players, for 25 seconds, and is classified as "Score". --- -- MessageRED is meant to be sent to the RED players only, for 10 seconds, and is classified as "End of Mission", with ID "Win". --- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". --- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". --- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ) --- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) --- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) --- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) -function MESSAGE:New( MessageText, MessageCategory, MessageDuration, MessageID ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { MessageText, MessageCategory, MessageDuration, MessageID } ) - - -- When no messagecategory is given, we don't show it as a title... - if MessageCategory and MessageCategory ~= "" then - self.MessageCategory = MessageCategory .. ": " - else - self.MessageCategory = "" - end - - self.MessageDuration = MessageDuration - self.MessageID = MessageID - self.MessageTime = timer.getTime() - self.MessageText = MessageText - - self.MessageSent = false - self.MessageGroup = false - self.MessageCoalition = false - - return self -end - ---- Sends a MESSAGE to a Client Group. Note that the Group needs to be defined within the ME with the skillset "Client" or "Player". --- @param #MESSAGE self --- @param Client#CLIENT Client is the Group of the Client. --- @return #MESSAGE --- @usage --- -- Send the 2 messages created with the @{New} method to the Client Group. --- -- Note that the Message of MessageClient2 is overwriting the Message of MessageClient1. --- ClientGroup = Group.getByName( "ClientGroup" ) --- --- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) --- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) --- or --- MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) --- MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) --- or --- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) --- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) --- MessageClient1:ToClient( ClientGroup ) --- MessageClient2:ToClient( ClientGroup ) -function MESSAGE:ToClient( Client ) - self:F( Client ) - - if Client and Client:GetClientGroupID() then - - local ClientGroupID = Client:GetClientGroupID() - self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) - trigger.action.outTextForGroup( ClientGroupID, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) - end - - return self -end - ---- Sends a MESSAGE to the Blue coalition. --- @param #MESSAGE self --- @return #MESSAGE --- @usage --- -- Send a message created with the @{New} method to the BLUE coalition. --- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() --- or --- MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() --- or --- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) --- MessageBLUE:ToBlue() -function MESSAGE:ToBlue() - self:F() - - self:ToCoalition( coalition.side.BLUE ) - - return self -end - ---- Sends a MESSAGE to the Red Coalition. --- @param #MESSAGE self --- @return #MESSAGE --- @usage --- -- Send a message created with the @{New} method to the RED coalition. --- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() --- or --- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() --- 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:ToRed() -function MESSAGE:ToRed( ) - self:F() - - self:ToCoalition( coalition.side.RED ) - - return self -end - ---- Sends a MESSAGE to a Coalition. --- @param #MESSAGE self --- @param CoalitionSide needs to be filled out by the defined structure of the standard scripting engine @{coalition.side}. --- @return #MESSAGE --- @usage --- -- Send a message created with the @{New} method to the RED coalition. --- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) --- or --- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) --- 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 ) -function MESSAGE:ToCoalition( CoalitionSide ) - self:F( CoalitionSide ) - - if CoalitionSide then - self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) - trigger.action.outTextForCoalition( CoalitionSide, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) - end - - return self -end - ---- Sends a MESSAGE to all players. --- @param #MESSAGE self --- @return #MESSAGE --- @usage --- -- Send a message created to all players. --- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() --- or --- MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() --- or --- 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:ToCoalition( coalition.side.RED ) - self:ToCoalition( coalition.side.BLUE ) - - return self -end - - - ---- The MESSAGEQUEUE class --- @type MESSAGEQUEUE -MESSAGEQUEUE = { - ClientGroups = {}, - CoalitionSides = {} -} - -function MESSAGEQUEUE:New( RefreshInterval ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { RefreshInterval } ) - - self.RefreshInterval = RefreshInterval - - --self.DisplayFunction = routines.scheduleFunction( self._DisplayMessages, { self }, 0, RefreshInterval ) - self.DisplayFunction = SCHEDULER:New( self, self._DisplayMessages, {}, 0, RefreshInterval ) - - return self -end - ---- This function is called automatically by the MESSAGEQUEUE scheduler. -function MESSAGEQUEUE:_DisplayMessages() - - -- First we display all messages that a coalition needs to receive... Also those who are not in a client (CA module clients...). - for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do - for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do - if MessageData.MessageSent == false then - --trigger.action.outTextForCoalition( CoalitionSideID, MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) - MessageData.MessageSent = true - end - local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() - if MessageTimeLeft <= 0 then - MessageData = nil - end - end - end - - -- Then we send the messages for each individual client, but also to be included are those Coalition messages for the Clients who belong to a coalition. - -- Because the Client messages will overwrite the Coalition messages (for that Client). - for ClientGroupName, ClientGroupData in pairs( self.ClientGroups ) do - for MessageID, MessageData in pairs( ClientGroupData.Messages ) do - if MessageData.MessageGroup == false then - trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) - MessageData.MessageGroup = true - end - local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() - if MessageTimeLeft <= 0 then - MessageData = nil - end - end - - -- Now check if the Client also has messages that belong to the Coalition of the Client... - for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do - for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do - local CoalitionGroup = Group.getByName( ClientGroupName ) - if CoalitionGroup and CoalitionGroup:getCoalition() == CoalitionSideID then - if MessageData.MessageCoalition == false then - trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) - MessageData.MessageCoalition = true - end - end - local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() - if MessageTimeLeft <= 0 then - MessageData = nil - end - end - end - end - - return true -end - ---- The _MessageQueue object is created when the MESSAGE class module is loaded. ---_MessageQueue = MESSAGEQUEUE:New( 0.5 ) - ---- Stages within a @{TASK} within a @{MISSION}. All of the STAGE functionality is considered internally administered and not to be used by any Mission designer. --- @module STAGE --- @author Flightcontrol - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Mission" ) -Include.File( "Client" ) -Include.File( "Task" ) - ---- The STAGE class --- @type -STAGE = { - ClassName = "STAGE", - MSG = { ID = "None", TIME = 10 }, - FREQUENCY = { NONE = 0, ONCE = 1, REPEAT = -1 }, - - Name = "NoStage", - StageType = '', - WaitTime = 1, - Frequency = 1, - MessageCount = 0, - MessageInterval = 15, - MessageShown = {}, - MessageShow = false, - MessageFlash = false -} - - -function STAGE:New() - local self = BASE:Inherit( self, BASE:New() ) - self:F() - return self -end - -function STAGE:Execute( Mission, Client, Task ) - - local Valid = true - - return Valid -end - -function STAGE:Executing( Mission, Client, Task ) - -end - -function STAGE:Validate( Mission, Client, Task ) - local Valid = true - - return Valid -end - - -STAGEBRIEF = { - ClassName = "BRIEF", - MSG = { ID = "Brief", TIME = 1 }, - Name = "Brief", - StageBriefingTime = 0, - StageBriefingDuration = 1 -} - -function STAGEBRIEF:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - ---- Execute --- @param #STAGEBRIEF self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task --- @return #boolean -function STAGEBRIEF:Execute( Mission, Client, Task ) - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - self:F() - Client:ShowMissionBriefing( Mission.MissionBriefing ) - self.StageBriefingTime = timer.getTime() - return Valid -end - -function STAGEBRIEF:Validate( Mission, Client, Task ) - local Valid = STAGE:Validate( Mission, Client, Task ) - self:T() - - if timer.getTime() - self.StageBriefingTime <= self.StageBriefingDuration then - return 0 - else - self.StageBriefingTime = timer.getTime() - return 1 - end - -end - - -STAGESTART = { - ClassName = "START", - MSG = { ID = "Start", TIME = 1 }, - Name = "Start", - StageStartTime = 0, - StageStartDuration = 1 -} - -function STAGESTART:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGESTART:Execute( Mission, Client, Task ) - self:F() - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - if Task.TaskBriefing then - Client:Message( Task.TaskBriefing, 30, Mission.Name .. "/Stage", "Command" ) - else - Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, Mission.Name .. "/Stage", "Command" ) - end - self.StageStartTime = timer.getTime() - return Valid -end - -function STAGESTART:Validate( Mission, Client, Task ) - self:F() - local Valid = STAGE:Validate( Mission, Client, Task ) - - if timer.getTime() - self.StageStartTime <= self.StageStartDuration then - return 0 - else - self.StageStartTime = timer.getTime() - return 1 - end - - return 1 - -end - -STAGE_CARGO_LOAD = { - ClassName = "STAGE_CARGO_LOAD" -} - -function STAGE_CARGO_LOAD:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGE_CARGO_LOAD:Execute( Mission, Client, Task ) - self:F() - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - - for LoadCargoID, LoadCargo in pairs( Task.Cargos.LoadCargos ) do - LoadCargo:Load( Client ) - end - - if Mission.MissionReportFlash and Client:IsTransport() then - Client:ShowCargo() - end - - return Valid -end - -function STAGE_CARGO_LOAD:Validate( Mission, Client, Task ) - self:F() - local Valid = STAGE:Validate( Mission, Client, Task ) - - return 1 -end - - -STAGE_CARGO_INIT = { - ClassName = "STAGE_CARGO_INIT" -} - -function STAGE_CARGO_INIT:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGE_CARGO_INIT:Execute( Mission, Client, Task ) - self:F() - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - - for InitLandingZoneID, InitLandingZone in pairs( Task.LandingZones.LandingZones ) do - self:T( InitLandingZone ) - InitLandingZone:Spawn() - end - - - self:T( Task.Cargos.InitCargos ) - for InitCargoID, InitCargoData in pairs( Task.Cargos.InitCargos ) do - self:T( { InitCargoData } ) - InitCargoData:Spawn( Client ) - end - - return Valid -end - - -function STAGE_CARGO_INIT:Validate( Mission, Client, Task ) - self:F() - local Valid = STAGE:Validate( Mission, Client, Task ) - - return 1 -end - - - -STAGEROUTE = { - ClassName = "STAGEROUTE", - MSG = { ID = "Route", TIME = 5 }, - Frequency = STAGE.FREQUENCY.REPEAT, - Name = "Route" -} - -function STAGEROUTE:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - self.MessageSwitch = true - return self -end - - ---- Execute the routing. --- @param #STAGEROUTE self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGEROUTE:Execute( Mission, Client, Task ) - self:F() - local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) - - local RouteMessage = "Fly to: " - self:T( Task.LandingZones ) - for LandingZoneID, LandingZoneName in pairs( Task.LandingZones.LandingZoneNames ) do - RouteMessage = RouteMessage .. "\n " .. LandingZoneName .. ' at ' .. routines.getBRStringZone( { zone = LandingZoneName, ref = Client:GetClientGroupDCSUnit():getPoint(), true, true } ) .. ' km.' - end - - if Client:IsMultiSeated() then - Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot", 20 ) - else - Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Command", 20 ) - end - - - if Mission.MissionReportFlash and Client:IsTransport() then - Client:ShowCargo() - end - - return Valid -end - -function STAGEROUTE:Validate( Mission, Client, Task ) - self:F() - local Valid = STAGE:Validate( Mission, Client, Task ) - - -- check if the Client is in the landing zone - self:T( Task.LandingZones.LandingZoneNames ) - Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) - - if Task.CurrentLandingZoneName then - - Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone - Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] - - if Task.CurrentCargoZone then - if not Task.Signalled then - Task.Signalled = Task.CurrentCargoZone:Signal() - end - end - - self:T( 1 ) - return 1 - end - - self:T( 0 ) - return 0 -end - - - -STAGELANDING = { - ClassName = "STAGELANDING", - MSG = { ID = "Landing", TIME = 10 }, - Name = "Landing", - Signalled = false -} - -function STAGELANDING:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - ---- Execute the landing coordination. --- @param #STAGELANDING self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGELANDING:Execute( Mission, Client, Task ) - self:F() - - if Client:IsMultiSeated() then - Client:Message( "We have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Co-Pilot", 10 ) - else - Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Command", 10 ) - end - - Task.HostUnit = Task.CurrentCargoZone:GetHostUnit() - - self:T( { Task.HostUnit } ) - - if Task.HostUnit then - - Task.HostUnitName = Task.HostUnit:GetPrefix() - Task.HostUnitTypeName = Task.HostUnit:GetTypeName() - - local HostMessage = "" - Task.CargoNames = "" - - local IsFirst = true - - for CargoID, Cargo in pairs( CARGOS ) do - if Cargo.CargoType == Task.CargoType then - - if Cargo:IsLandingRequired() then - self:T( "Task for cargo " .. Cargo.CargoType .. " requires landing.") - Task.IsLandingRequired = true - end - - if Cargo:IsSlingLoad() then - self:T( "Task for cargo " .. Cargo.CargoType .. " is a slingload.") - Task.IsSlingLoad = true - end - - if IsFirst then - IsFirst = false - Task.CargoNames = Task.CargoNames .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" - else - Task.CargoNames = Task.CargoNames .. "; " .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" - end - end - end - - if Task.IsLandingRequired then - HostMessage = "Land the helicopter to " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." - else - HostMessage = "Use the Radio menu and F6 to find the cargo, then fly or land near the cargo and " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." - end - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Host, Host, 10 ) - - end -end - -function STAGELANDING:Validate( Mission, Client, Task ) - self:F() - - Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) - if Task.CurrentLandingZoneName then - - -- Client is in de landing zone. - self:T( Task.CurrentLandingZoneName ) - - Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone - Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] - - if Task.CurrentCargoZone then - if not Task.Signalled then - Task.Signalled = Task.CurrentCargoZone:Signal() - end - end - else - if Task.CurrentLandingZone then - Task.CurrentLandingZone = nil - end - if Task.CurrentCargoZone then - Task.CurrentCargoZone = nil - end - Task.Signalled = false - Task:RemoveCargoMenus( Client ) - self:T( -1 ) - return -1 - end - - - local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() - local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 - - local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() - local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) - local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight - - self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) - if Task.IsLandingRequired and not Client:GetClientGroupDCSUnit():inAir() then - self:T( 1 ) - Task.IsInAirTestRequired = true - return 1 - end - - self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) - if Task.IsLandingRequired and DCSUnitVelocity <= 0.05 and DCSUnitHeight <= Task.CurrentCargoZone.SignalHeight then - self:T( 1 ) - Task.IsInAirTestRequired = false - return 1 - end - - self:T( 0 ) - return 0 -end - -STAGELANDED = { - ClassName = "STAGELANDED", - MSG = { ID = "Land", TIME = 10 }, - Name = "Landed", - MenusAdded = false -} - -function STAGELANDED:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGELANDED:Execute( Mission, Client, Task ) - self:F() - - if Task.IsLandingRequired then - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.', - self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC" .. Host, Host ) - - if not self.MenusAdded then - Task.Cargo = nil - Task:RemoveCargoMenus( Client ) - Task:AddCargoMenus( Client, CARGOS, 250 ) - end - end -end - - - -function STAGELANDED:Validate( Mission, Client, Task ) - self:F() - - if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then - self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." ) - Task.Signalled = false - Task:RemoveCargoMenus( Client ) - self:T( -2 ) - return -2 - end - - local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() - local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 - - local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() - local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) - local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight - - self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) - if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then - self:T( "Client went back in the air. Go back to stage Landing." ) - self:T( -1 ) - return -1 - end - - self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) - if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then - self:T( "It seems the Client went back in the air and over the boundary limits. Go back to stage Landing." ) - self:T( -1 ) - return -1 - end - - -- Wait until cargo is selected from the menu. - if Task.IsLandingRequired then - if not Task.Cargo then - self:T( 0 ) - return 0 - end - end - - self:T( 1 ) - return 1 -end - -STAGEUNLOAD = { - ClassName = "STAGEUNLOAD", - MSG = { ID = "Unload", TIME = 10 }, - Name = "Unload" -} - -function STAGEUNLOAD:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - ---- Coordinate UnLoading --- @param #STAGEUNLOAD self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGEUNLOAD:Execute( Mission, Client, Task ) - self:F() - - if Client:IsMultiSeated() then - Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', - self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Co-Pilot" ) - else - Client:Message( 'You are unloading the ' .. Task.CargoType .. ' ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', - self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Command" ) - end - Task:RemoveCargoMenus( Client ) -end - -function STAGEUNLOAD:Executing( Mission, Client, Task ) - self:F() - env.info( 'STAGEUNLOAD:Executing() Task.Cargo.CargoName = ' .. Task.Cargo.CargoName ) - - local TargetZoneName - - if Task.TargetZoneName then - TargetZoneName = Task.TargetZoneName - else - TargetZoneName = Task.CurrentLandingZoneName - end - - if Task.Cargo:UnLoad( Client, TargetZoneName ) then - Task.ExecuteStage = _TransportExecuteStage.SUCCESS - if Mission.MissionReportFlash then - Client:ShowCargo() - end - end -end - ---- Validate UnLoading --- @param #STAGEUNLOAD self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGEUNLOAD:Validate( Mission, Client, Task ) - self:F() - env.info( 'STAGEUNLOAD:Validate()' ) - - if routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then - else - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task:RemoveCargoMenus( Client ) - if Client:IsMultiSeated() then - Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', - _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) - else - Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', - _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) - end - return 1 - end - - if not Client:GetClientGroupDCSUnit():inAir() then - else - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task:RemoveCargoMenus( Client ) - if Client:IsMultiSeated() then - Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', - _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) - else - Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', - _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) - end - return 1 - end - - if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then - if Client:IsMultiSeated() then - Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Co-Pilot" ) - else - Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Command" ) - end - Task:RemoveCargoMenus( Client ) - Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) -- We set the cargo as one more goal completed in the mission. - return 1 - end - - return 1 -end - -STAGELOAD = { - ClassName = "STAGELOAD", - MSG = { ID = "Load", TIME = 10 }, - Name = "Load" -} - -function STAGELOAD:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - -function STAGELOAD:Execute( Mission, Client, Task ) - self:F() - - if not Task.IsSlingLoad then - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', - _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Host, Host ) - - -- Route the cargo to the Carrier - - Task.Cargo:OnBoard( Client, Task.CurrentCargoZone, Task.OnBoardSide ) - Task.ExecuteStage = _TransportExecuteStage.EXECUTING - else - Task.ExecuteStage = _TransportExecuteStage.EXECUTING - end -end - -function STAGELOAD:Executing( Mission, Client, Task ) - self:F() - - -- If the Cargo is ready to be loaded, load it into the Client. - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - if not Task.IsSlingLoad then - self:T( Task.Cargo.CargoName) - - if Task.Cargo:OnBoarded( Client, Task.CurrentCargoZone ) then - - -- Load the Cargo onto the Client - Task.Cargo:Load( Client ) - - -- Message to the pilot that cargo has been loaded. - Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.", - 20, Mission.Name .. "/STAGELANDING.LOADING1." .. Host, Host ) - Task.ExecuteStage = _TransportExecuteStage.SUCCESS - - Client:ShowCargo() - end - else - Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.", - _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Host, Host , 10 ) - for CargoID, Cargo in pairs( CARGOS ) do - self:T( "Cargo.CargoName = " .. Cargo.CargoName ) - - if Cargo:IsSlingLoad() then - local CargoStatic = StaticObject.getByName( Cargo.CargoStaticName ) - if CargoStatic then - self:T( "Cargo is found in the DCS simulator.") - local CargoStaticPosition = CargoStatic:getPosition().p - self:T( "Cargo Position x = " .. CargoStaticPosition.x .. ", y = " .. CargoStaticPosition.y .. ", z = " .. CargoStaticPosition.z ) - local CargoStaticHeight = routines.GetUnitHeight( CargoStatic ) - if CargoStaticHeight > 5 then - self:T( "Cargo is airborne.") - Cargo:StatusLoaded() - Task.Cargo = Cargo - Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.', - self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Host, Host ) - Task.ExecuteStage = _TransportExecuteStage.SUCCESS - break - end - else - self:T( "Cargo not found in the DCS simulator." ) - end - end - end - end - -end - -function STAGELOAD:Validate( Mission, Client, Task ) - self:F() - - self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName ) - - local Host = "Command" - if Task.HostUnitName then - Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" - else - if Client:IsMultiSeated() then - Host = "Co-Pilot" - end - end - - if not Task.IsSlingLoad then - if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then - Task:RemoveCargoMenus( Client ) - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task.CargoName = nil - Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) - self:T( -1 ) - return -1 - end - - local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() - local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 - - local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() - local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) - local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight - - self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) - if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then - Task:RemoveCargoMenus( Client ) - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task.CargoName = nil - Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) - self:T( -1 ) - return -1 - end - - self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) - if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then - Task:RemoveCargoMenus( Client ) - Task.ExecuteStage = _TransportExecuteStage.FAILED - Task.CargoName = nil - Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) - self:T( -1 ) - return -1 - end - - if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then - Task:RemoveCargoMenus( Client ) - Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Host, Host ) - Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) - self:T( 1 ) - return 1 - end - - else - if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then - CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName ) - if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then - Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.", - self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Host, Host ) - Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 ) - self:T( 1 ) - return 1 - end - end - - end - - - self:T( 0 ) - return 0 -end - - -STAGEDONE = { - ClassName = "STAGEDONE", - MSG = { ID = "Done", TIME = 10 }, - Name = "Done" -} - -function STAGEDONE:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'AI' - return self -end - -function STAGEDONE:Execute( Mission, Client, Task ) - self:F() - -end - -function STAGEDONE:Validate( Mission, Client, Task ) - self:F() - - Task:Done() - - return 0 -end - -STAGEARRIVE = { - ClassName = "STAGEARRIVE", - MSG = { ID = "Arrive", TIME = 10 }, - Name = "Arrive" -} - -function STAGEARRIVE:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'CLIENT' - return self -end - - ---- Execute Arrival --- @param #STAGEARRIVE self --- @param Mission#MISSION Mission --- @param Client#CLIENT Client --- @param Task#TASK Task -function STAGEARRIVE:Execute( Mission, Client, Task ) - self:F() - - if Client:IsMultiSeated() then - Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Co-Pilot" ) - else - Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Command" ) - end - -end - -function STAGEARRIVE:Validate( Mission, Client, Task ) - self:F() - - Task.CurrentLandingZoneID = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones ) - if ( Task.CurrentLandingZoneID ) then - else - return -1 - end - - return 1 -end - -STAGEGROUPSDESTROYED = { - ClassName = "STAGEGROUPSDESTROYED", - DestroyGroupSize = -1, - Frequency = STAGE.FREQUENCY.REPEAT, - MSG = { ID = "DestroyGroup", TIME = 10 }, - Name = "GroupsDestroyed" -} - -function STAGEGROUPSDESTROYED:New() - local self = BASE:Inherit( self, STAGE:New() ) - self:F() - self.StageType = 'AI' - return self -end - ---function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) --- --- Client:Message( 'Task: Still ' .. DestroyGroupSize .. " of " .. Task.DestroyGroupCount .. " " .. Task.DestroyGroupType .. " to be destroyed!", self.MSG.TIME, Mission.Name .. "/Stage" ) --- ---end - -function STAGEGROUPSDESTROYED:Validate( Mission, Client, Task ) - self:F() - - if Task.MissionTask:IsGoalReached() then - return 1 - else - return 0 - end -end - -function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) - self:F() - self:T( { Task.ClassName, Task.Destroyed } ) - --env.info( 'Event Table Task = ' .. tostring(Task) ) - -end - - - - - - - - - - - - - ---[[ - _TransportStage: Defines the different stages of which of transport missions can be in. This table is internal and is used to control the sequence of messages, actions and flow. - - - _TransportStage.START - - _TransportStage.ROUTE - - _TransportStage.LAND - - _TransportStage.EXECUTE - - _TransportStage.DONE - - _TransportStage.REMOVE ---]] -_TransportStage = { - HOLD = "HOLD", - START = "START", - ROUTE = "ROUTE", - LANDING = "LANDING", - LANDED = "LANDED", - EXECUTING = "EXECUTING", - LOAD = "LOAD", - UNLOAD = "UNLOAD", - DONE = "DONE", - NEXT = "NEXT" -} - -_TransportStageMsgTime = { - HOLD = 10, - START = 60, - ROUTE = 5, - LANDING = 10, - LANDED = 30, - EXECUTING = 30, - LOAD = 30, - UNLOAD = 30, - DONE = 30, - NEXT = 0 -} - -_TransportStageTime = { - HOLD = 10, - START = 5, - ROUTE = 5, - LANDING = 1, - LANDED = 1, - EXECUTING = 5, - LOAD = 5, - UNLOAD = 5, - DONE = 1, - NEXT = 0 -} - -_TransportStageAction = { - REPEAT = -1, - NONE = 0, - ONCE = 1 -} ---- The TASK Classes define major end-to-end activities within a MISSION. The TASK Class is the Master Class to orchestrate these activities. From this class, many concrete TASK classes are inherited. --- @module TASK - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Mission" ) -Include.File( "Client" ) -Include.File( "Stage" ) - ---- The TASK class --- @type TASK --- @extends Base#BASE -TASK = { - - -- Defines the different signal types with a Task. - SIGNAL = { - COLOR = { - RED = { ID = 1, COLOR = trigger.smokeColor.Red, TEXT = "A red" }, - GREEN = { ID = 2, COLOR = trigger.smokeColor.Green, TEXT = "A green" }, - BLUE = { ID = 3, COLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, - WHITE = { ID = 4, COLOR = trigger.smokeColor.White, TEXT = "A white" }, - ORANGE = { ID = 5, COLOR = trigger.smokeColor.Orange, TEXT = "An orange" } - }, - TYPE = { - SMOKE = { ID = 1, TEXT = "smoke" }, - FLARE = { ID = 2, TEXT = "flare" } - } - }, - ClassName = "TASK", - Mission = {}, -- Owning mission of the Task - Name = '', - Stages = {}, - Stage = {}, - Cargos = { - InitCargos = {}, - LoadCargos = {} - }, - LandingZones = { - LandingZoneNames = {}, - LandingZones = {} - }, - ActiveStage = 0, - TaskDone = false, - TaskFailed = false, - GoalTasks = {} -} - ---- Instantiates a new TASK Base. Should never be used. Interface Class. --- @return TASK -function TASK:New() - local self = BASE:Inherit( self, BASE:New() ) - self:F() - - -- assign Task default values during construction - self.TaskBriefing = "Task: No Task." - self.Time = timer.getTime() - self.ExecuteStage = _TransportExecuteStage.NONE - - return self -end - -function TASK:SetStage( StageSequenceIncrement ) - self:F( { StageSequenceIncrement } ) - - local Valid = false - if StageSequenceIncrement ~= 0 then - self.ActiveStage = self.ActiveStage + StageSequenceIncrement - if 1 <= self.ActiveStage and self.ActiveStage <= #self.Stages then - self.Stage = self.Stages[self.ActiveStage] - self:T( { self.Stage.Name } ) - self.Frequency = self.Stage.Frequency - Valid = true - else - Valid = false - env.info( "TASK:SetStage() self.ActiveStage is smaller or larger than self.Stages array. self.ActiveStage = " .. self.ActiveStage ) - end - end - self.Time = timer.getTime() - return Valid -end - -function TASK:Init() - self:F() - self.ActiveStage = 0 - self:SetStage(1) - self.TaskDone = false - self.TaskFailed = false -end - - ---- Get progress of a TASK. --- @return string GoalsText -function TASK:GetGoalProgress() - self:F2() - - local GoalsText = "" - for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do - local Goals = self:GetGoalCompletion( GoalVerb ) - if Goals and Goals ~= "" then - Goals = '(' .. Goals .. ')' - else - Goals = '( - )' - end - GoalsText = GoalsText .. GoalVerb .. ': ' .. self:GetGoalCount(GoalVerb) .. ' goals ' .. Goals .. ' of ' .. self:GetGoalTotal(GoalVerb) .. ' goals completed (' .. self:GetGoalPercentage(GoalVerb) .. '%); ' - end - - if GoalsText == "" then - GoalsText = "( - )" - end - - return GoalsText -end - ---- Show progress of a TASK. --- @param MISSION Mission Group structure describing the Mission. --- @param CLIENT Client Group structure describing the Client. -function TASK:ShowGoalProgress( Mission, Client ) - self:F2() - - local GoalsText = "" - for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do - if Mission:IsCompleted() then - else - local Goals = self:GetGoalCompletion( GoalVerb ) - if Goals and Goals ~= "" then - else - Goals = "-" - end - GoalsText = GoalsText .. self:GetGoalProgress() - end - end - - if Mission.MissionReportFlash or Mission.MissionReportShow then - Client:Message( GoalsText, 10, "/TASKPROGRESS" .. self.ClassName, "Mission Command: Task Status", 30 ) - end -end - ---- Sets a TASK to status Done. -function TASK:Done() - self:F2() - self.TaskDone = true -end - ---- Returns if a TASK is done. --- @return bool -function TASK:IsDone() - self:F2( self.TaskDone ) - return self.TaskDone -end - ---- Sets a TASK to status failed. -function TASK:Failed() - self:F() - self.TaskFailed = true -end - ---- Returns if a TASk has failed. --- @return bool -function TASK:IsFailed() - self:F2( self.TaskFailed ) - return self.TaskFailed -end - -function TASK:Reset( Mission, Client ) - self:F2() - self.ExecuteStage = _TransportExecuteStage.NONE -end - ---- Returns the Goals of a TASK --- @return @table Goals -function TASK:GetGoals() - return self.GoalTasks -end - ---- Returns if a TASK has Goal(s). --- @param #TASK self --- @param #string GoalVerb is the name of the Goal of the TASK. --- @return bool -function TASK:Goal( GoalVerb ) - self:F2( { GoalVerb } ) - if not GoalVerb then - GoalVerb = self.GoalVerb - end - self:T2( {self.GoalTasks[GoalVerb] } ) - if self.GoalTasks[GoalVerb] and self.GoalTasks[GoalVerb].GoalTotal > 0 then - return true - else - return false - end -end - ---- Sets the total Goals to be achieved of the Goal Name --- @param number GoalTotal is the number of times the GoalVerb needs to be achieved. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. -function TASK:SetGoalTotal( GoalTotal, GoalVerb ) - self:F2( { GoalTotal, GoalVerb } ) - - if not GoalVerb then - GoalVerb = self.GoalVerb - end - self.GoalTasks[GoalVerb] = {} - self.GoalTasks[GoalVerb].Goals = {} - self.GoalTasks[GoalVerb].GoalTotal = GoalTotal - self.GoalTasks[GoalVerb].GoalCount = 0 - return self -end - ---- Gets the total of Goals to be achieved within the TASK of the GoalVerb. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. -function TASK:GetGoalTotal( GoalVerb ) - self:F2( { GoalVerb } ) - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb ) then - return self.GoalTasks[GoalVerb].GoalTotal - else - return 0 - end -end - ---- Sets the total of Goals currently achieved within the TASK of the GoalVerb. --- @param number GoalCount is the total number of Goals achieved within the TASK. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return TASK -function TASK:SetGoalCount( GoalCount, GoalVerb ) - self:F2() - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb) then - self.GoalTasks[GoalVerb].GoalCount = GoalCount - end - return self -end - ---- Increments the total of Goals currently achieved within the TASK of the GoalVerb, with the given GoalCountIncrease. --- @param number GoalCountIncrease is the number of new Goals achieved within the TASK. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return TASK -function TASK:IncreaseGoalCount( GoalCountIncrease, GoalVerb ) - self:F2( { GoalCountIncrease, GoalVerb } ) - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb) then - self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalCountIncrease - end - return self -end - ---- Gets the total of Goals currently achieved within the TASK of the GoalVerb. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return TASK -function TASK:GetGoalCount( GoalVerb ) - self:F2() - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb ) then - return self.GoalTasks[GoalVerb].GoalCount - else - return 0 - end -end - ---- Gets the percentage of Goals currently achieved within the TASK of the GoalVerb. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return TASK -function TASK:GetGoalPercentage( GoalVerb ) - self:F2() - if not GoalVerb then - GoalVerb = self.GoalVerb - end - if self:Goal( GoalVerb ) then - return math.floor( self:GetGoalCount( GoalVerb ) / self:GetGoalTotal( GoalVerb ) * 100 + .5 ) - else - return 100 - end -end - ---- Returns if all the Goals of the TASK were achieved. --- @return bool -function TASK:IsGoalReached() - self:F2() - - local GoalReached = true - - for GoalVerb, Goals in pairs( self.GoalTasks ) do - self:T2( { "GoalVerb", GoalVerb } ) - if self:Goal( GoalVerb ) then - local GoalToDo = self:GetGoalTotal( GoalVerb ) - self:GetGoalCount( GoalVerb ) - self:T2( "GoalToDo = " .. GoalToDo ) - if GoalToDo <= 0 then - else - GoalReached = false - break - end - else - break - end - end - - self:T( { GoalReached, self.GoalTasks } ) - return GoalReached -end - ---- Adds an Additional Goal for the TASK to be achieved. --- @param string GoalVerb is the name of the Goal of the TASK. --- @param string GoalTask is a text describing the Goal of the TASK to be achieved. --- @param number GoalIncrease is a number by which the Goal achievement is increasing. -function TASK:AddGoalCompletion( GoalVerb, GoalTask, GoalIncrease ) - self:F2( { GoalVerb, GoalTask, GoalIncrease } ) - - if self:Goal( GoalVerb ) then - self.GoalTasks[GoalVerb].Goals[#self.GoalTasks[GoalVerb].Goals+1] = GoalTask - self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalIncrease - end - return self -end - ---- Returns if the additional Goal for the TASK was completed. --- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. --- @return string Goals -function TASK:GetGoalCompletion( GoalVerb ) - self:F2( { GoalVerb } ) - - if self:Goal( GoalVerb ) then - local Goals = "" - for GoalID, GoalName in pairs( self.GoalTasks[GoalVerb].Goals ) do Goals = Goals .. GoalName .. " + " end - return Goals:gsub(" + $", ""), self.GoalTasks[GoalVerb].GoalCount - end -end - -function TASK.MenuAction( Parameter ) - Parameter.ReferenceTask.ExecuteStage = _TransportExecuteStage.EXECUTING - Parameter.ReferenceTask.Cargo = Parameter.CargoTask -end - -function TASK:StageExecute() - self:F() - - local Execute = false - - if self.Frequency == STAGE.FREQUENCY.REPEAT then - Execute = true - elseif self.Frequency == STAGE.FREQUENCY.NONE then - Execute = false - elseif self.Frequency >= 0 then - Execute = true - self.Frequency = self.Frequency - 1 - end - - return Execute - -end - ---- Work function to set signal events within a TASK. -function TASK:AddSignal( SignalUnitNames, SignalType, SignalColor, SignalHeight ) - self:F() - - local Valid = true - - if Valid then - if type( SignalUnitNames ) == "table" then - self.LandingZoneSignalUnitNames = SignalUnitNames - else - self.LandingZoneSignalUnitNames = { SignalUnitNames } - end - self.LandingZoneSignalType = SignalType - self.LandingZoneSignalColor = SignalColor - self.Signalled = false - if SignalHeight ~= nil then - self.LandingZoneSignalHeight = SignalHeight - else - self.LandingZoneSignalHeight = 0 - end - - if self.TaskBriefing then - self.TaskBriefing = self.TaskBriefing .. " " .. SignalColor.TEXT .. " " .. SignalType.TEXT .. " will be fired when entering the landing zone." - end - end - - return Valid -end - ---- When the CLIENT is approaching the landing zone, a RED SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeRed( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.RED, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a GREEN SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeGreen( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a BLUE SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeBlue( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a WHITE SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeWhite( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, an ORANGE SMOKE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddSmokeOrange( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a RED FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareRed( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.RED, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a GREEN FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareGreen( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a BLUE FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareBlue( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, a WHITE FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareWhite( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) -end - ---- When the CLIENT is approaching the landing zone, an ORANGE FLARE will be fired by an optional SignalUnitNames. --- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. --- @param number SignalHeight Altitude that the Signal should be fired... -function TASK:AddFlareOrange( SignalUnitNames, SignalHeight ) - self:F() - self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) -end ---- A GOHOMETASK orchestrates the travel back to the home base, which is a specific zone defined within the ME. --- @module GOHOMETASK - -Include.File("Task") - ---- The GOHOMETASK class --- @type -GOHOMETASK = { - ClassName = "GOHOMETASK", -} - ---- Creates a new GOHOMETASK. --- @param table{string,...}|string LandingZones Table of Landing Zone names where Home(s) are located. --- @return GOHOMETASK -function GOHOMETASK:New( LandingZones ) - local self = BASE:Inherit( self, TASK:New() ) - self:F( { LandingZones } ) - local Valid = true - - Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) - - if Valid then - self.Name = 'Fly Home' - self.TaskBriefing = "Task: Fly back to your home base. Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to your home base." - if type( LandingZones ) == "table" then - self.LandingZones = LandingZones - else - self.LandingZones = { LandingZones } - end - self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end ---- A DESTROYBASETASK will monitor the destruction of Groups and Units. This is a BASE class, other classes are derived from this class. --- @module DESTROYBASETASK --- @see DESTROYGROUPSTASK --- @see DESTROYUNITTYPESTASK --- @see DESTROY_RADARS_TASK - -Include.File("Task") - ---- The DESTROYBASETASK class --- @type DESTROYBASETASK -DESTROYBASETASK = { - ClassName = "DESTROYBASETASK", - Destroyed = 0, - GoalVerb = "Destroy", - DestroyPercentage = 100, -} - ---- Creates a new DESTROYBASETASK. --- @param #DESTROYBASETASK self --- @param #string DestroyGroupType Text describing the group to be destroyed. f.e. "Radar Installations", "Ships", "Vehicles", "Command Centers". --- @param #string DestroyUnitType Text describing the unit types to be destroyed. f.e. "SA-6", "Row Boats", "Tanks", "Tents". --- @param #list<#string> DestroyGroupPrefixes Table of Prefixes of the Groups to be destroyed before task is completed. --- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. --- @return DESTROYBASETASK -function DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupPrefixes, DestroyPercentage ) - local self = BASE:Inherit( self, TASK:New() ) - self:F() - - self.Name = 'Destroy' - self.Destroyed = 0 - self.DestroyGroupPrefixes = DestroyGroupPrefixes - self.DestroyGroupType = DestroyGroupType - self.DestroyUnitType = DestroyUnitType - if DestroyPercentage then - self.DestroyPercentage = DestroyPercentage - end - self.TaskBriefing = "Task: Destroy " .. DestroyGroupType .. "." - self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEGROUPSDESTROYED:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - - return self -end - ---- Handle the S_EVENT_DEAD events to validate the destruction of units for the task monitoring. --- @param #DESTROYBASETASK self --- @param Event#EVENTDATA Event structure of MOOSE. -function DESTROYBASETASK:EventDead( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - local DestroyUnit = Event.IniDCSUnit - local DestroyUnitName = Event.IniDCSUnitName - local DestroyGroup = Event.IniDCSGroup - local DestroyGroupName = Event.IniDCSGroupName - - --TODO: I need to fix here if 2 groups in the mission have a similar name with GroupPrefix equal, then i should differentiate for which group the goal was reached! - --I may need to test if for the goalverb that group goal was reached or something. Need to think about it a bit more ... - local UnitsDestroyed = 0 - for DestroyGroupPrefixID, DestroyGroupPrefix in pairs( self.DestroyGroupPrefixes ) do - self:T( DestroyGroupPrefix ) - if string.find( DestroyGroupName, DestroyGroupPrefix, 1, true ) then - self:T( BASE:Inherited(self).ClassName ) - UnitsDestroyed = self:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:T( UnitsDestroyed ) - end - end - - self:T( { UnitsDestroyed } ) - self:IncreaseGoalCount( UnitsDestroyed, self.GoalVerb ) - end - -end - ---- Validate task completeness of DESTROYBASETASK. --- @param DestroyGroup Group structure describing the group to be evaluated. --- @param DestroyUnit Unit structure describing the Unit to be evaluated. -function DESTROYBASETASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:F() - - return 0 -end ---- DESTROYGROUPSTASK --- @module DESTROYGROUPSTASK - -Include.File("DestroyBaseTask") - ---- The DESTROYGROUPSTASK class --- @type -DESTROYGROUPSTASK = { - ClassName = "DESTROYGROUPSTASK", - GoalVerb = "Destroy Groups", -} - ---- Creates a new DESTROYGROUPSTASK. --- @param #DESTROYGROUPSTASK self --- @param #string DestroyGroupType String describing the group to be destroyed. --- @param #string DestroyUnitType String describing the unit to be destroyed. --- @param #list<#string> DestroyGroupNames Table of string containing the name of the groups to be destroyed before task is completed. --- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. ----@return DESTROYGROUPSTASK -function DESTROYGROUPSTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) - local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) ) - self:F() - - self.Name = 'Destroy Groups' - self.GoalVerb = "Destroy " .. DestroyGroupType - - _EVENTDISPATCHER:OnDead( self.EventDead , self ) - _EVENTDISPATCHER:OnCrash( self.EventDead , self ) - - return self -end - ---- Report Goal Progress. --- @param #DESTROYGROUPSTASK self --- @param DCSGroup#Group DestroyGroup Group structure describing the group to be evaluated. --- @param DCSUnit#Unit DestroyUnit Unit structure describing the Unit to be evaluated. --- @return #number The DestroyCount reflecting the amount of units destroyed within the group. -function DESTROYGROUPSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:F( { DestroyGroup, DestroyUnit, self.DestroyPercentage } ) - - local DestroyGroupSize = DestroyGroup:getSize() - 1 -- When a DEAD event occurs, the getSize is still one larger than the destroyed unit. - local DestroyGroupInitialSize = DestroyGroup:getInitialSize() - self:T( { DestroyGroupSize, DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) } ) - - local DestroyCount = 0 - if DestroyGroup then - if DestroyGroupSize <= DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) then - DestroyCount = 1 - end - else - DestroyCount = 1 - end - - self:T( DestroyCount ) - - return DestroyCount -end ---- Task class to destroy radar installations. --- @module DESTROYRADARSTASK - -Include.File("DestroyBaseTask") - ---- The DESTROYRADARS class --- @type -DESTROYRADARSTASK = { - ClassName = "DESTROYRADARSTASK", - GoalVerb = "Destroy Radars" -} - ---- Creates a new DESTROYRADARSTASK. --- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. --- @return DESTROYRADARSTASK -function DESTROYRADARSTASK:New( DestroyGroupNames ) - local self = BASE:Inherit( self, DESTROYGROUPSTASK:New( 'radar installations', 'radars', DestroyGroupNames ) ) - self:F() - - self.Name = 'Destroy Radars' - - _EVENTDISPATCHER:OnDead( self.EventDead , self ) - - return self -end - ---- Report Goal Progress. --- @param Group DestroyGroup Group structure describing the group to be evaluated. --- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. -function DESTROYRADARSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:F( { DestroyGroup, DestroyUnit } ) - - local DestroyCount = 0 - if DestroyUnit and DestroyUnit:hasSensors( Unit.SensorType.RADAR, Unit.RadarType.AS ) then - if DestroyUnit and DestroyUnit:getLife() <= 1.0 then - self:T( 'Destroyed a radar' ) - DestroyCount = 1 - end - end - return DestroyCount -end ---- Set TASK to destroy certain unit types. --- @module DESTROYUNITTYPESTASK - -Include.File("DestroyBaseTask") - ---- The DESTROYUNITTYPESTASK class --- @type -DESTROYUNITTYPESTASK = { - ClassName = "DESTROYUNITTYPESTASK", - GoalVerb = "Destroy", -} - ---- Creates a new DESTROYUNITTYPESTASK. --- @param string DestroyGroupType String describing the group to be destroyed. f.e. "Radar Installations", "Fleet", "Batallion", "Command Centers". --- @param string DestroyUnitType String describing the unit to be destroyed. f.e. "radars", "ships", "tanks", "centers". --- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. --- @param string DestroyUnitTypes Table of string containing the type names of the units to achieve mission success. --- @return DESTROYUNITTYPESTASK -function DESTROYUNITTYPESTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes ) - local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames ) ) - self:F( { DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes } ) - - if type(DestroyUnitTypes) == 'table' then - self.DestroyUnitTypes = DestroyUnitTypes - else - self.DestroyUnitTypes = { DestroyUnitTypes } - end - - self.Name = 'Destroy Unit Types' - self.GoalVerb = "Destroy " .. DestroyGroupType - - _EVENTDISPATCHER:OnDead( self.EventDead , self ) - - return self -end - ---- Report Goal Progress. --- @param Group DestroyGroup Group structure describing the group to be evaluated. --- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. -function DESTROYUNITTYPESTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) - self:F( { DestroyGroup, DestroyUnit } ) - - local DestroyCount = 0 - for UnitTypeID, UnitType in pairs( self.DestroyUnitTypes ) do - if DestroyUnit and DestroyUnit:getTypeName() == UnitType then - if DestroyUnit and DestroyUnit:getLife() <= 1.0 then - DestroyCount = DestroyCount + 1 - end - end - end - return DestroyCount -end ---- A PICKUPTASK orchestrates the loading of CARGO at a specific landing zone. --- @module PICKUPTASK --- @parent TASK - -Include.File("Task") -Include.File("Cargo") - ---- The PICKUPTASK class --- @type -PICKUPTASK = { - ClassName = "PICKUPTASK", - TEXT = { "Pick-Up", "picked-up", "loaded" }, - GoalVerb = "Pick-Up" -} - ---- Creates a new PICKUPTASK. --- @param table{string,...}|string LandingZones Table of Zone names where Cargo is to be loaded. --- @param CARGO_TYPE CargoType Type of the Cargo. The type must be of the following Enumeration:.. --- @param number OnBoardSide Reflects from which side the cargo Group will be on-boarded on the Carrier. -function PICKUPTASK:New( CargoType, OnBoardSide ) - local self = BASE:Inherit( self, TASK:New() ) - self:F() - - -- self holds the inherited instance of the PICKUPTASK Class to the BASE class. - - local Valid = true - - if Valid then - self.Name = 'Pickup Cargo' - self.TaskBriefing = "Task: Fly to the indicated landing zones and pickup " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the pickup zone." - self.CargoType = CargoType - self.GoalVerb = CargoType .. " " .. self.GoalVerb - self.OnBoardSide = OnBoardSide - self.IsLandingRequired = true -- required to decide whether the client needs to land or not - self.IsSlingLoad = false -- Indicates whether the cargo is a sling load cargo - self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGELOAD:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end - -function PICKUPTASK:FromZone( LandingZone ) - self:F() - - self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName - self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone - - return self -end - -function PICKUPTASK:InitCargo( InitCargos ) - self:F( { InitCargos } ) - - if type( InitCargos ) == "table" then - self.Cargos.InitCargos = InitCargos - else - self.Cargos.InitCargos = { InitCargos } - end - - return self -end - -function PICKUPTASK:LoadCargo( LoadCargos ) - self:F( { LoadCargos } ) - - if type( LoadCargos ) == "table" then - self.Cargos.LoadCargos = LoadCargos - else - self.Cargos.LoadCargos = { LoadCargos } - end - - return self -end - -function PICKUPTASK:AddCargoMenus( Client, Cargos, TransportRadius ) - self:F() - - for CargoID, Cargo in pairs( Cargos ) do - - self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) - - -- If the Cargo has no status, allow the menu option. - if Cargo:IsStatusNone() or ( Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() ) then - - local MenuAdd = false - if Cargo:IsNear( Client, self.CurrentCargoZone ) then - MenuAdd = true - end - - if MenuAdd then - if Client._Menus[Cargo.CargoType] == nil then - Client._Menus[Cargo.CargoType] = {} - end - - if not Client._Menus[Cargo.CargoType].PickupMenu then - Client._Menus[Cargo.CargoType].PickupMenu = missionCommands.addSubMenuForGroup( - Client:GetClientGroupID(), - self.TEXT[1] .. " " .. Cargo.CargoType, - nil - ) - self:T( 'Added PickupMenu: ' .. self.TEXT[1] .. " " .. Cargo.CargoType ) - end - - if Client._Menus[Cargo.CargoType].PickupSubMenus == nil then - Client._Menus[Cargo.CargoType].PickupSubMenus = {} - end - - Client._Menus[Cargo.CargoType].PickupSubMenus[ #Client._Menus[Cargo.CargoType].PickupSubMenus + 1 ] = missionCommands.addCommandForGroup( - Client:GetClientGroupID(), - Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", - Client._Menus[Cargo.CargoType].PickupMenu, - self.MenuAction, - { ReferenceTask = self, CargoTask = Cargo } - ) - self:T( 'Added PickupSubMenu' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) - end - end - end - -end - -function PICKUPTASK:RemoveCargoMenus( Client ) - self:F() - - for MenuID, MenuData in pairs( Client._Menus ) do - for SubMenuID, SubMenuData in pairs( MenuData.PickupSubMenus ) do - missionCommands.removeItemForGroup( Client:GetClientGroupID(), SubMenuData ) - self:T( "Removed PickupSubMenu " ) - SubMenuData = nil - end - if MenuData.PickupMenu then - missionCommands.removeItemForGroup( Client:GetClientGroupID(), MenuData.PickupMenu ) - self:T( "Removed PickupMenu " ) - MenuData.PickupMenu = nil - end - end - - for CargoID, Cargo in pairs( CARGOS ) do - self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) - if Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() then - Cargo:StatusNone() - end - end - -end - - - -function PICKUPTASK:HasFailed( ClientDead ) - self:F() - - local TaskHasFailed = self.TaskFailed - return TaskHasFailed -end - ---- A DEPLOYTASK orchestrates the deployment of CARGO within a specific landing zone. --- @module DEPLOYTASK - -Include.File( "Task" ) - ---- A DeployTask --- @type DEPLOYTASK -DEPLOYTASK = { - ClassName = "DEPLOYTASK", - TEXT = { "Deploy", "deployed", "unloaded" }, - GoalVerb = "Deployment" -} - - ---- Creates a new DEPLOYTASK object, which models the sequence of STAGEs to unload a cargo. --- @function [parent=#DEPLOYTASK] New --- @param #string CargoType Type of the Cargo. --- @return #DEPLOYTASK The created DeployTask -function DEPLOYTASK:New( CargoType ) - local self = BASE:Inherit( self, TASK:New() ) - self:F() - - local Valid = true - - if Valid then - self.Name = 'Deploy Cargo' - self.TaskBriefing = "Fly to one of the indicated landing zones and deploy " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the deployment zone." - self.CargoType = CargoType - self.GoalVerb = CargoType .. " " .. self.GoalVerb - self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGEUNLOAD:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end - -function DEPLOYTASK:ToZone( LandingZone ) - self:F() - - self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName - self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone - - return self -end - - -function DEPLOYTASK:InitCargo( InitCargos ) - self:F( { InitCargos } ) - - if type( InitCargos ) == "table" then - self.Cargos.InitCargos = InitCargos - else - self.Cargos.InitCargos = { InitCargos } - end - - return self -end - - -function DEPLOYTASK:LoadCargo( LoadCargos ) - self:F( { LoadCargos } ) - - if type( LoadCargos ) == "table" then - self.Cargos.LoadCargos = LoadCargos - else - self.Cargos.LoadCargos = { LoadCargos } - end - - return self -end - - ---- When the cargo is unloaded, it will move to the target zone name. --- @param string TargetZoneName Name of the Zone to where the Cargo should move after unloading. -function DEPLOYTASK:SetCargoTargetZoneName( TargetZoneName ) - self:F() - - local Valid = true - - Valid = routines.ValidateString( TargetZoneName, "TargetZoneName", Valid ) - - if Valid then - self.TargetZoneName = TargetZoneName - end - - return Valid - -end - -function DEPLOYTASK:AddCargoMenus( Client, Cargos, TransportRadius ) - self:F() - - local ClientGroupID = Client:GetClientGroupID() - - self:T( ClientGroupID ) - - for CargoID, Cargo in pairs( Cargos ) do - - self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo.CargoWeight } ) - - if Cargo:IsStatusLoaded() and Client == Cargo:IsLoadedInClient() then - - if Client._Menus[Cargo.CargoType] == nil then - Client._Menus[Cargo.CargoType] = {} - end - - if not Client._Menus[Cargo.CargoType].DeployMenu then - Client._Menus[Cargo.CargoType].DeployMenu = missionCommands.addSubMenuForGroup( - ClientGroupID, - self.TEXT[1] .. " " .. Cargo.CargoType, - nil - ) - self:T( 'Added DeployMenu ' .. self.TEXT[1] ) - end - - if Client._Menus[Cargo.CargoType].DeploySubMenus == nil then - Client._Menus[Cargo.CargoType].DeploySubMenus = {} - end - - if Client._Menus[Cargo.CargoType].DeployMenu == nil then - self:T( 'deploymenu is nil' ) - end - - Client._Menus[Cargo.CargoType].DeploySubMenus[ #Client._Menus[Cargo.CargoType].DeploySubMenus + 1 ] = missionCommands.addCommandForGroup( - ClientGroupID, - Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", - Client._Menus[Cargo.CargoType].DeployMenu, - self.MenuAction, - { ReferenceTask = self, CargoTask = Cargo } - ) - self:T( 'Added DeploySubMenu ' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) - end - end - -end - -function DEPLOYTASK:RemoveCargoMenus( Client ) - self:F() - - local ClientGroupID = Client:GetClientGroupID() - self:T( ClientGroupID ) - - for MenuID, MenuData in pairs( Client._Menus ) do - if MenuData.DeploySubMenus ~= nil then - for SubMenuID, SubMenuData in pairs( MenuData.DeploySubMenus ) do - missionCommands.removeItemForGroup( ClientGroupID, SubMenuData ) - self:T( "Removed DeploySubMenu " ) - SubMenuData = nil - end - end - if MenuData.DeployMenu then - missionCommands.removeItemForGroup( ClientGroupID, MenuData.DeployMenu ) - self:T( "Removed DeployMenu " ) - MenuData.DeployMenu = nil - end - end - -end ---- A NOTASK is a dummy activity... But it will show a Mission Briefing... --- @module NOTASK - -Include.File("Task") - ---- The NOTASK class --- @type -NOTASK = { - ClassName = "NOTASK", -} - ---- Creates a new NOTASK. -function NOTASK:New() - local self = BASE:Inherit( self, TASK:New() ) - self:F() - - local Valid = true - - if Valid then - self.Name = 'Nothing' - self.TaskBriefing = "Task: Execute your mission." - self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end ---- A ROUTETASK orchestrates the travel to a specific zone defined within the ME. --- @module ROUTETASK - ---- The ROUTETASK class --- @type -ROUTETASK = { - ClassName = "ROUTETASK", - GoalVerb = "Route", -} - ---- Creates a new ROUTETASK. --- @param table{sring,...}|string LandingZones Table of Zone Names where the target is located. --- @param string TaskBriefing (optional) Defines a text describing the briefing of the task. --- @return ROUTETASK -function ROUTETASK:New( LandingZones, TaskBriefing ) - local self = BASE:Inherit( self, TASK:New() ) - self:F( { LandingZones, TaskBriefing } ) - - local Valid = true - - Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) - - if Valid then - self.Name = 'Route To Zone' - if TaskBriefing then - self.TaskBriefing = TaskBriefing .. " Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." - else - self.TaskBriefing = "Task: Fly to specified zone(s). Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." - end - if type( LandingZones ) == "table" then - self.LandingZones = LandingZones - else - self.LandingZones = { LandingZones } - end - self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } - self.SetStage( self, 1 ) - end - - return self -end - ---- A MISSION is the main owner of a Mission orchestration within MOOSE . The Mission framework orchestrates @{CLIENT}s, @{TASK}s, @{STAGE}s etc. --- A @{CLIENT} needs to be registered within the @{MISSION} through the function @{AddClient}. A @{TASK} needs to be registered within the @{MISSION} through the function @{AddTask}. --- @module Mission - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Client" ) -Include.File( "Task" ) - ---- The MISSION class --- @type MISSION --- @extends Base#BASE --- @field #MISSION.Clients _Clients --- @field #string MissionBriefing -MISSION = { - ClassName = "MISSION", - Name = "", - MissionStatus = "PENDING", - _Clients = {}, - _Tasks = {}, - _ActiveTasks = {}, - GoalFunction = nil, - MissionReportTrigger = 0, - MissionProgressTrigger = 0, - MissionReportShow = false, - MissionReportFlash = false, - MissionTimeInterval = 0, - MissionCoalition = "", - SUCCESS = 1, - FAILED = 2, - REPEAT = 3, - _GoalTasks = {} -} - ---- @type MISSION.Clients --- @list - -function MISSION:Meta() - - local self = BASE:Inherit( self, BASE:New() ) - self:F() - - return self -end - ---- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. --- @param string MissionName is the name of the mission. This name will be used to reference the status of each mission by the players. --- @param string MissionPriority is a string indicating the "priority" of the Mission. f.e. "Primary", "Secondary" or "First", "Second". It is free format and up to the Mission designer to choose. There are no rules behind this field. --- @param string MissionBriefing is a string indicating the mission briefing to be shown when a player joins a @{CLIENT}. --- @param string MissionCoalition is a string indicating the coalition or party to which this mission belongs to. It is free format and can be chosen freely by the mission designer. Note that this field is not to be confused with the coalition concept of the ME. Examples of a Mission Coalition could be "NATO", "CCCP", "Intruders", "Terrorists"... --- @return MISSION --- @usage --- -- Declare a few missions. --- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'Patriots', 'Primary', 'Our intelligence reports that 3 Patriot SAM defense batteries are located near Ruisi, Kvarhiti and Gori.', 'Russia' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'Package Delivery', 'Operational', 'In order to be in full control of the situation, we need you to deliver a very important package at a secret location. Fly undetected through the NATO defenses and deliver the secret package. The secret agent is located at waypoint 4.', 'Russia' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue General', 'Tactical', 'Our intelligence has received a remote signal behind Gori. We believe it is a very important Russian General that was captured by Georgia. Go out there and rescue him! Ensure you stay out of the battle zone, keep south. Waypoint 4 is the location of our Russian General.', 'Russia' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'SA-6 SAMs', 'Primary', 'Our intelligence reports that 3 SA-6 SAM defense batteries are located near Didmukha, Khetagurov and Berula. Eliminate the Russian SAMs.', 'NATO' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Sling Load', 'Operational', 'Fly to the cargo pickup zone at Dzegvi or Kaspi, and sling the cargo to Soganlug airbase.', 'NATO' ) --- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue secret agent', 'Tactical', 'In order to be in full control of the situation, we need you to rescue a secret agent from the woods behind enemy lines. Avoid the Russian defenses and rescue the agent. Keep south until Khasuri, and keep your eyes open for any SAM presence. The agent is located at waypoint 4 on your kneeboard.', 'NATO' ) -function MISSION:New( MissionName, MissionPriority, MissionBriefing, MissionCoalition ) - - self = MISSION:Meta() - self:T({ MissionName, MissionPriority, MissionBriefing, MissionCoalition }) - - local Valid = true - - Valid = routines.ValidateString( MissionName, "MissionName", Valid ) - Valid = routines.ValidateString( MissionPriority, "MissionPriority", Valid ) - Valid = routines.ValidateString( MissionBriefing, "MissionBriefing", Valid ) - Valid = routines.ValidateString( MissionCoalition, "MissionCoalition", Valid ) - - if Valid then - self.Name = MissionName - self.MissionPriority = MissionPriority - self.MissionBriefing = MissionBriefing - self.MissionCoalition = MissionCoalition - end - - return self -end - ---- Returns if a Mission has completed. --- @return bool -function MISSION:IsCompleted() - self:F() - return self.MissionStatus == "ACCOMPLISHED" -end - ---- Set a Mission to completed. -function MISSION:Completed() - self:F() - self.MissionStatus = "ACCOMPLISHED" - self:StatusToClients() -end - ---- Returns if a Mission is ongoing. --- treturn bool -function MISSION:IsOngoing() - self:F() - return self.MissionStatus == "ONGOING" -end - ---- Set a Mission to ongoing. -function MISSION:Ongoing() - self:F() - self.MissionStatus = "ONGOING" - --self:StatusToClients() -end - ---- Returns if a Mission is pending. --- treturn bool -function MISSION:IsPending() - self:F() - return self.MissionStatus == "PENDING" -end - ---- Set a Mission to pending. -function MISSION:Pending() - self:F() - self.MissionStatus = "PENDING" - self:StatusToClients() -end - ---- Returns if a Mission has failed. --- treturn bool -function MISSION:IsFailed() - self:F() - return self.MissionStatus == "FAILED" -end - ---- Set a Mission to failed. -function MISSION:Failed() - self:F() - self.MissionStatus = "FAILED" - self:StatusToClients() -end - ---- Send the status of the MISSION to all Clients. -function MISSION:StatusToClients() - self:F() - if self.MissionReportFlash then - for ClientID, Client in pairs( self._Clients ) do - Client:Message( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. '! ( ' .. self.MissionPriority .. ' mission ) ', 10, self.Name .. '/Status', "Mission Command: Mission Status") - end - end -end - ---- Handles the reporting. After certain time intervals, a MISSION report MESSAGE will be shown to All Players. -function MISSION:ReportTrigger() - self:F() - - if self.MissionReportShow == true then - self.MissionReportShow = false - return true - else - if self.MissionReportFlash == true then - if timer.getTime() >= self.MissionReportTrigger then - self.MissionReportTrigger = timer.getTime() + self.MissionTimeInterval - return true - else - return false - end - else - return false - end - end -end - ---- Report the status of all MISSIONs to all active Clients. -function MISSION:ReportToAll() - self:F() - - local AlivePlayers = '' - for ClientID, Client in pairs( self._Clients ) do - if Client:GetDCSGroup() then - if Client:GetClientGroupDCSUnit() then - if Client:GetClientGroupDCSUnit():getLife() > 0.0 then - if AlivePlayers == '' then - AlivePlayers = ' Players: ' .. Client:GetClientGroupDCSUnit():getPlayerName() - else - AlivePlayers = AlivePlayers .. ' / ' .. Client:GetClientGroupDCSUnit():getPlayerName() - end - end - end - end - end - local Tasks = self:GetTasks() - local TaskText = "" - for TaskID, TaskData in pairs( Tasks ) do - TaskText = TaskText .. " - Task " .. TaskID .. ": " .. TaskData.Name .. ": " .. TaskData:GetGoalProgress() .. "\n" - end - MESSAGE:New( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. ' ( ' .. self.MissionPriority .. ' mission )' .. AlivePlayers .. "\n" .. TaskText:gsub("\n$",""), "Mission Command: Mission Report", 10, self.Name .. '/Status'):ToAll() -end - - ---- Add a goal function to a MISSION. Goal functions are called when a @{TASK} within a mission has been completed. --- @param function GoalFunction is the function defined by the mission designer to evaluate whether a certain goal has been reached after a @{TASK} finishes within the @{MISSION}. A GoalFunction must accept 2 parameters: Mission, Client, which contains the current MISSION object and the current CLIENT object respectively. --- @usage --- PatriotActivation = { --- { "US SAM Patriot Zerti", false }, --- { "US SAM Patriot Zegduleti", false }, --- { "US SAM Patriot Gvleti", false } --- } --- --- function DeployPatriotTroopsGoal( Mission, Client ) --- --- --- -- Check if the cargo is all deployed for mission success. --- for CargoID, CargoData in pairs( Mission._Cargos ) do --- if Group.getByName( CargoData.CargoGroupName ) then --- CargoGroup = Group.getByName( CargoData.CargoGroupName ) --- if CargoGroup then --- -- Check if the cargo is ready to activate --- CurrentLandingZoneID = routines.IsUnitInZones( CargoGroup:getUnits()[1], Mission:GetTask( 2 ).LandingZones ) -- The second task is the Deploytask to measure mission success upon --- if CurrentLandingZoneID then --- if PatriotActivation[CurrentLandingZoneID][2] == false then --- -- Now check if this is a new Mission Task to be completed... --- trigger.action.setGroupAIOn( Group.getByName( PatriotActivation[CurrentLandingZoneID][1] ) ) --- PatriotActivation[CurrentLandingZoneID][2] = true --- MessageToBlue( "Mission Command: Message to all airborne units! The " .. PatriotActivation[CurrentLandingZoneID][1] .. " is armed. Our air defenses are now stronger.", 60, "BLUE/PatriotDefense" ) --- MessageToRed( "Mission Command: Our satellite systems are detecting additional NATO air defenses. To all airborne units: Take care!!!", 60, "RED/PatriotDefense" ) --- Mission:GetTask( 2 ):AddGoalCompletion( "Patriots activated", PatriotActivation[CurrentLandingZoneID][1], 1 ) -- Register Patriot activation as part of mission goal. --- end --- end --- end --- end --- end --- end --- --- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) --- Mission:AddGoalFunction( DeployPatriotTroopsGoal ) -function MISSION:AddGoalFunction( GoalFunction ) - self:F() - self.GoalFunction = GoalFunction -end - ---- Register a new @{CLIENT} to participate within the mission. --- @param CLIENT Client is the @{CLIENT} object. The object must have been instantiated with @{CLIENT:New}. --- @return CLIENT --- @usage --- Add a number of Client objects to the Mission. --- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 1', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 3', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 2', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) --- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 4', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) -function MISSION:AddClient( Client ) - self:F( { Client } ) - - local Valid = true - - if Valid then - self._Clients[Client.ClientName] = Client - end - - return Client -end - ---- Find a @{CLIENT} object within the @{MISSION} by its ClientName. --- @param CLIENT ClientName is a string defining the Client Group as defined within the ME. --- @return CLIENT --- @usage --- -- Seach for Client "Bomber" within the Mission. --- local BomberClient = Mission:FindClient( "Bomber" ) -function MISSION:FindClient( ClientName ) - self:F( { self._Clients[ClientName] } ) - return self._Clients[ClientName] -end - - ---- Register a @{TASK} to be completed within the @{MISSION}. Note that there can be multiple @{TASK}s registered to be completed. Each TASK can be set a certain Goal. The MISSION will not be completed until all Goals are reached. --- @param TASK Task is the @{TASK} object. The object must have been instantiated with @{TASK:New} or any of its inherited @{TASK}s. --- @param number TaskNumber is the sequence number of the TASK within the MISSION. This number does have to be chronological. --- @return TASK --- @usage --- -- Define a few tasks for the Mission. --- PickupZones = { "NATO Gold Pickup Zone", "NATO Titan Pickup Zone" } --- PickupSignalUnits = { "NATO Gold Coordination Center", "NATO Titan Coordination Center" } --- --- -- Assign the Pickup Task --- local PickupTask = PICKUPTASK:New( PickupZones, CARGO_TYPE.ENGINEERS, CLIENT.ONBOARDSIDE.LEFT ) --- PickupTask:AddSmokeBlue( PickupSignalUnits ) --- PickupTask:SetGoalTotal( 3 ) --- Mission:AddTask( PickupTask, 1 ) --- --- -- Assign the Deploy Task --- local PatriotActivationZones = { "US Patriot Battery 1 Activation", "US Patriot Battery 2 Activation", "US Patriot Battery 3 Activation" } --- local PatriotActivationZonesSmokeUnits = { "US SAM Patriot - Battery 1 Control", "US SAM Patriot - Battery 2 Control", "US SAM Patriot - Battery 3 Control" } --- local DeployTask = DEPLOYTASK:New( PatriotActivationZones, CARGO_TYPE.ENGINEERS ) --- --DeployTask:SetCargoTargetZoneName( 'US Troops Attack ' .. math.random(2) ) --- DeployTask:AddSmokeBlue( PatriotActivationZonesSmokeUnits ) --- DeployTask:SetGoalTotal( 3 ) --- DeployTask:SetGoalTotal( 3, "Patriots activated" ) --- Mission:AddTask( DeployTask, 2 ) - -function MISSION:AddTask( Task, TaskNumber ) - self:F() - - self._Tasks[TaskNumber] = Task - self._Tasks[TaskNumber]:EnableEvents() - self._Tasks[TaskNumber].ID = TaskNumber - - return Task - end - ---- Get the TASK idenified by the TaskNumber from the Mission. This function is useful in GoalFunctions. --- @param number TaskNumber is the number of the @{TASK} within the @{MISSION}. --- @return TASK --- @usage --- -- Get Task 2 from the Mission. --- Task2 = Mission:GetTask( 2 ) - -function MISSION:GetTask( TaskNumber ) - self:F() - - local Valid = true - - local Task = nil - - if type(TaskNumber) ~= "number" then - Valid = false - end - - if Valid then - Task = self._Tasks[TaskNumber] - end - - return Task -end - ---- Get all the TASKs from the Mission. This function is useful in GoalFunctions. --- @return {TASK,...} Structure of TASKS with the @{TASK} number as the key. --- @usage --- -- Get Tasks from the Mission. --- Tasks = Mission:GetTasks() --- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" ) -function MISSION:GetTasks() - self:F() - - return self._Tasks -end - - ---[[ - _TransportExecuteStage: Defines the different stages of Transport unload/load execution. This table is internal and is used to control the validity of Transport load/unload timing. - - - _TransportExecuteStage.EXECUTING - - _TransportExecuteStage.SUCCESS - - _TransportExecuteStage.FAILED - ---]] -_TransportExecuteStage = { - NONE = 0, - EXECUTING = 1, - SUCCESS = 2, - FAILED = 3 -} - - ---- The MISSIONSCHEDULER is an OBJECT and is the main scheduler of ALL active MISSIONs registered within this scheduler. It's workings are considered internal and is automatically created when the Mission.lua file is included. --- @type MISSIONSCHEDULER --- @field #MISSIONSCHEDULER.MISSIONS Missions -MISSIONSCHEDULER = { - Missions = {}, - MissionCount = 0, - TimeIntervalCount = 0, - TimeIntervalShow = 150, - TimeSeconds = 14400, - TimeShow = 5 -} - ---- @type MISSIONSCHEDULER.MISSIONS --- @list <#MISSION> Mission - ---- This is the main MISSIONSCHEDULER Scheduler function. It is considered internal and is automatically created when the Mission.lua file is included. -function MISSIONSCHEDULER.Scheduler() - - - -- loop through the missions in the TransportTasks - for MissionName, MissionData in pairs( MISSIONSCHEDULER.Missions ) do - - local Mission = MissionData -- #MISSION - - if not Mission:IsCompleted() then - - -- This flag will monitor if for this mission, there are clients alive. If this flag is still false at the end of the loop, the mission status will be set to Pending (if not Failed or Completed). - local ClientsAlive = false - - for ClientID, ClientData in pairs( Mission._Clients ) do - - local Client = ClientData -- Client#CLIENT - - if Client:IsAlive() then - - -- There is at least one Client that is alive... So the Mission status is set to Ongoing. - ClientsAlive = true - - -- If this Client was not registered as Alive before: - -- 1. We register the Client as Alive. - -- 2. We initialize the Client Tasks and make a link to the original Mission Task. - -- 3. We initialize the Cargos. - -- 4. We flag the Mission as Ongoing. - if not Client.ClientAlive then - Client.ClientAlive = true - Client.ClientBriefingShown = false - for TaskNumber, Task in pairs( Mission._Tasks ) do - -- Note that this a deepCopy. Each client must have their own Tasks with own Stages!!! - Client._Tasks[TaskNumber] = routines.utils.deepCopy( Mission._Tasks[TaskNumber] ) - -- Each MissionTask must point to the original Mission. - Client._Tasks[TaskNumber].MissionTask = Mission._Tasks[TaskNumber] - Client._Tasks[TaskNumber].Cargos = Mission._Tasks[TaskNumber].Cargos - Client._Tasks[TaskNumber].LandingZones = Mission._Tasks[TaskNumber].LandingZones - end - - Mission:Ongoing() - end - - - -- For each Client, check for each Task the state and evolve the mission. - -- This flag will indicate if the Task of the Client is Complete. - local TaskComplete = false - - for TaskNumber, Task in pairs( Client._Tasks ) do - - if not Task.Stage then - Task:SetStage( 1 ) - end - - - local TransportTime = timer.getTime() - - if not Task:IsDone() then - - if Task:Goal() then - Task:ShowGoalProgress( Mission, Client ) - end - - --env.info( 'Scheduler: Mission = ' .. Mission.Name .. ' / Client = ' .. Client.ClientName .. ' / Task = ' .. Task.Name .. ' / Stage = ' .. Task.ActiveStage .. ' - ' .. Task.Stage.Name .. ' - ' .. Task.Stage.StageType ) - - -- Action - if Task:StageExecute() then - Task.Stage:Execute( Mission, Client, Task ) - end - - -- Wait until execution is finished - if Task.ExecuteStage == _TransportExecuteStage.EXECUTING then - Task.Stage:Executing( Mission, Client, Task ) - end - - -- Validate completion or reverse to earlier stage - if Task.Time + Task.Stage.WaitTime <= TransportTime then - Task:SetStage( Task.Stage:Validate( Mission, Client, Task ) ) - end - - if Task:IsDone() then - --env.info( 'Scheduler: Mission '.. Mission.Name .. ' Task ' .. Task.Name .. ' Stage ' .. Task.Stage.Name .. ' done. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) - TaskComplete = true -- when a task is not yet completed, a mission cannot be completed - - else - -- break only if this task is not yet done, so that future task are not yet activated. - TaskComplete = false -- when a task is not yet completed, a mission cannot be completed - --env.info( 'Scheduler: Mission "'.. Mission.Name .. '" Task "' .. Task.Name .. '" Stage "' .. Task.Stage.Name .. '" break. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) - break - end - - if TaskComplete then - - if Mission.GoalFunction ~= nil then - Mission.GoalFunction( Mission, Client ) - end - if MISSIONSCHEDULER.Scoring then - MISSIONSCHEDULER.Scoring:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) - end - --- if not Mission:IsCompleted() then --- end - end - end - end - - local MissionComplete = true - for TaskNumber, Task in pairs( Mission._Tasks ) do - if Task:Goal() then --- Task:ShowGoalProgress( Mission, Client ) - if Task:IsGoalReached() then - else - MissionComplete = false - end - else - MissionComplete = false -- If there is no goal, the mission should never be ended. The goal status will be set somewhere else. - end - end - - if MissionComplete then - Mission:Completed() - if MISSIONSCHEDULER.Scoring then - MISSIONSCHEDULER.Scoring:_AddMissionScore( Mission.Name, 100 ) - end - else - if TaskComplete then - -- Reset for new tasking of active client - Client.ClientAlive = false -- Reset the client tasks. - end - end - - - else - if Client.ClientAlive then - env.info( 'Scheduler: Client "' .. Client.ClientName .. '" is inactive.' ) - Client.ClientAlive = false - - -- This is tricky. If we sanitize Client._Tasks before sanitizing Client._Tasks[TaskNumber].MissionTask, then the original MissionTask will be sanitized, and will be lost within the garbage collector. - -- So first sanitize Client._Tasks[TaskNumber].MissionTask, after that, sanitize only the whole _Tasks structure... - --Client._Tasks[TaskNumber].MissionTask = nil - --Client._Tasks = nil - end - end - end - - -- If all Clients of this Mission are not activated, then the Mission status needs to be put back into Pending status. - -- But only if the Mission was Ongoing. In case the Mission is Completed or Failed, the Mission status may not be changed. In these cases, this will be the last run of this Mission in the Scheduler. - if ClientsAlive == false then - if Mission:IsOngoing() then - -- Mission status back to pending... - Mission:Pending() - end - end - end - - Mission:StatusToClients() - - if Mission:ReportTrigger() then - Mission:ReportToAll() - end - end - - return true -end - ---- Start the MISSIONSCHEDULER. -function MISSIONSCHEDULER.Start() - if MISSIONSCHEDULER ~= nil then - --MISSIONSCHEDULER.SchedulerId = routines.scheduleFunction( MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) - MISSIONSCHEDULER.SchedulerId = SCHEDULER:New( nil, MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) - end -end - ---- Stop the MISSIONSCHEDULER. -function MISSIONSCHEDULER.Stop() - if MISSIONSCHEDULER.SchedulerId then - routines.removeFunction(MISSIONSCHEDULER.SchedulerId) - MISSIONSCHEDULER.SchedulerId = nil - end -end - ---- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. --- @param Mission is the MISSION object instantiated by @{MISSION:New}. --- @return MISSION --- @usage --- -- Declare a mission. --- Mission = MISSION:New( 'Russia Transport Troops SA-6', --- 'Operational', --- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', --- 'Russia' ) --- MISSIONSCHEDULER:AddMission( Mission ) -function MISSIONSCHEDULER.AddMission( Mission ) - MISSIONSCHEDULER.Missions[Mission.Name] = Mission - MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount + 1 - -- Add an overall AI Client for the AI tasks... This AI Client will facilitate the Events in the background for each Task. - --MissionAdd:AddClient( CLIENT:Register( 'AI' ) ) - - return Mission -end - ---- Remove a MISSION from the MISSIONSCHEDULER. --- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. --- @usage --- -- Declare a mission. --- Mission = MISSION:New( 'Russia Transport Troops SA-6', --- 'Operational', --- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', --- 'Russia' ) --- MISSIONSCHEDULER:AddMission( Mission ) --- --- -- Now remove the Mission. --- MISSIONSCHEDULER:RemoveMission( 'Russia Transport Troops SA-6' ) -function MISSIONSCHEDULER.RemoveMission( MissionName ) - MISSIONSCHEDULER.Missions[MissionName] = nil - MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount - 1 -end - ---- Find a MISSION within the MISSIONSCHEDULER. --- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. --- @return MISSION --- @usage --- -- Declare a mission. --- Mission = MISSION:New( 'Russia Transport Troops SA-6', --- 'Operational', --- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', --- 'Russia' ) --- MISSIONSCHEDULER:AddMission( Mission ) --- --- -- Now find the Mission. --- MissionFind = MISSIONSCHEDULER:FindMission( 'Russia Transport Troops SA-6' ) -function MISSIONSCHEDULER.FindMission( MissionName ) - return MISSIONSCHEDULER.Missions[MissionName] -end - --- Internal function used by the MISSIONSCHEDULER menu. -function MISSIONSCHEDULER.ReportMissionsShow( ) - for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do - Mission.MissionReportShow = true - Mission.MissionReportFlash = false - end -end - --- Internal function used by the MISSIONSCHEDULER menu. -function MISSIONSCHEDULER.ReportMissionsFlash( TimeInterval ) - local Count = 0 - for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do - Mission.MissionReportShow = false - Mission.MissionReportFlash = true - Mission.MissionReportTrigger = timer.getTime() + Count * TimeInterval - Mission.MissionTimeInterval = MISSIONSCHEDULER.MissionCount * TimeInterval - env.info( "TimeInterval = " .. Mission.MissionTimeInterval ) - Count = Count + 1 - end -end - --- Internal function used by the MISSIONSCHEDULER menu. -function MISSIONSCHEDULER.ReportMissionsHide( Prm ) - for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do - Mission.MissionReportShow = false - Mission.MissionReportFlash = false - end -end - ---- Enables a MENU option in the communications menu under F10 to control the status of the active missions. --- This function should be called only once when starting the MISSIONSCHEDULER. -function MISSIONSCHEDULER.ReportMenu() - local ReportMenu = SUBMENU:New( 'Status' ) - local ReportMenuShow = COMMANDMENU:New( 'Show Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsShow, 0 ) - local ReportMenuFlash = COMMANDMENU:New('Flash Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsFlash, 120 ) - local ReportMenuHide = COMMANDMENU:New( 'Hide Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsHide, 0 ) -end - ---- Show the remaining mission time. -function MISSIONSCHEDULER:TimeShow() - self.TimeIntervalCount = self.TimeIntervalCount + 1 - if self.TimeIntervalCount >= self.TimeTriggerShow then - local TimeMsg = string.format("%00d", ( self.TimeSeconds / 60 ) - ( timer.getTime() / 60 )) .. ' minutes left until mission reload.' - MESSAGE:New( TimeMsg, "Mission time", self.TimeShow, '/TimeMsg' ):ToAll() - self.TimeIntervalCount = 0 - end -end - -function MISSIONSCHEDULER:Time( TimeSeconds, TimeIntervalShow, TimeShow ) - - self.TimeIntervalCount = 0 - self.TimeSeconds = TimeSeconds - self.TimeIntervalShow = TimeIntervalShow - self.TimeShow = TimeShow -end - ---- Adds a mission scoring to the game. -function MISSIONSCHEDULER:Scoring( Scoring ) - - self.Scoring = Scoring -end - ---- The CLEANUP class keeps an area clean of crashing or colliding airplanes. It also prevents airplanes from firing within this area. --- @module CleanUp --- @author Flightcontrol - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Mission" ) -Include.File( "Client" ) -Include.File( "Task" ) - ---- The CLEANUP class. --- @type CLEANUP --- @extends Base#BASE -CLEANUP = { - ClassName = "CLEANUP", - ZoneNames = {}, - TimeInterval = 300, - CleanUpList = {}, -} - ---- Creates the main object which is handling the cleaning of the debris within the given Zone Names. --- @param #CLEANUP self --- @param #table ZoneNames Is a table of zone names where the debris should be cleaned. Also a single string can be passed with one zone name. --- @param #number TimeInterval The interval in seconds when the clean activity takes place. The default is 300 seconds, thus every 5 minutes. --- @return #CLEANUP --- @usage --- -- Clean these Zones. --- CleanUpAirports = CLEANUP:New( { 'CLEAN Tbilisi', 'CLEAN Kutaisi' }, 150 ) --- or --- CleanUpTbilisi = CLEANUP:New( 'CLEAN Tbilisi', 150 ) --- CleanUpKutaisi = CLEANUP:New( 'CLEAN Kutaisi', 600 ) -function CLEANUP:New( ZoneNames, TimeInterval ) local self = BASE:Inherit( self, BASE:New() ) - self:F( { ZoneNames, TimeInterval } ) - - if type( ZoneNames ) == 'table' then - self.ZoneNames = ZoneNames - else - self.ZoneNames = { ZoneNames } - end - if TimeInterval then - self.TimeInterval = TimeInterval - end - - _EVENTDISPATCHER:OnBirth( self._OnEventBirth, self ) - - --self.CleanUpScheduler = routines.scheduleFunction( self._CleanUpScheduler, { self }, timer.getTime() + 1, TimeInterval ) - self.CleanUpScheduler = SCHEDULER:New( self, self._CleanUpScheduler, {}, 1, TimeInterval ) - - return self -end - - ---- Destroys a group from the simulator, but checks first if it is still existing! --- @param #CLEANUP self --- @param DCSGroup#Group GroupObject The object to be destroyed. --- @param #string CleanUpGroupName The groupname... -function CLEANUP:_DestroyGroup( GroupObject, CleanUpGroupName ) - self:F( { GroupObject, CleanUpGroupName } ) - - if GroupObject then -- and GroupObject:isExist() then - --MESSAGE:New( "Destroy Group " .. CleanUpGroupName, CleanUpGroupName, 1, CleanUpGroupName ):ToAll() - trigger.action.deactivateGroup(GroupObject) - self:T( { "GroupObject Destroyed", GroupObject } ) - end -end - ---- Destroys a @{DCSUnit#Unit} from the simulator, but checks first if it is still existing! --- @param #CLEANUP self --- @param DCSUnit#Unit CleanUpUnit The object to be destroyed. --- @param #string CleanUpUnitName The Unit name ... -function CLEANUP:_DestroyUnit( CleanUpUnit, CleanUpUnitName ) - self:F( { CleanUpUnit, CleanUpUnitName } ) - - if CleanUpUnit then - --MESSAGE:New( "Destroy " .. CleanUpUnitName, CleanUpUnitName, 1, CleanUpUnitName ):ToAll() - local CleanUpGroup = Unit.getGroup(CleanUpUnit) - -- TODO Client bug in 1.5.3 - if CleanUpGroup and CleanUpGroup:isExist() then - local CleanUpGroupUnits = CleanUpGroup:getUnits() - if #CleanUpGroupUnits == 1 then - local CleanUpGroupName = CleanUpGroup:getName() - --self:CreateEventCrash( timer.getTime(), CleanUpUnit ) - CleanUpGroup:destroy() - self:T( { "Destroyed Group:", CleanUpGroupName } ) - else - CleanUpUnit:destroy() - self:T( { "Destroyed Unit:", CleanUpUnitName } ) - end - self.CleanUpList[CleanUpUnitName] = nil -- Cleaning from the list - CleanUpUnit = nil - end - end -end - --- TODO check DCSTypes#Weapon ---- Destroys a missile from the simulator, but checks first if it is still existing! --- @param #CLEANUP self --- @param DCSTypes#Weapon MissileObject -function CLEANUP:_DestroyMissile( MissileObject ) - self:F( { MissileObject } ) - - if MissileObject and MissileObject:isExist() then - MissileObject:destroy() - self:T( "MissileObject Destroyed") - end -end - -function CLEANUP:_OnEventBirth( Event ) - self:F( { Event } ) - - self.CleanUpList[Event.IniDCSUnitName] = {} - self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit - self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup - self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName - self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName - - _EVENTDISPATCHER:OnEngineShutDownForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) - _EVENTDISPATCHER:OnEngineStartUpForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) - _EVENTDISPATCHER:OnHitForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) - _EVENTDISPATCHER:OnPilotDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) - _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) - _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self._EventCrash, self ) - _EVENTDISPATCHER:OnShotForUnit( Event.IniDCSUnitName, self._EventShot, self ) - - --self:AddEvent( world.event.S_EVENT_ENGINE_SHUTDOWN, self._EventAddForCleanUp ) - --self:AddEvent( world.event.S_EVENT_ENGINE_STARTUP, self._EventAddForCleanUp ) --- self:AddEvent( world.event.S_EVENT_HIT, self._EventAddForCleanUp ) -- , self._EventHitCleanUp ) --- self:AddEvent( world.event.S_EVENT_CRASH, self._EventCrash ) -- , self._EventHitCleanUp ) --- --self:AddEvent( world.event.S_EVENT_DEAD, self._EventCrash ) --- self:AddEvent( world.event.S_EVENT_SHOT, self._EventShot ) --- --- self:EnableEvents() - - -end - ---- Detects if a crash event occurs. --- Crashed units go into a CleanUpList for removal. --- @param #CLEANUP self --- @param DCSTypes#Event event -function CLEANUP:_EventCrash( Event ) - self:F( { Event } ) - - --TODO: This stuff is not working due to a DCS bug. Burning units cannot be destroyed. - --MESSAGE:New( "Crash ", "Crash", 10, "Crash" ):ToAll() - -- self:T("before getGroup") - -- local _grp = Unit.getGroup(event.initiator)-- Identify the group that fired - -- self:T("after getGroup") - -- _grp:destroy() - -- self:T("after deactivateGroup") - -- event.initiator:destroy() - - self.CleanUpList[Event.IniDCSUnitName] = {} - self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit - self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup - self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName - self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName - -end - ---- Detects if a unit shoots a missile. --- If this occurs within one of the zones, then the weapon used must be destroyed. --- @param #CLEANUP self --- @param DCSTypes#Event event -function CLEANUP:_EventShot( Event ) - self:F( { Event } ) - - -- Test if the missile was fired within one of the CLEANUP.ZoneNames. - local CurrentLandingZoneID = 0 - CurrentLandingZoneID = routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) - if ( CurrentLandingZoneID ) then - -- Okay, the missile was fired within the CLEANUP.ZoneNames, destroy the fired weapon. - --_SEADmissile:destroy() - --routines.scheduleFunction( CLEANUP._DestroyMissile, { self, Event.Weapon }, timer.getTime() + 0.1) - SCHEDULER:New( self, CLEANUP._DestroyMissile, { Event.Weapon }, 0.1 ) - end -end - - ---- Detects if the Unit has an S_EVENT_HIT within the given ZoneNames. If this is the case, destroy the unit. --- @param #CLEANUP self --- @param DCSTypes#Event event -function CLEANUP:_EventHitCleanUp( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then - self:T( { "Life: ", Event.IniDCSUnitName, ' = ', Event.IniDCSUnit:getLife(), "/", Event.IniDCSUnit:getLife0() } ) - if Event.IniDCSUnit:getLife() < Event.IniDCSUnit:getLife0() then - self:T( "CleanUp: Destroy: " .. Event.IniDCSUnitName ) - --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.IniDCSUnit }, timer.getTime() + 0.1) - SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.IniDCSUnit }, 0.1 ) - end - end - end - - if Event.TgtDCSUnit then - if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then - self:T( { "Life: ", Event.TgtDCSUnitName, ' = ', Event.TgtDCSUnit:getLife(), "/", Event.TgtDCSUnit:getLife0() } ) - if Event.TgtDCSUnit:getLife() < Event.TgtDCSUnit:getLife0() then - self:T( "CleanUp: Destroy: " .. Event.TgtDCSUnitName ) - --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.TgtDCSUnit }, timer.getTime() + 0.1 ) - SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.TgtDCSUnit }, 0.1 ) - end - end - end -end - ---- Add the @{DCSUnit#Unit} to the CleanUpList for CleanUp. -function CLEANUP:_AddForCleanUp( CleanUpUnit, CleanUpUnitName ) - self:F( { CleanUpUnit, CleanUpUnitName } ) - - self.CleanUpList[CleanUpUnitName] = {} - self.CleanUpList[CleanUpUnitName].CleanUpUnit = CleanUpUnit - self.CleanUpList[CleanUpUnitName].CleanUpUnitName = CleanUpUnitName - self.CleanUpList[CleanUpUnitName].CleanUpGroup = Unit.getGroup(CleanUpUnit) - self.CleanUpList[CleanUpUnitName].CleanUpGroupName = Unit.getGroup(CleanUpUnit):getName() - self.CleanUpList[CleanUpUnitName].CleanUpTime = timer.getTime() - self.CleanUpList[CleanUpUnitName].CleanUpMoved = false - - self:T( { "CleanUp: Add to CleanUpList: ", Unit.getGroup(CleanUpUnit):getName(), CleanUpUnitName } ) - -end - ---- Detects if the Unit has an S_EVENT_ENGINE_SHUTDOWN or an S_EVENT_HIT within the given ZoneNames. If this is the case, add the Group to the CLEANUP List. --- @param #CLEANUP self --- @param DCSTypes#Event event -function CLEANUP:_EventAddForCleanUp( Event ) - - if Event.IniDCSUnit then - if self.CleanUpList[Event.IniDCSUnitName] == nil then - if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then - self:_AddForCleanUp( Event.IniDCSUnit, Event.IniDCSUnitName ) - end - end - end - - if Event.TgtDCSUnit then - if self.CleanUpList[Event.TgtDCSUnitName] == nil then - if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then - self:_AddForCleanUp( Event.TgtDCSUnit, Event.TgtDCSUnitName ) - end - end - end - -end - -local CleanUpSurfaceTypeText = { - "LAND", - "SHALLOW_WATER", - "WATER", - "ROAD", - "RUNWAY" - } - ---- At the defined time interval, CleanUp the Groups within the CleanUpList. --- @param #CLEANUP self -function CLEANUP:_CleanUpScheduler() - self:F( { "CleanUp Scheduler" } ) - - local CleanUpCount = 0 - for CleanUpUnitName, UnitData in pairs( self.CleanUpList ) do - CleanUpCount = CleanUpCount + 1 - - self:T( { CleanUpUnitName, UnitData } ) - local CleanUpUnit = Unit.getByName(UnitData.CleanUpUnitName) - local CleanUpGroupName = UnitData.CleanUpGroupName - local CleanUpUnitName = UnitData.CleanUpUnitName - if CleanUpUnit then - self:T( { "CleanUp Scheduler", "Checking:", CleanUpUnitName } ) - if _DATABASE:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then - local CleanUpUnitVec3 = CleanUpUnit:getPoint() - --self:T( CleanUpUnitVec3 ) - local CleanUpUnitVec2 = {} - CleanUpUnitVec2.x = CleanUpUnitVec3.x - CleanUpUnitVec2.y = CleanUpUnitVec3.z - --self:T( CleanUpUnitVec2 ) - local CleanUpSurfaceType = land.getSurfaceType(CleanUpUnitVec2) - --self:T( CleanUpSurfaceType ) - --MESSAGE:New( "Surface " .. CleanUpUnitName .. " = " .. CleanUpSurfaceTypeText[CleanUpSurfaceType], CleanUpUnitName, 10, CleanUpUnitName ):ToAll() - - if CleanUpUnit and CleanUpUnit:getLife() <= CleanUpUnit:getLife0() * 0.95 then - if CleanUpSurfaceType == land.SurfaceType.RUNWAY then - if CleanUpUnit:inAir() then - local CleanUpLandHeight = land.getHeight(CleanUpUnitVec2) - local CleanUpUnitHeight = CleanUpUnitVec3.y - CleanUpLandHeight - self:T( { "CleanUp Scheduler", "Height = " .. CleanUpUnitHeight } ) - if CleanUpUnitHeight < 30 then - self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because below safe height and damaged." } ) - self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) - end - else - self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because on runway and damaged." } ) - self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) - end - end - end - -- Clean Units which are waiting for a very long time in the CleanUpZone. - if CleanUpUnit then - local CleanUpUnitVelocity = CleanUpUnit:getVelocity() - local CleanUpUnitVelocityTotal = math.abs(CleanUpUnitVelocity.x) + math.abs(CleanUpUnitVelocity.y) + math.abs(CleanUpUnitVelocity.z) - if CleanUpUnitVelocityTotal < 1 then - if UnitData.CleanUpMoved then - if UnitData.CleanUpTime + 180 <= timer.getTime() then - self:T( { "CleanUp Scheduler", "Destroy due to not moving anymore " .. CleanUpUnitName } ) - self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) - end - end - else - UnitData.CleanUpTime = timer.getTime() - UnitData.CleanUpMoved = true - --MESSAGE:New( "Moved " .. CleanUpUnitName, CleanUpUnitName, 10, CleanUpUnitName ):ToAll() - end - end - - else - -- Do nothing ... - self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE - end - else - self:T( "CleanUp: Group " .. CleanUpUnitName .. " cannot be found in DCS RTE, removing ..." ) - self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE - end - end - self:T(CleanUpCount) - - return true -end - ---- Dynamic spawning of groups (and units). --- --- @{#SPAWN} class --- =============== --- The @{#SPAWN} class allows to spawn dynamically new groups, based on pre-defined initialization settings, modifying the behaviour when groups are spawned. --- For each group to be spawned, within the mission editor, a group has to be created with the "late activation flag" set. We call this group the *"Spawn Template"* of the SPAWN object. --- A reference to this Spawn Template needs to be provided when constructing the SPAWN object, by indicating the name of the group within the mission editor in the constructor methods. --- --- Within the SPAWN object, there is an internal index that keeps track of which group from the internal group list was spawned. --- When new groups get spawned by using the SPAWN functions (see below), it will be validated whether the Limits (@{#SPAWN.Limit}) of the SPAWN object are not reached. --- When all is valid, a new group will be created by the spawning methods, and the internal index will be increased with 1. --- --- Regarding the name of new spawned groups, a _SpawnPrefix_ will be assigned for each new group created. --- If you want to have the Spawn Template name to be used as the _SpawnPrefix_ name, use the @{#SPAWN.New} constructor. --- However, when the @{#SPAWN.NewWithAlias} constructor was used, the Alias name will define the _SpawnPrefix_ name. --- Groups will follow the following naming structure when spawned at run-time: --- --- 1. Spawned groups will have the name _SpawnPrefix_#ggg, where ggg is a counter from 0 to 999. --- 2. Spawned units will have the name _SpawnPrefix_#ggg-uu, where uu is a counter from 0 to 99 for each new spawned unit belonging to the group. --- --- Some additional notes that need to be remembered: --- --- * Templates are actually groups defined within the mission editor, with the flag "Late Activation" set. As such, these groups are never used within the mission, but are used by the @{#SPAWN} module. --- * It is important to defined BEFORE you spawn new groups, a proper initialization of the SPAWN instance is done with the options you want to use. --- * When designing a mission, NEVER name groups using a "#" within the name of the group Spawn Template(s), or the SPAWN module logic won't work anymore. --- --- SPAWN construction methods: --- =========================== --- Create a new SPAWN object with the @{#SPAWN.New} or the @{#SPAWN.NewWithAlias} methods: --- --- * @{#SPAWN.New}: Creates a new SPAWN object taking the name of the group that functions as the Template. --- --- It is important to understand how the SPAWN class works internally. The SPAWN object created will contain internally a list of groups that will be spawned and that are already spawned. --- The initialization functions will modify this list of groups so that when a group gets spawned, ALL information is already prepared when spawning. This is done for performance reasons. --- So in principle, the group list will contain all parameters and configurations after initialization, and when groups get actually spawned, this spawning can be done quickly and efficient. --- --- SPAWN initialization methods: --- ============================= --- A spawn object will behave differently based on the usage of initialization methods: --- --- * @{#SPAWN.Limit}: Limits the amount of groups that can be alive at the same time and that can be dynamically spawned. --- * @{#SPAWN.RandomizeRoute}: Randomize the routes of spawned groups. --- * @{#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.InitRepeat}: Re-spawn groups when they land at the home base. Similar functions are @{#SPAWN.InitRepeatOnLanding} and @{#SPAWN.InitRepeatOnEngineShutDown}. --- --- SPAWN spawning methods: --- ======================= --- Groups can be spawned at different times and methods: --- --- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index. --- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index. --- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively. --- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}. --- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}. --- --- Note that @{#SPAWN.Spawn} and @{#SPAWN.ReSpawn} return a @{GROUP#GROUP.New} object, that contains a reference to the DCSGroup object. --- You can use the @{GROUP} object to do further actions with the DCSGroup. --- --- SPAWN object cleaning: --- ========================= --- Sometimes, it will occur during a mission run-time, that ground or especially air objects get damaged, and will while being damged stop their activities, while remaining alive. --- In such cases, the SPAWN object will just sit there and wait until that group gets destroyed, but most of the time it won't, --- and it may occur that no new groups are or can be spawned as limits are reached. --- To prevent this, a @{#SPAWN.CleanUp} initialization method has been defined that will silently monitor the status of each spawned group. --- Once a group has a velocity = 0, and has been waiting for a defined interval, that group will be cleaned or removed from run-time. --- There is a catch however :-) If a damaged group has returned to an airbase within the coalition, that group will not be considered as "lost"... --- In such a case, when the inactive group is cleaned, a new group will Re-spawned automatically. --- This models AI that has succesfully returned to their airbase, to restart their combat activities. --- Check the @{#SPAWN.CleanUp} for further info. --- --- ==== --- @module Spawn --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Database" ) -Include.File( "Group" ) -Include.File( "Zone" ) -Include.File( "Event" ) -Include.File( "Scheduler" ) - ---- SPAWN Class --- @type SPAWN --- @extends Base#BASE --- @field ClassName --- @field #string SpawnTemplatePrefix --- @field #string SpawnAliasPrefix -SPAWN = { - ClassName = "SPAWN", - SpawnTemplatePrefix = nil, - SpawnAliasPrefix = nil, -} - - - ---- Creates the main object to spawn a GROUP defined in the DCS ME. --- @param #SPAWN self --- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. Each new group will have the name starting with SpawnTemplatePrefix. --- @return #SPAWN --- @usage --- -- NATO helicopters engaging in the battle field. --- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ) --- @usage local Plane = SPAWN:New( "Plane" ) -- Creates a new local variable that can initiate new planes with the name "Plane#ddd" using the template "Plane" as defined within the ME. -function SPAWN:New( SpawnTemplatePrefix ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { SpawnTemplatePrefix } ) - - local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) - if TemplateGroup then - self.SpawnTemplatePrefix = SpawnTemplatePrefix - self.SpawnIndex = 0 - self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. - self.AliveUnits = 0 -- Contains the counter how many units are currently alive - self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. - self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! - self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. - self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. - self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. - self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. - self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. - self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. - - self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. - else - error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) - end - - return self -end - ---- Creates a new SPAWN instance to create new groups based on the defined template and using a new alias for each new group. --- @param #SPAWN self --- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. --- @param #string SpawnAliasPrefix is the name that will be given to the Group at runtime. --- @return #SPAWN --- @usage --- -- NATO helicopters engaging in the battle field. --- Spawn_BE_KA50 = SPAWN:NewWithAlias( 'BE KA-50@RAMP-Ground Defense', 'Helicopter Attacking a City' ) --- @usage local PlaneWithAlias = SPAWN:NewWithAlias( "Plane", "Bomber" ) -- Creates a new local variable that can instantiate new planes with the name "Bomber#ddd" using the template "Plane" as defined within the ME. -function SPAWN:NewWithAlias( SpawnTemplatePrefix, SpawnAliasPrefix ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { SpawnTemplatePrefix, SpawnAliasPrefix } ) - - local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) - if TemplateGroup then - self.SpawnTemplatePrefix = SpawnTemplatePrefix - self.SpawnAliasPrefix = SpawnAliasPrefix - self.SpawnIndex = 0 - self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. - self.AliveUnits = 0 -- Contains the counter how many units are currently alive - self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. - self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! - self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. - self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. - self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. - self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. - self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. - self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. - - self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. - else - error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) - end - - return self -end - - ---- Limits the Maximum amount of Units that can be alive at the same time, and the maximum amount of groups that can be spawned. --- Note that this method is exceptionally important to balance the performance of the mission. Depending on the machine etc, a mission can only process a maximum amount of units. --- If the time interval must be short, but there should not be more Units or Groups alive than a maximum amount of units, then this function should be used... --- When a @{#SPAWN.New} is executed and the limit of the amount of units alive is reached, then no new spawn will happen of the group, until some of these units of the spawn object will be destroyed. --- @param #SPAWN self --- @param #number SpawnMaxUnitsAlive The maximum amount of units that can be alive at runtime. --- @param #number SpawnMaxGroups The maximum amount of groups that can be spawned. When the limit is reached, then no more actual spawns will happen of the group. --- This parameter is useful to define a maximum amount of airplanes, ground troops, helicopters, ships etc within a supply area. --- This parameter accepts the value 0, which defines that there are no maximum group limits, but there are limits on the maximum of units that can be alive at the same time. --- @return #SPAWN self --- @usage --- -- NATO helicopters engaging in the battle field. --- -- This helicopter group consists of one Unit. So, this group will SPAWN maximum 2 groups simultaneously within the DCSRTE. --- -- There will be maximum 24 groups spawned during the whole mission lifetime. --- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Limit( 2, 24 ) -function SPAWN:Limit( SpawnMaxUnitsAlive, SpawnMaxGroups ) - self:F( { self.SpawnTemplatePrefix, SpawnMaxUnitsAlive, SpawnMaxGroups } ) - - self.SpawnMaxUnitsAlive = SpawnMaxUnitsAlive -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. - self.SpawnMaxGroups = SpawnMaxGroups -- The maximum amount of groups that can be spawned. - - for SpawnGroupID = 1, self.SpawnMaxGroups do - self:_InitializeSpawnGroups( SpawnGroupID ) - end - - return self -end - - ---- Randomizes the defined route of the SpawnTemplatePrefix group in the ME. This is very useful to define extra variation of the behaviour of groups. --- @param #SPAWN self --- @param #number SpawnStartPoint is the waypoint where the randomization begins. --- Note that the StartPoint = 0 equaling the point where the group is spawned. --- @param #number SpawnEndPoint is the waypoint where the randomization ends counting backwards. --- This parameter is useful to avoid randomization to end at a waypoint earlier than the last waypoint on the route. --- @param #number SpawnRadius is the radius in meters in which the randomization of the new waypoints, with the original waypoint of the original template located in the middle ... --- @return #SPAWN --- @usage --- -- NATO helicopters engaging in the battle field. --- -- The KA-50 has waypoints Start point ( =0 or SP ), 1, 2, 3, 4, End point (= 5 or DP). --- -- Waypoints 2 and 3 will only be randomized. The others will remain on their original position with each new spawn of the helicopter. --- -- The randomization of waypoint 2 and 3 will take place within a radius of 2000 meters. --- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):RandomizeRoute( 2, 2, 2000 ) -function SPAWN:RandomizeRoute( SpawnStartPoint, SpawnEndPoint, SpawnRadius ) - self:F( { self.SpawnTemplatePrefix, SpawnStartPoint, SpawnEndPoint, SpawnRadius } ) - - self.SpawnRandomizeRoute = true - self.SpawnRandomizeRouteStartPoint = SpawnStartPoint - self.SpawnRandomizeRouteEndPoint = SpawnEndPoint - self.SpawnRandomizeRouteRadius = SpawnRadius - - for GroupID = 1, self.SpawnMaxGroups do - self:_RandomizeRoute( GroupID ) - end - - return self -end - - ---- This function is rather complicated to understand. But I'll try to explain. --- This function becomes useful when you need to spawn groups with random templates of groups defined within the mission editor, --- but they will all follow the same Template route and have the same prefix name. --- In other words, this method randomizes between a defined set of groups the template to be used for each new spawn of a group. --- @param #SPAWN self --- @param #string SpawnTemplatePrefixTable A table with the names of the groups defined within the mission editor, from which one will be choosen when a new group will be spawned. --- @return #SPAWN --- @usage --- -- NATO Tank Platoons invading Gori. --- -- Choose between 13 different 'US Tank Platoon' configurations for each new SPAWN the Group to be spawned for the --- -- 'US Tank Platoon Left', 'US Tank Platoon Middle' and 'US Tank Platoon Right' SpawnTemplatePrefixes. --- -- Each new SPAWN will randomize the route, with a defined time interval of 200 seconds with 40% time variation (randomization) and --- -- with a limit set of maximum 12 Units alive simulteneously and 150 Groups to be spawned during the whole mission. --- Spawn_US_Platoon = { 'US Tank Platoon 1', 'US Tank Platoon 2', 'US Tank Platoon 3', 'US Tank Platoon 4', 'US Tank Platoon 5', --- 'US Tank Platoon 6', 'US Tank Platoon 7', 'US Tank Platoon 8', 'US Tank Platoon 9', 'US Tank Platoon 10', --- 'US Tank Platoon 11', 'US Tank Platoon 12', 'US Tank Platoon 13' } --- Spawn_US_Platoon_Left = SPAWN:New( 'US Tank Platoon Left' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) --- Spawn_US_Platoon_Middle = SPAWN:New( 'US Tank Platoon Middle' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) --- Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) -function SPAWN:RandomizeTemplate( SpawnTemplatePrefixTable ) - self:F( { self.SpawnTemplatePrefix, SpawnTemplatePrefixTable } ) - - self.SpawnTemplatePrefixTable = SpawnTemplatePrefixTable - self.SpawnRandomizeTemplate = true - - for SpawnGroupID = 1, self.SpawnMaxGroups do - self:_RandomizeTemplate( SpawnGroupID ) - end - - return self -end - - - - - ---- 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 ... --- @param #SPAWN self --- @return #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() -function SPAWN:InitRepeat() - self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) - - self.Repeat = true - self.RepeatOnEngineShutDown = false - self.RepeatOnLanding = true - - return self -end - ---- Respawn group after landing. --- @param #SPAWN self --- @return #SPAWN self -function SPAWN:InitRepeatOnLanding() - self:F( { self.SpawnTemplatePrefix } ) - - self:InitRepeat() - self.RepeatOnEngineShutDown = false - self.RepeatOnLanding = true - - return self -end - - ---- Respawn after landing when its engines have shut down. --- @param #SPAWN self --- @return #SPAWN self -function SPAWN:InitRepeatOnEngineShutDown() - self:F( { self.SpawnTemplatePrefix } ) - - self:InitRepeat() - self.RepeatOnEngineShutDown = true - self.RepeatOnLanding = false - - return self -end - - ---- CleanUp groups when they are still alive, but inactive. --- When groups are still alive and have become inactive due to damage and are unable to contribute anything, then this group will be removed at defined intervals in seconds. --- @param #SPAWN self --- @param #string SpawnCleanUpInterval The interval to check for inactive groups within seconds. --- @return #SPAWN self --- @usage Spawn_Helicopter:CleanUp( 20 ) -- CleanUp the spawning of the helicopters every 20 seconds when they become inactive. -function SPAWN:CleanUp( SpawnCleanUpInterval ) - self:F( { self.SpawnTemplatePrefix, SpawnCleanUpInterval } ) - - self.SpawnCleanUpInterval = SpawnCleanUpInterval - self.SpawnCleanUpTimeStamps = {} - --self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval ) - self.CleanUpScheduler = SCHEDULER:New( self, self._SpawnCleanUpScheduler, {}, 1, SpawnCleanUpInterval, 0.2 ) - return self -end - - - ---- Makes the groups visible before start (like a batallion). --- The method will take the position of the group as the first position in the array. --- @param #SPAWN self --- @param #number SpawnAngle The angle in degrees how the groups and each unit of the group will be positioned. --- @param #number SpawnWidth The amount of Groups that will be positioned on the X axis. --- @param #number SpawnDeltaX The space between each Group on the X-axis. --- @param #number SpawnDeltaY The space between each Group on the Y-axis. --- @return #SPAWN self --- @usage --- -- Define an array of Groups. --- Spawn_BE_Ground = SPAWN:New( 'BE Ground' ):Limit( 2, 24 ):Visible( 90, "Diamond", 10, 100, 50 ) -function SPAWN:Array( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) - self:F( { self.SpawnTemplatePrefix, SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY } ) - - self.SpawnVisible = true -- When the first Spawn executes, all the Groups need to be made visible before start. - - local SpawnX = 0 - local SpawnY = 0 - local SpawnXIndex = 0 - local SpawnYIndex = 0 - - for SpawnGroupID = 1, self.SpawnMaxGroups do - self:T( { SpawnX, SpawnY, SpawnXIndex, SpawnYIndex } ) - - self.SpawnGroups[SpawnGroupID].Visible = true - self.SpawnGroups[SpawnGroupID].Spawned = false - - SpawnXIndex = SpawnXIndex + 1 - if SpawnWidth and SpawnWidth ~= 0 then - if SpawnXIndex >= SpawnWidth then - SpawnXIndex = 0 - SpawnYIndex = SpawnYIndex + 1 - end - end - - local SpawnRootX = self.SpawnGroups[SpawnGroupID].SpawnTemplate.x - local SpawnRootY = self.SpawnGroups[SpawnGroupID].SpawnTemplate.y - - self:_TranslateRotate( SpawnGroupID, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) - - self.SpawnGroups[SpawnGroupID].SpawnTemplate.lateActivation = true - self.SpawnGroups[SpawnGroupID].SpawnTemplate.visible = true - - self.SpawnGroups[SpawnGroupID].Visible = true - - _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnBirth, self ) - _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) - _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) - - if self.Repeat then - _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnTakeOff, self ) - _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnLand, self ) - end - if self.RepeatOnEngineShutDown then - _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnEngineShutDown, self ) - end - - self.SpawnGroups[SpawnGroupID].Group = _DATABASE:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) - - SpawnX = SpawnXIndex * SpawnDeltaX - SpawnY = SpawnYIndex * SpawnDeltaY - end - - return self -end - - - ---- Will spawn a group based on the internal index. --- Note: Uses @{DATABASE} module defined in MOOSE. --- @param #SPAWN self --- @return Group#GROUP The group that was spawned. You can use this group for further actions. -function SPAWN:Spawn() - self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) - - return self:SpawnWithIndex( self.SpawnIndex + 1 ) -end - ---- Will re-spawn a group based on a given index. --- Note: Uses @{DATABASE} module defined in MOOSE. --- @param #SPAWN self --- @param #string SpawnIndex The index of the group to be spawned. --- @return Group#GROUP The group that was spawned. You can use this group for further actions. -function SPAWN:ReSpawn( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) - - if not SpawnIndex then - SpawnIndex = 1 - end - --- TODO: This logic makes DCS crash and i don't know why (yet). - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - if SpawnGroup then - local SpawnDCSGroup = SpawnGroup:GetDCSGroup() - if SpawnDCSGroup then - SpawnGroup:Destroy() - end - end - - return self:SpawnWithIndex( SpawnIndex ) -end - ---- Will spawn a group with a specified index number. --- Uses @{DATABASE} global object defined in MOOSE. --- @param #SPAWN self --- @return Group#GROUP The group that was spawned. You can use this group for further actions. -function SPAWN:SpawnWithIndex( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups } ) - - if self:_GetSpawnIndex( SpawnIndex ) then - - if self.SpawnGroups[self.SpawnIndex].Visible then - self.SpawnGroups[self.SpawnIndex].Group:Activate() - else - self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) - _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnBirth, self ) - _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) - _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) - - if self.Repeat then - _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnTakeOff, self ) - _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnLand, self ) - end - if self.RepeatOnEngineShutDown then - _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) - end - - self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) - - self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) - - -- If there is a SpawnFunction hook defined, call it. - if self.SpawnFunctionHook then - self.SpawnFunctionHook( self.SpawnGroups[self.SpawnIndex].Group, unpack( self.SpawnFunctionArguments ) ) - end - -- TODO: Need to fix this by putting an "R" in the name of the group when the group repeats. - --if self.Repeat then - -- _DATABASE:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) - --end - end - - self.SpawnGroups[self.SpawnIndex].Spawned = true - return self.SpawnGroups[self.SpawnIndex].Group - else - --self:E( { self.SpawnTemplatePrefix, "No more Groups to Spawn:", SpawnIndex, self.SpawnMaxGroups } ) - end - - return nil -end - ---- Spawns new groups at varying time intervals. --- This is useful if you want to have continuity within your missions of certain (AI) groups to be present (alive) within your missions. --- @param #SPAWN self --- @param #number SpawnTime The time interval defined in seconds between each new spawn of new groups. --- @param #number SpawnTimeVariation The variation to be applied on the defined time interval between each new spawn. --- The variation is a number between 0 and 1, representing the %-tage of variation to be applied on the time interval. --- @return #SPAWN self --- @usage --- -- NATO helicopters engaging in the battle field. --- -- The time interval is set to SPAWN new helicopters between each 600 seconds, with a time variation of 50%. --- -- The time variation in this case will be between 450 seconds and 750 seconds. --- -- This is calculated as follows: --- -- Low limit: 600 * ( 1 - 0.5 / 2 ) = 450 --- -- High limit: 600 * ( 1 + 0.5 / 2 ) = 750 --- -- Between these two values, a random amount of seconds will be choosen for each new spawn of the helicopters. --- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) -function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation ) - self:F( { SpawnTime, SpawnTimeVariation } ) - - if SpawnTime ~= nil and SpawnTimeVariation ~= nil then - self.SpawnScheduler = SCHEDULER:New( self, self._Scheduler, {}, 1, SpawnTime, SpawnTimeVariation ) - end - - return self -end - ---- Will re-start the spawning scheduler. --- Note: This function is only required to be called when the schedule was stopped. -function SPAWN:SpawnScheduleStart() - self:F( { self.SpawnTemplatePrefix } ) - - self.SpawnScheduler:Start() -end - ---- Will stop the scheduled spawning scheduler. -function SPAWN:SpawnScheduleStop() - self:F( { self.SpawnTemplatePrefix } ) - - self.SpawnScheduler:Stop() -end - - ---- Allows to place a CallFunction hook when a new group spawns. --- The provided function will be called when a new group is spawned, including its given parameters. --- The first parameter of the SpawnFunction is the @{Group#GROUP} that was spawned. --- @param #SPAWN self --- @param #function SpawnFunctionHook The function to be called when a group spawns. --- @param SpawnFunctionArguments A random amount of arguments to be provided to the function when the group spawns. --- @return #SPAWN -function SPAWN:SpawnFunction( SpawnFunctionHook, ... ) - self:F( SpawnFunction ) - - self.SpawnFunctionHook = SpawnFunctionHook - self.SpawnFunctionArguments = {} - if arg then - self.SpawnFunctionArguments = arg - end - - return self -end - - - - ---- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone. --- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. --- You can use the returned group to further define the route to be followed. --- @param #SPAWN self --- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group. --- @param #number OuterRadius The outer radius in meters where the new group will be spawned. --- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned. --- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. --- @return Group#GROUP that was spawned. --- @return #nil Nothing was spawned. -function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } ) - - if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then - - if SpawnIndex then - else - SpawnIndex = self.SpawnIndex + 1 - end - - if self:_GetSpawnIndex( SpawnIndex ) then - - local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate - - if SpawnTemplate then - - local UnitPoint = HostUnit:GetPointVec2() - - self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } ) - - --for PointID, Point in pairs( SpawnTemplate.route.points ) do - --Point.x = UnitPoint.x - --Point.y = UnitPoint.y - --Point.alt = nil - --Point.alt_type = nil - --end - - SpawnTemplate.route.points[1].x = UnitPoint.x - SpawnTemplate.route.points[1].y = UnitPoint.y - - if not InnerRadius then - InnerRadius = 10 - end - - if not OuterRadius then - OuterRadius = 50 - end - - -- Apply SpawnFormation - for UnitID = 1, #SpawnTemplate.units do - if InnerRadius == 0 then - SpawnTemplate.units[UnitID].x = UnitPoint.x - SpawnTemplate.units[UnitID].y = UnitPoint.y - else - local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) - SpawnTemplate.units[UnitID].x = CirclePos.x - SpawnTemplate.units[UnitID].y = CirclePos.y - end - self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) - end - - local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) - local Point = {} - Point.type = "Turning Point" - Point.x = SpawnPos.x - Point.y = SpawnPos.y - Point.action = "Cone" - Point.speed = 5 - - table.insert( SpawnTemplate.route.points, 2, Point ) - - return self:SpawnWithIndex( self.SpawnIndex ) - end - end - end - - return nil -end - ---- Will spawn a Group within a given @{Zone#ZONE}. --- Once the group is spawned within the zone, it will continue on its route. --- The first waypoint (where the group is spawned) is replaced with the zone coordinates. --- @param #SPAWN self --- @param Zone#ZONE Zone The zone where the group is to be spawned. --- @param #number ZoneRandomize (Optional) Set to true if you want to randomize the starting point in the zone. --- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. --- @return Group#GROUP that was spawned. --- @return #nil when nothing was spawned. -function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } ) - - if Zone then - - if SpawnIndex then - else - SpawnIndex = self.SpawnIndex + 1 - end - - if self:_GetSpawnIndex( SpawnIndex ) then - - local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate - - if SpawnTemplate then - - local ZonePoint - - if ZoneRandomize == true then - ZonePoint = Zone:GetRandomPointVec2() - else - ZonePoint = Zone:GetPointVec2() - end - - SpawnTemplate.route.points[1].x = ZonePoint.x - SpawnTemplate.route.points[1].y = ZonePoint.y - - -- Apply SpawnFormation - for UnitID = 1, #SpawnTemplate.units do - local ZonePointUnit = Zone:GetRandomPointVec2() - SpawnTemplate.units[UnitID].x = ZonePointUnit.x - SpawnTemplate.units[UnitID].y = ZonePointUnit.y - self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) - end - - return self:SpawnWithIndex( self.SpawnIndex ) - end - end - end - - return nil -end - - - - ---- Will spawn a plane group in uncontrolled mode... --- This will be similar to the uncontrolled flag setting in the ME. --- @return #SPAWN self -function SPAWN:UnControlled() - self:F( { self.SpawnTemplatePrefix } ) - - self.SpawnUnControlled = true - - for SpawnGroupID = 1, self.SpawnMaxGroups do - self.SpawnGroups[SpawnGroupID].UnControlled = true - end - - return self -end - - - ---- Will return the SpawnGroupName either with with a specific count number or without any count. --- @param #SPAWN self --- @param #number SpawnIndex Is the number of the Group that is to be spawned. --- @return #string SpawnGroupName -function SPAWN:SpawnGroupName( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) - - local SpawnPrefix = self.SpawnTemplatePrefix - if self.SpawnAliasPrefix then - SpawnPrefix = self.SpawnAliasPrefix - end - - if SpawnIndex then - local SpawnName = string.format( '%s#%03d', SpawnPrefix, SpawnIndex ) - self:T( SpawnName ) - return SpawnName - else - self:T( SpawnPrefix ) - return SpawnPrefix - end - -end - ---- Find the first alive group. --- @param #SPAWN self --- @param #number SpawnCursor A number holding the index from where to find the first group from. --- @return Group#GROUP, #number The group found, the new index where the group was found. --- @return #nil, #nil When no group is found, #nil is returned. -function SPAWN:GetFirstAliveGroup( SpawnCursor ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) - - for SpawnIndex = 1, self.SpawnCount do - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - if SpawnGroup and SpawnGroup:IsAlive() then - SpawnCursor = SpawnIndex - return SpawnGroup, SpawnCursor - end - end - - return nil, nil -end - - ---- Find the next alive group. --- @param #SPAWN self --- @param #number SpawnCursor A number holding the last found previous index. --- @return Group#GROUP, #number The group found, the new index where the group was found. --- @return #nil, #nil When no group is found, #nil is returned. -function SPAWN:GetNextAliveGroup( SpawnCursor ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) - - SpawnCursor = SpawnCursor + 1 - for SpawnIndex = SpawnCursor, self.SpawnCount do - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - if SpawnGroup and SpawnGroup:IsAlive() then - SpawnCursor = SpawnIndex - return SpawnGroup, SpawnCursor - end - end - - return nil, nil -end - ---- Find the last alive group during runtime. -function SPAWN:GetLastAliveGroup() - self:F( { self.SpawnTemplatePrefixself.SpawnAliasPrefix } ) - - self.SpawnIndex = self:_GetLastIndex() - for SpawnIndex = self.SpawnIndex, 1, -1 do - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - if SpawnGroup and SpawnGroup:IsAlive() then - self.SpawnIndex = SpawnIndex - return SpawnGroup - end - end - - self.SpawnIndex = nil - return nil -end - - - ---- Get the group from an index. --- Returns the group from the SpawnGroups list. --- If no index is given, it will return the first group in the list. --- @param #SPAWN self --- @param #number SpawnIndex The index of the group to return. --- @return Group#GROUP -function SPAWN:GetGroupFromIndex( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) - - if not SpawnIndex then - SpawnIndex = 1 - end - - if self.SpawnGroups and self.SpawnGroups[SpawnIndex] then - local SpawnGroup = self.SpawnGroups[SpawnIndex].Group - return SpawnGroup - else - return nil - end -end - ---- Get the group index from a DCSUnit. --- The method will search for a #-mark, and will return the index behind the #-mark of the DCSUnit. --- It will return nil of no prefix was found. --- @param #SPAWN self --- @param DCSUnit The DCS unit to be searched. --- @return #string The prefix --- @return #nil Nothing found -function SPAWN:_GetGroupIndexFromDCSUnit( DCSUnit ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) - - if DCSUnit and DCSUnit:getName() then - local IndexString = string.match( DCSUnit:getName(), "#.*-" ):sub( 2, -2 ) - self:T( IndexString ) - - if IndexString then - local Index = tonumber( IndexString ) - self:T( { "Index:", IndexString, Index } ) - return Index - end - end - - return nil -end - ---- Return the prefix of a DCSUnit. --- The method will search for a #-mark, and will return the text before the #-mark. --- It will return nil of no prefix was found. --- @param #SPAWN self --- @param DCSUnit The DCS unit to be searched. --- @return #string The prefix --- @return #nil Nothing found -function SPAWN:_GetPrefixFromDCSUnit( DCSUnit ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) - - if DCSUnit and DCSUnit:getName() then - local SpawnPrefix = string.match( DCSUnit:getName(), ".*#" ) - if SpawnPrefix then - SpawnPrefix = SpawnPrefix:sub( 1, -2 ) - end - self:T( SpawnPrefix ) - return SpawnPrefix - end - - return nil -end - ---- Return the group within the SpawnGroups collection with input a DCSUnit. -function SPAWN:_GetGroupFromDCSUnit( DCSUnit ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) - - if DCSUnit then - local SpawnPrefix = self:_GetPrefixFromDCSUnit( DCSUnit ) - - if self.SpawnTemplatePrefix == SpawnPrefix or ( self.SpawnAliasPrefix and self.SpawnAliasPrefix == SpawnPrefix ) then - local SpawnGroupIndex = self:_GetGroupIndexFromDCSUnit( DCSUnit ) - local SpawnGroup = self.SpawnGroups[SpawnGroupIndex].Group - self:T( SpawnGroup ) - return SpawnGroup - end - end - - return nil -end - - ---- Get the index from a given group. --- The function will search the name of the group for a #, and will return the number behind the #-mark. -function SPAWN:GetSpawnIndexFromGroup( SpawnGroup ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnGroup } ) - - local IndexString = string.match( SpawnGroup:GetName(), "#.*$" ):sub( 2 ) - local Index = tonumber( IndexString ) - - self:T( IndexString, Index ) - return Index - -end - ---- Return the last maximum index that can be used. -function SPAWN:_GetLastIndex() - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) - - return self.SpawnMaxGroups -end - ---- Initalize the SpawnGroups collection. -function SPAWN:_InitializeSpawnGroups( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) - - if not self.SpawnGroups[SpawnIndex] then - self.SpawnGroups[SpawnIndex] = {} - self.SpawnGroups[SpawnIndex].Visible = false - self.SpawnGroups[SpawnIndex].Spawned = false - self.SpawnGroups[SpawnIndex].UnControlled = false - self.SpawnGroups[SpawnIndex].SpawnTime = 0 - - self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefix - self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) - end - - self:_RandomizeTemplate( SpawnIndex ) - self:_RandomizeRoute( SpawnIndex ) - --self:_TranslateRotate( SpawnIndex ) - - return self.SpawnGroups[SpawnIndex] -end - - - ---- Gets the CategoryID of the Group with the given SpawnPrefix -function SPAWN:_GetGroupCategoryID( SpawnPrefix ) - local TemplateGroup = Group.getByName( SpawnPrefix ) - - if TemplateGroup then - return TemplateGroup:getCategory() - else - return nil - end -end - ---- Gets the CoalitionID of the Group with the given SpawnPrefix -function SPAWN:_GetGroupCoalitionID( SpawnPrefix ) - local TemplateGroup = Group.getByName( SpawnPrefix ) - - if TemplateGroup then - return TemplateGroup:getCoalition() - else - return nil - end -end - ---- Gets the CountryID of the Group with the given SpawnPrefix -function SPAWN:_GetGroupCountryID( SpawnPrefix ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnPrefix } ) - - local TemplateGroup = Group.getByName( SpawnPrefix ) - - if TemplateGroup then - local TemplateUnits = TemplateGroup:getUnits() - return TemplateUnits[1]:getCountry() - else - return nil - end -end - ---- Gets the Group Template from the ME environment definition. --- This method used the @{DATABASE} object, which contains ALL initial and new spawned object in MOOSE. --- @param #SPAWN self --- @param #string SpawnTemplatePrefix --- @return @SPAWN self -function SPAWN:_GetTemplate( SpawnTemplatePrefix ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnTemplatePrefix } ) - - local SpawnTemplate = nil - - SpawnTemplate = routines.utils.deepCopy( _DATABASE.Templates.Groups[SpawnTemplatePrefix].Template ) - - if SpawnTemplate == nil then - error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) - end - - SpawnTemplate.SpawnCoalitionID = self:_GetGroupCoalitionID( SpawnTemplatePrefix ) - SpawnTemplate.SpawnCategoryID = self:_GetGroupCategoryID( SpawnTemplatePrefix ) - SpawnTemplate.SpawnCountryID = self:_GetGroupCountryID( SpawnTemplatePrefix ) - - self:T( { SpawnTemplate } ) - return SpawnTemplate -end - ---- Prepares the new Group Template. --- @param #SPAWN self --- @param #string SpawnTemplatePrefix --- @param #number SpawnIndex --- @return #SPAWN self -function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) - - local SpawnTemplate = self:_GetTemplate( SpawnTemplatePrefix ) - SpawnTemplate.name = self:SpawnGroupName( SpawnIndex ) - - SpawnTemplate.groupId = nil - SpawnTemplate.lateActivation = false - - if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then - self:T( "For ground units, visible needs to be false..." ) - SpawnTemplate.visible = false - end - - if SpawnTemplate.SpawnCategoryID == Group.Category.HELICOPTER or SpawnTemplate.SpawnCategoryID == Group.Category.AIRPLANE then - SpawnTemplate.uncontrolled = false - end - - for UnitID = 1, #SpawnTemplate.units do - SpawnTemplate.units[UnitID].name = string.format( SpawnTemplate.name .. '-%02d', UnitID ) - SpawnTemplate.units[UnitID].unitId = nil - SpawnTemplate.units[UnitID].x = SpawnTemplate.route.points[1].x - SpawnTemplate.units[UnitID].y = SpawnTemplate.route.points[1].y - end - - self:T( { "Template:", SpawnTemplate } ) - return SpawnTemplate - -end - ---- Private method randomizing the routes. --- @param #SPAWN self --- @param #number SpawnIndex The index of the group to be spawned. --- @return #SPAWN -function SPAWN:_RandomizeRoute( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnRandomizeRoute, self.SpawnRandomizeRouteStartPoint, self.SpawnRandomizeRouteEndPoint, self.SpawnRandomizeRouteRadius } ) - - if self.SpawnRandomizeRoute then - local SpawnTemplate = self.SpawnGroups[SpawnIndex].SpawnTemplate - local RouteCount = #SpawnTemplate.route.points - - for t = self.SpawnRandomizeRouteStartPoint + 1, ( RouteCount - self.SpawnRandomizeRouteEndPoint ) do - SpawnTemplate.route.points[t].x = SpawnTemplate.route.points[t].x + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) - SpawnTemplate.route.points[t].y = SpawnTemplate.route.points[t].y + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) - -- TODO: manage altitude for airborne units ... - SpawnTemplate.route.points[t].alt = nil - --SpawnGroup.route.points[t].alt_type = nil - self:T( 'SpawnTemplate.route.points[' .. t .. '].x = ' .. SpawnTemplate.route.points[t].x .. ', SpawnTemplate.route.points[' .. t .. '].y = ' .. SpawnTemplate.route.points[t].y ) - end - end - - return self -end - ---- Private method that randomizes the template of the group. --- @param #SPAWN self --- @param #number SpawnIndex --- @return #SPAWN self -function SPAWN:_RandomizeTemplate( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) - - if self.SpawnRandomizeTemplate then - self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefixTable[ math.random( 1, #self.SpawnTemplatePrefixTable ) ] - self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) - self.SpawnGroups[SpawnIndex].SpawnTemplate.route = routines.utils.deepCopy( self.SpawnTemplate.route ) - 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 - for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do - self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading - end - end - - self:_RandomizeRoute( SpawnIndex ) - - return self -end - -function SPAWN:_TranslateRotate( SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle } ) - - -- Translate - local TranslatedX = SpawnX - local TranslatedY = SpawnY - - -- Rotate - -- From Wikipedia: https://en.wikipedia.org/wiki/Rotation_matrix#Common_rotations - -- x' = x \cos \theta - y \sin \theta\ - -- y' = x \sin \theta + y \cos \theta\ - local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) - + TranslatedY * math.sin( math.rad( SpawnAngle ) ) - local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) - + TranslatedY * math.cos( math.rad( SpawnAngle ) ) - - -- Assign - self.SpawnGroups[SpawnIndex].SpawnTemplate.x = SpawnRootX - RotatedX - self.SpawnGroups[SpawnIndex].SpawnTemplate.y = SpawnRootY + RotatedY - - - local SpawnUnitCount = table.getn( self.SpawnGroups[SpawnIndex].SpawnTemplate.units ) - for u = 1, SpawnUnitCount do - - -- Translate - local TranslatedX = SpawnX - local TranslatedY = SpawnY - 10 * ( u - 1 ) - - -- Rotate - local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) - + TranslatedY * math.sin( math.rad( SpawnAngle ) ) - local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) - + TranslatedY * math.cos( math.rad( SpawnAngle ) ) - - -- Assign - self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].x = SpawnRootX - RotatedX - self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].y = SpawnRootY + RotatedY - self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading = self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading + math.rad( SpawnAngle ) - end - - return self -end - ---- Get the next index of the groups to be spawned. This function is complicated, as it is used at several spaces. -function SPAWN:_GetSpawnIndex( SpawnIndex ) - self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive, self.AliveUnits, #self.SpawnTemplate.units } ) - - - if ( self.SpawnMaxGroups == 0 ) or ( SpawnIndex <= self.SpawnMaxGroups ) then - if ( self.SpawnMaxUnitsAlive == 0 ) or ( self.AliveUnits < self.SpawnMaxUnitsAlive * #self.SpawnTemplate.units ) or self.UnControlled then - if SpawnIndex and SpawnIndex >= self.SpawnCount + 1 then - self.SpawnCount = self.SpawnCount + 1 - SpawnIndex = self.SpawnCount - end - self.SpawnIndex = SpawnIndex - if not self.SpawnGroups[self.SpawnIndex] then - self:_InitializeSpawnGroups( self.SpawnIndex ) - end - else - return nil - end - else - return nil - end - - return self.SpawnIndex -end - - --- TODO Need to delete this... _DATABASE does this now ... -function SPAWN:_OnBirth( event ) - - if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line - if event.initiator and event.initiator:getName() then - local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) - if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then - self:T( { "Birth event: " .. event.initiator:getName(), event } ) - --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " spawned." , 5, EventPrefix .. '/Event') - self.AliveUnits = self.AliveUnits + 1 - self:T( "Alive Units: " .. self.AliveUnits ) - end - end - end - -end - ---- Obscolete --- @todo Need to delete this... _DATABASE does this now ... -function SPAWN:_OnDeadOrCrash( event ) - self:F( self.SpawnTemplatePrefix, event ) - - if event.initiator and event.initiator:getName() then - local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) - if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then - self:T( { "Dead event: " .. event.initiator:getName(), event } ) --- local DestroyedUnit = Unit.getByName( EventPrefix ) --- if DestroyedUnit and DestroyedUnit.getLife() <= 1.0 then - --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " crashed." , 5, EventPrefix .. '/Event') - self.AliveUnits = self.AliveUnits - 1 - self:T( "Alive Units: " .. self.AliveUnits ) --- end - end - end -end - ---- Will detect AIR Units taking off... When the event takes place, the spawned Group is registered as airborne... --- This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups. --- @todo Need to test for AIR Groups only... -function SPAWN:_OnTakeOff( event ) - self:F( self.SpawnTemplatePrefix, event ) - - if event.initiator and event.initiator:getName() then - local SpawnGroup = self:_GetGroupFromDCSUnit( event.initiator ) - if SpawnGroup then - self:T( { "TakeOff event: " .. event.initiator:getName(), event } ) - self:T( "self.Landed = false" ) - self.Landed = false - end - end -end - ---- Will detect AIR Units landing... When the event takes place, the spawned Group is registered as landed. --- This is needed to ensure that Re-SPAWNing is only done for landed AIR Groups. --- @todo Need to test for AIR Groups only... -function SPAWN:_OnLand( event ) - self:F( self.SpawnTemplatePrefix, event ) - - local SpawnUnit = event.initiator - if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then - local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) - if SpawnGroup then - self:T( { "Landed event:" .. SpawnUnit:getName(), event } ) - self.Landed = true - self:T( "self.Landed = true" ) - if self.Landed and self.RepeatOnLanding then - local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) - self:T( { "Landed:", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) - self:ReSpawn( SpawnGroupIndex ) - end - end - end -end - ---- Will detect AIR Units shutting down their engines ... --- When the event takes place, and the method @{RepeatOnEngineShutDown} was called, the spawned Group will Re-SPAWN. --- But only when the Unit was registered to have landed. --- @param #SPAWN self --- @see _OnTakeOff --- @see _OnLand --- @todo Need to test for AIR Groups only... -function SPAWN:_OnEngineShutDown( event ) - self:F( self.SpawnTemplatePrefix, event ) - - local SpawnUnit = event.initiator - if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then - local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) - if SpawnGroup then - self:T( { "EngineShutDown event: " .. SpawnUnit:getName(), event } ) - if self.Landed and self.RepeatOnEngineShutDown then - local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) - self:T( { "EngineShutDown: ", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) - self:ReSpawn( SpawnGroupIndex ) - end - end - end -end - ---- This function is called automatically by the Spawning scheduler. --- It is the internal worker method SPAWNing new Groups on the defined time intervals. -function SPAWN:_Scheduler() - self:F( { "_Scheduler", self.SpawnTemplatePrefix, self.SpawnAliasPrefix, self.SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive } ) - - -- Validate if there are still groups left in the batch... - self:Spawn() - - return true -end - -function SPAWN:_SpawnCleanUpScheduler() - self:F( { "CleanUp Scheduler:", self.SpawnTemplatePrefix } ) - - local SpawnCursor - local SpawnGroup, SpawnCursor = self:GetFirstAliveGroup( SpawnCursor ) - - self:T( { "CleanUp Scheduler:", SpawnGroup } ) - - while SpawnGroup do - - if SpawnGroup:AllOnGround() and SpawnGroup:GetMaxVelocity() < 1 then - if not self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] then - self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = timer.getTime() - else - if self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] + self.SpawnCleanUpInterval < timer.getTime() then - self:T( { "CleanUp Scheduler:", "Cleaning:", SpawnGroup } ) - SpawnGroup:Destroy() - end - end - else - self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = nil - end - - SpawnGroup, SpawnCursor = self:GetNextAliveGroup( SpawnCursor ) - - self:T( { "CleanUp Scheduler:", SpawnGroup } ) - - end - - return true -- Repeat - -end ---- Limit the simultaneous movement of Groups within a running Mission. --- This module is defined to improve the performance in missions, and to bring additional realism for GROUND vehicles. --- Performance: If in a DCSRTE there are a lot of moving GROUND units, then in a multi player mission, this WILL create lag if --- the main DCS execution core of your CPU is fully utilized. So, this class will limit the amount of simultaneous moving GROUND units --- on defined intervals (currently every minute). --- @module MOVEMENT - -Include.File( "Routines" ) - ---- the MOVEMENT class --- @type -MOVEMENT = { - ClassName = "MOVEMENT", -} - ---- Creates the main object which is handling the GROUND forces movement. --- @param table{string,...}|string MovePrefixes is a table of the Prefixes (names) of the GROUND Groups that need to be controlled by the MOVEMENT Object. --- @param number MoveMaximum is a number that defines the maximum amount of GROUND Units to be moving during one minute. --- @return MOVEMENT --- @usage --- -- Limit the amount of simultaneous moving units on the ground to prevent lag. --- Movement_US_Platoons = MOVEMENT:New( { 'US Tank Platoon Left', 'US Tank Platoon Middle', 'US Tank Platoon Right', 'US CH-47D Troops' }, 15 ) - -function MOVEMENT:New( MovePrefixes, MoveMaximum ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { MovePrefixes, MoveMaximum } ) - - if type( MovePrefixes ) == 'table' then - self.MovePrefixes = MovePrefixes - else - self.MovePrefixes = { MovePrefixes } - end - self.MoveCount = 0 -- The internal counter of the amount of Moveing the has happened since MoveStart. - self.MoveMaximum = MoveMaximum -- Contains the Maximum amount of units that are allowed to move... - self.AliveUnits = 0 -- Contains the counter how many units are currently alive - self.MoveUnits = {} -- Reflects if the Moving for this MovePrefixes is going to be scheduled or not. - - _EVENTDISPATCHER:OnBirth( self.OnBirth, self ) - --- self:AddEvent( world.event.S_EVENT_BIRTH, self.OnBirth ) --- --- self:EnableEvents() - - self:ScheduleStart() - - return self -end - ---- Call this function to start the MOVEMENT scheduling. -function MOVEMENT:ScheduleStart() - self:F() - --self.MoveFunction = routines.scheduleFunction( self._Scheduler, { self }, timer.getTime() + 1, 120 ) - self.MoveFunction = SCHEDULER:New( self, self._Scheduler, {}, 1, 120 ) -end - ---- Call this function to stop the MOVEMENT scheduling. --- @todo need to implement it ... Forgot. -function MOVEMENT:ScheduleStop() - self:F() - -end - ---- Captures the birth events when new Units were spawned. --- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. -function MOVEMENT:OnBirth( Event ) - self:F( { Event } ) - - if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line - if Event.IniDCSUnit then - self:T( "Birth object : " .. Event.IniDCSUnitName ) - if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then - for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do - if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then - self.AliveUnits = self.AliveUnits + 1 - self.MoveUnits[Event.IniDCSUnitName] = Event.IniDCSGroupName - self:T( self.AliveUnits ) - end - end - end - end - _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) - _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) - end - -end - ---- Captures the Dead or Crash events when Units crash or are destroyed. --- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. -function MOVEMENT:OnDeadOrCrash( Event ) - self:F( { Event } ) - - if Event.IniDCSUnit then - self:T( "Dead object : " .. Event.IniDCSUnitName ) - for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do - if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then - self.AliveUnits = self.AliveUnits - 1 - self.MoveUnits[Event.IniDCSUnitName] = nil - self:T( self.AliveUnits ) - end - end - end -end - ---- This function is called automatically by the MOVEMENT scheduler. A new function is scheduled when MoveScheduled is true. -function MOVEMENT:_Scheduler() - self:F( { self.MovePrefixes, self.MoveMaximum, self.AliveUnits, self.MovementGroups } ) - - if self.AliveUnits > 0 then - local MoveProbability = ( self.MoveMaximum * 100 ) / self.AliveUnits - self:T( 'Move Probability = ' .. MoveProbability ) - - for MovementUnitName, MovementGroupName in pairs( self.MoveUnits ) do - local MovementGroup = Group.getByName( MovementGroupName ) - if MovementGroup and MovementGroup:isExist() then - local MoveOrStop = math.random( 1, 100 ) - self:T( 'MoveOrStop = ' .. MoveOrStop ) - if MoveOrStop <= MoveProbability then - self:T( 'Group continues moving = ' .. MovementGroupName ) - trigger.action.groupContinueMoving( MovementGroup ) - else - self:T( 'Group stops moving = ' .. MovementGroupName ) - trigger.action.groupStopMoving( MovementGroup ) - end - else - self.MoveUnits[MovementUnitName] = nil - end - end - end - return true -end ---- Provides defensive behaviour to a set of SAM sites within a running Mission. --- @module Sead --- @author to be searched on the forum --- @author (co) Flightcontrol (Modified and enriched with functionality) - -Include.File( "Routines" ) -Include.File( "Event" ) -Include.File( "Base" ) -Include.File( "Mission" ) -Include.File( "Client" ) -Include.File( "Task" ) - ---- The SEAD class --- @type SEAD --- @extends Base#BASE -SEAD = { - ClassName = "SEAD", - TargetSkill = { - Average = { Evade = 50, DelayOff = { 10, 25 }, DelayOn = { 10, 30 } } , - Good = { Evade = 30, DelayOff = { 8, 20 }, DelayOn = { 20, 40 } } , - High = { Evade = 15, DelayOff = { 5, 17 }, DelayOn = { 30, 50 } } , - Excellent = { Evade = 10, DelayOff = { 3, 10 }, DelayOn = { 30, 60 } } - }, - SEADGroupPrefixes = {} -} - ---- Creates the main object which is handling defensive actions for SA sites or moving SA vehicles. --- When an anti radiation missile is fired (KH-58, KH-31P, KH-31A, KH-25MPU, HARM missiles), the SA will shut down their radars and will take evasive actions... --- Chances are big that the missile will miss. --- @param table{string,...}|string SEADGroupPrefixes which is a table of Prefixes of the SA Groups in the DCSRTE on which evasive actions need to be taken. --- @return SEAD --- @usage --- -- CCCP SEAD Defenses --- -- Defends the Russian SA installations from SEAD attacks. --- SEAD_RU_SAM_Defenses = SEAD:New( { 'RU SA-6 Kub', 'RU SA-6 Defenses', 'RU MI-26 Troops', 'RU Attack Gori' } ) -function SEAD:New( SEADGroupPrefixes ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( SEADGroupPrefixes ) - if type( SEADGroupPrefixes ) == 'table' then - for SEADGroupPrefixID, SEADGroupPrefix in pairs( SEADGroupPrefixes ) do - self.SEADGroupPrefixes[SEADGroupPrefix] = SEADGroupPrefix - end - else - self.SEADGroupNames[SEADGroupPrefixes] = SEADGroupPrefixes - end - _EVENTDISPATCHER:OnShot( self.EventShot, self ) - - return self -end - ---- 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. --- @see SEAD -function SEAD:EventShot( Event ) - self:F( { Event } ) - - local SEADUnit = Event.IniDCSUnit - local SEADUnitName = Event.IniDCSUnitName - local SEADWeapon = Event.Weapon -- Identify the weapon fired - local SEADWeaponName = Event.WeaponName -- return weapon type - --trigger.action.outText( string.format("Alerte, depart missile " ..string.format(SEADWeaponName)), 20) --debug message - -- Start of the 2nd loop - self:T( "Missile Launched = " .. SEADWeaponName ) - if SEADWeaponName == "KH-58" or SEADWeaponName == "KH-25MPU" or SEADWeaponName == "AGM-88" or SEADWeaponName == "KH-31A" or SEADWeaponName == "KH-31P" then -- Check if the missile is a SEAD - local _evade = math.random (1,100) -- random number for chance of evading action - local _targetMim = Event.Weapon:getTarget() -- Identify target - local _targetMimname = Unit.getName(_targetMim) - local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) - local _targetMimgroupName = _targetMimgroup:getName() - local _targetMimcont= _targetMimgroup:getController() - local _targetskill = _DATABASE.Templates.Units[_targetMimname].Template.skill - self:T( self.SEADGroupPrefixes ) - self:T( _targetMimgroupName ) - local SEADGroupFound = false - for SEADGroupPrefixID, SEADGroupPrefix in pairs( self.SEADGroupPrefixes ) do - if string.find( _targetMimgroupName, SEADGroupPrefix, 1, true ) then - SEADGroupFound = true - self:T( 'Group Found' ) - break - end - end - if SEADGroupFound == true then - if _targetskill == "Random" then -- when skill is random, choose a skill - local Skills = { "Average", "Good", "High", "Excellent" } - _targetskill = Skills[ math.random(1,4) ] - end - self:T( _targetskill ) -- debug message for skill check - if self.TargetSkill[_targetskill] then - if (_evade > self.TargetSkill[_targetskill].Evade) then - self:T( string.format("Evading, target skill " ..string.format(_targetskill)) ) --debug message - local _targetMim = Weapon.getTarget(SEADWeapon) - local _targetMimname = Unit.getName(_targetMim) - local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) - local _targetMimcont= _targetMimgroup:getController() - routines.groupRandomDistSelf(_targetMimgroup,300,'Diamond',250,20) -- move randomly - local SuppressedGroups1 = {} -- unit suppressed radar off for a random time - local function SuppressionEnd1(id) - id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) - SuppressedGroups1[id.groupName] = nil - end - local id = { - groupName = _targetMimgroup, - ctrl = _targetMimcont - } - local delay1 = math.random(self.TargetSkill[_targetskill].DelayOff[1], self.TargetSkill[_targetskill].DelayOff[2]) - if SuppressedGroups1[id.groupName] == nil then - SuppressedGroups1[id.groupName] = { - SuppressionEndTime1 = timer.getTime() + delay1, - SuppressionEndN1 = SuppressionEndCounter1 --Store instance of SuppressionEnd() scheduled function - } - Controller.setOption(_targetMimcont, AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) - timer.scheduleFunction(SuppressionEnd1, id, SuppressedGroups1[id.groupName].SuppressionEndTime1) --Schedule the SuppressionEnd() function - --trigger.action.outText( string.format("Radar Off " ..string.format(delay1)), 20) - end - - local SuppressedGroups = {} - local function SuppressionEnd(id) - id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.RED) - SuppressedGroups[id.groupName] = nil - end - local id = { - groupName = _targetMimgroup, - ctrl = _targetMimcont - } - local delay = math.random(self.TargetSkill[_targetskill].DelayOn[1], self.TargetSkill[_targetskill].DelayOn[2]) - if SuppressedGroups[id.groupName] == nil then - SuppressedGroups[id.groupName] = { - SuppressionEndTime = timer.getTime() + delay, - SuppressionEndN = SuppressionEndCounter --Store instance of SuppressionEnd() scheduled function - } - timer.scheduleFunction(SuppressionEnd, id, SuppressedGroups[id.groupName].SuppressionEndTime) --Schedule the SuppressionEnd() function - --trigger.action.outText( string.format("Radar On " ..string.format(delay)), 20) - end - end - end - end - end -end ---- Taking the lead of AI escorting your flight. --- --- @{#ESCORT} class --- ================ --- The @{#ESCORT} class allows you to interact with escorting AI on your flight and take the lead. --- Each escorting group can be commanded with a whole set of radio commands (radio menu in your flight, and then F10). --- --- The radio commands will vary according the category of the group. The richest set of commands are with Helicopters and AirPlanes. --- Ships and Ground troops will have a more limited set, but they can provide support through the bombing of targets designated by the other escorts. --- --- RADIO MENUs that can be created: --- ================================ --- Find a summary below of the current available commands: --- --- Navigation ...: --- --------------- --- Escort group navigation functions: --- --- * **"Join-Up and Follow at x meters":** The escort group fill follow you at about x meters, and they will follow you. --- * **"Flare":** Provides menu commands to let the escort group shoot a flare in the air in a color. --- * **"Smoke":** Provides menu commands to let the escort group smoke the air in a color. Note that smoking is only available for ground and naval troops. --- --- Hold position ...: --- ------------------ --- Escort group navigation functions: --- --- * **"At current location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. --- * **"At client location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. --- --- Report targets ...: --- ------------------- --- Report targets will make the escort group to report any target that it identifies within a 8km range. Any detected target can be attacked using the 4. Attack nearby targets function. (see below). --- --- * **"Report now":** Will report the current detected targets. --- * **"Report targets on":** Will make the escort group to report detected targets and will fill the "Attack nearby targets" menu list. --- * **"Report targets off":** Will stop detecting targets. --- --- Scan targets ...: --- ----------------- --- Menu items to pop-up the escort group for target scanning. After scanning, the escort group will resume with the mission or defined task. --- --- * **"Scan targets 30 seconds":** Scan 30 seconds for targets. --- * **"Scan targets 60 seconds":** Scan 60 seconds for targets. --- --- Attack targets ...: --- ------------------- --- This menu item will list all detected targets within a 15km range. Depending on the level of detection (known/unknown) and visuality, the targets type will also be listed. --- --- Request assistance from ...: --- ---------------------------- --- This menu item will list all detected targets within a 15km range, as with the menu item **Attack Targets**. --- This menu item allows to request attack support from other escorts supporting the current client group. --- eg. the function allows a player to request support from the Ship escort to attack a target identified by the Plane escort with its Tomahawk missiles. --- eg. the function allows a player to request support from other Planes escorting to bomb the unit with illumination missiles or bombs, so that the main plane escort can attack the area. --- --- ROE ...: --- -------- --- Sets the Rules of Engagement (ROE) of the escort group when in flight. --- --- * **"Hold Fire":** The escort group will hold fire. --- * **"Return Fire":** The escort group will return fire. --- * **"Open Fire":** The escort group will open fire on designated targets. --- * **"Weapon Free":** The escort group will engage with any target. --- --- Evasion ...: --- ------------ --- Will define the evasion techniques that the escort group will perform during flight or combat. --- --- * **"Fight until death":** The escort group will have no reaction to threats. --- * **"Use flares, chaff and jammers":** The escort group will use passive defense using flares and jammers. No evasive manoeuvres are executed. --- * **"Evade enemy fire":** The rescort group will evade enemy fire before firing. --- * **"Go below radar and evade fire":** The escort group will perform evasive vertical manoeuvres. --- --- Resume Mission ...: --- ------------------- --- Escort groups can have their own mission. This menu item will allow the escort group to resume their Mission from a given waypoint. --- Note that this is really fantastic, as you now have the dynamic of taking control of the escort groups, and allowing them to resume their path or mission. --- --- ESCORT construction methods. --- ============================ --- Create a new SPAWN object with the @{#ESCORT.New} method: --- --- * @{#ESCORT.New}: Creates a new ESCORT object from a @{Group#GROUP} for a @{Client#CLIENT}, with an optional briefing text. --- --- ESCORT initialization methods. --- ============================== --- The following menus are created within the RADIO MENU of an active unit hosted by a player: --- --- * @{#ESCORT.MenuFollowAt}: Creates a menu to make the escort follow the client. --- * @{#ESCORT.MenuHoldAtEscortPosition}: Creates a menu to hold the escort at its current position. --- * @{#ESCORT.MenuHoldAtLeaderPosition}: Creates a menu to hold the escort at the client position. --- * @{#ESCORT.MenuScanForTargets}: Creates a menu so that the escort scans targets. --- * @{#ESCORT.MenuFlare}: Creates a menu to disperse flares. --- * @{#ESCORT.MenuSmoke}: Creates a menu to disparse smoke. --- * @{#ESCORT.MenuReportTargets}: Creates a menu so that the escort reports targets. --- * @{#ESCORT.MenuReportPosition}: Creates a menu so that the escort reports its current position from bullseye. --- * @{#ESCORT.MenuAssistedAttack: Creates a menu so that the escort supportes assisted attack from other escorts with the client. --- * @{#ESCORT.MenuROE: Creates a menu structure to set the rules of engagement of the escort. --- * @{#ESCORT.MenuEvasion: Creates a menu structure to set the evasion techniques when the escort is under threat. --- * @{#ESCORT.MenuResumeMission}: Creates a menu structure so that the escort can resume from a waypoint. --- --- @module Escort --- @author FlightControl - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Database" ) -Include.File( "Group" ) -Include.File( "Zone" ) - ---- --- @type ESCORT --- @extends Base#BASE --- @field Client#CLIENT EscortClient --- @field Group#GROUP EscortGroup --- @field #string EscortName --- @field #ESCORT.MODE EscortMode The mode the escort is in. --- @field #number FollowScheduler The id of the _FollowScheduler function. --- @field #boolean ReportTargets If true, nearby targets are reported. --- @Field DCSTypes#AI.Option.Air.val.ROE OptionROE Which ROE is set to the EscortGroup. --- @field DCSTypes#AI.Option.Air.val.REACTION_ON_THREAT OptionReactionOnThreat Which REACTION_ON_THREAT is set to the EscortGroup. --- @field Menu#MENU_CLIENT EscortMenuResumeMission -ESCORT = { - ClassName = "ESCORT", - EscortName = nil, -- The Escort Name - EscortClient = nil, - EscortGroup = nil, - EscortMode = nil, - MODE = { - FOLLOW = 1, - MISSION = 2, - }, - Targets = {}, -- The identified targets - FollowScheduler = nil, - ReportTargets = true, - OptionROE = AI.Option.Air.val.ROE.OPEN_FIRE, - OptionReactionOnThreat = AI.Option.Air.val.REACTION_ON_THREAT.ALLOW_ABORT_MISSION, - TaskPoints = {} -} - ---- ESCORT.Mode class --- @type ESCORT.MODE --- @field #number FOLLOW --- @field #number MISSION - ---- MENUPARAM type --- @type MENUPARAM --- @field #ESCORT ParamSelf --- @field #Distance ParamDistance --- @field #function ParamFunction --- @field #string ParamMessage - ---- ESCORT class constructor for an AI group --- @param #ESCORT self --- @param Client#CLIENT EscortClient The client escorted by the EscortGroup. --- @param Group#GROUP EscortGroup The group AI escorting the EscortClient. --- @param #string EscortName Name of the escort. --- @return #ESCORT self -function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( { EscortClient, EscortGroup, EscortName } ) - - self.EscortClient = EscortClient -- Client#CLIENT - self.EscortGroup = EscortGroup -- Group#GROUP - self.EscortName = EscortName - self.EscortBriefing = EscortBriefing - - self:T( EscortGroup:GetClassNameAndID() ) - - -- Set EscortGroup known at EscortClient. - if not self.EscortClient._EscortGroups then - self.EscortClient._EscortGroups = {} - end - - if not self.EscortClient._EscortGroups[EscortGroup:GetName()] then - self.EscortClient._EscortGroups[EscortGroup:GetName()] = {} - self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortGroup = self.EscortGroup - self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortName = self.EscortName - self.EscortClient._EscortGroups[EscortGroup:GetName()].Targets = {} - self.EscortMode = ESCORT.MODE.FOLLOW - end - - - self.EscortMenu = MENU_CLIENT:New( self.EscortClient, self.EscortName ) - - self.EscortGroup:WayPointInitialize(1) - - self.EscortGroup:OptionROTVertical() - self.EscortGroup:OptionROEOpenFire() - - EscortGroup:MessageToClient( EscortGroup:GetCategoryName() .. " '" .. EscortName .. "' (" .. EscortGroup:GetCallsign() .. ") reporting! " .. - "We're escorting your flight. " .. - "Use the Radio Menu and F10 and use the options under + " .. EscortName .. "\n", - 60, EscortClient - ) - - return self -end - - ---- Defines the default menus --- @param #ESCORT self --- @return #ESCORT -function ESCORT:Menus() - self:F() - - self:MenuFollowAt( 100 ) - self:MenuFollowAt( 200 ) - self:MenuFollowAt( 300 ) - self:MenuFollowAt( 400 ) - - self:MenuScanForTargets( 100, 60 ) - - self:MenuHoldAtEscortPosition( 30 ) - self:MenuHoldAtLeaderPosition( 30 ) - - self:MenuFlare() - self:MenuSmoke() - - self:MenuReportTargets( 60 ) - self:MenuAssistedAttack() - self:MenuROE() - self:MenuEvasion() - self:MenuResumeMission() - - return self -end - - - ---- Defines a menu slot to let the escort Join and Follow you at a certain distance. --- This menu will appear under **Navigation**. --- @param #ESCORT self --- @param DCSTypes#Distance Distance The distance in meters that the escort needs to follow the client. --- @return #ESCORT -function ESCORT:MenuFollowAt( Distance ) - self:F(Distance) - - if self.EscortGroup:IsAir() then - if not self.EscortMenuReportNavigation then - self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) - end - - if not self.EscortMenuJoinUpAndFollow then - self.EscortMenuJoinUpAndFollow = {} - end - - self.EscortMenuJoinUpAndFollow[#self.EscortMenuJoinUpAndFollow+1] = MENU_CLIENT_COMMAND:New( self.EscortClient, "Join-Up and Follow at " .. Distance, self.EscortMenuReportNavigation, ESCORT._JoinUpAndFollow, { ParamSelf = self, ParamDistance = Distance } ) - - self.EscortMode = ESCORT.MODE.FOLLOW - end - - return self -end - ---- Defines a menu slot to let the escort hold at their current position and stay low with a specified height during a specified time in seconds. --- This menu will appear under **Hold position**. --- @param #ESCORT self --- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. --- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. --- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. --- @return #ESCORT --- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. -function ESCORT:MenuHoldAtEscortPosition( Height, Seconds, MenuTextFormat ) - self:F( { Height, Seconds, MenuTextFormat } ) - - if self.EscortGroup:IsAir() then - - if not self.EscortMenuHold then - self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) - end - - if not Height then - Height = 30 - end - - if not Seconds then - Seconds = 0 - end - - local MenuText = "" - if not MenuTextFormat then - if Seconds == 0 then - MenuText = string.format( "Hold at %d meter", Height ) - else - MenuText = string.format( "Hold at %d meter for %d seconds", Height, Seconds ) - end - else - if Seconds == 0 then - MenuText = string.format( MenuTextFormat, Height ) - else - MenuText = string.format( MenuTextFormat, Height, Seconds ) - end - end - - if not self.EscortMenuHoldPosition then - self.EscortMenuHoldPosition = {} - end - - self.EscortMenuHoldPosition[#self.EscortMenuHoldPosition+1] = MENU_CLIENT_COMMAND - :New( - self.EscortClient, - MenuText, - self.EscortMenuHold, - ESCORT._HoldPosition, - { ParamSelf = self, - ParamOrbitGroup = self.EscortGroup, - ParamHeight = Height, - ParamSeconds = Seconds - } - ) - end - - return self -end - - ---- Defines a menu slot to let the escort hold at the client position and stay low with a specified height during a specified time in seconds. --- This menu will appear under **Navigation**. --- @param #ESCORT self --- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. --- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. --- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. --- @return #ESCORT --- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. -function ESCORT:MenuHoldAtLeaderPosition( Height, Seconds, MenuTextFormat ) - self:F( { Height, Seconds, MenuTextFormat } ) - - if self.EscortGroup:IsAir() then - - if not self.EscortMenuHold then - self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) - end - - if not Height then - Height = 30 - end - - if not Seconds then - Seconds = 0 - end - - local MenuText = "" - if not MenuTextFormat then - if Seconds == 0 then - MenuText = string.format( "Rejoin and hold at %d meter", Height ) - else - MenuText = string.format( "Rejoin and hold at %d meter for %d seconds", Height, Seconds ) - end - else - if Seconds == 0 then - MenuText = string.format( MenuTextFormat, Height ) - else - MenuText = string.format( MenuTextFormat, Height, Seconds ) - end - end - - if not self.EscortMenuHoldAtLeaderPosition then - self.EscortMenuHoldAtLeaderPosition = {} - end - - self.EscortMenuHoldAtLeaderPosition[#self.EscortMenuHoldAtLeaderPosition+1] = MENU_CLIENT_COMMAND - :New( - self.EscortClient, - MenuText, - self.EscortMenuHold, - ESCORT._HoldPosition, - { ParamSelf = self, - ParamOrbitGroup = self.EscortClient, - ParamHeight = Height, - ParamSeconds = Seconds - } - ) - end - - return self -end - ---- Defines a menu slot to let the escort scan for targets at a certain height for a certain time in seconds. --- This menu will appear under **Scan targets**. --- @param #ESCORT self --- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. --- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. --- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. --- @return #ESCORT -function ESCORT:MenuScanForTargets( Height, Seconds, MenuTextFormat ) - self:F( { Height, Seconds, MenuTextFormat } ) - - if self.EscortGroup:IsAir() then - if not self.EscortMenuScan then - self.EscortMenuScan = MENU_CLIENT:New( self.EscortClient, "Scan for targets", self.EscortMenu ) - end - - if not Height then - Height = 100 - end - - if not Seconds then - Seconds = 30 - end - - local MenuText = "" - if not MenuTextFormat then - if Seconds == 0 then - MenuText = string.format( "At %d meter", Height ) - else - MenuText = string.format( "At %d meter for %d seconds", Height, Seconds ) - end - else - if Seconds == 0 then - MenuText = string.format( MenuTextFormat, Height ) - else - MenuText = string.format( MenuTextFormat, Height, Seconds ) - end - end - - if not self.EscortMenuScanForTargets then - self.EscortMenuScanForTargets = {} - end - - self.EscortMenuScanForTargets[#self.EscortMenuScanForTargets+1] = MENU_CLIENT_COMMAND - :New( - self.EscortClient, - MenuText, - self.EscortMenuScan, - ESCORT._ScanTargets, - { ParamSelf = self, - ParamScanDuration = 30 - } - ) - end - - return self -end - - - ---- Defines a menu slot to let the escort disperse a flare in a certain color. --- This menu will appear under **Navigation**. --- The flare will be fired from the first unit in the group. --- @param #ESCORT self --- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. --- @return #ESCORT -function ESCORT:MenuFlare( MenuTextFormat ) - self:F() - - if not self.EscortMenuReportNavigation then - self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) - end - - local MenuText = "" - if not MenuTextFormat then - MenuText = "Flare" - else - MenuText = MenuTextFormat - end - - if not self.EscortMenuFlare then - self.EscortMenuFlare = MENU_CLIENT:New( self.EscortClient, MenuText, self.EscortMenuReportNavigation, ESCORT._Flare, { ParamSelf = self } ) - self.EscortMenuFlareGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Green, ParamMessage = "Released a green flare!" } ) - self.EscortMenuFlareRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Red, ParamMessage = "Released a red flare!" } ) - self.EscortMenuFlareWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.White, ParamMessage = "Released a white flare!" } ) - self.EscortMenuFlareYellow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release yellow flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Yellow, ParamMessage = "Released a yellow flare!" } ) - end - - return self -end - ---- Defines a menu slot to let the escort disperse a smoke in a certain color. --- This menu will appear under **Navigation**. --- Note that smoke menu options will only be displayed for ships and ground units. Not for air units. --- The smoke will be fired from the first unit in the group. --- @param #ESCORT self --- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. --- @return #ESCORT -function ESCORT:MenuSmoke( MenuTextFormat ) - self:F() - - if not self.EscortGroup:IsAir() then - if not self.EscortMenuReportNavigation then - self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) - end - - local MenuText = "" - if not MenuTextFormat then - MenuText = "Smoke" - else - MenuText = MenuTextFormat - end - - if not self.EscortMenuSmoke then - self.EscortMenuSmoke = MENU_CLIENT:New( self.EscortClient, "Smoke", self.EscortMenuReportNavigation, ESCORT._Smoke, { ParamSelf = self } ) - self.EscortMenuSmokeGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Green, ParamMessage = "Releasing green smoke!" } ) - self.EscortMenuSmokeRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Red, ParamMessage = "Releasing red smoke!" } ) - self.EscortMenuSmokeWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.White, ParamMessage = "Releasing white smoke!" } ) - self.EscortMenuSmokeOrange = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release orange smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Orange, ParamMessage = "Releasing orange smoke!" } ) - self.EscortMenuSmokeBlue = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release blue smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Blue, ParamMessage = "Releasing blue smoke!" } ) - end - end - - return self -end - ---- Defines a menu slot to let the escort report their current detected targets with a specified time interval in seconds. --- This menu will appear under **Report targets**. --- Note that if a report targets menu is not specified, no targets will be detected by the escort, and the attack and assisted attack menus will not be displayed. --- @param #ESCORT self --- @param DCSTypes#Time Seconds Optional parameter that lets the escort report their current detected targets after specified time interval in seconds. The default time is 30 seconds. --- @return #ESCORT -function ESCORT:MenuReportTargets( Seconds ) - self:F( { Seconds } ) - - if not self.EscortMenuReportNearbyTargets then - self.EscortMenuReportNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Report targets", self.EscortMenu ) - end - - if not Seconds then - Seconds = 30 - end - - -- Report Targets - self.EscortMenuReportNearbyTargetsNow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets now!", self.EscortMenuReportNearbyTargets, ESCORT._ReportNearbyTargetsNow, { ParamSelf = self } ) - self.EscortMenuReportNearbyTargetsOn = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets on", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = true } ) - self.EscortMenuReportNearbyTargetsOff = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets off", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = false, } ) - - -- Attack Targets - self.EscortMenuAttackNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Attack targets", self.EscortMenu ) - - - --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, Seconds ) - self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, Seconds ) - - return self -end - ---- Defines a menu slot to let the escort attack its detected targets using assisted attack from another escort joined also with the client. --- This menu will appear under **Request assistance from**. --- Note that this method needs to be preceded with the method MenuReportTargets. --- @param #ESCORT self --- @return #ESCORT -function ESCORT:MenuAssistedAttack() - self:F() - - -- Request assistance from other escorts. - -- This is very useful to let f.e. an escorting ship attack a target detected by an escorting plane... - self.EscortMenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, "Request assistance from", self.EscortMenu ) - - return self -end - ---- Defines a menu to let the escort set its rules of engagement. --- All rules of engagement will appear under the menu **ROE**. --- @param #ESCORT self --- @return #ESCORT -function ESCORT:MenuROE( MenuTextFormat ) - self:F( MenuTextFormat ) - - if not self.EscortMenuROE then - -- Rules of Engagement - self.EscortMenuROE = MENU_CLIENT:New( self.EscortClient, "ROE", self.EscortMenu ) - if self.EscortGroup:OptionROEHoldFirePossible() then - self.EscortMenuROEHoldFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Hold Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEHoldFire(), ParamMessage = "Holding weapons!" } ) - end - if self.EscortGroup:OptionROEReturnFirePossible() then - self.EscortMenuROEReturnFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Return Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEReturnFire(), ParamMessage = "Returning fire!" } ) - end - if self.EscortGroup:OptionROEOpenFirePossible() then - self.EscortMenuROEOpenFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Open Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEOpenFire(), ParamMessage = "Opening fire on designated targets!!" } ) - end - if self.EscortGroup:OptionROEWeaponFreePossible() then - self.EscortMenuROEWeaponFree = MENU_CLIENT_COMMAND:New( self.EscortClient, "Weapon Free", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEWeaponFree(), ParamMessage = "Opening fire on targets of opportunity!" } ) - end - end - - return self -end - - ---- Defines a menu to let the escort set its evasion when under threat. --- All rules of engagement will appear under the menu **Evasion**. --- @param #ESCORT self --- @return #ESCORT -function ESCORT:MenuEvasion( MenuTextFormat ) - self:F( MenuTextFormat ) - - if self.EscortGroup:IsAir() then - if not self.EscortMenuEvasion then - -- Reaction to Threats - self.EscortMenuEvasion = MENU_CLIENT:New( self.EscortClient, "Evasion", self.EscortMenu ) - if self.EscortGroup:OptionROTNoReactionPossible() then - self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTNoReaction(), ParamMessage = "Fighting until death!" } ) - end - if self.EscortGroup:OptionROTPassiveDefensePossible() then - self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTPassiveDefense(), ParamMessage = "Defending using jammers, chaff and flares!" } ) - end - if self.EscortGroup:OptionROTEvadeFirePossible() then - self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTEvadeFire(), ParamMessage = "Evading on enemy fire!" } ) - end - if self.EscortGroup:OptionROTVerticalPossible() then - self.EscortMenuOptionEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTVertical(), ParamMessage = "Evading on enemy fire with vertical manoeuvres!" } ) - end - end - end - - return self -end - ---- Defines a menu to let the escort resume its mission from a waypoint on its route. --- All rules of engagement will appear under the menu **Resume mission from**. --- @param #ESCORT self --- @return #ESCORT -function ESCORT:MenuResumeMission() - self:F() - - if not self.EscortMenuResumeMission then - -- Mission Resume Menu Root - self.EscortMenuResumeMission = MENU_CLIENT:New( self.EscortClient, "Resume mission from", self.EscortMenu ) - end - - return self -end - - ---- @param #MENUPARAM MenuParam -function ESCORT._HoldPosition( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local OrbitGroup = MenuParam.ParamOrbitGroup -- Group#GROUP - local OrbitUnit = OrbitGroup:GetUnit(1) -- Unit#UNIT - local OrbitHeight = MenuParam.ParamHeight - local OrbitSeconds = MenuParam.ParamSeconds -- Not implemented yet - - routines.removeFunction( self.FollowScheduler ) - - local PointFrom = {} - local GroupPoint = EscortGroup:GetUnit(1):GetPointVec3() - PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.z - PointFrom.speed = 250 - PointFrom.type = AI.Task.WaypointType.TURNING_POINT - PointFrom.alt = GroupPoint.y - PointFrom.alt_type = AI.Task.AltitudeType.BARO - - local OrbitPoint = OrbitUnit:GetPointVec2() - local PointTo = {} - PointTo.x = OrbitPoint.x - PointTo.y = OrbitPoint.y - PointTo.speed = 250 - PointTo.type = AI.Task.WaypointType.TURNING_POINT - PointTo.alt = OrbitHeight - PointTo.alt_type = AI.Task.AltitudeType.BARO - PointTo.task = EscortGroup:TaskOrbitCircleAtVec2( OrbitPoint, OrbitHeight, 0 ) - - local Points = { PointFrom, PointTo } - - EscortGroup:OptionROEHoldFire() - EscortGroup:OptionROTPassiveDefense() - - EscortGroup:SetTask( EscortGroup:TaskRoute( Points ) ) - EscortGroup:MessageToClient( "Orbiting at location.", 10, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._JoinUpAndFollow( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - self.Distance = MenuParam.ParamDistance - - self:JoinUpAndFollow( EscortGroup, EscortClient, self.Distance ) -end - ---- JoinsUp and Follows a CLIENT. --- @param Escort#ESCORT self --- @param Group#GROUP EscortGroup --- @param Client#CLIENT EscortClient --- @param DCSTypes#Distance Distance -function ESCORT:JoinUpAndFollow( EscortGroup, EscortClient, Distance ) - self:F( { EscortGroup, EscortClient, Distance } ) - - if self.FollowScheduler then - routines.removeFunction( self.FollowScheduler ) - end - - EscortGroup:OptionROEHoldFire() - EscortGroup:OptionROTPassiveDefense() - - self.EscortMode = ESCORT.MODE.FOLLOW - - self.CT1 = 0 - self.GT1 = 0 - --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + 1, .5 ) - self.FollowScheduler = SCHEDULER:New( self, self._FollowScheduler, { Distance }, 1, .5, .1 ) - EscortGroup:MessageToClient( "Rejoining and Following at " .. Distance .. "!", 30, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._Flare( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local Color = MenuParam.ParamColor - local Message = MenuParam.ParamMessage - - EscortGroup:GetUnit(1):Flare( Color ) - EscortGroup:MessageToClient( Message, 10, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._Smoke( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local Color = MenuParam.ParamColor - local Message = MenuParam.ParamMessage - - EscortGroup:GetUnit(1):Smoke( Color ) - EscortGroup:MessageToClient( Message, 10, EscortClient ) -end - - ---- @param #MENUPARAM MenuParam -function ESCORT._ReportNearbyTargetsNow( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - self:_ReportTargetsScheduler() - -end - -function ESCORT._SwitchReportNearbyTargets( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - self.ReportTargets = MenuParam.ParamReportTargets - - if self.ReportTargets then - if not self.ReportTargetsScheduler then - --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, 30 ) - self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, 30 ) - end - else - routines.removeFunction( self.ReportTargetsScheduler ) - self.ReportTargetsScheduler = nil - end -end - ---- @param #MENUPARAM MenuParam -function ESCORT._ScanTargets( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local ScanDuration = MenuParam.ParamScanDuration - - if self.FollowScheduler then - routines.removeFunction( self.FollowScheduler ) - end - - self:T( { "FollowScheduler after removefunction: ", self.FollowScheduler } ) - - if EscortGroup:IsHelicopter() then - SCHEDULER:New( EscortGroup, EscortGroup.PushTask, - { EscortGroup:TaskControlled( - EscortGroup:TaskOrbitCircle( 200, 20 ), - EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) - ) - }, - 1 - ) - elseif EscortGroup:IsAirPlane() then - SCHEDULER:New( EscortGroup, EscortGroup.PushTask, - { EscortGroup:TaskControlled( - EscortGroup:TaskOrbitCircle( 1000, 500 ), - EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) - ) - }, - 1 - ) - end - - EscortGroup:MessageToClient( "Scanning targets for " .. ScanDuration .. " seconds.", ScanDuration, EscortClient ) - - if self.EscortMode == ESCORT.MODE.FOLLOW then - --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + ScanDuration, 1 ) - self.FollowScheduler:Start() - end - -end - -function _Resume( EscortGroup ) - env.info( '_Resume' ) - - local Escort = EscortGroup.Escort -- #ESCORT - env.info( "EscortMode = " .. Escort.EscortMode ) - if Escort.EscortMode == ESCORT.MODE.FOLLOW then - Escort:JoinUpAndFollow( EscortGroup, Escort.EscortClient, Escort.Distance ) - end - -end - ---- @param #MENUPARAM MenuParam -function ESCORT._AttackTarget( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT - - if self.FollowScheduler then - routines.removeFunction( self.FollowScheduler ) - end - - self:T( AttackUnit ) - - if EscortGroup:IsAir() then - EscortGroup:OptionROEOpenFire() - EscortGroup:OptionROTPassiveDefense() - EscortGroup.Escort = self -- Need to do this trick to get the reference for the escort in the _Resume function. --- routines.scheduleFunction( --- EscortGroup.PushTask, --- { EscortGroup, --- EscortGroup:TaskCombo( --- { EscortGroup:TaskAttackUnit( AttackUnit ), --- EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) --- } --- ) --- }, timer.getTime() + 10 --- ) - SCHEDULER:New( EscortGroup, - EscortGroup.PushTask, - { EscortGroup:TaskCombo( - { EscortGroup:TaskAttackUnit( AttackUnit ), - EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) - } - ) - }, 10 - ) - else --- routines.scheduleFunction( --- EscortGroup.PushTask, --- { EscortGroup, --- EscortGroup:TaskCombo( --- { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) --- } --- ) --- }, timer.getTime() + 10 --- ) - SCHEDULER:New( EscortGroup, - EscortGroup.PushTask, - { EscortGroup:TaskCombo( - { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) - } - ) - }, 10 - ) - end - EscortGroup:MessageToClient( "Engaging Designated Unit!", 10, EscortClient ) - - -end - ---- @param #MENUPARAM MenuParam -function ESCORT._AssistTarget( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - local EscortGroupAttack = MenuParam.ParamEscortGroup - local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT - - if self.FollowScheduler then - routines.removeFunction( self.FollowScheduler ) - end - - - self:T( AttackUnit ) - - if EscortGroupAttack:IsAir() then - EscortGroupAttack:OptionROEOpenFire() - EscortGroupAttack:OptionROTVertical() --- routines.scheduleFunction( --- EscortGroupAttack.PushTask, --- { EscortGroupAttack, --- EscortGroupAttack:TaskCombo( --- { EscortGroupAttack:TaskAttackUnit( AttackUnit ), --- EscortGroupAttack:TaskOrbitCircle( 500, 350 ) --- } --- ) --- }, timer.getTime() + 10 --- ) - SCHDULER:New( EscortGroupAttack, - EscortGroupAttack.PushTask, - { EscortGroupAttack:TaskCombo( - { EscortGroupAttack:TaskAttackUnit( AttackUnit ), - EscortGroupAttack:TaskOrbitCircle( 500, 350 ) - } - ) - }, 10 - ) - else --- routines.scheduleFunction( --- EscortGroupAttack.PushTask, --- { EscortGroupAttack, --- EscortGroupAttack:TaskCombo( --- { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) --- } --- ) --- }, timer.getTime() + 10 --- ) - SCHEDULER:New( EscortGroupAttack, - EscortGroupAttack.PushTask, - { EscortGroupAttack:TaskCombo( - { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) - } - ) - }, 10 - ) - end - EscortGroupAttack:MessageToClient( "Assisting with the destroying the enemy unit!", 10, EscortClient ) - -end - ---- @param #MENUPARAM MenuParam -function ESCORT._ROE( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local EscortROEFunction = MenuParam.ParamFunction - local EscortROEMessage = MenuParam.ParamMessage - - pcall( function() EscortROEFunction() end ) - EscortGroup:MessageToClient( EscortROEMessage, 10, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._ROT( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local EscortROTFunction = MenuParam.ParamFunction - local EscortROTMessage = MenuParam.ParamMessage - - pcall( function() EscortROTFunction() end ) - EscortGroup:MessageToClient( EscortROTMessage, 10, EscortClient ) -end - ---- @param #MENUPARAM MenuParam -function ESCORT._ResumeMission( MenuParam ) - - local self = MenuParam.ParamSelf - local EscortGroup = self.EscortGroup - local EscortClient = self.EscortClient - - local WayPoint = MenuParam.ParamWayPoint - - routines.removeFunction( self.FollowScheduler ) - self.FollowScheduler = nil - - local WayPoints = EscortGroup:GetTaskRoute() - self:T( WayPoint, WayPoints ) - - for WayPointIgnore = 1, WayPoint do - table.remove( WayPoints, 1 ) - end - - --routines.scheduleFunction( EscortGroup.SetTask, {EscortGroup, EscortGroup:TaskRoute( WayPoints ) }, timer.getTime() + 1 ) - SCHEDULER:New( EscortGroup, EscortGroup.SetTask, { EscortGroup:TaskRoute( WayPoints ) }, 1 ) - - EscortGroup:MessageToClient( "Resuming mission from waypoint " .. WayPoint .. ".", 10, EscortClient ) -end - ---- Registers the waypoints --- @param #ESCORT self --- @return #table -function ESCORT:RegisterRoute() - self:F() - - local EscortGroup = self.EscortGroup -- Group#GROUP - - local TaskPoints = EscortGroup:GetTaskRoute() - - self:T( TaskPoints ) - - return TaskPoints -end - ---- @param Escort#ESCORT self -function ESCORT:_FollowScheduler( FollowDistance ) - self:F( { FollowDistance }) - - if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then - - local ClientUnit = self.EscortClient:GetClientGroupUnit() - local GroupUnit = self.EscortGroup:GetUnit( 1 ) - - if self.CT1 == 0 and self.GT1 == 0 then - self.CV1 = ClientUnit:GetPointVec3() - self.CT1 = timer.getTime() - self.GV1 = GroupUnit:GetPointVec3() - self.GT1 = timer.getTime() - else - local CT1 = self.CT1 - local CT2 = timer.getTime() - local CV1 = self.CV1 - local CV2 = ClientUnit:GetPointVec3() - self.CT1 = CT2 - self.CV1 = CV2 - - local CD = ( ( CV2.x - CV1.x )^2 + ( CV2.y - CV1.y )^2 + ( CV2.z - CV1.z )^2 ) ^ 0.5 - local CT = CT2 - CT1 - - local CS = ( 3600 / CT ) * ( CD / 1000 ) - - self:T2( { "Client:", CS, CD, CT, CV2, CV1, CT2, CT1 } ) - - local GT1 = self.GT1 - local GT2 = timer.getTime() - local GV1 = self.GV1 - local GV2 = GroupUnit:GetPointVec3() - self.GT1 = GT2 - self.GV1 = GV2 - - local GD = ( ( GV2.x - GV1.x )^2 + ( GV2.y - GV1.y )^2 + ( GV2.z - GV1.z )^2 ) ^ 0.5 - local GT = GT2 - GT1 - - local GS = ( 3600 / GT ) * ( GD / 1000 ) - - self:T2( { "Group:", GS, GD, GT, GV2, GV1, GT2, GT1 } ) - - -- Calculate the group direction vector - local GV = { x = GV2.x - CV2.x, y = GV2.y - CV2.y, z = GV2.z - CV2.z } - - -- Calculate GH2, GH2 with the same height as CV2. - local GH2 = { x = GV2.x, y = CV2.y, z = GV2.z } - - -- Calculate the angle of GV to the orthonormal plane - local alpha = math.atan2( GV.z, GV.x ) - - -- Now we calculate the intersecting vector between the circle around CV2 with radius FollowDistance and GH2. - -- From the GeoGebra model: CVI = (x(CV2) + FollowDistance cos(alpha), y(GH2) + FollowDistance sin(alpha), z(CV2)) - local CVI = { x = CV2.x + FollowDistance * math.cos(alpha), - y = GH2.y, - z = CV2.z + FollowDistance * math.sin(alpha), - } - - -- Calculate the direction vector DV of the escort group. We use CVI as the base and CV2 as the direction. - local DV = { x = CV2.x - CVI.x, y = CV2.y - CVI.y, z = CV2.z - CVI.z } - - -- We now calculate the unary direction vector DVu, so that we can multiply DVu with the speed, which is expressed in meters / s. - -- We need to calculate this vector to predict the point the escort group needs to fly to according its speed. - -- The distance of the destination point should be far enough not to have the aircraft starting to swipe left to right... - local DVu = { x = DV.x / FollowDistance, y = DV.y / FollowDistance, z = DV.z / FollowDistance } - - -- Now we can calculate the group destination vector GDV. - local GDV = { x = DVu.x * CS * 8 + CVI.x, y = CVI.y, z = DVu.z * CS * 8 + CVI.z } - - --trigger.action.smoke( GDV, trigger.smokeColor.Red ) - self:T2( { "CV2:", CV2 } ) - self:T2( { "CVI:", CVI } ) - self:T2( { "GDV:", GDV } ) - - -- Measure distance between client and group - local CatchUpDistance = ( ( GDV.x - GV2.x )^2 + ( GDV.y - GV2.y )^2 + ( GDV.z - GV2.z )^2 ) ^ 0.5 - - -- The calculation of the Speed would simulate that the group would take 30 seconds to overcome - -- the requested Distance). - local Time = 10 - local CatchUpSpeed = ( CatchUpDistance - ( CS * 8.4 ) ) / Time - - local Speed = CS + CatchUpSpeed - if Speed < 0 then - Speed = 0 - end - - self:T( { "Client Speed, Escort Speed, Speed, FlyDistance, Time:", CS, GS, Speed, Distance, Time } ) - - -- Now route the escort to the desired point with the desired speed. - self.EscortGroup:TaskRouteToVec3( GDV, Speed / 3.6 ) -- DCS models speed in Mps (Miles per second) - end - return true - end - - return false -end - - ---- Report Targets Scheduler. --- @param #ESCORT self -function ESCORT:_ReportTargetsScheduler() - self:F( self.EscortGroup:GetName() ) - - if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then - local EscortGroupName = self.EscortGroup:GetName() - local EscortTargets = self.EscortGroup:GetDetectedTargets() - - local ClientEscortTargets = self.EscortClient._EscortGroups[EscortGroupName].Targets - - local EscortTargetMessages = "" - for EscortTargetID, EscortTarget in pairs( EscortTargets ) do - local EscortObject = EscortTarget.object - self:T( EscortObject ) - if EscortObject and EscortObject:isExist() and EscortObject.id_ < 50000000 then - - local EscortTargetUnit = UNIT:Find( EscortObject ) - local EscortTargetUnitName = EscortTargetUnit:GetName() - - - - -- local EscortTargetIsDetected, - -- EscortTargetIsVisible, - -- EscortTargetLastTime, - -- EscortTargetKnowType, - -- EscortTargetKnowDistance, - -- EscortTargetLastPos, - -- EscortTargetLastVelocity - -- = self.EscortGroup:IsTargetDetected( EscortObject ) - -- - -- self:T( { EscortTargetIsDetected, - -- EscortTargetIsVisible, - -- EscortTargetLastTime, - -- EscortTargetKnowType, - -- EscortTargetKnowDistance, - -- EscortTargetLastPos, - -- EscortTargetLastVelocity } ) - - - local EscortTargetUnitPositionVec3 = EscortTargetUnit:GetPointVec3() - local EscortPositionVec3 = self.EscortGroup:GetPointVec3() - local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + - ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + - ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 - ) ^ 0.5 / 1000 - - self:T( { self.EscortGroup:GetName(), EscortTargetUnit:GetName(), Distance, EscortTarget } ) - - if Distance <= 15 then - - if not ClientEscortTargets[EscortTargetUnitName] then - ClientEscortTargets[EscortTargetUnitName] = {} - end - ClientEscortTargets[EscortTargetUnitName].AttackUnit = EscortTargetUnit - ClientEscortTargets[EscortTargetUnitName].visible = EscortTarget.visible - ClientEscortTargets[EscortTargetUnitName].type = EscortTarget.type - ClientEscortTargets[EscortTargetUnitName].distance = EscortTarget.distance - else - if ClientEscortTargets[EscortTargetUnitName] then - ClientEscortTargets[EscortTargetUnitName] = nil - end - end - end - end - - self:T( { "Sorting Targets Table:", ClientEscortTargets } ) - table.sort( ClientEscortTargets, function( a, b ) return a.Distance < b.Distance end ) - self:T( { "Sorted Targets Table:", ClientEscortTargets } ) - - -- Remove the sub menus of the Attack menu of the Escort for the EscortGroup. - self.EscortMenuAttackNearbyTargets:RemoveSubMenus() - - if self.EscortMenuTargetAssistance then - self.EscortMenuTargetAssistance:RemoveSubMenus() - end - - --for MenuIndex = 1, #self.EscortMenuAttackTargets do - -- self:T( { "Remove Menu:", self.EscortMenuAttackTargets[MenuIndex] } ) - -- self.EscortMenuAttackTargets[MenuIndex] = self.EscortMenuAttackTargets[MenuIndex]:Remove() - --end - - - if ClientEscortTargets then - for ClientEscortTargetUnitName, ClientEscortTargetData in pairs( ClientEscortTargets ) do - - for ClientEscortGroupName, EscortGroupData in pairs( self.EscortClient._EscortGroups ) do - - if ClientEscortTargetData and ClientEscortTargetData.AttackUnit:IsAlive() then - - local EscortTargetMessage = "" - local EscortTargetCategoryName = ClientEscortTargetData.AttackUnit:GetCategoryName() - local EscortTargetCategoryType = ClientEscortTargetData.AttackUnit:GetTypeName() - if ClientEscortTargetData.type then - EscortTargetMessage = EscortTargetMessage .. EscortTargetCategoryName .. " (" .. EscortTargetCategoryType .. ") at " - else - EscortTargetMessage = EscortTargetMessage .. "Unknown target at " - end - - local EscortTargetUnitPositionVec3 = ClientEscortTargetData.AttackUnit:GetPointVec3() - local EscortPositionVec3 = self.EscortGroup:GetPointVec3() - local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + - ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + - ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 - ) ^ 0.5 / 1000 - - self:T( { self.EscortGroup:GetName(), ClientEscortTargetData.AttackUnit:GetName(), Distance, ClientEscortTargetData.AttackUnit } ) - if ClientEscortTargetData.visible == false then - EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " estimated km" - else - EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " km" - end - - if ClientEscortTargetData.visible then - EscortTargetMessage = EscortTargetMessage .. ", visual" - end - - if ClientEscortGroupName == EscortGroupName then - - MENU_CLIENT_COMMAND:New( self.EscortClient, - EscortTargetMessage, - self.EscortMenuAttackNearbyTargets, - ESCORT._AttackTarget, - { ParamSelf = self, - ParamUnit = ClientEscortTargetData.AttackUnit - } - ) - EscortTargetMessages = EscortTargetMessages .. "\n - " .. EscortTargetMessage - else - if self.EscortMenuTargetAssistance then - local MenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, EscortGroupData.EscortName, self.EscortMenuTargetAssistance ) - MENU_CLIENT_COMMAND:New( self.EscortClient, - EscortTargetMessage, - MenuTargetAssistance, - ESCORT._AssistTarget, - { ParamSelf = self, - ParamEscortGroup = EscortGroupData.EscortGroup, - ParamUnit = ClientEscortTargetData.AttackUnit - } - ) - end - end - else - ClientEscortTargetData = nil - end - end - end - - if EscortTargetMessages ~= "" and self.ReportTargets == true then - self.EscortGroup:MessageToClient( "Detected targets within 15 km range:" .. EscortTargetMessages:gsub("\n$",""), 20, self.EscortClient ) - else - self.EscortGroup:MessageToClient( "No targets detected!", 20, self.EscortClient ) - end - end - - if self.EscortMenuResumeMission then - self.EscortMenuResumeMission:RemoveSubMenus() - - -- if self.EscortMenuResumeWayPoints then - -- for MenuIndex = 1, #self.EscortMenuResumeWayPoints do - -- self:T( { "Remove Menu:", self.EscortMenuResumeWayPoints[MenuIndex] } ) - -- self.EscortMenuResumeWayPoints[MenuIndex] = self.EscortMenuResumeWayPoints[MenuIndex]:Remove() - -- end - -- end - - local TaskPoints = self:RegisterRoute() - for WayPointID, WayPoint in pairs( TaskPoints ) do - local EscortPositionVec3 = self.EscortGroup:GetPointVec3() - local Distance = ( ( WayPoint.x - EscortPositionVec3.x )^2 + - ( WayPoint.y - EscortPositionVec3.z )^2 - ) ^ 0.5 / 1000 - MENU_CLIENT_COMMAND:New( self.EscortClient, "Waypoint " .. WayPointID .. " at " .. string.format( "%.2f", Distance ).. "km", self.EscortMenuResumeMission, ESCORT._ResumeMission, { ParamSelf = self, ParamWayPoint = WayPointID } ) - end - end - return true - end - - return false -end ---- Provides missile training functions. --- --- @{#MISSILETRAINER} class --- ======================== --- 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. --- --- When running a mission where MISSILETRAINER is used, the following radio menu structure ( 'Radio Menu' -> 'Other (F10)' -> 'MissileTrainer' ) options are available for the players: --- --- * **Messages**: Menu to configure all messages. --- * **Messages On**: Show all messages. --- * **Messages Off**: Disable all messages. --- * **Tracking**: Menu to configure missile tracking messages. --- * **To All**: Shows missile tracking messages to all players. --- * **To Target**: Shows missile tracking messages only to the player where the missile is targetted at. --- * **Tracking On**: Show missile tracking messages. --- * **Tracking Off**: Disable missile tracking messages. --- * **Frequency Increase**: Increases the missile tracking message frequency with one second. --- * **Frequency Decrease**: Decreases the missile tracking message frequency with one second. --- * **Alerts**: Menu to configure alert messages. --- * **To All**: Shows alert messages to all players. --- * **To Target**: Shows alert messages only to the player where the missile is (was) targetted at. --- * **Hits On**: Show missile hit alert messages. --- * **Hits Off**: Disable missile hit alert messages. --- * **Launches On**: Show missile launch messages. --- * **Launches Off**: Disable missile launch messages. --- * **Details**: Menu to configure message details. --- * **Range On**: Shows range information when a missile is fired to a target. --- * **Range Off**: Disable range information when a missile is fired to a target. --- * **Bearing On**: Shows bearing information when a missile is fired to a target. --- * **Bearing Off**: Disable bearing information when a missile is fired to a target. --- * **Distance**: Menu to configure the distance when a missile needs to be destroyed when near to a player, during tracking. This will improve/influence hit calculation accuracy, but has the risk of damaging the aircraft when the missile reaches the aircraft before the distance is measured. --- * **50 meter**: Destroys the missile when the distance to the aircraft is below or equal to 50 meter. --- * **100 meter**: Destroys the missile when the distance to the aircraft is below or equal to 100 meter. --- * **150 meter**: Destroys the missile when the distance to the aircraft is below or equal to 150 meter. --- * **200 meter**: Destroys the missile when the distance to the aircraft is below or equal to 200 meter. --- --- --- 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: --- --- * @{#MISSILETRAINER.InitMessagesOnOff}: Sets by default the display of any message to be ON or OFF. --- * @{#MISSILETRAINER.InitTrackingToAll}: Sets by default the missile tracking report for all players or only for those missiles targetted to you. --- * @{#MISSILETRAINER.InitTrackingOnOff}: Sets by default the display of missile tracking report to be ON or OFF. --- * @{#MISSILETRAINER.InitTrackingFrequency}: Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. --- * @{#MISSILETRAINER.InitAlertsToAll}: Sets by default the display of alerts to be shown to all players or only to you. --- * @{#MISSILETRAINER.InitAlertsHitsOnOff}: Sets by default the display of hit alerts ON or OFF. --- * @{#MISSILETRAINER.InitAlertsLaunchesOnOff}: Sets by default the display of launch alerts ON or OFF. --- * @{#MISSILETRAINER.InitRangeOnOff}: Sets by default the display of range information of missiles ON of OFF. --- * @{#MISSILETRAINER.InitBearingOnOff}: Sets by default the display of bearing information of missiles ON of OFF. --- * @{#MISSILETRAINER.InitMenusOnOff}: Allows to configure the options through the radio menu. --- --- @module MissileTrainer --- @author FlightControl - - -Include.File( "Client" ) -Include.File( "Scheduler" ) - ---- The MISSILETRAINER class --- @type MISSILETRAINER --- @extends Base#BASE -MISSILETRAINER = { - ClassName = "MISSILETRAINER", -} - ---- 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. --- @param #MISSILETRAINER self --- @param #number Distance The distance in meters when a tracked missile needs to be destroyed when close to a player. --- @param #string Briefing (Optional) Will show a text to the players when starting their mission. Can be used for briefing purposes. --- @return #MISSILETRAINER -function MISSILETRAINER:New( Distance, Briefing ) - local self = BASE:Inherit( self, BASE:New() ) - self:F( Distance ) - - if Briefing then - self.Briefing = Briefing - end - - self.Schedulers = {} - self.SchedulerID = 0 - - self.MessageInterval = 2 - self.MessageLastTime = timer.getTime() - - self.Distance = Distance / 1000 - - _EVENTDISPATCHER:OnShot( self._EventShot, self ) - - self.DB = DATABASE:New():FilterStart() - self.DBClients = self.DB.Clients - self.DBUnits = self.DB.Units - - for ClientID, Client in pairs( self.DBClients ) do - - local function _Alive( Client ) - - if self.Briefing then - Client:Message( self.Briefing, 15, "HELLO WORLD", "Trainer" ) - end - - if self.MenusOnOff == true then - Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "MENU", "Trainer" ) - - Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) -- Menu#MENU_CLIENT - - Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu ) - Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } ) - Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } ) - - Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu ) - Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } ) - Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } ) - Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = true } ) - Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = false } ) - Client.MenuTrackIncrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Increase", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = -1 } ) - Client.MenuTrackDecrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Decrease", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = 1 } ) - - Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu ) - Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } ) - Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } ) - Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = true } ) - Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = false } ) - Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = true } ) - Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = false } ) - - Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu ) - Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = true } ) - Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = false } ) - Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = true } ) - Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = false } ) - - Client.MenuDistance = MENU_CLIENT:New( Client, "Set distance to plane", Client.MainMenu ) - Client.MenuDistance50 = MENU_CLIENT_COMMAND:New( Client, "50 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 50 / 1000 } ) - Client.MenuDistance100 = MENU_CLIENT_COMMAND:New( Client, "100 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 100 / 1000 } ) - Client.MenuDistance150 = MENU_CLIENT_COMMAND:New( Client, "150 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 150 / 1000 } ) - Client.MenuDistance200 = MENU_CLIENT_COMMAND:New( Client, "200 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 200 / 1000 } ) - else - if Client.MainMenu then - Client.MainMenu:Remove() - end - end - - - local ClientID = Client:GetID() - self:T( ClientID ) - if not self.TrackingMissiles[ClientID] then - self.TrackingMissiles[ClientID] = {} - end - self.TrackingMissiles[ClientID].Client = Client - if not self.TrackingMissiles[ClientID].MissileData then - self.TrackingMissiles[ClientID].MissileData = {} - end - end - - Client:Alive( _Alive ) - - end - --- self.DB:ForEachClient( --- --- @param Client#CLIENT Client --- function( Client ) --- --- ... actions ... --- --- end --- ) - - self.MessagesOnOff = true - - self.TrackingToAll = false - self.TrackingOnOff = true - self.TrackingFrequency = 3 - - self.AlertsToAll = true - self.AlertsHitsOnOff = true - self.AlertsLaunchesOnOff = true - - self.DetailsRangeOnOff = true - self.DetailsBearingOnOff = true - - self.MenusOnOff = true - - self.TrackingMissiles = {} - - self.TrackingScheduler = SCHEDULER:New( self, self._TrackMissiles, {}, 0.5, 0.05, 0 ) - - return self -end - --- Initialization methods. - - ---- Sets by default the display of any message to be ON or OFF. --- @param #MISSILETRAINER self --- @param #boolean MessagesOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitMessagesOnOff( MessagesOnOff ) - self:F( MessagesOnOff ) - - self.MessagesOnOff = MessagesOnOff - if self.MessagesOnOff == true then - MESSAGE:New( "Messages ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Messages OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the missile tracking report for all players or only for those missiles targetted to you. --- @param #MISSILETRAINER self --- @param #boolean TrackingToAll true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitTrackingToAll( TrackingToAll ) - self:F( TrackingToAll ) - - self.TrackingToAll = TrackingToAll - if self.TrackingToAll == true then - MESSAGE:New( "Missile tracking to all players ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Missile tracking to all players OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of missile tracking report to be ON or OFF. --- @param #MISSILETRAINER self --- @param #boolean TrackingOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitTrackingOnOff( TrackingOnOff ) - self:F( TrackingOnOff ) - - self.TrackingOnOff = TrackingOnOff - if self.TrackingOnOff == true then - MESSAGE:New( "Missile tracking ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Missile tracking OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. --- The default frequency is a 3 second interval, so the Tracking Frequency parameter specifies the increase or decrease from the default 3 seconds or the last frequency update. --- @param #MISSILETRAINER self --- @param #number TrackingFrequency Provide a negative or positive value in seconds to incraese or decrease the display frequency. --- @return #MISSILETRAINER self -function MISSILETRAINER:InitTrackingFrequency( TrackingFrequency ) - self:F( TrackingFrequency ) - - self.TrackingFrequency = self.TrackingFrequency + TrackingFrequency - if self.TrackingFrequency < 0.5 then - self.TrackingFrequency = 0.5 - end - if self.TrackingFrequency then - MESSAGE:New( "Missile tracking frequency is " .. self.TrackingFrequency .. " seconds.", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of alerts to be shown to all players or only to you. --- @param #MISSILETRAINER self --- @param #boolean AlertsToAll true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitAlertsToAll( AlertsToAll ) - self:F( AlertsToAll ) - - self.AlertsToAll = AlertsToAll - if self.AlertsToAll == true then - MESSAGE:New( "Alerts to all players ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Alerts to all players OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of hit alerts ON or OFF. --- @param #MISSILETRAINER self --- @param #boolean AlertsHitsOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitAlertsHitsOnOff( AlertsHitsOnOff ) - self:F( AlertsHitsOnOff ) - - self.AlertsHitsOnOff = AlertsHitsOnOff - if self.AlertsHitsOnOff == true then - MESSAGE:New( "Alerts Hits ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Alerts Hits OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of launch alerts ON or OFF. --- @param #MISSILETRAINER self --- @param #boolean AlertsLaunchesOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitAlertsLaunchesOnOff( AlertsLaunchesOnOff ) - self:F( AlertsLaunchesOnOff ) - - self.AlertsLaunchesOnOff = AlertsLaunchesOnOff - if self.AlertsLaunchesOnOff == true then - MESSAGE:New( "Alerts Launches ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Alerts Launches OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of range information of missiles ON of OFF. --- @param #MISSILETRAINER self --- @param #boolean DetailsRangeOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitRangeOnOff( DetailsRangeOnOff ) - self:F( DetailsRangeOnOff ) - - self.DetailsRangeOnOff = DetailsRangeOnOff - if self.DetailsRangeOnOff == true then - MESSAGE:New( "Range display ON", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Range display OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Sets by default the display of bearing information of missiles ON of OFF. --- @param #MISSILETRAINER self --- @param #boolean DetailsBearingOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitBearingOnOff( DetailsBearingOnOff ) - self:F( DetailsBearingOnOff ) - - self.DetailsBearingOnOff = DetailsBearingOnOff - if self.DetailsBearingOnOff == true then - MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() - end - - return self -end - ---- Enables / Disables the menus. --- @param #MISSILETRAINER self --- @param #boolean MenusOnOff true or false --- @return #MISSILETRAINER self -function MISSILETRAINER:InitMenusOnOff( MenusOnOff ) - self:F( MenusOnOff ) - - self.MenusOnOff = MenusOnOff - if self.MenusOnOff == true then - MESSAGE:New( "Menus are ENABLED (only when a player rejoins a slot)", "Menu", 15, "ID" ):ToAll() - else - MESSAGE:New( "Menus are DISABLED", "Menu", 15, "ID" ):ToAll() - end - - return self -end - - --- Menu functions - -function MISSILETRAINER._MenuMessages( MenuParameters ) - - local self = MenuParameters.MenuSelf - - if MenuParameters.MessagesOnOff ~= nil then - self:InitMessagesOnOff( MenuParameters.MessagesOnOff ) - end - - if MenuParameters.TrackingToAll ~= nil then - self:InitTrackingToAll( MenuParameters.TrackingToAll ) - end - - if MenuParameters.TrackingOnOff ~= nil then - self:InitTrackingOnOff( MenuParameters.TrackingOnOff ) - end - - if MenuParameters.TrackingFrequency ~= nil then - self:InitTrackingFrequency( MenuParameters.TrackingFrequency ) - end - - if MenuParameters.AlertsToAll ~= nil then - self:InitAlertsToAll( MenuParameters.AlertsToAll ) - end - - if MenuParameters.AlertsHitsOnOff ~= nil then - self:InitAlertsHitsOnOff( MenuParameters.AlertsHitsOnOff ) - end - - if MenuParameters.AlertsLaunchesOnOff ~= nil then - self:InitAlertsLaunchesOnOff( MenuParameters.AlertsLaunchesOnOff ) - end - - if MenuParameters.DetailsRangeOnOff ~= nil then - self:InitRangeOnOff( MenuParameters.DetailsRangeOnOff ) - end - - if MenuParameters.DetailsBearingOnOff ~= nil then - self:InitBearingOnOff( MenuParameters.DetailsBearingOnOff ) - end - - if MenuParameters.Distance ~= nil then - self.Distance = MenuParameters.Distance - MESSAGE:New( "Hit detection distance set to " .. self.Distance .. " meters", "Menu", 15, "ID" ):ToAll() - end - -end - ---- 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. --- @param #MISSILETRAINER self --- @param Event#EVENTDATA Event -function MISSILETRAINER:_EventShot( Event ) - self:F( { Event } ) - - local TrainerSourceDCSUnit = Event.IniDCSUnit - local TrainerSourceDCSUnitName = Event.IniDCSUnitName - local TrainerWeapon = Event.Weapon -- Identify the weapon fired - local TrainerWeaponName = Event.WeaponName -- return weapon type - - self:T( "Missile Launched = " .. TrainerWeaponName ) - - local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target - local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit ) - local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill - - self:T(TrainerTargetDCSUnitName ) - - local Client = self.DBClients[TrainerTargetDCSUnitName] - if Client then - - local TrainerSourceUnit = UNIT:Find( TrainerSourceDCSUnit ) - local TrainerTargetUnit = UNIT:Find( TrainerTargetDCSUnit ) - - if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then - - local Message = MESSAGE:New( - string.format( "%s launched a %s", - TrainerSourceUnit:GetTypeName(), - TrainerWeaponName - ) .. self:_AddRange( Client, TrainerWeapon ) .. self:_AddBearing( Client, TrainerWeapon ),"Launch Alert", 5, "ID" ) - - if self.AlertsToAll then - Message:ToAll() - else - Message:ToClient( Client ) - end - end - - local ClientID = Client:GetID() - local MissileData = {} - MissileData.TrainerSourceUnit = TrainerSourceUnit - MissileData.TrainerWeapon = TrainerWeapon - MissileData.TrainerTargetUnit = TrainerTargetUnit - MissileData.TrainerWeaponTypeName = TrainerWeapon:getTypeName() - MissileData.TrainerWeaponLaunched = true - table.insert( self.TrackingMissiles[ClientID].MissileData, MissileData ) - --self:T( self.TrackingMissiles ) - end -end - -function MISSILETRAINER:_AddRange( Client, TrainerWeapon ) - - local RangeText = "" - - if self.DetailsRangeOnOff then - - local PositionMissile = TrainerWeapon:getPoint() - local PositionTarget = Client:GetPointVec3() - - local Range = ( ( PositionMissile.x - PositionTarget.x )^2 + - ( PositionMissile.y - PositionTarget.y )^2 + - ( PositionMissile.z - PositionTarget.z )^2 - ) ^ 0.5 / 1000 - - RangeText = string.format( ", at %4.2fkm", Range ) - end - - return RangeText -end - -function MISSILETRAINER:_AddBearing( Client, TrainerWeapon ) - - local BearingText = "" - - if self.DetailsBearingOnOff then - - local PositionMissile = TrainerWeapon:getPoint() - local PositionTarget = Client:GetPointVec3() - - self:T2( { PositionTarget, PositionMissile }) - - local DirectionVector = { x = PositionMissile.x - PositionTarget.x, y = PositionMissile.y - PositionTarget.y, z = PositionMissile.z - PositionTarget.z } - local DirectionRadians = math.atan2( DirectionVector.z, DirectionVector.x ) - --DirectionRadians = DirectionRadians + routines.getNorthCorrection( PositionTarget ) - if DirectionRadians < 0 then - DirectionRadians = DirectionRadians + 2 * math.pi - end - local DirectionDegrees = DirectionRadians * 180 / math.pi - - BearingText = string.format( ", %d degrees", DirectionDegrees ) - end - - return BearingText -end - - -function MISSILETRAINER:_TrackMissiles() - self:F2() - - - local ShowMessages = false - if self.MessagesOnOff and self.MessageLastTime + self.TrackingFrequency <= timer.getTime() then - self.MessageLastTime = timer.getTime() - ShowMessages = true - end - - -- ALERTS PART - - -- Loop for all Player Clients to check the alerts and deletion of missiles. - for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do - - local Client = ClientData.Client - self:T2( { Client:GetName() } ) - - for MissileDataID, MissileData in pairs( ClientData.MissileData ) do - self:T3( MissileDataID ) - - local TrainerSourceUnit = MissileData.TrainerSourceUnit - local TrainerWeapon = MissileData.TrainerWeapon - local TrainerTargetUnit = MissileData.TrainerTargetUnit - local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName - local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched - - if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then - local PositionMissile = TrainerWeapon:getPosition().p - local PositionTarget = Client:GetPointVec3() - - local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 + - ( PositionMissile.y - PositionTarget.y )^2 + - ( PositionMissile.z - PositionTarget.z )^2 - ) ^ 0.5 / 1000 - - if Distance <= self.Distance then - -- Hit alert - TrainerWeapon:destroy() - if self.MessagesOnOff == true and self.AlertsHitsOnOff == true then - - self:T( "killed" ) - - local Message = MESSAGE:New( - string.format( "%s launched by %s killed %s", - TrainerWeapon:getTypeName(), - TrainerSourceUnit:GetTypeName(), - TrainerTargetUnit:GetPlayerName() - ),"Hit Alert", 15, "ID" ) - - if self.AlertsToAll == true then - Message:ToAll() - else - Message:ToClient( Client ) - end - - MissileData = nil - table.remove( ClientData.MissileData, MissileDataID ) - self:T(ClientData.MissileData) - end - end - else - if not ( TrainerWeapon and TrainerWeapon:isExist() ) then - if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then - -- Weapon does not exist anymore. Delete from Table - local Message = MESSAGE:New( - string.format( "%s launched by %s self destructed!", - TrainerWeaponTypeName, - TrainerSourceUnit:GetTypeName() - ),"Tracking", 5, "ID" ) - - if self.AlertsToAll == true then - Message:ToAll() - else - Message:ToClient( Client ) - end - end - MissileData = nil - table.remove( ClientData.MissileData, MissileDataID ) - self:T( ClientData.MissileData ) - end - end - end - end - - if ShowMessages == true and self.MessagesOnOff == true and self.TrackingOnOff == true then -- Only do this when tracking information needs to be displayed. - - -- TRACKING PART - - -- For the current client, the missile range and bearing details are displayed To the Player Client. - -- For the other clients, the missile range and bearing details are displayed To the other Player Clients. - -- To achieve this, a cross loop is done for each Player Client <-> Other Player Client missile information. - - -- Main Player Client loop - for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do - - local Client = ClientData.Client - self:T2( { Client:GetName() } ) - - - ClientData.MessageToClient = "" - ClientData.MessageToAll = "" - - -- Other Players Client loop - for TrackingDataID, TrackingData in pairs( self.TrackingMissiles ) do - - for MissileDataID, MissileData in pairs( TrackingData.MissileData ) do - self:T3( MissileDataID ) - - local TrainerSourceUnit = MissileData.TrainerSourceUnit - local TrainerWeapon = MissileData.TrainerWeapon - local TrainerTargetUnit = MissileData.TrainerTargetUnit - local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName - local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched - - if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then - - if ShowMessages == true then - local TrackingTo - TrackingTo = string.format( " -> %s", - TrainerWeaponTypeName - ) - - if ClientDataID == TrackingDataID then - if ClientData.MessageToClient == "" then - ClientData.MessageToClient = "Missiles to You:\n" - end - ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. "\n" - else - if self.TrackingToAll == true then - if ClientData.MessageToAll == "" then - ClientData.MessageToAll = "Missiles to other Players:\n" - end - ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. " ( " .. TrainerTargetUnit:GetPlayerName() .. " )\n" - end - end - end - end - end - end - - -- Once the Player Client and the Other Player Client tracking messages are prepared, show them. - if ClientData.MessageToClient ~= "" or ClientData.MessageToAll ~= "" then - local Message = MESSAGE:New( ClientData.MessageToClient .. ClientData.MessageToAll, "Tracking", 1, "ID" ):ToClient( Client ) - end - end - end - - return true -end -env.info( '*** MOOSE INCLUDE END *** ' ) +env.info("Loaded MOOSE Include Engine")env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz b/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz index 928c0524215e3cdb6eca2e24fcf10a61ffe5f0b6..c8858385e1d3314424ec4d99caa97951791d6e01 100644 GIT binary patch delta 281 zcmV+!0p|XmfCip`2C!fn2z*exNVnrR)01c#H3DrClb;$Ge_q=OU}#!_`Vz(Vx#ygF zuYH;L8*!0J3^(m|8y5HXs~JpxFUO1d1m?@h-LL5kR_pQ4HMsK|AaH#Z1TCc03~rfV ziW)8jta-t-p~dqM2EG2*-j~6*r+%;Zxr)5L%4JM**iaiaf~VVn4BbhZaFNv}5JZv3 zMaEL9C}U>46VZ+y6CjRiF5@m#cOG8iTMLx3C-m fnOO*YP`gOC<2TcnQFZ}51$uRvQ0}*qb^(kDz@>o> delta 281 zcmV+!0p|XmfCip`2C!fn2((GMNL%F<9Fu4oH3C%{lb;$Ge?Hp@U}#!_`Vz(Vx#ygF zuYH;L6LFDB3^(m|8x{`_s~JpxEys)b1m?@h{m46VZ+y6CjRiF5!8-a*lSvyuDj!h?brEriB%zCMJZGT`s1N+U zg|~PLLK+D1`u7p)3CxxW3vC^P0?d<>vm2QK#gk1OLk9j2P)h>@m#cOG8iTMLx3C-m fnOO+5NxDc|(arARf1pb^(kDeg1t@ diff --git a/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua b/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua index 88f76d82a..cbea27ae9 100644 --- a/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua +++ b/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua @@ -1,39 +1,52 @@ -Include.File( 'Database' ) + +Include.File( 'UnitSet' ) +Include.File( 'GroupSet' ) Include.File( 'Spawn' ) -DBBluePlanes = DATABASE:New() +DBBluePlanes = UNITSET:New() :FilterCoalitions( "blue" ) :FilterCategories( "plane" ) :FilterStart() -DBRedVehicles = DATABASE:New() +DBRedVehicles = UNITSET:New() :FilterCoalitions( "red" ) :FilterCategories( "ground" ) :FilterStart() -DBShips = DATABASE:New() +DBShips = UNITSET:New() :FilterCategories( "ship" ) :FilterStart() -DBBelgium = DATABASE:New() +DBBelgium = UNITSET:New() :FilterCategories( "helicopter" ) :FilterCountries( "BELGIUM" ) :FilterStart() -DBNorthKorea = DATABASE:New() +DBNorthKorea = UNITSET:New() :FilterCountries( "NORTH_KOREA" ) :FilterStart() -DBKA50Vinson = DATABASE:New() +DBKA50Vinson = UNITSET:New() :FilterTypes( { "Ka-50", "VINSON" } ) :FilterStart() + +DBBluePlanesGroup = GROUPSET:New() + :FilterCoalitions( "blue" ) + :FilterCategories( "plane" ) + :FilterStart() + +DBNorthKoreaGroup = GROUPSET:New() + :FilterCountries( "NORTH_KOREA" ) + :FilterStart() -DBBluePlanes:TraceDatabase() -DBRedVehicles:TraceDatabase() -DBShips:TraceDatabase() -DBBelgium:TraceDatabase() -DBNorthKorea:TraceDatabase() -DBKA50Vinson:TraceDatabase() +DBBluePlanes:Flush() +DBRedVehicles:Flush() +DBShips:Flush() +DBBelgium:Flush() +DBNorthKorea:Flush() +DBKA50Vinson:Flush() +DBBluePlanesGroup:Flush() +DBNorthKoreaGroup:Flush() SpawnUS_Plane = SPAWN:New( 'Database Spawn Test USA Plane') @@ -54,21 +67,27 @@ GroupRU_Ship = SpawnRU_Ship:Spawn() SpawnUS_AttackVehicle = SPAWN:New( 'Database Spawn Test USA Attack Vehicle' ) SpawnRU_AttackVehicle = SPAWN:New( 'Database Spawn Test RUSSIA Attack Vehicle' ) -for i = 1, 10 do +for i = 1, 2 do GroupRU_AttackVehicle = SpawnRU_AttackVehicle:SpawnInZone( ZONE:New("Spawn Zone RU"), true) GroupUS_AttackVehicle = SpawnUS_AttackVehicle:SpawnInZone( ZONE:New("Spawn Zone US"), true) end --DBBlue:TraceDatabase() -routines.scheduleFunction( DBBluePlanes.TraceDatabase, { DBBluePlanes }, 1 ) -routines.scheduleFunction( DBRedVehicles.TraceDatabase, { DBRedVehicles }, 1 ) -routines.scheduleFunction( DBShips.TraceDatabase, { DBShips }, 1 ) -routines.scheduleFunction( DBBelgium.TraceDatabase, { DBBelgium }, 1 ) -routines.scheduleFunction( DBNorthKorea.TraceDatabase, { DBNorthKorea }, 1 ) -routines.scheduleFunction( DBKA50Vinson.TraceDatabase, { DBKA50Vinson }, 1 ) +SCHEDULER:New( DBBluePlanes, DBBluePlanes.Flush, { }, 1 ) +SCHEDULER:New( DBRedVehicles, DBRedVehicles.Flush, { }, 1 ) +SCHEDULER:New( DBShips, DBShips.Flush, { }, 1 ) +SCHEDULER:New( DBBelgium, DBBelgium.Flush, { }, 1 ) +SCHEDULER:New( DBNorthKorea, DBNorthKorea.Flush, { }, 1 ) +SCHEDULER:New( DBKA50Vinson, DBKA50Vinson.Flush, { }, 1 ) + +SCHEDULER:New( DBBluePlanesGroup, DBBluePlanesGroup.Flush, { }, 1 ) +SCHEDULER:New( DBNorthKoreaGroup, DBNorthKoreaGroup.Flush, { }, 1 ) DBRedVehicles - :ForEachAliveUnit( function( DCSUnit ) - DBRedVehicles:T( DCSUnit:getName() ) + :ForEachUnit( function( MooseUnit ) + DBRedVehicles:T( MooseUnit:GetName() ) end ) + + + diff --git a/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz b/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz index 0bdbd3f057ae7e8b9ab85d17dab9b1da91ec05ea..7f9c38b8f44683700581f2ac62ab650541703abc 100644 GIT binary patch delta 27361 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 delta 26049 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 M&;WpJ`#<^r4{T?}T>t<8 diff --git a/Moose Test Missions/Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz b/Moose Test Missions/Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz index 670f8d468b2ba70862fa12569993207514b00123..5d1f7a1b2485548e55ff2da197103fa218d945db 100644 GIT binary patch delta 266 zcmV+l0rmdwg#zw{046VZ+y6CjRiF546VZ+y6CjRiF5!8-a*lZYxnDj!h?brEriB%zCMJZGT`s1N+U zg|~PLLK+D1`u7p)3CxxW3vC^P0?d<>@+z4D#gmLHLjwK}v(YORQwX$4x=35)6&#c9 Qemn)@!!#fsvoC+Y11NEP5C8xG diff --git a/Moose Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz b/Moose Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz index 912b3d1cffe1f62ec4b27fa9f0cb4b238791d1e5..d80475c06c2e55b3d8890031c5313528df38e87f 100644 GIT binary patch delta 266 zcmV+l0rmc+&I6^+1F)`c2z*exNVnrR)04JtH3DrClkIL8e_q=OU}#!_`Vz(Vx#ygF zuYH;L8*!0J3^(m|8y5HXs~JpxFUO1d1m?@h-LL5kR_pQ4HMsK|AaH#Z1TCc03~rfV ziW)8jta-t-p~dqM2EG2*-j~6*r+%;Zxr)5L%4JM**iaiaf~VVn4BbhZaFNv}5JZv3 zMaEL9C}U>46VZ+y6CjRiF546VZ+y6CjRiF5!8-a*lb3HmDj!h?brEriB%zCMJZGT`s1N+U zg|~PLLK+D1`u7p)3CxxW3vC^P0?d<>0dScC#gm(GLjwK}v*2(YaR{_Yx=35)6&#ZV Q;yeZ7!!#fsvqs|I1Tf-#n*aa+ diff --git a/Moose Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.miz b/Moose Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.miz index 69faae2dfeccb9769d5d34772b3e8629f522829c..52cae96f7dc46732a12dcc03ad0e4091db239fc9 100644 GIT binary patch delta 275 zcmV+u0qp+6od?662e5P=2z*exNVnrR)02E2HGgdq5)TMig;eM?*u%6|l}VgnDX}Zt z*~_&5UfT&^Xj*~#62+#PuxbqtzaD5d7Eu_>8Zkb?;8ZHH_dBL=y#q$sbz5dtUm%+EEey{hrioCwcWlVF} zPzf6~f~VVn4BbhSIUgPdzyHBH`azRjA3!P|PzQApafu|Mi|;&Vp$n)F{Jw>^cnU%q z2=V&Q5$X}lmI(`O9fJbQqm#!UnE~08VIV^WegRNR0|b{W%>f#N#2~lCAOQxf2z*ex ZNVnrR)0fiB0XzkIb(v7^w-e0)umLs5fXM&= delta 275 zcmV+u0qp+6od?662e5P=2((GMNL%F<9Fu$=HGfqa5)TMig;eM?*u%6|l}VgnDX}Zt z*~_&5KHCXkXj*~#62+z2@xbqtzaD5d7Eu_>8?wDYT8ZHH_dBL=y#mf)|z5Z?Q%i#98_qG4IioCwcWlVF} zPzf6~g6F${4BbnUIUgPd-+#e6`c9KwA3!P}Q3rJqafu|Mi*Gz^cnU%q z2=V&&5$XxdmI(`O9fJbQlat3EnE}Of#N#2~lCAOQxf2((GM ZNL%F<9GB9}0Xzlb!!#fsw-e0)umK8)eGUKs diff --git a/Moose Test Missions/Moose_Test_SEAD/MOOSE_Test_SEAD.miz b/Moose Test Missions/Moose_Test_SEAD/MOOSE_Test_SEAD.miz index dbe71769b56c938b237c60fe99d0c8cc44a081b8..48d70c1058e4294120e4d02ccbaf524929e71d1b 100644 GIT binary patch delta 268 zcmV+n0rUQ=$pNd$0kFmw2z*exNVnrR)055@HGgdq5)TMig;eM?*u%6|l}VgnDX}Zt z*~_&5UfT&^Xj*~#62+#PuxbqtzaD5d7Eu_>8Zkb?;8ZHH_dBL=y#q$sbz5dtUm%+EEey{hrioCwcWlVF} zPzf6~f~VVn4BbhSix?gTzyHBH`azSg7(gl>PzQApafu|Mi|;&Vp$n)F{Jw>^cnU%q z2=V&Q5$X}lmI(`O9fJbQqmvmKnE~08vl&AMegRNR0|b*EV;Zv-8m34Hd{Dbcx8pa{ Slf+^?1$uRvQ0}t@W2OO!`+h?J delta 268 zcmV+n0rUQ=$pNd$0kFmw2((GMNL%F<9Fxu$HGfqa5)TMig;eM?*u%6|l}VgnDX}Zt z*~_&5KHCXkXj*~#62+z2@xbqtzaD5d7Eu_>8?wDYT8ZHH_dBL=y#mf)|z5Z?Q%i#98_qG4IioCwcWlVF} zPzf6~g6F${4BbnUix?gT-+#e6`c9Lt7(gl?Q3rJqafu|Mi*Gz^cnU%q z2=V&&5$XxdmI(`O9fJbQlam=4nE}O(arARe;?W2OOauX>08 diff --git a/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz b/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz index 3a6bcd9e665e044b158358fc53ae8b9e5cf442aa..cf86dece2888efeee19a1c58c078aebe40e023a7 100644 GIT binary patch delta 259 zcmV+e0sQ{-j|23N1F$+#PuxbqtzaD5d7Eu_>8Zkb?;8ZHH_dBL=y#q$sbz5dtUm%+EEey{hrioCwcWlVF} zPzf6~f~VVn4BbhRA07t3|G_%?L6amOKq?+k2Xzr~i6o(m?>uLr3#bqLzJ<4V3PKtP z@%qmZ>JiMA2@7ola3#m0oju%AVUIv0kdr&jim^DP`gOC<2Tcj0>(TAdUcsl J?z2P2u>np-du9Lt delta 259 zcmV+e0sQ{-j|23N1F$+z2@xbqtzaD5d7Eu_>8?wDYT8ZHH_dBL=y#mf)|z5Z?Q%i#98_qG4IioCwcWlVF} zPzf6~g6F${4BbnTA07tZf5AHXPLm`bKq?>Iux22@7o(TA;=?o` J9nQ|cdGyZ diff --git a/Moose Test Missions/Moose_Test_SPAWN_Repeat/MOOSE_Test_SPAWN_Repeat.miz b/Moose Test Missions/Moose_Test_SPAWN_Repeat/MOOSE_Test_SPAWN_Repeat.miz index 63198ee5a4306d1ac658a6402a1db825c8234151..8899cab3200d9bb6025a9ddcdac781202d45c2dc 100644 GIT binary patch delta 260 zcmV+f0sH>+#R2ri0kF0h2z*exNVnrR)04g!HGgdq5)TMig;eM?*u%6|l}VgnDX}Zt z*~_&5UfT&^Xj*~#62+#PuxbqtzaD5d7Eu_>8Zkb?;8ZHH_dBL=y#q$sbz5dtUm%+EEey{hrioCwcWlVF} zPzf6~f~VVn4BbhSdl?=EzyHBH`azSQ89*u?PzQApafu|Mi|;&Vp$n)F{Jw>^cnU%q z2=V&Q5$X}lmI(`O9fJbQqmv05nE~08qZ&g3egU)S8d^pOd{Dbcx8pa{lS*Mc1$uRv KQ0}vfVQB$3N__7C delta 260 zcmV+f0sH>+#R2ri0kF0h2((GMNL%F<9Fx8nHGfqa5)TMig;eM?*u%6|l}VgnDX}Zt z*~_&5KHCXkXj*~#62+z2@xbqtzaD5d7Eu_>8?wDYT8ZHH_dBL=y#mf)|z5Z?Q%i#98_qG4IioCwcWlVF} zPzf6~g6F${4BbnUdl?=E-+#e6`c9Ld89*u@Q3rJqafu|Mi*Gz^cnU%q z2=V&&5$XxdmI(`O9fJbQlamP=nE}O(ar KARe=eVQB#^MtL*< diff --git a/Moose Test Missions/Moose_Test_TASK_Pickup_and_Deploy/MOOSE_Test_TASK_Pickup_and_Deploy.miz b/Moose Test Missions/Moose_Test_TASK_Pickup_and_Deploy/MOOSE_Test_TASK_Pickup_and_Deploy.miz index c909c341bcab3b20e029a3918dbcfaf42b1381ae..eec12788c51e57659aef5a7c4ec1a2d7101e1c43 100644 GIT binary patch delta 265 zcmV+k0rvjA`2oH80kEPO2z*exNVnrR)03(hH3DrCli?W{e_q=OU}#!_`Vz(Vx#ygF zuYH;L8*!0J3^(m|8y5HXs~JpxFUO1d1m?@h-LL5kR_pQ4HMsK|AaH#Z1TCc03~rfV ziW)8jta-t-p~dqM2EG2*-j~6*r+%;Zxr)5L%4JM**iaiaf~VVn4BbhZaFNv}5JZv3 zMaEL9C}U>4lXw~p2EYHoI{HDAiyA;G9#98$5pjtmp^NW4XQ2zI5B$D`w|ELd8VK?F z&k^bo%$5lYZ5@LG%%hX_8kqsvlaCui27UohO9KRx&UqTM@*8?x2z*exNVnrR)01?0 PJOz4nnNaStwRs2w&OCkJ delta 265 zcmV+k0rvjA`2oH80kEPO2((GMNL%F<9FwXUH3C%{li?W{e?Hp@U}#!_`Vz(Vx#ygF zuYH;L6LFDB3^(m|8x{`_s~JpxEys)b1m?@h{m4lXw~p2H$_dI{HqNiyA;GA5jN&5pjtmp^I-kXQ2zI5B$D`w|ELd8VK?F z_Yvv|%$5lYZ5@LG%#)M#8kqsblaCui2L2CFO9KRx&UqTM@*8?x2((GMNL%F<9Fuf; PJO$#zG$046VZ+y6CjRiF5O4DjrY=brEriB%zD%JZGT`s1N+U zg|~PLLK+D1`p*&S5zLke3vC^P0?eb6qD`3r*^@j@LjryQvw==+PY8TayGXa=H`9~$ Qoje74b(v7^vp1f>0Xrjqx&QzG delta 266 zcmV+l0rmd)zXJHb046VZ+y6CjRiF5!8-a*lQ>O4Dj!h?brEriB%zCMJZGT`s1N+U zg|~PLLK+D1`u7p)3CxxW3vC^P0?d<>qD`3r#gjZvLjwK}vw==+PYAS0x=35)6&#cH Qoje8N!!#fsvp1f>0U5Y^{{R30 From 7efbd60b9ed5cf983f4a89c64676ca1b62219dfd Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 27 May 2016 13:21:39 +0200 Subject: [PATCH 03/12] DATABASE now also follows correctly the players. --- Moose Development/Moose/Base.lua | 5 +- Moose Development/Moose/Database.lua | 343 +++++++----------- Moose Development/Moose/Moose.lua | 2 +- Moose Development/Moose/Set.lua | 4 +- .../Moose_Test_DATABASE.lua | 15 + .../Moose_Test_DATABASE.miz | Bin 29075 -> 38047 bytes 6 files changed, 157 insertions(+), 212 deletions(-) diff --git a/Moose Development/Moose/Base.lua b/Moose Development/Moose/Base.lua index e2196c8ba..3586673d1 100644 --- a/Moose Development/Moose/Base.lua +++ b/Moose Development/Moose/Base.lua @@ -487,7 +487,10 @@ function BASE:E( Arguments ) end local LineCurrent = DebugInfoCurrent.currentline - local LineFrom = DebugInfoFrom.currentline + local LineFrom = -1 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "E", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) end diff --git a/Moose Development/Moose/Database.lua b/Moose Development/Moose/Database.lua index b0fff9b76..66febcae9 100644 --- a/Moose Development/Moose/Database.lua +++ b/Moose Development/Moose/Database.lua @@ -1,64 +1,34 @@ ---- Manage sets of units and groups. +--- Manage the mission database. -- --- @{#Database} class +-- @{#DATABASE} class -- ================== --- Mission designers can use the DATABASE class to build sets of units belonging to certain: +-- Mission designers can use the DATABASE class to refer to: -- --- * Coalitions --- * Categories --- * Countries --- * Unit types --- * Starting with certain prefix strings. +-- * UNITS +-- * GROUPS +-- * players +-- * alive players +-- * CLIENTS +-- * alive CLIENTS -- --- This list will grow over time. Planned developments are to include filters and iterators. --- Additional filters will be added around @{Zone#ZONEs}, Radiuses, Active players, ... --- More iterators will be implemented in the near future ... --- --- Administers the Initial Sets of the Mission Templates as defined within the Mission Editor. --- --- DATABASE construction methods: --- ================================= --- Create a new DATABASE object with the @{#DATABASE.New} method: --- --- * @{#DATABASE.New}: Creates a new DATABASE object. --- --- --- DATABASE filter criteria: --- ========================= --- You can set filter criteria to define the set of units within the database. --- Filter criteria are defined by: --- --- * @{#DATABASE.FilterCoalitions}: Builds the DATABASE with the units belonging to the coalition(s). --- * @{#DATABASE.FilterCategories}: Builds the DATABASE with the units belonging to the category(ies). --- * @{#DATABASE.FilterTypes}: Builds the DATABASE with the units belonging to the unit type(s). --- * @{#DATABASE.FilterCountries}: Builds the DATABASE with the units belonging to the country(ies). --- * @{#DATABASE.FilterUnitPrefixes}: Builds the DATABASE with the units starting with the same prefix string(s). --- --- Once the filter criteria have been set for the DATABASE, you can start filtering using: --- --- * @{#DATABASE.FilterStart}: Starts the filtering of the units within the database. --- --- Planned filter criteria within development are (so these are not yet available): --- --- * @{#DATABASE.FilterGroupPrefixes}: Builds the DATABASE with the groups of the units starting with the same prefix string(s). --- * @{#DATABASE.FilterZones}: Builds the DATABASE with the units within a @{Zone#ZONE}. +-- On top, for internal MOOSE administration purposes, the DATBASE administers the Unit and Gruop templates as defined within the Mission Editor. -- +-- Moose will automatically create one instance of the DATABASE class into the **global** object _DATABASE. +-- Moose refers to _DATABASE within the framework extensively, but you can also refer to the _DATABASE object within your missions if required. -- -- DATABASE iterators: -- =================== --- Once the filters have been defined and the DATABASE has been built, you can iterate the database with the available iterator methods. +-- You can iterate the database with the available iterator methods. -- The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. -- The following iterator methods are currently available within the DATABASE: -- --- * @{#DATABASE.ForEachAliveUnit}: Calls a function for each alive unit it finds within the DATABASE. +-- * @{#DATABASE.ForEachUnit}: Calls a function for each @{UNIT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachGroup}: Calls a function for each @{GROUP} it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayer}: Calls a function for each player it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayerAlive}: Calls a function for each alive player it finds within the DATABASE. +-- * @{#DATABASE.ForEachClient}: Calls a function for each @{CLIENT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachClientAlive}: Calls a function for each alive @{CLIENT} it finds within the DATABASE. -- --- Planned iterators methods in development are (so these are not yet available): --- --- * @{#DATABASE.ForEachUnit}: Calls a function for each unit contained within the DATABASE. --- * @{#DATABASE.ForEachGroup}: Calls a function for each group contained within the DATABASE. --- * @{#DATABASE.ForEachUnitInZone}: Calls a function for each unit within a certain zone contained within the DATABASE. --- --- ==== -- @module Database -- @author FlightControl @@ -70,6 +40,7 @@ Include.File( "Unit" ) Include.File( "Event" ) Include.File( "Client" ) + --- DATABASE class -- @type DATABASE -- @extends Base#BASE @@ -85,34 +56,11 @@ DATABASE = { DCSGroups = {}, UNITS = {}, GROUPS = {}, - NavPoints = {}, - Statics = {}, - Players = {}, - PlayersAlive = {}, + PLAYERS = {}, + PLAYERSALIVE = {}, CLIENTS = {}, - ClientsAlive = {}, - Filter = { - Coalitions = nil, - Categories = nil, - Types = nil, - Countries = nil, - UnitPrefixes = nil, - GroupPrefixes = nil, - }, - FilterMeta = { - Coalitions = { - red = coalition.side.RED, - blue = coalition.side.BLUE, - neutral = coalition.side.NEUTRAL, - }, - Categories = { - plane = Unit.Category.AIRPLANE, - helicopter = Unit.Category.HELICOPTER, - ground = Unit.Category.GROUND_UNIT, - ship = Unit.Category.SHIP, - structure = Unit.Category.STRUCTURE, - }, - }, + CLIENTSALIVE = {}, + NavPoints = {}, } local _DATABASECoalition = @@ -147,12 +95,13 @@ function DATABASE:New() _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) - -- Add database with registered clients and already alive players - -- Follow alive players and clients _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) + self:_RegisterTemplates() + self:_RegisterDatabase() + self:_RegisterPlayers() return self end @@ -167,6 +116,7 @@ function DATABASE:FindUnit( UnitName ) return UnitFound end + --- Adds a Unit based on the Unit Name in the DATABASE. -- @param #DATABASE self function DATABASE:AddUnit( DCSUnit, DCSUnitName ) @@ -175,6 +125,7 @@ function DATABASE:AddUnit( DCSUnit, DCSUnitName ) self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) end + --- Deletes a Unit from the DATABASE based on the Unit Name. -- @param #DATABASE self function DATABASE:DeleteUnit( DCSUnitName ) @@ -182,6 +133,7 @@ function DATABASE:DeleteUnit( DCSUnitName ) self.DCSUnits[DCSUnitName] = nil end + --- Finds a CLIENT based on the ClientName. -- @param #DATABASE self -- @param #string ClientName @@ -192,6 +144,7 @@ function DATABASE:FindClient( ClientName ) return ClientFound end + --- Adds a CLIENT based on the ClientName in the DATABASE. -- @param #DATABASE self function DATABASE:AddClient( ClientName ) @@ -200,6 +153,7 @@ function DATABASE:AddClient( ClientName ) self:E( self.CLIENTS[ClientName]:GetClassNameAndID() ) end + --- Finds a GROUP based on the GroupName. -- @param #DATABASE self -- @param #string GroupName @@ -210,6 +164,7 @@ function DATABASE:FindGroup( GroupName ) return GroupFound end + --- Adds a GROUP based on the GroupName in the DATABASE. -- @param #DATABASE self function DATABASE:AddGroup( DCSGroup, GroupName ) @@ -218,6 +173,30 @@ function DATABASE:AddGroup( DCSGroup, GroupName ) self.GROUPS[GroupName] = GROUP:Register( GroupName ) end +--- Adds a player based on the Player Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddPlayer( UnitName, PlayerName ) + + if PlayerName then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self.PLAYERS[PlayerName] = PlayerName + self.PLAYERSALIVE[PlayerName] = PlayerName + self.CLIENTSALIVE[PlayerName] = self:FindClient( UnitName ) + end +end + +--- Deletes a player from the DATABASE based on the Player Name. +-- @param #DATABASE self +function DATABASE:DeletePlayer( PlayerName ) + + if PlayerName then + self:E( { "Clean player:", PlayerName } ) + self.PLAYERSALIVE[PlayerName] = nil + self.CLIENTSALIVE[PlayerName] = nil + end +end + + --- Instantiate new Groups within the DCSRTE. -- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: -- SpawnCountryID, SpawnCategoryID @@ -253,7 +232,6 @@ function DATABASE:Spawn( SpawnTemplate ) return SpawnGroup end - --- Set a status to a Group within the Database, this to check crossing events for example. function DATABASE:SetStatusGroup( GroupName, Status ) self:F2( Status ) @@ -261,7 +239,6 @@ function DATABASE:SetStatusGroup( GroupName, Status ) self.Templates.Groups[GroupName].Status = Status end - --- Get a status to a Group within the Database, this to check crossing events for example. function DATABASE:GetStatusGroup( GroupName ) self:F2( Status ) @@ -273,6 +250,7 @@ function DATABASE:GetStatusGroup( GroupName ) end end + --- Private method that registers new Group Templates within the DATABASE Object. -- @param #DATABASE self -- @param #table GroupTemplate @@ -317,6 +295,7 @@ function DATABASE:_RegisterTemplate( GroupTemplate ) end end + --- Private method that registers all alive players in the mission. -- @param #DATABASE self -- @return #DATABASE self @@ -328,9 +307,10 @@ function DATABASE:_RegisterPlayers() self:T3( { "UnitData:", UnitData } ) if UnitData and UnitData:isExist() then local UnitName = UnitData:getName() - if not self.PlayersAlive[UnitName] then - self:E( { "Add player for unit:", UnitName, UnitData:getPlayerName() } ) - self.PlayersAlive[UnitName] = UnitData:getPlayerName() + local PlayerName = UnitData:getPlayerName() + if not self.PLAYERS[PlayerName] then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self:AddPlayer( UnitName, PlayerName ) end end end @@ -339,6 +319,7 @@ function DATABASE:_RegisterPlayers() return self end + --- Private method that registers all datapoints within in the mission. -- @param #DATABASE self -- @return #DATABASE self @@ -384,14 +365,13 @@ function DATABASE:_EventOnBirth( Event ) self:F2( { Event } ) if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - self:AddUnit( Event.IniDCSUnit, Event.IniDCSUnitName ) - self:AddGroup( Event.IniDCSGroup, Event.IniDCSGroupName ) - self:_EventOnPlayerEnterUnit( Event ) - end + self:AddUnit( Event.IniDCSUnit, Event.IniDCSUnitName ) + self:AddGroup( Event.IniDCSGroup, Event.IniDCSGroupName ) + self:_EventOnPlayerEnterUnit( Event ) end end + --- Handles the OnDead or OnCrash event for alive units set. -- @param #DATABASE self -- @param Event#EVENTDATA Event @@ -406,6 +386,7 @@ function DATABASE:_EventOnDeadOrCrash( Event ) end end + --- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). -- @param #DATABASE self -- @param Event#EVENTDATA Event @@ -413,16 +394,14 @@ function DATABASE:_EventOnPlayerEnterUnit( Event ) self:F2( { Event } ) if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - if not self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Add player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = Event.IniDCSUnit:getPlayerName() - self.ClientsAlive[Event.IniDCSUnitName] = self.CLIENTS[ Event.IniDCSUnitName ] - end + local PlayerName = Event.IniDCSUnit:getPlayerName() + if not self.PLAYERSALIVE[PlayerName] then + self:AddPlayer( Event.IniDCSUnitName, PlayerName ) end end end + --- Handles the OnPlayerLeaveUnit event to clean the active players table. -- @param #DATABASE self -- @param Event#EVENTDATA Event @@ -430,19 +409,16 @@ function DATABASE:_EventOnPlayerLeaveUnit( Event ) self:F2( { Event } ) if Event.IniDCSUnit then - if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then - if self.PlayersAlive[Event.IniDCSUnitName] then - self:E( { "Cleaning player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } ) - self.PlayersAlive[Event.IniDCSUnitName] = nil - self.ClientsAlive[Event.IniDCSUnitName] = nil - end + local PlayerName = Event.IniDCSUnit:getPlayerName() + if self.PLAYERSALIVE[PlayerName] then + self:DeletePlayer( PlayerName ) end end end --- Iterators ---- Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters. +--- Iterate the DATABASE and call an iterator function for the given set, providing the Object for each element within the set and optional parameters. -- @param #DATABASE self -- @param #function IteratorFunction The function that will be called when there is an alive player in the database. -- @return #DATABASE self @@ -485,9 +461,9 @@ function DATABASE:ForEach( IteratorFunction, arg, Set ) end ---- Interate the DATABASE and call an interator function for each **alive** unit, providing the Unit and optional parameters. +--- Iterate the DATABASE and call an iterator function for each **alive** unit, providing the DCSUnit and optional parameters. -- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter. +-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a DCSUnit parameter. -- @return #DATABASE self function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) self:F2( arg ) @@ -497,20 +473,58 @@ function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) return self end ---- Interate the DATABASE and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. + +--- Iterate the DATABASE and call an iterator function for each **alive** UNIT, providing the UNIT and optional parameters. -- @param #DATABASE self --- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.UNITS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **alive** GROUP, providing the GROUP and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the database. The function needs to accept a GROUP parameter. +-- @return #DATABASE self +function DATABASE:ForEachGroup( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.GROUPS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each player, providing the player name and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an player in the database. The function needs to accept the player name. -- @return #DATABASE self function DATABASE:ForEachPlayer( IteratorFunction, ... ) self:F2( arg ) - self:ForEach( IteratorFunction, arg, self.PlayersAlive ) + self:ForEach( IteratorFunction, arg, self.PLAYERS ) return self end ---- Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters. +--- Iterate the DATABASE and call an iterator function for each **alive** player, providing the Unit of the player and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachPlayerAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERSALIVE ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each CLIENT, providing the CLIENT to the function and optional parameters. -- @param #DATABASE self -- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter. -- @return #DATABASE self @@ -522,8 +536,20 @@ function DATABASE:ForEachClient( IteratorFunction, ... ) return self end +--- Iterate the DATABASE and call an iterator function for each **ALIVE** CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClientAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTSALIVE ) -function DATABASE:ScanEnvironment() + return self +end + + +function DATABASE:_RegisterTemplates() self:F2() self.Navpoints = {} @@ -586,110 +612,9 @@ function DATABASE:ScanEnvironment() end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then end --for coa_name, coa_data in pairs(mission.coalition) do - self:_RegisterDatabase() - self:_RegisterPlayers() - return self end ---- --- @param #DATABASE self --- @param DCSUnit#Unit DCSUnit --- @return #DATABASE self -function DATABASE:_IsIncludeDCSUnit( DCSUnit ) - self:F2( DCSUnit ) - local DCSUnitInclude = true - - if self.Filter.Coalitions then - local DCSUnitCoalition = false - for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do - self:T2( { "Coalition:", DCSUnit:getCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) - if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == DCSUnit:getCoalition() then - DCSUnitCoalition = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCoalition - end - - if self.Filter.Categories then - local DCSUnitCategory = false - for CategoryID, CategoryName in pairs( self.Filter.Categories ) do - self:T2( { "Category:", DCSUnit:getDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) - if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == DCSUnit:getDesc().category then - DCSUnitCategory = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCategory - end - - if self.Filter.Types then - local DCSUnitType = false - for TypeID, TypeName in pairs( self.Filter.Types ) do - self:T2( { "Type:", DCSUnit:getTypeName(), TypeName } ) - if TypeName == DCSUnit:getTypeName() then - DCSUnitType = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitType - end - - if self.Filter.Countries then - local DCSUnitCountry = false - for CountryID, CountryName in pairs( self.Filter.Countries ) do - self:T2( { "Country:", DCSUnit:getCountry(), CountryName } ) - if country.id[CountryName] == DCSUnit:getCountry() then - DCSUnitCountry = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitCountry - end - - if self.Filter.UnitPrefixes then - local DCSUnitPrefix = false - for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do - self:T2( { "Unit Prefix:", string.find( DCSUnit:getName(), UnitPrefix, 1 ), UnitPrefix } ) - if string.find( DCSUnit:getName(), UnitPrefix, 1 ) then - DCSUnitPrefix = true - end - end - DCSUnitInclude = DCSUnitInclude and DCSUnitPrefix - end - - self:T2( DCSUnitInclude ) - return DCSUnitInclude -end - ---- --- @param #DATABASE self --- @param DCSUnit#Unit DCSUnit --- @return #DATABASE self -function DATABASE:_IsAliveDCSUnit( DCSUnit ) - self:F2( DCSUnit ) - local DCSUnitAlive = false - if DCSUnit and DCSUnit:isExist() and DCSUnit:isActive() then - if self.DCSUnits[DCSUnit:getName()] then - DCSUnitAlive = true - end - end - self:T2( DCSUnitAlive ) - return DCSUnitAlive -end - ---- --- @param #DATABASE self --- @param DCSGroup#Group DCSGroup --- @return #DATABASE self -function DATABASE:_IsAliveDCSGroup( DCSGroup ) - self:F2( DCSGroup ) - local DCSGroupAlive = false - if DCSGroup and DCSGroup:isExist() then - if self.DCSGroups[DCSGroup:getName()] then - DCSGroupAlive = true - end - end - self:T2( DCSGroupAlive ) - return DCSGroupAlive -end diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index b9df585ce..123f51481 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -11,5 +11,5 @@ Include.File( "Event" ) _EVENTDISPATCHER = EVENT:New() -- #EVENT --- Declare the main database object, which is used internally by the MOOSE classes. -_DATABASE = DATABASE:New():ScanEnvironment() -- Database#DATABASE +_DATABASE = DATABASE:New() -- Database#DATABASE diff --git a/Moose Development/Moose/Set.lua b/Moose Development/Moose/Set.lua index 6b0ba0260..feff204a4 100644 --- a/Moose Development/Moose/Set.lua +++ b/Moose Development/Moose/Set.lua @@ -325,7 +325,7 @@ end --- Flushes the current SET contents in the log ... (for debug reasons). -- @param #SET self --- @return #SET self +-- @return #string A string with the names of the objects. function SET:Flush() self:F3() @@ -334,6 +334,8 @@ function SET:Flush() ObjectNames = ObjectNames .. ObjectName .. ", " end self:T( { "Objects in Set:", ObjectNames } ) + + return ObjectNames end diff --git a/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua b/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua index cbea27ae9..d299d3501 100644 --- a/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua +++ b/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua @@ -88,6 +88,21 @@ DBRedVehicles :ForEachUnit( function( MooseUnit ) DBRedVehicles:T( MooseUnit:GetName() ) end ) + +local function FlushPlayers() + + _DATABASE:E( "FlushPlayers" ) + _DATABASE + :ForEachPlayerAlive( function( Player ) + _DATABASE:E( Player ) + MESSAGE:New( Player, "Test", 5, "Player Test" ):ToAll() + return true + end ) + return true +end + +_DATABASE:E( "Schedule" ) +local PlayerShow = SCHEDULER:New( nil, FlushPlayers, {}, 1, 10 ) diff --git a/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz b/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz index 7f9c38b8f44683700581f2ac62ab650541703abc..35621d8d47379b72dda92f0f740f4a5442d94ba8 100644 GIT binary patch delta 24800 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 delta 15804 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 Date: Fri, 27 May 2016 13:34:25 +0200 Subject: [PATCH 04/12] DATABASE and SETS publish first version. --- .../l10n/DEFAULT/Moose.lua | 16659 +++++++++++++++- Moose Mission Setup/Moose.lua | 16659 +++++++++++++++- .../Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz | Bin 98334 -> 199246 bytes .../Moose_Test_DATABASE.miz | Bin 38047 -> 138994 bytes .../Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz | Bin 33518 -> 134430 bytes .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz | Bin 59173 -> 160085 bytes .../Moose_Test_MISSILETRAINER.miz | Bin 118467 -> 219379 bytes .../Moose_Test_SEAD/MOOSE_Test_SEAD.miz | Bin 25771 -> 126683 bytes .../Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz | Bin 51188 -> 152100 bytes .../MOOSE_Test_SPAWN_Repeat.miz | Bin 25332 -> 126244 bytes .../MOOSE_Test_TASK_Pickup_and_Deploy.miz | Bin 31933 -> 132845 bytes .../Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz | Bin 40952 -> 141864 bytes 12 files changed, 33272 insertions(+), 46 deletions(-) diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index d4c566d6b..6339b2e01 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,6 +1,5 @@ -env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160527_1003' ) - +env.info( '*** MOOSE STATIC INCLUDE START *** ' ) +env.info( 'Moose Generation Timestamp: 20160527_1334' ) local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) @@ -12,27 +11,9 @@ Include.Path = function() end Include.File = function( IncludeFile ) - if not Include.Files[ IncludeFile ] then - Include.Files[IncludeFile] = IncludeFile - env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath ) - local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) ) - if f == nil then - env.info( "Include:" .. IncludeFile .. " from " .. Include.MissionPath ) - local f = assert( base.loadfile( Include.MissionPath .. IncludeFile .. ".lua" ) ) - if f == nil then - error ("Could not load MOOSE file " .. IncludeFile .. ".lua" ) - else - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.MissionPath ) - return f() - end - else - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath ) - return f() - end - end end -Include.ProgramPath = "Scripts/Moose/" +Include.ProgramPath = "Scripts/Moose/Moose/" Include.MissionPath = Include.Path() env.info( "Include.ProgramPath = " .. Include.ProgramPath) @@ -42,4 +23,16636 @@ Include.Files = {} Include.File( "Moose" ) -env.info("Loaded MOOSE Include Engine")env.info( '*** MOOSE INCLUDE END *** ' ) +env.info("Loaded MOOSE Include Engine") +--- Various routines +-- @module routines +-- @author Flightcontrol + +--Include.File( "Trace" ) +--Include.File( "Message" ) + + +env.setErrorMessageBoxEnabled(false) + +--- Extract of MIST functions. +-- @author Grimes + +routines = {} + + +-- don't change these +routines.majorVersion = 3 +routines.minorVersion = 3 +routines.build = 22 + +----------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------- +-- Utils- conversion, Lua utils, etc. +routines.utils = {} + +--from http://lua-users.org/wiki/CopyTable +routines.utils.deepCopy = function(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(object)) + end + local objectreturn = _copy(object) + return objectreturn +end + + +-- porting in Slmod's serialize_slmod2 +routines.utils.oneLineSerialize = function(tbl) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function + + lookup_table = {} + + local function _Serialize( tbl ) + + if type(tbl) == 'table' then --function only works for tables! + + if lookup_table[tbl] then + return lookup_table[object] + end + + local tbl_str = {} + + lookup_table[tbl] = tbl_str + + tbl_str[#tbl_str + 1] = '{' + + for ind,val in pairs(tbl) do -- serialize its fields + local ind_str = {} + if type(ind) == "number" then + ind_str[#ind_str + 1] = '[' + ind_str[#ind_str + 1] = tostring(ind) + ind_str[#ind_str + 1] = ']=' + else --must be a string + ind_str[#ind_str + 1] = '[' + ind_str[#ind_str + 1] = routines.utils.basicSerialize(ind) + ind_str[#ind_str + 1] = ']=' + end + + local val_str = {} + if ((type(val) == 'number') or (type(val) == 'boolean')) then + val_str[#val_str + 1] = tostring(val) + val_str[#val_str + 1] = ',' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'string' then + val_str[#val_str + 1] = routines.utils.basicSerialize(val) + val_str[#val_str + 1] = ',' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'nil' then -- won't ever happen, right? + val_str[#val_str + 1] = 'nil,' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'table' then + if ind == "__index" then + -- tbl_str[#tbl_str + 1] = "__index" + -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it + else + + val_str[#val_str + 1] = _Serialize(val) + val_str[#val_str + 1] = ',' --I think this is right, I just added it + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + end + elseif type(val) == 'function' then + -- tbl_str[#tbl_str + 1] = "function " .. tostring(ind) + -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it + else +-- env.info('unable to serialize value type ' .. routines.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind)) +-- env.info( debug.traceback() ) + end + + end + tbl_str[#tbl_str + 1] = '}' + return table.concat(tbl_str) + else + return tostring(tbl) + end + end + + local objectreturn = _Serialize(tbl) + return objectreturn +end + +--porting in Slmod's "safestring" basic serialize +routines.utils.basicSerialize = function(s) + if s == nil then + return "\"\"" + else + if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then + return tostring(s) + elseif type(s) == 'string' then + s = string.format('%q', s) + return s + end + end +end + + +routines.utils.toDegree = function(angle) + return angle*180/math.pi +end + +routines.utils.toRadian = function(angle) + return angle*math.pi/180 +end + +routines.utils.metersToNM = function(meters) + return meters/1852 +end + +routines.utils.metersToFeet = function(meters) + return meters/0.3048 +end + +routines.utils.NMToMeters = function(NM) + return NM*1852 +end + +routines.utils.feetToMeters = function(feet) + return feet*0.3048 +end + +routines.utils.mpsToKnots = function(mps) + return mps*3600/1852 +end + +routines.utils.mpsToKmph = function(mps) + return mps*3.6 +end + +routines.utils.knotsToMps = function(knots) + return knots*1852/3600 +end + +routines.utils.kmphToMps = function(kmph) + return kmph/3.6 +end + +function routines.utils.makeVec2(Vec3) + if Vec3.z then + return {x = Vec3.x, y = Vec3.z} + else + return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. + end +end + +function routines.utils.makeVec3(Vec2, y) + if not Vec2.z then + if not y then + y = 0 + end + return {x = Vec2.x, y = y, z = Vec2.y} + else + return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. + end +end + +function routines.utils.makeVec3GL(Vec2, offset) + local adj = offset or 0 + + if not Vec2.z then + return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} + else + return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} + end +end + +routines.utils.zoneToVec3 = function(zone) + local new = {} + if type(zone) == 'table' and zone.point then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + elseif type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + if zone then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + end + end +end + +-- gets heading-error corrected direction from point along vector vec. +function routines.utils.getDir(vec, point) + local dir = math.atan2(vec.z, vec.x) + dir = dir + routines.getNorthCorrection(point) + if dir < 0 then + dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi + end + return dir +end + +-- gets distance in meters between two points (2 dimensional) +function routines.utils.get2DDist(point1, point2) + point1 = routines.utils.makeVec3(point1) + point2 = routines.utils.makeVec3(point2) + return routines.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) +end + +-- gets distance in meters between two points (3 dimensional) +function routines.utils.get3DDist(point1, point2) + return routines.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) +end + + + +-- From http://lua-users.org/wiki/SimpleRound +-- use negative idp for rounding ahead of decimal place, positive for rounding after decimal place +routines.utils.round = function(num, idp) + local mult = 10^(idp or 0) + return math.floor(num * mult + 0.5) / mult +end + +-- porting in Slmod's dostring +routines.utils.dostring = function(s) + local f, err = loadstring(s) + if f then + return true, f() + else + return false, err + end +end + + +--3D Vector manipulation +routines.vec = {} + +routines.vec.add = function(vec1, vec2) + return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} +end + +routines.vec.sub = function(vec1, vec2) + return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} +end + +routines.vec.scalarMult = function(vec, mult) + return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} +end + +routines.vec.scalar_mult = routines.vec.scalarMult + +routines.vec.dp = function(vec1, vec2) + return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z +end + +routines.vec.cp = function(vec1, vec2) + return { x = vec1.y*vec2.z - vec1.z*vec2.y, y = vec1.z*vec2.x - vec1.x*vec2.z, z = vec1.x*vec2.y - vec1.y*vec2.x} +end + +routines.vec.mag = function(vec) + return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 +end + +routines.vec.getUnitVec = function(vec) + local mag = routines.vec.mag(vec) + return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } +end + +routines.vec.rotateVec2 = function(vec2, theta) + return { x = vec2.x*math.cos(theta) - vec2.y*math.sin(theta), y = vec2.x*math.sin(theta) + vec2.y*math.cos(theta)} +end +--------------------------------------------------------------------------------------------------------------------------- + + + + +-- acc- the accuracy of each easting/northing. 0, 1, 2, 3, 4, or 5. +routines.tostringMGRS = function(MGRS, acc) + if acc == 0 then + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph + else + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Easting/(10^(5-acc)), 0)) + .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Northing/(10^(5-acc)), 0)) + end +end + +--[[acc: +in DM: decimal point of minutes. +In DMS: decimal point of seconds. +position after the decimal of the least significant digit: +So: +42.32 - acc of 2. +]] +routines.tostringLL = function(lat, lon, acc, DMS) + + local latHemi, lonHemi + if lat > 0 then + latHemi = 'N' + else + latHemi = 'S' + end + + if lon > 0 then + lonHemi = 'E' + else + lonHemi = 'W' + end + + lat = math.abs(lat) + lon = math.abs(lon) + + local latDeg = math.floor(lat) + local latMin = (lat - latDeg)*60 + + local lonDeg = math.floor(lon) + local lonMin = (lon - lonDeg)*60 + + if DMS then -- degrees, minutes, and seconds. + local oldLatMin = latMin + latMin = math.floor(latMin) + local latSec = routines.utils.round((oldLatMin - latMin)*60, acc) + + local oldLonMin = lonMin + lonMin = math.floor(lonMin) + local lonSec = routines.utils.round((oldLonMin - lonMin)*60, acc) + + if latSec == 60 then + latSec = 0 + latMin = latMin + 1 + end + + if lonSec == 60 then + lonSec = 0 + lonMin = lonMin + 1 + end + + local secFrmtStr -- create the formatting string for the seconds place + if acc <= 0 then -- no decimal place. + secFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + secFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format('%02d', latMin) .. '\' ' .. string.format(secFrmtStr, latSec) .. '"' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format('%02d', lonMin) .. '\' ' .. string.format(secFrmtStr, lonSec) .. '"' .. lonHemi + + else -- degrees, decimal minutes. + latMin = routines.utils.round(latMin, acc) + lonMin = routines.utils.round(lonMin, acc) + + if latMin == 60 then + latMin = 0 + latDeg = latDeg + 1 + end + + if lonMin == 60 then + lonMin = 0 + lonDeg = lonDeg + 1 + end + + local minFrmtStr -- create the formatting string for the minutes place + if acc <= 0 then -- no decimal place. + minFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + minFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format(minFrmtStr, latMin) .. '\'' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format(minFrmtStr, lonMin) .. '\'' .. lonHemi + + end +end + +--[[ required: az - radian + required: dist - meters + optional: alt - meters (set to false or nil if you don't want to use it). + optional: metric - set true to get dist and alt in km and m. + precision will always be nearest degree and NM or km.]] +routines.tostringBR = function(az, dist, alt, metric) + az = routines.utils.round(routines.utils.toDegree(az), 0) + + if metric then + dist = routines.utils.round(dist/1000, 2) + else + dist = routines.utils.round(routines.utils.metersToNM(dist), 2) + end + + local s = string.format('%03d', az) .. ' for ' .. dist + + if alt then + if metric then + s = s .. ' at ' .. routines.utils.round(alt, 0) + else + s = s .. ' at ' .. routines.utils.round(routines.utils.metersToFeet(alt), 0) + end + end + return s +end + +routines.getNorthCorrection = function(point) --gets the correction needed for true north + if not point.z then --Vec2; convert to Vec3 + point.z = point.y + point.y = 0 + end + local lat, lon = coord.LOtoLL(point) + local north_posit = coord.LLtoLO(lat + 1, lon) + return math.atan2(north_posit.z - point.z, north_posit.x - point.x) +end + + +-- the main area +do + -- THE MAIN FUNCTION -- Accessed 100 times/sec. + routines.main = function() + timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) --reschedule first in case of Lua error + ---------------------------------------------------------------------------------------------------------- + --area to add new stuff in + + routines.do_scheduled_functions() + end -- end of routines.main + + timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) + +end + + +do + local idNum = 0 + + --Simplified event handler + routines.addEventHandler = function(f) --id is optional! + local handler = {} + idNum = idNum + 1 + handler.id = idNum + handler.f = f + handler.onEvent = function(self, event) + self.f(event) + end + world.addEventHandler(handler) + end + + routines.removeEventHandler = function(id) + for key, handler in pairs(world.eventHandlers) do + if handler.id and handler.id == id then + world.eventHandlers[key] = nil + return true + end + end + return false + end +end + +-- need to return a Vec3 or Vec2? +function routines.getRandPointInCircle(point, radius, innerRadius) + local theta = 2*math.pi*math.random() + local rad = math.random() + math.random() + if rad > 1 then + rad = 2 - rad + end + + local radMult + if innerRadius and innerRadius <= radius then + radMult = (radius - innerRadius)*rad + innerRadius + else + radMult = radius*rad + end + + if not point.z then --might as well work with vec2/3 + point.z = point.y + end + + local rndCoord + if radius > 0 then + rndCoord = {x = math.cos(theta)*radMult + point.x, y = math.sin(theta)*radMult + point.z} + else + rndCoord = {x = point.x, y = point.z} + end + return rndCoord +end + +routines.goRoute = function(group, path) + local misTask = { + id = 'Mission', + params = { + route = { + points = routines.utils.deepCopy(path), + }, + }, + } + if type(group) == 'string' then + group = Group.getByName(group) + end + local groupCon = group:getController() + if groupCon then + groupCon:setTask(misTask) + return true + end + + Controller.setTask(groupCon, misTask) + return false +end + + +-- Useful atomic functions from mist, ported. + +routines.ground = {} +routines.fixedWing = {} +routines.heli = {} + +routines.ground.buildWP = function(point, overRideForm, overRideSpeed) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + local form, speed + + if point.speed and not overRideSpeed then + wp.speed = point.speed + elseif type(overRideSpeed) == 'number' then + wp.speed = overRideSpeed + else + wp.speed = routines.utils.kmphToMps(20) + end + + if point.form and not overRideForm then + form = point.form + else + form = overRideForm + end + + if not form then + wp.action = 'Cone' + else + form = string.lower(form) + if form == 'off_road' or form == 'off road' then + wp.action = 'Off Road' + elseif form == 'on_road' or form == 'on road' then + wp.action = 'On Road' + elseif form == 'rank' or form == 'line_abrest' or form == 'line abrest' or form == 'lineabrest'then + wp.action = 'Rank' + elseif form == 'cone' then + wp.action = 'Cone' + elseif form == 'diamond' then + wp.action = 'Diamond' + elseif form == 'vee' then + wp.action = 'Vee' + elseif form == 'echelon_left' or form == 'echelon left' or form == 'echelonl' then + wp.action = 'EchelonL' + elseif form == 'echelon_right' or form == 'echelon right' or form == 'echelonr' then + wp.action = 'EchelonR' + else + wp.action = 'Cone' -- if nothing matched + end + end + + wp.type = 'Turning Point' + + return wp + +end + +routines.fixedWing.buildWP = function(point, WPtype, speed, alt, altType) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 2000 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = routines.utils.kmphToMps(500) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp +end + +routines.heli.buildWP = function(point, WPtype, speed, alt, altType) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 500 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = routines.utils.kmphToMps(200) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp +end + +routines.groupToRandomPoint = function(vars) + local group = vars.group --Required + local point = vars.point --required + local radius = vars.radius or 0 + local innerRadius = vars.innerRadius + local form = vars.form or 'Cone' + local heading = vars.heading or math.random()*2*math.pi + local headingDegrees = vars.headingDegrees + local speed = vars.speed or routines.utils.kmphToMps(20) + + + local useRoads + if not vars.disableRoads then + useRoads = true + else + useRoads = false + end + + local path = {} + + if headingDegrees then + heading = headingDegrees*math.pi/180 + end + + if heading >= 2*math.pi then + heading = heading - 2*math.pi + end + + local rndCoord = routines.getRandPointInCircle(point, radius, innerRadius) + + local offset = {} + local posStart = routines.getLeadPos(group) + + offset.x = routines.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) + offset.z = routines.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) + path[#path + 1] = routines.ground.buildWP(posStart, form, speed) + + + if useRoads == true and ((point.x - posStart.x)^2 + (point.z - posStart.z)^2)^0.5 > radius * 1.3 then + path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 11, ['z'] = posStart.z + 11}, 'off_road', speed) + path[#path + 1] = routines.ground.buildWP(posStart, 'on_road', speed) + path[#path + 1] = routines.ground.buildWP(offset, 'on_road', speed) + else + path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 25, ['z'] = posStart.z + 25}, form, speed) + end + + path[#path + 1] = routines.ground.buildWP(offset, form, speed) + path[#path + 1] = routines.ground.buildWP(rndCoord, form, speed) + + routines.goRoute(group, path) + + return +end + +routines.groupRandomDistSelf = function(gpData, dist, form, heading, speed) + local pos = routines.getLeadPos(gpData) + local fakeZone = {} + fakeZone.radius = dist or math.random(300, 1000) + fakeZone.point = {x = pos.x, y, pos.y, z = pos.z} + routines.groupToRandomZone(gpData, fakeZone, form, heading, speed) + + return +end + +routines.groupToRandomZone = function(gpData, zone, form, heading, speed) + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + if type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + elseif type(zone) == 'table' and not zone.radius then + zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + end + + if speed then + speed = routines.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.radius = zone.radius + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.point = routines.utils.zoneToVec3(zone) + + routines.groupToRandomPoint(vars) + + return +end + +routines.isTerrainValid = function(coord, terrainTypes) -- vec2/3 and enum or table of acceptable terrain types + if coord.z then + coord.y = coord.z + end + local typeConverted = {} + + if type(terrainTypes) == 'string' then -- if its a string it does this check + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(terrainTypes) or string.lower(constData) == string.lower(terrainTypes) then + table.insert(typeConverted, constId) + end + end + elseif type(terrainTypes) == 'table' then -- if its a table it does this check + for typeId, typeData in pairs(terrainTypes) do + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(typeData) or string.lower(constData) == string.lower(typeId) then + table.insert(typeConverted, constId) + end + end + end + end + for validIndex, validData in pairs(typeConverted) do + if land.getSurfaceType(coord) == land.SurfaceType[validData] then + return true + end + end + return false +end + +routines.groupToPoint = function(gpData, point, form, heading, speed, useRoads) + if type(point) == 'string' then + point = trigger.misc.getZone(point) + end + if speed then + speed = routines.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.disableRoads = useRoads + vars.point = routines.utils.zoneToVec3(point) + routines.groupToRandomPoint(vars) + + return +end + + +routines.getLeadPos = function(group) + if type(group) == 'string' then -- group name + group = Group.getByName(group) + end + + local units = group:getUnits() + + local leader = units[1] + if not leader then -- SHOULD be good, but if there is a bug, this code future-proofs it then. + local lowestInd = math.huge + for ind, unit in pairs(units) do + if ind < lowestInd then + lowestInd = ind + leader = unit + end + end + end + if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... + return leader:getPosition().p + end +end + +--[[ vars for routines.getMGRSString: +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +]] +routines.getMGRSString = function(vars) + local units = vars.units + local acc = vars.acc or 5 + local avgPos = routines.getAvgPos(units) + if avgPos then + return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) + end +end + +--[[ vars for routines.getLLString +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer, number of numbers after decimal place +vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. + + +]] +routines.getLLString = function(vars) + local units = vars.units + local acc = vars.acc or 3 + local DMS = vars.DMS + local avgPos = routines.getAvgPos(units) + if avgPos then + local lat, lon = coord.LOtoLL(avgPos) + return routines.tostringLL(lat, lon, acc, DMS) + end +end + +--[[ +vars.zone - table of a zone name. +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +]] +routines.getBRStringZone = function(vars) + local zone = trigger.misc.getZone( vars.zone ) + local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + if zone then + local vec = {x = zone.point.x - ref.x, y = zone.point.y - ref.y, z = zone.point.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(zone.point, ref) + if alt then + alt = zone.y + end + return routines.tostringBR(dir, dist, alt, metric) + else + env.info( 'routines.getBRStringZone: error: zone is nil' ) + end +end + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +]] +routines.getBRString = function(vars) + local units = vars.units + local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + local avgPos = routines.getAvgPos(units) + if avgPos then + local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(avgPos, ref) + if alt then + alt = avgPos.y + end + return routines.tostringBR(dir, dist, alt, metric) + end +end + + +-- Returns the Vec3 coordinates of the average position of the concentration of units most in the heading direction. +--[[ vars for routines.getLeadingPos: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +]] +routines.getLeadingPos = function(vars) + local units = vars.units + local heading = vars.heading + local radius = vars.radius + if vars.headingDegrees then + heading = routines.utils.toRadian(vars.headingDegrees) + end + + local unitPosTbl = {} + for i = 1, #units do + local unit = Unit.getByName(units[i]) + if unit and unit:isExist() then + unitPosTbl[#unitPosTbl + 1] = unit:getPosition().p + end + end + if #unitPosTbl > 0 then -- one more more units found. + -- first, find the unit most in the heading direction + local maxPos = -math.huge + + local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = + for i = 1, #unitPosTbl do + local rotatedVec2 = routines.vec.rotateVec2(routines.utils.makeVec2(unitPosTbl[i]), heading) + if (not maxPos) or maxPos < rotatedVec2.x then + maxPos = rotatedVec2.x + maxPosInd = i + end + end + + --now, get all the units around this unit... + local avgPos + if radius then + local maxUnitPos = unitPosTbl[maxPosInd] + local avgx, avgy, avgz, totNum = 0, 0, 0, 0 + for i = 1, #unitPosTbl do + if routines.utils.get2DDist(maxUnitPos, unitPosTbl[i]) <= radius then + avgx = avgx + unitPosTbl[i].x + avgy = avgy + unitPosTbl[i].y + avgz = avgz + unitPosTbl[i].z + totNum = totNum + 1 + end + end + avgPos = { x = avgx/totNum, y = avgy/totNum, z = avgz/totNum} + else + avgPos = unitPosTbl[maxPosInd] + end + + return avgPos + end +end + + +--[[ vars for routines.getLeadingMGRSString: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.acc - number, 0 to 5. +]] +routines.getLeadingMGRSString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local acc = vars.acc or 5 + return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) + end +end + +--[[ vars for routines.getLeadingLLString: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.acc - number of digits after decimal point (can be negative) +vars.DMS - boolean, true if you want DMS. +]] +routines.getLeadingLLString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local acc = vars.acc or 3 + local DMS = vars.DMS + local lat, lon = coord.LOtoLL(pos) + return routines.tostringLL(lat, lon, acc, DMS) + end +end + + + +--[[ vars for routines.getLeadingBRString: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.metric - boolean, if true, use km instead of NM. +vars.alt - boolean, if true, include altitude. +vars.ref - vec3/vec2 reference point. +]] +routines.getLeadingBRString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local ref = vars.ref + local alt = vars.alt + local metric = vars.metric + + local vec = {x = pos.x - ref.x, y = pos.y - ref.y, z = pos.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(pos, ref) + if alt then + alt = pos.y + end + return routines.tostringBR(dir, dist, alt, metric) + end +end + +--[[ vars for routines.message.add + vars.text = 'Hello World' + vars.displayTime = 20 + vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} + +]] + +--[[ vars for routines.msgMGRS +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +vars.text - text in the message +vars.displayTime - self explanatory +vars.msgFor - scope +]] +routines.msgMGRS = function(vars) + local units = vars.units + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getMGRSString{units = units, acc = acc} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } +end + +--[[ vars for routines.msgLL +vars.units - table of unit names (NOT unitNameTable- maybe this should change) (Yes). +vars.acc - integer, number of numbers after decimal place +vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. +vars.text - text in the message +vars.displayTime - self explanatory +vars.msgFor - scope +]] +routines.msgLL = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLLString{units = units, acc = acc, DMS = DMS} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgBR = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString + local alt = vars.alt + local metric = vars.metric + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getBRString{units = units, ref = ref, alt = alt, metric = metric} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + + +-------------------------------------------------------------------------------------------- +-- basically, just sub-types of routines.msgBR... saves folks the work of getting the ref point. +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - string red, blue +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgBullseye = function(vars) + if string.lower(vars.ref) == 'red' then + vars.ref = routines.DBs.missionData.bullseye.red + routines.msgBR(vars) + elseif string.lower(vars.ref) == 'blue' then + vars.ref = routines.DBs.missionData.bullseye.blue + routines.msgBR(vars) + end +end + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - unit name of reference point +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] + +routines.msgBRA = function(vars) + if Unit.getByName(vars.ref) then + vars.ref = Unit.getByName(vars.ref):getPosition().p + if not vars.alt then + vars.alt = true + end + routines.msgBR(vars) + end +end +-------------------------------------------------------------------------------------------- + +--[[ vars for routines.msgLeadingMGRS: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.acc - number, 0 to 5. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingMGRS = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + + +end +--[[ vars for routines.msgLeadingLL: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.acc - number of digits after decimal point (can be negative) +vars.DMS - boolean, true if you want DMS. (optional) +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingLL = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + +--[[ +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.metric - boolean, if true, use km instead of NM. (optional) +vars.alt - boolean, if true, include altitude. (optional) +vars.ref - vec3/vec2 reference point. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingBR = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local metric = vars.metric + local alt = vars.alt + local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } +end + + +function spairs(t, order) + -- collect the keys + local keys = {} + for k in pairs(t) do keys[#keys+1] = k end + + -- if order function given, sort by it by passing the table and keys a, b, + -- otherwise just sort the keys + if order then + table.sort(keys, function(a,b) return order(t, a, b) end) + else + table.sort(keys) + end + + -- return the iterator function + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], t[keys[i]] + end + end +end + + +function routines.IsPartOfGroupInZones( CargoGroup, LandingZones ) +--trace.f() + + local CurrentZoneID = nil + + if CargoGroup then + local CargoUnits = CargoGroup:getUnits() + for CargoUnitID, CargoUnit in pairs( CargoUnits ) do + if CargoUnit and CargoUnit:getLife() >= 1.0 then + CurrentZoneID = routines.IsUnitInZones( CargoUnit, LandingZones ) + if CurrentZoneID then + break + end + end + end + end + +--trace.r( "", "", { CurrentZoneID } ) + return CurrentZoneID +end + + + +function routines.IsUnitInZones( TransportUnit, LandingZones ) +--trace.f("", "routines.IsUnitInZones" ) + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + if TransportUnit then + local TransportUnitPos = TransportUnit:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = 1 + end + end + if TransportZoneResult then + --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) + else + --trace.i( "routines", "TransportZone:nil logic" ) + end + return TransportZoneResult + else + --trace.i( "routines", "TransportZone:nil hard" ) + return nil + end +end + +function routines.IsUnitNearZonesRadius( TransportUnit, LandingZones, ZoneRadius ) +--trace.f("", "routines.IsUnitInZones" ) + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + if TransportUnit then + local TransportUnitPos = TransportUnit:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then + TransportZoneResult = 1 + end + end + if TransportZoneResult then + --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) + else + --trace.i( "routines", "TransportZone:nil logic" ) + end + return TransportZoneResult + else + --trace.i( "routines", "TransportZone:nil hard" ) + return nil + end +end + + +function routines.IsStaticInZones( TransportStatic, LandingZones ) +--trace.f() + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + local TransportStaticPos = TransportStatic:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = 1 + end + end + +--trace.r( "", "", { TransportZoneResult } ) + return TransportZoneResult +end + + +function routines.IsUnitInRadius( CargoUnit, ReferencePosition, Radius ) +--trace.f() + + local Valid = true + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + local CargoPos = CargoUnit:getPosition().p + local ReferenceP = ReferencePosition.p + + if (((CargoPos.x - ReferenceP.x)^2 + (CargoPos.z - ReferenceP.z)^2)^0.5 <= Radius) then + else + Valid = false + end + + return Valid +end + +function routines.IsPartOfGroupInRadius( CargoGroup, ReferencePosition, Radius ) +--trace.f() + + local Valid = true + + Valid = routines.ValidateGroup( CargoGroup, "CargoGroup", Valid ) + + -- fill-up some local variables to support further calculations to determine location of units within the zone + local CargoUnits = CargoGroup:getUnits() + for CargoUnitId, CargoUnit in pairs( CargoUnits ) do + local CargoUnitPos = CargoUnit:getPosition().p +-- env.info( 'routines.IsPartOfGroupInRadius: CargoUnitPos.x = ' .. CargoUnitPos.x .. ' CargoUnitPos.z = ' .. CargoUnitPos.z ) + local ReferenceP = ReferencePosition.p +-- env.info( 'routines.IsPartOfGroupInRadius: ReferenceGroupPos.x = ' .. ReferenceGroupPos.x .. ' ReferenceGroupPos.z = ' .. ReferenceGroupPos.z ) + + if ((( CargoUnitPos.x - ReferenceP.x)^2 + (CargoUnitPos.z - ReferenceP.z)^2)^0.5 <= Radius) then + else + Valid = false + break + end + end + + return Valid +end + + +function routines.ValidateString( Variable, VariableName, Valid ) +--trace.f() + + if type( Variable ) == "string" then + if Variable == "" then + error( "routines.ValidateString: error: " .. VariableName .. " must be filled out!" ) + Valid = false + end + else + error( "routines.ValidateString: error: " .. VariableName .. " is not a string." ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateNumber( Variable, VariableName, Valid ) +--trace.f() + + if type( Variable ) == "number" then + else + error( "routines.ValidateNumber: error: " .. VariableName .. " is not a number." ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid + +end + +function routines.ValidateGroup( Variable, VariableName, Valid ) +--trace.f() + + if Variable == nil then + error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateZone( LandingZones, VariableName, Valid ) +--trace.f() + + if LandingZones == nil then + error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) + Valid = false + end + + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + if trigger.misc.getZone( LandingZoneName ) == nil then + error( "routines.ValidateGroup: error: Zone " .. LandingZoneName .. " does not exist!" ) + Valid = false + break + end + end + else + if trigger.misc.getZone( LandingZones ) == nil then + error( "routines.ValidateGroup: error: Zone " .. LandingZones .. " does not exist!" ) + Valid = false + end + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateEnumeration( Variable, VariableName, Enum, Valid ) +--trace.f() + + local ValidVariable = false + + for EnumId, EnumData in pairs( Enum ) do + if Variable == EnumData then + ValidVariable = true + break + end + end + + if ValidVariable then + else + error( 'TransportValidateEnum: " .. VariableName .. " is not a valid type.' .. Variable ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints but returns speed and formation type along with vec2 of point} + -- refactor to search by groupId and allow groupId and groupName as inputs + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + gpId = _DATABASE.Templates.Groups[groupIdent].groupId + end + + for coa_name, coa_data in pairs(env.mission.coalition) do + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + for obj_type_name, obj_type_data in pairs(cntry_data) do + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_type_data.group) do + if group_data and group_data.groupId == gpId then -- this is the group we are looking for + if group_data.route and group_data.route.points and #group_data.route.points > 0 then + local points = {} + + for point_num, point in pairs(group_data.route.points) do + local routeData = {} + if not point.point then + routeData.x = point.x + routeData.y = point.y + else + routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation. + end + routeData.form = point.action + routeData.speed = point.speed + routeData.alt = point.alt + routeData.alt_type = point.alt_type + routeData.airdromeId = point.airdromeId + routeData.helipadId = point.helipadId + routeData.type = point.type + routeData.action = point.action + if task then + routeData.task = point.task + end + points[point_num] = routeData + end + + return points + end + return + end --if group_data and group_data.name and group_data.name == 'groupname' + end --for group_num, group_data in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do +end + +routines.ground.patrolRoute = function(vars) + + + local tempRoute = {} + local useRoute = {} + local gpData = vars.gpData + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + local useGroupRoute + if not vars.useGroupRoute then + useGroupRoute = vars.gpData + else + useGroupRoute = vars.useGroupRoute + end + local routeProvided = false + if not vars.route then + if useGroupRoute then + tempRoute = routines.getGroupRoute(useGroupRoute) + end + else + useRoute = vars.route + local posStart = routines.getLeadPos(gpData) + useRoute[1] = routines.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed) + routeProvided = true + end + + + local overRideSpeed = vars.speed or 'default' + local pType = vars.pType + local offRoadForm = vars.offRoadForm or 'default' + local onRoadForm = vars.onRoadForm or 'default' + + if routeProvided == false and #tempRoute > 0 then + local posStart = routines.getLeadPos(gpData) + + + useRoute[#useRoute + 1] = routines.ground.buildWP(posStart, offRoadForm, overRideSpeed) + for i = 1, #tempRoute do + local tempForm = tempRoute[i].action + local tempSpeed = tempRoute[i].speed + + if offRoadForm == 'default' then + tempForm = tempRoute[i].action + end + if onRoadForm == 'default' then + onRoadForm = 'On Road' + end + if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then + tempForm = onRoadForm + else + tempForm = offRoadForm + end + + if type(overRideSpeed) == 'number' then + tempSpeed = overRideSpeed + end + + + useRoute[#useRoute + 1] = routines.ground.buildWP(tempRoute[i], tempForm, tempSpeed) + end + + if pType and string.lower(pType) == 'doubleback' then + local curRoute = routines.utils.deepCopy(useRoute) + for i = #curRoute, 2, -1 do + useRoute[#useRoute + 1] = routines.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed) + end + end + + useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP + end + + local cTask3 = {} + local newPatrol = {} + newPatrol.route = useRoute + newPatrol.gpData = gpData:getName() + cTask3[#cTask3 + 1] = 'routines.ground.patrolRoute(' + cTask3[#cTask3 + 1] = routines.utils.oneLineSerialize(newPatrol) + cTask3[#cTask3 + 1] = ')' + cTask3 = table.concat(cTask3) + local tempTask = { + id = 'WrappedAction', + params = { + action = { + id = 'Script', + params = { + command = cTask3, + + }, + }, + }, + } + + + useRoute[#useRoute].task = tempTask + routines.goRoute(gpData, useRoute) + + return +end + +routines.ground.patrol = function(gpData, pType, form, speed) + local vars = {} + + if type(gpData) == 'table' and gpData:getName() then + gpData = gpData:getName() + end + + vars.useGroupRoute = gpData + vars.gpData = gpData + vars.pType = pType + vars.offRoadForm = form + vars.speed = speed + + routines.ground.patrolRoute(vars) + + return +end + +function routines.GetUnitHeight( CheckUnit ) +--trace.f( "routines" ) + + local UnitPoint = CheckUnit:getPoint() + local UnitPosition = { x = UnitPoint.x, y = UnitPoint.z } + local UnitHeight = UnitPoint.y + + local LandHeight = land.getHeight( UnitPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + --trace.f( "routines", "Unit Height = " .. UnitHeight - LandHeight ) + + return UnitHeight - LandHeight + +end + + + +Su34Status = { status = {} } +boardMsgRed = { statusMsg = "" } +boardMsgAll = { timeMsg = "" } +SpawnSettings = {} +Su34MenuPath = {} +Su34Menus = 0 + + +function Su34AttackCarlVinson(groupName) +--trace.menu("", "Su34AttackCarlVinson") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupCarlVinson = Group.getByName("US Carl Vinson #001") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupCarlVinson ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupCarlVinson:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + Su34Status.status[groupName] = 1 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking carrier Carl Vinson. ', 10, 'RedStatus' .. groupName ) +end + +function Su34AttackWest(groupName) +--trace.f("","Su34AttackWest") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupShipWest1 = Group.getByName("US Ship West #001") + local groupShipWest2 = Group.getByName("US Ship West #002") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupShipWest1 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + if groupShipWest2 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + Su34Status.status[groupName] = 2 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the west. ', 10, 'RedStatus' .. groupName ) +end + +function Su34AttackNorth(groupName) +--trace.menu("","Su34AttackNorth") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupShipNorth1 = Group.getByName("US Ship North #001") + local groupShipNorth2 = Group.getByName("US Ship North #002") + local groupShipNorth3 = Group.getByName("US Ship North #003") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupShipNorth1 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + if groupShipNorth2 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + if groupShipNorth3 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth3:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + Su34Status.status[groupName] = 3 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the north. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Orbit(groupName) +--trace.menu("","Su34Orbit") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + controllerSu34:pushTask( {id = 'ControlledTask', params = { task = { id = 'Orbit', params = { pattern = AI.Task.OrbitPattern.RACE_TRACK } }, stopCondition = { duration = 600 } } } ) + Su34Status.status[groupName] = 4 + MessageToRed( string.format('%s: ',groupName) .. 'In orbit and awaiting further instructions. ', 10, 'RedStatus' .. groupName ) +end + +function Su34TakeOff(groupName) +--trace.menu("","Su34TakeOff") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + Su34Status.status[groupName] = 8 + MessageToRed( string.format('%s: ',groupName) .. 'Take-Off. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Hold(groupName) +--trace.menu("","Su34Hold") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + Su34Status.status[groupName] = 5 + MessageToRed( string.format('%s: ',groupName) .. 'Holding Weapons. ', 10, 'RedStatus' .. groupName ) +end + +function Su34RTB(groupName) +--trace.menu("","Su34RTB") + Su34Status.status[groupName] = 6 + MessageToRed( string.format('%s: ',groupName) .. 'Return to Krasnodar. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Destroyed(groupName) +--trace.menu("","Su34Destroyed") + Su34Status.status[groupName] = 7 + MessageToRed( string.format('%s: ',groupName) .. 'Destroyed. ', 30, 'RedStatus' .. groupName ) +end + +function GroupAlive( groupName ) +--trace.menu("","GroupAlive") + local groupTest = Group.getByName( groupName ) + + local groupExists = false + + if groupTest then + groupExists = groupTest:isExist() + end + + --trace.r( "", "", { groupExists } ) + return groupExists +end + +function Su34IsDead() +--trace.f() + +end + +function Su34OverviewStatus() +--trace.menu("","Su34OverviewStatus") + local msg = "" + local currentStatus = 0 + local Exists = false + + for groupName, currentStatus in pairs(Su34Status.status) do + + env.info(('Su34 Overview Status: GroupName = ' .. groupName )) + Alive = GroupAlive( groupName ) + + if Alive then + if currentStatus == 1 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking carrier Carl Vinson. " + elseif currentStatus == 2 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking supporting ships in the west. " + elseif currentStatus == 3 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking invading ships in the north. " + elseif currentStatus == 4 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "In orbit and awaiting further instructions. " + elseif currentStatus == 5 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Holding Weapons. " + elseif currentStatus == 6 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Return to Krasnodar. " + elseif currentStatus == 7 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Destroyed. " + elseif currentStatus == 8 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Take-Off. " + end + else + if currentStatus == 7 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Destroyed. " + else + Su34Destroyed(groupName) + end + end + end + + boardMsgRed.statusMsg = msg +end + + +function UpdateBoardMsg() +--trace.f() + Su34OverviewStatus() + MessageToRed( boardMsgRed.statusMsg, 15, 'RedStatus' ) +end + +function MusicReset( flg ) +--trace.f() + trigger.action.setUserFlag(95,flg) +end + +function PlaneActivate(groupNameFormat, flg) +--trace.f() + local groupName = groupNameFormat .. string.format("#%03d", trigger.misc.getUserFlag(flg)) + --trigger.action.outText(groupName,10) + trigger.action.activateGroup(Group.getByName(groupName)) +end + +function Su34Menu(groupName) +--trace.f() + + --env.info(( 'Su34Menu(' .. groupName .. ')' )) + local groupSu34 = Group.getByName( groupName ) + + if Su34Status.status[groupName] == 1 or + Su34Status.status[groupName] == 2 or + Su34Status.status[groupName] == 3 or + Su34Status.status[groupName] == 4 or + Su34Status.status[groupName] == 5 then + if Su34MenuPath[groupName] == nil then + if planeMenuPath == nil then + planeMenuPath = missionCommands.addSubMenuForCoalition( + coalition.side.RED, + "SU-34 anti-ship flights", + nil + ) + end + Su34MenuPath[groupName] = missionCommands.addSubMenuForCoalition( + coalition.side.RED, + "Flight " .. groupName, + planeMenuPath + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack carrier Carl Vinson", + Su34MenuPath[groupName], + Su34AttackCarlVinson, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack ships in the west", + Su34MenuPath[groupName], + Su34AttackWest, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack ships in the north", + Su34MenuPath[groupName], + Su34AttackNorth, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Hold position and await instructions", + Su34MenuPath[groupName], + Su34Orbit, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Report status", + Su34MenuPath[groupName], + Su34OverviewStatus + ) + end + else + if Su34MenuPath[groupName] then + missionCommands.removeItemForCoalition(coalition.side.RED, Su34MenuPath[groupName]) + end + end +end + +--- Obsolete function, but kept to rework in framework. + +function ChooseInfantry ( TeleportPrefixTable, TeleportMax ) +--trace.f("Spawn") + --env.info(( 'ChooseInfantry: ' )) + + TeleportPrefixTableCount = #TeleportPrefixTable + TeleportPrefixTableIndex = math.random( 1, TeleportPrefixTableCount ) + + --env.info(( 'ChooseInfantry: TeleportPrefixTableIndex = ' .. TeleportPrefixTableIndex .. ' TeleportPrefixTableCount = ' .. TeleportPrefixTableCount .. ' TeleportMax = ' .. TeleportMax )) + + local TeleportFound = false + local TeleportLoop = true + local Index = TeleportPrefixTableIndex + local TeleportPrefix = '' + + while TeleportLoop do + TeleportPrefix = TeleportPrefixTable[Index] + if SpawnSettings[TeleportPrefix] then + if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then + SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 + TeleportFound = true + else + TeleportFound = false + end + else + SpawnSettings[TeleportPrefix] = {} + SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 + TeleportFound = true + end + if TeleportFound then + TeleportLoop = false + else + if Index < TeleportPrefixTableCount then + Index = Index + 1 + else + TeleportLoop = false + end + end + --env.info(( 'ChooseInfantry: Loop 1 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) + end + + if TeleportFound == false then + TeleportLoop = true + Index = 1 + while TeleportLoop do + TeleportPrefix = TeleportPrefixTable[Index] + if SpawnSettings[TeleportPrefix] then + if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then + SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 + TeleportFound = true + else + TeleportFound = false + end + else + SpawnSettings[TeleportPrefix] = {} + SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 + TeleportFound = true + end + if TeleportFound then + TeleportLoop = false + else + if Index < TeleportPrefixTableIndex then + Index = Index + 1 + else + TeleportLoop = false + end + end + --env.info(( 'ChooseInfantry: Loop 2 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) + end + end + + local TeleportGroupName = '' + if TeleportFound == true then + TeleportGroupName = TeleportPrefix .. string.format("#%03d", SpawnSettings[TeleportPrefix]['SpawnCount'] ) + else + TeleportGroupName = '' + end + + --env.info(('ChooseInfantry: TeleportGroupName = ' .. TeleportGroupName )) + --env.info(('ChooseInfantry: return')) + + return TeleportGroupName +end + +SpawnedInfantry = 0 + +function LandCarrier ( CarrierGroup, LandingZonePrefix ) +--trace.f() + --env.info(( 'LandCarrier: ' )) + --env.info(( 'LandCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) + --env.info(( 'LandCarrier: LandingZone = ' .. LandingZonePrefix )) + + local controllerGroup = CarrierGroup:getController() + + local LandingZone = trigger.misc.getZone(LandingZonePrefix) + local LandingZonePos = {} + LandingZonePos.x = LandingZone.point.x + math.random(LandingZone.radius * -1, LandingZone.radius) + LandingZonePos.y = LandingZone.point.z + math.random(LandingZone.radius * -1, LandingZone.radius) + + controllerGroup:pushTask( { id = 'Land', params = { point = LandingZonePos, durationFlag = true, duration = 10 } } ) + + --env.info(( 'LandCarrier: end' )) +end + +EscortCount = 0 +function EscortCarrier ( CarrierGroup, EscortPrefix, EscortLastWayPoint, EscortEngagementDistanceMax, EscortTargetTypes ) +--trace.f() + --env.info(( 'EscortCarrier: ' )) + --env.info(( 'EscortCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) + --env.info(( 'EscortCarrier: EscortPrefix = ' .. EscortPrefix )) + + local CarrierName = CarrierGroup:getName() + + local EscortMission = {} + local CarrierMission = {} + + local EscortMission = SpawnMissionGroup( EscortPrefix ) + local CarrierMission = SpawnMissionGroup( CarrierGroup:getName() ) + + if EscortMission ~= nil and CarrierMission ~= nil then + + EscortCount = EscortCount + 1 + EscortMissionName = string.format( EscortPrefix .. '#Escort %s', CarrierName ) + EscortMission.name = EscortMissionName + EscortMission.groupId = nil + EscortMission.lateActivation = false + EscortMission.taskSelected = false + + local EscortUnits = #EscortMission.units + for u = 1, EscortUnits do + EscortMission.units[u].name = string.format( EscortPrefix .. '#Escort %s %02d', CarrierName, u ) + EscortMission.units[u].unitId = nil + end + + + EscortMission.route.points[1].task = { id = "ComboTask", + params = + { + tasks = + { + [1] = + { + enabled = true, + auto = false, + id = "Escort", + number = 1, + params = + { + lastWptIndexFlagChangedManually = false, + groupId = CarrierGroup:getID(), + lastWptIndex = nil, + lastWptIndexFlag = false, + engagementDistMax = EscortEngagementDistanceMax, + targetTypes = EscortTargetTypes, + pos = + { + y = 20, + x = 20, + z = 0, + } -- end of ["pos"] + } -- end of ["params"] + } -- end of [1] + } -- end of ["tasks"] + } -- end of ["params"] + } -- end of ["task"] + + SpawnGroupAdd( EscortPrefix, EscortMission ) + + end +end + +function SendMessageToCarrier( CarrierGroup, CarrierMessage ) +--trace.f() + + if CarrierGroup ~= nil then + MessageToGroup( CarrierGroup, CarrierMessage, 30, 'Carrier/' .. CarrierGroup:getName() ) + end + +end + +function MessageToGroup( MsgGroup, MsgText, MsgTime, MsgName ) +--trace.f() + + if type(MsgGroup) == 'string' then + --env.info( 'MessageToGroup: Converted MsgGroup string "' .. MsgGroup .. '" into a Group structure.' ) + MsgGroup = Group.getByName( MsgGroup ) + end + + if MsgGroup ~= nil then + local MsgTable = {} + MsgTable.text = MsgText + MsgTable.displayTime = MsgTime + MsgTable.msgFor = { units = { MsgGroup:getUnits()[1]:getName() } } + MsgTable.name = MsgName + --routines.message.add( MsgTable ) + --env.info(('MessageToGroup: Message sent to ' .. MsgGroup:getUnits()[1]:getName() .. ' -> ' .. MsgText )) + end +end + +function MessageToUnit( UnitName, MsgText, MsgTime, MsgName ) +--trace.f() + + if UnitName ~= nil then + local MsgTable = {} + MsgTable.text = MsgText + MsgTable.displayTime = MsgTime + MsgTable.msgFor = { units = { UnitName } } + MsgTable.name = MsgName + --routines.message.add( MsgTable ) + end +end + +function MessageToAll( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "Message", MsgTime, MsgName ):ToCoalition( coalition.side.RED ):ToCoalition( coalition.side.BLUE ) +end + +function MessageToRed( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "To Red Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) +end + +function MessageToBlue( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "To Blue Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) +end + +function getCarrierHeight( CarrierGroup ) +--trace.f() + + if CarrierGroup ~= nil then + if table.getn(CarrierGroup:getUnits()) == 1 then + local CarrierUnit = CarrierGroup:getUnits()[1] + local CurrentPoint = CarrierUnit:getPoint() + + local CurrentPosition = { x = CurrentPoint.x, y = CurrentPoint.z } + local CarrierHeight = CurrentPoint.y + + local LandHeight = land.getHeight( CurrentPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + return CarrierHeight - LandHeight + else + return 999999 + end + else + return 999999 + end + +end + +function GetUnitHeight( CheckUnit ) +--trace.f() + + local UnitPoint = CheckUnit:getPoint() + local UnitPosition = { x = CurrentPoint.x, y = CurrentPoint.z } + local UnitHeight = CurrentPoint.y + + local LandHeight = land.getHeight( CurrentPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + return UnitHeight - LandHeight + +end + + +_MusicTable = {} +_MusicTable.Files = {} +_MusicTable.Queue = {} +_MusicTable.FileCnt = 0 + + +function MusicRegister( SndRef, SndFile, SndTime ) +--trace.f() + + env.info(( 'MusicRegister: SndRef = ' .. SndRef )) + env.info(( 'MusicRegister: SndFile = ' .. SndFile )) + env.info(( 'MusicRegister: SndTime = ' .. SndTime )) + + + _MusicTable.FileCnt = _MusicTable.FileCnt + 1 + + _MusicTable.Files[_MusicTable.FileCnt] = {} + _MusicTable.Files[_MusicTable.FileCnt].Ref = SndRef + _MusicTable.Files[_MusicTable.FileCnt].File = SndFile + _MusicTable.Files[_MusicTable.FileCnt].Time = SndTime + + if not _MusicTable.Function then + _MusicTable.Function = routines.scheduleFunction( MusicScheduler, { }, timer.getTime() + 10, 10) + end + +end + +function MusicToPlayer( SndRef, PlayerName, SndContinue ) +--trace.f() + + --env.info(( 'MusicToPlayer: SndRef = ' .. SndRef )) + + local PlayerUnits = AlivePlayerUnits() + for PlayerUnitIdx, PlayerUnit in pairs(PlayerUnits) do + local PlayerUnitName = PlayerUnit:getPlayerName() + --env.info(( 'MusicToPlayer: PlayerUnitName = ' .. PlayerUnitName )) + if PlayerName == PlayerUnitName then + PlayerGroup = PlayerUnit:getGroup() + if PlayerGroup then + --env.info(( 'MusicToPlayer: PlayerGroup = ' .. PlayerGroup:getName() )) + MusicToGroup( SndRef, PlayerGroup, SndContinue ) + end + break + end + end + + --env.info(( 'MusicToPlayer: end' )) + +end + +function MusicToGroup( SndRef, SndGroup, SndContinue ) +--trace.f() + + --env.info(( 'MusicToGroup: SndRef = ' .. SndRef )) + + if SndGroup ~= nil then + if _MusicTable and _MusicTable.FileCnt > 0 then + if SndGroup:isExist() then + if MusicCanStart(SndGroup:getUnit(1):getPlayerName()) then + --env.info(( 'MusicToGroup: OK for Sound.' )) + local SndIdx = 0 + if SndRef == '' then + --env.info(( 'MusicToGroup: SndRef as empty. Queueing at random.' )) + SndIdx = math.random( 1, _MusicTable.FileCnt ) + else + for SndIdx = 1, _MusicTable.FileCnt do + if _MusicTable.Files[SndIdx].Ref == SndRef then + break + end + end + end + --env.info(( 'MusicToGroup: SndIdx = ' .. SndIdx )) + --env.info(( 'MusicToGroup: Queueing Music ' .. _MusicTable.Files[SndIdx].File .. ' for Group ' .. SndGroup:getID() )) + trigger.action.outSoundForGroup( SndGroup:getID(), _MusicTable.Files[SndIdx].File ) + MessageToGroup( SndGroup, 'Playing ' .. _MusicTable.Files[SndIdx].File, 15, 'Music-' .. SndGroup:getUnit(1):getPlayerName() ) + + local SndQueueRef = SndGroup:getUnit(1):getPlayerName() + if _MusicTable.Queue[SndQueueRef] == nil then + _MusicTable.Queue[SndQueueRef] = {} + end + _MusicTable.Queue[SndQueueRef].Start = timer.getTime() + _MusicTable.Queue[SndQueueRef].PlayerName = SndGroup:getUnit(1):getPlayerName() + _MusicTable.Queue[SndQueueRef].Group = SndGroup + _MusicTable.Queue[SndQueueRef].ID = SndGroup:getID() + _MusicTable.Queue[SndQueueRef].Ref = SndIdx + _MusicTable.Queue[SndQueueRef].Continue = SndContinue + _MusicTable.Queue[SndQueueRef].Type = Group + end + end + end + end +end + +function MusicCanStart(PlayerName) +--trace.f() + + --env.info(( 'MusicCanStart:' )) + + local MusicOut = false + + if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then + --env.info(( 'MusicCanStart: PlayerName = ' .. PlayerName )) + local PlayerFound = false + local MusicStart = 0 + local MusicTime = 0 + for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do + if SndQueue.PlayerName == PlayerName then + PlayerFound = true + MusicStart = SndQueue.Start + MusicTime = _MusicTable.Files[SndQueue.Ref].Time + break + end + end + if PlayerFound then + --env.info(( 'MusicCanStart: MusicStart = ' .. MusicStart )) + --env.info(( 'MusicCanStart: MusicTime = ' .. MusicTime )) + --env.info(( 'MusicCanStart: timer.getTime() = ' .. timer.getTime() )) + + if MusicStart + MusicTime <= timer.getTime() then + MusicOut = true + end + else + MusicOut = true + end + end + + if MusicOut then + --env.info(( 'MusicCanStart: true' )) + else + --env.info(( 'MusicCanStart: false' )) + end + + return MusicOut +end + +function MusicScheduler() +--trace.scheduled("", "MusicScheduler") + + --env.info(( 'MusicScheduler:' )) + if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then + --env.info(( 'MusicScheduler: Walking Sound Queue.')) + for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do + if SndQueue.Continue then + if MusicCanStart(SndQueue.PlayerName) then + --env.info(('MusicScheduler: MusicToGroup')) + MusicToPlayer( '', SndQueue.PlayerName, true ) + end + end + end + end + +end + + +env.info(( 'Init: Scripts Loaded v1.1' )) + +--- BASE classes. +-- +-- @{#BASE} class +-- ============== +-- The @{#BASE} class is the super class for most of the classes defined within MOOSE. +-- +-- It handles: +-- +-- * The construction and inheritance of child classes. +-- * The tracing of objects during mission execution within the DCS.log file (under saved games folder). +-- +-- Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes. +-- +-- BASE Trace functionality +-- ======================== +-- The BASE class contains trace methods to trace progress within a mission execution of a certain object. +-- Note that these trace methods are inherited by each MOOSE class interiting BASE. +-- As such, each object created from derived class from BASE can use the tracing functions to trace its execution. +-- +-- Trace a function call +-- --------------------- +-- There are basically 3 types of tracing methods available within BASE: +-- +-- * @{#BASE.F}: Trace the beginning of a function and its given parameters. +-- * @{#BASE.T}: Trace further logic within a function giving optional variables or parameters. +-- * @{#BASE.E}: Trace an execption within a function giving optional variables or parameters. An exception will always be traced. +-- +-- Tracing levels +-- -------------- +-- There are 3 tracing levels within MOOSE. +-- These tracing levels were defined to avoid bulks of tracing to be generated by lots of objects. +-- +-- As such, the F and T methods have additional variants to trace level 2 and 3 respectively: +-- +-- * @{#BASE.F2}: Trace the beginning of a function and its given parameters with tracing level 2. +-- * @{#BASE.F3}: Trace the beginning of a function and its given parameters with tracing level 3. +-- * @{#BASE.T2}: Trace further logic within a function giving optional variables or parameters with tracing level 2. +-- * @{#BASE.T3}: Trace further logic within a function giving optional variables or parameters with tracing level 3. +-- +-- BASE Inheritance support +-- ======================== +-- The following methods are available to support inheritance: +-- +-- * @{#BASE.Inherit}: Inherits from a class. +-- * @{#BASE.Inherited}: Returns the parent class from the class. +-- +-- Future +-- ====== +-- Further methods may be added to BASE whenever there is a need to make "overall" functions available within MOOSE. +-- +-- ==== +-- +-- @module Base +-- @author FlightControl + +Include.File( "Routines" ) + +local _TraceOn = true +local _TraceLevel = 1 +local _TraceClass = { + --DATABASE = true, + --SEAD = true, + --DESTROYBASETASK = true, + --MOVEMENT = true, + --SPAWN = true, + --STAGE = true, + --ZONE = true, + --GROUP = true, + --UNIT = true, + --CLIENT = true, + --CARGO = true, + --CARGO_GROUP = true, + --CARGO_PACKAGE = true, + --CARGO_SLINGLOAD = true, + --CARGO_ZONE = true, + --CLEANUP = true, + --MENU_CLIENT = true, + --MENU_CLIENT_COMMAND = true, + --ESCORT = true, + } +local _TraceClassMethod = {} + +--- The BASE Class +-- @type BASE +-- @field ClassName The name of the class. +-- @field ClassID The ID number of the class. +BASE = { + ClassName = "BASE", + ClassID = 0, + Events = {} +} + +--- The Formation Class +-- @type FORMATION +-- @field Cone A cone formation. +FORMATION = { + Cone = "Cone" +} + + + +--- The base constructor. This is the top top class of all classed defined within the MOOSE. +-- Any new class needs to be derived from this class for proper inheritance. +-- @param #BASE self +-- @return #BASE The new instance of the BASE class. +-- @usage +-- function TASK:New() +-- +-- local self = BASE:Inherit( self, BASE:New() ) +-- +-- -- assign Task default values during construction +-- self.TaskBriefing = "Task: No Task." +-- self.Time = timer.getTime() +-- self.ExecuteStage = _TransportExecuteStage.NONE +-- +-- return self +-- end +-- @todo need to investigate if the deepCopy is really needed... Don't think so. +function BASE:New() + local Child = routines.utils.deepCopy( self ) + local Parent = {} + setmetatable( Child, Parent ) + Child.__index = Child + self.ClassID = self.ClassID + 1 + Child.ClassID = self.ClassID + --Child.AddEvent( Child, S_EVENT_BIRTH, Child.EventBirth ) + return Child +end + +--- This is the worker method to inherit from a parent class. +-- @param #BASE self +-- @param Child is the Child class that inherits. +-- @param #BASE Parent is the Parent class that the Child inherits from. +-- @return #BASE Child +function BASE:Inherit( Child, Parent ) + local Child = routines.utils.deepCopy( Child ) + local Parent = routines.utils.deepCopy( Parent ) + if Child ~= nil then + setmetatable( Child, Parent ) + Child.__index = Child + end + --Child.ClassName = Child.ClassName .. '.' .. Child.ClassID + self:T( 'Inherited from ' .. Parent.ClassName ) + return Child +end + +--- This is the worker method to retrieve the Parent class. +-- @param #BASE self +-- @param #BASE Child is the Child class from which the Parent class needs to be retrieved. +-- @return #BASE +function BASE:Inherited( Child ) + local Parent = getmetatable( Child ) +-- env.info('Inherited class of ' .. Child.ClassName .. ' is ' .. Parent.ClassName ) + return Parent +end + +--- Get the ClassName + ClassID of the class instance. +-- The ClassName + ClassID is formatted as '%s#%09d'. +-- @param #BASE self +-- @return #string The ClassName + ClassID of the class instance. +function BASE:GetClassNameAndID() + return string.format( '%s#%09d', self:GetClassName(), self:GetClassID() ) +end + +--- Get the ClassName of the class instance. +-- @param #BASE self +-- @return #string The ClassName of the class instance. +function BASE:GetClassName() + return self.ClassName +end + +--- Get the ClassID of the class instance. +-- @param #BASE self +-- @return #string The ClassID of the class instance. +function BASE:GetClassID() + return self.ClassID +end + +--- Set a new listener for the class. +-- @param self +-- @param DCSTypes#Event Event +-- @param #function EventFunction +-- @return #BASE +function BASE:AddEvent( Event, EventFunction ) + self:F( Event ) + + self.Events[#self.Events+1] = {} + self.Events[#self.Events].Event = Event + self.Events[#self.Events].EventFunction = EventFunction + self.Events[#self.Events].EventEnabled = false + + return self +end + +--- Returns the event dispatcher +-- @param #BASE self +-- @return Event#EVENT +function BASE:Event() + + return _EVENTDISPATCHER +end + + + + + +--- Enable the event listeners for the class. +-- @param #BASE self +-- @return #BASE +function BASE:EnableEvents() + self:F( #self.Events ) + + for EventID, Event in pairs( self.Events ) do + Event.Self = self + Event.EventEnabled = true + end + self.Events.Handler = world.addEventHandler( self ) + + return self +end + + +--- Disable the event listeners for the class. +-- @param #BASE self +-- @return #BASE +function BASE:DisableEvents() + self:F() + + world.removeEventHandler( self ) + for EventID, Event in pairs( self.Events ) do + Event.Self = nil + Event.EventEnabled = false + end + + return self +end + + +local BaseEventCodes = { + "S_EVENT_SHOT", + "S_EVENT_HIT", + "S_EVENT_TAKEOFF", + "S_EVENT_LAND", + "S_EVENT_CRASH", + "S_EVENT_EJECTION", + "S_EVENT_REFUELING", + "S_EVENT_DEAD", + "S_EVENT_PILOT_DEAD", + "S_EVENT_BASE_CAPTURED", + "S_EVENT_MISSION_START", + "S_EVENT_MISSION_END", + "S_EVENT_TOOK_CONTROL", + "S_EVENT_REFUELING_STOP", + "S_EVENT_BIRTH", + "S_EVENT_HUMAN_FAILURE", + "S_EVENT_ENGINE_STARTUP", + "S_EVENT_ENGINE_SHUTDOWN", + "S_EVENT_PLAYER_ENTER_UNIT", + "S_EVENT_PLAYER_LEAVE_UNIT", + "S_EVENT_PLAYER_COMMENT", + "S_EVENT_SHOOTING_START", + "S_EVENT_SHOOTING_END", + "S_EVENT_MAX", +} + +--onEvent( {[1]="S_EVENT_BIRTH",[2]={["subPlace"]=5,["time"]=0,["initiator"]={["id_"]=16884480,},["place"]={["id_"]=5000040,},["id"]=15,["IniUnitName"]="US F-15C@RAMP-Air Support Mountains#001-01",},} +-- Event = { +-- id = enum world.event, +-- time = Time, +-- initiator = Unit, +-- target = Unit, +-- place = Unit, +-- subPlace = enum world.BirthPlace, +-- weapon = Weapon +-- } + +--- Creation of a Birth Event. +-- @param #BASE self +-- @param DCSTypes#Time EventTime The time stamp of the event. +-- @param DCSObject#Object Initiator The initiating object of the event. +-- @param #string IniUnitName The initiating unit name. +-- @param place +-- @param subplace +function BASE:CreateEventBirth( EventTime, Initiator, IniUnitName, place, subplace ) + self:F( { EventTime, Initiator, IniUnitName, place, subplace } ) + + local Event = { + id = world.event.S_EVENT_BIRTH, + time = EventTime, + initiator = Initiator, + IniUnitName = IniUnitName, + place = place, + subplace = subplace + } + + world.onEvent( Event ) +end + +--- Creation of a Crash Event. +-- @param #BASE self +-- @param DCSTypes#Time EventTime The time stamp of the event. +-- @param DCSObject#Object Initiator The initiating object of the event. +function BASE:CreateEventCrash( EventTime, Initiator ) + self:F( { EventTime, Initiator } ) + + local Event = { + id = world.event.S_EVENT_CRASH, + time = EventTime, + initiator = Initiator, + } + + world.onEvent( Event ) +end + +-- TODO: Complete DCSTypes#Event structure. +--- The main event handling function... This function captures all events generated for the class. +-- @param #BASE self +-- @param DCSTypes#Event event +function BASE:onEvent(event) + --self:F( { BaseEventCodes[event.id], event } ) + + if self then + for EventID, EventObject in pairs( self.Events ) do + if EventObject.EventEnabled then + --env.info( 'onEvent Table EventObject.Self = ' .. tostring(EventObject.Self) ) + --env.info( 'onEvent event.id = ' .. tostring(event.id) ) + --env.info( 'onEvent EventObject.Event = ' .. tostring(EventObject.Event) ) + if event.id == EventObject.Event then + if self == EventObject.Self then + if event.initiator and event.initiator:isExist() then + event.IniUnitName = event.initiator:getName() + end + if event.target and event.target:isExist() then + event.TgtUnitName = event.target:getName() + end + --self:T( { BaseEventCodes[event.id], event } ) + --EventObject.EventFunction( self, event ) + end + end + end + end + end +end + +-- Trace section + +-- Log a trace (only shown when trace is on) +-- TODO: Make trace function using variable parameters. + +--- Set trace level +-- @param #BASE self +-- @param #number Level +function BASE:TraceLevel( Level ) + _TraceLevel = Level + self:E( "Tracing level " .. Level ) +end + +--- Set tracing for a class +-- @param #BASE self +-- @param #string Class +function BASE:TraceClass( Class ) + _TraceClass[Class] = true + _TraceClassMethod[Class] = {} + self:E( "Tracing class " .. Class ) +end + +--- Set tracing for a specific method of class +-- @param #BASE self +-- @param #string Class +-- @param #string Method +function BASE:TraceClassMethod( Class, Method ) + if not _TraceClassMethod[Class] then + _TraceClassMethod[Class] = {} + _TraceClassMethod[Class].Method = {} + end + _TraceClassMethod[Class].Method[Method] = true + self:E( "Tracing method " .. Method .. " of class " .. Class ) +end + +--- Trace a function call. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F( Arguments ) + + if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = 0 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "F", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) + end + end +end + +--- Trace a function call level 2. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F2( Arguments ) + + if _TraceLevel >= 2 then + self:F( Arguments ) + end + +end + +--- Trace a function call level 3. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F3( Arguments ) + + if _TraceLevel >= 3 then + self:F( Arguments ) + end + +end + +--- Trace a function logic. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T( Arguments ) + + if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = 0 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s" , LineCurrent, LineFrom, "T", self.ClassName, self.ClassID, routines.utils.oneLineSerialize( Arguments ) ) ) + end + end +end + +--- Trace a function logic level 2. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T2( Arguments ) + + if _TraceLevel >= 2 then + self:T( Arguments ) + end + +end + +--- Trace a function logic level 3. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T3( Arguments ) + + if _TraceLevel >= 3 then + self:T( Arguments ) + end + +end + +--- Log an exception which will be traced always. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:E( Arguments ) + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = -1 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "E", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) +end + + + +--- Models time events calling event handing functions. +-- +-- @{SCHEDULER} class +-- =================== +-- The @{SCHEDULER} class models time events calling given event handling functions. +-- +-- SCHEDULER constructor +-- ===================== +-- The SCHEDULER class is quite easy to use: +-- +-- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. +-- +-- SCHEDULER timer methods +-- ======================= +-- The SCHEDULER can be stopped and restarted with the following methods: +-- +-- * @{#SCHEDULER.Start}: (Re-)Start the scheduler. +-- * @{#SCHEDULER.Start}: Stop the scheduler. +-- +-- @module Scheduler +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) + + +--- The SCHEDULER class +-- @type SCHEDULER +-- @extends Base#BASE +SCHEDULER = { + ClassName = "SCHEDULER", +} + + +--- Constructor. +-- @param #SCHEDULER self +-- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. +-- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. +-- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. +-- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. +-- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. +-- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. +-- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. +-- @return #SCHEDULER self +function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( { TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) + + self.TimeEventObject = TimeEventObject + self.TimeEventFunction = TimeEventFunction + self.TimeEventFunctionArguments = TimeEventFunctionArguments + self.StartSeconds = StartSeconds + + if RepeatSecondsInterval then + self.RepeatSecondsInterval = RepeatSecondsInterval + else + self.RepeatSecondsInterval = 0 + end + + if RandomizationFactor then + self.RandomizationFactor = RandomizationFactor + else + self.RandomizationFactor = 0 + end + + if StopSeconds then + self.StopSeconds = StopSeconds + end + + self.Repeat = false + + self.StartTime = timer.getTime() + + self:Start() + + return self +end + +--- (Re-)Starts the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Start() + self:F2( self.TimeEventObject ) + + self.Repeat = true + timer.scheduleFunction( self._Scheduler, self, timer.getTime() + self.StartSeconds + .01 ) + + return self +end + +--- Stops the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Stop() + self:F2( self.TimeEventObject ) + + self.Repeat = false + + return self +end + +-- Private Functions + +function SCHEDULER:_Scheduler() + self:F2( self.TimeEventFunctionArguments ) + + local ErrorHandler = function( errmsg ) + + env.info( "Error in SCHEDULER function:" .. errmsg ) + env.info( debug.traceback() ) + + return errmsg + end + + local Status, Result + if self.TimeEventObject then + Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + else + Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + end + + self:T( { Status, Result } ) + + if Status and Status == true and Result and Result == true then + if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then + timer.scheduleFunction( + self._Scheduler, + self, + timer.getTime() + self.RepeatSecondsInterval + math.random( - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) ) + 0.01 + ) + end + end + +end + + + + + + + + +--- The EVENT class models an efficient event handling process between other classes and its units, weapons. +-- @module Event +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) + +--- The EVENT structure +-- @type EVENT +-- @field #EVENT.Events Events +EVENT = { + ClassName = "EVENT", + ClassID = 0, +} + +local _EVENTCODES = { + "S_EVENT_SHOT", + "S_EVENT_HIT", + "S_EVENT_TAKEOFF", + "S_EVENT_LAND", + "S_EVENT_CRASH", + "S_EVENT_EJECTION", + "S_EVENT_REFUELING", + "S_EVENT_DEAD", + "S_EVENT_PILOT_DEAD", + "S_EVENT_BASE_CAPTURED", + "S_EVENT_MISSION_START", + "S_EVENT_MISSION_END", + "S_EVENT_TOOK_CONTROL", + "S_EVENT_REFUELING_STOP", + "S_EVENT_BIRTH", + "S_EVENT_HUMAN_FAILURE", + "S_EVENT_ENGINE_STARTUP", + "S_EVENT_ENGINE_SHUTDOWN", + "S_EVENT_PLAYER_ENTER_UNIT", + "S_EVENT_PLAYER_LEAVE_UNIT", + "S_EVENT_PLAYER_COMMENT", + "S_EVENT_SHOOTING_START", + "S_EVENT_SHOOTING_END", + "S_EVENT_MAX", +} + +--- The Event structure +-- @type EVENTDATA +-- @field id +-- @field initiator +-- @field target +-- @field weapon +-- @field IniDCSUnit +-- @field IniDCSUnitName +-- @field IniDCSGroup +-- @field IniDCSGroupName +-- @field TgtDCSUnit +-- @field TgtDCSUnitName +-- @field TgtDCSGroup +-- @field TgtDCSGroupName +-- @field Weapon +-- @field WeaponName +-- @field WeaponTgtDCSUnit + +--- The Events structure +-- @type EVENT.Events +-- @field #number IniUnit + +function EVENT:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F2() + self.EventHandler = world.addEventHandler( self ) + return self +end + +function EVENT:EventText( EventID ) + + local EventText = _EVENTCODES[EventID] + + return EventText +end + + +--- Initializes the Events structure for the event +-- @param #EVENT self +-- @param DCSWorld#world.event EventID +-- @param #string EventClass +-- @return #EVENT.Events +function EVENT:Init( EventID, EventClass ) + self:F3( { _EVENTCODES[EventID], EventClass } ) + if not self.Events[EventID] then + self.Events[EventID] = {} + end + if not self.Events[EventID][EventClass] then + self.Events[EventID][EventClass] = {} + end + return self.Events[EventID][EventClass] +end + + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @param #function OnEventFunction +-- @return #EVENT +function EVENT:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, OnEventFunction ) + self:F2( EventTemplate.name ) + + for EventUnitID, EventUnit in pairs( EventTemplate.units ) do + OnEventFunction( self, EventUnit.name, EventFunction, EventSelf ) + end + return self +end + +--- Set a new listener for an S_EVENT_X event independent from a unit or a weapon. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @param EventID +-- @return #EVENT +function EVENT:OnEventGeneric( EventFunction, EventSelf, EventID ) + self:F2( { EventID } ) + + local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) + Event.EventFunction = EventFunction + Event.EventSelf = EventSelf + return self +end + + +--- Set a new listener for an S_EVENT_X event +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @param EventID +-- @return #EVENT +function EVENT:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, EventID ) + self:F2( EventDCSUnitName ) + + local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) + if not Event.IniUnit then + Event.IniUnit = {} + end + Event.IniUnit[EventDCSUnitName] = {} + Event.IniUnit[EventDCSUnitName].EventFunction = EventFunction + Event.IniUnit[EventDCSUnitName].EventSelf = EventSelf + return self +end + + +--- Create an OnBirth event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnBirthForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnBirthForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_BIRTH event, and registers the unit born. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnBirth( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) + + return self +end + +--- Set a new listener for an S_EVENT_BIRTH event. +-- @param #EVENT self +-- @param #string EventDCSUnitName The id of the unit for the event to be handled. +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnBirthForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) + + return self +end + +--- Create an OnCrash event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnCrashForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnCrashForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_CRASH event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnCrash( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_CRASH ) + + return self +end + +--- Set a new listener for an S_EVENT_CRASH event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnCrashForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_CRASH ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnDeadForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnDeadForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_DEAD event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnDead( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_DEAD ) + + return self +end + + +--- Set a new listener for an S_EVENT_DEAD event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_DEAD ) + + return self +end + +--- Set a new listener for an S_EVENT_PILOT_DEAD event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPilotDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_PILOT_DEAD ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnLandForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnLandForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_LAND event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnLandForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_LAND ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnTakeOffForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnTakeOffForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_TAKEOFF event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnTakeOffForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_TAKEOFF ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineShutDownForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnEngineShutDownForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_ENGINE_SHUTDOWN event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineShutDownForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_SHUTDOWN ) + + return self +end + +--- Set a new listener for an S_EVENT_ENGINE_STARTUP event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineStartUpForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_STARTUP ) + + return self +end + +--- Set a new listener for an S_EVENT_SHOT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnShot( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_SHOT ) + + return self +end + +--- Set a new listener for an S_EVENT_SHOT event for a unit. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnShotForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_SHOT ) + + return self +end + +--- Set a new listener for an S_EVENT_HIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnHit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_HIT ) + + return self +end + +--- Set a new listener for an S_EVENT_HIT event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnHitForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_HIT ) + + return self +end + +--- Set a new listener for an S_EVENT_PLAYER_ENTER_UNIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPlayerEnterUnit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_ENTER_UNIT ) + + return self +end + +--- Set a new listener for an S_EVENT_PLAYER_LEAVE_UNIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPlayerLeaveUnit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_LEAVE_UNIT ) + + return self +end + + + +function EVENT:onEvent( Event ) + self:F2( { _EVENTCODES[Event.id], Event } ) + + 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.IniDCSGroupName = "" + if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then + Event.IniDCSGroupName = Event.IniDCSGroup:getName() + end + end + if Event.target then + if Event.target and Event.target:getCategory() == Object.Category.UNIT then + Event.TgtDCSUnit = Event.target + Event.TgtDCSGroup = Event.TgtDCSUnit:getGroup() + Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() + Event.TgtDCSGroupName = "" + if Event.TgtDCSGroup and Event.TgtDCSGroup:isExist() then + Event.TgtDCSGroupName = Event.TgtDCSGroup:getName() + end + end + end + if Event.weapon then + Event.Weapon = Event.weapon + Event.WeaponName = Event.Weapon:getTypeName() + --Event.WeaponTgtDCSUnit = Event.Weapon:getTarget() + end + self:E( { _EVENTCODES[Event.id], Event } ) + for ClassName, EventData in pairs( self.Events[Event.id] ) do + if Event.IniDCSUnitName and EventData.IniUnit and EventData.IniUnit[Event.IniDCSUnitName] then + self:T2( { "Calling event function for class ", ClassName, " unit ", Event.IniDCSUnitName } ) + EventData.IniUnit[Event.IniDCSUnitName].EventFunction( EventData.IniUnit[Event.IniDCSUnitName].EventSelf, Event ) + else + if Event.IniDCSUnit and not EventData.IniUnit then + self:T2( { "Calling event function for class ", ClassName } ) + EventData.EventFunction( EventData.EventSelf, Event ) + end + end + end + end +end + +--- Encapsulation of DCS World Menu system in a set of MENU classes. +-- @module Menu + +Include.File( "Routines" ) +Include.File( "Base" ) + +--- The MENU class +-- @type MENU +-- @extends Base#BASE +MENU = { + ClassName = "MENU", + MenuPath = nil, + MenuText = "", + MenuParentPath = nil +} + +--- +function MENU:New( MenuText, MenuParentPath ) + + -- Arrange meta tables + local Child = BASE:Inherit( self, BASE:New() ) + + Child.MenuPath = nil + Child.MenuText = MenuText + Child.MenuParentPath = MenuParentPath + return Child +end + +--- The COMMANDMENU class +-- @type COMMANDMENU +-- @extends Menu#MENU +COMMANDMENU = { + ClassName = "COMMANDMENU", + CommandMenuFunction = nil, + CommandMenuArgument = nil +} + +function COMMANDMENU:New( MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = nil + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + Child.MenuPath = missionCommands.addCommand( MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + Child.CommandMenuFunction = CommandMenuFunction + Child.CommandMenuArgument = CommandMenuArgument + return Child +end + +--- The SUBMENU class +-- @type SUBMENU +-- @extends Menu#MENU +SUBMENU = { + ClassName = "SUBMENU" +} + +function SUBMENU:New( MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = nil + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + Child.MenuPath = missionCommands.addSubMenu( MenuText, MenuParentPath ) + return Child +end + +-- This local variable is used to cache the menus registered under clients. +-- Menus don't dissapear when clients are destroyed and restarted. +-- So every menu for a client created must be tracked so that program logic accidentally does not create +-- the same menus twice during initialization logic. +-- These menu classes are handling this logic with this variable. +local _MENUCLIENTS = {} + +--- The MENU_CLIENT class +-- @type MENU_CLIENT +-- @extends Menu#MENU +MENU_CLIENT = { + ClassName = "MENU_CLIENT" +} + +--- Creates a new menu item for a group +-- @param self +-- @param Client#CLIENT MenuClient The Client owning the menu. +-- @param #string MenuText The text for the menu. +-- @param #table ParentMenu The parent menu. +-- @return #MENU_CLIENT self +function MENU_CLIENT:New( MenuClient, MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + self:F( { MenuClient, MenuText, ParentMenu } ) + + self.MenuClient = MenuClient + self.MenuClientGroupID = MenuClient:GetClientGroupID() + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self.Menus = {} + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText } ) + + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) + end + + self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath ) + MenuPath[MenuPathID] = self.MenuPath + + self:T( { MenuClient:GetClientGroupName(), self.MenuPath } ) + + if ParentMenu and ParentMenu.Menus then + ParentMenu.Menus[self.MenuPath] = self + end + return self +end + +--- Removes the sub menus recursively of this MENU_CLIENT. +-- @param #MENU_CLIENT self +-- @return #MENU_CLIENT self +function MENU_CLIENT:RemoveSubMenus() + self:F( self.MenuPath ) + + for MenuID, Menu in pairs( self.Menus ) do + Menu:Remove() + end + +end + +--- Removes the sub menus recursively of this MENU_CLIENT. +-- @param #MENU_CLIENT self +-- @return #MENU_CLIENT self +function MENU_CLIENT:Remove() + self:F( self.MenuPath ) + + self:RemoveSubMenus() + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then + MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil + end + + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end + + +--- The MENU_CLIENT_COMMAND class +-- @type MENU_CLIENT_COMMAND +-- @extends Menu#MENU +MENU_CLIENT_COMMAND = { + ClassName = "MENU_CLIENT_COMMAND" +} + +--- Creates a new radio command item for a group +-- @param self +-- @param Client#CLIENT MenuClient The Client owning the menu. +-- @param MenuText The text for the menu. +-- @param ParentMenu The parent menu. +-- @param CommandMenuFunction A function that is called when the menu key is pressed. +-- @param CommandMenuArgument An argument for the function. +-- @return Menu#MENU_CLIENT_COMMAND self +function MENU_CLIENT_COMMAND:New( MenuClient, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + self.MenuClient = MenuClient + self.MenuClientGroupID = MenuClient:GetClientGroupID() + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) + + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) + end + + self.MenuPath = missionCommands.addCommandForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + MenuPath[MenuPathID] = self.MenuPath + + self.CommandMenuFunction = CommandMenuFunction + self.CommandMenuArgument = CommandMenuArgument + + ParentMenu.Menus[self.MenuPath] = self + + return self +end + +function MENU_CLIENT_COMMAND:Remove() + self:F( self.MenuPath ) + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then + MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil + end + + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end + + +--- The MENU_COALITION class +-- @type MENU_COALITION +-- @extends Menu#MENU +MENU_COALITION = { + ClassName = "MENU_COALITION" +} + +--- Creates a new coalition menu item +-- @param #MENU_COALITION self +-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. +-- @param #string MenuText The text for the menu. +-- @param #table ParentMenu The parent menu. +-- @return #MENU_COALITION self +function MENU_COALITION:New( MenuCoalition, MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + self:F( { MenuCoalition, MenuText, ParentMenu } ) + + self.MenuCoalition = MenuCoalition + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self.Menus = {} + + self:T( { MenuParentPath, MenuText } ) + + self.MenuPath = missionCommands.addSubMenuForCoalition( self.MenuCoalition, MenuText, MenuParentPath ) + + self:T( { self.MenuPath } ) + + if ParentMenu and ParentMenu.Menus then + ParentMenu.Menus[self.MenuPath] = self + end + return self +end + +--- Removes the sub menus recursively of this MENU_COALITION. +-- @param #MENU_COALITION self +-- @return #MENU_COALITION self +function MENU_COALITION:RemoveSubMenus() + self:F( self.MenuPath ) + + for MenuID, Menu in pairs( self.Menus ) do + Menu:Remove() + end + +end + +--- Removes the sub menus recursively of this MENU_COALITION. +-- @param #MENU_COALITION self +-- @return #MENU_COALITION self +function MENU_COALITION:Remove() + self:F( self.MenuPath ) + + self:RemoveSubMenus() + missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + + return nil +end + + +--- The MENU_COALITION_COMMAND class +-- @type MENU_COALITION_COMMAND +-- @extends Menu#MENU +MENU_COALITION_COMMAND = { + ClassName = "MENU_COALITION_COMMAND" +} + +--- Creates a new radio command item for a group +-- @param #MENU_COALITION_COMMAND self +-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. +-- @param MenuText The text for the menu. +-- @param ParentMenu The parent menu. +-- @param CommandMenuFunction A function that is called when the menu key is pressed. +-- @param CommandMenuArgument An argument for the function. +-- @return #MENU_COALITION_COMMAND self +function MENU_COALITION_COMMAND:New( MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + self.MenuCoalition = MenuCoalition + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self:T( { MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) + + self.MenuPath = missionCommands.addCommandForCoalition( self.MenuCoalition, MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + + self.CommandMenuFunction = CommandMenuFunction + self.CommandMenuArgument = CommandMenuArgument + + ParentMenu.Menus[self.MenuPath] = self + + return self +end + +--- Removes a radio command item for a coalition +-- @param #MENU_COALITION_COMMAND self +-- @return #MENU_COALITION_COMMAND self +function MENU_COALITION_COMMAND:Remove() + self:F( self.MenuPath ) + + missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end +--- GROUP class. +-- +-- @{GROUP} class +-- ============== +-- The @{GROUP} class is a wrapper class to handle the DCS Group objects: +-- +-- * Support all DCS Group APIs. +-- * Enhance with Group specific APIs not in the DCS Group API set. +-- * Handle local Group Controller. +-- * Manage the "state" of the DCS Group. +-- +-- +-- GROUP reference methods +-- ======================= +-- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). +-- +-- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the DCS Group or the DCS GroupName. +-- +-- Another thing to know is that GROUP objects do not "contain" the DCS Group object. +-- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. +-- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. +-- +-- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: +-- +-- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. +-- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). +-- @module Group +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) +Include.File( "Unit" ) + +--- The GROUP class +-- @type GROUP +-- @extends Base#BASE +-- @field DCSGroup#Group DCSGroup The DCS group class. +-- @field #string GroupName The name of the group. +GROUP = { + ClassName = "GROUP", + GroupName = "", + GroupID = 0, + Controller = nil, + DCSGroup = nil, + WayPointFunctions = {}, + } + +--- A DCSGroup +-- @type DCSGroup +-- @field id_ The ID of the group in DCS + +--- Create a new GROUP from a DCSGroup +-- @param #GROUP self +-- @param DCSGroup#Group GroupName The DCS Group name +-- @return #GROUP self +function GROUP:Register( GroupName ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( GroupName ) + self.GroupName = GroupName + return self +end + +-- Reference methods. + +--- Find the GROUP wrapper class instance using the DCS Group. +-- @param #GROUP self +-- @param DCSGroup#Group DCSGroup The DCS Group. +-- @return #GROUP The GROUP. +function GROUP:Find( DCSGroup ) + + local GroupName = DCSGroup:getName() -- Group#GROUP + local GroupFound = _DATABASE:FindGroup( GroupName ) + return GroupFound +end + +--- Find the created GROUP using the DCS Group Name. +-- @param #GROUP self +-- @param #string GroupName The DCS Group Name. +-- @return #GROUP The GROUP. +function GROUP:FindByName( GroupName ) + + local GroupFound = _DATABASE:FindGroup( GroupName ) + return GroupFound +end + +-- DCS Group methods support. + +--- Returns the DCS Group. +-- @param #GROUP self +-- @return DCSGroup#Group The DCS Group. +function GROUP:GetDCSGroup() + local DCSGroup = Group.getByName( self.GroupName ) + + if DCSGroup then + return DCSGroup + end + + return nil +end + + +--- Returns if the DCS Group is alive. +-- When the group exists at run-time, this method will return true, otherwise false. +-- @param #GROUP self +-- @return #boolean true if the DCS Group is alive. +function GROUP:IsAlive() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupIsAlive = DCSGroup:isExist() + self:T3( GroupIsAlive ) + return GroupIsAlive + end + + return nil +end + +--- Destroys the DCS Group and all of its DCS Units. +-- Note that this destroy method also raises a destroy event at run-time. +-- So all event listeners will catch the destroy event of this DCS Group. +-- @param #GROUP self +function GROUP:Destroy() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + self:CreateEventCrash( timer.getTime(), UnitData ) + end + DCSGroup:destroy() + DCSGroup = nil + end + + return nil +end + +--- Returns category of the DCS Group. +-- @param #GROUP self +-- @return DCSGroup#Group.Category The category ID +function GROUP:GetCategory() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T3( GroupCategory ) + return GroupCategory + end + + return nil +end + +--- Returns the category name of the DCS Group. +-- @param #GROUP self +-- @return #string Category name = Helicopter, Airplane, Ground Unit, Ship +function GROUP:GetCategoryName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local CategoryNames = { + [Group.Category.AIRPLANE] = "Airplane", + [Group.Category.HELICOPTER] = "Helicopter", + [Group.Category.GROUND] = "Ground Unit", + [Group.Category.SHIP] = "Ship", + } + local GroupCategory = DCSGroup:getCategory() + self:T3( GroupCategory ) + + return CategoryNames[GroupCategory] + end + + return nil +end + + +--- Returns the coalition of the DCS Group. +-- @param #GROUP self +-- @return DCSCoalitionObject#coalition.side The coalition side of the DCS Group. +function GROUP:GetCoalition() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCoalition = DCSGroup:getCoalition() + self:T3( GroupCoalition ) + return GroupCoalition + end + + return nil +end + +--- Returns the country of the DCS Group. +-- @param #GROUP self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Group is not existing or alive. +function GROUP:GetCountry() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCountry = DCSGroup:getUnit(1):getCountry() + self:T3( GroupCountry ) + return GroupCountry + end + + return nil +end + +--- Returns the name of the DCS Group. +-- @param #GROUP self +-- @return #string The DCS Group name. +function GROUP:GetName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupName = DCSGroup:getName() + self:T3( GroupName ) + return GroupName + end + + return nil +end + +--- Returns the DCS Group identifier. +-- @param #GROUP self +-- @return #number The identifier of the DCS Group. +function GROUP:GetID() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupID = DCSGroup:getID() + self:T3( GroupID ) + return GroupID + end + + return nil +end + +--- Returns the UNIT wrapper class with number UnitNumber. +-- If the underlying DCS Unit does not exist, the method will return nil. . +-- @param #GROUP self +-- @param #number UnitNumber The number of the UNIT wrapper class to be returned. +-- @return Unit#UNIT The UNIT wrapper class. +function GROUP:GetUnit( UnitNumber ) + self:F2( { self.GroupName, UnitNumber } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) + self:T3( UnitFound.UnitName ) + self:T2( UnitFound ) + return UnitFound + end + + return nil +end + +--- Returns the DCS Unit with number UnitNumber. +-- If the underlying DCS Unit does not exist, the method will return nil. . +-- @param #GROUP self +-- @param #number UnitNumber The number of the DCS Unit to be returned. +-- @return DCSUnit#Unit The DCS Unit. +function GROUP:GetDCSUnit( UnitNumber ) + self:F2( { self.GroupName, UnitNumber } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) + self:T3( DCSUnitFound ) + return DCSUnitFound + end + + return nil +end + +--- Returns current size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. +-- @param #GROUP self +-- @return #number The DCS Group size. +function GROUP:GetSize() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupSize = DCSGroup:getSize() + self:T3( GroupSize ) + return GroupSize + end + + return nil +end + +--- +--- Returns the initial size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. +-- @param #GROUP self +-- @return #number The DCS Group initial size. +function GROUP:GetInitialSize() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupInitialSize = DCSGroup:getInitialSize() + self:T3( GroupInitialSize ) + return GroupInitialSize + end + + return nil +end + +--- Returns the UNITs wrappers of the DCS Units of the DCS Group. +-- @param #GROUP self +-- @return #table The UNITs wrappers. +function GROUP:GetUnits() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnits = DCSGroup:getUnits() + local Units = {} + for Index, UnitData in pairs( DCSUnits ) do + Units[#Units+1] = UNIT:Find( UnitData ) + end + self:T3( Units ) + return Units + end + + return nil +end + + +--- Returns the DCS Units of the DCS Group. +-- @param #GROUP self +-- @return #table The DCS Units. +function GROUP:GetDCSUnits() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnits = DCSGroup:getUnits() + self:T3( DCSUnits ) + return DCSUnits + end + + return nil +end + +--- Get the controller for the GROUP. +-- @param #GROUP self +-- @return DCSController#Controller +function GROUP:_GetController() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupController = DCSGroup:getController() + self:T3( GroupController ) + return GroupController + end + + return nil +end + + +--- Retrieve the group mission and allow to place function hooks within the mission waypoint plan. +-- Use the method @{Group#GROUP:WayPointFunction} to define the hook functions for specific waypoints. +-- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. +-- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! +-- @param #GROUP self +-- @return #GROUP +function GROUP:WayPointInitialize() + + self.WayPoints = self:GetTaskRoute() + + return self +end + + +--- Registers a waypoint function that will be executed when the group moves over the WayPoint. +-- @param #GROUP self +-- @param #number WayPoint The waypoint number. Note that the start waypoint on the route is WayPoint 1! +-- @param #number WayPointIndex When defining multiple WayPoint functions for one WayPoint, use WayPointIndex to set the sequence of actions. +-- @param #function WayPointFunction The waypoint function to be called when the group moves over the waypoint. The waypoint function takes variable parameters. +-- @return #GROUP +function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) + self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) + + table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) + self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) + return self +end + + +function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) + + local DCSTask + + local DCSScript = {} + DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " + + if FunctionArguments.n > 0 then + DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" + else + DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" + end + + DCSTask = self:TaskWrappedAction( + self:CommandDoScript( + table.concat( DCSScript ) + ), WayPointIndex + ) + + self:T3( DCSTask ) + + return DCSTask + +end + + + +--- Executes the WayPoint plan. +-- The function gets a WayPoint parameter, that you can use to restart the mission at a specific WayPoint. +-- Note that when the WayPoint parameter is used, the new start mission waypoint of the group will be 1! +-- @param #GROUP self +-- @param #number WayPoint The WayPoint from where to execute the mission. +-- @param #WaitTime The amount seconds to wait before initiating the mission. +-- @return #GROUP +function GROUP:WayPointExecute( WayPoint, WaitTime ) + + if not WayPoint then + WayPoint = 1 + end + + -- When starting the mission from a certain point, the TaskPoints need to be deleted before the given WayPoint. + for TaskPointID = 1, WayPoint - 1 do + table.remove( self.WayPoints, 1 ) + end + + self:T3( self.WayPoints ) + + self:SetTask( self:TaskRoute( self.WayPoints ), WaitTime ) + + return self +end + + +--- Activates a GROUP. +-- @param #GROUP self +function GROUP:Activate() + self:F2( { self.GroupName } ) + trigger.action.activateGroup( self:GetDCSGroup() ) + return self:GetDCSGroup() +end + + +--- Gets the type name of the group. +-- @param #GROUP self +-- @return #string The type name of the group. +function GROUP:GetTypeName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupTypeName = DCSGroup:getUnit(1):getTypeName() + self:T3( GroupTypeName ) + return( GroupTypeName ) + end + + return nil +end + +--- Gets the CallSign of the first DCS Unit of the DCS Group. +-- @param #GROUP self +-- @return #string The CallSign of the first DCS Unit of the DCS Group. +function GROUP:GetCallsign() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCallSign = DCSGroup:getUnit(1):getCallsign() + self:T3( GroupCallSign ) + return GroupCallSign + end + + return nil +end + +--- Returns the current point (Vec2 vector) of the first DCS Unit in the DCS Group. +-- @return DCSTypes#Vec2 Current Vec2 point of the first DCS Unit of the DCS Group. +function GROUP:GetPointVec2() + self:F2( self.GroupName ) + + local GroupPointVec2 = self:GetUnit(1):GetPointVec2() + self:T3( GroupPointVec2 ) + return GroupPointVec2 +end + +--- Returns the current point (Vec3 vector) of the first DCS Unit in the DCS Group. +-- @return DCSTypes#Vec3 Current Vec3 point of the first DCS Unit of the DCS Group. +function GROUP:GetPointVec3() + self:F2( self.GroupName ) + + local GroupPointVec3 = self:GetUnit(1):GetPointVec3() + self:T3( GroupPointVec3 ) + return GroupPointVec3 +end + + + +-- Is Functions + +--- Returns if the group is of an air category. +-- If the group is a helicopter or a plane, then this method will return true, otherwise false. +-- @param #GROUP self +-- @return #boolean Air category evaluation result. +function GROUP:IsAir() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER + self:T3( IsAirResult ) + return IsAirResult + end + + return nil +end + +--- Returns if the DCS Group contains Helicopters. +-- @param #GROUP self +-- @return #boolean true if DCS Group contains Helicopters. +function GROUP:IsHelicopter() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T2( GroupCategory ) + return GroupCategory == Group.Category.HELICOPTER + end + + return nil +end + +--- Returns if the DCS Group contains AirPlanes. +-- @param #GROUP self +-- @return #boolean true if DCS Group contains AirPlanes. +function GROUP:IsAirPlane() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T2( GroupCategory ) + return GroupCategory == Group.Category.AIRPLANE + end + + return nil +end + +--- Returns if the DCS Group contains Ground troops. +-- @param #GROUP self +-- @return #boolean true if DCS Group contains Ground troops. +function GROUP:IsGround() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T2( GroupCategory ) + return GroupCategory == Group.Category.GROUND + end + + return nil +end + +--- Returns if the DCS Group contains Ships. +-- @param #GROUP self +-- @return #boolean true if DCS Group contains Ships. +function GROUP:IsShip() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T2( GroupCategory ) + return GroupCategory == Group.Category.SHIP + end + + return nil +end + +--- Returns if all units of the group are on the ground or landed. +-- If all units of this group are on the ground, this function will return true, otherwise false. +-- @param #GROUP self +-- @return #boolean All units on the ground result. +function GROUP:AllOnGround() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local AllOnGroundResult = true + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + if UnitData:inAir() then + AllOnGroundResult = false + end + end + + self:T3( AllOnGroundResult ) + return AllOnGroundResult + end + + return nil +end + +--- Returns the current maximum velocity of the group. +-- Each unit within the group gets evaluated, and the maximum velocity (= the unit which is going the fastest) is returned. +-- @param #GROUP self +-- @return #number Maximum velocity found. +function GROUP:GetMaxVelocity() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local MaxVelocity = 0 + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + + local Velocity = UnitData:getVelocity() + local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) + + if VelocityTotal < MaxVelocity then + MaxVelocity = VelocityTotal + end + end + + return MaxVelocity + end + + return nil +end + +--- Returns the current minimum height of the group. +-- Each unit within the group gets evaluated, and the minimum height (= the unit which is the lowest elevated) is returned. +-- @param #GROUP self +-- @return #number Minimum height found. +function GROUP:GetMinHeight() + self:F2() + +end + +--- Returns the current maximum height of the group. +-- Each unit within the group gets evaluated, and the maximum height (= the unit which is the highest elevated) is returned. +-- @param #GROUP self +-- @return #number Maximum height found. +function GROUP:GetMaxHeight() + self:F2() + +end + +-- Tasks + +--- Popping current Task from the group. +-- @param #GROUP self +-- @return Group#GROUP self +function GROUP:PopCurrentTask() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Controller = self:_GetController() + Controller:popTask() + return self + end + + return nil +end + +--- Pushing Task on the queue from the group. +-- @param #GROUP self +-- @return Group#GROUP self +function GROUP:PushTask( DCSTask, WaitTime ) + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Controller = self:_GetController() + + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. + -- Therefore we schedule the functions to set the mission and options for the Group. + -- Controller:pushTask( DCSTask ) + + if WaitTime then + --routines.scheduleFunction( Controller.pushTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) + SCHEDULER:New( Controller, Controller.pushTask, { DCSTask }, WaitTime ) + else + Controller:pushTask( DCSTask ) + end + + return self + end + + return nil +end + +--- Clearing the Task Queue and Setting the Task on the queue from the group. +-- @param #GROUP self +-- @return Group#GROUP self +function GROUP:SetTask( DCSTask, WaitTime ) + self:F2( { DCSTask } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + + local Controller = self:_GetController() + + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. + -- Therefore we schedule the functions to set the mission and options for the Group. + -- Controller.setTask( Controller, DCSTask ) + + if not WaitTime then + WaitTime = 1 + end + --routines.scheduleFunction( Controller.setTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) + SCHEDULER:New( Controller, Controller.setTask, { DCSTask }, WaitTime ) + + return self + end + + return nil +end + + +--- Return a condition section for a controlled task +-- @param #GROUP self +-- @param DCSTime#Time time +-- @param #string userFlag +-- @param #boolean userFlagValue +-- @param #string condition +-- @param DCSTime#Time duration +-- @param #number lastWayPoint +-- return DCSTask#Task +function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration, lastWayPoint ) + self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) + + local DCSStopCondition = {} + DCSStopCondition.time = time + DCSStopCondition.userFlag = userFlag + DCSStopCondition.userFlagValue = userFlagValue + DCSStopCondition.condition = condition + DCSStopCondition.duration = duration + DCSStopCondition.lastWayPoint = lastWayPoint + + self:T3( { DCSStopCondition } ) + return DCSStopCondition +end + +--- Return a Controlled Task taking a Task and a TaskCondition +-- @param #GROUP self +-- @param DCSTask#Task DCSTask +-- @param #DCSStopCondition DCSStopCondition +-- @return DCSTask#Task +function GROUP:TaskControlled( DCSTask, DCSStopCondition ) + self:F2( { DCSTask, DCSStopCondition } ) + + local DCSTaskControlled + + DCSTaskControlled = { + id = 'ControlledTask', + params = { + task = DCSTask, + stopCondition = DCSStopCondition + } + } + + self:T3( { DCSTaskControlled } ) + return DCSTaskControlled +end + +--- Return a Combo Task taking an array of Tasks +-- @param #GROUP self +-- @param #list DCSTasks +-- @return DCSTask#Task +function GROUP:TaskCombo( DCSTasks ) + self:F2( { DCSTasks } ) + + local DCSTaskCombo + + DCSTaskCombo = { + id = 'ComboTask', + params = { + tasks = DCSTasks + } + } + + self:T3( { DCSTaskCombo } ) + return DCSTaskCombo +end + +--- Return a WrappedAction Task taking a Command +-- @param #GROUP self +-- @param DCSCommand#Command DCSCommand +-- @return DCSTask#Task +function GROUP:TaskWrappedAction( DCSCommand, Index ) + self:F2( { DCSCommand } ) + + local DCSTaskWrappedAction + + DCSTaskWrappedAction = { + id = "WrappedAction", + enabled = true, + number = Index, + auto = false, + params = { + action = DCSCommand, + }, + } + + self:T3( { DCSTaskWrappedAction } ) + return DCSTaskWrappedAction +end + +--- Executes a command action +-- @param #GROUP self +-- @param DCSCommand#Command DCSCommand +-- @return #GROUP self +function GROUP:SetCommand( DCSCommand ) + self:F2( DCSCommand ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Controller = self:_GetController() + Controller:setCommand( DCSCommand ) + return self + end + + return nil +end + +--- Perform a switch waypoint command +-- @param #GROUP self +-- @param #number FromWayPoint +-- @param #number ToWayPoint +-- @return DCSTask#Task +function GROUP:CommandSwitchWayPoint( FromWayPoint, ToWayPoint, Index ) + self:F2( { FromWayPoint, ToWayPoint, Index } ) + + local CommandSwitchWayPoint = { + id = 'SwitchWaypoint', + params = { + fromWaypointIndex = FromWayPoint, + goToWaypointIndex = ToWayPoint, + }, + } + + self:T3( { CommandSwitchWayPoint } ) + return CommandSwitchWayPoint +end + + +--- Orbit at a specified position at a specified alititude during a specified duration with a specified speed. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point to hold the position. +-- @param #number Altitude The altitude to hold the position. +-- @param #number Speed The speed flying when holding the position. +-- @return #GROUP self +function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed ) + self:F2( { self.GroupName, Point, Altitude, Speed } ) + +-- pattern = enum AI.Task.OribtPattern, +-- point = Vec2, +-- point2 = Vec2, +-- speed = Distance, +-- altitude = Distance + + local LandHeight = land.getHeight( Point ) + + self:T3( { LandHeight } ) + + local DCSTask = { id = 'Orbit', + params = { pattern = AI.Task.OrbitPattern.CIRCLE, + point = Point, + speed = Speed, + altitude = Altitude + LandHeight + } + } + + +-- local AITask = { id = 'ControlledTask', +-- params = { task = { id = 'Orbit', +-- params = { pattern = AI.Task.OrbitPattern.CIRCLE, +-- point = Point, +-- speed = Speed, +-- altitude = Altitude + LandHeight +-- } +-- }, +-- stopCondition = { duration = Duration +-- } +-- } +-- } +-- ) + + return DCSTask +end + +--- Orbit at the current position of the first unit of the group at a specified alititude +-- @param #GROUP self +-- @param #number Altitude The altitude to hold the position. +-- @param #number Speed The speed flying when holding the position. +-- @return #GROUP self +function GROUP:TaskOrbitCircle( Altitude, Speed ) + self:F2( { self.GroupName, Altitude, Speed } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupPoint = self:GetPointVec2() + return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) + end + + return nil +end + + + +--- Hold position at the current position of the first unit of the group. +-- @param #GROUP self +-- @param #number Duration The maximum duration in seconds to hold the position. +-- @return #GROUP self +function GROUP:TaskHoldPosition() + self:F2( { self.GroupName } ) + + return self:TaskOrbitCircle( 30, 10 ) +end + + +--- Land the group at a Vec2Point. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to land. +-- @param #number Duration The duration in seconds to stay on the ground. +-- @return #GROUP self +function GROUP:TaskLandAtVec2( Point, Duration ) + self:F2( { self.GroupName, Point, Duration } ) + + local DCSTask + + if Duration and Duration > 0 then + DCSTask = { id = 'Land', params = { point = Point, durationFlag = true, duration = Duration } } + else + DCSTask = { id = 'Land', params = { point = Point, durationFlag = false } } + end + + self:T3( DCSTask ) + return DCSTask +end + +--- Land the group at a @{Zone#ZONE). +-- @param #GROUP self +-- @param Zone#ZONE Zone The zone where to land. +-- @param #number Duration The duration in seconds to stay on the ground. +-- @return #GROUP self +function GROUP:TaskLandAtZone( Zone, Duration, RandomPoint ) + self:F2( { self.GroupName, Zone, Duration, RandomPoint } ) + + local Point + if RandomPoint then + Point = Zone:GetRandomPointVec2() + else + Point = Zone:GetPointVec2() + end + + local DCSTask = self:TaskLandAtVec2( Point, Duration ) + + self:T3( DCSTask ) + return DCSTask +end + + +--- Attack the Unit. +-- @param #GROUP self +-- @param Unit#UNIT The unit. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackUnit( AttackUnit ) + self:F2( { self.GroupName, AttackUnit } ) + +-- AttackUnit = { +-- id = 'AttackUnit', +-- params = { +-- unitId = Unit.ID, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend +-- attackQty = number, +-- direction = Azimuth, +-- attackQtyLimit = boolean, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'AttackUnit', + params = { unitId = AttackUnit:GetID(), + expend = AI.Task.WeaponExpend.TWO, + groupAttack = true, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Attack a Group. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup The Group to be attacked. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackGroup( AttackGroup ) + self:F2( { self.GroupName, AttackGroup } ) + +-- AttackGroup = { +-- id = 'AttackGroup', +-- params = { +-- groupId = Group.ID, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- directionEnabled = boolean, +-- direction = Azimuth, +-- altitudeEnabled = boolean, +-- altitude = Distance, +-- attackQtyLimit = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'AttackGroup', + params = { groupId = AttackGroup:GetID(), + expend = AI.Task.WeaponExpend.TWO, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Fires at a VEC2 point. +-- @param #GROUP self +-- @param DCSTypes#Vec2 The point to fire at. +-- @param DCSTypes#Distance Radius The radius of the zone to deploy the fire at. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskFireAtPoint( PointVec2, Radius ) + self:F2( { self.GroupName, PointVec2, Radius } ) + +-- FireAtPoint = { +-- id = 'FireAtPoint', +-- params = { +-- point = Vec2, +-- radius = Distance, +-- } +-- } + + local DCSTask + DCSTask = { id = 'FireAtPoint', + params = { point = PointVec2, + radius = Radius, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + + +--- Move the group to a Vec2 Point, wait for a defined duration and embark a group. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to wait. +-- @param #number Duration The duration in seconds to wait. +-- @param #GROUP EmbarkingGroup The group to be embarked. +-- @return DCSTask#Task The DCS task structure +function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) + self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) + + local DCSTask + DCSTask = { id = 'Embarking', + params = { x = Point.x, + y = Point.y, + duration = Duration, + groupsForEmbarking = { EmbarkingGroup.GroupID }, + durationFlag = true, + distributionFlag = false, + distribution = {}, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to wait. +-- @param #number Radius The radius of the embarking zone around the Point. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) + self:F2( { self.GroupName, Point, Radius } ) + + local DCSTask --DCSTask#Task + DCSTask = { id = 'EmbarkToTransport', + params = { x = Point.x, + y = Point.y, + zoneRadius = Radius, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task from a mission template. +-- @param #GROUP self +-- @param #table TaskMission A table containing the mission task. +-- @return DCSTask#Task +function GROUP:TaskMission( TaskMission ) + self:F2( Points ) + + local DCSTask + DCSTask = { id = 'Mission', params = { TaskMission, }, } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task to follow a given route defined by Points. +-- @param #GROUP self +-- @param #table Points A table of route points. +-- @return DCSTask#Task +function GROUP:TaskRoute( Points ) + self:F2( Points ) + + local DCSTask + DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Make the DCS Group to fly to a given point and hover. +-- @param #GROUP self +-- @param DCSTypes#Vec3 Point The destination point in Vec3 format. +-- @param #number Speed The speed to travel. +-- @return #GROUP self +function GROUP:TaskRouteToVec2( Point, Speed ) + self:F2( { Point, Speed } ) + + local GroupPoint = self:GetUnit( 1 ):GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local PointTo = {} + PointTo.x = Point.x + PointTo.y = Point.y + PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" + PointTo.speed = Speed + PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self +end + +--- Make the DCS Group to fly to a given point and hover. +-- @param #GROUP self +-- @param DCSTypes#Vec3 Point The destination point in Vec3 format. +-- @param #number Speed The speed to travel. +-- @return #GROUP self +function GROUP:TaskRouteToVec3( Point, Speed ) + self:F2( { Point, Speed } ) + + local GroupPoint = self:GetUnit( 1 ):GetPointVec3() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.z + PointFrom.alt = GroupPoint.y + PointFrom.alt_type = "BARO" + PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local PointTo = {} + PointTo.x = Point.x + PointTo.y = Point.z + PointTo.alt = Point.y + PointTo.alt_type = "BARO" + PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" + PointTo.speed = Speed + PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self +end + + + +--- Make the group to follow a given route. +-- @param #GROUP self +-- @param #table GoPoints A table of Route Points. +-- @return #GROUP self +function GROUP:Route( GoPoints ) + self:F2( GoPoints ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Points = routines.utils.deepCopy( GoPoints ) + local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } + local Controller = self:_GetController() + --Controller.setTask( Controller, MissionTask ) + --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) + SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) + return self + end + + return nil +end + + + +--- Route the group to a given zone. +-- The group final destination point can be randomized. +-- A speed can be given in km/h. +-- A given formation can be given. +-- @param #GROUP self +-- @param Zone#ZONE Zone The zone where to route to. +-- @param #boolean Randomize Defines whether to target point gets randomized within the Zone. +-- @param #number Speed The speed. +-- @param Base#FORMATION Formation The formation string. +function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) + self:F2( Zone ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + + local GroupPoint = self:GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Cone" + PointFrom.speed = 20 / 1.6 + + + local PointTo = {} + local ZonePoint + + if Randomize then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + PointTo.x = ZonePoint.x + PointTo.y = ZonePoint.y + PointTo.type = "Turning Point" + + if Formation then + PointTo.action = Formation + else + PointTo.action = "Cone" + end + + if Speed then + PointTo.speed = Speed + else + PointTo.speed = 20 / 1.6 + end + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self + end + + return nil +end + +-- Commands + +--- Do Script command +-- @param #GROUP self +-- @param #string DoScript +-- @return #DCSCommand +function GROUP:CommandDoScript( DoScript ) + + local DCSDoScript = { + id = "Script", + params = { + command = DoScript, + }, + } + + self:T3( DCSDoScript ) + return DCSDoScript +end + + +--- Return the mission template of the group. +-- @param #GROUP self +-- @return #table The MissionTemplate +function GROUP:GetTaskMission() + self:F2( self.GroupName ) + + return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template ) +end + +--- Return the mission route of the group. +-- @param #GROUP self +-- @return #table The mission route defined by points. +function GROUP:GetTaskRoute() + self:F2( self.GroupName ) + + return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template.route.points ) +end + +--- Return the route of a group by using the @{Database#DATABASE} class. +-- @param #GROUP self +-- @param #number Begin The route point from where the copy will start. The base route point is 0. +-- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. +-- @param #boolean Randomize Randomization of the route, when true. +-- @param #number Radius When randomization is on, the randomization is within the radius. +function GROUP:CopyRoute( Begin, End, Randomize, Radius ) + self:F2( { Begin, End } ) + + local Points = {} + + -- Could be a Spawned Group + local GroupName = string.match( self:GetName(), ".*#" ) + if GroupName then + GroupName = GroupName:sub( 1, -2 ) + else + GroupName = self:GetName() + end + + self:T3( { GroupName } ) + + local Template = _DATABASE.Templates.Groups[GroupName].Template + + if Template then + if not Begin then + Begin = 0 + end + if not End then + End = 0 + end + + for TPointID = Begin + 1, #Template.route.points - End do + if Template.route.points[TPointID] then + Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) + if Randomize then + if not Radius then + Radius = 500 + end + Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) + Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) + end + end + end + return Points + end + + return nil +end + + +function GROUP:GetDetectedTargets() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + return self:_GetController():getDetectedTargets() + end + + return nil +end + +function GROUP:IsTargetDetected( DCSObject ) + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + + local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity + = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, + Controller.Detection.VISUAL, + Controller.Detection.OPTIC, + Controller.Detection.RADAR, + Controller.Detection.IRST, + Controller.Detection.RWR, + Controller.Detection.DLINK + ) + return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity + end + + return nil +end + +-- Options + +--- Can the GROUP hold their weapons? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEHoldFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Holding weapons. +-- @param Group#GROUP self +-- @return Group#GROUP self +function GROUP:OptionROEHoldFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.WEAPON_HOLD ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack returning on enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEReturnFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Return fire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEReturnFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.RETURN_FIRE ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack designated targets? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEOpenFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Openfire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEOpenFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.OPEN_FIRE ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack targets of opportunity? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEWeaponFreePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + +--- Weapon free. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEWeaponFree() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) + end + + return self + end + + return nil +end + +--- Can the GROUP ignore enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTNoReactionPossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- No evasion on enemy threats. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTNoReaction() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade using passive defenses? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTPassiveDefensePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + +--- Evasion passive defense. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTPassiveDefense() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade on enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTEvadeFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- Evade on fire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTEvadeFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade on fire using vertical manoeuvres? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTVerticalPossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- Evade on fire using vertical manoeuvres. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTVertical() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + end + + return self + end + + return nil +end + +-- Message APIs + +--- Returns a message for a coalition or a client. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +-- @return Message#MESSAGE +function GROUP:Message( Message, Duration ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + return MESSAGE:New( Message, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) + end + + return nil +end + +--- Send a message to all coalitions. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +function GROUP:MessageToAll( Message, Duration ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + self:Message( Message, Duration ):ToAll() + end + + return nil +end + +--- Send a message to the red coalition. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +function GROUP:MessageToRed( Message, Duration ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + self:Message( Message, Duration ):ToRed() + end + + return nil +end + +--- Send a message to the blue coalition. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +function GROUP:MessageToBlue( Message, Duration ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + self:Message( Message, Duration ):ToBlue() + end + + return nil +end + +--- Send a message to a client. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +-- @param Client#CLIENT Client The client object receiving the message. +function GROUP:MessageToClient( Message, Duration, Client ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + self:Message( Message, Duration ):ToClient( Client ) + end + + return nil +end +--- UNIT Class +-- +-- @{UNIT} class +-- ============== +-- The @{UNIT} class is a wrapper class to handle the DCS Unit objects: +-- +-- * Support all DCS Unit APIs. +-- * Enhance with Unit specific APIs not in the DCS Unit API set. +-- * Handle local Unit Controller. +-- * Manage the "state" of the DCS Unit. +-- +-- +-- UNIT reference methods +-- ====================== +-- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class). +-- +-- The UNIT class **does not contain a :New()** method, rather it provides **:Find()** methods to retrieve the object reference +-- using the DCS Unit or the DCS UnitName. +-- +-- Another thing to know is that UNIT objects do not "contain" the DCS Unit object. +-- The UNIT methods will reference the DCS Unit object by name when it is needed during API execution. +-- If the DCS Unit object does not exist or is nil, the UNIT methods will return nil and log an exception in the DCS.log file. +-- +-- The UNIT class provides the following functions to retrieve quickly the relevant UNIT instance: +-- +-- * @{#UNIT.Find}(): Find a UNIT instance from the _DATABASE object using a DCS Unit object. +-- * @{#UNIT.FindByName}(): Find a UNIT instance from the _DATABASE object using a DCS Unit name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil). +-- +-- DCS UNIT APIs +-- ============= +-- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method. +-- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call, +-- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSUnit#Unit.getName}() +-- is implemented in the UNIT class as @{#UNIT.GetName}(). +-- +-- Additional UNIT APIs +-- ==================== +-- The UNIT class comes with additional methods. Find below a summary. +-- +-- Smoke, Flare Units +-- ------------------ +-- The UNIT class provides methods to smoke or flare units easily. +-- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods +-- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit. +-- When the DCS Unit moves for whatever reason, the smoking will still continue! +-- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}() +-- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration. +-- +-- Position, Point +-- --------------- +-- The UNIT class provides methods to obtain the current point or position of the DCS Unit. +-- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetPointVec3}() will obtain the current location of the DCS Unit in a Vec2 (2D) or a Vec3 (3D) vector respectively. +-- If you want to obtain the complete 3D position including oriëntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively. +-- +-- Alive +-- ----- +-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active. +-- +-- Test for other units in radius +-- ------------------------------ +-- One can test if another DCS Unit is within a given radius of the current DCS Unit, by using the @{#UNIT.OtherUnitInRadius}() method. +-- +-- More functions will be added +-- ---------------------------- +-- During the MOOSE development, more functions will be added. A complete list of the current functions is below. +-- +-- +-- +-- +-- @module Unit +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + +--- The UNIT class +-- @type UNIT +-- @extends Base#BASE +-- @field #UNIT.FlareColor FlareColor +-- @field #UNIT.SmokeColor SmokeColor +UNIT = { + ClassName="UNIT", + CategoryName = { + [Unit.Category.AIRPLANE] = "Airplane", + [Unit.Category.HELICOPTER] = "Helicoper", + [Unit.Category.GROUND_UNIT] = "Ground Unit", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + }, + FlareColor = { + Green = trigger.flareColor.Green, + Red = trigger.flareColor.Red, + White = trigger.flareColor.White, + Yellow = trigger.flareColor.Yellow + }, + SmokeColor = { + Green = trigger.smokeColor.Green, + Red = trigger.smokeColor.Red, + White = trigger.smokeColor.White, + Orange = trigger.smokeColor.Orange, + Blue = trigger.smokeColor.Blue + }, + } + +--- FlareColor +-- @type UNIT.FlareColor +-- @field Green +-- @field Red +-- @field White +-- @field Yellow + +--- SmokeColor +-- @type UNIT.SmokeColor +-- @field Green +-- @field Red +-- @field White +-- @field Orange +-- @field Blue + +-- Registration. + +--- Create a new UNIT from DCSUnit. +-- @param #UNIT self +-- @param DCSUnit#Unit DCSUnit +-- @param Database#DATABASE Database +-- @return Unit#UNIT +function UNIT:Register( UnitName ) + + local self = BASE:Inherit( self, BASE:New() ) + self:F2( UnitName ) + self.UnitName = UnitName + return self +end + +-- Reference methods. + +--- Finds a UNIT from the _DATABASE using a DCSUnit object. +-- @param #UNIT self +-- @param DCSUnit#Unit DCSUnit An existing DCS Unit object reference. +-- @return Unit#UNIT self +function UNIT:Find( DCSUnit ) + + local UnitName = DCSUnit:getName() + local UnitFound = _DATABASE:FindUnit( UnitName ) + return UnitFound +end + +--- Find a UNIT in the _DATABASE using the name of an existing DCS Unit. +-- @param #UNIT self +-- @param #string UnitName The Unit Name. +-- @return Unit#UNIT self +function UNIT:FindByName( UnitName ) + + local UnitFound = _DATABASE:FindUnit( UnitName ) + return UnitFound +end + +function UNIT:GetDCSUnit() + local DCSUnit = Unit.getByName( self.UnitName ) + + if DCSUnit then + return DCSUnit + end + + return nil +end + +--- Returns coalition of the Unit. +-- @param Unit#UNIT self +-- @return DCSCoalitionObject#coalition.side The side of the coalition. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCoalition() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCoalition = DCSUnit:getCoalition() + self:T3( UnitCoalition ) + return UnitCoalition + end + + return nil +end + +--- Returns country of the Unit. +-- @param Unit#UNIT self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCountry() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCountry = DCSUnit:getCountry() + self:T3( UnitCountry ) + return UnitCountry + end + + return nil +end + + +--- Returns DCS Unit object name. +-- The function provides access to non-activated units too. +-- @param Unit#UNIT self +-- @return #string The name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitName = self.UnitName + return UnitName + end + + return nil +end + + +--- Returns if the unit is alive. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is alive. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsAlive() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitIsAlive = DCSUnit:isExist() + return UnitIsAlive + end + + return false +end + +--- Returns if the unit is activated. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is activated. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsActive() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local UnitIsActive = DCSUnit:isActive() + return UnitIsActive + end + + return nil +end + +--- Returns name of the player that control the unit or nil if the unit is controlled by A.I. +-- @param Unit#UNIT self +-- @return #string Player Name +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPlayerName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local PlayerName = DCSUnit:getPlayerName() + if PlayerName == nil then + PlayerName = "" + end + return PlayerName + end + + return nil +end + +--- Returns the unit's unique identifier. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.ID Unit ID +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetID() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitID = DCSUnit:getID() + return UnitID + end + + return nil +end + +--- Returns the unit's number in the group. +-- The number is the same number the unit has in ME. +-- It may not be changed during the mission. +-- If any unit in the group is destroyed, the numbers of another units will not be changed. +-- @param Unit#UNIT self +-- @return #number The Unit number. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetNumber() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitNumber = DCSUnit:getNumber() + return UnitNumber + end + + return nil +end + +--- Returns the unit's group if it exist and nil otherwise. +-- @param Unit#UNIT self +-- @return Group#GROUP The Group of the Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetGroup() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitGroup = DCSUnit:getGroup() + return UnitGroup + end + + return nil +end + + +--- Returns the unit's callsign - the localized string. +-- @param Unit#UNIT self +-- @return #string The Callsign of the Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCallSign() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCallSign = DCSUnit:getCallsign() + return UnitCallSign + end + + return nil +end + +--- Returns the unit's health. Dead units has health <= 1.0. +-- @param Unit#UNIT self +-- @return #number The Unit's health value. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetLife() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitLife = DCSUnit:getLife() + return UnitLife + end + + return nil +end + +--- Returns the Unit's initial health. +-- @param Unit#UNIT self +-- @return #number The Unit's initial health value. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetLife0() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitLife0 = DCSUnit:getLife0() + return UnitLife0 + end + + return nil +end + +--- Returns relative amount of fuel (from 0.0 to 1.0) the unit has in its internal tanks. If there are additional fuel tanks the value may be greater than 1.0. +-- @param Unit#UNIT self +-- @return #number The relative amount of fuel (from 0.0 to 1.0). +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetFuel() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitFuel = DCSUnit:getFuel() + return UnitFuel + end + + return nil +end + +--- Returns the Unit's ammunition. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Ammo +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetAmmo() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitAmmo = DCSUnit:getAmmo() + return UnitAmmo + end + + return nil +end + +--- Returns the unit sensors. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Sensors +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetSensors() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitSensors = DCSUnit:getSensors() + return UnitSensors + end + + return nil +end + +-- Need to add here a function per sensortype +-- unit:hasSensors(Unit.SensorType.RADAR, Unit.RadarType.AS) + +--- Returns two values: +-- +-- * First value indicates if at least one of the unit's radar(s) is on. +-- * Second value is the object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. +-- @param Unit#UNIT self +-- @return #boolean Indicates if at least one of the unit's radar(s) is on. +-- @return DCSObject#Object The object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetRadar() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitRadarOn, UnitRadarObject = DCSUnit:getRadar() + return UnitRadarOn, UnitRadarObject + end + + return nil, nil +end + +-- Need to add here functions to check if radar is on and which object etc. + +--- Returns unit descriptor. Descriptor type depends on unit category. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Desc The Unit descriptor. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetDesc() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitDesc = DCSUnit:getDesc() + return UnitDesc + end + + return nil +end + + +--- Returns the type name of the DCS Unit. +-- @param Unit#UNIT self +-- @return #string The type name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetTypeName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitTypeName = DCSUnit:getTypeName() + self:T3( UnitTypeName ) + return UnitTypeName + end + + return nil +end + + + +--- Returns the prefix name of the DCS Unit. A prefix name is a part of the name before a '#'-sign. +-- DCS Units spawned with the @{SPAWN} class contain a '#'-sign to indicate the end of the (base) DCS Unit name. +-- The spawn sequence number and unit number are contained within the name after the '#' sign. +-- @param Unit#UNIT self +-- @return #string The name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPrefix() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPrefix = string.match( self.UnitName, ".*#" ):sub( 1, -2 ) + self:T3( UnitPrefix ) + return UnitPrefix + end + + return nil +end + + + +--- Returns the @{DCSTypes#Vec2} vector indicating the point in 2D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec2 The 2D point vector of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPointVec2() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPosition().p + + local UnitPointVec2 = {} + UnitPointVec2.x = UnitPointVec3.x + UnitPointVec2.y = UnitPointVec3.z + + self:T3( UnitPointVec2 ) + return UnitPointVec2 + end + + return nil +end + + +--- Returns the @{DCSTypes#Vec3} vector indicating the point in 3D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec3 The 3D point vector of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPointVec3() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPosition().p + self:T3( UnitPointVec3 ) + return UnitPointVec3 + end + + return nil +end + +--- Returns the @{DCSTypes#Position3} position vectors indicating the point and direction vectors in 3D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Position The 3D position vectors of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPositionVec3() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPosition = DCSUnit:getPosition() + self:T3( UnitPosition ) + return UnitPosition + end + + return nil +end + +--- Returns the DCS Unit velocity vector. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec3 The velocity vector +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetVelocity() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitVelocityVec3 = DCSUnit:getVelocity() + self:T3( UnitVelocityVec3 ) + return UnitVelocityVec3 + end + + return nil +end + +--- Returns true if the DCS Unit is in the air. +-- @param Unit#UNIT self +-- @return #boolean true if in the air. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:InAir() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitInAir = DCSUnit:inAir() + self:T3( UnitInAir ) + return UnitInAir + end + + return nil +end + +--- Returns the altitude of the DCS Unit. +-- @param Unit#UNIT self +-- @return DCSTypes#Distance The altitude of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetAltitude() + self:F2() + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPoint() --DCSTypes#Vec3 + return UnitPointVec3.y + end + + return nil +end + +--- Returns true if there is an **other** DCS Unit within a radius of the current 2D point of the DCS Unit. +-- @param Unit#UNIT self +-- @param Unit#UNIT AwaitUnit The other UNIT wrapper object. +-- @param Radius The radius in meters with the DCS Unit in the centre. +-- @return true If the other DCS Unit is within the radius of the 2D point of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:OtherUnitInRadius( AwaitUnit, Radius ) + self:F2( { self.UnitName, AwaitUnit.UnitName, Radius } ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPos = self:GetPointVec3() + local AwaitUnitPos = AwaitUnit:GetPointVec3() + + if (((UnitPos.x - AwaitUnitPos.x)^2 + (UnitPos.z - AwaitUnitPos.z)^2)^0.5 <= Radius) then + self:T3( "true" ) + return true + else + self:T3( "false" ) + return false + end + end + + return nil +end + +--- Returns the DCS Unit category name as defined within the DCS Unit Descriptor. +-- @param Unit#UNIT self +-- @return #string The DCS Unit Category Name +function UNIT:GetCategoryName() + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCategoryName = self.CategoryName[ self:GetDesc().category ] + return UnitCategoryName + end + + return nil +end + +--- Signal a flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:Flare( FlareColor ) + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), FlareColor , 0 ) +end + +--- Signal a white flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareWhite() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.White , 0 ) +end + +--- Signal a yellow flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareYellow() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Yellow , 0 ) +end + +--- Signal a green flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareGreen() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Green , 0 ) +end + +--- Signal a red flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareRed() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Red, 0 ) +end + +--- Smoke the UNIT. +-- @param #UNIT self +function UNIT:Smoke( SmokeColor ) + self:F2() + trigger.action.smoke( self:GetPointVec3(), SmokeColor ) +end + +--- Smoke the UNIT Green. +-- @param #UNIT self +function UNIT:SmokeGreen() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Green ) +end + +--- Smoke the UNIT Red. +-- @param #UNIT self +function UNIT:SmokeRed() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Red ) +end + +--- Smoke the UNIT White. +-- @param #UNIT self +function UNIT:SmokeWhite() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.White ) +end + +--- Smoke the UNIT Orange. +-- @param #UNIT self +function UNIT:SmokeOrange() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Orange ) +end + +--- Smoke the UNIT Blue. +-- @param #UNIT self +function UNIT:SmokeBlue() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Blue ) +end + +-- Is methods + +--- Returns if the unit is of an air category. +-- If the unit is a helicopter or a plane, then this method will return true, otherwise false. +-- @param #UNIT self +-- @return #boolean Air category evaluation result. +function UNIT:IsAir() + self:F2() + + local UnitDescriptor = self.DCSUnit:getDesc() + self:T3( { UnitDescriptor.category, Unit.Category.AIRPLANE, Unit.Category.HELICOPTER } ) + + local IsAirResult = ( UnitDescriptor.category == Unit.Category.AIRPLANE ) or ( UnitDescriptor.category == Unit.Category.HELICOPTER ) + + self:T3( IsAirResult ) + return IsAirResult +end + +--- ZONE Classes +-- @module Zone + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + +--- The ZONE class +-- @type ZONE +-- @Extends Base#BASE +ZONE = { + ClassName="ZONE", + } + +function ZONE:New( ZoneName ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( ZoneName ) + + local Zone = trigger.misc.getZone( ZoneName ) + + if not Zone then + error( "Zone " .. ZoneName .. " does not exist." ) + return nil + end + + self.Zone = Zone + self.ZoneName = ZoneName + + return self +end + +function ZONE:GetPointVec2() + self:F( self.ZoneName ) + + local Zone = trigger.misc.getZone( self.ZoneName ) + local Point = { x = Zone.point.x, y = Zone.point.z } + + self:T( { Zone, Point } ) + + return Point +end + +function ZONE:GetPointVec3( Height ) + self:F( self.ZoneName ) + + local Zone = trigger.misc.getZone( self.ZoneName ) + local Point = { x = Zone.point.x, y = land.getHeight( self:GetPointVec2() ) + Height, z = Zone.point.z } + + self:T( { Zone, Point } ) + + return Point +end + +function ZONE:GetRandomPointVec2() + self:F( self.ZoneName ) + + local Point = {} + + local Zone = trigger.misc.getZone( self.ZoneName ) + + local angle = math.random() * math.pi*2; + Point.x = Zone.point.x + math.cos( angle ) * math.random() * Zone.radius; + Point.y = Zone.point.z + math.sin( angle ) * math.random() * Zone.radius; + + self:T( { Zone, Point } ) + + return Point +end + +function ZONE:GetRadius() + self:F( self.ZoneName ) + + local Zone = trigger.misc.getZone( self.ZoneName ) + + self:T( { Zone } ) + + return Zone.radius +end + +--- The CLIENT models client units in multi player missions. +-- +-- @{#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. +-- The @{CLIENT} class is a wrapper class to handle the DCS Unit objects that have the skillset defined as __Client__ or __Player__: +-- +-- * Wraps the DCS Unit objects with skill level set to Player or Client. +-- * Support all DCS Unit APIs. +-- * Enhance with Unit specific APIs not in the DCS Group API set. +-- * When player joins Unit, execute alive init logic. +-- * Handles messages to players. +-- * Manage the "state" of the DCS Unit. +-- +-- Clients are being used by the @{MISSION} class to follow players and register their successes. +-- +-- CLIENT reference methods +-- ======================= +-- For each DCS Unit having skill level Player or Client, a CLIENT wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts). +-- +-- The CLIENT class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the DCS Unit or the DCS UnitName. +-- +-- Another thing to know is that CLIENT objects do not "contain" the DCS Unit object. +-- The CLIENT methods will reference the DCS Unit object by name when it is needed during API execution. +-- If the DCS Unit object does not exist or is nil, the CLIENT methods will return nil and log an exception in the DCS.log file. +-- +-- The CLIENT class provides the following functions to retrieve quickly the relevant CLIENT instance: +-- +-- * @{#CLIENT.Find}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit object. +-- * @{#CLIENT.FindByName}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these CLIENT OBJECT REFERENCES! (make the CLIENT object references nil). +-- +-- @module Client +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Cargo" ) +Include.File( "Message" ) + + +--- The CLIENT class +-- @type CLIENT +-- @extends Unit#UNIT +CLIENT = { + ONBOARDSIDE = { + NONE = 0, + LEFT = 1, + RIGHT = 2, + BACK = 3, + FRONT = 4 + }, + ClassName = "CLIENT", + ClientName = nil, + ClientAlive = false, + ClientTransport = false, + ClientBriefingShown = false, + _Menus = {}, + _Tasks = {}, + Messages = { + } +} + + +--- Finds a CLIENT from the _DATABASE using the relevant DCS Unit. +-- @param #CLIENT self +-- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. +-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. +-- @return #CLIENT +-- @usage +-- -- Create new Clients. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- Mission:AddGoal( DeploySA6TroopsGoal ) +-- +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) +function CLIENT:Find( DCSUnit ) + local ClientName = DCSUnit:getName() + local ClientFound = _DATABASE:FindClient( ClientName ) + + if ClientFound then + ClientFound:F( ClientName ) + return ClientFound + end + + error( "CLIENT not found for: " .. ClientName ) +end + + +--- Finds a CLIENT from the _DATABASE using the relevant Client Unit Name. +-- As an optional parameter, a briefing text can be given also. +-- @param #CLIENT self +-- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. +-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. +-- @return #CLIENT +-- @usage +-- -- Create new Clients. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- Mission:AddGoal( DeploySA6TroopsGoal ) +-- +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) +function CLIENT:FindByName( ClientName, ClientBriefing ) + local ClientFound = _DATABASE:FindClient( ClientName ) + + if ClientFound then + ClientFound:F( { ClientName, ClientBriefing } ) + ClientFound:AddBriefing( ClientBriefing ) + ClientFound.MessageSwitch = true + + return ClientFound + end + + error( "CLIENT not found for: " .. ClientName ) +end + +function CLIENT:Register( ClientName ) + local self = BASE:Inherit( self, UNIT:Register( ClientName ) ) + + self:F( ClientName ) + self.ClientName = ClientName + self.MessageSwitch = true + self.ClientAlive2 = false + + --self.AliveCheckScheduler = routines.scheduleFunction( self._AliveCheckScheduler, { self }, timer.getTime() + 1, 5 ) + self.AliveCheckScheduler = SCHEDULER:New( self, self._AliveCheckScheduler, {}, 1, 5 ) + + return self +end + + +--- Transport defines that the Client is a Transport. Transports show cargo. +-- @param #CLIENT self +-- @return #CLIENT +function CLIENT:Transport() + self:F() + + self.ClientTransport = true + return self +end + +--- AddBriefing adds a briefing to a CLIENT when a player joins a mission. +-- @param #CLIENT self +-- @param #string ClientBriefing is the text defining the Mission briefing. +-- @return #CLIENT self +function CLIENT:AddBriefing( ClientBriefing ) + self:F( ClientBriefing ) + self.ClientBriefing = ClientBriefing + self.ClientBriefingShown = false + + return self +end + +--- Show the briefing of a CLIENT. +-- @param #CLIENT self +-- @return #CLIENT self +function CLIENT:ShowBriefing() + self:F( { self.ClientName, self.ClientBriefingShown } ) + + if not self.ClientBriefingShown then + self.ClientBriefingShown = true + local Briefing = "" + if self.ClientBriefing then + Briefing = Briefing .. self.ClientBriefing + end + Briefing = Briefing .. " Press [LEFT ALT]+[B] to view the complete mission briefing." + self:Message( Briefing, 60, self.ClientName .. '/ClientBriefing', "Briefing" ) + end + + return self +end + +--- Show the mission briefing of a MISSION to the CLIENT. +-- @param #CLIENT self +-- @param #string MissionBriefing +-- @return #CLIENT self +function CLIENT:ShowMissionBriefing( MissionBriefing ) + self:F( { self.ClientName } ) + + if MissionBriefing then + self:Message( MissionBriefing, 60, self.ClientName .. '/MissionBriefing', "Mission Briefing" ) + end + + return self +end + + + +--- Resets a CLIENT. +-- @param #CLIENT self +-- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client. +function CLIENT:Reset( ClientName ) + self:F() + self._Menus = {} +end + +-- Is Functions + +--- Checks if the CLIENT is a multi-seated UNIT. +-- @param #CLIENT self +-- @return #boolean true if multi-seated. +function CLIENT:IsMultiSeated() + self:F( self.ClientName ) + + local ClientMultiSeatedTypes = { + ["Mi-8MT"] = "Mi-8MT", + ["UH-1H"] = "UH-1H", + ["P-51B"] = "P-51B" + } + + if self:IsAlive() then + local ClientTypeName = self:GetClientGroupUnit():GetTypeName() + if ClientMultiSeatedTypes[ClientTypeName] then + return true + end + end + + return false +end + +--- Checks for a client alive event and calls a function on a continuous basis. +-- @param #CLIENT self +-- @param #function CallBack Function. +-- @return #CLIENT +function CLIENT:Alive( CallBack, ... ) + self:F() + + self.ClientCallBack = CallBack + self.ClientParameters = arg + + return self +end + +--- @param #CLIENT self +function CLIENT:_AliveCheckScheduler() + self:F( { self.ClientName, self.ClientAlive2, self.ClientBriefingShown } ) + + if self:IsAlive() then -- Polymorphic call of UNIT + if self.ClientAlive2 == false then + self:ShowBriefing() + if self.ClientCallBack then + self:T("Calling Callback function") + self.ClientCallBack( self, unpack( self.ClientParameters ) ) + end + self.ClientAlive2 = true + end + else + if self.ClientAlive2 == true then + self.ClientAlive2 = false + end + end + + return true +end + +--- Return the DCSGroup of a Client. +-- This function is modified to deal with a couple of bugs in DCS 1.5.3 +-- @param #CLIENT self +-- @return DCSGroup#Group +function CLIENT:GetDCSGroup() + self:F3() + +-- local ClientData = Group.getByName( self.ClientName ) +-- if ClientData and ClientData:isExist() then +-- self:T( self.ClientName .. " : group found!" ) +-- return ClientData +-- else +-- return nil +-- end + + local ClientUnit = Unit.getByName( self.ClientName ) + + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + self:T3( { "CoalitionData:", CoalitionData } ) + for UnitId, UnitData in pairs( CoalitionData ) do + self:T3( { "UnitData:", UnitData } ) + if UnitData and UnitData:isExist() then + + --self:E(self.ClientName) + if ClientUnit then + local ClientGroup = ClientUnit:getGroup() + if ClientGroup then + self:T3( "ClientGroup = " .. self.ClientName ) + if ClientGroup:isExist() and UnitData:getGroup():isExist() then + if ClientGroup:getID() == UnitData:getGroup():getID() then + self:T3( "Normal logic" ) + self:T3( self.ClientName .. " : group found!" ) + self.ClientGroupID = ClientGroup:getID() + self.ClientGroupName = ClientGroup:getName() + return ClientGroup + end + else + -- Now we need to resolve the bugs in DCS 1.5 ... + -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) + self:T3( "Bug 1.5 logic" ) + local ClientGroupTemplate = _DATABASE.Templates.Units[self.ClientName].GroupTemplate + self.ClientGroupID = ClientGroupTemplate.groupId + self.ClientGroupName = _DATABASE.Templates.Units[self.ClientName].GroupName + self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) + return ClientGroup + end + -- else + -- error( "Client " .. self.ClientName .. " not found!" ) + end + else + --self:E( { "Client not found!", self.ClientName } ) + end + end + end + end + + -- For non player clients + if ClientUnit then + local ClientGroup = ClientUnit:getGroup() + if ClientGroup then + self:T3( "ClientGroup = " .. self.ClientName ) + if ClientGroup:isExist() then + self:T3( "Normal logic" ) + self:T3( self.ClientName .. " : group found!" ) + return ClientGroup + end + end + end + + self.ClientGroupID = nil + self.ClientGroupUnit = nil + + return nil +end + + +-- TODO: Check DCSTypes#Group.ID +--- Get the group ID of the client. +-- @param #CLIENT self +-- @return DCSTypes#Group.ID +function CLIENT:GetClientGroupID() + + local ClientGroup = self:GetDCSGroup() + + --self:E( self.ClientGroupID ) -- Determined in GetDCSGroup() + return self.ClientGroupID +end + + +--- Get the name of the group of the client. +-- @param #CLIENT self +-- @return #string +function CLIENT:GetClientGroupName() + + local ClientGroup = self:GetDCSGroup() + + self:T( self.ClientGroupName ) -- Determined in GetDCSGroup() + return self.ClientGroupName +end + +--- Returns the UNIT of the CLIENT. +-- @param #CLIENT self +-- @return Unit#UNIT +function CLIENT:GetClientGroupUnit() + self:F2() + + local ClientDCSUnit = Unit.getByName( self.ClientName ) + + self:T( self.ClientDCSUnit ) + if ClientDCSUnit and ClientDCSUnit:isExist() then + local ClientUnit = _DATABASE:FindUnit( self.ClientName ) + self:T2( ClientUnit ) + return ClientUnit + end +end + +--- Returns the DCSUnit of the CLIENT. +-- @param #CLIENT self +-- @return DCSTypes#Unit +function CLIENT:GetClientGroupDCSUnit() + self:F2() + + local ClientDCSUnit = Unit.getByName( self.ClientName ) + + if ClientDCSUnit and ClientDCSUnit:isExist() then + self:T2( ClientDCSUnit ) + return ClientDCSUnit + end +end + + +--- Evaluates if the CLIENT is a transport. +-- @param #CLIENT self +-- @return #boolean true is a transport. +function CLIENT:IsTransport() + self:F() + return self.ClientTransport +end + +--- Shows the @{Cargo#CARGO} contained within the CLIENT to the player as a message. +-- The @{Cargo#CARGO} is shown using the @{Message#MESSAGE} distribution system. +-- @param #CLIENT self +function CLIENT:ShowCargo() + self:F() + + local CargoMsg = "" + + for CargoName, Cargo in pairs( CARGOS ) do + if self == Cargo:IsLoadedInClient() then + CargoMsg = CargoMsg .. Cargo.CargoName .. " Type:" .. Cargo.CargoType .. " Weight: " .. Cargo.CargoWeight .. "\n" + end + end + + if CargoMsg == "" then + CargoMsg = "empty" + end + + self:Message( CargoMsg, 15, self.ClientName .. "/Cargo", "Co-Pilot: Cargo Status", 30 ) + +end + +-- TODO (1) I urgently need to revise this. +--- A local function called by the DCS World Menu system to switch off messages. +function CLIENT.SwitchMessages( PrmTable ) + PrmTable[1].MessageSwitch = PrmTable[2] +end + +--- The main message driver for the CLIENT. +-- This function displays various messages to the Player logged into the CLIENT through the DCS World Messaging system. +-- @param #CLIENT self +-- @param #string Message is the text describing the message. +-- @param #number MessageDuration is the duration in seconds that the Message should be displayed. +-- @param #string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId +-- @param #string MessageCategory is the category of the message (the title). +-- @param #number MessageInterval is the interval in seconds between the display of the @{Message#MESSAGE} when the CLIENT is in the air. +function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, MessageInterval ) + self:F( { Message, MessageDuration, MessageId, MessageCategory, MessageInterval } ) + + if not self.MenuMessages then + if self:GetClientGroupID() then + self.MenuMessages = MENU_CLIENT:New( self, 'Messages' ) + self.MenuRouteMessageOn = MENU_CLIENT_COMMAND:New( self, 'Messages On', self.MenuMessages, CLIENT.SwitchMessages, { self, true } ) + self.MenuRouteMessageOff = MENU_CLIENT_COMMAND:New( self,'Messages Off', self.MenuMessages, CLIENT.SwitchMessages, { self, false } ) + end + end + + if self.MessageSwitch == true then + if MessageCategory == nil then + MessageCategory = "Messages" + end + if self.Messages[MessageId] == nil then + self.Messages[MessageId] = {} + self.Messages[MessageId].MessageId = MessageId + self.Messages[MessageId].MessageTime = timer.getTime() + self.Messages[MessageId].MessageDuration = MessageDuration + if MessageInterval == nil then + self.Messages[MessageId].MessageInterval = 600 + else + self.Messages[MessageId].MessageInterval = MessageInterval + end + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + else + if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then + if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + self.Messages[MessageId].MessageTime = timer.getTime() + end + else + if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + self.Messages[MessageId].MessageInterval then + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + self.Messages[MessageId].MessageTime = timer.getTime() + end + end + end + end +end +--- Manage the mission database. +-- +-- @{#DATABASE} class +-- ================== +-- Mission designers can use the DATABASE class to refer to: +-- +-- * UNITS +-- * GROUPS +-- * players +-- * alive players +-- * CLIENTS +-- * alive CLIENTS +-- +-- On top, for internal MOOSE administration purposes, the DATBASE administers the Unit and Gruop templates as defined within the Mission Editor. +-- +-- Moose will automatically create one instance of the DATABASE class into the **global** object _DATABASE. +-- Moose refers to _DATABASE within the framework extensively, but you can also refer to the _DATABASE object within your missions if required. +-- +-- DATABASE iterators: +-- =================== +-- You can iterate the database with the available iterator methods. +-- The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the DATABASE: +-- +-- * @{#DATABASE.ForEachUnit}: Calls a function for each @{UNIT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachGroup}: Calls a function for each @{GROUP} it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayer}: Calls a function for each player it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayerAlive}: Calls a function for each alive player it finds within the DATABASE. +-- * @{#DATABASE.ForEachClient}: Calls a function for each @{CLIENT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachClientAlive}: Calls a function for each alive @{CLIENT} it finds within the DATABASE. +-- +-- @module Database +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Unit" ) +Include.File( "Event" ) +Include.File( "Client" ) + + +--- DATABASE class +-- @type DATABASE +-- @extends Base#BASE +DATABASE = { + ClassName = "DATABASE", + Templates = { + Units = {}, + Groups = {}, + ClientsByName = {}, + ClientsByID = {}, + }, + DCSUnits = {}, + DCSGroups = {}, + UNITS = {}, + GROUPS = {}, + PLAYERS = {}, + PLAYERSALIVE = {}, + CLIENTS = {}, + CLIENTSALIVE = {}, + NavPoints = {}, +} + +local _DATABASECoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _DATABASECategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + + +--- Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #DATABASE self +-- @return #DATABASE +-- @usage +-- -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. +-- DBObject = DATABASE:New() +function DATABASE:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + + + -- Follow alive players and clients + _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) + _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) + + self:_RegisterTemplates() + self:_RegisterDatabase() + self:_RegisterPlayers() + + return self +end + +--- Finds a Unit based on the Unit Name. +-- @param #DATABASE self +-- @param #string UnitName +-- @return Unit#UNIT The found Unit. +function DATABASE:FindUnit( UnitName ) + + local UnitFound = self.UNITS[UnitName] + return UnitFound +end + + +--- Adds a Unit based on the Unit Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddUnit( DCSUnit, DCSUnitName ) + + self.DCSUnits[DCSUnitName] = DCSUnit + self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) +end + + +--- Deletes a Unit from the DATABASE based on the Unit Name. +-- @param #DATABASE self +function DATABASE:DeleteUnit( DCSUnitName ) + + self.DCSUnits[DCSUnitName] = nil +end + + +--- Finds a CLIENT based on the ClientName. +-- @param #DATABASE self +-- @param #string ClientName +-- @return Client#CLIENT The found CLIENT. +function DATABASE:FindClient( ClientName ) + + local ClientFound = self.CLIENTS[ClientName] + return ClientFound +end + + +--- Adds a CLIENT based on the ClientName in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddClient( ClientName ) + + self.CLIENTS[ClientName] = CLIENT:Register( ClientName ) + self:E( self.CLIENTS[ClientName]:GetClassNameAndID() ) +end + + +--- Finds a GROUP based on the GroupName. +-- @param #DATABASE self +-- @param #string GroupName +-- @return Group#GROUP The found GROUP. +function DATABASE:FindGroup( GroupName ) + + local GroupFound = self.GROUPS[GroupName] + return GroupFound +end + + +--- Adds a GROUP based on the GroupName in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddGroup( DCSGroup, GroupName ) + + self.DCSGroups[GroupName] = DCSGroup + self.GROUPS[GroupName] = GROUP:Register( GroupName ) +end + +--- Adds a player based on the Player Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddPlayer( UnitName, PlayerName ) + + if PlayerName then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self.PLAYERS[PlayerName] = PlayerName + self.PLAYERSALIVE[PlayerName] = PlayerName + self.CLIENTSALIVE[PlayerName] = self:FindClient( UnitName ) + end +end + +--- Deletes a player from the DATABASE based on the Player Name. +-- @param #DATABASE self +function DATABASE:DeletePlayer( PlayerName ) + + if PlayerName then + self:E( { "Clean player:", PlayerName } ) + self.PLAYERSALIVE[PlayerName] = nil + self.CLIENTSALIVE[PlayerName] = nil + end +end + + +--- Instantiate new Groups within the DCSRTE. +-- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: +-- SpawnCountryID, SpawnCategoryID +-- This method is used by the SPAWN class. +-- @param #DATABASE self +-- @param #table SpawnTemplate +-- @return #DATABASE self +function DATABASE:Spawn( SpawnTemplate ) + self:F2( SpawnTemplate.name ) + + self:T2( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) + + -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. + local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID + local SpawnCountryID = SpawnTemplate.SpawnCountryID + local SpawnCategoryID = SpawnTemplate.SpawnCategoryID + + -- Nullify + SpawnTemplate.SpawnCoalitionID = nil + SpawnTemplate.SpawnCountryID = nil + SpawnTemplate.SpawnCategoryID = nil + + self:_RegisterTemplate( SpawnTemplate ) + coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) + + -- Restore + SpawnTemplate.SpawnCoalitionID = SpawnCoalitionID + SpawnTemplate.SpawnCountryID = SpawnCountryID + SpawnTemplate.SpawnCategoryID = SpawnCategoryID + + + local SpawnGroup = GROUP:Register( SpawnTemplate.name ) + return SpawnGroup +end + +--- Set a status to a Group within the Database, this to check crossing events for example. +function DATABASE:SetStatusGroup( GroupName, Status ) + self:F2( Status ) + + self.Templates.Groups[GroupName].Status = Status +end + +--- Get a status to a Group within the Database, this to check crossing events for example. +function DATABASE:GetStatusGroup( GroupName ) + self:F2( Status ) + + if self.Templates.Groups[GroupName] then + return self.Templates.Groups[GroupName].Status + else + return "" + end +end + + +--- Private method that registers new Group Templates within the DATABASE Object. +-- @param #DATABASE self +-- @param #table GroupTemplate +-- @return #DATABASE self +function DATABASE:_RegisterTemplate( GroupTemplate ) + + local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) + + if not self.Templates.Groups[GroupTemplateName] then + self.Templates.Groups[GroupTemplateName] = {} + self.Templates.Groups[GroupTemplateName].Status = nil + end + + -- Delete the spans from the route, it is not needed and takes memory. + if GroupTemplate.route and GroupTemplate.route.spans then + GroupTemplate.route.spans = nil + end + + self.Templates.Groups[GroupTemplateName].GroupName = GroupTemplateName + self.Templates.Groups[GroupTemplateName].Template = GroupTemplate + self.Templates.Groups[GroupTemplateName].groupId = GroupTemplate.groupId + self.Templates.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units + self.Templates.Groups[GroupTemplateName].Units = GroupTemplate.units + + self:T2( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } ) + + for unit_num, UnitTemplate in pairs( GroupTemplate.units ) do + + local UnitTemplateName = env.getValueDictByKey(UnitTemplate.name) + self.Templates.Units[UnitTemplateName] = {} + self.Templates.Units[UnitTemplateName].UnitName = UnitTemplateName + self.Templates.Units[UnitTemplateName].Template = UnitTemplate + self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName + self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate + self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId + self:E( {"skill",UnitTemplate.skill}) + if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then + self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate + self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate + end + self:E( { "Unit", self.Templates.Units[UnitTemplateName].UnitName } ) + end +end + + +--- Private method that registers all alive players in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterPlayers() + + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for UnitId, UnitData in pairs( CoalitionData ) do + self:T3( { "UnitData:", UnitData } ) + if UnitData and UnitData:isExist() then + local UnitName = UnitData:getName() + local PlayerName = UnitData:getPlayerName() + if not self.PLAYERS[PlayerName] then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self:AddPlayer( UnitName, PlayerName ) + end + end + end + end + + return self +end + + +--- Private method that registers all datapoints within in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterDatabase() + + local CoalitionsData = { GroupsRed = coalition.getGroups( coalition.side.RED ), GroupsBlue = coalition.getGroups( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for DCSGroupId, DCSGroup in pairs( CoalitionData ) do + + if DCSGroup:isExist() then + local DCSGroupName = DCSGroup:getName() + + self:E( { "Register Group:", DCSGroup, DCSGroupName } ) + self:AddGroup( DCSGroup, DCSGroupName ) + + for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do + + local DCSUnitName = DCSUnit:getName() + self:E( { "Register Unit:", DCSUnit, DCSUnitName } ) + self:AddUnit( DCSUnit, DCSUnitName ) + end + else + self:E( { "Group does not exist: ", DCSGroup } ) + end + + end + end + + for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do + self:E( { "Adding Client:", ClientName } ) + self:AddClient( ClientName ) + end + + return self +end + +--- Events + +--- Handles the OnBirth event for the alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnBirth( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + self:AddUnit( Event.IniDCSUnit, Event.IniDCSUnitName ) + self:AddGroup( Event.IniDCSGroup, Event.IniDCSGroupName ) + self:_EventOnPlayerEnterUnit( Event ) + end +end + + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnDeadOrCrash( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + if self.DCSUnits[Event.IniDCSUnitName] then + self:DeleteUnit( Event.IniDCSUnitName ) + -- add logic to correctly remove a group once all units are destroyed... + end + end +end + + +--- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnPlayerEnterUnit( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + local PlayerName = Event.IniDCSUnit:getPlayerName() + if not self.PLAYERSALIVE[PlayerName] then + self:AddPlayer( Event.IniDCSUnitName, PlayerName ) + end + end +end + + +--- Handles the OnPlayerLeaveUnit event to clean the active players table. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnPlayerLeaveUnit( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + local PlayerName = Event.IniDCSUnit:getPlayerName() + if self.PLAYERSALIVE[PlayerName] then + self:DeletePlayer( PlayerName ) + end + end +end + +--- Iterators + +--- Iterate the DATABASE and call an iterator function for the given set, providing the Object for each element within the set and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. +-- @return #DATABASE self +function DATABASE:ForEach( IteratorFunction, arg, Set ) + self:F2( arg ) + + local function CoRoutine() + local Count = 0 + for ObjectID, Object in pairs( Set ) do + self:T2( Object ) + IteratorFunction( Object, unpack( arg ) ) + Count = Count + 1 + if Count % 10 == 0 then + coroutine.yield( false ) + end + end + return true + end + + local co = coroutine.create( CoRoutine ) + + local function Schedule() + + local status, res = coroutine.resume( co ) + self:T2( { status, res } ) + + if status == false then + error( res ) + end + if res == false then + return true -- resume next time the loop + end + + return false + end + + local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** unit, providing the DCSUnit and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a DCSUnit parameter. +-- @return #DATABASE self +function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.DCSUnits ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** UNIT, providing the UNIT and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.UNITS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **alive** GROUP, providing the GROUP and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the database. The function needs to accept a GROUP parameter. +-- @return #DATABASE self +function DATABASE:ForEachGroup( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.GROUPS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each player, providing the player name and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an player in the database. The function needs to accept the player name. +-- @return #DATABASE self +function DATABASE:ForEachPlayer( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** player, providing the Unit of the player and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachPlayerAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERSALIVE ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClient( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **ALIVE** CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClientAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTSALIVE ) + + return self +end + + +function DATABASE:_RegisterTemplates() + self:F2() + + self.Navpoints = {} + self.UNITS = {} + --Build routines.db.units and self.Navpoints + for coa_name, coa_data in pairs(env.mission.coalition) do + + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + --self.Units[coa_name] = {} + + ---------------------------------------------- + -- build nav points DB + self.Navpoints[coa_name] = {} + if coa_data.nav_points then --navpoints + for nav_ind, nav_data in pairs(coa_data.nav_points) do + + if type(nav_data) == 'table' then + self.Navpoints[coa_name][nav_ind] = routines.utils.deepCopy(nav_data) + + self.Navpoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. + self.Navpoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. + self.Navpoints[coa_name][nav_ind]['point']['x'] = nav_data.x + self.Navpoints[coa_name][nav_ind]['point']['y'] = 0 + self.Navpoints[coa_name][nav_ind]['point']['z'] = nav_data.y + end + end + end + ------------------------------------------------- + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + + local countryName = string.lower(cntry_data.name) + --self.Units[coa_name][countryName] = {} + --self.Units[coa_name][countryName]["countryId"] = cntry_data.id + + if type(cntry_data) == 'table' then --just making sure + + for obj_type_name, obj_type_data in pairs(cntry_data) do + + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check + + local category = obj_type_name + + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + + --self.Units[coa_name][countryName][category] = {} + + for group_num, GroupTemplate in pairs(obj_type_data.group) do + + if GroupTemplate and GroupTemplate.units and type(GroupTemplate.units) == 'table' then --making sure again- this is a valid group + self:_RegisterTemplate( GroupTemplate ) + end --if GroupTemplate and GroupTemplate.units then + end --for group_num, GroupTemplate in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --if type(cntry_data) == 'table' then + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do + + return self +end + + + + +--- The main include file for the MOOSE system. + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Event" ) + +-- The order of the declarations is important here. Don't touch it. + +--- Declare the event dispatcher based on the EVENT class +_EVENTDISPATCHER = EVENT:New() -- #EVENT + +--- Declare the main database object, which is used internally by the MOOSE classes. +_DATABASE = DATABASE:New() -- Database#DATABASE + +--- Scoring system for MOOSE. +-- This scoring class calculates the hits and kills that players make within a simulation session. +-- Scoring is calculated using a defined algorithm. +-- With a small change in MissionScripting.lua, the scoring can also be logged in a CSV file, that can then be uploaded +-- to a database or a BI tool to publish the scoring results to the player community. +-- @module Scoring +-- @author FlightControl + + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Event" ) + + +--- The Scoring class +-- @type SCORING +-- @field Players A collection of the current players that have joined the game. +-- @extends Base#BASE +SCORING = { + ClassName = "SCORING", + ClassID = 0, + Players = {}, +} + +local _SCORINGCoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _SCORINGCategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + +--- Creates a new SCORING object to administer the scoring achieved by players. +-- @param #SCORING self +-- @param #string GameName The name of the game. This name is also logged in the CSV score file. +-- @return #SCORING self +-- @usage +-- -- Define a new scoring object for the mission Gori Valley. +-- ScoringObject = SCORING:New( "Gori Valley" ) +function SCORING:New( GameName ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + if GameName then + self.GameName = GameName + else + error( "A game name must be given to register the scoring results" ) + end + + + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnHit( self._EventOnHit, self ) + + --self.SchedulerId = routines.scheduleFunction( SCORING._FollowPlayersScheduled, { self }, 0, 5 ) + self.SchedulerId = SCHEDULER:New( self, self._FollowPlayersScheduled, {}, 0, 5 ) + + self:ScoreMenu() + + return self + +end + +--- Creates a score radio menu. Can be accessed using Radio -> F10. +-- @param #SCORING self +-- @return #SCORING self +function SCORING:ScoreMenu() + self.Menu = SUBMENU:New( 'Scoring' ) + self.AllScoresMenu = COMMANDMENU:New( 'Score All Active Players', self.Menu, SCORING.ReportScoreAll, self ) + --- = COMMANDMENU:New('Your Current Score', ReportScore, SCORING.ReportScorePlayer, self ) + return self +end + +--- Follows new players entering Clients within the DCSRTE. +-- TODO: Need to see if i can catch this also with an event. It will eliminate the schedule ... +function SCORING:_FollowPlayersScheduled() + self:F3( "_FollowPlayersScheduled" ) + + local ClientUnit = 0 + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers(coalition.side.RED), AlivePlayersBlue = coalition.getPlayers(coalition.side.BLUE) } + local unitId + local unitData + local AlivePlayerUnits = {} + + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + self:T3( { "_FollowPlayersScheduled", CoalitionData } ) + for UnitId, UnitData in pairs( CoalitionData ) do + self:_AddPlayerFromUnit( UnitData ) + end + end + + return true +end + + +--- Track DEAD or CRASH events for the scoring. +-- @param #SCORING self +-- @param Event#EVENTDATA Event +function SCORING:_EventOnDeadOrCrash( Event ) + self:F( { Event } ) + + local TargetUnit = nil + local TargetGroup = nil + local TargetUnitName = "" + local TargetGroupName = "" + local TargetPlayerName = "" + local TargetCoalition = nil + local TargetCategory = nil + local TargetType = nil + local TargetUnitCoalition = nil + local TargetUnitCategory = nil + local TargetUnitType = nil + + if Event.IniDCSUnit then + + TargetUnit = Event.IniDCSUnit + TargetUnitName = Event.IniDCSUnitName + TargetGroup = Event.IniDCSGroup + TargetGroupName = Event.IniDCSGroupName + TargetPlayerName = TargetUnit:getPlayerName() + + TargetCoalition = TargetUnit:getCoalition() + --TargetCategory = TargetUnit:getCategory() + TargetCategory = TargetUnit:getDesc().category -- Workaround + TargetType = TargetUnit:getTypeName() + + TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] + TargetUnitCategory = _SCORINGCategory[TargetCategory] + TargetUnitType = TargetType + + self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } ) + end + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Something got killed" ) + + -- Some variables + local InitUnitName = PlayerData.UnitName + local InitUnitType = PlayerData.UnitType + local InitCoalition = PlayerData.UnitCoalition + local InitCategory = PlayerData.UnitCategory + local InitUnitCoalition = _SCORINGCoalition[InitCoalition] + local InitUnitCategory = _SCORINGCategory[InitCategory] + + self:T( { InitUnitName, InitUnitType, InitUnitCoalition, InitCoalition, InitUnitCategory, InitCategory } ) + + -- What is he hitting? + if TargetCategory then + if PlayerData and PlayerData.Hit and PlayerData.Hit[TargetCategory] and PlayerData.Hit[TargetCategory][TargetUnitName] then -- Was there a hit for this unit for this player before registered??? + if not PlayerData.Kill[TargetCategory] then + PlayerData.Kill[TargetCategory] = {} + end + if not PlayerData.Kill[TargetCategory][TargetType] then + PlayerData.Kill[TargetCategory][TargetType] = {} + PlayerData.Kill[TargetCategory][TargetType].Score = 0 + PlayerData.Kill[TargetCategory][TargetType].ScoreKill = 0 + PlayerData.Kill[TargetCategory][TargetType].Penalty = 0 + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = 0 + end + + if InitCoalition == TargetCoalition then + PlayerData.Penalty = PlayerData.Penalty + 25 + PlayerData.Kill[TargetCategory][TargetType].Penalty = PlayerData.Kill[TargetCategory][TargetType].Penalty + 25 + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = PlayerData.Kill[TargetCategory][TargetType].PenaltyKill + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' killed a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill .. " times. Penalty: -" .. PlayerData.Kill[TargetCategory][TargetType].Penalty .. + ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, + "", 5, "/PENALTY" .. PlayerName .. "/" .. InitUnitName ):ToAll() + self:ScoreCSV( PlayerName, "KILL_PENALTY", 1, -125, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + else + PlayerData.Score = PlayerData.Score + 10 + PlayerData.Kill[TargetCategory][TargetType].Score = PlayerData.Kill[TargetCategory][TargetType].Score + 10 + PlayerData.Kill[TargetCategory][TargetType].ScoreKill = PlayerData.Kill[TargetCategory][TargetType].ScoreKill + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' killed an enemy " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + PlayerData.Kill[TargetCategory][TargetType].ScoreKill .. " times. Score: " .. PlayerData.Kill[TargetCategory][TargetType].Score .. + ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, + "", 5, "/SCORE" .. PlayerName .. "/" .. InitUnitName ):ToAll() + self:ScoreCSV( PlayerName, "KILL_SCORE", 1, 10, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + end + end + end + end + end +end + + + +--- Add a new player entering a Unit. +function SCORING:_AddPlayerFromUnit( UnitData ) + self:F( UnitData ) + + if UnitData and UnitData:isExist() then + local UnitName = UnitData:getName() + local PlayerName = UnitData:getPlayerName() + local UnitDesc = UnitData:getDesc() + local UnitCategory = UnitDesc.category + local UnitCoalition = UnitData:getCoalition() + local UnitTypeName = UnitData:getTypeName() + + self:T( { PlayerName, UnitName, UnitCategory, UnitCoalition, UnitTypeName } ) + + if self.Players[PlayerName] == nil then -- I believe this is the place where a Player gets a life in a mission when he enters a unit ... + self.Players[PlayerName] = {} + self.Players[PlayerName].Hit = {} + self.Players[PlayerName].Kill = {} + self.Players[PlayerName].Mission = {} + + -- for CategoryID, CategoryName in pairs( SCORINGCategory ) do + -- self.Players[PlayerName].Hit[CategoryID] = {} + -- self.Players[PlayerName].Kill[CategoryID] = {} + -- end + self.Players[PlayerName].HitPlayers = {} + self.Players[PlayerName].HitUnits = {} + self.Players[PlayerName].Score = 0 + self.Players[PlayerName].Penalty = 0 + self.Players[PlayerName].PenaltyCoalition = 0 + self.Players[PlayerName].PenaltyWarning = 0 + end + + if not self.Players[PlayerName].UnitCoalition then + self.Players[PlayerName].UnitCoalition = UnitCoalition + else + if self.Players[PlayerName].UnitCoalition ~= UnitCoalition then + self.Players[PlayerName].Penalty = self.Players[PlayerName].Penalty + 50 + self.Players[PlayerName].PenaltyCoalition = self.Players[PlayerName].PenaltyCoalition + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' changed coalition from " .. _SCORINGCoalition[self.Players[PlayerName].UnitCoalition] .. " to " .. _SCORINGCoalition[UnitCoalition] .. + "(changed " .. self.Players[PlayerName].PenaltyCoalition .. " times the coalition). 50 Penalty points added.", + "", + 2, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + self:ScoreCSV( PlayerName, "COALITION_PENALTY", 1, -50, self.Players[PlayerName].UnitName, _SCORINGCoalition[self.Players[PlayerName].UnitCoalition], _SCORINGCategory[self.Players[PlayerName].UnitCategory], self.Players[PlayerName].UnitType, + UnitName, _SCORINGCoalition[UnitCoalition], _SCORINGCategory[UnitCategory], UnitData:getTypeName() ) + end + end + self.Players[PlayerName].UnitName = UnitName + self.Players[PlayerName].UnitCoalition = UnitCoalition + self.Players[PlayerName].UnitCategory = UnitCategory + self.Players[PlayerName].UnitType = UnitTypeName + + if self.Players[PlayerName].Penalty > 100 then + if self.Players[PlayerName].PenaltyWarning < 1 then + MESSAGE:New( "Player '" .. PlayerName .. "': WARNING! If you continue to commit FRATRICIDE and have a PENALTY score higher than 150, you will be COURT MARTIALED and DISMISSED from this mission! \nYour total penalty is: " .. self.Players[PlayerName].Penalty, + "", + 30, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + self.Players[PlayerName].PenaltyWarning = self.Players[PlayerName].PenaltyWarning + 1 + end + end + + if self.Players[PlayerName].Penalty > 150 then + ClientGroup = GROUP:NewFromDCSUnit( UnitData ) + ClientGroup:Destroy() + MESSAGE:New( "Player '" .. PlayerName .. "' committed FRATRICIDE, he will be COURT MARTIALED and is DISMISSED from this mission!", + "", + 10, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + end + + end +end + + +--- Registers Scores the players completing a Mission Task. +function SCORING:_AddMissionTaskScore( PlayerUnit, MissionName, Score ) + self:F( { PlayerUnit, MissionName, Score } ) + + local PlayerName = PlayerUnit:getPlayerName() + + if not self.Players[PlayerName].Mission[MissionName] then + self.Players[PlayerName].Mission[MissionName] = {} + self.Players[PlayerName].Mission[MissionName].ScoreTask = 0 + self.Players[PlayerName].Mission[MissionName].ScoreMission = 0 + end + + self:T( PlayerName ) + self:T( self.Players[PlayerName].Mission[MissionName] ) + + self.Players[PlayerName].Score = self.Players[PlayerName].Score + Score + self.Players[PlayerName].Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score + + MESSAGE:New( "Player '" .. PlayerName .. "' has finished another Task in Mission '" .. MissionName .. "'. " .. + Score .. " Score points added.", + "", 20, "/SCORETASK" .. PlayerName ):ToAll() + + self:ScoreCSV( PlayerName, "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score, PlayerUnit:getName() ) +end + + +--- Registers Mission Scores for possible multiple players that contributed in the Mission. +function SCORING:_AddMissionScore( MissionName, Score ) + self:F( { MissionName, Score } ) + + for PlayerName, PlayerData in pairs( self.Players ) do + + if PlayerData.Mission[MissionName] then + PlayerData.Score = PlayerData.Score + Score + PlayerData.Mission[MissionName].ScoreMission = PlayerData.Mission[MissionName].ScoreMission + Score + MESSAGE:New( "Player '" .. PlayerName .. "' has finished Mission '" .. MissionName .. "'. " .. + Score .. " Score points added.", + "", 20, "/SCOREMISSION" .. PlayerName ):ToAll() + self:ScoreCSV( PlayerName, "MISSION_" .. MissionName:gsub( ' ', '_' ), 1, Score ) + end + end +end + +--- Handles the OnHit event for the scoring. +-- @param #SCORING self +-- @param Event#EVENTDATA Event +function SCORING:_EventOnHit( Event ) + self:F( { Event } ) + + local InitUnit = nil + local InitUnitName = "" + local InitGroup = nil + local InitGroupName = "" + local InitPlayerName = nil + + local InitCoalition = nil + local InitCategory = nil + local InitType = nil + local InitUnitCoalition = nil + local InitUnitCategory = nil + local InitUnitType = nil + + local TargetUnit = nil + local TargetUnitName = "" + local TargetGroup = nil + local TargetGroupName = "" + local TargetPlayerName = "" + + local TargetCoalition = nil + local TargetCategory = nil + local TargetType = nil + local TargetUnitCoalition = nil + local TargetUnitCategory = nil + local TargetUnitType = nil + + if Event.IniDCSUnit then + + InitUnit = Event.IniDCSUnit + InitUnitName = Event.IniDCSUnitName + InitGroup = Event.IniDCSGroup + InitGroupName = Event.IniDCSGroupName + InitPlayerName = InitUnit:getPlayerName() + + InitCoalition = InitUnit:getCoalition() + --TODO: Workaround Client DCS Bug + --InitCategory = InitUnit:getCategory() + InitCategory = InitUnit:getDesc().category + InitType = InitUnit:getTypeName() + + InitUnitCoalition = _SCORINGCoalition[InitCoalition] + InitUnitCategory = _SCORINGCategory[InitCategory] + InitUnitType = InitType + + self:T( { InitUnitName, InitGroupName, InitPlayerName, InitCoalition, InitCategory, InitType , InitUnitCoalition, InitUnitCategory, InitUnitType } ) + end + + + if Event.TgtDCSUnit then + + TargetUnit = Event.TgtDCSUnit + TargetUnitName = Event.TgtDCSUnitName + TargetGroup = Event.TgtDCSGroup + TargetGroupName = Event.TgtDCSGroupName + TargetPlayerName = TargetUnit:getPlayerName() + + TargetCoalition = TargetUnit:getCoalition() + --TODO: Workaround Client DCS Bug + --TargetCategory = TargetUnit:getCategory() + TargetCategory = TargetUnit:getDesc().category + TargetType = TargetUnit:getTypeName() + + TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] + TargetUnitCategory = _SCORINGCategory[TargetCategory] + TargetUnitType = TargetType + + self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType, TargetUnitCoalition, TargetUnitCategory, TargetUnitType } ) + end + + if InitPlayerName ~= nil then -- It is a player that is hitting something + self:_AddPlayerFromUnit( InitUnit ) + if self.Players[InitPlayerName] then -- This should normally not happen, but i'll test it anyway. + if TargetPlayerName ~= nil then -- It is a player hitting another player ... + self:_AddPlayerFromUnit( TargetUnit ) + self.Players[InitPlayerName].HitPlayers = self.Players[InitPlayerName].HitPlayers + 1 + end + + self:T( "Hitting Something" ) + -- What is he hitting? + if TargetCategory then + if not self.Players[InitPlayerName].Hit[TargetCategory] then + self.Players[InitPlayerName].Hit[TargetCategory] = {} + end + if not self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] then + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] = {} + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = 0 + end + local Score = 0 + if InitCoalition == TargetCoalition then + self.Players[InitPlayerName].Penalty = self.Players[InitPlayerName].Penalty + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit + 1 + MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit .. " times. Penalty: -" .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty .. + ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, + "", + 2, + "/PENALTY" .. InitPlayerName .. "/" .. InitUnitName + ):ToAll() + self:ScoreCSV( InitPlayerName, "HIT_PENALTY", 1, -25, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + else + self.Players[InitPlayerName].Score = self.Players[InitPlayerName].Score + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score + 1 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit + 1 + MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a target " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit .. " times. Score: " .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score .. + ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, + "", + 2, + "/SCORE" .. InitPlayerName .. "/" .. InitUnitName + ):ToAll() + self:ScoreCSV( InitPlayerName, "HIT_SCORE", 1, 1, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + end + end + end + elseif InitPlayerName == nil then -- It is an AI hitting a player??? + + end +end + + +function SCORING:ReportScoreAll() + + env.info( "Hello World " ) + + local ScoreMessage = "" + local PlayerMessage = "" + + self:T( "Score Report" ) + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local PlayerScore = 0 + local PlayerPenalty = 0 + + ScoreMessage = ":\n" + + local ScoreMessageHits = "" + + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( CategoryName ) + if PlayerData.Hit[CategoryID] then + local Score = 0 + local ScoreHit = 0 + local Penalty = 0 + local PenaltyHit = 0 + self:T( "Hit scores exist for player " .. PlayerName ) + for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do + Score = Score + UnitData.Score + ScoreHit = ScoreHit + UnitData.ScoreHit + Penalty = Penalty + UnitData.Penalty + PenaltyHit = UnitData.PenaltyHit + end + local ScoreMessageHit = string.format( "%s:%d ", CategoryName, Score - Penalty ) + self:T( ScoreMessageHit ) + ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageHits ~= "" then + ScoreMessage = ScoreMessage .. " Hits: " .. ScoreMessageHits .. "\n" + end + + local ScoreMessageKills = "" + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( "Kill scores exist for player " .. PlayerName ) + if PlayerData.Kill[CategoryID] then + local Score = 0 + local ScoreKill = 0 + local Penalty = 0 + local PenaltyKill = 0 + + for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do + Score = Score + UnitData.Score + ScoreKill = ScoreKill + UnitData.ScoreKill + Penalty = Penalty + UnitData.Penalty + PenaltyKill = PenaltyKill + UnitData.PenaltyKill + end + + local ScoreMessageKill = string.format( " %s:%d ", CategoryName, Score - Penalty ) + self:T( ScoreMessageKill ) + ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill + + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageKills ~= "" then + ScoreMessage = ScoreMessage .. " Kills: " .. ScoreMessageKills .. "\n" + end + + local ScoreMessageCoalitionChangePenalties = "" + if PlayerData.PenaltyCoalition ~= 0 then + ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) + PlayerPenalty = PlayerPenalty + PlayerData.Penalty + end + if ScoreMessageCoalitionChangePenalties ~= "" then + ScoreMessage = ScoreMessage .. " Coalition Penalties: " .. ScoreMessageCoalitionChangePenalties .. "\n" + end + + local ScoreMessageMission = "" + local ScoreMission = 0 + local ScoreTask = 0 + for MissionName, MissionData in pairs( PlayerData.Mission ) do + ScoreMission = ScoreMission + MissionData.ScoreMission + ScoreTask = ScoreTask + MissionData.ScoreTask + ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " + end + PlayerScore = PlayerScore + ScoreMission + ScoreTask + + if ScoreMessageMission ~= "" then + ScoreMessage = ScoreMessage .. " Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")\n" + end + + PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score:%d (%d Score -%d Penalties)%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) + end + end + MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() +end + + +function SCORING:ReportScorePlayer() + + env.info( "Hello World " ) + + local ScoreMessage = "" + local PlayerMessage = "" + + self:T( "Score Report" ) + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local PlayerScore = 0 + local PlayerPenalty = 0 + + ScoreMessage = "" + + local ScoreMessageHits = "" + + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( CategoryName ) + if PlayerData.Hit[CategoryID] then + local Score = 0 + local ScoreHit = 0 + local Penalty = 0 + local PenaltyHit = 0 + self:T( "Hit scores exist for player " .. PlayerName ) + for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do + Score = Score + UnitData.Score + ScoreHit = ScoreHit + UnitData.ScoreHit + Penalty = Penalty + UnitData.Penalty + PenaltyHit = UnitData.PenaltyHit + end + local ScoreMessageHit = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreHit, PenaltyHit ) + self:T( ScoreMessageHit ) + ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageHits ~= "" then + ScoreMessage = ScoreMessage .. "\n Hits: " .. ScoreMessageHits .. " " + end + + local ScoreMessageKills = "" + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( "Kill scores exist for player " .. PlayerName ) + if PlayerData.Kill[CategoryID] then + local Score = 0 + local ScoreKill = 0 + local Penalty = 0 + local PenaltyKill = 0 + + for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do + Score = Score + UnitData.Score + ScoreKill = ScoreKill + UnitData.ScoreKill + Penalty = Penalty + UnitData.Penalty + PenaltyKill = PenaltyKill + UnitData.PenaltyKill + end + + local ScoreMessageKill = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreKill, PenaltyKill ) + self:T( ScoreMessageKill ) + ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill + + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageKills ~= "" then + ScoreMessage = ScoreMessage .. "\n Kills: " .. ScoreMessageKills .. " " + end + + local ScoreMessageCoalitionChangePenalties = "" + if PlayerData.PenaltyCoalition ~= 0 then + ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) + PlayerPenalty = PlayerPenalty + PlayerData.Penalty + end + if ScoreMessageCoalitionChangePenalties ~= "" then + ScoreMessage = ScoreMessage .. "\n Coalition: " .. ScoreMessageCoalitionChangePenalties .. " " + end + + local ScoreMessageMission = "" + local ScoreMission = 0 + local ScoreTask = 0 + for MissionName, MissionData in pairs( PlayerData.Mission ) do + ScoreMission = ScoreMission + MissionData.ScoreMission + ScoreTask = ScoreTask + MissionData.ScoreTask + ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " + end + PlayerScore = PlayerScore + ScoreMission + ScoreTask + + if ScoreMessageMission ~= "" then + ScoreMessage = ScoreMessage .. "\n Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ") " + end + + PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties ):%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) + end + end + MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() + +end + + +function SCORING:SecondsToClock(sSeconds) + local nSeconds = sSeconds + if nSeconds == 0 then + --return nil; + return "00:00:00"; + else + nHours = string.format("%02.f", math.floor(nSeconds/3600)); + nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); + nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); + return nHours..":"..nMins..":"..nSecs + end +end + +--- Opens a score CSV file to log the scores. +-- @param #SCORING self +-- @param #string ScoringCSV +-- @return #SCORING self +-- @usage +-- -- Open a new CSV file to log the scores of the game Gori Valley. Let the name of the CSV file begin with "Player Scores". +-- ScoringObject = SCORING:New( "Gori Valley" ) +-- ScoringObject:OpenCSV( "Player Scores" ) +function SCORING:OpenCSV( ScoringCSV ) + self:F( ScoringCSV ) + + if lfs and io and os then + if ScoringCSV then + self.ScoringCSV = ScoringCSV + local fdir = lfs.writedir() .. [[Logs\]] .. self.ScoringCSV .. " " .. os.date( "%Y-%m-%d %H-%M-%S" ) .. ".csv" + + self.CSVFile, self.err = io.open( fdir, "w+" ) + if not self.CSVFile then + error( "Error: Cannot open CSV file in " .. lfs.writedir() ) + end + + self.CSVFile:write( '"GameName","RunTime","Time","PlayerName","ScoreType","PlayerUnitCoaltion","PlayerUnitCategory","PlayerUnitType","PlayerUnitName","TargetUnitCoalition","TargetUnitCategory","TargetUnitType","TargetUnitName","Times","Score"\n' ) + + self.RunTime = os.date("%y-%m-%d_%H-%M-%S") + else + error( "A string containing the CSV file name must be given." ) + end + else + self:E( "The MissionScripting.lua file has not been changed to allow lfs, io and os modules to be used..." ) + end + return self +end + + +--- Registers a score for a player. +-- @param #SCORING self +-- @param #string PlayerName The name of the player. +-- @param #string ScoreType The type of the score. +-- @param #string ScoreTimes The amount of scores achieved. +-- @param #string ScoreAmount The score given. +-- @param #string PlayerUnitName The unit name of the player. +-- @param #string PlayerUnitCoalition The coalition of the player unit. +-- @param #string PlayerUnitCategory The category of the player unit. +-- @param #string PlayerUnitType The type of the player unit. +-- @param #string TargetUnitName The name of the target unit. +-- @param #string TargetUnitCoalition The coalition of the target unit. +-- @param #string TargetUnitCategory The category of the target unit. +-- @param #string TargetUnitType The type of the target unit. +-- @return #SCORING self +function SCORING:ScoreCSV( PlayerName, ScoreType, ScoreTimes, ScoreAmount, PlayerUnitName, PlayerUnitCoalition, PlayerUnitCategory, PlayerUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + --write statistic information to file + local ScoreTime = self:SecondsToClock( timer.getTime() ) + PlayerName = PlayerName:gsub( '"', '_' ) + + if PlayerUnitName and PlayerUnitName ~= '' then + local PlayerUnit = Unit.getByName( PlayerUnitName ) + + if PlayerUnit then + if not PlayerUnitCategory then + --PlayerUnitCategory = SCORINGCategory[PlayerUnit:getCategory()] + PlayerUnitCategory = _SCORINGCategory[PlayerUnit:getDesc().category] + end + + if not PlayerUnitCoalition then + PlayerUnitCoalition = _SCORINGCoalition[PlayerUnit:getCoalition()] + end + + if not PlayerUnitType then + PlayerUnitType = PlayerUnit:getTypeName() + end + else + PlayerUnitName = '' + PlayerUnitCategory = '' + PlayerUnitCoalition = '' + PlayerUnitType = '' + end + else + PlayerUnitName = '' + PlayerUnitCategory = '' + PlayerUnitCoalition = '' + PlayerUnitType = '' + end + + if not TargetUnitCoalition then + TargetUnitCoalition = '' + end + + if not TargetUnitCategory then + TargetUnitCategory = '' + end + + if not TargetUnitType then + TargetUnitType = '' + end + + if not TargetUnitName then + TargetUnitName = '' + end + + if lfs and io and os then + self.CSVFile:write( + '"' .. self.GameName .. '"' .. ',' .. + '"' .. self.RunTime .. '"' .. ',' .. + '' .. ScoreTime .. '' .. ',' .. + '"' .. PlayerName .. '"' .. ',' .. + '"' .. ScoreType .. '"' .. ',' .. + '"' .. PlayerUnitCoalition .. '"' .. ',' .. + '"' .. PlayerUnitCategory .. '"' .. ',' .. + '"' .. PlayerUnitType .. '"' .. ',' .. + '"' .. PlayerUnitName .. '"' .. ',' .. + '"' .. TargetUnitCoalition .. '"' .. ',' .. + '"' .. TargetUnitCategory .. '"' .. ',' .. + '"' .. TargetUnitType .. '"' .. ',' .. + '"' .. TargetUnitName .. '"' .. ',' .. + '' .. ScoreTimes .. '' .. ',' .. + '' .. ScoreAmount + ) + + self.CSVFile:write( "\n" ) + end +end + + +function SCORING:CloseCSV() + if lfs and io and os then + self.CSVFile:close() + end +end + +--- CARGO Classes +-- @module CARGO + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) +Include.File( "Scheduler" ) + + +--- Clients are those Groups defined within the Mission Editor that have the skillset defined as "Client" or "Player". +-- These clients are defined within the Mission Orchestration Framework (MOF) + +CARGOS = {} + + +CARGO_ZONE = { + ClassName="CARGO_ZONE", + CargoZoneName = '', + CargoHostUnitName = '', + SIGNAL = { + TYPE = { + SMOKE = { ID = 1, TEXT = "smoke" }, + FLARE = { ID = 2, TEXT = "flare" } + }, + COLOR = { + GREEN = { ID = 1, TRIGGERCOLOR = trigger.smokeColor.Green, TEXT = "A green" }, + RED = { ID = 2, TRIGGERCOLOR = trigger.smokeColor.Red, TEXT = "A red" }, + WHITE = { ID = 3, TRIGGERCOLOR = trigger.smokeColor.White, TEXT = "A white" }, + ORANGE = { ID = 4, TRIGGERCOLOR = trigger.smokeColor.Orange, TEXT = "An orange" }, + BLUE = { ID = 5, TRIGGERCOLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, + YELLOW = { ID = 6, TRIGGERCOLOR = trigger.flareColor.Yellow, TEXT = "A yellow" } + } + } +} + +--- Creates a new zone where cargo can be collected or deployed. +-- The zone functionality is useful to smoke or indicate routes for cargo pickups or deployments. +-- Provide the zone name as declared in the mission file into the CargoZoneName in the :New method. +-- An optional parameter is the CargoHostName, which is a Group declared with Late Activation switched on in the mission file. +-- The CargoHostName is the "host" of the cargo zone: +-- +-- * It will smoke the zone position when a client is approaching the zone. +-- * Depending on the cargo type, it will assist in the delivery of the cargo by driving to and from the client. +-- +-- @param #CARGO_ZONE self +-- @param #string CargoZoneName The name of the zone as declared within the mission editor. +-- @param #string CargoHostName The name of the Group "hosting" the zone. The Group MUST NOT be a static, and must be a "mobile" unit. +function CARGO_ZONE:New( CargoZoneName, CargoHostName ) local self = BASE:Inherit( self, ZONE:New( CargoZoneName ) ) + self:F( { CargoZoneName, CargoHostName } ) + + self.CargoZoneName = CargoZoneName + self.SignalHeight = 2 + --self.CargoZone = trigger.misc.getZone( CargoZoneName ) + + + if CargoHostName then + self.CargoHostName = CargoHostName + end + + self:T( self.CargoZoneName ) + + return self +end + +function CARGO_ZONE:Spawn() + self:F( self.CargoHostName ) + + if self.CargoHostName then -- Only spawn a host in the zone when there is one given as a parameter in the New function. + if self.CargoHostSpawn then + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() + if CargoHostGroup and CargoHostGroup:IsAlive() then + else + self.CargoHostSpawn:ReSpawn( 1 ) + end + else + self:T( "Initialize CargoHostSpawn" ) + self.CargoHostSpawn = SPAWN:New( self.CargoHostName ):Limit( 1, 1 ) + self.CargoHostSpawn:ReSpawn( 1 ) + end + end + + return self +end + +function CARGO_ZONE:GetHostUnit() + self:F( self ) + + if self.CargoHostName then + + -- A Host has been given, signal the host + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() + local CargoHostUnit + if CargoHostGroup and CargoHostGroup:IsAlive() then + CargoHostUnit = CargoHostGroup:GetUnit(1) + else + CargoHostUnit = StaticObject.getByName( self.CargoHostName ) + end + + return CargoHostUnit + end + + return nil +end + +function CARGO_ZONE:ReportCargosToClient( Client, CargoType ) + self:F() + + local SignalUnit = self:GetHostUnit() + + if SignalUnit then + + local SignalUnitTypeName = SignalUnit:getTypeName() + + local HostMessage = "" + + local IsCargo = false + for CargoID, Cargo in pairs( CARGOS ) do + if Cargo.CargoType == Task.CargoType then + if Cargo:IsStatusNone() then + HostMessage = HostMessage .. " - " .. Cargo.CargoName .. " - " .. Cargo.CargoType .. " (" .. Cargo.Weight .. "kg)" .. "\n" + IsCargo = true + end + end + end + + if not IsCargo then + HostMessage = "No Cargo Available." + end + + Client:Message( HostMessage, 20, Mission.Name .. "/StageHosts." .. SignalUnitTypeName, SignalUnitTypeName .. ": Reporting Cargo", 10 ) + end +end + + +function CARGO_ZONE:Signal() + self:F() + + local Signalled = false + + if self.SignalType then + + if self.CargoHostName then + + -- A Host has been given, signal the host + + local SignalUnit = self:GetHostUnit() + + if SignalUnit then + + self:T( 'Signalling Unit' ) + local SignalVehiclePos = SignalUnit:GetPointVec3() + SignalVehiclePos.y = SignalVehiclePos.y + 2 + + if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then + + trigger.action.smoke( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR ) + Signalled = true + + elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then + + trigger.action.signalFlare( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR , 0 ) + Signalled = false + + end + end + + else + + local ZonePointVec3 = self:GetPointVec3( self.SignalHeight ) -- Get the zone position + the landheight + 2 meters + + if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then + + trigger.action.smoke( ZonePointVec3, self.SignalColor.TRIGGERCOLOR ) + Signalled = true + + elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then + trigger.action.signalFlare( ZonePointVec3, self.SignalColor.TRIGGERCOLOR, 0 ) + Signalled = false + + end + end + end + + return Signalled + +end + +function CARGO_ZONE:WhiteSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:BlueSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.BLUE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:RedSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:OrangeSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.ORANGE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:GreenSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + + +function CARGO_ZONE:WhiteFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:RedFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:GreenFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:YellowFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.YELLOW + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + + +function CARGO_ZONE:GetCargoHostUnit() + self:F( self ) + + if self.CargoHostSpawn then + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex(1) + if CargoHostGroup and CargoHostGroup:IsAlive() then + local CargoHostUnit = CargoHostGroup:GetUnit(1) + if CargoHostUnit and CargoHostUnit:IsAlive() then + return CargoHostUnit + end + end + end + + return nil +end + +function CARGO_ZONE:GetCargoZoneName() + self:F() + + return self.CargoZoneName +end + +CARGO = { + ClassName = "CARGO", + STATUS = { + NONE = 0, + LOADED = 1, + UNLOADED = 2, + LOADING = 3 + }, + CargoClient = nil +} + +--- Add Cargo to the mission... Cargo functionality needs to be reworked a bit, so this is still under construction. I need to make a CARGO Class... +function CARGO:New( CargoType, CargoName, CargoWeight ) local self = BASE:Inherit( self, BASE:New() ) + self:F( { CargoType, CargoName, CargoWeight } ) + + + self.CargoType = CargoType + self.CargoName = CargoName + self.CargoWeight = CargoWeight + + self:StatusNone() + + return self +end + +function CARGO:Spawn( Client ) + self:F() + + return self + +end + +function CARGO:IsNear( Client, LandingZone ) + self:F() + + local Near = true + + return Near + +end + + +function CARGO:IsLoadingToClient() + self:F() + + if self:IsStatusLoading() then + return self.CargoClient + end + + return nil + +end + + +function CARGO:IsLoadedInClient() + self:F() + + if self:IsStatusLoaded() then + return self.CargoClient + end + + return nil + +end + + +function CARGO:UnLoad( Client, TargetZoneName ) + self:F() + + self:StatusUnLoaded() + + return self +end + +function CARGO:OnBoard( Client, LandingZone ) + self:F() + + local Valid = true + + self.CargoClient = Client + local ClientUnit = Client:GetClientGroupDCSUnit() + + return Valid +end + +function CARGO:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = true + + return OnBoarded +end + +function CARGO:Load( Client ) + self:F() + + self:StatusLoaded( Client ) + + return self +end + +function CARGO:IsLandingRequired() + self:F() + return true +end + +function CARGO:IsSlingLoad() + self:F() + return false +end + + +function CARGO:StatusNone() + self:F() + + self.CargoClient = nil + self.CargoStatus = CARGO.STATUS.NONE + + return self +end + +function CARGO:StatusLoading( Client ) + self:F() + + self.CargoClient = Client + self.CargoStatus = CARGO.STATUS.LOADING + self:T( "Cargo " .. self.CargoName .. " loading to Client: " .. self.CargoClient:GetClientGroupName() ) + + return self +end + +function CARGO:StatusLoaded( Client ) + self:F() + + self.CargoClient = Client + self.CargoStatus = CARGO.STATUS.LOADED + self:T( "Cargo " .. self.CargoName .. " loaded in Client: " .. self.CargoClient:GetClientGroupName() ) + + return self +end + +function CARGO:StatusUnLoaded() + self:F() + + self.CargoClient = nil + self.CargoStatus = CARGO.STATUS.UNLOADED + + return self +end + + +function CARGO:IsStatusNone() + self:F() + + return self.CargoStatus == CARGO.STATUS.NONE +end + +function CARGO:IsStatusLoading() + self:F() + + return self.CargoStatus == CARGO.STATUS.LOADING +end + +function CARGO:IsStatusLoaded() + self:F() + + return self.CargoStatus == CARGO.STATUS.LOADED +end + +function CARGO:IsStatusUnLoaded() + self:F() + + return self.CargoStatus == CARGO.STATUS.UNLOADED +end + + +CARGO_GROUP = { + ClassName = "CARGO_GROUP" +} + + +function CARGO_GROUP:New( CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone } ) + + self.CargoSpawn = SPAWN:NewWithAlias( CargoGroupTemplate, CargoName ) + self.CargoZone = CargoZone + + CARGOS[self.CargoName] = self + + return self + +end + +function CARGO_GROUP:Spawn( Client ) + self:F( { Client } ) + + local SpawnCargo = true + + if self:IsStatusNone() then + local CargoGroup = Group.getByName( self.CargoName ) + if CargoGroup and CargoGroup:isExist() then + SpawnCargo = false + end + + elseif self:IsStatusLoading() then + + local Client = self:IsLoadingToClient() + if Client and Client:GetDCSGroup() then + SpawnCargo = false + else + local CargoGroup = Group.getByName( self.CargoName ) + if CargoGroup and CargoGroup:isExist() then + SpawnCargo = false + end + end + + elseif self:IsStatusLoaded() then + + local ClientLoaded = self:IsLoadedInClient() + -- Now test if another Client is alive (not this one), and it has the CARGO, then this cargo does not need to be initialized and spawned. + if ClientLoaded and ClientLoaded ~= Client then + local ClientGroup = Client:GetDCSGroup() + if ClientLoaded:GetClientGroupDCSUnit() and ClientLoaded:GetClientGroupDCSUnit():isExist() then + SpawnCargo = false + else + self:StatusNone() + end + else + -- Same Client, but now in initialize, so set back the status to None. + self:StatusNone() + end + + elseif self:IsStatusUnLoaded() then + + SpawnCargo = false + + end + + if SpawnCargo then + if self.CargoZone:GetCargoHostUnit() then + --- ReSpawn the Cargo from the CargoHost + self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30, 1 ):GetName() + else + --- ReSpawn the Cargo in the CargoZone without a host ... + self:T( self.CargoZone ) + self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone, true, 1 ):GetName() + end + self:StatusNone() + end + + self:T( { self.CargoGroupName, CARGOS[self.CargoName].CargoGroupName } ) + + return self +end + +function CARGO_GROUP:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + if self.CargoGroupName then + local CargoGroup = Group.getByName( self.CargoGroupName ) + if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 250 ) then + Near = true + end + end + + return Near + +end + + +function CARGO_GROUP:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + local ClientUnit = Client:GetClientGroupDCSUnit() + + local CarrierPos = ClientUnit:getPoint() + local CarrierPosMove = ClientUnit:getPoint() + local CarrierPosOnBoard = ClientUnit:getPoint() + + local CargoGroup = Group.getByName( self.CargoGroupName ) + + local CargoUnit = CargoGroup:getUnit(1) + local CargoPos = CargoUnit:getPoint() + + self.CargoInAir = CargoUnit:inAir() + + self:T( self.CargoInAir ) + + -- Only move the group to the carrier when the cargo is not in the air + -- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea). + if not self.CargoInAir then + + local Points = {} + + self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) + self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) + + Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) + + self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) + + if OnBoardSide == nil then + OnBoardSide = CLIENT.ONBOARDSIDE.NONE + end + + if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then + + self:T( "TransportCargoOnBoard: Onboarding LEFT" ) + CarrierPosMove.z = CarrierPosMove.z - 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then + + self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) + CarrierPosMove.z = CarrierPosMove.z + 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then + + self:T( "TransportCargoOnBoard: Onboarding BACK" ) + CarrierPosMove.x = CarrierPosMove.x - 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then + + self:T( "TransportCargoOnBoard: Onboarding CENTRAL" ) + Points[#Points+1] = routines.ground.buildWP( CarrierPos, "Cone", 10 ) + + end + self:T( "TransportCargoOnBoard: Routing " .. self.CargoGroupName ) + + --routines.scheduleFunction( routines.goRoute, { self.CargoGroupName, Points}, timer.getTime() + 4 ) + SCHEDULER:New( self, routines.goRoute, { self.CargoGroupName, Points}, 4 ) + end + + self:StatusLoading( Client ) + + return Valid + +end + + +function CARGO_GROUP:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + local CargoGroup = Group.getByName( self.CargoGroupName ) + + if not self.CargoInAir then + if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 25 ) then + CargoGroup:destroy() + self:StatusLoaded( Client ) + OnBoarded = true + end + else + CargoGroup:destroy() + self:StatusLoaded( Client ) + OnBoarded = true + end + + return OnBoarded +end + + +function CARGO_GROUP:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + + local CargoGroup = self.CargoSpawn:SpawnFromUnit( Client:GetClientGroupUnit(), 60, 30 ) + + self.CargoGroupName = CargoGroup:GetName() + self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) + + CargoGroup:TaskRouteToZone( ZONE:New( TargetZoneName ), true ) + + self:StatusUnLoaded() + + return self +end + + +CARGO_PACKAGE = { + ClassName = "CARGO_PACKAGE" +} + + +function CARGO_PACKAGE:New( CargoType, CargoName, CargoWeight, CargoClient ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoClient } ) + + self.CargoClient = CargoClient + + CARGOS[self.CargoName] = self + + return self + +end + + +function CARGO_PACKAGE:Spawn( Client ) + self:F( { self, Client } ) + + -- this needs to be checked thoroughly + + local CargoClientGroup = self.CargoClient:GetDCSGroup() + if not CargoClientGroup then + if not self.CargoClientSpawn then + self.CargoClientSpawn = SPAWN:New( self.CargoClient:GetClientGroupName() ):Limit( 1, 1 ) + end + self.CargoClientSpawn:ReSpawn( 1 ) + end + + local SpawnCargo = true + + if self:IsStatusNone() then + + elseif self:IsStatusLoading() or self:IsStatusLoaded() then + + local CargoClientLoaded = self:IsLoadedInClient() + if CargoClientLoaded and CargoClientLoaded:GetDCSGroup() then + SpawnCargo = false + end + + elseif self:IsStatusUnLoaded() then + + SpawnCargo = false + + else + + end + + if SpawnCargo then + self:StatusLoaded( self.CargoClient ) + end + + return self +end + + +function CARGO_PACKAGE:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + if self.CargoClient and self.CargoClient:GetDCSGroup() then + self:T( self.CargoClient.ClientName ) + self:T( 'Client Exists.' ) + + if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), Client:GetPositionVec3(), 150 ) then + Near = true + end + end + + return Near + +end + + +function CARGO_PACKAGE:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + local ClientUnit = Client:GetClientGroupDCSUnit() + + local CarrierPos = ClientUnit:getPoint() + local CarrierPosMove = ClientUnit:getPoint() + local CarrierPosOnBoard = ClientUnit:getPoint() + local CarrierPosMoveAway = ClientUnit:getPoint() + + local CargoHostGroup = self.CargoClient:GetDCSGroup() + local CargoHostName = self.CargoClient:GetDCSGroup():getName() + + local CargoHostUnits = CargoHostGroup:getUnits() + local CargoPos = CargoHostUnits[1]:getPoint() + + local Points = {} + + self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) + self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) + + Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) + + self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) + + if OnBoardSide == nil then + OnBoardSide = CLIENT.ONBOARDSIDE.NONE + end + + if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then + + self:T( "TransportCargoOnBoard: Onboarding LEFT" ) + CarrierPosMove.z = CarrierPosMove.z - 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 + CarrierPosMoveAway.z = CarrierPosMoveAway.z - 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then + + self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) + CarrierPosMove.z = CarrierPosMove.z + 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 + CarrierPosMoveAway.z = CarrierPosMoveAway.z + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then + + self:T( "TransportCargoOnBoard: Onboarding BACK" ) + CarrierPosMove.x = CarrierPosMove.x - 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x - 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + end + self:T( "Routing " .. CargoHostName ) + + --routines.scheduleFunction( routines.goRoute, { CargoHostName, Points}, timer.getTime() + 4 ) + SCHEDULER:New( self, routines.goRoute, { CargoHostName, Points }, 4 ) + + return Valid + +end + + +function CARGO_PACKAGE:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + if self.CargoClient and self.CargoClient:GetDCSGroup() then + if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), self.CargoClient:GetPositionVec3(), 10 ) then + + -- Switch Cargo from self.CargoClient to Client ... Each cargo can have only one client. So assigning the new client for the cargo is enough. + self:StatusLoaded( Client ) + + -- All done, onboarded the Cargo to the new Client. + OnBoarded = true + end + end + + return OnBoarded +end + + +function CARGO_PACKAGE:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + --self:T( 'self.CargoHostName = ' .. self.CargoHostName ) + + --self.CargoSpawn:FromCarrier( Client:GetDCSGroup(), TargetZoneName, self.CargoHostName ) + self:StatusUnLoaded() + + return Cargo +end + + +CARGO_SLINGLOAD = { + ClassName = "CARGO_SLINGLOAD" +} + + +function CARGO_SLINGLOAD:New( CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID ) + local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID } ) + + self.CargoHostName = CargoHostName + + -- Cargo will be initialized around the CargoZone position. + self.CargoZone = CargoZone + + self.CargoCount = 0 + self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) + + -- The country ID needs to be correctly set. + self.CargoCountryID = CargoCountryID + + CARGOS[self.CargoName] = self + + return self + +end + + +function CARGO_SLINGLOAD:IsLandingRequired() + self:F() + return false +end + + +function CARGO_SLINGLOAD:IsSlingLoad() + self:F() + return true +end + + +function CARGO_SLINGLOAD:Spawn( Client ) + self:F( { self, Client } ) + + local Zone = trigger.misc.getZone( self.CargoZone ) + + local ZonePos = {} + ZonePos.x = Zone.point.x + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) + ZonePos.y = Zone.point.z + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) + + self:T( "Cargo Location = " .. ZonePos.x .. ", " .. ZonePos.y ) + + --[[ + -- This does not work in 1.5.2. + CargoStatic = StaticObject.getByName( self.CargoName ) + if CargoStatic then + CargoStatic:destroy() + end + --]] + + CargoStatic = StaticObject.getByName( self.CargoStaticName ) + + if CargoStatic and CargoStatic:isExist() then + CargoStatic:destroy() + end + + -- I need to make every time a new cargo due to bugs in 1.5.2. + + self.CargoCount = self.CargoCount + 1 + self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) + + local CargoTemplate = { + ["category"] = "Cargo", + ["shape_name"] = "ab-212_cargo", + ["type"] = "Cargo1", + ["x"] = ZonePos.x, + ["y"] = ZonePos.y, + ["mass"] = self.CargoWeight, + ["name"] = self.CargoStaticName, + ["canCargo"] = true, + ["heading"] = 0, + } + + coalition.addStaticObject( self.CargoCountryID, CargoTemplate ) + +-- end + + return self +end + + +function CARGO_SLINGLOAD:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + return Near +end + + +function CARGO_SLINGLOAD:IsInLandingZone( Client, LandingZone ) + self:F() + + local Near = false + + local CargoStaticUnit = StaticObject.getByName( self.CargoName ) + if CargoStaticUnit then + if routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then + Near = true + end + end + + return Near +end + + +function CARGO_SLINGLOAD:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + + return Valid +end + + +function CARGO_SLINGLOAD:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + local CargoStaticUnit = StaticObject.getByName( self.CargoName ) + if CargoStaticUnit then + if not routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then + OnBoarded = true + end + end + + return OnBoarded +end + + +function CARGO_SLINGLOAD:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) + + self:StatusUnLoaded() + + return Cargo +end +--- Message System to display Messages for Clients and Coalitions or All. +-- Messages are grouped on the display panel per Category to improve readability for the players. +-- Messages are shown on the display panel for an amount of seconds, and will then disappear. +-- Messages are identified by an ID. The messages with the same ID belonging to the same category will be overwritten if they were still being displayed on the display panel. +-- Messages are created with MESSAGE:@{New}(). +-- Messages are sent to Clients with MESSAGE:@{ToClient}(). +-- Messages are sent to Coalitions with MESSAGE:@{ToCoalition}(). +-- Messages are sent to All Players with MESSAGE:@{ToAll}(). +-- @module Message + +Include.File( "Base" ) + +--- The MESSAGE class +-- @type MESSAGE +MESSAGE = { + ClassName = "MESSAGE", + MessageCategory = 0, + MessageID = 0, +} + + +--- Creates a new MESSAGE object. Note that these MESSAGE objects are not yet displayed on the display panel. You must use the functions @{ToClient} or @{ToCoalition} or @{ToAll} to send these Messages to the respective recipients. +-- @param self +-- @param #string MessageText is the text of the Message. +-- @param #string MessageCategory is a string expressing the Category of the Message. Messages are grouped on the display panel per Category to improve readability. +-- @param #number MessageDuration is a number in seconds of how long the MESSAGE should be shown on the display panel. +-- @param #string MessageID is a string expressing the ID of the Message. +-- @return #MESSAGE +-- @usage +-- -- Create a series of new Messages. +-- -- MessageAll is meant to be sent to all players, for 25 seconds, and is classified as "Score". +-- -- MessageRED is meant to be sent to the RED players only, for 10 seconds, and is classified as "End of Mission", with ID "Win". +-- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". +-- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ) +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) +function MESSAGE:New( MessageText, MessageCategory, MessageDuration, MessageID ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MessageText, MessageCategory, MessageDuration, MessageID } ) + + -- When no messagecategory is given, we don't show it as a title... + if MessageCategory and MessageCategory ~= "" then + self.MessageCategory = MessageCategory .. ": " + else + self.MessageCategory = "" + end + + self.MessageDuration = MessageDuration + self.MessageID = MessageID + self.MessageTime = timer.getTime() + self.MessageText = MessageText + + self.MessageSent = false + self.MessageGroup = false + self.MessageCoalition = false + + return self +end + +--- Sends a MESSAGE to a Client Group. Note that the Group needs to be defined within the ME with the skillset "Client" or "Player". +-- @param #MESSAGE self +-- @param Client#CLIENT Client is the Group of the Client. +-- @return #MESSAGE +-- @usage +-- -- Send the 2 messages created with the @{New} method to the Client Group. +-- -- Note that the Message of MessageClient2 is overwriting the Message of MessageClient1. +-- ClientGroup = Group.getByName( "ClientGroup" ) +-- +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- or +-- MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- or +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) +-- MessageClient1:ToClient( ClientGroup ) +-- MessageClient2:ToClient( ClientGroup ) +function MESSAGE:ToClient( Client ) + self:F( Client ) + + if Client and Client:GetClientGroupID() then + + local ClientGroupID = Client:GetClientGroupID() + self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) + trigger.action.outTextForGroup( ClientGroupID, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) + end + + return self +end + +--- Sends a MESSAGE to the Blue coalition. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the BLUE coalition. +-- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() +-- or +-- MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() +-- or +-- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageBLUE:ToBlue() +function MESSAGE:ToBlue() + self:F() + + self:ToCoalition( coalition.side.BLUE ) + + return self +end + +--- Sends a MESSAGE to the Red Coalition. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the RED coalition. +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() +-- or +-- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() +-- 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:ToRed() +function MESSAGE:ToRed( ) + self:F() + + self:ToCoalition( coalition.side.RED ) + + return self +end + +--- Sends a MESSAGE to a Coalition. +-- @param #MESSAGE self +-- @param CoalitionSide needs to be filled out by the defined structure of the standard scripting engine @{coalition.side}. +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the RED coalition. +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) +-- or +-- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) +-- 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 ) +function MESSAGE:ToCoalition( CoalitionSide ) + self:F( CoalitionSide ) + + if CoalitionSide then + self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) + trigger.action.outTextForCoalition( CoalitionSide, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) + end + + return self +end + +--- Sends a MESSAGE to all players. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created to all players. +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() +-- or +-- MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() +-- or +-- 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:ToCoalition( coalition.side.RED ) + self:ToCoalition( coalition.side.BLUE ) + + return self +end + + + +--- The MESSAGEQUEUE class +-- @type MESSAGEQUEUE +MESSAGEQUEUE = { + ClientGroups = {}, + CoalitionSides = {} +} + +function MESSAGEQUEUE:New( RefreshInterval ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { RefreshInterval } ) + + self.RefreshInterval = RefreshInterval + + --self.DisplayFunction = routines.scheduleFunction( self._DisplayMessages, { self }, 0, RefreshInterval ) + self.DisplayFunction = SCHEDULER:New( self, self._DisplayMessages, {}, 0, RefreshInterval ) + + return self +end + +--- This function is called automatically by the MESSAGEQUEUE scheduler. +function MESSAGEQUEUE:_DisplayMessages() + + -- First we display all messages that a coalition needs to receive... Also those who are not in a client (CA module clients...). + for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do + for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do + if MessageData.MessageSent == false then + --trigger.action.outTextForCoalition( CoalitionSideID, MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageSent = true + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + end + + -- Then we send the messages for each individual client, but also to be included are those Coalition messages for the Clients who belong to a coalition. + -- Because the Client messages will overwrite the Coalition messages (for that Client). + for ClientGroupName, ClientGroupData in pairs( self.ClientGroups ) do + for MessageID, MessageData in pairs( ClientGroupData.Messages ) do + if MessageData.MessageGroup == false then + trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageGroup = true + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + + -- Now check if the Client also has messages that belong to the Coalition of the Client... + for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do + for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do + local CoalitionGroup = Group.getByName( ClientGroupName ) + if CoalitionGroup and CoalitionGroup:getCoalition() == CoalitionSideID then + if MessageData.MessageCoalition == false then + trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageCoalition = true + end + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + end + end + + return true +end + +--- The _MessageQueue object is created when the MESSAGE class module is loaded. +--_MessageQueue = MESSAGEQUEUE:New( 0.5 ) + +--- Stages within a @{TASK} within a @{MISSION}. All of the STAGE functionality is considered internally administered and not to be used by any Mission designer. +-- @module STAGE +-- @author Flightcontrol + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The STAGE class +-- @type +STAGE = { + ClassName = "STAGE", + MSG = { ID = "None", TIME = 10 }, + FREQUENCY = { NONE = 0, ONCE = 1, REPEAT = -1 }, + + Name = "NoStage", + StageType = '', + WaitTime = 1, + Frequency = 1, + MessageCount = 0, + MessageInterval = 15, + MessageShown = {}, + MessageShow = false, + MessageFlash = false +} + + +function STAGE:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F() + return self +end + +function STAGE:Execute( Mission, Client, Task ) + + local Valid = true + + return Valid +end + +function STAGE:Executing( Mission, Client, Task ) + +end + +function STAGE:Validate( Mission, Client, Task ) + local Valid = true + + return Valid +end + + +STAGEBRIEF = { + ClassName = "BRIEF", + MSG = { ID = "Brief", TIME = 1 }, + Name = "Brief", + StageBriefingTime = 0, + StageBriefingDuration = 1 +} + +function STAGEBRIEF:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Execute +-- @param #STAGEBRIEF self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +-- @return #boolean +function STAGEBRIEF:Execute( Mission, Client, Task ) + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + self:F() + Client:ShowMissionBriefing( Mission.MissionBriefing ) + self.StageBriefingTime = timer.getTime() + return Valid +end + +function STAGEBRIEF:Validate( Mission, Client, Task ) + local Valid = STAGE:Validate( Mission, Client, Task ) + self:T() + + if timer.getTime() - self.StageBriefingTime <= self.StageBriefingDuration then + return 0 + else + self.StageBriefingTime = timer.getTime() + return 1 + end + +end + + +STAGESTART = { + ClassName = "START", + MSG = { ID = "Start", TIME = 1 }, + Name = "Start", + StageStartTime = 0, + StageStartDuration = 1 +} + +function STAGESTART:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGESTART:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + if Task.TaskBriefing then + Client:Message( Task.TaskBriefing, 30, Mission.Name .. "/Stage", "Command" ) + else + Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, Mission.Name .. "/Stage", "Command" ) + end + self.StageStartTime = timer.getTime() + return Valid +end + +function STAGESTART:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + if timer.getTime() - self.StageStartTime <= self.StageStartDuration then + return 0 + else + self.StageStartTime = timer.getTime() + return 1 + end + + return 1 + +end + +STAGE_CARGO_LOAD = { + ClassName = "STAGE_CARGO_LOAD" +} + +function STAGE_CARGO_LOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGE_CARGO_LOAD:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + for LoadCargoID, LoadCargo in pairs( Task.Cargos.LoadCargos ) do + LoadCargo:Load( Client ) + end + + if Mission.MissionReportFlash and Client:IsTransport() then + Client:ShowCargo() + end + + return Valid +end + +function STAGE_CARGO_LOAD:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + return 1 +end + + +STAGE_CARGO_INIT = { + ClassName = "STAGE_CARGO_INIT" +} + +function STAGE_CARGO_INIT:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGE_CARGO_INIT:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + for InitLandingZoneID, InitLandingZone in pairs( Task.LandingZones.LandingZones ) do + self:T( InitLandingZone ) + InitLandingZone:Spawn() + end + + + self:T( Task.Cargos.InitCargos ) + for InitCargoID, InitCargoData in pairs( Task.Cargos.InitCargos ) do + self:T( { InitCargoData } ) + InitCargoData:Spawn( Client ) + end + + return Valid +end + + +function STAGE_CARGO_INIT:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + return 1 +end + + + +STAGEROUTE = { + ClassName = "STAGEROUTE", + MSG = { ID = "Route", TIME = 5 }, + Frequency = STAGE.FREQUENCY.REPEAT, + Name = "Route" +} + +function STAGEROUTE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + self.MessageSwitch = true + return self +end + + +--- Execute the routing. +-- @param #STAGEROUTE self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEROUTE:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + local RouteMessage = "Fly to: " + self:T( Task.LandingZones ) + for LandingZoneID, LandingZoneName in pairs( Task.LandingZones.LandingZoneNames ) do + RouteMessage = RouteMessage .. "\n " .. LandingZoneName .. ' at ' .. routines.getBRStringZone( { zone = LandingZoneName, ref = Client:GetClientGroupDCSUnit():getPoint(), true, true } ) .. ' km.' + end + + if Client:IsMultiSeated() then + Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot", 20 ) + else + Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Command", 20 ) + end + + + if Mission.MissionReportFlash and Client:IsTransport() then + Client:ShowCargo() + end + + return Valid +end + +function STAGEROUTE:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + -- check if the Client is in the landing zone + self:T( Task.LandingZones.LandingZoneNames ) + Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) + + if Task.CurrentLandingZoneName then + + Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone + Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] + + if Task.CurrentCargoZone then + if not Task.Signalled then + Task.Signalled = Task.CurrentCargoZone:Signal() + end + end + + self:T( 1 ) + return 1 + end + + self:T( 0 ) + return 0 +end + + + +STAGELANDING = { + ClassName = "STAGELANDING", + MSG = { ID = "Landing", TIME = 10 }, + Name = "Landing", + Signalled = false +} + +function STAGELANDING:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Execute the landing coordination. +-- @param #STAGELANDING self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGELANDING:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( "We have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Co-Pilot", 10 ) + else + Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Command", 10 ) + end + + Task.HostUnit = Task.CurrentCargoZone:GetHostUnit() + + self:T( { Task.HostUnit } ) + + if Task.HostUnit then + + Task.HostUnitName = Task.HostUnit:GetPrefix() + Task.HostUnitTypeName = Task.HostUnit:GetTypeName() + + local HostMessage = "" + Task.CargoNames = "" + + local IsFirst = true + + for CargoID, Cargo in pairs( CARGOS ) do + if Cargo.CargoType == Task.CargoType then + + if Cargo:IsLandingRequired() then + self:T( "Task for cargo " .. Cargo.CargoType .. " requires landing.") + Task.IsLandingRequired = true + end + + if Cargo:IsSlingLoad() then + self:T( "Task for cargo " .. Cargo.CargoType .. " is a slingload.") + Task.IsSlingLoad = true + end + + if IsFirst then + IsFirst = false + Task.CargoNames = Task.CargoNames .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" + else + Task.CargoNames = Task.CargoNames .. "; " .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" + end + end + end + + if Task.IsLandingRequired then + HostMessage = "Land the helicopter to " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." + else + HostMessage = "Use the Radio menu and F6 to find the cargo, then fly or land near the cargo and " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." + end + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Host, Host, 10 ) + + end +end + +function STAGELANDING:Validate( Mission, Client, Task ) + self:F() + + Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) + if Task.CurrentLandingZoneName then + + -- Client is in de landing zone. + self:T( Task.CurrentLandingZoneName ) + + Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone + Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] + + if Task.CurrentCargoZone then + if not Task.Signalled then + Task.Signalled = Task.CurrentCargoZone:Signal() + end + end + else + if Task.CurrentLandingZone then + Task.CurrentLandingZone = nil + end + if Task.CurrentCargoZone then + Task.CurrentCargoZone = nil + end + Task.Signalled = false + Task:RemoveCargoMenus( Client ) + self:T( -1 ) + return -1 + end + + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and not Client:GetClientGroupDCSUnit():inAir() then + self:T( 1 ) + Task.IsInAirTestRequired = true + return 1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and DCSUnitVelocity <= 0.05 and DCSUnitHeight <= Task.CurrentCargoZone.SignalHeight then + self:T( 1 ) + Task.IsInAirTestRequired = false + return 1 + end + + self:T( 0 ) + return 0 +end + +STAGELANDED = { + ClassName = "STAGELANDED", + MSG = { ID = "Land", TIME = 10 }, + Name = "Landed", + MenusAdded = false +} + +function STAGELANDED:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGELANDED:Execute( Mission, Client, Task ) + self:F() + + if Task.IsLandingRequired then + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.', + self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC" .. Host, Host ) + + if not self.MenusAdded then + Task.Cargo = nil + Task:RemoveCargoMenus( Client ) + Task:AddCargoMenus( Client, CARGOS, 250 ) + end + end +end + + + +function STAGELANDED:Validate( Mission, Client, Task ) + self:F() + + if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." ) + Task.Signalled = false + Task:RemoveCargoMenus( Client ) + self:T( -2 ) + return -2 + end + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then + self:T( "Client went back in the air. Go back to stage Landing." ) + self:T( -1 ) + return -1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then + self:T( "It seems the Client went back in the air and over the boundary limits. Go back to stage Landing." ) + self:T( -1 ) + return -1 + end + + -- Wait until cargo is selected from the menu. + if Task.IsLandingRequired then + if not Task.Cargo then + self:T( 0 ) + return 0 + end + end + + self:T( 1 ) + return 1 +end + +STAGEUNLOAD = { + ClassName = "STAGEUNLOAD", + MSG = { ID = "Unload", TIME = 10 }, + Name = "Unload" +} + +function STAGEUNLOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Coordinate UnLoading +-- @param #STAGEUNLOAD self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEUNLOAD:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Co-Pilot" ) + else + Client:Message( 'You are unloading the ' .. Task.CargoType .. ' ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Command" ) + end + Task:RemoveCargoMenus( Client ) +end + +function STAGEUNLOAD:Executing( Mission, Client, Task ) + self:F() + env.info( 'STAGEUNLOAD:Executing() Task.Cargo.CargoName = ' .. Task.Cargo.CargoName ) + + local TargetZoneName + + if Task.TargetZoneName then + TargetZoneName = Task.TargetZoneName + else + TargetZoneName = Task.CurrentLandingZoneName + end + + if Task.Cargo:UnLoad( Client, TargetZoneName ) then + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + if Mission.MissionReportFlash then + Client:ShowCargo() + end + end +end + +--- Validate UnLoading +-- @param #STAGEUNLOAD self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEUNLOAD:Validate( Mission, Client, Task ) + self:F() + env.info( 'STAGEUNLOAD:Validate()' ) + + if routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + else + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task:RemoveCargoMenus( Client ) + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) + end + return 1 + end + + if not Client:GetClientGroupDCSUnit():inAir() then + else + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task:RemoveCargoMenus( Client ) + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) + end + return 1 + end + + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Command" ) + end + Task:RemoveCargoMenus( Client ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) -- We set the cargo as one more goal completed in the mission. + return 1 + end + + return 1 +end + +STAGELOAD = { + ClassName = "STAGELOAD", + MSG = { ID = "Load", TIME = 10 }, + Name = "Load" +} + +function STAGELOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGELOAD:Execute( Mission, Client, Task ) + self:F() + + if not Task.IsSlingLoad then + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Host, Host ) + + -- Route the cargo to the Carrier + + Task.Cargo:OnBoard( Client, Task.CurrentCargoZone, Task.OnBoardSide ) + Task.ExecuteStage = _TransportExecuteStage.EXECUTING + else + Task.ExecuteStage = _TransportExecuteStage.EXECUTING + end +end + +function STAGELOAD:Executing( Mission, Client, Task ) + self:F() + + -- If the Cargo is ready to be loaded, load it into the Client. + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + if not Task.IsSlingLoad then + self:T( Task.Cargo.CargoName) + + if Task.Cargo:OnBoarded( Client, Task.CurrentCargoZone ) then + + -- Load the Cargo onto the Client + Task.Cargo:Load( Client ) + + -- Message to the pilot that cargo has been loaded. + Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.", + 20, Mission.Name .. "/STAGELANDING.LOADING1." .. Host, Host ) + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + + Client:ShowCargo() + end + else + Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.", + _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Host, Host , 10 ) + for CargoID, Cargo in pairs( CARGOS ) do + self:T( "Cargo.CargoName = " .. Cargo.CargoName ) + + if Cargo:IsSlingLoad() then + local CargoStatic = StaticObject.getByName( Cargo.CargoStaticName ) + if CargoStatic then + self:T( "Cargo is found in the DCS simulator.") + local CargoStaticPosition = CargoStatic:getPosition().p + self:T( "Cargo Position x = " .. CargoStaticPosition.x .. ", y = " .. CargoStaticPosition.y .. ", z = " .. CargoStaticPosition.z ) + local CargoStaticHeight = routines.GetUnitHeight( CargoStatic ) + if CargoStaticHeight > 5 then + self:T( "Cargo is airborne.") + Cargo:StatusLoaded() + Task.Cargo = Cargo + Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.', + self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Host, Host ) + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + break + end + else + self:T( "Cargo not found in the DCS simulator." ) + end + end + end + end + +end + +function STAGELOAD:Validate( Mission, Client, Task ) + self:F() + + self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName ) + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + if not Task.IsSlingLoad then + if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + Task:RemoveCargoMenus( Client ) + Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Host, Host ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) + self:T( 1 ) + return 1 + end + + else + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName ) + if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then + Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Host, Host ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 ) + self:T( 1 ) + return 1 + end + end + + end + + + self:T( 0 ) + return 0 +end + + +STAGEDONE = { + ClassName = "STAGEDONE", + MSG = { ID = "Done", TIME = 10 }, + Name = "Done" +} + +function STAGEDONE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'AI' + return self +end + +function STAGEDONE:Execute( Mission, Client, Task ) + self:F() + +end + +function STAGEDONE:Validate( Mission, Client, Task ) + self:F() + + Task:Done() + + return 0 +end + +STAGEARRIVE = { + ClassName = "STAGEARRIVE", + MSG = { ID = "Arrive", TIME = 10 }, + Name = "Arrive" +} + +function STAGEARRIVE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + + +--- Execute Arrival +-- @param #STAGEARRIVE self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEARRIVE:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Co-Pilot" ) + else + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Command" ) + end + +end + +function STAGEARRIVE:Validate( Mission, Client, Task ) + self:F() + + Task.CurrentLandingZoneID = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones ) + if ( Task.CurrentLandingZoneID ) then + else + return -1 + end + + return 1 +end + +STAGEGROUPSDESTROYED = { + ClassName = "STAGEGROUPSDESTROYED", + DestroyGroupSize = -1, + Frequency = STAGE.FREQUENCY.REPEAT, + MSG = { ID = "DestroyGroup", TIME = 10 }, + Name = "GroupsDestroyed" +} + +function STAGEGROUPSDESTROYED:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'AI' + return self +end + +--function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) +-- +-- Client:Message( 'Task: Still ' .. DestroyGroupSize .. " of " .. Task.DestroyGroupCount .. " " .. Task.DestroyGroupType .. " to be destroyed!", self.MSG.TIME, Mission.Name .. "/Stage" ) +-- +--end + +function STAGEGROUPSDESTROYED:Validate( Mission, Client, Task ) + self:F() + + if Task.MissionTask:IsGoalReached() then + return 1 + else + return 0 + end +end + +function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) + self:F() + self:T( { Task.ClassName, Task.Destroyed } ) + --env.info( 'Event Table Task = ' .. tostring(Task) ) + +end + + + + + + + + + + + + + +--[[ + _TransportStage: Defines the different stages of which of transport missions can be in. This table is internal and is used to control the sequence of messages, actions and flow. + + - _TransportStage.START + - _TransportStage.ROUTE + - _TransportStage.LAND + - _TransportStage.EXECUTE + - _TransportStage.DONE + - _TransportStage.REMOVE +--]] +_TransportStage = { + HOLD = "HOLD", + START = "START", + ROUTE = "ROUTE", + LANDING = "LANDING", + LANDED = "LANDED", + EXECUTING = "EXECUTING", + LOAD = "LOAD", + UNLOAD = "UNLOAD", + DONE = "DONE", + NEXT = "NEXT" +} + +_TransportStageMsgTime = { + HOLD = 10, + START = 60, + ROUTE = 5, + LANDING = 10, + LANDED = 30, + EXECUTING = 30, + LOAD = 30, + UNLOAD = 30, + DONE = 30, + NEXT = 0 +} + +_TransportStageTime = { + HOLD = 10, + START = 5, + ROUTE = 5, + LANDING = 1, + LANDED = 1, + EXECUTING = 5, + LOAD = 5, + UNLOAD = 5, + DONE = 1, + NEXT = 0 +} + +_TransportStageAction = { + REPEAT = -1, + NONE = 0, + ONCE = 1 +} +--- The TASK Classes define major end-to-end activities within a MISSION. The TASK Class is the Master Class to orchestrate these activities. From this class, many concrete TASK classes are inherited. +-- @module TASK + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Stage" ) + +--- The TASK class +-- @type TASK +-- @extends Base#BASE +TASK = { + + -- Defines the different signal types with a Task. + SIGNAL = { + COLOR = { + RED = { ID = 1, COLOR = trigger.smokeColor.Red, TEXT = "A red" }, + GREEN = { ID = 2, COLOR = trigger.smokeColor.Green, TEXT = "A green" }, + BLUE = { ID = 3, COLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, + WHITE = { ID = 4, COLOR = trigger.smokeColor.White, TEXT = "A white" }, + ORANGE = { ID = 5, COLOR = trigger.smokeColor.Orange, TEXT = "An orange" } + }, + TYPE = { + SMOKE = { ID = 1, TEXT = "smoke" }, + FLARE = { ID = 2, TEXT = "flare" } + } + }, + ClassName = "TASK", + Mission = {}, -- Owning mission of the Task + Name = '', + Stages = {}, + Stage = {}, + Cargos = { + InitCargos = {}, + LoadCargos = {} + }, + LandingZones = { + LandingZoneNames = {}, + LandingZones = {} + }, + ActiveStage = 0, + TaskDone = false, + TaskFailed = false, + GoalTasks = {} +} + +--- Instantiates a new TASK Base. Should never be used. Interface Class. +-- @return TASK +function TASK:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F() + + -- assign Task default values during construction + self.TaskBriefing = "Task: No Task." + self.Time = timer.getTime() + self.ExecuteStage = _TransportExecuteStage.NONE + + return self +end + +function TASK:SetStage( StageSequenceIncrement ) + self:F( { StageSequenceIncrement } ) + + local Valid = false + if StageSequenceIncrement ~= 0 then + self.ActiveStage = self.ActiveStage + StageSequenceIncrement + if 1 <= self.ActiveStage and self.ActiveStage <= #self.Stages then + self.Stage = self.Stages[self.ActiveStage] + self:T( { self.Stage.Name } ) + self.Frequency = self.Stage.Frequency + Valid = true + else + Valid = false + env.info( "TASK:SetStage() self.ActiveStage is smaller or larger than self.Stages array. self.ActiveStage = " .. self.ActiveStage ) + end + end + self.Time = timer.getTime() + return Valid +end + +function TASK:Init() + self:F() + self.ActiveStage = 0 + self:SetStage(1) + self.TaskDone = false + self.TaskFailed = false +end + + +--- Get progress of a TASK. +-- @return string GoalsText +function TASK:GetGoalProgress() + self:F2() + + local GoalsText = "" + for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do + local Goals = self:GetGoalCompletion( GoalVerb ) + if Goals and Goals ~= "" then + Goals = '(' .. Goals .. ')' + else + Goals = '( - )' + end + GoalsText = GoalsText .. GoalVerb .. ': ' .. self:GetGoalCount(GoalVerb) .. ' goals ' .. Goals .. ' of ' .. self:GetGoalTotal(GoalVerb) .. ' goals completed (' .. self:GetGoalPercentage(GoalVerb) .. '%); ' + end + + if GoalsText == "" then + GoalsText = "( - )" + end + + return GoalsText +end + +--- Show progress of a TASK. +-- @param MISSION Mission Group structure describing the Mission. +-- @param CLIENT Client Group structure describing the Client. +function TASK:ShowGoalProgress( Mission, Client ) + self:F2() + + local GoalsText = "" + for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do + if Mission:IsCompleted() then + else + local Goals = self:GetGoalCompletion( GoalVerb ) + if Goals and Goals ~= "" then + else + Goals = "-" + end + GoalsText = GoalsText .. self:GetGoalProgress() + end + end + + if Mission.MissionReportFlash or Mission.MissionReportShow then + Client:Message( GoalsText, 10, "/TASKPROGRESS" .. self.ClassName, "Mission Command: Task Status", 30 ) + end +end + +--- Sets a TASK to status Done. +function TASK:Done() + self:F2() + self.TaskDone = true +end + +--- Returns if a TASK is done. +-- @return bool +function TASK:IsDone() + self:F2( self.TaskDone ) + return self.TaskDone +end + +--- Sets a TASK to status failed. +function TASK:Failed() + self:F() + self.TaskFailed = true +end + +--- Returns if a TASk has failed. +-- @return bool +function TASK:IsFailed() + self:F2( self.TaskFailed ) + return self.TaskFailed +end + +function TASK:Reset( Mission, Client ) + self:F2() + self.ExecuteStage = _TransportExecuteStage.NONE +end + +--- Returns the Goals of a TASK +-- @return @table Goals +function TASK:GetGoals() + return self.GoalTasks +end + +--- Returns if a TASK has Goal(s). +-- @param #TASK self +-- @param #string GoalVerb is the name of the Goal of the TASK. +-- @return bool +function TASK:Goal( GoalVerb ) + self:F2( { GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + self:T2( {self.GoalTasks[GoalVerb] } ) + if self.GoalTasks[GoalVerb] and self.GoalTasks[GoalVerb].GoalTotal > 0 then + return true + else + return false + end +end + +--- Sets the total Goals to be achieved of the Goal Name +-- @param number GoalTotal is the number of times the GoalVerb needs to be achieved. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +function TASK:SetGoalTotal( GoalTotal, GoalVerb ) + self:F2( { GoalTotal, GoalVerb } ) + + if not GoalVerb then + GoalVerb = self.GoalVerb + end + self.GoalTasks[GoalVerb] = {} + self.GoalTasks[GoalVerb].Goals = {} + self.GoalTasks[GoalVerb].GoalTotal = GoalTotal + self.GoalTasks[GoalVerb].GoalCount = 0 + return self +end + +--- Gets the total of Goals to be achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +function TASK:GetGoalTotal( GoalVerb ) + self:F2( { GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return self.GoalTasks[GoalVerb].GoalTotal + else + return 0 + end +end + +--- Sets the total of Goals currently achieved within the TASK of the GoalVerb. +-- @param number GoalCount is the total number of Goals achieved within the TASK. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:SetGoalCount( GoalCount, GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb) then + self.GoalTasks[GoalVerb].GoalCount = GoalCount + end + return self +end + +--- Increments the total of Goals currently achieved within the TASK of the GoalVerb, with the given GoalCountIncrease. +-- @param number GoalCountIncrease is the number of new Goals achieved within the TASK. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:IncreaseGoalCount( GoalCountIncrease, GoalVerb ) + self:F2( { GoalCountIncrease, GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb) then + self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalCountIncrease + end + return self +end + +--- Gets the total of Goals currently achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:GetGoalCount( GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return self.GoalTasks[GoalVerb].GoalCount + else + return 0 + end +end + +--- Gets the percentage of Goals currently achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:GetGoalPercentage( GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return math.floor( self:GetGoalCount( GoalVerb ) / self:GetGoalTotal( GoalVerb ) * 100 + .5 ) + else + return 100 + end +end + +--- Returns if all the Goals of the TASK were achieved. +-- @return bool +function TASK:IsGoalReached() + self:F2() + + local GoalReached = true + + for GoalVerb, Goals in pairs( self.GoalTasks ) do + self:T2( { "GoalVerb", GoalVerb } ) + if self:Goal( GoalVerb ) then + local GoalToDo = self:GetGoalTotal( GoalVerb ) - self:GetGoalCount( GoalVerb ) + self:T2( "GoalToDo = " .. GoalToDo ) + if GoalToDo <= 0 then + else + GoalReached = false + break + end + else + break + end + end + + self:T( { GoalReached, self.GoalTasks } ) + return GoalReached +end + +--- Adds an Additional Goal for the TASK to be achieved. +-- @param string GoalVerb is the name of the Goal of the TASK. +-- @param string GoalTask is a text describing the Goal of the TASK to be achieved. +-- @param number GoalIncrease is a number by which the Goal achievement is increasing. +function TASK:AddGoalCompletion( GoalVerb, GoalTask, GoalIncrease ) + self:F2( { GoalVerb, GoalTask, GoalIncrease } ) + + if self:Goal( GoalVerb ) then + self.GoalTasks[GoalVerb].Goals[#self.GoalTasks[GoalVerb].Goals+1] = GoalTask + self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalIncrease + end + return self +end + +--- Returns if the additional Goal for the TASK was completed. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return string Goals +function TASK:GetGoalCompletion( GoalVerb ) + self:F2( { GoalVerb } ) + + if self:Goal( GoalVerb ) then + local Goals = "" + for GoalID, GoalName in pairs( self.GoalTasks[GoalVerb].Goals ) do Goals = Goals .. GoalName .. " + " end + return Goals:gsub(" + $", ""), self.GoalTasks[GoalVerb].GoalCount + end +end + +function TASK.MenuAction( Parameter ) + Parameter.ReferenceTask.ExecuteStage = _TransportExecuteStage.EXECUTING + Parameter.ReferenceTask.Cargo = Parameter.CargoTask +end + +function TASK:StageExecute() + self:F() + + local Execute = false + + if self.Frequency == STAGE.FREQUENCY.REPEAT then + Execute = true + elseif self.Frequency == STAGE.FREQUENCY.NONE then + Execute = false + elseif self.Frequency >= 0 then + Execute = true + self.Frequency = self.Frequency - 1 + end + + return Execute + +end + +--- Work function to set signal events within a TASK. +function TASK:AddSignal( SignalUnitNames, SignalType, SignalColor, SignalHeight ) + self:F() + + local Valid = true + + if Valid then + if type( SignalUnitNames ) == "table" then + self.LandingZoneSignalUnitNames = SignalUnitNames + else + self.LandingZoneSignalUnitNames = { SignalUnitNames } + end + self.LandingZoneSignalType = SignalType + self.LandingZoneSignalColor = SignalColor + self.Signalled = false + if SignalHeight ~= nil then + self.LandingZoneSignalHeight = SignalHeight + else + self.LandingZoneSignalHeight = 0 + end + + if self.TaskBriefing then + self.TaskBriefing = self.TaskBriefing .. " " .. SignalColor.TEXT .. " " .. SignalType.TEXT .. " will be fired when entering the landing zone." + end + end + + return Valid +end + +--- When the CLIENT is approaching the landing zone, a RED SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeRed( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.RED, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a GREEN SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeGreen( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a BLUE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeBlue( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a WHITE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeWhite( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, an ORANGE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeOrange( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a RED FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareRed( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.RED, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a GREEN FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareGreen( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a BLUE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareBlue( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a WHITE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareWhite( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, an ORANGE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareOrange( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) +end +--- A GOHOMETASK orchestrates the travel back to the home base, which is a specific zone defined within the ME. +-- @module GOHOMETASK + +Include.File("Task") + +--- The GOHOMETASK class +-- @type +GOHOMETASK = { + ClassName = "GOHOMETASK", +} + +--- Creates a new GOHOMETASK. +-- @param table{string,...}|string LandingZones Table of Landing Zone names where Home(s) are located. +-- @return GOHOMETASK +function GOHOMETASK:New( LandingZones ) + local self = BASE:Inherit( self, TASK:New() ) + self:F( { LandingZones } ) + local Valid = true + + Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) + + if Valid then + self.Name = 'Fly Home' + self.TaskBriefing = "Task: Fly back to your home base. Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to your home base." + if type( LandingZones ) == "table" then + self.LandingZones = LandingZones + else + self.LandingZones = { LandingZones } + end + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end +--- A DESTROYBASETASK will monitor the destruction of Groups and Units. This is a BASE class, other classes are derived from this class. +-- @module DESTROYBASETASK +-- @see DESTROYGROUPSTASK +-- @see DESTROYUNITTYPESTASK +-- @see DESTROY_RADARS_TASK + +Include.File("Task") + +--- The DESTROYBASETASK class +-- @type DESTROYBASETASK +DESTROYBASETASK = { + ClassName = "DESTROYBASETASK", + Destroyed = 0, + GoalVerb = "Destroy", + DestroyPercentage = 100, +} + +--- Creates a new DESTROYBASETASK. +-- @param #DESTROYBASETASK self +-- @param #string DestroyGroupType Text describing the group to be destroyed. f.e. "Radar Installations", "Ships", "Vehicles", "Command Centers". +-- @param #string DestroyUnitType Text describing the unit types to be destroyed. f.e. "SA-6", "Row Boats", "Tanks", "Tents". +-- @param #list<#string> DestroyGroupPrefixes Table of Prefixes of the Groups to be destroyed before task is completed. +-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. +-- @return DESTROYBASETASK +function DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupPrefixes, DestroyPercentage ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + self.Name = 'Destroy' + self.Destroyed = 0 + self.DestroyGroupPrefixes = DestroyGroupPrefixes + self.DestroyGroupType = DestroyGroupType + self.DestroyUnitType = DestroyUnitType + if DestroyPercentage then + self.DestroyPercentage = DestroyPercentage + end + self.TaskBriefing = "Task: Destroy " .. DestroyGroupType .. "." + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEGROUPSDESTROYED:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + + return self +end + +--- Handle the S_EVENT_DEAD events to validate the destruction of units for the task monitoring. +-- @param #DESTROYBASETASK self +-- @param Event#EVENTDATA Event structure of MOOSE. +function DESTROYBASETASK:EventDead( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + local DestroyUnit = Event.IniDCSUnit + local DestroyUnitName = Event.IniDCSUnitName + local DestroyGroup = Event.IniDCSGroup + local DestroyGroupName = Event.IniDCSGroupName + + --TODO: I need to fix here if 2 groups in the mission have a similar name with GroupPrefix equal, then i should differentiate for which group the goal was reached! + --I may need to test if for the goalverb that group goal was reached or something. Need to think about it a bit more ... + local UnitsDestroyed = 0 + for DestroyGroupPrefixID, DestroyGroupPrefix in pairs( self.DestroyGroupPrefixes ) do + self:T( DestroyGroupPrefix ) + if string.find( DestroyGroupName, DestroyGroupPrefix, 1, true ) then + self:T( BASE:Inherited(self).ClassName ) + UnitsDestroyed = self:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:T( UnitsDestroyed ) + end + end + + self:T( { UnitsDestroyed } ) + self:IncreaseGoalCount( UnitsDestroyed, self.GoalVerb ) + end + +end + +--- Validate task completeness of DESTROYBASETASK. +-- @param DestroyGroup Group structure describing the group to be evaluated. +-- @param DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYBASETASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F() + + return 0 +end +--- DESTROYGROUPSTASK +-- @module DESTROYGROUPSTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYGROUPSTASK class +-- @type +DESTROYGROUPSTASK = { + ClassName = "DESTROYGROUPSTASK", + GoalVerb = "Destroy Groups", +} + +--- Creates a new DESTROYGROUPSTASK. +-- @param #DESTROYGROUPSTASK self +-- @param #string DestroyGroupType String describing the group to be destroyed. +-- @param #string DestroyUnitType String describing the unit to be destroyed. +-- @param #list<#string> DestroyGroupNames Table of string containing the name of the groups to be destroyed before task is completed. +-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. +---@return DESTROYGROUPSTASK +function DESTROYGROUPSTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) + local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) ) + self:F() + + self.Name = 'Destroy Groups' + self.GoalVerb = "Destroy " .. DestroyGroupType + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + _EVENTDISPATCHER:OnCrash( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param #DESTROYGROUPSTASK self +-- @param DCSGroup#Group DestroyGroup Group structure describing the group to be evaluated. +-- @param DCSUnit#Unit DestroyUnit Unit structure describing the Unit to be evaluated. +-- @return #number The DestroyCount reflecting the amount of units destroyed within the group. +function DESTROYGROUPSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit, self.DestroyPercentage } ) + + local DestroyGroupSize = DestroyGroup:getSize() - 1 -- When a DEAD event occurs, the getSize is still one larger than the destroyed unit. + local DestroyGroupInitialSize = DestroyGroup:getInitialSize() + self:T( { DestroyGroupSize, DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) } ) + + local DestroyCount = 0 + if DestroyGroup then + if DestroyGroupSize <= DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) then + DestroyCount = 1 + end + else + DestroyCount = 1 + end + + self:T( DestroyCount ) + + return DestroyCount +end +--- Task class to destroy radar installations. +-- @module DESTROYRADARSTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYRADARS class +-- @type +DESTROYRADARSTASK = { + ClassName = "DESTROYRADARSTASK", + GoalVerb = "Destroy Radars" +} + +--- Creates a new DESTROYRADARSTASK. +-- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. +-- @return DESTROYRADARSTASK +function DESTROYRADARSTASK:New( DestroyGroupNames ) + local self = BASE:Inherit( self, DESTROYGROUPSTASK:New( 'radar installations', 'radars', DestroyGroupNames ) ) + self:F() + + self.Name = 'Destroy Radars' + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param Group DestroyGroup Group structure describing the group to be evaluated. +-- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYRADARSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit } ) + + local DestroyCount = 0 + if DestroyUnit and DestroyUnit:hasSensors( Unit.SensorType.RADAR, Unit.RadarType.AS ) then + if DestroyUnit and DestroyUnit:getLife() <= 1.0 then + self:T( 'Destroyed a radar' ) + DestroyCount = 1 + end + end + return DestroyCount +end +--- Set TASK to destroy certain unit types. +-- @module DESTROYUNITTYPESTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYUNITTYPESTASK class +-- @type +DESTROYUNITTYPESTASK = { + ClassName = "DESTROYUNITTYPESTASK", + GoalVerb = "Destroy", +} + +--- Creates a new DESTROYUNITTYPESTASK. +-- @param string DestroyGroupType String describing the group to be destroyed. f.e. "Radar Installations", "Fleet", "Batallion", "Command Centers". +-- @param string DestroyUnitType String describing the unit to be destroyed. f.e. "radars", "ships", "tanks", "centers". +-- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. +-- @param string DestroyUnitTypes Table of string containing the type names of the units to achieve mission success. +-- @return DESTROYUNITTYPESTASK +function DESTROYUNITTYPESTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes ) + local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames ) ) + self:F( { DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes } ) + + if type(DestroyUnitTypes) == 'table' then + self.DestroyUnitTypes = DestroyUnitTypes + else + self.DestroyUnitTypes = { DestroyUnitTypes } + end + + self.Name = 'Destroy Unit Types' + self.GoalVerb = "Destroy " .. DestroyGroupType + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param Group DestroyGroup Group structure describing the group to be evaluated. +-- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYUNITTYPESTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit } ) + + local DestroyCount = 0 + for UnitTypeID, UnitType in pairs( self.DestroyUnitTypes ) do + if DestroyUnit and DestroyUnit:getTypeName() == UnitType then + if DestroyUnit and DestroyUnit:getLife() <= 1.0 then + DestroyCount = DestroyCount + 1 + end + end + end + return DestroyCount +end +--- A PICKUPTASK orchestrates the loading of CARGO at a specific landing zone. +-- @module PICKUPTASK +-- @parent TASK + +Include.File("Task") +Include.File("Cargo") + +--- The PICKUPTASK class +-- @type +PICKUPTASK = { + ClassName = "PICKUPTASK", + TEXT = { "Pick-Up", "picked-up", "loaded" }, + GoalVerb = "Pick-Up" +} + +--- Creates a new PICKUPTASK. +-- @param table{string,...}|string LandingZones Table of Zone names where Cargo is to be loaded. +-- @param CARGO_TYPE CargoType Type of the Cargo. The type must be of the following Enumeration:.. +-- @param number OnBoardSide Reflects from which side the cargo Group will be on-boarded on the Carrier. +function PICKUPTASK:New( CargoType, OnBoardSide ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + -- self holds the inherited instance of the PICKUPTASK Class to the BASE class. + + local Valid = true + + if Valid then + self.Name = 'Pickup Cargo' + self.TaskBriefing = "Task: Fly to the indicated landing zones and pickup " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the pickup zone." + self.CargoType = CargoType + self.GoalVerb = CargoType .. " " .. self.GoalVerb + self.OnBoardSide = OnBoardSide + self.IsLandingRequired = true -- required to decide whether the client needs to land or not + self.IsSlingLoad = false -- Indicates whether the cargo is a sling load cargo + self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGELOAD:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +function PICKUPTASK:FromZone( LandingZone ) + self:F() + + self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName + self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone + + return self +end + +function PICKUPTASK:InitCargo( InitCargos ) + self:F( { InitCargos } ) + + if type( InitCargos ) == "table" then + self.Cargos.InitCargos = InitCargos + else + self.Cargos.InitCargos = { InitCargos } + end + + return self +end + +function PICKUPTASK:LoadCargo( LoadCargos ) + self:F( { LoadCargos } ) + + if type( LoadCargos ) == "table" then + self.Cargos.LoadCargos = LoadCargos + else + self.Cargos.LoadCargos = { LoadCargos } + end + + return self +end + +function PICKUPTASK:AddCargoMenus( Client, Cargos, TransportRadius ) + self:F() + + for CargoID, Cargo in pairs( Cargos ) do + + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) + + -- If the Cargo has no status, allow the menu option. + if Cargo:IsStatusNone() or ( Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() ) then + + local MenuAdd = false + if Cargo:IsNear( Client, self.CurrentCargoZone ) then + MenuAdd = true + end + + if MenuAdd then + if Client._Menus[Cargo.CargoType] == nil then + Client._Menus[Cargo.CargoType] = {} + end + + if not Client._Menus[Cargo.CargoType].PickupMenu then + Client._Menus[Cargo.CargoType].PickupMenu = missionCommands.addSubMenuForGroup( + Client:GetClientGroupID(), + self.TEXT[1] .. " " .. Cargo.CargoType, + nil + ) + self:T( 'Added PickupMenu: ' .. self.TEXT[1] .. " " .. Cargo.CargoType ) + end + + if Client._Menus[Cargo.CargoType].PickupSubMenus == nil then + Client._Menus[Cargo.CargoType].PickupSubMenus = {} + end + + Client._Menus[Cargo.CargoType].PickupSubMenus[ #Client._Menus[Cargo.CargoType].PickupSubMenus + 1 ] = missionCommands.addCommandForGroup( + Client:GetClientGroupID(), + Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", + Client._Menus[Cargo.CargoType].PickupMenu, + self.MenuAction, + { ReferenceTask = self, CargoTask = Cargo } + ) + self:T( 'Added PickupSubMenu' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) + end + end + end + +end + +function PICKUPTASK:RemoveCargoMenus( Client ) + self:F() + + for MenuID, MenuData in pairs( Client._Menus ) do + for SubMenuID, SubMenuData in pairs( MenuData.PickupSubMenus ) do + missionCommands.removeItemForGroup( Client:GetClientGroupID(), SubMenuData ) + self:T( "Removed PickupSubMenu " ) + SubMenuData = nil + end + if MenuData.PickupMenu then + missionCommands.removeItemForGroup( Client:GetClientGroupID(), MenuData.PickupMenu ) + self:T( "Removed PickupMenu " ) + MenuData.PickupMenu = nil + end + end + + for CargoID, Cargo in pairs( CARGOS ) do + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) + if Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() then + Cargo:StatusNone() + end + end + +end + + + +function PICKUPTASK:HasFailed( ClientDead ) + self:F() + + local TaskHasFailed = self.TaskFailed + return TaskHasFailed +end + +--- A DEPLOYTASK orchestrates the deployment of CARGO within a specific landing zone. +-- @module DEPLOYTASK + +Include.File( "Task" ) + +--- A DeployTask +-- @type DEPLOYTASK +DEPLOYTASK = { + ClassName = "DEPLOYTASK", + TEXT = { "Deploy", "deployed", "unloaded" }, + GoalVerb = "Deployment" +} + + +--- Creates a new DEPLOYTASK object, which models the sequence of STAGEs to unload a cargo. +-- @function [parent=#DEPLOYTASK] New +-- @param #string CargoType Type of the Cargo. +-- @return #DEPLOYTASK The created DeployTask +function DEPLOYTASK:New( CargoType ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + local Valid = true + + if Valid then + self.Name = 'Deploy Cargo' + self.TaskBriefing = "Fly to one of the indicated landing zones and deploy " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the deployment zone." + self.CargoType = CargoType + self.GoalVerb = CargoType .. " " .. self.GoalVerb + self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGEUNLOAD:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +function DEPLOYTASK:ToZone( LandingZone ) + self:F() + + self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName + self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone + + return self +end + + +function DEPLOYTASK:InitCargo( InitCargos ) + self:F( { InitCargos } ) + + if type( InitCargos ) == "table" then + self.Cargos.InitCargos = InitCargos + else + self.Cargos.InitCargos = { InitCargos } + end + + return self +end + + +function DEPLOYTASK:LoadCargo( LoadCargos ) + self:F( { LoadCargos } ) + + if type( LoadCargos ) == "table" then + self.Cargos.LoadCargos = LoadCargos + else + self.Cargos.LoadCargos = { LoadCargos } + end + + return self +end + + +--- When the cargo is unloaded, it will move to the target zone name. +-- @param string TargetZoneName Name of the Zone to where the Cargo should move after unloading. +function DEPLOYTASK:SetCargoTargetZoneName( TargetZoneName ) + self:F() + + local Valid = true + + Valid = routines.ValidateString( TargetZoneName, "TargetZoneName", Valid ) + + if Valid then + self.TargetZoneName = TargetZoneName + end + + return Valid + +end + +function DEPLOYTASK:AddCargoMenus( Client, Cargos, TransportRadius ) + self:F() + + local ClientGroupID = Client:GetClientGroupID() + + self:T( ClientGroupID ) + + for CargoID, Cargo in pairs( Cargos ) do + + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo.CargoWeight } ) + + if Cargo:IsStatusLoaded() and Client == Cargo:IsLoadedInClient() then + + if Client._Menus[Cargo.CargoType] == nil then + Client._Menus[Cargo.CargoType] = {} + end + + if not Client._Menus[Cargo.CargoType].DeployMenu then + Client._Menus[Cargo.CargoType].DeployMenu = missionCommands.addSubMenuForGroup( + ClientGroupID, + self.TEXT[1] .. " " .. Cargo.CargoType, + nil + ) + self:T( 'Added DeployMenu ' .. self.TEXT[1] ) + end + + if Client._Menus[Cargo.CargoType].DeploySubMenus == nil then + Client._Menus[Cargo.CargoType].DeploySubMenus = {} + end + + if Client._Menus[Cargo.CargoType].DeployMenu == nil then + self:T( 'deploymenu is nil' ) + end + + Client._Menus[Cargo.CargoType].DeploySubMenus[ #Client._Menus[Cargo.CargoType].DeploySubMenus + 1 ] = missionCommands.addCommandForGroup( + ClientGroupID, + Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", + Client._Menus[Cargo.CargoType].DeployMenu, + self.MenuAction, + { ReferenceTask = self, CargoTask = Cargo } + ) + self:T( 'Added DeploySubMenu ' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) + end + end + +end + +function DEPLOYTASK:RemoveCargoMenus( Client ) + self:F() + + local ClientGroupID = Client:GetClientGroupID() + self:T( ClientGroupID ) + + for MenuID, MenuData in pairs( Client._Menus ) do + if MenuData.DeploySubMenus ~= nil then + for SubMenuID, SubMenuData in pairs( MenuData.DeploySubMenus ) do + missionCommands.removeItemForGroup( ClientGroupID, SubMenuData ) + self:T( "Removed DeploySubMenu " ) + SubMenuData = nil + end + end + if MenuData.DeployMenu then + missionCommands.removeItemForGroup( ClientGroupID, MenuData.DeployMenu ) + self:T( "Removed DeployMenu " ) + MenuData.DeployMenu = nil + end + end + +end +--- A NOTASK is a dummy activity... But it will show a Mission Briefing... +-- @module NOTASK + +Include.File("Task") + +--- The NOTASK class +-- @type +NOTASK = { + ClassName = "NOTASK", +} + +--- Creates a new NOTASK. +function NOTASK:New() + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + local Valid = true + + if Valid then + self.Name = 'Nothing' + self.TaskBriefing = "Task: Execute your mission." + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end +--- A ROUTETASK orchestrates the travel to a specific zone defined within the ME. +-- @module ROUTETASK + +--- The ROUTETASK class +-- @type +ROUTETASK = { + ClassName = "ROUTETASK", + GoalVerb = "Route", +} + +--- Creates a new ROUTETASK. +-- @param table{sring,...}|string LandingZones Table of Zone Names where the target is located. +-- @param string TaskBriefing (optional) Defines a text describing the briefing of the task. +-- @return ROUTETASK +function ROUTETASK:New( LandingZones, TaskBriefing ) + local self = BASE:Inherit( self, TASK:New() ) + self:F( { LandingZones, TaskBriefing } ) + + local Valid = true + + Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) + + if Valid then + self.Name = 'Route To Zone' + if TaskBriefing then + self.TaskBriefing = TaskBriefing .. " Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." + else + self.TaskBriefing = "Task: Fly to specified zone(s). Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." + end + if type( LandingZones ) == "table" then + self.LandingZones = LandingZones + else + self.LandingZones = { LandingZones } + end + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +--- A MISSION is the main owner of a Mission orchestration within MOOSE . The Mission framework orchestrates @{CLIENT}s, @{TASK}s, @{STAGE}s etc. +-- A @{CLIENT} needs to be registered within the @{MISSION} through the function @{AddClient}. A @{TASK} needs to be registered within the @{MISSION} through the function @{AddTask}. +-- @module Mission + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The MISSION class +-- @type MISSION +-- @extends Base#BASE +-- @field #MISSION.Clients _Clients +-- @field #string MissionBriefing +MISSION = { + ClassName = "MISSION", + Name = "", + MissionStatus = "PENDING", + _Clients = {}, + _Tasks = {}, + _ActiveTasks = {}, + GoalFunction = nil, + MissionReportTrigger = 0, + MissionProgressTrigger = 0, + MissionReportShow = false, + MissionReportFlash = false, + MissionTimeInterval = 0, + MissionCoalition = "", + SUCCESS = 1, + FAILED = 2, + REPEAT = 3, + _GoalTasks = {} +} + +--- @type MISSION.Clients +-- @list + +function MISSION:Meta() + + local self = BASE:Inherit( self, BASE:New() ) + self:F() + + return self +end + +--- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. +-- @param string MissionName is the name of the mission. This name will be used to reference the status of each mission by the players. +-- @param string MissionPriority is a string indicating the "priority" of the Mission. f.e. "Primary", "Secondary" or "First", "Second". It is free format and up to the Mission designer to choose. There are no rules behind this field. +-- @param string MissionBriefing is a string indicating the mission briefing to be shown when a player joins a @{CLIENT}. +-- @param string MissionCoalition is a string indicating the coalition or party to which this mission belongs to. It is free format and can be chosen freely by the mission designer. Note that this field is not to be confused with the coalition concept of the ME. Examples of a Mission Coalition could be "NATO", "CCCP", "Intruders", "Terrorists"... +-- @return MISSION +-- @usage +-- -- Declare a few missions. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Patriots', 'Primary', 'Our intelligence reports that 3 Patriot SAM defense batteries are located near Ruisi, Kvarhiti and Gori.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Package Delivery', 'Operational', 'In order to be in full control of the situation, we need you to deliver a very important package at a secret location. Fly undetected through the NATO defenses and deliver the secret package. The secret agent is located at waypoint 4.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue General', 'Tactical', 'Our intelligence has received a remote signal behind Gori. We believe it is a very important Russian General that was captured by Georgia. Go out there and rescue him! Ensure you stay out of the battle zone, keep south. Waypoint 4 is the location of our Russian General.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'SA-6 SAMs', 'Primary', 'Our intelligence reports that 3 SA-6 SAM defense batteries are located near Didmukha, Khetagurov and Berula. Eliminate the Russian SAMs.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Sling Load', 'Operational', 'Fly to the cargo pickup zone at Dzegvi or Kaspi, and sling the cargo to Soganlug airbase.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue secret agent', 'Tactical', 'In order to be in full control of the situation, we need you to rescue a secret agent from the woods behind enemy lines. Avoid the Russian defenses and rescue the agent. Keep south until Khasuri, and keep your eyes open for any SAM presence. The agent is located at waypoint 4 on your kneeboard.', 'NATO' ) +function MISSION:New( MissionName, MissionPriority, MissionBriefing, MissionCoalition ) + + self = MISSION:Meta() + self:T({ MissionName, MissionPriority, MissionBriefing, MissionCoalition }) + + local Valid = true + + Valid = routines.ValidateString( MissionName, "MissionName", Valid ) + Valid = routines.ValidateString( MissionPriority, "MissionPriority", Valid ) + Valid = routines.ValidateString( MissionBriefing, "MissionBriefing", Valid ) + Valid = routines.ValidateString( MissionCoalition, "MissionCoalition", Valid ) + + if Valid then + self.Name = MissionName + self.MissionPriority = MissionPriority + self.MissionBriefing = MissionBriefing + self.MissionCoalition = MissionCoalition + end + + return self +end + +--- Returns if a Mission has completed. +-- @return bool +function MISSION:IsCompleted() + self:F() + return self.MissionStatus == "ACCOMPLISHED" +end + +--- Set a Mission to completed. +function MISSION:Completed() + self:F() + self.MissionStatus = "ACCOMPLISHED" + self:StatusToClients() +end + +--- Returns if a Mission is ongoing. +-- treturn bool +function MISSION:IsOngoing() + self:F() + return self.MissionStatus == "ONGOING" +end + +--- Set a Mission to ongoing. +function MISSION:Ongoing() + self:F() + self.MissionStatus = "ONGOING" + --self:StatusToClients() +end + +--- Returns if a Mission is pending. +-- treturn bool +function MISSION:IsPending() + self:F() + return self.MissionStatus == "PENDING" +end + +--- Set a Mission to pending. +function MISSION:Pending() + self:F() + self.MissionStatus = "PENDING" + self:StatusToClients() +end + +--- Returns if a Mission has failed. +-- treturn bool +function MISSION:IsFailed() + self:F() + return self.MissionStatus == "FAILED" +end + +--- Set a Mission to failed. +function MISSION:Failed() + self:F() + self.MissionStatus = "FAILED" + self:StatusToClients() +end + +--- Send the status of the MISSION to all Clients. +function MISSION:StatusToClients() + self:F() + if self.MissionReportFlash then + for ClientID, Client in pairs( self._Clients ) do + Client:Message( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. '! ( ' .. self.MissionPriority .. ' mission ) ', 10, self.Name .. '/Status', "Mission Command: Mission Status") + end + end +end + +--- Handles the reporting. After certain time intervals, a MISSION report MESSAGE will be shown to All Players. +function MISSION:ReportTrigger() + self:F() + + if self.MissionReportShow == true then + self.MissionReportShow = false + return true + else + if self.MissionReportFlash == true then + if timer.getTime() >= self.MissionReportTrigger then + self.MissionReportTrigger = timer.getTime() + self.MissionTimeInterval + return true + else + return false + end + else + return false + end + end +end + +--- Report the status of all MISSIONs to all active Clients. +function MISSION:ReportToAll() + self:F() + + local AlivePlayers = '' + for ClientID, Client in pairs( self._Clients ) do + if Client:GetDCSGroup() then + if Client:GetClientGroupDCSUnit() then + if Client:GetClientGroupDCSUnit():getLife() > 0.0 then + if AlivePlayers == '' then + AlivePlayers = ' Players: ' .. Client:GetClientGroupDCSUnit():getPlayerName() + else + AlivePlayers = AlivePlayers .. ' / ' .. Client:GetClientGroupDCSUnit():getPlayerName() + end + end + end + end + end + local Tasks = self:GetTasks() + local TaskText = "" + for TaskID, TaskData in pairs( Tasks ) do + TaskText = TaskText .. " - Task " .. TaskID .. ": " .. TaskData.Name .. ": " .. TaskData:GetGoalProgress() .. "\n" + end + MESSAGE:New( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. ' ( ' .. self.MissionPriority .. ' mission )' .. AlivePlayers .. "\n" .. TaskText:gsub("\n$",""), "Mission Command: Mission Report", 10, self.Name .. '/Status'):ToAll() +end + + +--- Add a goal function to a MISSION. Goal functions are called when a @{TASK} within a mission has been completed. +-- @param function GoalFunction is the function defined by the mission designer to evaluate whether a certain goal has been reached after a @{TASK} finishes within the @{MISSION}. A GoalFunction must accept 2 parameters: Mission, Client, which contains the current MISSION object and the current CLIENT object respectively. +-- @usage +-- PatriotActivation = { +-- { "US SAM Patriot Zerti", false }, +-- { "US SAM Patriot Zegduleti", false }, +-- { "US SAM Patriot Gvleti", false } +-- } +-- +-- function DeployPatriotTroopsGoal( Mission, Client ) +-- +-- +-- -- Check if the cargo is all deployed for mission success. +-- for CargoID, CargoData in pairs( Mission._Cargos ) do +-- if Group.getByName( CargoData.CargoGroupName ) then +-- CargoGroup = Group.getByName( CargoData.CargoGroupName ) +-- if CargoGroup then +-- -- Check if the cargo is ready to activate +-- CurrentLandingZoneID = routines.IsUnitInZones( CargoGroup:getUnits()[1], Mission:GetTask( 2 ).LandingZones ) -- The second task is the Deploytask to measure mission success upon +-- if CurrentLandingZoneID then +-- if PatriotActivation[CurrentLandingZoneID][2] == false then +-- -- Now check if this is a new Mission Task to be completed... +-- trigger.action.setGroupAIOn( Group.getByName( PatriotActivation[CurrentLandingZoneID][1] ) ) +-- PatriotActivation[CurrentLandingZoneID][2] = true +-- MessageToBlue( "Mission Command: Message to all airborne units! The " .. PatriotActivation[CurrentLandingZoneID][1] .. " is armed. Our air defenses are now stronger.", 60, "BLUE/PatriotDefense" ) +-- MessageToRed( "Mission Command: Our satellite systems are detecting additional NATO air defenses. To all airborne units: Take care!!!", 60, "RED/PatriotDefense" ) +-- Mission:GetTask( 2 ):AddGoalCompletion( "Patriots activated", PatriotActivation[CurrentLandingZoneID][1], 1 ) -- Register Patriot activation as part of mission goal. +-- end +-- end +-- end +-- end +-- end +-- end +-- +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) +-- Mission:AddGoalFunction( DeployPatriotTroopsGoal ) +function MISSION:AddGoalFunction( GoalFunction ) + self:F() + self.GoalFunction = GoalFunction +end + +--- Register a new @{CLIENT} to participate within the mission. +-- @param CLIENT Client is the @{CLIENT} object. The object must have been instantiated with @{CLIENT:New}. +-- @return CLIENT +-- @usage +-- Add a number of Client objects to the Mission. +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 1', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 3', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 2', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 4', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +function MISSION:AddClient( Client ) + self:F( { Client } ) + + local Valid = true + + if Valid then + self._Clients[Client.ClientName] = Client + end + + return Client +end + +--- Find a @{CLIENT} object within the @{MISSION} by its ClientName. +-- @param CLIENT ClientName is a string defining the Client Group as defined within the ME. +-- @return CLIENT +-- @usage +-- -- Seach for Client "Bomber" within the Mission. +-- local BomberClient = Mission:FindClient( "Bomber" ) +function MISSION:FindClient( ClientName ) + self:F( { self._Clients[ClientName] } ) + return self._Clients[ClientName] +end + + +--- Register a @{TASK} to be completed within the @{MISSION}. Note that there can be multiple @{TASK}s registered to be completed. Each TASK can be set a certain Goal. The MISSION will not be completed until all Goals are reached. +-- @param TASK Task is the @{TASK} object. The object must have been instantiated with @{TASK:New} or any of its inherited @{TASK}s. +-- @param number TaskNumber is the sequence number of the TASK within the MISSION. This number does have to be chronological. +-- @return TASK +-- @usage +-- -- Define a few tasks for the Mission. +-- PickupZones = { "NATO Gold Pickup Zone", "NATO Titan Pickup Zone" } +-- PickupSignalUnits = { "NATO Gold Coordination Center", "NATO Titan Coordination Center" } +-- +-- -- Assign the Pickup Task +-- local PickupTask = PICKUPTASK:New( PickupZones, CARGO_TYPE.ENGINEERS, CLIENT.ONBOARDSIDE.LEFT ) +-- PickupTask:AddSmokeBlue( PickupSignalUnits ) +-- PickupTask:SetGoalTotal( 3 ) +-- Mission:AddTask( PickupTask, 1 ) +-- +-- -- Assign the Deploy Task +-- local PatriotActivationZones = { "US Patriot Battery 1 Activation", "US Patriot Battery 2 Activation", "US Patriot Battery 3 Activation" } +-- local PatriotActivationZonesSmokeUnits = { "US SAM Patriot - Battery 1 Control", "US SAM Patriot - Battery 2 Control", "US SAM Patriot - Battery 3 Control" } +-- local DeployTask = DEPLOYTASK:New( PatriotActivationZones, CARGO_TYPE.ENGINEERS ) +-- --DeployTask:SetCargoTargetZoneName( 'US Troops Attack ' .. math.random(2) ) +-- DeployTask:AddSmokeBlue( PatriotActivationZonesSmokeUnits ) +-- DeployTask:SetGoalTotal( 3 ) +-- DeployTask:SetGoalTotal( 3, "Patriots activated" ) +-- Mission:AddTask( DeployTask, 2 ) + +function MISSION:AddTask( Task, TaskNumber ) + self:F() + + self._Tasks[TaskNumber] = Task + self._Tasks[TaskNumber]:EnableEvents() + self._Tasks[TaskNumber].ID = TaskNumber + + return Task + end + +--- Get the TASK idenified by the TaskNumber from the Mission. This function is useful in GoalFunctions. +-- @param number TaskNumber is the number of the @{TASK} within the @{MISSION}. +-- @return TASK +-- @usage +-- -- Get Task 2 from the Mission. +-- Task2 = Mission:GetTask( 2 ) + +function MISSION:GetTask( TaskNumber ) + self:F() + + local Valid = true + + local Task = nil + + if type(TaskNumber) ~= "number" then + Valid = false + end + + if Valid then + Task = self._Tasks[TaskNumber] + end + + return Task +end + +--- Get all the TASKs from the Mission. This function is useful in GoalFunctions. +-- @return {TASK,...} Structure of TASKS with the @{TASK} number as the key. +-- @usage +-- -- Get Tasks from the Mission. +-- Tasks = Mission:GetTasks() +-- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" ) +function MISSION:GetTasks() + self:F() + + return self._Tasks +end + + +--[[ + _TransportExecuteStage: Defines the different stages of Transport unload/load execution. This table is internal and is used to control the validity of Transport load/unload timing. + + - _TransportExecuteStage.EXECUTING + - _TransportExecuteStage.SUCCESS + - _TransportExecuteStage.FAILED + +--]] +_TransportExecuteStage = { + NONE = 0, + EXECUTING = 1, + SUCCESS = 2, + FAILED = 3 +} + + +--- The MISSIONSCHEDULER is an OBJECT and is the main scheduler of ALL active MISSIONs registered within this scheduler. It's workings are considered internal and is automatically created when the Mission.lua file is included. +-- @type MISSIONSCHEDULER +-- @field #MISSIONSCHEDULER.MISSIONS Missions +MISSIONSCHEDULER = { + Missions = {}, + MissionCount = 0, + TimeIntervalCount = 0, + TimeIntervalShow = 150, + TimeSeconds = 14400, + TimeShow = 5 +} + +--- @type MISSIONSCHEDULER.MISSIONS +-- @list <#MISSION> Mission + +--- This is the main MISSIONSCHEDULER Scheduler function. It is considered internal and is automatically created when the Mission.lua file is included. +function MISSIONSCHEDULER.Scheduler() + + + -- loop through the missions in the TransportTasks + for MissionName, MissionData in pairs( MISSIONSCHEDULER.Missions ) do + + local Mission = MissionData -- #MISSION + + if not Mission:IsCompleted() then + + -- This flag will monitor if for this mission, there are clients alive. If this flag is still false at the end of the loop, the mission status will be set to Pending (if not Failed or Completed). + local ClientsAlive = false + + for ClientID, ClientData in pairs( Mission._Clients ) do + + local Client = ClientData -- Client#CLIENT + + if Client:IsAlive() then + + -- There is at least one Client that is alive... So the Mission status is set to Ongoing. + ClientsAlive = true + + -- If this Client was not registered as Alive before: + -- 1. We register the Client as Alive. + -- 2. We initialize the Client Tasks and make a link to the original Mission Task. + -- 3. We initialize the Cargos. + -- 4. We flag the Mission as Ongoing. + if not Client.ClientAlive then + Client.ClientAlive = true + Client.ClientBriefingShown = false + for TaskNumber, Task in pairs( Mission._Tasks ) do + -- Note that this a deepCopy. Each client must have their own Tasks with own Stages!!! + Client._Tasks[TaskNumber] = routines.utils.deepCopy( Mission._Tasks[TaskNumber] ) + -- Each MissionTask must point to the original Mission. + Client._Tasks[TaskNumber].MissionTask = Mission._Tasks[TaskNumber] + Client._Tasks[TaskNumber].Cargos = Mission._Tasks[TaskNumber].Cargos + Client._Tasks[TaskNumber].LandingZones = Mission._Tasks[TaskNumber].LandingZones + end + + Mission:Ongoing() + end + + + -- For each Client, check for each Task the state and evolve the mission. + -- This flag will indicate if the Task of the Client is Complete. + local TaskComplete = false + + for TaskNumber, Task in pairs( Client._Tasks ) do + + if not Task.Stage then + Task:SetStage( 1 ) + end + + + local TransportTime = timer.getTime() + + if not Task:IsDone() then + + if Task:Goal() then + Task:ShowGoalProgress( Mission, Client ) + end + + --env.info( 'Scheduler: Mission = ' .. Mission.Name .. ' / Client = ' .. Client.ClientName .. ' / Task = ' .. Task.Name .. ' / Stage = ' .. Task.ActiveStage .. ' - ' .. Task.Stage.Name .. ' - ' .. Task.Stage.StageType ) + + -- Action + if Task:StageExecute() then + Task.Stage:Execute( Mission, Client, Task ) + end + + -- Wait until execution is finished + if Task.ExecuteStage == _TransportExecuteStage.EXECUTING then + Task.Stage:Executing( Mission, Client, Task ) + end + + -- Validate completion or reverse to earlier stage + if Task.Time + Task.Stage.WaitTime <= TransportTime then + Task:SetStage( Task.Stage:Validate( Mission, Client, Task ) ) + end + + if Task:IsDone() then + --env.info( 'Scheduler: Mission '.. Mission.Name .. ' Task ' .. Task.Name .. ' Stage ' .. Task.Stage.Name .. ' done. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) + TaskComplete = true -- when a task is not yet completed, a mission cannot be completed + + else + -- break only if this task is not yet done, so that future task are not yet activated. + TaskComplete = false -- when a task is not yet completed, a mission cannot be completed + --env.info( 'Scheduler: Mission "'.. Mission.Name .. '" Task "' .. Task.Name .. '" Stage "' .. Task.Stage.Name .. '" break. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) + break + end + + if TaskComplete then + + if Mission.GoalFunction ~= nil then + Mission.GoalFunction( Mission, Client ) + end + if MISSIONSCHEDULER.Scoring then + MISSIONSCHEDULER.Scoring:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) + end + +-- if not Mission:IsCompleted() then +-- end + end + end + end + + local MissionComplete = true + for TaskNumber, Task in pairs( Mission._Tasks ) do + if Task:Goal() then +-- Task:ShowGoalProgress( Mission, Client ) + if Task:IsGoalReached() then + else + MissionComplete = false + end + else + MissionComplete = false -- If there is no goal, the mission should never be ended. The goal status will be set somewhere else. + end + end + + if MissionComplete then + Mission:Completed() + if MISSIONSCHEDULER.Scoring then + MISSIONSCHEDULER.Scoring:_AddMissionScore( Mission.Name, 100 ) + end + else + if TaskComplete then + -- Reset for new tasking of active client + Client.ClientAlive = false -- Reset the client tasks. + end + end + + + else + if Client.ClientAlive then + env.info( 'Scheduler: Client "' .. Client.ClientName .. '" is inactive.' ) + Client.ClientAlive = false + + -- This is tricky. If we sanitize Client._Tasks before sanitizing Client._Tasks[TaskNumber].MissionTask, then the original MissionTask will be sanitized, and will be lost within the garbage collector. + -- So first sanitize Client._Tasks[TaskNumber].MissionTask, after that, sanitize only the whole _Tasks structure... + --Client._Tasks[TaskNumber].MissionTask = nil + --Client._Tasks = nil + end + end + end + + -- If all Clients of this Mission are not activated, then the Mission status needs to be put back into Pending status. + -- But only if the Mission was Ongoing. In case the Mission is Completed or Failed, the Mission status may not be changed. In these cases, this will be the last run of this Mission in the Scheduler. + if ClientsAlive == false then + if Mission:IsOngoing() then + -- Mission status back to pending... + Mission:Pending() + end + end + end + + Mission:StatusToClients() + + if Mission:ReportTrigger() then + Mission:ReportToAll() + end + end + + return true +end + +--- Start the MISSIONSCHEDULER. +function MISSIONSCHEDULER.Start() + if MISSIONSCHEDULER ~= nil then + --MISSIONSCHEDULER.SchedulerId = routines.scheduleFunction( MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) + MISSIONSCHEDULER.SchedulerId = SCHEDULER:New( nil, MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) + end +end + +--- Stop the MISSIONSCHEDULER. +function MISSIONSCHEDULER.Stop() + if MISSIONSCHEDULER.SchedulerId then + routines.removeFunction(MISSIONSCHEDULER.SchedulerId) + MISSIONSCHEDULER.SchedulerId = nil + end +end + +--- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. +-- @param Mission is the MISSION object instantiated by @{MISSION:New}. +-- @return MISSION +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +function MISSIONSCHEDULER.AddMission( Mission ) + MISSIONSCHEDULER.Missions[Mission.Name] = Mission + MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount + 1 + -- Add an overall AI Client for the AI tasks... This AI Client will facilitate the Events in the background for each Task. + --MissionAdd:AddClient( CLIENT:Register( 'AI' ) ) + + return Mission +end + +--- Remove a MISSION from the MISSIONSCHEDULER. +-- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +-- +-- -- Now remove the Mission. +-- MISSIONSCHEDULER:RemoveMission( 'Russia Transport Troops SA-6' ) +function MISSIONSCHEDULER.RemoveMission( MissionName ) + MISSIONSCHEDULER.Missions[MissionName] = nil + MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount - 1 +end + +--- Find a MISSION within the MISSIONSCHEDULER. +-- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. +-- @return MISSION +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +-- +-- -- Now find the Mission. +-- MissionFind = MISSIONSCHEDULER:FindMission( 'Russia Transport Troops SA-6' ) +function MISSIONSCHEDULER.FindMission( MissionName ) + return MISSIONSCHEDULER.Missions[MissionName] +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsShow( ) + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = true + Mission.MissionReportFlash = false + end +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsFlash( TimeInterval ) + local Count = 0 + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = false + Mission.MissionReportFlash = true + Mission.MissionReportTrigger = timer.getTime() + Count * TimeInterval + Mission.MissionTimeInterval = MISSIONSCHEDULER.MissionCount * TimeInterval + env.info( "TimeInterval = " .. Mission.MissionTimeInterval ) + Count = Count + 1 + end +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsHide( Prm ) + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = false + Mission.MissionReportFlash = false + end +end + +--- Enables a MENU option in the communications menu under F10 to control the status of the active missions. +-- This function should be called only once when starting the MISSIONSCHEDULER. +function MISSIONSCHEDULER.ReportMenu() + local ReportMenu = SUBMENU:New( 'Status' ) + local ReportMenuShow = COMMANDMENU:New( 'Show Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsShow, 0 ) + local ReportMenuFlash = COMMANDMENU:New('Flash Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsFlash, 120 ) + local ReportMenuHide = COMMANDMENU:New( 'Hide Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsHide, 0 ) +end + +--- Show the remaining mission time. +function MISSIONSCHEDULER:TimeShow() + self.TimeIntervalCount = self.TimeIntervalCount + 1 + if self.TimeIntervalCount >= self.TimeTriggerShow then + local TimeMsg = string.format("%00d", ( self.TimeSeconds / 60 ) - ( timer.getTime() / 60 )) .. ' minutes left until mission reload.' + MESSAGE:New( TimeMsg, "Mission time", self.TimeShow, '/TimeMsg' ):ToAll() + self.TimeIntervalCount = 0 + end +end + +function MISSIONSCHEDULER:Time( TimeSeconds, TimeIntervalShow, TimeShow ) + + self.TimeIntervalCount = 0 + self.TimeSeconds = TimeSeconds + self.TimeIntervalShow = TimeIntervalShow + self.TimeShow = TimeShow +end + +--- Adds a mission scoring to the game. +function MISSIONSCHEDULER:Scoring( Scoring ) + + self.Scoring = Scoring +end + +--- The CLEANUP class keeps an area clean of crashing or colliding airplanes. It also prevents airplanes from firing within this area. +-- @module CleanUp +-- @author Flightcontrol + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The CLEANUP class. +-- @type CLEANUP +-- @extends Base#BASE +CLEANUP = { + ClassName = "CLEANUP", + ZoneNames = {}, + TimeInterval = 300, + CleanUpList = {}, +} + +--- Creates the main object which is handling the cleaning of the debris within the given Zone Names. +-- @param #CLEANUP self +-- @param #table ZoneNames Is a table of zone names where the debris should be cleaned. Also a single string can be passed with one zone name. +-- @param #number TimeInterval The interval in seconds when the clean activity takes place. The default is 300 seconds, thus every 5 minutes. +-- @return #CLEANUP +-- @usage +-- -- Clean these Zones. +-- CleanUpAirports = CLEANUP:New( { 'CLEAN Tbilisi', 'CLEAN Kutaisi' }, 150 ) +-- or +-- CleanUpTbilisi = CLEANUP:New( 'CLEAN Tbilisi', 150 ) +-- CleanUpKutaisi = CLEANUP:New( 'CLEAN Kutaisi', 600 ) +function CLEANUP:New( ZoneNames, TimeInterval ) local self = BASE:Inherit( self, BASE:New() ) + self:F( { ZoneNames, TimeInterval } ) + + if type( ZoneNames ) == 'table' then + self.ZoneNames = ZoneNames + else + self.ZoneNames = { ZoneNames } + end + if TimeInterval then + self.TimeInterval = TimeInterval + end + + _EVENTDISPATCHER:OnBirth( self._OnEventBirth, self ) + + --self.CleanUpScheduler = routines.scheduleFunction( self._CleanUpScheduler, { self }, timer.getTime() + 1, TimeInterval ) + self.CleanUpScheduler = SCHEDULER:New( self, self._CleanUpScheduler, {}, 1, TimeInterval ) + + return self +end + + +--- Destroys a group from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSGroup#Group GroupObject The object to be destroyed. +-- @param #string CleanUpGroupName The groupname... +function CLEANUP:_DestroyGroup( GroupObject, CleanUpGroupName ) + self:F( { GroupObject, CleanUpGroupName } ) + + if GroupObject then -- and GroupObject:isExist() then + --MESSAGE:New( "Destroy Group " .. CleanUpGroupName, CleanUpGroupName, 1, CleanUpGroupName ):ToAll() + trigger.action.deactivateGroup(GroupObject) + self:T( { "GroupObject Destroyed", GroupObject } ) + end +end + +--- Destroys a @{DCSUnit#Unit} from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSUnit#Unit CleanUpUnit The object to be destroyed. +-- @param #string CleanUpUnitName The Unit name ... +function CLEANUP:_DestroyUnit( CleanUpUnit, CleanUpUnitName ) + self:F( { CleanUpUnit, CleanUpUnitName } ) + + if CleanUpUnit then + --MESSAGE:New( "Destroy " .. CleanUpUnitName, CleanUpUnitName, 1, CleanUpUnitName ):ToAll() + local CleanUpGroup = Unit.getGroup(CleanUpUnit) + -- TODO Client bug in 1.5.3 + if CleanUpGroup and CleanUpGroup:isExist() then + local CleanUpGroupUnits = CleanUpGroup:getUnits() + if #CleanUpGroupUnits == 1 then + local CleanUpGroupName = CleanUpGroup:getName() + --self:CreateEventCrash( timer.getTime(), CleanUpUnit ) + CleanUpGroup:destroy() + self:T( { "Destroyed Group:", CleanUpGroupName } ) + else + CleanUpUnit:destroy() + self:T( { "Destroyed Unit:", CleanUpUnitName } ) + end + self.CleanUpList[CleanUpUnitName] = nil -- Cleaning from the list + CleanUpUnit = nil + end + end +end + +-- TODO check DCSTypes#Weapon +--- Destroys a missile from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSTypes#Weapon MissileObject +function CLEANUP:_DestroyMissile( MissileObject ) + self:F( { MissileObject } ) + + if MissileObject and MissileObject:isExist() then + MissileObject:destroy() + self:T( "MissileObject Destroyed") + end +end + +function CLEANUP:_OnEventBirth( Event ) + self:F( { Event } ) + + self.CleanUpList[Event.IniDCSUnitName] = {} + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName + + _EVENTDISPATCHER:OnEngineShutDownForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnEngineStartUpForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnHitForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnPilotDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnShotForUnit( Event.IniDCSUnitName, self._EventShot, self ) + + --self:AddEvent( world.event.S_EVENT_ENGINE_SHUTDOWN, self._EventAddForCleanUp ) + --self:AddEvent( world.event.S_EVENT_ENGINE_STARTUP, self._EventAddForCleanUp ) +-- self:AddEvent( world.event.S_EVENT_HIT, self._EventAddForCleanUp ) -- , self._EventHitCleanUp ) +-- self:AddEvent( world.event.S_EVENT_CRASH, self._EventCrash ) -- , self._EventHitCleanUp ) +-- --self:AddEvent( world.event.S_EVENT_DEAD, self._EventCrash ) +-- self:AddEvent( world.event.S_EVENT_SHOT, self._EventShot ) +-- +-- self:EnableEvents() + + +end + +--- Detects if a crash event occurs. +-- Crashed units go into a CleanUpList for removal. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventCrash( Event ) + self:F( { Event } ) + + --TODO: This stuff is not working due to a DCS bug. Burning units cannot be destroyed. + --MESSAGE:New( "Crash ", "Crash", 10, "Crash" ):ToAll() + -- self:T("before getGroup") + -- local _grp = Unit.getGroup(event.initiator)-- Identify the group that fired + -- self:T("after getGroup") + -- _grp:destroy() + -- self:T("after deactivateGroup") + -- event.initiator:destroy() + + self.CleanUpList[Event.IniDCSUnitName] = {} + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName + +end + +--- Detects if a unit shoots a missile. +-- If this occurs within one of the zones, then the weapon used must be destroyed. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventShot( Event ) + self:F( { Event } ) + + -- Test if the missile was fired within one of the CLEANUP.ZoneNames. + local CurrentLandingZoneID = 0 + CurrentLandingZoneID = routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) + if ( CurrentLandingZoneID ) then + -- Okay, the missile was fired within the CLEANUP.ZoneNames, destroy the fired weapon. + --_SEADmissile:destroy() + --routines.scheduleFunction( CLEANUP._DestroyMissile, { self, Event.Weapon }, timer.getTime() + 0.1) + SCHEDULER:New( self, CLEANUP._DestroyMissile, { Event.Weapon }, 0.1 ) + end +end + + +--- Detects if the Unit has an S_EVENT_HIT within the given ZoneNames. If this is the case, destroy the unit. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventHitCleanUp( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then + self:T( { "Life: ", Event.IniDCSUnitName, ' = ', Event.IniDCSUnit:getLife(), "/", Event.IniDCSUnit:getLife0() } ) + if Event.IniDCSUnit:getLife() < Event.IniDCSUnit:getLife0() then + self:T( "CleanUp: Destroy: " .. Event.IniDCSUnitName ) + --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.IniDCSUnit }, timer.getTime() + 0.1) + SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.IniDCSUnit }, 0.1 ) + end + end + end + + if Event.TgtDCSUnit then + if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then + self:T( { "Life: ", Event.TgtDCSUnitName, ' = ', Event.TgtDCSUnit:getLife(), "/", Event.TgtDCSUnit:getLife0() } ) + if Event.TgtDCSUnit:getLife() < Event.TgtDCSUnit:getLife0() then + self:T( "CleanUp: Destroy: " .. Event.TgtDCSUnitName ) + --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.TgtDCSUnit }, timer.getTime() + 0.1 ) + SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.TgtDCSUnit }, 0.1 ) + end + end + end +end + +--- Add the @{DCSUnit#Unit} to the CleanUpList for CleanUp. +function CLEANUP:_AddForCleanUp( CleanUpUnit, CleanUpUnitName ) + self:F( { CleanUpUnit, CleanUpUnitName } ) + + self.CleanUpList[CleanUpUnitName] = {} + self.CleanUpList[CleanUpUnitName].CleanUpUnit = CleanUpUnit + self.CleanUpList[CleanUpUnitName].CleanUpUnitName = CleanUpUnitName + self.CleanUpList[CleanUpUnitName].CleanUpGroup = Unit.getGroup(CleanUpUnit) + self.CleanUpList[CleanUpUnitName].CleanUpGroupName = Unit.getGroup(CleanUpUnit):getName() + self.CleanUpList[CleanUpUnitName].CleanUpTime = timer.getTime() + self.CleanUpList[CleanUpUnitName].CleanUpMoved = false + + self:T( { "CleanUp: Add to CleanUpList: ", Unit.getGroup(CleanUpUnit):getName(), CleanUpUnitName } ) + +end + +--- Detects if the Unit has an S_EVENT_ENGINE_SHUTDOWN or an S_EVENT_HIT within the given ZoneNames. If this is the case, add the Group to the CLEANUP List. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventAddForCleanUp( Event ) + + if Event.IniDCSUnit then + if self.CleanUpList[Event.IniDCSUnitName] == nil then + if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then + self:_AddForCleanUp( Event.IniDCSUnit, Event.IniDCSUnitName ) + end + end + end + + if Event.TgtDCSUnit then + if self.CleanUpList[Event.TgtDCSUnitName] == nil then + if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then + self:_AddForCleanUp( Event.TgtDCSUnit, Event.TgtDCSUnitName ) + end + end + end + +end + +local CleanUpSurfaceTypeText = { + "LAND", + "SHALLOW_WATER", + "WATER", + "ROAD", + "RUNWAY" + } + +--- At the defined time interval, CleanUp the Groups within the CleanUpList. +-- @param #CLEANUP self +function CLEANUP:_CleanUpScheduler() + self:F( { "CleanUp Scheduler" } ) + + local CleanUpCount = 0 + for CleanUpUnitName, UnitData in pairs( self.CleanUpList ) do + CleanUpCount = CleanUpCount + 1 + + self:T( { CleanUpUnitName, UnitData } ) + local CleanUpUnit = Unit.getByName(UnitData.CleanUpUnitName) + local CleanUpGroupName = UnitData.CleanUpGroupName + local CleanUpUnitName = UnitData.CleanUpUnitName + if CleanUpUnit then + self:T( { "CleanUp Scheduler", "Checking:", CleanUpUnitName } ) + if _DATABASE:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then + local CleanUpUnitVec3 = CleanUpUnit:getPoint() + --self:T( CleanUpUnitVec3 ) + local CleanUpUnitVec2 = {} + CleanUpUnitVec2.x = CleanUpUnitVec3.x + CleanUpUnitVec2.y = CleanUpUnitVec3.z + --self:T( CleanUpUnitVec2 ) + local CleanUpSurfaceType = land.getSurfaceType(CleanUpUnitVec2) + --self:T( CleanUpSurfaceType ) + --MESSAGE:New( "Surface " .. CleanUpUnitName .. " = " .. CleanUpSurfaceTypeText[CleanUpSurfaceType], CleanUpUnitName, 10, CleanUpUnitName ):ToAll() + + if CleanUpUnit and CleanUpUnit:getLife() <= CleanUpUnit:getLife0() * 0.95 then + if CleanUpSurfaceType == land.SurfaceType.RUNWAY then + if CleanUpUnit:inAir() then + local CleanUpLandHeight = land.getHeight(CleanUpUnitVec2) + local CleanUpUnitHeight = CleanUpUnitVec3.y - CleanUpLandHeight + self:T( { "CleanUp Scheduler", "Height = " .. CleanUpUnitHeight } ) + if CleanUpUnitHeight < 30 then + self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because below safe height and damaged." } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + else + self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because on runway and damaged." } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + end + end + -- Clean Units which are waiting for a very long time in the CleanUpZone. + if CleanUpUnit then + local CleanUpUnitVelocity = CleanUpUnit:getVelocity() + local CleanUpUnitVelocityTotal = math.abs(CleanUpUnitVelocity.x) + math.abs(CleanUpUnitVelocity.y) + math.abs(CleanUpUnitVelocity.z) + if CleanUpUnitVelocityTotal < 1 then + if UnitData.CleanUpMoved then + if UnitData.CleanUpTime + 180 <= timer.getTime() then + self:T( { "CleanUp Scheduler", "Destroy due to not moving anymore " .. CleanUpUnitName } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + end + else + UnitData.CleanUpTime = timer.getTime() + UnitData.CleanUpMoved = true + --MESSAGE:New( "Moved " .. CleanUpUnitName, CleanUpUnitName, 10, CleanUpUnitName ):ToAll() + end + end + + else + -- Do nothing ... + self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE + end + else + self:T( "CleanUp: Group " .. CleanUpUnitName .. " cannot be found in DCS RTE, removing ..." ) + self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE + end + end + self:T(CleanUpCount) + + return true +end + +--- Dynamic spawning of groups (and units). +-- +-- @{#SPAWN} class +-- =============== +-- The @{#SPAWN} class allows to spawn dynamically new groups, based on pre-defined initialization settings, modifying the behaviour when groups are spawned. +-- For each group to be spawned, within the mission editor, a group has to be created with the "late activation flag" set. We call this group the *"Spawn Template"* of the SPAWN object. +-- A reference to this Spawn Template needs to be provided when constructing the SPAWN object, by indicating the name of the group within the mission editor in the constructor methods. +-- +-- Within the SPAWN object, there is an internal index that keeps track of which group from the internal group list was spawned. +-- When new groups get spawned by using the SPAWN functions (see below), it will be validated whether the Limits (@{#SPAWN.Limit}) of the SPAWN object are not reached. +-- When all is valid, a new group will be created by the spawning methods, and the internal index will be increased with 1. +-- +-- Regarding the name of new spawned groups, a _SpawnPrefix_ will be assigned for each new group created. +-- If you want to have the Spawn Template name to be used as the _SpawnPrefix_ name, use the @{#SPAWN.New} constructor. +-- However, when the @{#SPAWN.NewWithAlias} constructor was used, the Alias name will define the _SpawnPrefix_ name. +-- Groups will follow the following naming structure when spawned at run-time: +-- +-- 1. Spawned groups will have the name _SpawnPrefix_#ggg, where ggg is a counter from 0 to 999. +-- 2. Spawned units will have the name _SpawnPrefix_#ggg-uu, where uu is a counter from 0 to 99 for each new spawned unit belonging to the group. +-- +-- Some additional notes that need to be remembered: +-- +-- * Templates are actually groups defined within the mission editor, with the flag "Late Activation" set. As such, these groups are never used within the mission, but are used by the @{#SPAWN} module. +-- * It is important to defined BEFORE you spawn new groups, a proper initialization of the SPAWN instance is done with the options you want to use. +-- * When designing a mission, NEVER name groups using a "#" within the name of the group Spawn Template(s), or the SPAWN module logic won't work anymore. +-- +-- SPAWN construction methods: +-- =========================== +-- Create a new SPAWN object with the @{#SPAWN.New} or the @{#SPAWN.NewWithAlias} methods: +-- +-- * @{#SPAWN.New}: Creates a new SPAWN object taking the name of the group that functions as the Template. +-- +-- It is important to understand how the SPAWN class works internally. The SPAWN object created will contain internally a list of groups that will be spawned and that are already spawned. +-- The initialization functions will modify this list of groups so that when a group gets spawned, ALL information is already prepared when spawning. This is done for performance reasons. +-- So in principle, the group list will contain all parameters and configurations after initialization, and when groups get actually spawned, this spawning can be done quickly and efficient. +-- +-- SPAWN initialization methods: +-- ============================= +-- A spawn object will behave differently based on the usage of initialization methods: +-- +-- * @{#SPAWN.Limit}: Limits the amount of groups that can be alive at the same time and that can be dynamically spawned. +-- * @{#SPAWN.RandomizeRoute}: Randomize the routes of spawned groups. +-- * @{#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.InitRepeat}: Re-spawn groups when they land at the home base. Similar functions are @{#SPAWN.InitRepeatOnLanding} and @{#SPAWN.InitRepeatOnEngineShutDown}. +-- +-- SPAWN spawning methods: +-- ======================= +-- Groups can be spawned at different times and methods: +-- +-- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index. +-- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index. +-- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively. +-- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}. +-- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}. +-- +-- Note that @{#SPAWN.Spawn} and @{#SPAWN.ReSpawn} return a @{GROUP#GROUP.New} object, that contains a reference to the DCSGroup object. +-- You can use the @{GROUP} object to do further actions with the DCSGroup. +-- +-- SPAWN object cleaning: +-- ========================= +-- Sometimes, it will occur during a mission run-time, that ground or especially air objects get damaged, and will while being damged stop their activities, while remaining alive. +-- In such cases, the SPAWN object will just sit there and wait until that group gets destroyed, but most of the time it won't, +-- and it may occur that no new groups are or can be spawned as limits are reached. +-- To prevent this, a @{#SPAWN.CleanUp} initialization method has been defined that will silently monitor the status of each spawned group. +-- Once a group has a velocity = 0, and has been waiting for a defined interval, that group will be cleaned or removed from run-time. +-- There is a catch however :-) If a damaged group has returned to an airbase within the coalition, that group will not be considered as "lost"... +-- In such a case, when the inactive group is cleaned, a new group will Re-spawned automatically. +-- This models AI that has succesfully returned to their airbase, to restart their combat activities. +-- Check the @{#SPAWN.CleanUp} for further info. +-- +-- ==== +-- @module Spawn +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Group" ) +Include.File( "Zone" ) +Include.File( "Event" ) +Include.File( "Scheduler" ) + +--- SPAWN Class +-- @type SPAWN +-- @extends Base#BASE +-- @field ClassName +-- @field #string SpawnTemplatePrefix +-- @field #string SpawnAliasPrefix +SPAWN = { + ClassName = "SPAWN", + SpawnTemplatePrefix = nil, + SpawnAliasPrefix = nil, +} + + + +--- Creates the main object to spawn a GROUP defined in the DCS ME. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. Each new group will have the name starting with SpawnTemplatePrefix. +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ) +-- @usage local Plane = SPAWN:New( "Plane" ) -- Creates a new local variable that can initiate new planes with the name "Plane#ddd" using the template "Plane" as defined within the ME. +function SPAWN:New( SpawnTemplatePrefix ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { SpawnTemplatePrefix } ) + + local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) + if TemplateGroup then + self.SpawnTemplatePrefix = SpawnTemplatePrefix + self.SpawnIndex = 0 + self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. + self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! + self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. + self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. + self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. + self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. + self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. + + self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. + else + error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) + end + + return self +end + +--- Creates a new SPAWN instance to create new groups based on the defined template and using a new alias for each new group. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. +-- @param #string SpawnAliasPrefix is the name that will be given to the Group at runtime. +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- Spawn_BE_KA50 = SPAWN:NewWithAlias( 'BE KA-50@RAMP-Ground Defense', 'Helicopter Attacking a City' ) +-- @usage local PlaneWithAlias = SPAWN:NewWithAlias( "Plane", "Bomber" ) -- Creates a new local variable that can instantiate new planes with the name "Bomber#ddd" using the template "Plane" as defined within the ME. +function SPAWN:NewWithAlias( SpawnTemplatePrefix, SpawnAliasPrefix ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { SpawnTemplatePrefix, SpawnAliasPrefix } ) + + local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) + if TemplateGroup then + self.SpawnTemplatePrefix = SpawnTemplatePrefix + self.SpawnAliasPrefix = SpawnAliasPrefix + self.SpawnIndex = 0 + self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. + self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! + self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. + self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. + self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. + self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. + self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. + + self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. + else + error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) + end + + return self +end + + +--- Limits the Maximum amount of Units that can be alive at the same time, and the maximum amount of groups that can be spawned. +-- Note that this method is exceptionally important to balance the performance of the mission. Depending on the machine etc, a mission can only process a maximum amount of units. +-- If the time interval must be short, but there should not be more Units or Groups alive than a maximum amount of units, then this function should be used... +-- When a @{#SPAWN.New} is executed and the limit of the amount of units alive is reached, then no new spawn will happen of the group, until some of these units of the spawn object will be destroyed. +-- @param #SPAWN self +-- @param #number SpawnMaxUnitsAlive The maximum amount of units that can be alive at runtime. +-- @param #number SpawnMaxGroups The maximum amount of groups that can be spawned. When the limit is reached, then no more actual spawns will happen of the group. +-- This parameter is useful to define a maximum amount of airplanes, ground troops, helicopters, ships etc within a supply area. +-- This parameter accepts the value 0, which defines that there are no maximum group limits, but there are limits on the maximum of units that can be alive at the same time. +-- @return #SPAWN self +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- This helicopter group consists of one Unit. So, this group will SPAWN maximum 2 groups simultaneously within the DCSRTE. +-- -- There will be maximum 24 groups spawned during the whole mission lifetime. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Limit( 2, 24 ) +function SPAWN:Limit( SpawnMaxUnitsAlive, SpawnMaxGroups ) + self:F( { self.SpawnTemplatePrefix, SpawnMaxUnitsAlive, SpawnMaxGroups } ) + + self.SpawnMaxUnitsAlive = SpawnMaxUnitsAlive -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = SpawnMaxGroups -- The maximum amount of groups that can be spawned. + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:_InitializeSpawnGroups( SpawnGroupID ) + end + + return self +end + + +--- Randomizes the defined route of the SpawnTemplatePrefix group in the ME. This is very useful to define extra variation of the behaviour of groups. +-- @param #SPAWN self +-- @param #number SpawnStartPoint is the waypoint where the randomization begins. +-- Note that the StartPoint = 0 equaling the point where the group is spawned. +-- @param #number SpawnEndPoint is the waypoint where the randomization ends counting backwards. +-- This parameter is useful to avoid randomization to end at a waypoint earlier than the last waypoint on the route. +-- @param #number SpawnRadius is the radius in meters in which the randomization of the new waypoints, with the original waypoint of the original template located in the middle ... +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- The KA-50 has waypoints Start point ( =0 or SP ), 1, 2, 3, 4, End point (= 5 or DP). +-- -- Waypoints 2 and 3 will only be randomized. The others will remain on their original position with each new spawn of the helicopter. +-- -- The randomization of waypoint 2 and 3 will take place within a radius of 2000 meters. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):RandomizeRoute( 2, 2, 2000 ) +function SPAWN:RandomizeRoute( SpawnStartPoint, SpawnEndPoint, SpawnRadius ) + self:F( { self.SpawnTemplatePrefix, SpawnStartPoint, SpawnEndPoint, SpawnRadius } ) + + self.SpawnRandomizeRoute = true + self.SpawnRandomizeRouteStartPoint = SpawnStartPoint + self.SpawnRandomizeRouteEndPoint = SpawnEndPoint + self.SpawnRandomizeRouteRadius = SpawnRadius + + for GroupID = 1, self.SpawnMaxGroups do + self:_RandomizeRoute( GroupID ) + end + + return self +end + + +--- This function is rather complicated to understand. But I'll try to explain. +-- This function becomes useful when you need to spawn groups with random templates of groups defined within the mission editor, +-- but they will all follow the same Template route and have the same prefix name. +-- In other words, this method randomizes between a defined set of groups the template to be used for each new spawn of a group. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefixTable A table with the names of the groups defined within the mission editor, from which one will be choosen when a new group will be spawned. +-- @return #SPAWN +-- @usage +-- -- NATO Tank Platoons invading Gori. +-- -- Choose between 13 different 'US Tank Platoon' configurations for each new SPAWN the Group to be spawned for the +-- -- 'US Tank Platoon Left', 'US Tank Platoon Middle' and 'US Tank Platoon Right' SpawnTemplatePrefixes. +-- -- Each new SPAWN will randomize the route, with a defined time interval of 200 seconds with 40% time variation (randomization) and +-- -- with a limit set of maximum 12 Units alive simulteneously and 150 Groups to be spawned during the whole mission. +-- Spawn_US_Platoon = { 'US Tank Platoon 1', 'US Tank Platoon 2', 'US Tank Platoon 3', 'US Tank Platoon 4', 'US Tank Platoon 5', +-- 'US Tank Platoon 6', 'US Tank Platoon 7', 'US Tank Platoon 8', 'US Tank Platoon 9', 'US Tank Platoon 10', +-- 'US Tank Platoon 11', 'US Tank Platoon 12', 'US Tank Platoon 13' } +-- Spawn_US_Platoon_Left = SPAWN:New( 'US Tank Platoon Left' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +-- Spawn_US_Platoon_Middle = SPAWN:New( 'US Tank Platoon Middle' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +-- Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +function SPAWN:RandomizeTemplate( SpawnTemplatePrefixTable ) + self:F( { self.SpawnTemplatePrefix, SpawnTemplatePrefixTable } ) + + self.SpawnTemplatePrefixTable = SpawnTemplatePrefixTable + self.SpawnRandomizeTemplate = true + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:_RandomizeTemplate( SpawnGroupID ) + end + + return self +end + + + + + +--- 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 ... +-- @param #SPAWN self +-- @return #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() +function SPAWN:InitRepeat() + self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) + + self.Repeat = true + self.RepeatOnEngineShutDown = false + self.RepeatOnLanding = true + + return self +end + +--- Respawn group after landing. +-- @param #SPAWN self +-- @return #SPAWN self +function SPAWN:InitRepeatOnLanding() + self:F( { self.SpawnTemplatePrefix } ) + + self:InitRepeat() + self.RepeatOnEngineShutDown = false + self.RepeatOnLanding = true + + return self +end + + +--- Respawn after landing when its engines have shut down. +-- @param #SPAWN self +-- @return #SPAWN self +function SPAWN:InitRepeatOnEngineShutDown() + self:F( { self.SpawnTemplatePrefix } ) + + self:InitRepeat() + self.RepeatOnEngineShutDown = true + self.RepeatOnLanding = false + + return self +end + + +--- CleanUp groups when they are still alive, but inactive. +-- When groups are still alive and have become inactive due to damage and are unable to contribute anything, then this group will be removed at defined intervals in seconds. +-- @param #SPAWN self +-- @param #string SpawnCleanUpInterval The interval to check for inactive groups within seconds. +-- @return #SPAWN self +-- @usage Spawn_Helicopter:CleanUp( 20 ) -- CleanUp the spawning of the helicopters every 20 seconds when they become inactive. +function SPAWN:CleanUp( SpawnCleanUpInterval ) + self:F( { self.SpawnTemplatePrefix, SpawnCleanUpInterval } ) + + self.SpawnCleanUpInterval = SpawnCleanUpInterval + self.SpawnCleanUpTimeStamps = {} + --self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval ) + self.CleanUpScheduler = SCHEDULER:New( self, self._SpawnCleanUpScheduler, {}, 1, SpawnCleanUpInterval, 0.2 ) + return self +end + + + +--- Makes the groups visible before start (like a batallion). +-- The method will take the position of the group as the first position in the array. +-- @param #SPAWN self +-- @param #number SpawnAngle The angle in degrees how the groups and each unit of the group will be positioned. +-- @param #number SpawnWidth The amount of Groups that will be positioned on the X axis. +-- @param #number SpawnDeltaX The space between each Group on the X-axis. +-- @param #number SpawnDeltaY The space between each Group on the Y-axis. +-- @return #SPAWN self +-- @usage +-- -- Define an array of Groups. +-- Spawn_BE_Ground = SPAWN:New( 'BE Ground' ):Limit( 2, 24 ):Visible( 90, "Diamond", 10, 100, 50 ) +function SPAWN:Array( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) + self:F( { self.SpawnTemplatePrefix, SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY } ) + + self.SpawnVisible = true -- When the first Spawn executes, all the Groups need to be made visible before start. + + local SpawnX = 0 + local SpawnY = 0 + local SpawnXIndex = 0 + local SpawnYIndex = 0 + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:T( { SpawnX, SpawnY, SpawnXIndex, SpawnYIndex } ) + + self.SpawnGroups[SpawnGroupID].Visible = true + self.SpawnGroups[SpawnGroupID].Spawned = false + + SpawnXIndex = SpawnXIndex + 1 + if SpawnWidth and SpawnWidth ~= 0 then + if SpawnXIndex >= SpawnWidth then + SpawnXIndex = 0 + SpawnYIndex = SpawnYIndex + 1 + end + end + + local SpawnRootX = self.SpawnGroups[SpawnGroupID].SpawnTemplate.x + local SpawnRootY = self.SpawnGroups[SpawnGroupID].SpawnTemplate.y + + self:_TranslateRotate( SpawnGroupID, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) + + self.SpawnGroups[SpawnGroupID].SpawnTemplate.lateActivation = true + self.SpawnGroups[SpawnGroupID].SpawnTemplate.visible = true + + self.SpawnGroups[SpawnGroupID].Visible = true + + _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnBirth, self ) + _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) + + if self.Repeat then + _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnTakeOff, self ) + _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnLand, self ) + end + if self.RepeatOnEngineShutDown then + _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnEngineShutDown, self ) + end + + self.SpawnGroups[SpawnGroupID].Group = _DATABASE:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) + + SpawnX = SpawnXIndex * SpawnDeltaX + SpawnY = SpawnYIndex * SpawnDeltaY + end + + return self +end + + + +--- Will spawn a group based on the internal index. +-- Note: Uses @{DATABASE} module defined in MOOSE. +-- @param #SPAWN self +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:Spawn() + self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) + + return self:SpawnWithIndex( self.SpawnIndex + 1 ) +end + +--- Will re-spawn a group based on a given index. +-- Note: Uses @{DATABASE} module defined in MOOSE. +-- @param #SPAWN self +-- @param #string SpawnIndex The index of the group to be spawned. +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:ReSpawn( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + if not SpawnIndex then + SpawnIndex = 1 + end + +-- TODO: This logic makes DCS crash and i don't know why (yet). + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup then + local SpawnDCSGroup = SpawnGroup:GetDCSGroup() + if SpawnDCSGroup then + SpawnGroup:Destroy() + end + end + + return self:SpawnWithIndex( SpawnIndex ) +end + +--- Will spawn a group with a specified index number. +-- Uses @{DATABASE} global object defined in MOOSE. +-- @param #SPAWN self +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:SpawnWithIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups } ) + + if self:_GetSpawnIndex( SpawnIndex ) then + + if self.SpawnGroups[self.SpawnIndex].Visible then + self.SpawnGroups[self.SpawnIndex].Group:Activate() + else + self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnBirth, self ) + _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) + + if self.Repeat then + _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnTakeOff, self ) + _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnLand, self ) + end + if self.RepeatOnEngineShutDown then + _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) + end + + self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + + self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + + -- If there is a SpawnFunction hook defined, call it. + if self.SpawnFunctionHook then + self.SpawnFunctionHook( self.SpawnGroups[self.SpawnIndex].Group, unpack( self.SpawnFunctionArguments ) ) + end + -- TODO: Need to fix this by putting an "R" in the name of the group when the group repeats. + --if self.Repeat then + -- _DATABASE:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) + --end + end + + self.SpawnGroups[self.SpawnIndex].Spawned = true + return self.SpawnGroups[self.SpawnIndex].Group + else + --self:E( { self.SpawnTemplatePrefix, "No more Groups to Spawn:", SpawnIndex, self.SpawnMaxGroups } ) + end + + return nil +end + +--- Spawns new groups at varying time intervals. +-- This is useful if you want to have continuity within your missions of certain (AI) groups to be present (alive) within your missions. +-- @param #SPAWN self +-- @param #number SpawnTime The time interval defined in seconds between each new spawn of new groups. +-- @param #number SpawnTimeVariation The variation to be applied on the defined time interval between each new spawn. +-- The variation is a number between 0 and 1, representing the %-tage of variation to be applied on the time interval. +-- @return #SPAWN self +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- The time interval is set to SPAWN new helicopters between each 600 seconds, with a time variation of 50%. +-- -- The time variation in this case will be between 450 seconds and 750 seconds. +-- -- This is calculated as follows: +-- -- Low limit: 600 * ( 1 - 0.5 / 2 ) = 450 +-- -- High limit: 600 * ( 1 + 0.5 / 2 ) = 750 +-- -- Between these two values, a random amount of seconds will be choosen for each new spawn of the helicopters. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) +function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation ) + self:F( { SpawnTime, SpawnTimeVariation } ) + + if SpawnTime ~= nil and SpawnTimeVariation ~= nil then + self.SpawnScheduler = SCHEDULER:New( self, self._Scheduler, {}, 1, SpawnTime, SpawnTimeVariation ) + end + + return self +end + +--- Will re-start the spawning scheduler. +-- Note: This function is only required to be called when the schedule was stopped. +function SPAWN:SpawnScheduleStart() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnScheduler:Start() +end + +--- Will stop the scheduled spawning scheduler. +function SPAWN:SpawnScheduleStop() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnScheduler:Stop() +end + + +--- Allows to place a CallFunction hook when a new group spawns. +-- The provided function will be called when a new group is spawned, including its given parameters. +-- The first parameter of the SpawnFunction is the @{Group#GROUP} that was spawned. +-- @param #SPAWN self +-- @param #function SpawnFunctionHook The function to be called when a group spawns. +-- @param SpawnFunctionArguments A random amount of arguments to be provided to the function when the group spawns. +-- @return #SPAWN +function SPAWN:SpawnFunction( SpawnFunctionHook, ... ) + self:F( SpawnFunction ) + + self.SpawnFunctionHook = SpawnFunctionHook + self.SpawnFunctionArguments = {} + if arg then + self.SpawnFunctionArguments = arg + end + + return self +end + + + + +--- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone. +-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. +-- You can use the returned group to further define the route to be followed. +-- @param #SPAWN self +-- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group. +-- @param #number OuterRadius The outer radius in meters where the new group will be spawned. +-- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned. +-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. +-- @return Group#GROUP that was spawned. +-- @return #nil Nothing was spawned. +function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } ) + + if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then + + if SpawnIndex then + else + SpawnIndex = self.SpawnIndex + 1 + end + + if self:_GetSpawnIndex( SpawnIndex ) then + + local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate + + if SpawnTemplate then + + local UnitPoint = HostUnit:GetPointVec2() + + self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } ) + + --for PointID, Point in pairs( SpawnTemplate.route.points ) do + --Point.x = UnitPoint.x + --Point.y = UnitPoint.y + --Point.alt = nil + --Point.alt_type = nil + --end + + SpawnTemplate.route.points[1].x = UnitPoint.x + SpawnTemplate.route.points[1].y = UnitPoint.y + + if not InnerRadius then + InnerRadius = 10 + end + + if not OuterRadius then + OuterRadius = 50 + end + + -- Apply SpawnFormation + for UnitID = 1, #SpawnTemplate.units do + if InnerRadius == 0 then + SpawnTemplate.units[UnitID].x = UnitPoint.x + SpawnTemplate.units[UnitID].y = UnitPoint.y + else + local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) + SpawnTemplate.units[UnitID].x = CirclePos.x + SpawnTemplate.units[UnitID].y = CirclePos.y + end + self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) + end + + local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) + local Point = {} + Point.type = "Turning Point" + Point.x = SpawnPos.x + Point.y = SpawnPos.y + Point.action = "Cone" + Point.speed = 5 + + table.insert( SpawnTemplate.route.points, 2, Point ) + + return self:SpawnWithIndex( self.SpawnIndex ) + end + end + end + + return nil +end + +--- Will spawn a Group within a given @{Zone#ZONE}. +-- Once the group is spawned within the zone, it will continue on its route. +-- The first waypoint (where the group is spawned) is replaced with the zone coordinates. +-- @param #SPAWN self +-- @param Zone#ZONE Zone The zone where the group is to be spawned. +-- @param #number ZoneRandomize (Optional) Set to true if you want to randomize the starting point in the zone. +-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. +-- @return Group#GROUP that was spawned. +-- @return #nil when nothing was spawned. +function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } ) + + if Zone then + + if SpawnIndex then + else + SpawnIndex = self.SpawnIndex + 1 + end + + if self:_GetSpawnIndex( SpawnIndex ) then + + local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate + + if SpawnTemplate then + + local ZonePoint + + if ZoneRandomize == true then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + SpawnTemplate.route.points[1].x = ZonePoint.x + SpawnTemplate.route.points[1].y = ZonePoint.y + + -- Apply SpawnFormation + for UnitID = 1, #SpawnTemplate.units do + local ZonePointUnit = Zone:GetRandomPointVec2() + SpawnTemplate.units[UnitID].x = ZonePointUnit.x + SpawnTemplate.units[UnitID].y = ZonePointUnit.y + self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) + end + + return self:SpawnWithIndex( self.SpawnIndex ) + end + end + end + + return nil +end + + + + +--- Will spawn a plane group in uncontrolled mode... +-- This will be similar to the uncontrolled flag setting in the ME. +-- @return #SPAWN self +function SPAWN:UnControlled() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnUnControlled = true + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self.SpawnGroups[SpawnGroupID].UnControlled = true + end + + return self +end + + + +--- Will return the SpawnGroupName either with with a specific count number or without any count. +-- @param #SPAWN self +-- @param #number SpawnIndex Is the number of the Group that is to be spawned. +-- @return #string SpawnGroupName +function SPAWN:SpawnGroupName( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + local SpawnPrefix = self.SpawnTemplatePrefix + if self.SpawnAliasPrefix then + SpawnPrefix = self.SpawnAliasPrefix + end + + if SpawnIndex then + local SpawnName = string.format( '%s#%03d', SpawnPrefix, SpawnIndex ) + self:T( SpawnName ) + return SpawnName + else + self:T( SpawnPrefix ) + return SpawnPrefix + end + +end + +--- Find the first alive group. +-- @param #SPAWN self +-- @param #number SpawnCursor A number holding the index from where to find the first group from. +-- @return Group#GROUP, #number The group found, the new index where the group was found. +-- @return #nil, #nil When no group is found, #nil is returned. +function SPAWN:GetFirstAliveGroup( SpawnCursor ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) + + for SpawnIndex = 1, self.SpawnCount do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + SpawnCursor = SpawnIndex + return SpawnGroup, SpawnCursor + end + end + + return nil, nil +end + + +--- Find the next alive group. +-- @param #SPAWN self +-- @param #number SpawnCursor A number holding the last found previous index. +-- @return Group#GROUP, #number The group found, the new index where the group was found. +-- @return #nil, #nil When no group is found, #nil is returned. +function SPAWN:GetNextAliveGroup( SpawnCursor ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) + + SpawnCursor = SpawnCursor + 1 + for SpawnIndex = SpawnCursor, self.SpawnCount do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + SpawnCursor = SpawnIndex + return SpawnGroup, SpawnCursor + end + end + + return nil, nil +end + +--- Find the last alive group during runtime. +function SPAWN:GetLastAliveGroup() + self:F( { self.SpawnTemplatePrefixself.SpawnAliasPrefix } ) + + self.SpawnIndex = self:_GetLastIndex() + for SpawnIndex = self.SpawnIndex, 1, -1 do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + self.SpawnIndex = SpawnIndex + return SpawnGroup + end + end + + self.SpawnIndex = nil + return nil +end + + + +--- Get the group from an index. +-- Returns the group from the SpawnGroups list. +-- If no index is given, it will return the first group in the list. +-- @param #SPAWN self +-- @param #number SpawnIndex The index of the group to return. +-- @return Group#GROUP +function SPAWN:GetGroupFromIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) + + if not SpawnIndex then + SpawnIndex = 1 + end + + if self.SpawnGroups and self.SpawnGroups[SpawnIndex] then + local SpawnGroup = self.SpawnGroups[SpawnIndex].Group + return SpawnGroup + else + return nil + end +end + +--- Get the group index from a DCSUnit. +-- The method will search for a #-mark, and will return the index behind the #-mark of the DCSUnit. +-- It will return nil of no prefix was found. +-- @param #SPAWN self +-- @param DCSUnit The DCS unit to be searched. +-- @return #string The prefix +-- @return #nil Nothing found +function SPAWN:_GetGroupIndexFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit and DCSUnit:getName() then + local IndexString = string.match( DCSUnit:getName(), "#.*-" ):sub( 2, -2 ) + self:T( IndexString ) + + if IndexString then + local Index = tonumber( IndexString ) + self:T( { "Index:", IndexString, Index } ) + return Index + end + end + + return nil +end + +--- Return the prefix of a DCSUnit. +-- The method will search for a #-mark, and will return the text before the #-mark. +-- It will return nil of no prefix was found. +-- @param #SPAWN self +-- @param DCSUnit The DCS unit to be searched. +-- @return #string The prefix +-- @return #nil Nothing found +function SPAWN:_GetPrefixFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit and DCSUnit:getName() then + local SpawnPrefix = string.match( DCSUnit:getName(), ".*#" ) + if SpawnPrefix then + SpawnPrefix = SpawnPrefix:sub( 1, -2 ) + end + self:T( SpawnPrefix ) + return SpawnPrefix + end + + return nil +end + +--- Return the group within the SpawnGroups collection with input a DCSUnit. +function SPAWN:_GetGroupFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit then + local SpawnPrefix = self:_GetPrefixFromDCSUnit( DCSUnit ) + + if self.SpawnTemplatePrefix == SpawnPrefix or ( self.SpawnAliasPrefix and self.SpawnAliasPrefix == SpawnPrefix ) then + local SpawnGroupIndex = self:_GetGroupIndexFromDCSUnit( DCSUnit ) + local SpawnGroup = self.SpawnGroups[SpawnGroupIndex].Group + self:T( SpawnGroup ) + return SpawnGroup + end + end + + return nil +end + + +--- Get the index from a given group. +-- The function will search the name of the group for a #, and will return the number behind the #-mark. +function SPAWN:GetSpawnIndexFromGroup( SpawnGroup ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnGroup } ) + + local IndexString = string.match( SpawnGroup:GetName(), "#.*$" ):sub( 2 ) + local Index = tonumber( IndexString ) + + self:T( IndexString, Index ) + return Index + +end + +--- Return the last maximum index that can be used. +function SPAWN:_GetLastIndex() + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) + + return self.SpawnMaxGroups +end + +--- Initalize the SpawnGroups collection. +function SPAWN:_InitializeSpawnGroups( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) + + if not self.SpawnGroups[SpawnIndex] then + self.SpawnGroups[SpawnIndex] = {} + self.SpawnGroups[SpawnIndex].Visible = false + self.SpawnGroups[SpawnIndex].Spawned = false + self.SpawnGroups[SpawnIndex].UnControlled = false + self.SpawnGroups[SpawnIndex].SpawnTime = 0 + + self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefix + self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) + end + + self:_RandomizeTemplate( SpawnIndex ) + self:_RandomizeRoute( SpawnIndex ) + --self:_TranslateRotate( SpawnIndex ) + + return self.SpawnGroups[SpawnIndex] +end + + + +--- Gets the CategoryID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCategoryID( SpawnPrefix ) + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + return TemplateGroup:getCategory() + else + return nil + end +end + +--- Gets the CoalitionID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCoalitionID( SpawnPrefix ) + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + return TemplateGroup:getCoalition() + else + return nil + end +end + +--- Gets the CountryID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCountryID( SpawnPrefix ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnPrefix } ) + + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + local TemplateUnits = TemplateGroup:getUnits() + return TemplateUnits[1]:getCountry() + else + return nil + end +end + +--- Gets the Group Template from the ME environment definition. +-- This method used the @{DATABASE} object, which contains ALL initial and new spawned object in MOOSE. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix +-- @return @SPAWN self +function SPAWN:_GetTemplate( SpawnTemplatePrefix ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnTemplatePrefix } ) + + local SpawnTemplate = nil + + SpawnTemplate = routines.utils.deepCopy( _DATABASE.Templates.Groups[SpawnTemplatePrefix].Template ) + + if SpawnTemplate == nil then + error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) + end + + SpawnTemplate.SpawnCoalitionID = self:_GetGroupCoalitionID( SpawnTemplatePrefix ) + SpawnTemplate.SpawnCategoryID = self:_GetGroupCategoryID( SpawnTemplatePrefix ) + SpawnTemplate.SpawnCountryID = self:_GetGroupCountryID( SpawnTemplatePrefix ) + + self:T( { SpawnTemplate } ) + return SpawnTemplate +end + +--- Prepares the new Group Template. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix +-- @param #number SpawnIndex +-- @return #SPAWN self +function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) + + local SpawnTemplate = self:_GetTemplate( SpawnTemplatePrefix ) + SpawnTemplate.name = self:SpawnGroupName( SpawnIndex ) + + SpawnTemplate.groupId = nil + SpawnTemplate.lateActivation = false + + if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then + self:T( "For ground units, visible needs to be false..." ) + SpawnTemplate.visible = false + end + + if SpawnTemplate.SpawnCategoryID == Group.Category.HELICOPTER or SpawnTemplate.SpawnCategoryID == Group.Category.AIRPLANE then + SpawnTemplate.uncontrolled = false + end + + for UnitID = 1, #SpawnTemplate.units do + SpawnTemplate.units[UnitID].name = string.format( SpawnTemplate.name .. '-%02d', UnitID ) + SpawnTemplate.units[UnitID].unitId = nil + SpawnTemplate.units[UnitID].x = SpawnTemplate.route.points[1].x + SpawnTemplate.units[UnitID].y = SpawnTemplate.route.points[1].y + end + + self:T( { "Template:", SpawnTemplate } ) + return SpawnTemplate + +end + +--- Private method randomizing the routes. +-- @param #SPAWN self +-- @param #number SpawnIndex The index of the group to be spawned. +-- @return #SPAWN +function SPAWN:_RandomizeRoute( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnRandomizeRoute, self.SpawnRandomizeRouteStartPoint, self.SpawnRandomizeRouteEndPoint, self.SpawnRandomizeRouteRadius } ) + + if self.SpawnRandomizeRoute then + local SpawnTemplate = self.SpawnGroups[SpawnIndex].SpawnTemplate + local RouteCount = #SpawnTemplate.route.points + + for t = self.SpawnRandomizeRouteStartPoint + 1, ( RouteCount - self.SpawnRandomizeRouteEndPoint ) do + SpawnTemplate.route.points[t].x = SpawnTemplate.route.points[t].x + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) + SpawnTemplate.route.points[t].y = SpawnTemplate.route.points[t].y + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) + -- TODO: manage altitude for airborne units ... + SpawnTemplate.route.points[t].alt = nil + --SpawnGroup.route.points[t].alt_type = nil + self:T( 'SpawnTemplate.route.points[' .. t .. '].x = ' .. SpawnTemplate.route.points[t].x .. ', SpawnTemplate.route.points[' .. t .. '].y = ' .. SpawnTemplate.route.points[t].y ) + end + end + + return self +end + +--- Private method that randomizes the template of the group. +-- @param #SPAWN self +-- @param #number SpawnIndex +-- @return #SPAWN self +function SPAWN:_RandomizeTemplate( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + if self.SpawnRandomizeTemplate then + self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefixTable[ math.random( 1, #self.SpawnTemplatePrefixTable ) ] + self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) + self.SpawnGroups[SpawnIndex].SpawnTemplate.route = routines.utils.deepCopy( self.SpawnTemplate.route ) + 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 + for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading + end + end + + self:_RandomizeRoute( SpawnIndex ) + + return self +end + +function SPAWN:_TranslateRotate( SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle } ) + + -- Translate + local TranslatedX = SpawnX + local TranslatedY = SpawnY + + -- Rotate + -- From Wikipedia: https://en.wikipedia.org/wiki/Rotation_matrix#Common_rotations + -- x' = x \cos \theta - y \sin \theta\ + -- y' = x \sin \theta + y \cos \theta\ + local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) + + TranslatedY * math.sin( math.rad( SpawnAngle ) ) + local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) + + TranslatedY * math.cos( math.rad( SpawnAngle ) ) + + -- Assign + self.SpawnGroups[SpawnIndex].SpawnTemplate.x = SpawnRootX - RotatedX + self.SpawnGroups[SpawnIndex].SpawnTemplate.y = SpawnRootY + RotatedY + + + local SpawnUnitCount = table.getn( self.SpawnGroups[SpawnIndex].SpawnTemplate.units ) + for u = 1, SpawnUnitCount do + + -- Translate + local TranslatedX = SpawnX + local TranslatedY = SpawnY - 10 * ( u - 1 ) + + -- Rotate + local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) + + TranslatedY * math.sin( math.rad( SpawnAngle ) ) + local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) + + TranslatedY * math.cos( math.rad( SpawnAngle ) ) + + -- Assign + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].x = SpawnRootX - RotatedX + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].y = SpawnRootY + RotatedY + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading = self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading + math.rad( SpawnAngle ) + end + + return self +end + +--- Get the next index of the groups to be spawned. This function is complicated, as it is used at several spaces. +function SPAWN:_GetSpawnIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive, self.AliveUnits, #self.SpawnTemplate.units } ) + + + if ( self.SpawnMaxGroups == 0 ) or ( SpawnIndex <= self.SpawnMaxGroups ) then + if ( self.SpawnMaxUnitsAlive == 0 ) or ( self.AliveUnits < self.SpawnMaxUnitsAlive * #self.SpawnTemplate.units ) or self.UnControlled then + if SpawnIndex and SpawnIndex >= self.SpawnCount + 1 then + self.SpawnCount = self.SpawnCount + 1 + SpawnIndex = self.SpawnCount + end + self.SpawnIndex = SpawnIndex + if not self.SpawnGroups[self.SpawnIndex] then + self:_InitializeSpawnGroups( self.SpawnIndex ) + end + else + return nil + end + else + return nil + end + + return self.SpawnIndex +end + + +-- TODO Need to delete this... _DATABASE does this now ... +function SPAWN:_OnBirth( event ) + + if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if event.initiator and event.initiator:getName() then + local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) + if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then + self:T( { "Birth event: " .. event.initiator:getName(), event } ) + --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " spawned." , 5, EventPrefix .. '/Event') + self.AliveUnits = self.AliveUnits + 1 + self:T( "Alive Units: " .. self.AliveUnits ) + end + end + end + +end + +--- Obscolete +-- @todo Need to delete this... _DATABASE does this now ... +function SPAWN:_OnDeadOrCrash( event ) + self:F( self.SpawnTemplatePrefix, event ) + + if event.initiator and event.initiator:getName() then + local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) + if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then + self:T( { "Dead event: " .. event.initiator:getName(), event } ) +-- local DestroyedUnit = Unit.getByName( EventPrefix ) +-- if DestroyedUnit and DestroyedUnit.getLife() <= 1.0 then + --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " crashed." , 5, EventPrefix .. '/Event') + self.AliveUnits = self.AliveUnits - 1 + self:T( "Alive Units: " .. self.AliveUnits ) +-- end + end + end +end + +--- Will detect AIR Units taking off... When the event takes place, the spawned Group is registered as airborne... +-- This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups. +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnTakeOff( event ) + self:F( self.SpawnTemplatePrefix, event ) + + if event.initiator and event.initiator:getName() then + local SpawnGroup = self:_GetGroupFromDCSUnit( event.initiator ) + if SpawnGroup then + self:T( { "TakeOff event: " .. event.initiator:getName(), event } ) + self:T( "self.Landed = false" ) + self.Landed = false + end + end +end + +--- Will detect AIR Units landing... When the event takes place, the spawned Group is registered as landed. +-- This is needed to ensure that Re-SPAWNing is only done for landed AIR Groups. +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnLand( event ) + self:F( self.SpawnTemplatePrefix, event ) + + local SpawnUnit = event.initiator + if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then + local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) + if SpawnGroup then + self:T( { "Landed event:" .. SpawnUnit:getName(), event } ) + self.Landed = true + self:T( "self.Landed = true" ) + if self.Landed and self.RepeatOnLanding then + local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) + self:T( { "Landed:", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + self:ReSpawn( SpawnGroupIndex ) + end + end + end +end + +--- Will detect AIR Units shutting down their engines ... +-- When the event takes place, and the method @{RepeatOnEngineShutDown} was called, the spawned Group will Re-SPAWN. +-- But only when the Unit was registered to have landed. +-- @param #SPAWN self +-- @see _OnTakeOff +-- @see _OnLand +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnEngineShutDown( event ) + self:F( self.SpawnTemplatePrefix, event ) + + local SpawnUnit = event.initiator + if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then + local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) + if SpawnGroup then + self:T( { "EngineShutDown event: " .. SpawnUnit:getName(), event } ) + if self.Landed and self.RepeatOnEngineShutDown then + local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) + self:T( { "EngineShutDown: ", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + self:ReSpawn( SpawnGroupIndex ) + end + end + end +end + +--- This function is called automatically by the Spawning scheduler. +-- It is the internal worker method SPAWNing new Groups on the defined time intervals. +function SPAWN:_Scheduler() + self:F( { "_Scheduler", self.SpawnTemplatePrefix, self.SpawnAliasPrefix, self.SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive } ) + + -- Validate if there are still groups left in the batch... + self:Spawn() + + return true +end + +function SPAWN:_SpawnCleanUpScheduler() + self:F( { "CleanUp Scheduler:", self.SpawnTemplatePrefix } ) + + local SpawnCursor + local SpawnGroup, SpawnCursor = self:GetFirstAliveGroup( SpawnCursor ) + + self:T( { "CleanUp Scheduler:", SpawnGroup } ) + + while SpawnGroup do + + if SpawnGroup:AllOnGround() and SpawnGroup:GetMaxVelocity() < 1 then + if not self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] then + self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = timer.getTime() + else + if self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] + self.SpawnCleanUpInterval < timer.getTime() then + self:T( { "CleanUp Scheduler:", "Cleaning:", SpawnGroup } ) + SpawnGroup:Destroy() + end + end + else + self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = nil + end + + SpawnGroup, SpawnCursor = self:GetNextAliveGroup( SpawnCursor ) + + self:T( { "CleanUp Scheduler:", SpawnGroup } ) + + end + + return true -- Repeat + +end +--- Limit the simultaneous movement of Groups within a running Mission. +-- This module is defined to improve the performance in missions, and to bring additional realism for GROUND vehicles. +-- Performance: If in a DCSRTE there are a lot of moving GROUND units, then in a multi player mission, this WILL create lag if +-- the main DCS execution core of your CPU is fully utilized. So, this class will limit the amount of simultaneous moving GROUND units +-- on defined intervals (currently every minute). +-- @module MOVEMENT + +Include.File( "Routines" ) + +--- the MOVEMENT class +-- @type +MOVEMENT = { + ClassName = "MOVEMENT", +} + +--- Creates the main object which is handling the GROUND forces movement. +-- @param table{string,...}|string MovePrefixes is a table of the Prefixes (names) of the GROUND Groups that need to be controlled by the MOVEMENT Object. +-- @param number MoveMaximum is a number that defines the maximum amount of GROUND Units to be moving during one minute. +-- @return MOVEMENT +-- @usage +-- -- Limit the amount of simultaneous moving units on the ground to prevent lag. +-- Movement_US_Platoons = MOVEMENT:New( { 'US Tank Platoon Left', 'US Tank Platoon Middle', 'US Tank Platoon Right', 'US CH-47D Troops' }, 15 ) + +function MOVEMENT:New( MovePrefixes, MoveMaximum ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MovePrefixes, MoveMaximum } ) + + if type( MovePrefixes ) == 'table' then + self.MovePrefixes = MovePrefixes + else + self.MovePrefixes = { MovePrefixes } + end + self.MoveCount = 0 -- The internal counter of the amount of Moveing the has happened since MoveStart. + self.MoveMaximum = MoveMaximum -- Contains the Maximum amount of units that are allowed to move... + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.MoveUnits = {} -- Reflects if the Moving for this MovePrefixes is going to be scheduled or not. + + _EVENTDISPATCHER:OnBirth( self.OnBirth, self ) + +-- self:AddEvent( world.event.S_EVENT_BIRTH, self.OnBirth ) +-- +-- self:EnableEvents() + + self:ScheduleStart() + + return self +end + +--- Call this function to start the MOVEMENT scheduling. +function MOVEMENT:ScheduleStart() + self:F() + --self.MoveFunction = routines.scheduleFunction( self._Scheduler, { self }, timer.getTime() + 1, 120 ) + self.MoveFunction = SCHEDULER:New( self, self._Scheduler, {}, 1, 120 ) +end + +--- Call this function to stop the MOVEMENT scheduling. +-- @todo need to implement it ... Forgot. +function MOVEMENT:ScheduleStop() + self:F() + +end + +--- Captures the birth events when new Units were spawned. +-- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. +function MOVEMENT:OnBirth( Event ) + self:F( { Event } ) + + if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if Event.IniDCSUnit then + self:T( "Birth object : " .. Event.IniDCSUnitName ) + if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then + for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do + if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then + self.AliveUnits = self.AliveUnits + 1 + self.MoveUnits[Event.IniDCSUnitName] = Event.IniDCSGroupName + self:T( self.AliveUnits ) + end + end + end + end + _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) + end + +end + +--- Captures the Dead or Crash events when Units crash or are destroyed. +-- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. +function MOVEMENT:OnDeadOrCrash( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + self:T( "Dead object : " .. Event.IniDCSUnitName ) + for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do + if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then + self.AliveUnits = self.AliveUnits - 1 + self.MoveUnits[Event.IniDCSUnitName] = nil + self:T( self.AliveUnits ) + end + end + end +end + +--- This function is called automatically by the MOVEMENT scheduler. A new function is scheduled when MoveScheduled is true. +function MOVEMENT:_Scheduler() + self:F( { self.MovePrefixes, self.MoveMaximum, self.AliveUnits, self.MovementGroups } ) + + if self.AliveUnits > 0 then + local MoveProbability = ( self.MoveMaximum * 100 ) / self.AliveUnits + self:T( 'Move Probability = ' .. MoveProbability ) + + for MovementUnitName, MovementGroupName in pairs( self.MoveUnits ) do + local MovementGroup = Group.getByName( MovementGroupName ) + if MovementGroup and MovementGroup:isExist() then + local MoveOrStop = math.random( 1, 100 ) + self:T( 'MoveOrStop = ' .. MoveOrStop ) + if MoveOrStop <= MoveProbability then + self:T( 'Group continues moving = ' .. MovementGroupName ) + trigger.action.groupContinueMoving( MovementGroup ) + else + self:T( 'Group stops moving = ' .. MovementGroupName ) + trigger.action.groupStopMoving( MovementGroup ) + end + else + self.MoveUnits[MovementUnitName] = nil + end + end + end + return true +end +--- Provides defensive behaviour to a set of SAM sites within a running Mission. +-- @module Sead +-- @author to be searched on the forum +-- @author (co) Flightcontrol (Modified and enriched with functionality) + +Include.File( "Routines" ) +Include.File( "Event" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The SEAD class +-- @type SEAD +-- @extends Base#BASE +SEAD = { + ClassName = "SEAD", + TargetSkill = { + Average = { Evade = 50, DelayOff = { 10, 25 }, DelayOn = { 10, 30 } } , + Good = { Evade = 30, DelayOff = { 8, 20 }, DelayOn = { 20, 40 } } , + High = { Evade = 15, DelayOff = { 5, 17 }, DelayOn = { 30, 50 } } , + Excellent = { Evade = 10, DelayOff = { 3, 10 }, DelayOn = { 30, 60 } } + }, + SEADGroupPrefixes = {} +} + +--- Creates the main object which is handling defensive actions for SA sites or moving SA vehicles. +-- When an anti radiation missile is fired (KH-58, KH-31P, KH-31A, KH-25MPU, HARM missiles), the SA will shut down their radars and will take evasive actions... +-- Chances are big that the missile will miss. +-- @param table{string,...}|string SEADGroupPrefixes which is a table of Prefixes of the SA Groups in the DCSRTE on which evasive actions need to be taken. +-- @return SEAD +-- @usage +-- -- CCCP SEAD Defenses +-- -- Defends the Russian SA installations from SEAD attacks. +-- SEAD_RU_SAM_Defenses = SEAD:New( { 'RU SA-6 Kub', 'RU SA-6 Defenses', 'RU MI-26 Troops', 'RU Attack Gori' } ) +function SEAD:New( SEADGroupPrefixes ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( SEADGroupPrefixes ) + if type( SEADGroupPrefixes ) == 'table' then + for SEADGroupPrefixID, SEADGroupPrefix in pairs( SEADGroupPrefixes ) do + self.SEADGroupPrefixes[SEADGroupPrefix] = SEADGroupPrefix + end + else + self.SEADGroupNames[SEADGroupPrefixes] = SEADGroupPrefixes + end + _EVENTDISPATCHER:OnShot( self.EventShot, self ) + + return self +end + +--- 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. +-- @see SEAD +function SEAD:EventShot( Event ) + self:F( { Event } ) + + local SEADUnit = Event.IniDCSUnit + local SEADUnitName = Event.IniDCSUnitName + local SEADWeapon = Event.Weapon -- Identify the weapon fired + local SEADWeaponName = Event.WeaponName -- return weapon type + --trigger.action.outText( string.format("Alerte, depart missile " ..string.format(SEADWeaponName)), 20) --debug message + -- Start of the 2nd loop + self:T( "Missile Launched = " .. SEADWeaponName ) + if SEADWeaponName == "KH-58" or SEADWeaponName == "KH-25MPU" or SEADWeaponName == "AGM-88" or SEADWeaponName == "KH-31A" or SEADWeaponName == "KH-31P" then -- Check if the missile is a SEAD + local _evade = math.random (1,100) -- random number for chance of evading action + local _targetMim = Event.Weapon:getTarget() -- Identify target + local _targetMimname = Unit.getName(_targetMim) + local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) + local _targetMimgroupName = _targetMimgroup:getName() + local _targetMimcont= _targetMimgroup:getController() + local _targetskill = _DATABASE.Templates.Units[_targetMimname].Template.skill + self:T( self.SEADGroupPrefixes ) + self:T( _targetMimgroupName ) + local SEADGroupFound = false + for SEADGroupPrefixID, SEADGroupPrefix in pairs( self.SEADGroupPrefixes ) do + if string.find( _targetMimgroupName, SEADGroupPrefix, 1, true ) then + SEADGroupFound = true + self:T( 'Group Found' ) + break + end + end + if SEADGroupFound == true then + if _targetskill == "Random" then -- when skill is random, choose a skill + local Skills = { "Average", "Good", "High", "Excellent" } + _targetskill = Skills[ math.random(1,4) ] + end + self:T( _targetskill ) -- debug message for skill check + if self.TargetSkill[_targetskill] then + if (_evade > self.TargetSkill[_targetskill].Evade) then + self:T( string.format("Evading, target skill " ..string.format(_targetskill)) ) --debug message + local _targetMim = Weapon.getTarget(SEADWeapon) + local _targetMimname = Unit.getName(_targetMim) + local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) + local _targetMimcont= _targetMimgroup:getController() + routines.groupRandomDistSelf(_targetMimgroup,300,'Diamond',250,20) -- move randomly + local SuppressedGroups1 = {} -- unit suppressed radar off for a random time + local function SuppressionEnd1(id) + id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) + SuppressedGroups1[id.groupName] = nil + end + local id = { + groupName = _targetMimgroup, + ctrl = _targetMimcont + } + local delay1 = math.random(self.TargetSkill[_targetskill].DelayOff[1], self.TargetSkill[_targetskill].DelayOff[2]) + if SuppressedGroups1[id.groupName] == nil then + SuppressedGroups1[id.groupName] = { + SuppressionEndTime1 = timer.getTime() + delay1, + SuppressionEndN1 = SuppressionEndCounter1 --Store instance of SuppressionEnd() scheduled function + } + Controller.setOption(_targetMimcont, AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) + timer.scheduleFunction(SuppressionEnd1, id, SuppressedGroups1[id.groupName].SuppressionEndTime1) --Schedule the SuppressionEnd() function + --trigger.action.outText( string.format("Radar Off " ..string.format(delay1)), 20) + end + + local SuppressedGroups = {} + local function SuppressionEnd(id) + id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.RED) + SuppressedGroups[id.groupName] = nil + end + local id = { + groupName = _targetMimgroup, + ctrl = _targetMimcont + } + local delay = math.random(self.TargetSkill[_targetskill].DelayOn[1], self.TargetSkill[_targetskill].DelayOn[2]) + if SuppressedGroups[id.groupName] == nil then + SuppressedGroups[id.groupName] = { + SuppressionEndTime = timer.getTime() + delay, + SuppressionEndN = SuppressionEndCounter --Store instance of SuppressionEnd() scheduled function + } + timer.scheduleFunction(SuppressionEnd, id, SuppressedGroups[id.groupName].SuppressionEndTime) --Schedule the SuppressionEnd() function + --trigger.action.outText( string.format("Radar On " ..string.format(delay)), 20) + end + end + end + end + end +end +--- Taking the lead of AI escorting your flight. +-- +-- @{#ESCORT} class +-- ================ +-- The @{#ESCORT} class allows you to interact with escorting AI on your flight and take the lead. +-- Each escorting group can be commanded with a whole set of radio commands (radio menu in your flight, and then F10). +-- +-- The radio commands will vary according the category of the group. The richest set of commands are with Helicopters and AirPlanes. +-- Ships and Ground troops will have a more limited set, but they can provide support through the bombing of targets designated by the other escorts. +-- +-- RADIO MENUs that can be created: +-- ================================ +-- Find a summary below of the current available commands: +-- +-- Navigation ...: +-- --------------- +-- Escort group navigation functions: +-- +-- * **"Join-Up and Follow at x meters":** The escort group fill follow you at about x meters, and they will follow you. +-- * **"Flare":** Provides menu commands to let the escort group shoot a flare in the air in a color. +-- * **"Smoke":** Provides menu commands to let the escort group smoke the air in a color. Note that smoking is only available for ground and naval troops. +-- +-- Hold position ...: +-- ------------------ +-- Escort group navigation functions: +-- +-- * **"At current location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. +-- * **"At client location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. +-- +-- Report targets ...: +-- ------------------- +-- Report targets will make the escort group to report any target that it identifies within a 8km range. Any detected target can be attacked using the 4. Attack nearby targets function. (see below). +-- +-- * **"Report now":** Will report the current detected targets. +-- * **"Report targets on":** Will make the escort group to report detected targets and will fill the "Attack nearby targets" menu list. +-- * **"Report targets off":** Will stop detecting targets. +-- +-- Scan targets ...: +-- ----------------- +-- Menu items to pop-up the escort group for target scanning. After scanning, the escort group will resume with the mission or defined task. +-- +-- * **"Scan targets 30 seconds":** Scan 30 seconds for targets. +-- * **"Scan targets 60 seconds":** Scan 60 seconds for targets. +-- +-- Attack targets ...: +-- ------------------- +-- This menu item will list all detected targets within a 15km range. Depending on the level of detection (known/unknown) and visuality, the targets type will also be listed. +-- +-- Request assistance from ...: +-- ---------------------------- +-- This menu item will list all detected targets within a 15km range, as with the menu item **Attack Targets**. +-- This menu item allows to request attack support from other escorts supporting the current client group. +-- eg. the function allows a player to request support from the Ship escort to attack a target identified by the Plane escort with its Tomahawk missiles. +-- eg. the function allows a player to request support from other Planes escorting to bomb the unit with illumination missiles or bombs, so that the main plane escort can attack the area. +-- +-- ROE ...: +-- -------- +-- Sets the Rules of Engagement (ROE) of the escort group when in flight. +-- +-- * **"Hold Fire":** The escort group will hold fire. +-- * **"Return Fire":** The escort group will return fire. +-- * **"Open Fire":** The escort group will open fire on designated targets. +-- * **"Weapon Free":** The escort group will engage with any target. +-- +-- Evasion ...: +-- ------------ +-- Will define the evasion techniques that the escort group will perform during flight or combat. +-- +-- * **"Fight until death":** The escort group will have no reaction to threats. +-- * **"Use flares, chaff and jammers":** The escort group will use passive defense using flares and jammers. No evasive manoeuvres are executed. +-- * **"Evade enemy fire":** The rescort group will evade enemy fire before firing. +-- * **"Go below radar and evade fire":** The escort group will perform evasive vertical manoeuvres. +-- +-- Resume Mission ...: +-- ------------------- +-- Escort groups can have their own mission. This menu item will allow the escort group to resume their Mission from a given waypoint. +-- Note that this is really fantastic, as you now have the dynamic of taking control of the escort groups, and allowing them to resume their path or mission. +-- +-- ESCORT construction methods. +-- ============================ +-- Create a new SPAWN object with the @{#ESCORT.New} method: +-- +-- * @{#ESCORT.New}: Creates a new ESCORT object from a @{Group#GROUP} for a @{Client#CLIENT}, with an optional briefing text. +-- +-- ESCORT initialization methods. +-- ============================== +-- The following menus are created within the RADIO MENU of an active unit hosted by a player: +-- +-- * @{#ESCORT.MenuFollowAt}: Creates a menu to make the escort follow the client. +-- * @{#ESCORT.MenuHoldAtEscortPosition}: Creates a menu to hold the escort at its current position. +-- * @{#ESCORT.MenuHoldAtLeaderPosition}: Creates a menu to hold the escort at the client position. +-- * @{#ESCORT.MenuScanForTargets}: Creates a menu so that the escort scans targets. +-- * @{#ESCORT.MenuFlare}: Creates a menu to disperse flares. +-- * @{#ESCORT.MenuSmoke}: Creates a menu to disparse smoke. +-- * @{#ESCORT.MenuReportTargets}: Creates a menu so that the escort reports targets. +-- * @{#ESCORT.MenuReportPosition}: Creates a menu so that the escort reports its current position from bullseye. +-- * @{#ESCORT.MenuAssistedAttack: Creates a menu so that the escort supportes assisted attack from other escorts with the client. +-- * @{#ESCORT.MenuROE: Creates a menu structure to set the rules of engagement of the escort. +-- * @{#ESCORT.MenuEvasion: Creates a menu structure to set the evasion techniques when the escort is under threat. +-- * @{#ESCORT.MenuResumeMission}: Creates a menu structure so that the escort can resume from a waypoint. +-- +-- @module Escort +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Group" ) +Include.File( "Zone" ) + +--- +-- @type ESCORT +-- @extends Base#BASE +-- @field Client#CLIENT EscortClient +-- @field Group#GROUP EscortGroup +-- @field #string EscortName +-- @field #ESCORT.MODE EscortMode The mode the escort is in. +-- @field #number FollowScheduler The id of the _FollowScheduler function. +-- @field #boolean ReportTargets If true, nearby targets are reported. +-- @Field DCSTypes#AI.Option.Air.val.ROE OptionROE Which ROE is set to the EscortGroup. +-- @field DCSTypes#AI.Option.Air.val.REACTION_ON_THREAT OptionReactionOnThreat Which REACTION_ON_THREAT is set to the EscortGroup. +-- @field Menu#MENU_CLIENT EscortMenuResumeMission +ESCORT = { + ClassName = "ESCORT", + EscortName = nil, -- The Escort Name + EscortClient = nil, + EscortGroup = nil, + EscortMode = nil, + MODE = { + FOLLOW = 1, + MISSION = 2, + }, + Targets = {}, -- The identified targets + FollowScheduler = nil, + ReportTargets = true, + OptionROE = AI.Option.Air.val.ROE.OPEN_FIRE, + OptionReactionOnThreat = AI.Option.Air.val.REACTION_ON_THREAT.ALLOW_ABORT_MISSION, + TaskPoints = {} +} + +--- ESCORT.Mode class +-- @type ESCORT.MODE +-- @field #number FOLLOW +-- @field #number MISSION + +--- MENUPARAM type +-- @type MENUPARAM +-- @field #ESCORT ParamSelf +-- @field #Distance ParamDistance +-- @field #function ParamFunction +-- @field #string ParamMessage + +--- ESCORT class constructor for an AI group +-- @param #ESCORT self +-- @param Client#CLIENT EscortClient The client escorted by the EscortGroup. +-- @param Group#GROUP EscortGroup The group AI escorting the EscortClient. +-- @param #string EscortName Name of the escort. +-- @return #ESCORT self +function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { EscortClient, EscortGroup, EscortName } ) + + self.EscortClient = EscortClient -- Client#CLIENT + self.EscortGroup = EscortGroup -- Group#GROUP + self.EscortName = EscortName + self.EscortBriefing = EscortBriefing + + self:T( EscortGroup:GetClassNameAndID() ) + + -- Set EscortGroup known at EscortClient. + if not self.EscortClient._EscortGroups then + self.EscortClient._EscortGroups = {} + end + + if not self.EscortClient._EscortGroups[EscortGroup:GetName()] then + self.EscortClient._EscortGroups[EscortGroup:GetName()] = {} + self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortGroup = self.EscortGroup + self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortName = self.EscortName + self.EscortClient._EscortGroups[EscortGroup:GetName()].Targets = {} + self.EscortMode = ESCORT.MODE.FOLLOW + end + + + self.EscortMenu = MENU_CLIENT:New( self.EscortClient, self.EscortName ) + + self.EscortGroup:WayPointInitialize(1) + + self.EscortGroup:OptionROTVertical() + self.EscortGroup:OptionROEOpenFire() + + EscortGroup:MessageToClient( EscortGroup:GetCategoryName() .. " '" .. EscortName .. "' (" .. EscortGroup:GetCallsign() .. ") reporting! " .. + "We're escorting your flight. " .. + "Use the Radio Menu and F10 and use the options under + " .. EscortName .. "\n", + 60, EscortClient + ) + + return self +end + + +--- Defines the default menus +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:Menus() + self:F() + + self:MenuFollowAt( 100 ) + self:MenuFollowAt( 200 ) + self:MenuFollowAt( 300 ) + self:MenuFollowAt( 400 ) + + self:MenuScanForTargets( 100, 60 ) + + self:MenuHoldAtEscortPosition( 30 ) + self:MenuHoldAtLeaderPosition( 30 ) + + self:MenuFlare() + self:MenuSmoke() + + self:MenuReportTargets( 60 ) + self:MenuAssistedAttack() + self:MenuROE() + self:MenuEvasion() + self:MenuResumeMission() + + return self +end + + + +--- Defines a menu slot to let the escort Join and Follow you at a certain distance. +-- This menu will appear under **Navigation**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Distance The distance in meters that the escort needs to follow the client. +-- @return #ESCORT +function ESCORT:MenuFollowAt( Distance ) + self:F(Distance) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + if not self.EscortMenuJoinUpAndFollow then + self.EscortMenuJoinUpAndFollow = {} + end + + self.EscortMenuJoinUpAndFollow[#self.EscortMenuJoinUpAndFollow+1] = MENU_CLIENT_COMMAND:New( self.EscortClient, "Join-Up and Follow at " .. Distance, self.EscortMenuReportNavigation, ESCORT._JoinUpAndFollow, { ParamSelf = self, ParamDistance = Distance } ) + + self.EscortMode = ESCORT.MODE.FOLLOW + end + + return self +end + +--- Defines a menu slot to let the escort hold at their current position and stay low with a specified height during a specified time in seconds. +-- This menu will appear under **Hold position**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +-- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. +function ESCORT:MenuHoldAtEscortPosition( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + + if not self.EscortMenuHold then + self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) + end + + if not Height then + Height = 30 + end + + if not Seconds then + Seconds = 0 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "Hold at %d meter", Height ) + else + MenuText = string.format( "Hold at %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuHoldPosition then + self.EscortMenuHoldPosition = {} + end + + self.EscortMenuHoldPosition[#self.EscortMenuHoldPosition+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuHold, + ESCORT._HoldPosition, + { ParamSelf = self, + ParamOrbitGroup = self.EscortGroup, + ParamHeight = Height, + ParamSeconds = Seconds + } + ) + end + + return self +end + + +--- Defines a menu slot to let the escort hold at the client position and stay low with a specified height during a specified time in seconds. +-- This menu will appear under **Navigation**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +-- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. +function ESCORT:MenuHoldAtLeaderPosition( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + + if not self.EscortMenuHold then + self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) + end + + if not Height then + Height = 30 + end + + if not Seconds then + Seconds = 0 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "Rejoin and hold at %d meter", Height ) + else + MenuText = string.format( "Rejoin and hold at %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuHoldAtLeaderPosition then + self.EscortMenuHoldAtLeaderPosition = {} + end + + self.EscortMenuHoldAtLeaderPosition[#self.EscortMenuHoldAtLeaderPosition+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuHold, + ESCORT._HoldPosition, + { ParamSelf = self, + ParamOrbitGroup = self.EscortClient, + ParamHeight = Height, + ParamSeconds = Seconds + } + ) + end + + return self +end + +--- Defines a menu slot to let the escort scan for targets at a certain height for a certain time in seconds. +-- This menu will appear under **Scan targets**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuScanForTargets( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuScan then + self.EscortMenuScan = MENU_CLIENT:New( self.EscortClient, "Scan for targets", self.EscortMenu ) + end + + if not Height then + Height = 100 + end + + if not Seconds then + Seconds = 30 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "At %d meter", Height ) + else + MenuText = string.format( "At %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuScanForTargets then + self.EscortMenuScanForTargets = {} + end + + self.EscortMenuScanForTargets[#self.EscortMenuScanForTargets+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuScan, + ESCORT._ScanTargets, + { ParamSelf = self, + ParamScanDuration = 30 + } + ) + end + + return self +end + + + +--- Defines a menu slot to let the escort disperse a flare in a certain color. +-- This menu will appear under **Navigation**. +-- The flare will be fired from the first unit in the group. +-- @param #ESCORT self +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuFlare( MenuTextFormat ) + self:F() + + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + local MenuText = "" + if not MenuTextFormat then + MenuText = "Flare" + else + MenuText = MenuTextFormat + end + + if not self.EscortMenuFlare then + self.EscortMenuFlare = MENU_CLIENT:New( self.EscortClient, MenuText, self.EscortMenuReportNavigation, ESCORT._Flare, { ParamSelf = self } ) + self.EscortMenuFlareGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Green, ParamMessage = "Released a green flare!" } ) + self.EscortMenuFlareRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Red, ParamMessage = "Released a red flare!" } ) + self.EscortMenuFlareWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.White, ParamMessage = "Released a white flare!" } ) + self.EscortMenuFlareYellow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release yellow flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Yellow, ParamMessage = "Released a yellow flare!" } ) + end + + return self +end + +--- Defines a menu slot to let the escort disperse a smoke in a certain color. +-- This menu will appear under **Navigation**. +-- Note that smoke menu options will only be displayed for ships and ground units. Not for air units. +-- The smoke will be fired from the first unit in the group. +-- @param #ESCORT self +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuSmoke( MenuTextFormat ) + self:F() + + if not self.EscortGroup:IsAir() then + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + local MenuText = "" + if not MenuTextFormat then + MenuText = "Smoke" + else + MenuText = MenuTextFormat + end + + if not self.EscortMenuSmoke then + self.EscortMenuSmoke = MENU_CLIENT:New( self.EscortClient, "Smoke", self.EscortMenuReportNavigation, ESCORT._Smoke, { ParamSelf = self } ) + self.EscortMenuSmokeGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Green, ParamMessage = "Releasing green smoke!" } ) + self.EscortMenuSmokeRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Red, ParamMessage = "Releasing red smoke!" } ) + self.EscortMenuSmokeWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.White, ParamMessage = "Releasing white smoke!" } ) + self.EscortMenuSmokeOrange = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release orange smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Orange, ParamMessage = "Releasing orange smoke!" } ) + self.EscortMenuSmokeBlue = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release blue smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Blue, ParamMessage = "Releasing blue smoke!" } ) + end + end + + return self +end + +--- Defines a menu slot to let the escort report their current detected targets with a specified time interval in seconds. +-- This menu will appear under **Report targets**. +-- Note that if a report targets menu is not specified, no targets will be detected by the escort, and the attack and assisted attack menus will not be displayed. +-- @param #ESCORT self +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort report their current detected targets after specified time interval in seconds. The default time is 30 seconds. +-- @return #ESCORT +function ESCORT:MenuReportTargets( Seconds ) + self:F( { Seconds } ) + + if not self.EscortMenuReportNearbyTargets then + self.EscortMenuReportNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Report targets", self.EscortMenu ) + end + + if not Seconds then + Seconds = 30 + end + + -- Report Targets + self.EscortMenuReportNearbyTargetsNow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets now!", self.EscortMenuReportNearbyTargets, ESCORT._ReportNearbyTargetsNow, { ParamSelf = self } ) + self.EscortMenuReportNearbyTargetsOn = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets on", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = true } ) + self.EscortMenuReportNearbyTargetsOff = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets off", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = false, } ) + + -- Attack Targets + self.EscortMenuAttackNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Attack targets", self.EscortMenu ) + + + --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, Seconds ) + self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, Seconds ) + + return self +end + +--- Defines a menu slot to let the escort attack its detected targets using assisted attack from another escort joined also with the client. +-- This menu will appear under **Request assistance from**. +-- Note that this method needs to be preceded with the method MenuReportTargets. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuAssistedAttack() + self:F() + + -- Request assistance from other escorts. + -- This is very useful to let f.e. an escorting ship attack a target detected by an escorting plane... + self.EscortMenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, "Request assistance from", self.EscortMenu ) + + return self +end + +--- Defines a menu to let the escort set its rules of engagement. +-- All rules of engagement will appear under the menu **ROE**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuROE( MenuTextFormat ) + self:F( MenuTextFormat ) + + if not self.EscortMenuROE then + -- Rules of Engagement + self.EscortMenuROE = MENU_CLIENT:New( self.EscortClient, "ROE", self.EscortMenu ) + if self.EscortGroup:OptionROEHoldFirePossible() then + self.EscortMenuROEHoldFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Hold Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEHoldFire(), ParamMessage = "Holding weapons!" } ) + end + if self.EscortGroup:OptionROEReturnFirePossible() then + self.EscortMenuROEReturnFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Return Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEReturnFire(), ParamMessage = "Returning fire!" } ) + end + if self.EscortGroup:OptionROEOpenFirePossible() then + self.EscortMenuROEOpenFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Open Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEOpenFire(), ParamMessage = "Opening fire on designated targets!!" } ) + end + if self.EscortGroup:OptionROEWeaponFreePossible() then + self.EscortMenuROEWeaponFree = MENU_CLIENT_COMMAND:New( self.EscortClient, "Weapon Free", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEWeaponFree(), ParamMessage = "Opening fire on targets of opportunity!" } ) + end + end + + return self +end + + +--- Defines a menu to let the escort set its evasion when under threat. +-- All rules of engagement will appear under the menu **Evasion**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuEvasion( MenuTextFormat ) + self:F( MenuTextFormat ) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuEvasion then + -- Reaction to Threats + self.EscortMenuEvasion = MENU_CLIENT:New( self.EscortClient, "Evasion", self.EscortMenu ) + if self.EscortGroup:OptionROTNoReactionPossible() then + self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTNoReaction(), ParamMessage = "Fighting until death!" } ) + end + if self.EscortGroup:OptionROTPassiveDefensePossible() then + self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTPassiveDefense(), ParamMessage = "Defending using jammers, chaff and flares!" } ) + end + if self.EscortGroup:OptionROTEvadeFirePossible() then + self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTEvadeFire(), ParamMessage = "Evading on enemy fire!" } ) + end + if self.EscortGroup:OptionROTVerticalPossible() then + self.EscortMenuOptionEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTVertical(), ParamMessage = "Evading on enemy fire with vertical manoeuvres!" } ) + end + end + end + + return self +end + +--- Defines a menu to let the escort resume its mission from a waypoint on its route. +-- All rules of engagement will appear under the menu **Resume mission from**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuResumeMission() + self:F() + + if not self.EscortMenuResumeMission then + -- Mission Resume Menu Root + self.EscortMenuResumeMission = MENU_CLIENT:New( self.EscortClient, "Resume mission from", self.EscortMenu ) + end + + return self +end + + +--- @param #MENUPARAM MenuParam +function ESCORT._HoldPosition( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local OrbitGroup = MenuParam.ParamOrbitGroup -- Group#GROUP + local OrbitUnit = OrbitGroup:GetUnit(1) -- Unit#UNIT + local OrbitHeight = MenuParam.ParamHeight + local OrbitSeconds = MenuParam.ParamSeconds -- Not implemented yet + + routines.removeFunction( self.FollowScheduler ) + + local PointFrom = {} + local GroupPoint = EscortGroup:GetUnit(1):GetPointVec3() + PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.z + PointFrom.speed = 250 + PointFrom.type = AI.Task.WaypointType.TURNING_POINT + PointFrom.alt = GroupPoint.y + PointFrom.alt_type = AI.Task.AltitudeType.BARO + + local OrbitPoint = OrbitUnit:GetPointVec2() + local PointTo = {} + PointTo.x = OrbitPoint.x + PointTo.y = OrbitPoint.y + PointTo.speed = 250 + PointTo.type = AI.Task.WaypointType.TURNING_POINT + PointTo.alt = OrbitHeight + PointTo.alt_type = AI.Task.AltitudeType.BARO + PointTo.task = EscortGroup:TaskOrbitCircleAtVec2( OrbitPoint, OrbitHeight, 0 ) + + local Points = { PointFrom, PointTo } + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + EscortGroup:SetTask( EscortGroup:TaskRoute( Points ) ) + EscortGroup:MessageToClient( "Orbiting at location.", 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._JoinUpAndFollow( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.Distance = MenuParam.ParamDistance + + self:JoinUpAndFollow( EscortGroup, EscortClient, self.Distance ) +end + +--- JoinsUp and Follows a CLIENT. +-- @param Escort#ESCORT self +-- @param Group#GROUP EscortGroup +-- @param Client#CLIENT EscortClient +-- @param DCSTypes#Distance Distance +function ESCORT:JoinUpAndFollow( EscortGroup, EscortClient, Distance ) + self:F( { EscortGroup, EscortClient, Distance } ) + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + self.EscortMode = ESCORT.MODE.FOLLOW + + self.CT1 = 0 + self.GT1 = 0 + --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + 1, .5 ) + self.FollowScheduler = SCHEDULER:New( self, self._FollowScheduler, { Distance }, 1, .5, .1 ) + EscortGroup:MessageToClient( "Rejoining and Following at " .. Distance .. "!", 30, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._Flare( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local Color = MenuParam.ParamColor + local Message = MenuParam.ParamMessage + + EscortGroup:GetUnit(1):Flare( Color ) + EscortGroup:MessageToClient( Message, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._Smoke( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local Color = MenuParam.ParamColor + local Message = MenuParam.ParamMessage + + EscortGroup:GetUnit(1):Smoke( Color ) + EscortGroup:MessageToClient( Message, 10, EscortClient ) +end + + +--- @param #MENUPARAM MenuParam +function ESCORT._ReportNearbyTargetsNow( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self:_ReportTargetsScheduler() + +end + +function ESCORT._SwitchReportNearbyTargets( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.ReportTargets = MenuParam.ParamReportTargets + + if self.ReportTargets then + if not self.ReportTargetsScheduler then + --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, 30 ) + self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, 30 ) + end + else + routines.removeFunction( self.ReportTargetsScheduler ) + self.ReportTargetsScheduler = nil + end +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ScanTargets( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local ScanDuration = MenuParam.ParamScanDuration + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + self:T( { "FollowScheduler after removefunction: ", self.FollowScheduler } ) + + if EscortGroup:IsHelicopter() then + SCHEDULER:New( EscortGroup, EscortGroup.PushTask, + { EscortGroup:TaskControlled( + EscortGroup:TaskOrbitCircle( 200, 20 ), + EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) + ) + }, + 1 + ) + elseif EscortGroup:IsAirPlane() then + SCHEDULER:New( EscortGroup, EscortGroup.PushTask, + { EscortGroup:TaskControlled( + EscortGroup:TaskOrbitCircle( 1000, 500 ), + EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) + ) + }, + 1 + ) + end + + EscortGroup:MessageToClient( "Scanning targets for " .. ScanDuration .. " seconds.", ScanDuration, EscortClient ) + + if self.EscortMode == ESCORT.MODE.FOLLOW then + --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + ScanDuration, 1 ) + self.FollowScheduler:Start() + end + +end + +function _Resume( EscortGroup ) + env.info( '_Resume' ) + + local Escort = EscortGroup.Escort -- #ESCORT + env.info( "EscortMode = " .. Escort.EscortMode ) + if Escort.EscortMode == ESCORT.MODE.FOLLOW then + Escort:JoinUpAndFollow( EscortGroup, Escort.EscortClient, Escort.Distance ) + end + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._AttackTarget( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + self:T( AttackUnit ) + + if EscortGroup:IsAir() then + EscortGroup:OptionROEOpenFire() + EscortGroup:OptionROTPassiveDefense() + EscortGroup.Escort = self -- Need to do this trick to get the reference for the escort in the _Resume function. +-- routines.scheduleFunction( +-- EscortGroup.PushTask, +-- { EscortGroup, +-- EscortGroup:TaskCombo( +-- { EscortGroup:TaskAttackUnit( AttackUnit ), +-- EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroup, + EscortGroup.PushTask, + { EscortGroup:TaskCombo( + { EscortGroup:TaskAttackUnit( AttackUnit ), + EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) + } + ) + }, 10 + ) + else +-- routines.scheduleFunction( +-- EscortGroup.PushTask, +-- { EscortGroup, +-- EscortGroup:TaskCombo( +-- { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroup, + EscortGroup.PushTask, + { EscortGroup:TaskCombo( + { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) + } + ) + }, 10 + ) + end + EscortGroup:MessageToClient( "Engaging Designated Unit!", 10, EscortClient ) + + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._AssistTarget( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + local EscortGroupAttack = MenuParam.ParamEscortGroup + local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + + self:T( AttackUnit ) + + if EscortGroupAttack:IsAir() then + EscortGroupAttack:OptionROEOpenFire() + EscortGroupAttack:OptionROTVertical() +-- routines.scheduleFunction( +-- EscortGroupAttack.PushTask, +-- { EscortGroupAttack, +-- EscortGroupAttack:TaskCombo( +-- { EscortGroupAttack:TaskAttackUnit( AttackUnit ), +-- EscortGroupAttack:TaskOrbitCircle( 500, 350 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHDULER:New( EscortGroupAttack, + EscortGroupAttack.PushTask, + { EscortGroupAttack:TaskCombo( + { EscortGroupAttack:TaskAttackUnit( AttackUnit ), + EscortGroupAttack:TaskOrbitCircle( 500, 350 ) + } + ) + }, 10 + ) + else +-- routines.scheduleFunction( +-- EscortGroupAttack.PushTask, +-- { EscortGroupAttack, +-- EscortGroupAttack:TaskCombo( +-- { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroupAttack, + EscortGroupAttack.PushTask, + { EscortGroupAttack:TaskCombo( + { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) + } + ) + }, 10 + ) + end + EscortGroupAttack:MessageToClient( "Assisting with the destroying the enemy unit!", 10, EscortClient ) + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ROE( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local EscortROEFunction = MenuParam.ParamFunction + local EscortROEMessage = MenuParam.ParamMessage + + pcall( function() EscortROEFunction() end ) + EscortGroup:MessageToClient( EscortROEMessage, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ROT( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local EscortROTFunction = MenuParam.ParamFunction + local EscortROTMessage = MenuParam.ParamMessage + + pcall( function() EscortROTFunction() end ) + EscortGroup:MessageToClient( EscortROTMessage, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ResumeMission( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local WayPoint = MenuParam.ParamWayPoint + + routines.removeFunction( self.FollowScheduler ) + self.FollowScheduler = nil + + local WayPoints = EscortGroup:GetTaskRoute() + self:T( WayPoint, WayPoints ) + + for WayPointIgnore = 1, WayPoint do + table.remove( WayPoints, 1 ) + end + + --routines.scheduleFunction( EscortGroup.SetTask, {EscortGroup, EscortGroup:TaskRoute( WayPoints ) }, timer.getTime() + 1 ) + SCHEDULER:New( EscortGroup, EscortGroup.SetTask, { EscortGroup:TaskRoute( WayPoints ) }, 1 ) + + EscortGroup:MessageToClient( "Resuming mission from waypoint " .. WayPoint .. ".", 10, EscortClient ) +end + +--- Registers the waypoints +-- @param #ESCORT self +-- @return #table +function ESCORT:RegisterRoute() + self:F() + + local EscortGroup = self.EscortGroup -- Group#GROUP + + local TaskPoints = EscortGroup:GetTaskRoute() + + self:T( TaskPoints ) + + return TaskPoints +end + +--- @param Escort#ESCORT self +function ESCORT:_FollowScheduler( FollowDistance ) + self:F( { FollowDistance }) + + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + + local ClientUnit = self.EscortClient:GetClientGroupUnit() + local GroupUnit = self.EscortGroup:GetUnit( 1 ) + + if self.CT1 == 0 and self.GT1 == 0 then + self.CV1 = ClientUnit:GetPointVec3() + self.CT1 = timer.getTime() + self.GV1 = GroupUnit:GetPointVec3() + self.GT1 = timer.getTime() + else + local CT1 = self.CT1 + local CT2 = timer.getTime() + local CV1 = self.CV1 + local CV2 = ClientUnit:GetPointVec3() + self.CT1 = CT2 + self.CV1 = CV2 + + local CD = ( ( CV2.x - CV1.x )^2 + ( CV2.y - CV1.y )^2 + ( CV2.z - CV1.z )^2 ) ^ 0.5 + local CT = CT2 - CT1 + + local CS = ( 3600 / CT ) * ( CD / 1000 ) + + self:T2( { "Client:", CS, CD, CT, CV2, CV1, CT2, CT1 } ) + + local GT1 = self.GT1 + local GT2 = timer.getTime() + local GV1 = self.GV1 + local GV2 = GroupUnit:GetPointVec3() + self.GT1 = GT2 + self.GV1 = GV2 + + local GD = ( ( GV2.x - GV1.x )^2 + ( GV2.y - GV1.y )^2 + ( GV2.z - GV1.z )^2 ) ^ 0.5 + local GT = GT2 - GT1 + + local GS = ( 3600 / GT ) * ( GD / 1000 ) + + self:T2( { "Group:", GS, GD, GT, GV2, GV1, GT2, GT1 } ) + + -- Calculate the group direction vector + local GV = { x = GV2.x - CV2.x, y = GV2.y - CV2.y, z = GV2.z - CV2.z } + + -- Calculate GH2, GH2 with the same height as CV2. + local GH2 = { x = GV2.x, y = CV2.y, z = GV2.z } + + -- Calculate the angle of GV to the orthonormal plane + local alpha = math.atan2( GV.z, GV.x ) + + -- Now we calculate the intersecting vector between the circle around CV2 with radius FollowDistance and GH2. + -- From the GeoGebra model: CVI = (x(CV2) + FollowDistance cos(alpha), y(GH2) + FollowDistance sin(alpha), z(CV2)) + local CVI = { x = CV2.x + FollowDistance * math.cos(alpha), + y = GH2.y, + z = CV2.z + FollowDistance * math.sin(alpha), + } + + -- Calculate the direction vector DV of the escort group. We use CVI as the base and CV2 as the direction. + local DV = { x = CV2.x - CVI.x, y = CV2.y - CVI.y, z = CV2.z - CVI.z } + + -- We now calculate the unary direction vector DVu, so that we can multiply DVu with the speed, which is expressed in meters / s. + -- We need to calculate this vector to predict the point the escort group needs to fly to according its speed. + -- The distance of the destination point should be far enough not to have the aircraft starting to swipe left to right... + local DVu = { x = DV.x / FollowDistance, y = DV.y / FollowDistance, z = DV.z / FollowDistance } + + -- Now we can calculate the group destination vector GDV. + local GDV = { x = DVu.x * CS * 8 + CVI.x, y = CVI.y, z = DVu.z * CS * 8 + CVI.z } + + --trigger.action.smoke( GDV, trigger.smokeColor.Red ) + self:T2( { "CV2:", CV2 } ) + self:T2( { "CVI:", CVI } ) + self:T2( { "GDV:", GDV } ) + + -- Measure distance between client and group + local CatchUpDistance = ( ( GDV.x - GV2.x )^2 + ( GDV.y - GV2.y )^2 + ( GDV.z - GV2.z )^2 ) ^ 0.5 + + -- The calculation of the Speed would simulate that the group would take 30 seconds to overcome + -- the requested Distance). + local Time = 10 + local CatchUpSpeed = ( CatchUpDistance - ( CS * 8.4 ) ) / Time + + local Speed = CS + CatchUpSpeed + if Speed < 0 then + Speed = 0 + end + + self:T( { "Client Speed, Escort Speed, Speed, FlyDistance, Time:", CS, GS, Speed, Distance, Time } ) + + -- Now route the escort to the desired point with the desired speed. + self.EscortGroup:TaskRouteToVec3( GDV, Speed / 3.6 ) -- DCS models speed in Mps (Miles per second) + end + return true + end + + return false +end + + +--- Report Targets Scheduler. +-- @param #ESCORT self +function ESCORT:_ReportTargetsScheduler() + self:F( self.EscortGroup:GetName() ) + + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + local EscortGroupName = self.EscortGroup:GetName() + local EscortTargets = self.EscortGroup:GetDetectedTargets() + + local ClientEscortTargets = self.EscortClient._EscortGroups[EscortGroupName].Targets + + local EscortTargetMessages = "" + for EscortTargetID, EscortTarget in pairs( EscortTargets ) do + local EscortObject = EscortTarget.object + self:T( EscortObject ) + if EscortObject and EscortObject:isExist() and EscortObject.id_ < 50000000 then + + local EscortTargetUnit = UNIT:Find( EscortObject ) + local EscortTargetUnitName = EscortTargetUnit:GetName() + + + + -- local EscortTargetIsDetected, + -- EscortTargetIsVisible, + -- EscortTargetLastTime, + -- EscortTargetKnowType, + -- EscortTargetKnowDistance, + -- EscortTargetLastPos, + -- EscortTargetLastVelocity + -- = self.EscortGroup:IsTargetDetected( EscortObject ) + -- + -- self:T( { EscortTargetIsDetected, + -- EscortTargetIsVisible, + -- EscortTargetLastTime, + -- EscortTargetKnowType, + -- EscortTargetKnowDistance, + -- EscortTargetLastPos, + -- EscortTargetLastVelocity } ) + + + local EscortTargetUnitPositionVec3 = EscortTargetUnit:GetPointVec3() + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + + ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + + ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + + self:T( { self.EscortGroup:GetName(), EscortTargetUnit:GetName(), Distance, EscortTarget } ) + + if Distance <= 15 then + + if not ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = {} + end + ClientEscortTargets[EscortTargetUnitName].AttackUnit = EscortTargetUnit + ClientEscortTargets[EscortTargetUnitName].visible = EscortTarget.visible + ClientEscortTargets[EscortTargetUnitName].type = EscortTarget.type + ClientEscortTargets[EscortTargetUnitName].distance = EscortTarget.distance + else + if ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = nil + end + end + end + end + + self:T( { "Sorting Targets Table:", ClientEscortTargets } ) + table.sort( ClientEscortTargets, function( a, b ) return a.Distance < b.Distance end ) + self:T( { "Sorted Targets Table:", ClientEscortTargets } ) + + -- Remove the sub menus of the Attack menu of the Escort for the EscortGroup. + self.EscortMenuAttackNearbyTargets:RemoveSubMenus() + + if self.EscortMenuTargetAssistance then + self.EscortMenuTargetAssistance:RemoveSubMenus() + end + + --for MenuIndex = 1, #self.EscortMenuAttackTargets do + -- self:T( { "Remove Menu:", self.EscortMenuAttackTargets[MenuIndex] } ) + -- self.EscortMenuAttackTargets[MenuIndex] = self.EscortMenuAttackTargets[MenuIndex]:Remove() + --end + + + if ClientEscortTargets then + for ClientEscortTargetUnitName, ClientEscortTargetData in pairs( ClientEscortTargets ) do + + for ClientEscortGroupName, EscortGroupData in pairs( self.EscortClient._EscortGroups ) do + + if ClientEscortTargetData and ClientEscortTargetData.AttackUnit:IsAlive() then + + local EscortTargetMessage = "" + local EscortTargetCategoryName = ClientEscortTargetData.AttackUnit:GetCategoryName() + local EscortTargetCategoryType = ClientEscortTargetData.AttackUnit:GetTypeName() + if ClientEscortTargetData.type then + EscortTargetMessage = EscortTargetMessage .. EscortTargetCategoryName .. " (" .. EscortTargetCategoryType .. ") at " + else + EscortTargetMessage = EscortTargetMessage .. "Unknown target at " + end + + local EscortTargetUnitPositionVec3 = ClientEscortTargetData.AttackUnit:GetPointVec3() + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + + ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + + ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + + self:T( { self.EscortGroup:GetName(), ClientEscortTargetData.AttackUnit:GetName(), Distance, ClientEscortTargetData.AttackUnit } ) + if ClientEscortTargetData.visible == false then + EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " estimated km" + else + EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " km" + end + + if ClientEscortTargetData.visible then + EscortTargetMessage = EscortTargetMessage .. ", visual" + end + + if ClientEscortGroupName == EscortGroupName then + + MENU_CLIENT_COMMAND:New( self.EscortClient, + EscortTargetMessage, + self.EscortMenuAttackNearbyTargets, + ESCORT._AttackTarget, + { ParamSelf = self, + ParamUnit = ClientEscortTargetData.AttackUnit + } + ) + EscortTargetMessages = EscortTargetMessages .. "\n - " .. EscortTargetMessage + else + if self.EscortMenuTargetAssistance then + local MenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, EscortGroupData.EscortName, self.EscortMenuTargetAssistance ) + MENU_CLIENT_COMMAND:New( self.EscortClient, + EscortTargetMessage, + MenuTargetAssistance, + ESCORT._AssistTarget, + { ParamSelf = self, + ParamEscortGroup = EscortGroupData.EscortGroup, + ParamUnit = ClientEscortTargetData.AttackUnit + } + ) + end + end + else + ClientEscortTargetData = nil + end + end + end + + if EscortTargetMessages ~= "" and self.ReportTargets == true then + self.EscortGroup:MessageToClient( "Detected targets within 15 km range:" .. EscortTargetMessages:gsub("\n$",""), 20, self.EscortClient ) + else + self.EscortGroup:MessageToClient( "No targets detected!", 20, self.EscortClient ) + end + end + + if self.EscortMenuResumeMission then + self.EscortMenuResumeMission:RemoveSubMenus() + + -- if self.EscortMenuResumeWayPoints then + -- for MenuIndex = 1, #self.EscortMenuResumeWayPoints do + -- self:T( { "Remove Menu:", self.EscortMenuResumeWayPoints[MenuIndex] } ) + -- self.EscortMenuResumeWayPoints[MenuIndex] = self.EscortMenuResumeWayPoints[MenuIndex]:Remove() + -- end + -- end + + local TaskPoints = self:RegisterRoute() + for WayPointID, WayPoint in pairs( TaskPoints ) do + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( WayPoint.x - EscortPositionVec3.x )^2 + + ( WayPoint.y - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + MENU_CLIENT_COMMAND:New( self.EscortClient, "Waypoint " .. WayPointID .. " at " .. string.format( "%.2f", Distance ).. "km", self.EscortMenuResumeMission, ESCORT._ResumeMission, { ParamSelf = self, ParamWayPoint = WayPointID } ) + end + end + return true + end + + return false +end +--- Provides missile training functions. +-- +-- @{#MISSILETRAINER} class +-- ======================== +-- 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. +-- +-- When running a mission where MISSILETRAINER is used, the following radio menu structure ( 'Radio Menu' -> 'Other (F10)' -> 'MissileTrainer' ) options are available for the players: +-- +-- * **Messages**: Menu to configure all messages. +-- * **Messages On**: Show all messages. +-- * **Messages Off**: Disable all messages. +-- * **Tracking**: Menu to configure missile tracking messages. +-- * **To All**: Shows missile tracking messages to all players. +-- * **To Target**: Shows missile tracking messages only to the player where the missile is targetted at. +-- * **Tracking On**: Show missile tracking messages. +-- * **Tracking Off**: Disable missile tracking messages. +-- * **Frequency Increase**: Increases the missile tracking message frequency with one second. +-- * **Frequency Decrease**: Decreases the missile tracking message frequency with one second. +-- * **Alerts**: Menu to configure alert messages. +-- * **To All**: Shows alert messages to all players. +-- * **To Target**: Shows alert messages only to the player where the missile is (was) targetted at. +-- * **Hits On**: Show missile hit alert messages. +-- * **Hits Off**: Disable missile hit alert messages. +-- * **Launches On**: Show missile launch messages. +-- * **Launches Off**: Disable missile launch messages. +-- * **Details**: Menu to configure message details. +-- * **Range On**: Shows range information when a missile is fired to a target. +-- * **Range Off**: Disable range information when a missile is fired to a target. +-- * **Bearing On**: Shows bearing information when a missile is fired to a target. +-- * **Bearing Off**: Disable bearing information when a missile is fired to a target. +-- * **Distance**: Menu to configure the distance when a missile needs to be destroyed when near to a player, during tracking. This will improve/influence hit calculation accuracy, but has the risk of damaging the aircraft when the missile reaches the aircraft before the distance is measured. +-- * **50 meter**: Destroys the missile when the distance to the aircraft is below or equal to 50 meter. +-- * **100 meter**: Destroys the missile when the distance to the aircraft is below or equal to 100 meter. +-- * **150 meter**: Destroys the missile when the distance to the aircraft is below or equal to 150 meter. +-- * **200 meter**: Destroys the missile when the distance to the aircraft is below or equal to 200 meter. +-- +-- +-- 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: +-- +-- * @{#MISSILETRAINER.InitMessagesOnOff}: Sets by default the display of any message to be ON or OFF. +-- * @{#MISSILETRAINER.InitTrackingToAll}: Sets by default the missile tracking report for all players or only for those missiles targetted to you. +-- * @{#MISSILETRAINER.InitTrackingOnOff}: Sets by default the display of missile tracking report to be ON or OFF. +-- * @{#MISSILETRAINER.InitTrackingFrequency}: Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. +-- * @{#MISSILETRAINER.InitAlertsToAll}: Sets by default the display of alerts to be shown to all players or only to you. +-- * @{#MISSILETRAINER.InitAlertsHitsOnOff}: Sets by default the display of hit alerts ON or OFF. +-- * @{#MISSILETRAINER.InitAlertsLaunchesOnOff}: Sets by default the display of launch alerts ON or OFF. +-- * @{#MISSILETRAINER.InitRangeOnOff}: Sets by default the display of range information of missiles ON of OFF. +-- * @{#MISSILETRAINER.InitBearingOnOff}: Sets by default the display of bearing information of missiles ON of OFF. +-- * @{#MISSILETRAINER.InitMenusOnOff}: Allows to configure the options through the radio menu. +-- +-- @module MissileTrainer +-- @author FlightControl + + +Include.File( "Client" ) +Include.File( "Scheduler" ) + +--- The MISSILETRAINER class +-- @type MISSILETRAINER +-- @extends Base#BASE +MISSILETRAINER = { + ClassName = "MISSILETRAINER", +} + +--- 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. +-- @param #MISSILETRAINER self +-- @param #number Distance The distance in meters when a tracked missile needs to be destroyed when close to a player. +-- @param #string Briefing (Optional) Will show a text to the players when starting their mission. Can be used for briefing purposes. +-- @return #MISSILETRAINER +function MISSILETRAINER:New( Distance, Briefing ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( Distance ) + + if Briefing then + self.Briefing = Briefing + end + + self.Schedulers = {} + self.SchedulerID = 0 + + self.MessageInterval = 2 + self.MessageLastTime = timer.getTime() + + self.Distance = Distance / 1000 + + _EVENTDISPATCHER:OnShot( self._EventShot, self ) + + self.DB = DATABASE:New():FilterStart() + self.DBClients = self.DB.Clients + self.DBUnits = self.DB.Units + + for ClientID, Client in pairs( self.DBClients ) do + + local function _Alive( Client ) + + if self.Briefing then + Client:Message( self.Briefing, 15, "HELLO WORLD", "Trainer" ) + end + + if self.MenusOnOff == true then + Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "MENU", "Trainer" ) + + Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) -- Menu#MENU_CLIENT + + Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu ) + Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } ) + Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } ) + + Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu ) + Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } ) + Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } ) + Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = true } ) + Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = false } ) + Client.MenuTrackIncrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Increase", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = -1 } ) + Client.MenuTrackDecrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Decrease", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = 1 } ) + + Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu ) + Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } ) + Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } ) + Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = true } ) + Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = false } ) + Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = true } ) + Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = false } ) + + Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu ) + Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = true } ) + Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = false } ) + Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = true } ) + Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = false } ) + + Client.MenuDistance = MENU_CLIENT:New( Client, "Set distance to plane", Client.MainMenu ) + Client.MenuDistance50 = MENU_CLIENT_COMMAND:New( Client, "50 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 50 / 1000 } ) + Client.MenuDistance100 = MENU_CLIENT_COMMAND:New( Client, "100 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 100 / 1000 } ) + Client.MenuDistance150 = MENU_CLIENT_COMMAND:New( Client, "150 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 150 / 1000 } ) + Client.MenuDistance200 = MENU_CLIENT_COMMAND:New( Client, "200 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 200 / 1000 } ) + else + if Client.MainMenu then + Client.MainMenu:Remove() + end + end + + + local ClientID = Client:GetID() + self:T( ClientID ) + if not self.TrackingMissiles[ClientID] then + self.TrackingMissiles[ClientID] = {} + end + self.TrackingMissiles[ClientID].Client = Client + if not self.TrackingMissiles[ClientID].MissileData then + self.TrackingMissiles[ClientID].MissileData = {} + end + end + + Client:Alive( _Alive ) + + end + +-- self.DB:ForEachClient( +-- --- @param Client#CLIENT Client +-- function( Client ) +-- +-- ... actions ... +-- +-- end +-- ) + + self.MessagesOnOff = true + + self.TrackingToAll = false + self.TrackingOnOff = true + self.TrackingFrequency = 3 + + self.AlertsToAll = true + self.AlertsHitsOnOff = true + self.AlertsLaunchesOnOff = true + + self.DetailsRangeOnOff = true + self.DetailsBearingOnOff = true + + self.MenusOnOff = true + + self.TrackingMissiles = {} + + self.TrackingScheduler = SCHEDULER:New( self, self._TrackMissiles, {}, 0.5, 0.05, 0 ) + + return self +end + +-- Initialization methods. + + +--- Sets by default the display of any message to be ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean MessagesOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitMessagesOnOff( MessagesOnOff ) + self:F( MessagesOnOff ) + + self.MessagesOnOff = MessagesOnOff + if self.MessagesOnOff == true then + MESSAGE:New( "Messages ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Messages OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the missile tracking report for all players or only for those missiles targetted to you. +-- @param #MISSILETRAINER self +-- @param #boolean TrackingToAll true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingToAll( TrackingToAll ) + self:F( TrackingToAll ) + + self.TrackingToAll = TrackingToAll + if self.TrackingToAll == true then + MESSAGE:New( "Missile tracking to all players ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Missile tracking to all players OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of missile tracking report to be ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean TrackingOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingOnOff( TrackingOnOff ) + self:F( TrackingOnOff ) + + self.TrackingOnOff = TrackingOnOff + if self.TrackingOnOff == true then + MESSAGE:New( "Missile tracking ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Missile tracking OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. +-- The default frequency is a 3 second interval, so the Tracking Frequency parameter specifies the increase or decrease from the default 3 seconds or the last frequency update. +-- @param #MISSILETRAINER self +-- @param #number TrackingFrequency Provide a negative or positive value in seconds to incraese or decrease the display frequency. +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingFrequency( TrackingFrequency ) + self:F( TrackingFrequency ) + + self.TrackingFrequency = self.TrackingFrequency + TrackingFrequency + if self.TrackingFrequency < 0.5 then + self.TrackingFrequency = 0.5 + end + if self.TrackingFrequency then + MESSAGE:New( "Missile tracking frequency is " .. self.TrackingFrequency .. " seconds.", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of alerts to be shown to all players or only to you. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsToAll true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsToAll( AlertsToAll ) + self:F( AlertsToAll ) + + self.AlertsToAll = AlertsToAll + if self.AlertsToAll == true then + MESSAGE:New( "Alerts to all players ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts to all players OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of hit alerts ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsHitsOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsHitsOnOff( AlertsHitsOnOff ) + self:F( AlertsHitsOnOff ) + + self.AlertsHitsOnOff = AlertsHitsOnOff + if self.AlertsHitsOnOff == true then + MESSAGE:New( "Alerts Hits ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts Hits OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of launch alerts ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsLaunchesOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsLaunchesOnOff( AlertsLaunchesOnOff ) + self:F( AlertsLaunchesOnOff ) + + self.AlertsLaunchesOnOff = AlertsLaunchesOnOff + if self.AlertsLaunchesOnOff == true then + MESSAGE:New( "Alerts Launches ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts Launches OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of range information of missiles ON of OFF. +-- @param #MISSILETRAINER self +-- @param #boolean DetailsRangeOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitRangeOnOff( DetailsRangeOnOff ) + self:F( DetailsRangeOnOff ) + + self.DetailsRangeOnOff = DetailsRangeOnOff + if self.DetailsRangeOnOff == true then + MESSAGE:New( "Range display ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Range display OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of bearing information of missiles ON of OFF. +-- @param #MISSILETRAINER self +-- @param #boolean DetailsBearingOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitBearingOnOff( DetailsBearingOnOff ) + self:F( DetailsBearingOnOff ) + + self.DetailsBearingOnOff = DetailsBearingOnOff + if self.DetailsBearingOnOff == true then + MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Enables / Disables the menus. +-- @param #MISSILETRAINER self +-- @param #boolean MenusOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitMenusOnOff( MenusOnOff ) + self:F( MenusOnOff ) + + self.MenusOnOff = MenusOnOff + if self.MenusOnOff == true then + MESSAGE:New( "Menus are ENABLED (only when a player rejoins a slot)", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Menus are DISABLED", "Menu", 15, "ID" ):ToAll() + end + + return self +end + + +-- Menu functions + +function MISSILETRAINER._MenuMessages( MenuParameters ) + + local self = MenuParameters.MenuSelf + + if MenuParameters.MessagesOnOff ~= nil then + self:InitMessagesOnOff( MenuParameters.MessagesOnOff ) + end + + if MenuParameters.TrackingToAll ~= nil then + self:InitTrackingToAll( MenuParameters.TrackingToAll ) + end + + if MenuParameters.TrackingOnOff ~= nil then + self:InitTrackingOnOff( MenuParameters.TrackingOnOff ) + end + + if MenuParameters.TrackingFrequency ~= nil then + self:InitTrackingFrequency( MenuParameters.TrackingFrequency ) + end + + if MenuParameters.AlertsToAll ~= nil then + self:InitAlertsToAll( MenuParameters.AlertsToAll ) + end + + if MenuParameters.AlertsHitsOnOff ~= nil then + self:InitAlertsHitsOnOff( MenuParameters.AlertsHitsOnOff ) + end + + if MenuParameters.AlertsLaunchesOnOff ~= nil then + self:InitAlertsLaunchesOnOff( MenuParameters.AlertsLaunchesOnOff ) + end + + if MenuParameters.DetailsRangeOnOff ~= nil then + self:InitRangeOnOff( MenuParameters.DetailsRangeOnOff ) + end + + if MenuParameters.DetailsBearingOnOff ~= nil then + self:InitBearingOnOff( MenuParameters.DetailsBearingOnOff ) + end + + if MenuParameters.Distance ~= nil then + self.Distance = MenuParameters.Distance + MESSAGE:New( "Hit detection distance set to " .. self.Distance .. " meters", "Menu", 15, "ID" ):ToAll() + end + +end + +--- 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. +-- @param #MISSILETRAINER self +-- @param Event#EVENTDATA Event +function MISSILETRAINER:_EventShot( Event ) + self:F( { Event } ) + + local TrainerSourceDCSUnit = Event.IniDCSUnit + local TrainerSourceDCSUnitName = Event.IniDCSUnitName + local TrainerWeapon = Event.Weapon -- Identify the weapon fired + local TrainerWeaponName = Event.WeaponName -- return weapon type + + self:T( "Missile Launched = " .. TrainerWeaponName ) + + local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target + local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit ) + local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill + + self:T(TrainerTargetDCSUnitName ) + + local Client = self.DBClients[TrainerTargetDCSUnitName] + if Client then + + local TrainerSourceUnit = UNIT:Find( TrainerSourceDCSUnit ) + local TrainerTargetUnit = UNIT:Find( TrainerTargetDCSUnit ) + + if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then + + local Message = MESSAGE:New( + string.format( "%s launched a %s", + TrainerSourceUnit:GetTypeName(), + TrainerWeaponName + ) .. self:_AddRange( Client, TrainerWeapon ) .. self:_AddBearing( Client, TrainerWeapon ),"Launch Alert", 5, "ID" ) + + if self.AlertsToAll then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + + local ClientID = Client:GetID() + local MissileData = {} + MissileData.TrainerSourceUnit = TrainerSourceUnit + MissileData.TrainerWeapon = TrainerWeapon + MissileData.TrainerTargetUnit = TrainerTargetUnit + MissileData.TrainerWeaponTypeName = TrainerWeapon:getTypeName() + MissileData.TrainerWeaponLaunched = true + table.insert( self.TrackingMissiles[ClientID].MissileData, MissileData ) + --self:T( self.TrackingMissiles ) + end +end + +function MISSILETRAINER:_AddRange( Client, TrainerWeapon ) + + local RangeText = "" + + if self.DetailsRangeOnOff then + + local PositionMissile = TrainerWeapon:getPoint() + local PositionTarget = Client:GetPointVec3() + + local Range = ( ( PositionMissile.x - PositionTarget.x )^2 + + ( PositionMissile.y - PositionTarget.y )^2 + + ( PositionMissile.z - PositionTarget.z )^2 + ) ^ 0.5 / 1000 + + RangeText = string.format( ", at %4.2fkm", Range ) + end + + return RangeText +end + +function MISSILETRAINER:_AddBearing( Client, TrainerWeapon ) + + local BearingText = "" + + if self.DetailsBearingOnOff then + + local PositionMissile = TrainerWeapon:getPoint() + local PositionTarget = Client:GetPointVec3() + + self:T2( { PositionTarget, PositionMissile }) + + local DirectionVector = { x = PositionMissile.x - PositionTarget.x, y = PositionMissile.y - PositionTarget.y, z = PositionMissile.z - PositionTarget.z } + local DirectionRadians = math.atan2( DirectionVector.z, DirectionVector.x ) + --DirectionRadians = DirectionRadians + routines.getNorthCorrection( PositionTarget ) + if DirectionRadians < 0 then + DirectionRadians = DirectionRadians + 2 * math.pi + end + local DirectionDegrees = DirectionRadians * 180 / math.pi + + BearingText = string.format( ", %d degrees", DirectionDegrees ) + end + + return BearingText +end + + +function MISSILETRAINER:_TrackMissiles() + self:F2() + + + local ShowMessages = false + if self.MessagesOnOff and self.MessageLastTime + self.TrackingFrequency <= timer.getTime() then + self.MessageLastTime = timer.getTime() + ShowMessages = true + end + + -- ALERTS PART + + -- Loop for all Player Clients to check the alerts and deletion of missiles. + for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do + + local Client = ClientData.Client + self:T2( { Client:GetName() } ) + + for MissileDataID, MissileData in pairs( ClientData.MissileData ) do + self:T3( MissileDataID ) + + local TrainerSourceUnit = MissileData.TrainerSourceUnit + local TrainerWeapon = MissileData.TrainerWeapon + local TrainerTargetUnit = MissileData.TrainerTargetUnit + local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName + local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched + + if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then + local PositionMissile = TrainerWeapon:getPosition().p + local PositionTarget = Client:GetPointVec3() + + local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 + + ( PositionMissile.y - PositionTarget.y )^2 + + ( PositionMissile.z - PositionTarget.z )^2 + ) ^ 0.5 / 1000 + + if Distance <= self.Distance then + -- Hit alert + TrainerWeapon:destroy() + if self.MessagesOnOff == true and self.AlertsHitsOnOff == true then + + self:T( "killed" ) + + local Message = MESSAGE:New( + string.format( "%s launched by %s killed %s", + TrainerWeapon:getTypeName(), + TrainerSourceUnit:GetTypeName(), + TrainerTargetUnit:GetPlayerName() + ),"Hit Alert", 15, "ID" ) + + if self.AlertsToAll == true then + Message:ToAll() + else + Message:ToClient( Client ) + end + + MissileData = nil + table.remove( ClientData.MissileData, MissileDataID ) + self:T(ClientData.MissileData) + end + end + else + if not ( TrainerWeapon and TrainerWeapon:isExist() ) then + if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then + -- Weapon does not exist anymore. Delete from Table + local Message = MESSAGE:New( + string.format( "%s launched by %s self destructed!", + TrainerWeaponTypeName, + TrainerSourceUnit:GetTypeName() + ),"Tracking", 5, "ID" ) + + if self.AlertsToAll == true then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + MissileData = nil + table.remove( ClientData.MissileData, MissileDataID ) + self:T( ClientData.MissileData ) + end + end + end + end + + if ShowMessages == true and self.MessagesOnOff == true and self.TrackingOnOff == true then -- Only do this when tracking information needs to be displayed. + + -- TRACKING PART + + -- For the current client, the missile range and bearing details are displayed To the Player Client. + -- For the other clients, the missile range and bearing details are displayed To the other Player Clients. + -- To achieve this, a cross loop is done for each Player Client <-> Other Player Client missile information. + + -- Main Player Client loop + for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do + + local Client = ClientData.Client + self:T2( { Client:GetName() } ) + + + ClientData.MessageToClient = "" + ClientData.MessageToAll = "" + + -- Other Players Client loop + for TrackingDataID, TrackingData in pairs( self.TrackingMissiles ) do + + for MissileDataID, MissileData in pairs( TrackingData.MissileData ) do + self:T3( MissileDataID ) + + local TrainerSourceUnit = MissileData.TrainerSourceUnit + local TrainerWeapon = MissileData.TrainerWeapon + local TrainerTargetUnit = MissileData.TrainerTargetUnit + local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName + local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched + + if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then + + if ShowMessages == true then + local TrackingTo + TrackingTo = string.format( " -> %s", + TrainerWeaponTypeName + ) + + if ClientDataID == TrackingDataID then + if ClientData.MessageToClient == "" then + ClientData.MessageToClient = "Missiles to You:\n" + end + ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. "\n" + else + if self.TrackingToAll == true then + if ClientData.MessageToAll == "" then + ClientData.MessageToAll = "Missiles to other Players:\n" + end + ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. " ( " .. TrainerTargetUnit:GetPlayerName() .. " )\n" + end + end + end + end + end + end + + -- Once the Player Client and the Other Player Client tracking messages are prepared, show them. + if ClientData.MessageToClient ~= "" or ClientData.MessageToAll ~= "" then + local Message = MESSAGE:New( ClientData.MessageToClient .. ClientData.MessageToAll, "Tracking", 1, "ID" ):ToClient( Client ) + end + end + end + + return true +end +env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index d4c566d6b..6339b2e01 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,6 +1,5 @@ -env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160527_1003' ) - +env.info( '*** MOOSE STATIC INCLUDE START *** ' ) +env.info( 'Moose Generation Timestamp: 20160527_1334' ) local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) @@ -12,27 +11,9 @@ Include.Path = function() end Include.File = function( IncludeFile ) - if not Include.Files[ IncludeFile ] then - Include.Files[IncludeFile] = IncludeFile - env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath ) - local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) ) - if f == nil then - env.info( "Include:" .. IncludeFile .. " from " .. Include.MissionPath ) - local f = assert( base.loadfile( Include.MissionPath .. IncludeFile .. ".lua" ) ) - if f == nil then - error ("Could not load MOOSE file " .. IncludeFile .. ".lua" ) - else - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.MissionPath ) - return f() - end - else - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath ) - return f() - end - end end -Include.ProgramPath = "Scripts/Moose/" +Include.ProgramPath = "Scripts/Moose/Moose/" Include.MissionPath = Include.Path() env.info( "Include.ProgramPath = " .. Include.ProgramPath) @@ -42,4 +23,16636 @@ Include.Files = {} Include.File( "Moose" ) -env.info("Loaded MOOSE Include Engine")env.info( '*** MOOSE INCLUDE END *** ' ) +env.info("Loaded MOOSE Include Engine") +--- Various routines +-- @module routines +-- @author Flightcontrol + +--Include.File( "Trace" ) +--Include.File( "Message" ) + + +env.setErrorMessageBoxEnabled(false) + +--- Extract of MIST functions. +-- @author Grimes + +routines = {} + + +-- don't change these +routines.majorVersion = 3 +routines.minorVersion = 3 +routines.build = 22 + +----------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------- +-- Utils- conversion, Lua utils, etc. +routines.utils = {} + +--from http://lua-users.org/wiki/CopyTable +routines.utils.deepCopy = function(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(object)) + end + local objectreturn = _copy(object) + return objectreturn +end + + +-- porting in Slmod's serialize_slmod2 +routines.utils.oneLineSerialize = function(tbl) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function + + lookup_table = {} + + local function _Serialize( tbl ) + + if type(tbl) == 'table' then --function only works for tables! + + if lookup_table[tbl] then + return lookup_table[object] + end + + local tbl_str = {} + + lookup_table[tbl] = tbl_str + + tbl_str[#tbl_str + 1] = '{' + + for ind,val in pairs(tbl) do -- serialize its fields + local ind_str = {} + if type(ind) == "number" then + ind_str[#ind_str + 1] = '[' + ind_str[#ind_str + 1] = tostring(ind) + ind_str[#ind_str + 1] = ']=' + else --must be a string + ind_str[#ind_str + 1] = '[' + ind_str[#ind_str + 1] = routines.utils.basicSerialize(ind) + ind_str[#ind_str + 1] = ']=' + end + + local val_str = {} + if ((type(val) == 'number') or (type(val) == 'boolean')) then + val_str[#val_str + 1] = tostring(val) + val_str[#val_str + 1] = ',' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'string' then + val_str[#val_str + 1] = routines.utils.basicSerialize(val) + val_str[#val_str + 1] = ',' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'nil' then -- won't ever happen, right? + val_str[#val_str + 1] = 'nil,' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'table' then + if ind == "__index" then + -- tbl_str[#tbl_str + 1] = "__index" + -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it + else + + val_str[#val_str + 1] = _Serialize(val) + val_str[#val_str + 1] = ',' --I think this is right, I just added it + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + end + elseif type(val) == 'function' then + -- tbl_str[#tbl_str + 1] = "function " .. tostring(ind) + -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it + else +-- env.info('unable to serialize value type ' .. routines.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind)) +-- env.info( debug.traceback() ) + end + + end + tbl_str[#tbl_str + 1] = '}' + return table.concat(tbl_str) + else + return tostring(tbl) + end + end + + local objectreturn = _Serialize(tbl) + return objectreturn +end + +--porting in Slmod's "safestring" basic serialize +routines.utils.basicSerialize = function(s) + if s == nil then + return "\"\"" + else + if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then + return tostring(s) + elseif type(s) == 'string' then + s = string.format('%q', s) + return s + end + end +end + + +routines.utils.toDegree = function(angle) + return angle*180/math.pi +end + +routines.utils.toRadian = function(angle) + return angle*math.pi/180 +end + +routines.utils.metersToNM = function(meters) + return meters/1852 +end + +routines.utils.metersToFeet = function(meters) + return meters/0.3048 +end + +routines.utils.NMToMeters = function(NM) + return NM*1852 +end + +routines.utils.feetToMeters = function(feet) + return feet*0.3048 +end + +routines.utils.mpsToKnots = function(mps) + return mps*3600/1852 +end + +routines.utils.mpsToKmph = function(mps) + return mps*3.6 +end + +routines.utils.knotsToMps = function(knots) + return knots*1852/3600 +end + +routines.utils.kmphToMps = function(kmph) + return kmph/3.6 +end + +function routines.utils.makeVec2(Vec3) + if Vec3.z then + return {x = Vec3.x, y = Vec3.z} + else + return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. + end +end + +function routines.utils.makeVec3(Vec2, y) + if not Vec2.z then + if not y then + y = 0 + end + return {x = Vec2.x, y = y, z = Vec2.y} + else + return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. + end +end + +function routines.utils.makeVec3GL(Vec2, offset) + local adj = offset or 0 + + if not Vec2.z then + return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} + else + return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} + end +end + +routines.utils.zoneToVec3 = function(zone) + local new = {} + if type(zone) == 'table' and zone.point then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + elseif type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + if zone then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + end + end +end + +-- gets heading-error corrected direction from point along vector vec. +function routines.utils.getDir(vec, point) + local dir = math.atan2(vec.z, vec.x) + dir = dir + routines.getNorthCorrection(point) + if dir < 0 then + dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi + end + return dir +end + +-- gets distance in meters between two points (2 dimensional) +function routines.utils.get2DDist(point1, point2) + point1 = routines.utils.makeVec3(point1) + point2 = routines.utils.makeVec3(point2) + return routines.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) +end + +-- gets distance in meters between two points (3 dimensional) +function routines.utils.get3DDist(point1, point2) + return routines.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) +end + + + +-- From http://lua-users.org/wiki/SimpleRound +-- use negative idp for rounding ahead of decimal place, positive for rounding after decimal place +routines.utils.round = function(num, idp) + local mult = 10^(idp or 0) + return math.floor(num * mult + 0.5) / mult +end + +-- porting in Slmod's dostring +routines.utils.dostring = function(s) + local f, err = loadstring(s) + if f then + return true, f() + else + return false, err + end +end + + +--3D Vector manipulation +routines.vec = {} + +routines.vec.add = function(vec1, vec2) + return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} +end + +routines.vec.sub = function(vec1, vec2) + return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} +end + +routines.vec.scalarMult = function(vec, mult) + return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} +end + +routines.vec.scalar_mult = routines.vec.scalarMult + +routines.vec.dp = function(vec1, vec2) + return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z +end + +routines.vec.cp = function(vec1, vec2) + return { x = vec1.y*vec2.z - vec1.z*vec2.y, y = vec1.z*vec2.x - vec1.x*vec2.z, z = vec1.x*vec2.y - vec1.y*vec2.x} +end + +routines.vec.mag = function(vec) + return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 +end + +routines.vec.getUnitVec = function(vec) + local mag = routines.vec.mag(vec) + return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } +end + +routines.vec.rotateVec2 = function(vec2, theta) + return { x = vec2.x*math.cos(theta) - vec2.y*math.sin(theta), y = vec2.x*math.sin(theta) + vec2.y*math.cos(theta)} +end +--------------------------------------------------------------------------------------------------------------------------- + + + + +-- acc- the accuracy of each easting/northing. 0, 1, 2, 3, 4, or 5. +routines.tostringMGRS = function(MGRS, acc) + if acc == 0 then + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph + else + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Easting/(10^(5-acc)), 0)) + .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Northing/(10^(5-acc)), 0)) + end +end + +--[[acc: +in DM: decimal point of minutes. +In DMS: decimal point of seconds. +position after the decimal of the least significant digit: +So: +42.32 - acc of 2. +]] +routines.tostringLL = function(lat, lon, acc, DMS) + + local latHemi, lonHemi + if lat > 0 then + latHemi = 'N' + else + latHemi = 'S' + end + + if lon > 0 then + lonHemi = 'E' + else + lonHemi = 'W' + end + + lat = math.abs(lat) + lon = math.abs(lon) + + local latDeg = math.floor(lat) + local latMin = (lat - latDeg)*60 + + local lonDeg = math.floor(lon) + local lonMin = (lon - lonDeg)*60 + + if DMS then -- degrees, minutes, and seconds. + local oldLatMin = latMin + latMin = math.floor(latMin) + local latSec = routines.utils.round((oldLatMin - latMin)*60, acc) + + local oldLonMin = lonMin + lonMin = math.floor(lonMin) + local lonSec = routines.utils.round((oldLonMin - lonMin)*60, acc) + + if latSec == 60 then + latSec = 0 + latMin = latMin + 1 + end + + if lonSec == 60 then + lonSec = 0 + lonMin = lonMin + 1 + end + + local secFrmtStr -- create the formatting string for the seconds place + if acc <= 0 then -- no decimal place. + secFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + secFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format('%02d', latMin) .. '\' ' .. string.format(secFrmtStr, latSec) .. '"' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format('%02d', lonMin) .. '\' ' .. string.format(secFrmtStr, lonSec) .. '"' .. lonHemi + + else -- degrees, decimal minutes. + latMin = routines.utils.round(latMin, acc) + lonMin = routines.utils.round(lonMin, acc) + + if latMin == 60 then + latMin = 0 + latDeg = latDeg + 1 + end + + if lonMin == 60 then + lonMin = 0 + lonDeg = lonDeg + 1 + end + + local minFrmtStr -- create the formatting string for the minutes place + if acc <= 0 then -- no decimal place. + minFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + minFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format(minFrmtStr, latMin) .. '\'' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format(minFrmtStr, lonMin) .. '\'' .. lonHemi + + end +end + +--[[ required: az - radian + required: dist - meters + optional: alt - meters (set to false or nil if you don't want to use it). + optional: metric - set true to get dist and alt in km and m. + precision will always be nearest degree and NM or km.]] +routines.tostringBR = function(az, dist, alt, metric) + az = routines.utils.round(routines.utils.toDegree(az), 0) + + if metric then + dist = routines.utils.round(dist/1000, 2) + else + dist = routines.utils.round(routines.utils.metersToNM(dist), 2) + end + + local s = string.format('%03d', az) .. ' for ' .. dist + + if alt then + if metric then + s = s .. ' at ' .. routines.utils.round(alt, 0) + else + s = s .. ' at ' .. routines.utils.round(routines.utils.metersToFeet(alt), 0) + end + end + return s +end + +routines.getNorthCorrection = function(point) --gets the correction needed for true north + if not point.z then --Vec2; convert to Vec3 + point.z = point.y + point.y = 0 + end + local lat, lon = coord.LOtoLL(point) + local north_posit = coord.LLtoLO(lat + 1, lon) + return math.atan2(north_posit.z - point.z, north_posit.x - point.x) +end + + +-- the main area +do + -- THE MAIN FUNCTION -- Accessed 100 times/sec. + routines.main = function() + timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) --reschedule first in case of Lua error + ---------------------------------------------------------------------------------------------------------- + --area to add new stuff in + + routines.do_scheduled_functions() + end -- end of routines.main + + timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) + +end + + +do + local idNum = 0 + + --Simplified event handler + routines.addEventHandler = function(f) --id is optional! + local handler = {} + idNum = idNum + 1 + handler.id = idNum + handler.f = f + handler.onEvent = function(self, event) + self.f(event) + end + world.addEventHandler(handler) + end + + routines.removeEventHandler = function(id) + for key, handler in pairs(world.eventHandlers) do + if handler.id and handler.id == id then + world.eventHandlers[key] = nil + return true + end + end + return false + end +end + +-- need to return a Vec3 or Vec2? +function routines.getRandPointInCircle(point, radius, innerRadius) + local theta = 2*math.pi*math.random() + local rad = math.random() + math.random() + if rad > 1 then + rad = 2 - rad + end + + local radMult + if innerRadius and innerRadius <= radius then + radMult = (radius - innerRadius)*rad + innerRadius + else + radMult = radius*rad + end + + if not point.z then --might as well work with vec2/3 + point.z = point.y + end + + local rndCoord + if radius > 0 then + rndCoord = {x = math.cos(theta)*radMult + point.x, y = math.sin(theta)*radMult + point.z} + else + rndCoord = {x = point.x, y = point.z} + end + return rndCoord +end + +routines.goRoute = function(group, path) + local misTask = { + id = 'Mission', + params = { + route = { + points = routines.utils.deepCopy(path), + }, + }, + } + if type(group) == 'string' then + group = Group.getByName(group) + end + local groupCon = group:getController() + if groupCon then + groupCon:setTask(misTask) + return true + end + + Controller.setTask(groupCon, misTask) + return false +end + + +-- Useful atomic functions from mist, ported. + +routines.ground = {} +routines.fixedWing = {} +routines.heli = {} + +routines.ground.buildWP = function(point, overRideForm, overRideSpeed) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + local form, speed + + if point.speed and not overRideSpeed then + wp.speed = point.speed + elseif type(overRideSpeed) == 'number' then + wp.speed = overRideSpeed + else + wp.speed = routines.utils.kmphToMps(20) + end + + if point.form and not overRideForm then + form = point.form + else + form = overRideForm + end + + if not form then + wp.action = 'Cone' + else + form = string.lower(form) + if form == 'off_road' or form == 'off road' then + wp.action = 'Off Road' + elseif form == 'on_road' or form == 'on road' then + wp.action = 'On Road' + elseif form == 'rank' or form == 'line_abrest' or form == 'line abrest' or form == 'lineabrest'then + wp.action = 'Rank' + elseif form == 'cone' then + wp.action = 'Cone' + elseif form == 'diamond' then + wp.action = 'Diamond' + elseif form == 'vee' then + wp.action = 'Vee' + elseif form == 'echelon_left' or form == 'echelon left' or form == 'echelonl' then + wp.action = 'EchelonL' + elseif form == 'echelon_right' or form == 'echelon right' or form == 'echelonr' then + wp.action = 'EchelonR' + else + wp.action = 'Cone' -- if nothing matched + end + end + + wp.type = 'Turning Point' + + return wp + +end + +routines.fixedWing.buildWP = function(point, WPtype, speed, alt, altType) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 2000 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = routines.utils.kmphToMps(500) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp +end + +routines.heli.buildWP = function(point, WPtype, speed, alt, altType) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 500 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = routines.utils.kmphToMps(200) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp +end + +routines.groupToRandomPoint = function(vars) + local group = vars.group --Required + local point = vars.point --required + local radius = vars.radius or 0 + local innerRadius = vars.innerRadius + local form = vars.form or 'Cone' + local heading = vars.heading or math.random()*2*math.pi + local headingDegrees = vars.headingDegrees + local speed = vars.speed or routines.utils.kmphToMps(20) + + + local useRoads + if not vars.disableRoads then + useRoads = true + else + useRoads = false + end + + local path = {} + + if headingDegrees then + heading = headingDegrees*math.pi/180 + end + + if heading >= 2*math.pi then + heading = heading - 2*math.pi + end + + local rndCoord = routines.getRandPointInCircle(point, radius, innerRadius) + + local offset = {} + local posStart = routines.getLeadPos(group) + + offset.x = routines.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) + offset.z = routines.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) + path[#path + 1] = routines.ground.buildWP(posStart, form, speed) + + + if useRoads == true and ((point.x - posStart.x)^2 + (point.z - posStart.z)^2)^0.5 > radius * 1.3 then + path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 11, ['z'] = posStart.z + 11}, 'off_road', speed) + path[#path + 1] = routines.ground.buildWP(posStart, 'on_road', speed) + path[#path + 1] = routines.ground.buildWP(offset, 'on_road', speed) + else + path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 25, ['z'] = posStart.z + 25}, form, speed) + end + + path[#path + 1] = routines.ground.buildWP(offset, form, speed) + path[#path + 1] = routines.ground.buildWP(rndCoord, form, speed) + + routines.goRoute(group, path) + + return +end + +routines.groupRandomDistSelf = function(gpData, dist, form, heading, speed) + local pos = routines.getLeadPos(gpData) + local fakeZone = {} + fakeZone.radius = dist or math.random(300, 1000) + fakeZone.point = {x = pos.x, y, pos.y, z = pos.z} + routines.groupToRandomZone(gpData, fakeZone, form, heading, speed) + + return +end + +routines.groupToRandomZone = function(gpData, zone, form, heading, speed) + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + if type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + elseif type(zone) == 'table' and not zone.radius then + zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + end + + if speed then + speed = routines.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.radius = zone.radius + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.point = routines.utils.zoneToVec3(zone) + + routines.groupToRandomPoint(vars) + + return +end + +routines.isTerrainValid = function(coord, terrainTypes) -- vec2/3 and enum or table of acceptable terrain types + if coord.z then + coord.y = coord.z + end + local typeConverted = {} + + if type(terrainTypes) == 'string' then -- if its a string it does this check + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(terrainTypes) or string.lower(constData) == string.lower(terrainTypes) then + table.insert(typeConverted, constId) + end + end + elseif type(terrainTypes) == 'table' then -- if its a table it does this check + for typeId, typeData in pairs(terrainTypes) do + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(typeData) or string.lower(constData) == string.lower(typeId) then + table.insert(typeConverted, constId) + end + end + end + end + for validIndex, validData in pairs(typeConverted) do + if land.getSurfaceType(coord) == land.SurfaceType[validData] then + return true + end + end + return false +end + +routines.groupToPoint = function(gpData, point, form, heading, speed, useRoads) + if type(point) == 'string' then + point = trigger.misc.getZone(point) + end + if speed then + speed = routines.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.disableRoads = useRoads + vars.point = routines.utils.zoneToVec3(point) + routines.groupToRandomPoint(vars) + + return +end + + +routines.getLeadPos = function(group) + if type(group) == 'string' then -- group name + group = Group.getByName(group) + end + + local units = group:getUnits() + + local leader = units[1] + if not leader then -- SHOULD be good, but if there is a bug, this code future-proofs it then. + local lowestInd = math.huge + for ind, unit in pairs(units) do + if ind < lowestInd then + lowestInd = ind + leader = unit + end + end + end + if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... + return leader:getPosition().p + end +end + +--[[ vars for routines.getMGRSString: +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +]] +routines.getMGRSString = function(vars) + local units = vars.units + local acc = vars.acc or 5 + local avgPos = routines.getAvgPos(units) + if avgPos then + return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) + end +end + +--[[ vars for routines.getLLString +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer, number of numbers after decimal place +vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. + + +]] +routines.getLLString = function(vars) + local units = vars.units + local acc = vars.acc or 3 + local DMS = vars.DMS + local avgPos = routines.getAvgPos(units) + if avgPos then + local lat, lon = coord.LOtoLL(avgPos) + return routines.tostringLL(lat, lon, acc, DMS) + end +end + +--[[ +vars.zone - table of a zone name. +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +]] +routines.getBRStringZone = function(vars) + local zone = trigger.misc.getZone( vars.zone ) + local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + if zone then + local vec = {x = zone.point.x - ref.x, y = zone.point.y - ref.y, z = zone.point.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(zone.point, ref) + if alt then + alt = zone.y + end + return routines.tostringBR(dir, dist, alt, metric) + else + env.info( 'routines.getBRStringZone: error: zone is nil' ) + end +end + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +]] +routines.getBRString = function(vars) + local units = vars.units + local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + local avgPos = routines.getAvgPos(units) + if avgPos then + local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(avgPos, ref) + if alt then + alt = avgPos.y + end + return routines.tostringBR(dir, dist, alt, metric) + end +end + + +-- Returns the Vec3 coordinates of the average position of the concentration of units most in the heading direction. +--[[ vars for routines.getLeadingPos: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +]] +routines.getLeadingPos = function(vars) + local units = vars.units + local heading = vars.heading + local radius = vars.radius + if vars.headingDegrees then + heading = routines.utils.toRadian(vars.headingDegrees) + end + + local unitPosTbl = {} + for i = 1, #units do + local unit = Unit.getByName(units[i]) + if unit and unit:isExist() then + unitPosTbl[#unitPosTbl + 1] = unit:getPosition().p + end + end + if #unitPosTbl > 0 then -- one more more units found. + -- first, find the unit most in the heading direction + local maxPos = -math.huge + + local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = + for i = 1, #unitPosTbl do + local rotatedVec2 = routines.vec.rotateVec2(routines.utils.makeVec2(unitPosTbl[i]), heading) + if (not maxPos) or maxPos < rotatedVec2.x then + maxPos = rotatedVec2.x + maxPosInd = i + end + end + + --now, get all the units around this unit... + local avgPos + if radius then + local maxUnitPos = unitPosTbl[maxPosInd] + local avgx, avgy, avgz, totNum = 0, 0, 0, 0 + for i = 1, #unitPosTbl do + if routines.utils.get2DDist(maxUnitPos, unitPosTbl[i]) <= radius then + avgx = avgx + unitPosTbl[i].x + avgy = avgy + unitPosTbl[i].y + avgz = avgz + unitPosTbl[i].z + totNum = totNum + 1 + end + end + avgPos = { x = avgx/totNum, y = avgy/totNum, z = avgz/totNum} + else + avgPos = unitPosTbl[maxPosInd] + end + + return avgPos + end +end + + +--[[ vars for routines.getLeadingMGRSString: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.acc - number, 0 to 5. +]] +routines.getLeadingMGRSString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local acc = vars.acc or 5 + return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) + end +end + +--[[ vars for routines.getLeadingLLString: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.acc - number of digits after decimal point (can be negative) +vars.DMS - boolean, true if you want DMS. +]] +routines.getLeadingLLString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local acc = vars.acc or 3 + local DMS = vars.DMS + local lat, lon = coord.LOtoLL(pos) + return routines.tostringLL(lat, lon, acc, DMS) + end +end + + + +--[[ vars for routines.getLeadingBRString: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.metric - boolean, if true, use km instead of NM. +vars.alt - boolean, if true, include altitude. +vars.ref - vec3/vec2 reference point. +]] +routines.getLeadingBRString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local ref = vars.ref + local alt = vars.alt + local metric = vars.metric + + local vec = {x = pos.x - ref.x, y = pos.y - ref.y, z = pos.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(pos, ref) + if alt then + alt = pos.y + end + return routines.tostringBR(dir, dist, alt, metric) + end +end + +--[[ vars for routines.message.add + vars.text = 'Hello World' + vars.displayTime = 20 + vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} + +]] + +--[[ vars for routines.msgMGRS +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +vars.text - text in the message +vars.displayTime - self explanatory +vars.msgFor - scope +]] +routines.msgMGRS = function(vars) + local units = vars.units + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getMGRSString{units = units, acc = acc} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } +end + +--[[ vars for routines.msgLL +vars.units - table of unit names (NOT unitNameTable- maybe this should change) (Yes). +vars.acc - integer, number of numbers after decimal place +vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. +vars.text - text in the message +vars.displayTime - self explanatory +vars.msgFor - scope +]] +routines.msgLL = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLLString{units = units, acc = acc, DMS = DMS} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgBR = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString + local alt = vars.alt + local metric = vars.metric + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getBRString{units = units, ref = ref, alt = alt, metric = metric} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + + +-------------------------------------------------------------------------------------------- +-- basically, just sub-types of routines.msgBR... saves folks the work of getting the ref point. +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - string red, blue +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgBullseye = function(vars) + if string.lower(vars.ref) == 'red' then + vars.ref = routines.DBs.missionData.bullseye.red + routines.msgBR(vars) + elseif string.lower(vars.ref) == 'blue' then + vars.ref = routines.DBs.missionData.bullseye.blue + routines.msgBR(vars) + end +end + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - unit name of reference point +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] + +routines.msgBRA = function(vars) + if Unit.getByName(vars.ref) then + vars.ref = Unit.getByName(vars.ref):getPosition().p + if not vars.alt then + vars.alt = true + end + routines.msgBR(vars) + end +end +-------------------------------------------------------------------------------------------- + +--[[ vars for routines.msgLeadingMGRS: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.acc - number, 0 to 5. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingMGRS = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + + +end +--[[ vars for routines.msgLeadingLL: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.acc - number of digits after decimal point (can be negative) +vars.DMS - boolean, true if you want DMS. (optional) +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingLL = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + +--[[ +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.metric - boolean, if true, use km instead of NM. (optional) +vars.alt - boolean, if true, include altitude. (optional) +vars.ref - vec3/vec2 reference point. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingBR = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local metric = vars.metric + local alt = vars.alt + local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } +end + + +function spairs(t, order) + -- collect the keys + local keys = {} + for k in pairs(t) do keys[#keys+1] = k end + + -- if order function given, sort by it by passing the table and keys a, b, + -- otherwise just sort the keys + if order then + table.sort(keys, function(a,b) return order(t, a, b) end) + else + table.sort(keys) + end + + -- return the iterator function + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], t[keys[i]] + end + end +end + + +function routines.IsPartOfGroupInZones( CargoGroup, LandingZones ) +--trace.f() + + local CurrentZoneID = nil + + if CargoGroup then + local CargoUnits = CargoGroup:getUnits() + for CargoUnitID, CargoUnit in pairs( CargoUnits ) do + if CargoUnit and CargoUnit:getLife() >= 1.0 then + CurrentZoneID = routines.IsUnitInZones( CargoUnit, LandingZones ) + if CurrentZoneID then + break + end + end + end + end + +--trace.r( "", "", { CurrentZoneID } ) + return CurrentZoneID +end + + + +function routines.IsUnitInZones( TransportUnit, LandingZones ) +--trace.f("", "routines.IsUnitInZones" ) + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + if TransportUnit then + local TransportUnitPos = TransportUnit:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = 1 + end + end + if TransportZoneResult then + --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) + else + --trace.i( "routines", "TransportZone:nil logic" ) + end + return TransportZoneResult + else + --trace.i( "routines", "TransportZone:nil hard" ) + return nil + end +end + +function routines.IsUnitNearZonesRadius( TransportUnit, LandingZones, ZoneRadius ) +--trace.f("", "routines.IsUnitInZones" ) + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + if TransportUnit then + local TransportUnitPos = TransportUnit:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then + TransportZoneResult = 1 + end + end + if TransportZoneResult then + --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) + else + --trace.i( "routines", "TransportZone:nil logic" ) + end + return TransportZoneResult + else + --trace.i( "routines", "TransportZone:nil hard" ) + return nil + end +end + + +function routines.IsStaticInZones( TransportStatic, LandingZones ) +--trace.f() + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + local TransportStaticPos = TransportStatic:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = 1 + end + end + +--trace.r( "", "", { TransportZoneResult } ) + return TransportZoneResult +end + + +function routines.IsUnitInRadius( CargoUnit, ReferencePosition, Radius ) +--trace.f() + + local Valid = true + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + local CargoPos = CargoUnit:getPosition().p + local ReferenceP = ReferencePosition.p + + if (((CargoPos.x - ReferenceP.x)^2 + (CargoPos.z - ReferenceP.z)^2)^0.5 <= Radius) then + else + Valid = false + end + + return Valid +end + +function routines.IsPartOfGroupInRadius( CargoGroup, ReferencePosition, Radius ) +--trace.f() + + local Valid = true + + Valid = routines.ValidateGroup( CargoGroup, "CargoGroup", Valid ) + + -- fill-up some local variables to support further calculations to determine location of units within the zone + local CargoUnits = CargoGroup:getUnits() + for CargoUnitId, CargoUnit in pairs( CargoUnits ) do + local CargoUnitPos = CargoUnit:getPosition().p +-- env.info( 'routines.IsPartOfGroupInRadius: CargoUnitPos.x = ' .. CargoUnitPos.x .. ' CargoUnitPos.z = ' .. CargoUnitPos.z ) + local ReferenceP = ReferencePosition.p +-- env.info( 'routines.IsPartOfGroupInRadius: ReferenceGroupPos.x = ' .. ReferenceGroupPos.x .. ' ReferenceGroupPos.z = ' .. ReferenceGroupPos.z ) + + if ((( CargoUnitPos.x - ReferenceP.x)^2 + (CargoUnitPos.z - ReferenceP.z)^2)^0.5 <= Radius) then + else + Valid = false + break + end + end + + return Valid +end + + +function routines.ValidateString( Variable, VariableName, Valid ) +--trace.f() + + if type( Variable ) == "string" then + if Variable == "" then + error( "routines.ValidateString: error: " .. VariableName .. " must be filled out!" ) + Valid = false + end + else + error( "routines.ValidateString: error: " .. VariableName .. " is not a string." ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateNumber( Variable, VariableName, Valid ) +--trace.f() + + if type( Variable ) == "number" then + else + error( "routines.ValidateNumber: error: " .. VariableName .. " is not a number." ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid + +end + +function routines.ValidateGroup( Variable, VariableName, Valid ) +--trace.f() + + if Variable == nil then + error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateZone( LandingZones, VariableName, Valid ) +--trace.f() + + if LandingZones == nil then + error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) + Valid = false + end + + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + if trigger.misc.getZone( LandingZoneName ) == nil then + error( "routines.ValidateGroup: error: Zone " .. LandingZoneName .. " does not exist!" ) + Valid = false + break + end + end + else + if trigger.misc.getZone( LandingZones ) == nil then + error( "routines.ValidateGroup: error: Zone " .. LandingZones .. " does not exist!" ) + Valid = false + end + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateEnumeration( Variable, VariableName, Enum, Valid ) +--trace.f() + + local ValidVariable = false + + for EnumId, EnumData in pairs( Enum ) do + if Variable == EnumData then + ValidVariable = true + break + end + end + + if ValidVariable then + else + error( 'TransportValidateEnum: " .. VariableName .. " is not a valid type.' .. Variable ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints but returns speed and formation type along with vec2 of point} + -- refactor to search by groupId and allow groupId and groupName as inputs + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + gpId = _DATABASE.Templates.Groups[groupIdent].groupId + end + + for coa_name, coa_data in pairs(env.mission.coalition) do + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + for obj_type_name, obj_type_data in pairs(cntry_data) do + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_type_data.group) do + if group_data and group_data.groupId == gpId then -- this is the group we are looking for + if group_data.route and group_data.route.points and #group_data.route.points > 0 then + local points = {} + + for point_num, point in pairs(group_data.route.points) do + local routeData = {} + if not point.point then + routeData.x = point.x + routeData.y = point.y + else + routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation. + end + routeData.form = point.action + routeData.speed = point.speed + routeData.alt = point.alt + routeData.alt_type = point.alt_type + routeData.airdromeId = point.airdromeId + routeData.helipadId = point.helipadId + routeData.type = point.type + routeData.action = point.action + if task then + routeData.task = point.task + end + points[point_num] = routeData + end + + return points + end + return + end --if group_data and group_data.name and group_data.name == 'groupname' + end --for group_num, group_data in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do +end + +routines.ground.patrolRoute = function(vars) + + + local tempRoute = {} + local useRoute = {} + local gpData = vars.gpData + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + local useGroupRoute + if not vars.useGroupRoute then + useGroupRoute = vars.gpData + else + useGroupRoute = vars.useGroupRoute + end + local routeProvided = false + if not vars.route then + if useGroupRoute then + tempRoute = routines.getGroupRoute(useGroupRoute) + end + else + useRoute = vars.route + local posStart = routines.getLeadPos(gpData) + useRoute[1] = routines.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed) + routeProvided = true + end + + + local overRideSpeed = vars.speed or 'default' + local pType = vars.pType + local offRoadForm = vars.offRoadForm or 'default' + local onRoadForm = vars.onRoadForm or 'default' + + if routeProvided == false and #tempRoute > 0 then + local posStart = routines.getLeadPos(gpData) + + + useRoute[#useRoute + 1] = routines.ground.buildWP(posStart, offRoadForm, overRideSpeed) + for i = 1, #tempRoute do + local tempForm = tempRoute[i].action + local tempSpeed = tempRoute[i].speed + + if offRoadForm == 'default' then + tempForm = tempRoute[i].action + end + if onRoadForm == 'default' then + onRoadForm = 'On Road' + end + if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then + tempForm = onRoadForm + else + tempForm = offRoadForm + end + + if type(overRideSpeed) == 'number' then + tempSpeed = overRideSpeed + end + + + useRoute[#useRoute + 1] = routines.ground.buildWP(tempRoute[i], tempForm, tempSpeed) + end + + if pType and string.lower(pType) == 'doubleback' then + local curRoute = routines.utils.deepCopy(useRoute) + for i = #curRoute, 2, -1 do + useRoute[#useRoute + 1] = routines.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed) + end + end + + useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP + end + + local cTask3 = {} + local newPatrol = {} + newPatrol.route = useRoute + newPatrol.gpData = gpData:getName() + cTask3[#cTask3 + 1] = 'routines.ground.patrolRoute(' + cTask3[#cTask3 + 1] = routines.utils.oneLineSerialize(newPatrol) + cTask3[#cTask3 + 1] = ')' + cTask3 = table.concat(cTask3) + local tempTask = { + id = 'WrappedAction', + params = { + action = { + id = 'Script', + params = { + command = cTask3, + + }, + }, + }, + } + + + useRoute[#useRoute].task = tempTask + routines.goRoute(gpData, useRoute) + + return +end + +routines.ground.patrol = function(gpData, pType, form, speed) + local vars = {} + + if type(gpData) == 'table' and gpData:getName() then + gpData = gpData:getName() + end + + vars.useGroupRoute = gpData + vars.gpData = gpData + vars.pType = pType + vars.offRoadForm = form + vars.speed = speed + + routines.ground.patrolRoute(vars) + + return +end + +function routines.GetUnitHeight( CheckUnit ) +--trace.f( "routines" ) + + local UnitPoint = CheckUnit:getPoint() + local UnitPosition = { x = UnitPoint.x, y = UnitPoint.z } + local UnitHeight = UnitPoint.y + + local LandHeight = land.getHeight( UnitPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + --trace.f( "routines", "Unit Height = " .. UnitHeight - LandHeight ) + + return UnitHeight - LandHeight + +end + + + +Su34Status = { status = {} } +boardMsgRed = { statusMsg = "" } +boardMsgAll = { timeMsg = "" } +SpawnSettings = {} +Su34MenuPath = {} +Su34Menus = 0 + + +function Su34AttackCarlVinson(groupName) +--trace.menu("", "Su34AttackCarlVinson") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupCarlVinson = Group.getByName("US Carl Vinson #001") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupCarlVinson ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupCarlVinson:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + Su34Status.status[groupName] = 1 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking carrier Carl Vinson. ', 10, 'RedStatus' .. groupName ) +end + +function Su34AttackWest(groupName) +--trace.f("","Su34AttackWest") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupShipWest1 = Group.getByName("US Ship West #001") + local groupShipWest2 = Group.getByName("US Ship West #002") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupShipWest1 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + if groupShipWest2 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + Su34Status.status[groupName] = 2 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the west. ', 10, 'RedStatus' .. groupName ) +end + +function Su34AttackNorth(groupName) +--trace.menu("","Su34AttackNorth") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupShipNorth1 = Group.getByName("US Ship North #001") + local groupShipNorth2 = Group.getByName("US Ship North #002") + local groupShipNorth3 = Group.getByName("US Ship North #003") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupShipNorth1 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + if groupShipNorth2 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + if groupShipNorth3 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth3:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + Su34Status.status[groupName] = 3 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the north. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Orbit(groupName) +--trace.menu("","Su34Orbit") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + controllerSu34:pushTask( {id = 'ControlledTask', params = { task = { id = 'Orbit', params = { pattern = AI.Task.OrbitPattern.RACE_TRACK } }, stopCondition = { duration = 600 } } } ) + Su34Status.status[groupName] = 4 + MessageToRed( string.format('%s: ',groupName) .. 'In orbit and awaiting further instructions. ', 10, 'RedStatus' .. groupName ) +end + +function Su34TakeOff(groupName) +--trace.menu("","Su34TakeOff") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + Su34Status.status[groupName] = 8 + MessageToRed( string.format('%s: ',groupName) .. 'Take-Off. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Hold(groupName) +--trace.menu("","Su34Hold") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + Su34Status.status[groupName] = 5 + MessageToRed( string.format('%s: ',groupName) .. 'Holding Weapons. ', 10, 'RedStatus' .. groupName ) +end + +function Su34RTB(groupName) +--trace.menu("","Su34RTB") + Su34Status.status[groupName] = 6 + MessageToRed( string.format('%s: ',groupName) .. 'Return to Krasnodar. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Destroyed(groupName) +--trace.menu("","Su34Destroyed") + Su34Status.status[groupName] = 7 + MessageToRed( string.format('%s: ',groupName) .. 'Destroyed. ', 30, 'RedStatus' .. groupName ) +end + +function GroupAlive( groupName ) +--trace.menu("","GroupAlive") + local groupTest = Group.getByName( groupName ) + + local groupExists = false + + if groupTest then + groupExists = groupTest:isExist() + end + + --trace.r( "", "", { groupExists } ) + return groupExists +end + +function Su34IsDead() +--trace.f() + +end + +function Su34OverviewStatus() +--trace.menu("","Su34OverviewStatus") + local msg = "" + local currentStatus = 0 + local Exists = false + + for groupName, currentStatus in pairs(Su34Status.status) do + + env.info(('Su34 Overview Status: GroupName = ' .. groupName )) + Alive = GroupAlive( groupName ) + + if Alive then + if currentStatus == 1 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking carrier Carl Vinson. " + elseif currentStatus == 2 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking supporting ships in the west. " + elseif currentStatus == 3 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking invading ships in the north. " + elseif currentStatus == 4 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "In orbit and awaiting further instructions. " + elseif currentStatus == 5 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Holding Weapons. " + elseif currentStatus == 6 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Return to Krasnodar. " + elseif currentStatus == 7 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Destroyed. " + elseif currentStatus == 8 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Take-Off. " + end + else + if currentStatus == 7 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Destroyed. " + else + Su34Destroyed(groupName) + end + end + end + + boardMsgRed.statusMsg = msg +end + + +function UpdateBoardMsg() +--trace.f() + Su34OverviewStatus() + MessageToRed( boardMsgRed.statusMsg, 15, 'RedStatus' ) +end + +function MusicReset( flg ) +--trace.f() + trigger.action.setUserFlag(95,flg) +end + +function PlaneActivate(groupNameFormat, flg) +--trace.f() + local groupName = groupNameFormat .. string.format("#%03d", trigger.misc.getUserFlag(flg)) + --trigger.action.outText(groupName,10) + trigger.action.activateGroup(Group.getByName(groupName)) +end + +function Su34Menu(groupName) +--trace.f() + + --env.info(( 'Su34Menu(' .. groupName .. ')' )) + local groupSu34 = Group.getByName( groupName ) + + if Su34Status.status[groupName] == 1 or + Su34Status.status[groupName] == 2 or + Su34Status.status[groupName] == 3 or + Su34Status.status[groupName] == 4 or + Su34Status.status[groupName] == 5 then + if Su34MenuPath[groupName] == nil then + if planeMenuPath == nil then + planeMenuPath = missionCommands.addSubMenuForCoalition( + coalition.side.RED, + "SU-34 anti-ship flights", + nil + ) + end + Su34MenuPath[groupName] = missionCommands.addSubMenuForCoalition( + coalition.side.RED, + "Flight " .. groupName, + planeMenuPath + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack carrier Carl Vinson", + Su34MenuPath[groupName], + Su34AttackCarlVinson, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack ships in the west", + Su34MenuPath[groupName], + Su34AttackWest, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack ships in the north", + Su34MenuPath[groupName], + Su34AttackNorth, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Hold position and await instructions", + Su34MenuPath[groupName], + Su34Orbit, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Report status", + Su34MenuPath[groupName], + Su34OverviewStatus + ) + end + else + if Su34MenuPath[groupName] then + missionCommands.removeItemForCoalition(coalition.side.RED, Su34MenuPath[groupName]) + end + end +end + +--- Obsolete function, but kept to rework in framework. + +function ChooseInfantry ( TeleportPrefixTable, TeleportMax ) +--trace.f("Spawn") + --env.info(( 'ChooseInfantry: ' )) + + TeleportPrefixTableCount = #TeleportPrefixTable + TeleportPrefixTableIndex = math.random( 1, TeleportPrefixTableCount ) + + --env.info(( 'ChooseInfantry: TeleportPrefixTableIndex = ' .. TeleportPrefixTableIndex .. ' TeleportPrefixTableCount = ' .. TeleportPrefixTableCount .. ' TeleportMax = ' .. TeleportMax )) + + local TeleportFound = false + local TeleportLoop = true + local Index = TeleportPrefixTableIndex + local TeleportPrefix = '' + + while TeleportLoop do + TeleportPrefix = TeleportPrefixTable[Index] + if SpawnSettings[TeleportPrefix] then + if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then + SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 + TeleportFound = true + else + TeleportFound = false + end + else + SpawnSettings[TeleportPrefix] = {} + SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 + TeleportFound = true + end + if TeleportFound then + TeleportLoop = false + else + if Index < TeleportPrefixTableCount then + Index = Index + 1 + else + TeleportLoop = false + end + end + --env.info(( 'ChooseInfantry: Loop 1 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) + end + + if TeleportFound == false then + TeleportLoop = true + Index = 1 + while TeleportLoop do + TeleportPrefix = TeleportPrefixTable[Index] + if SpawnSettings[TeleportPrefix] then + if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then + SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 + TeleportFound = true + else + TeleportFound = false + end + else + SpawnSettings[TeleportPrefix] = {} + SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 + TeleportFound = true + end + if TeleportFound then + TeleportLoop = false + else + if Index < TeleportPrefixTableIndex then + Index = Index + 1 + else + TeleportLoop = false + end + end + --env.info(( 'ChooseInfantry: Loop 2 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) + end + end + + local TeleportGroupName = '' + if TeleportFound == true then + TeleportGroupName = TeleportPrefix .. string.format("#%03d", SpawnSettings[TeleportPrefix]['SpawnCount'] ) + else + TeleportGroupName = '' + end + + --env.info(('ChooseInfantry: TeleportGroupName = ' .. TeleportGroupName )) + --env.info(('ChooseInfantry: return')) + + return TeleportGroupName +end + +SpawnedInfantry = 0 + +function LandCarrier ( CarrierGroup, LandingZonePrefix ) +--trace.f() + --env.info(( 'LandCarrier: ' )) + --env.info(( 'LandCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) + --env.info(( 'LandCarrier: LandingZone = ' .. LandingZonePrefix )) + + local controllerGroup = CarrierGroup:getController() + + local LandingZone = trigger.misc.getZone(LandingZonePrefix) + local LandingZonePos = {} + LandingZonePos.x = LandingZone.point.x + math.random(LandingZone.radius * -1, LandingZone.radius) + LandingZonePos.y = LandingZone.point.z + math.random(LandingZone.radius * -1, LandingZone.radius) + + controllerGroup:pushTask( { id = 'Land', params = { point = LandingZonePos, durationFlag = true, duration = 10 } } ) + + --env.info(( 'LandCarrier: end' )) +end + +EscortCount = 0 +function EscortCarrier ( CarrierGroup, EscortPrefix, EscortLastWayPoint, EscortEngagementDistanceMax, EscortTargetTypes ) +--trace.f() + --env.info(( 'EscortCarrier: ' )) + --env.info(( 'EscortCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) + --env.info(( 'EscortCarrier: EscortPrefix = ' .. EscortPrefix )) + + local CarrierName = CarrierGroup:getName() + + local EscortMission = {} + local CarrierMission = {} + + local EscortMission = SpawnMissionGroup( EscortPrefix ) + local CarrierMission = SpawnMissionGroup( CarrierGroup:getName() ) + + if EscortMission ~= nil and CarrierMission ~= nil then + + EscortCount = EscortCount + 1 + EscortMissionName = string.format( EscortPrefix .. '#Escort %s', CarrierName ) + EscortMission.name = EscortMissionName + EscortMission.groupId = nil + EscortMission.lateActivation = false + EscortMission.taskSelected = false + + local EscortUnits = #EscortMission.units + for u = 1, EscortUnits do + EscortMission.units[u].name = string.format( EscortPrefix .. '#Escort %s %02d', CarrierName, u ) + EscortMission.units[u].unitId = nil + end + + + EscortMission.route.points[1].task = { id = "ComboTask", + params = + { + tasks = + { + [1] = + { + enabled = true, + auto = false, + id = "Escort", + number = 1, + params = + { + lastWptIndexFlagChangedManually = false, + groupId = CarrierGroup:getID(), + lastWptIndex = nil, + lastWptIndexFlag = false, + engagementDistMax = EscortEngagementDistanceMax, + targetTypes = EscortTargetTypes, + pos = + { + y = 20, + x = 20, + z = 0, + } -- end of ["pos"] + } -- end of ["params"] + } -- end of [1] + } -- end of ["tasks"] + } -- end of ["params"] + } -- end of ["task"] + + SpawnGroupAdd( EscortPrefix, EscortMission ) + + end +end + +function SendMessageToCarrier( CarrierGroup, CarrierMessage ) +--trace.f() + + if CarrierGroup ~= nil then + MessageToGroup( CarrierGroup, CarrierMessage, 30, 'Carrier/' .. CarrierGroup:getName() ) + end + +end + +function MessageToGroup( MsgGroup, MsgText, MsgTime, MsgName ) +--trace.f() + + if type(MsgGroup) == 'string' then + --env.info( 'MessageToGroup: Converted MsgGroup string "' .. MsgGroup .. '" into a Group structure.' ) + MsgGroup = Group.getByName( MsgGroup ) + end + + if MsgGroup ~= nil then + local MsgTable = {} + MsgTable.text = MsgText + MsgTable.displayTime = MsgTime + MsgTable.msgFor = { units = { MsgGroup:getUnits()[1]:getName() } } + MsgTable.name = MsgName + --routines.message.add( MsgTable ) + --env.info(('MessageToGroup: Message sent to ' .. MsgGroup:getUnits()[1]:getName() .. ' -> ' .. MsgText )) + end +end + +function MessageToUnit( UnitName, MsgText, MsgTime, MsgName ) +--trace.f() + + if UnitName ~= nil then + local MsgTable = {} + MsgTable.text = MsgText + MsgTable.displayTime = MsgTime + MsgTable.msgFor = { units = { UnitName } } + MsgTable.name = MsgName + --routines.message.add( MsgTable ) + end +end + +function MessageToAll( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "Message", MsgTime, MsgName ):ToCoalition( coalition.side.RED ):ToCoalition( coalition.side.BLUE ) +end + +function MessageToRed( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "To Red Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) +end + +function MessageToBlue( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "To Blue Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) +end + +function getCarrierHeight( CarrierGroup ) +--trace.f() + + if CarrierGroup ~= nil then + if table.getn(CarrierGroup:getUnits()) == 1 then + local CarrierUnit = CarrierGroup:getUnits()[1] + local CurrentPoint = CarrierUnit:getPoint() + + local CurrentPosition = { x = CurrentPoint.x, y = CurrentPoint.z } + local CarrierHeight = CurrentPoint.y + + local LandHeight = land.getHeight( CurrentPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + return CarrierHeight - LandHeight + else + return 999999 + end + else + return 999999 + end + +end + +function GetUnitHeight( CheckUnit ) +--trace.f() + + local UnitPoint = CheckUnit:getPoint() + local UnitPosition = { x = CurrentPoint.x, y = CurrentPoint.z } + local UnitHeight = CurrentPoint.y + + local LandHeight = land.getHeight( CurrentPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + return UnitHeight - LandHeight + +end + + +_MusicTable = {} +_MusicTable.Files = {} +_MusicTable.Queue = {} +_MusicTable.FileCnt = 0 + + +function MusicRegister( SndRef, SndFile, SndTime ) +--trace.f() + + env.info(( 'MusicRegister: SndRef = ' .. SndRef )) + env.info(( 'MusicRegister: SndFile = ' .. SndFile )) + env.info(( 'MusicRegister: SndTime = ' .. SndTime )) + + + _MusicTable.FileCnt = _MusicTable.FileCnt + 1 + + _MusicTable.Files[_MusicTable.FileCnt] = {} + _MusicTable.Files[_MusicTable.FileCnt].Ref = SndRef + _MusicTable.Files[_MusicTable.FileCnt].File = SndFile + _MusicTable.Files[_MusicTable.FileCnt].Time = SndTime + + if not _MusicTable.Function then + _MusicTable.Function = routines.scheduleFunction( MusicScheduler, { }, timer.getTime() + 10, 10) + end + +end + +function MusicToPlayer( SndRef, PlayerName, SndContinue ) +--trace.f() + + --env.info(( 'MusicToPlayer: SndRef = ' .. SndRef )) + + local PlayerUnits = AlivePlayerUnits() + for PlayerUnitIdx, PlayerUnit in pairs(PlayerUnits) do + local PlayerUnitName = PlayerUnit:getPlayerName() + --env.info(( 'MusicToPlayer: PlayerUnitName = ' .. PlayerUnitName )) + if PlayerName == PlayerUnitName then + PlayerGroup = PlayerUnit:getGroup() + if PlayerGroup then + --env.info(( 'MusicToPlayer: PlayerGroup = ' .. PlayerGroup:getName() )) + MusicToGroup( SndRef, PlayerGroup, SndContinue ) + end + break + end + end + + --env.info(( 'MusicToPlayer: end' )) + +end + +function MusicToGroup( SndRef, SndGroup, SndContinue ) +--trace.f() + + --env.info(( 'MusicToGroup: SndRef = ' .. SndRef )) + + if SndGroup ~= nil then + if _MusicTable and _MusicTable.FileCnt > 0 then + if SndGroup:isExist() then + if MusicCanStart(SndGroup:getUnit(1):getPlayerName()) then + --env.info(( 'MusicToGroup: OK for Sound.' )) + local SndIdx = 0 + if SndRef == '' then + --env.info(( 'MusicToGroup: SndRef as empty. Queueing at random.' )) + SndIdx = math.random( 1, _MusicTable.FileCnt ) + else + for SndIdx = 1, _MusicTable.FileCnt do + if _MusicTable.Files[SndIdx].Ref == SndRef then + break + end + end + end + --env.info(( 'MusicToGroup: SndIdx = ' .. SndIdx )) + --env.info(( 'MusicToGroup: Queueing Music ' .. _MusicTable.Files[SndIdx].File .. ' for Group ' .. SndGroup:getID() )) + trigger.action.outSoundForGroup( SndGroup:getID(), _MusicTable.Files[SndIdx].File ) + MessageToGroup( SndGroup, 'Playing ' .. _MusicTable.Files[SndIdx].File, 15, 'Music-' .. SndGroup:getUnit(1):getPlayerName() ) + + local SndQueueRef = SndGroup:getUnit(1):getPlayerName() + if _MusicTable.Queue[SndQueueRef] == nil then + _MusicTable.Queue[SndQueueRef] = {} + end + _MusicTable.Queue[SndQueueRef].Start = timer.getTime() + _MusicTable.Queue[SndQueueRef].PlayerName = SndGroup:getUnit(1):getPlayerName() + _MusicTable.Queue[SndQueueRef].Group = SndGroup + _MusicTable.Queue[SndQueueRef].ID = SndGroup:getID() + _MusicTable.Queue[SndQueueRef].Ref = SndIdx + _MusicTable.Queue[SndQueueRef].Continue = SndContinue + _MusicTable.Queue[SndQueueRef].Type = Group + end + end + end + end +end + +function MusicCanStart(PlayerName) +--trace.f() + + --env.info(( 'MusicCanStart:' )) + + local MusicOut = false + + if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then + --env.info(( 'MusicCanStart: PlayerName = ' .. PlayerName )) + local PlayerFound = false + local MusicStart = 0 + local MusicTime = 0 + for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do + if SndQueue.PlayerName == PlayerName then + PlayerFound = true + MusicStart = SndQueue.Start + MusicTime = _MusicTable.Files[SndQueue.Ref].Time + break + end + end + if PlayerFound then + --env.info(( 'MusicCanStart: MusicStart = ' .. MusicStart )) + --env.info(( 'MusicCanStart: MusicTime = ' .. MusicTime )) + --env.info(( 'MusicCanStart: timer.getTime() = ' .. timer.getTime() )) + + if MusicStart + MusicTime <= timer.getTime() then + MusicOut = true + end + else + MusicOut = true + end + end + + if MusicOut then + --env.info(( 'MusicCanStart: true' )) + else + --env.info(( 'MusicCanStart: false' )) + end + + return MusicOut +end + +function MusicScheduler() +--trace.scheduled("", "MusicScheduler") + + --env.info(( 'MusicScheduler:' )) + if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then + --env.info(( 'MusicScheduler: Walking Sound Queue.')) + for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do + if SndQueue.Continue then + if MusicCanStart(SndQueue.PlayerName) then + --env.info(('MusicScheduler: MusicToGroup')) + MusicToPlayer( '', SndQueue.PlayerName, true ) + end + end + end + end + +end + + +env.info(( 'Init: Scripts Loaded v1.1' )) + +--- BASE classes. +-- +-- @{#BASE} class +-- ============== +-- The @{#BASE} class is the super class for most of the classes defined within MOOSE. +-- +-- It handles: +-- +-- * The construction and inheritance of child classes. +-- * The tracing of objects during mission execution within the DCS.log file (under saved games folder). +-- +-- Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes. +-- +-- BASE Trace functionality +-- ======================== +-- The BASE class contains trace methods to trace progress within a mission execution of a certain object. +-- Note that these trace methods are inherited by each MOOSE class interiting BASE. +-- As such, each object created from derived class from BASE can use the tracing functions to trace its execution. +-- +-- Trace a function call +-- --------------------- +-- There are basically 3 types of tracing methods available within BASE: +-- +-- * @{#BASE.F}: Trace the beginning of a function and its given parameters. +-- * @{#BASE.T}: Trace further logic within a function giving optional variables or parameters. +-- * @{#BASE.E}: Trace an execption within a function giving optional variables or parameters. An exception will always be traced. +-- +-- Tracing levels +-- -------------- +-- There are 3 tracing levels within MOOSE. +-- These tracing levels were defined to avoid bulks of tracing to be generated by lots of objects. +-- +-- As such, the F and T methods have additional variants to trace level 2 and 3 respectively: +-- +-- * @{#BASE.F2}: Trace the beginning of a function and its given parameters with tracing level 2. +-- * @{#BASE.F3}: Trace the beginning of a function and its given parameters with tracing level 3. +-- * @{#BASE.T2}: Trace further logic within a function giving optional variables or parameters with tracing level 2. +-- * @{#BASE.T3}: Trace further logic within a function giving optional variables or parameters with tracing level 3. +-- +-- BASE Inheritance support +-- ======================== +-- The following methods are available to support inheritance: +-- +-- * @{#BASE.Inherit}: Inherits from a class. +-- * @{#BASE.Inherited}: Returns the parent class from the class. +-- +-- Future +-- ====== +-- Further methods may be added to BASE whenever there is a need to make "overall" functions available within MOOSE. +-- +-- ==== +-- +-- @module Base +-- @author FlightControl + +Include.File( "Routines" ) + +local _TraceOn = true +local _TraceLevel = 1 +local _TraceClass = { + --DATABASE = true, + --SEAD = true, + --DESTROYBASETASK = true, + --MOVEMENT = true, + --SPAWN = true, + --STAGE = true, + --ZONE = true, + --GROUP = true, + --UNIT = true, + --CLIENT = true, + --CARGO = true, + --CARGO_GROUP = true, + --CARGO_PACKAGE = true, + --CARGO_SLINGLOAD = true, + --CARGO_ZONE = true, + --CLEANUP = true, + --MENU_CLIENT = true, + --MENU_CLIENT_COMMAND = true, + --ESCORT = true, + } +local _TraceClassMethod = {} + +--- The BASE Class +-- @type BASE +-- @field ClassName The name of the class. +-- @field ClassID The ID number of the class. +BASE = { + ClassName = "BASE", + ClassID = 0, + Events = {} +} + +--- The Formation Class +-- @type FORMATION +-- @field Cone A cone formation. +FORMATION = { + Cone = "Cone" +} + + + +--- The base constructor. This is the top top class of all classed defined within the MOOSE. +-- Any new class needs to be derived from this class for proper inheritance. +-- @param #BASE self +-- @return #BASE The new instance of the BASE class. +-- @usage +-- function TASK:New() +-- +-- local self = BASE:Inherit( self, BASE:New() ) +-- +-- -- assign Task default values during construction +-- self.TaskBriefing = "Task: No Task." +-- self.Time = timer.getTime() +-- self.ExecuteStage = _TransportExecuteStage.NONE +-- +-- return self +-- end +-- @todo need to investigate if the deepCopy is really needed... Don't think so. +function BASE:New() + local Child = routines.utils.deepCopy( self ) + local Parent = {} + setmetatable( Child, Parent ) + Child.__index = Child + self.ClassID = self.ClassID + 1 + Child.ClassID = self.ClassID + --Child.AddEvent( Child, S_EVENT_BIRTH, Child.EventBirth ) + return Child +end + +--- This is the worker method to inherit from a parent class. +-- @param #BASE self +-- @param Child is the Child class that inherits. +-- @param #BASE Parent is the Parent class that the Child inherits from. +-- @return #BASE Child +function BASE:Inherit( Child, Parent ) + local Child = routines.utils.deepCopy( Child ) + local Parent = routines.utils.deepCopy( Parent ) + if Child ~= nil then + setmetatable( Child, Parent ) + Child.__index = Child + end + --Child.ClassName = Child.ClassName .. '.' .. Child.ClassID + self:T( 'Inherited from ' .. Parent.ClassName ) + return Child +end + +--- This is the worker method to retrieve the Parent class. +-- @param #BASE self +-- @param #BASE Child is the Child class from which the Parent class needs to be retrieved. +-- @return #BASE +function BASE:Inherited( Child ) + local Parent = getmetatable( Child ) +-- env.info('Inherited class of ' .. Child.ClassName .. ' is ' .. Parent.ClassName ) + return Parent +end + +--- Get the ClassName + ClassID of the class instance. +-- The ClassName + ClassID is formatted as '%s#%09d'. +-- @param #BASE self +-- @return #string The ClassName + ClassID of the class instance. +function BASE:GetClassNameAndID() + return string.format( '%s#%09d', self:GetClassName(), self:GetClassID() ) +end + +--- Get the ClassName of the class instance. +-- @param #BASE self +-- @return #string The ClassName of the class instance. +function BASE:GetClassName() + return self.ClassName +end + +--- Get the ClassID of the class instance. +-- @param #BASE self +-- @return #string The ClassID of the class instance. +function BASE:GetClassID() + return self.ClassID +end + +--- Set a new listener for the class. +-- @param self +-- @param DCSTypes#Event Event +-- @param #function EventFunction +-- @return #BASE +function BASE:AddEvent( Event, EventFunction ) + self:F( Event ) + + self.Events[#self.Events+1] = {} + self.Events[#self.Events].Event = Event + self.Events[#self.Events].EventFunction = EventFunction + self.Events[#self.Events].EventEnabled = false + + return self +end + +--- Returns the event dispatcher +-- @param #BASE self +-- @return Event#EVENT +function BASE:Event() + + return _EVENTDISPATCHER +end + + + + + +--- Enable the event listeners for the class. +-- @param #BASE self +-- @return #BASE +function BASE:EnableEvents() + self:F( #self.Events ) + + for EventID, Event in pairs( self.Events ) do + Event.Self = self + Event.EventEnabled = true + end + self.Events.Handler = world.addEventHandler( self ) + + return self +end + + +--- Disable the event listeners for the class. +-- @param #BASE self +-- @return #BASE +function BASE:DisableEvents() + self:F() + + world.removeEventHandler( self ) + for EventID, Event in pairs( self.Events ) do + Event.Self = nil + Event.EventEnabled = false + end + + return self +end + + +local BaseEventCodes = { + "S_EVENT_SHOT", + "S_EVENT_HIT", + "S_EVENT_TAKEOFF", + "S_EVENT_LAND", + "S_EVENT_CRASH", + "S_EVENT_EJECTION", + "S_EVENT_REFUELING", + "S_EVENT_DEAD", + "S_EVENT_PILOT_DEAD", + "S_EVENT_BASE_CAPTURED", + "S_EVENT_MISSION_START", + "S_EVENT_MISSION_END", + "S_EVENT_TOOK_CONTROL", + "S_EVENT_REFUELING_STOP", + "S_EVENT_BIRTH", + "S_EVENT_HUMAN_FAILURE", + "S_EVENT_ENGINE_STARTUP", + "S_EVENT_ENGINE_SHUTDOWN", + "S_EVENT_PLAYER_ENTER_UNIT", + "S_EVENT_PLAYER_LEAVE_UNIT", + "S_EVENT_PLAYER_COMMENT", + "S_EVENT_SHOOTING_START", + "S_EVENT_SHOOTING_END", + "S_EVENT_MAX", +} + +--onEvent( {[1]="S_EVENT_BIRTH",[2]={["subPlace"]=5,["time"]=0,["initiator"]={["id_"]=16884480,},["place"]={["id_"]=5000040,},["id"]=15,["IniUnitName"]="US F-15C@RAMP-Air Support Mountains#001-01",},} +-- Event = { +-- id = enum world.event, +-- time = Time, +-- initiator = Unit, +-- target = Unit, +-- place = Unit, +-- subPlace = enum world.BirthPlace, +-- weapon = Weapon +-- } + +--- Creation of a Birth Event. +-- @param #BASE self +-- @param DCSTypes#Time EventTime The time stamp of the event. +-- @param DCSObject#Object Initiator The initiating object of the event. +-- @param #string IniUnitName The initiating unit name. +-- @param place +-- @param subplace +function BASE:CreateEventBirth( EventTime, Initiator, IniUnitName, place, subplace ) + self:F( { EventTime, Initiator, IniUnitName, place, subplace } ) + + local Event = { + id = world.event.S_EVENT_BIRTH, + time = EventTime, + initiator = Initiator, + IniUnitName = IniUnitName, + place = place, + subplace = subplace + } + + world.onEvent( Event ) +end + +--- Creation of a Crash Event. +-- @param #BASE self +-- @param DCSTypes#Time EventTime The time stamp of the event. +-- @param DCSObject#Object Initiator The initiating object of the event. +function BASE:CreateEventCrash( EventTime, Initiator ) + self:F( { EventTime, Initiator } ) + + local Event = { + id = world.event.S_EVENT_CRASH, + time = EventTime, + initiator = Initiator, + } + + world.onEvent( Event ) +end + +-- TODO: Complete DCSTypes#Event structure. +--- The main event handling function... This function captures all events generated for the class. +-- @param #BASE self +-- @param DCSTypes#Event event +function BASE:onEvent(event) + --self:F( { BaseEventCodes[event.id], event } ) + + if self then + for EventID, EventObject in pairs( self.Events ) do + if EventObject.EventEnabled then + --env.info( 'onEvent Table EventObject.Self = ' .. tostring(EventObject.Self) ) + --env.info( 'onEvent event.id = ' .. tostring(event.id) ) + --env.info( 'onEvent EventObject.Event = ' .. tostring(EventObject.Event) ) + if event.id == EventObject.Event then + if self == EventObject.Self then + if event.initiator and event.initiator:isExist() then + event.IniUnitName = event.initiator:getName() + end + if event.target and event.target:isExist() then + event.TgtUnitName = event.target:getName() + end + --self:T( { BaseEventCodes[event.id], event } ) + --EventObject.EventFunction( self, event ) + end + end + end + end + end +end + +-- Trace section + +-- Log a trace (only shown when trace is on) +-- TODO: Make trace function using variable parameters. + +--- Set trace level +-- @param #BASE self +-- @param #number Level +function BASE:TraceLevel( Level ) + _TraceLevel = Level + self:E( "Tracing level " .. Level ) +end + +--- Set tracing for a class +-- @param #BASE self +-- @param #string Class +function BASE:TraceClass( Class ) + _TraceClass[Class] = true + _TraceClassMethod[Class] = {} + self:E( "Tracing class " .. Class ) +end + +--- Set tracing for a specific method of class +-- @param #BASE self +-- @param #string Class +-- @param #string Method +function BASE:TraceClassMethod( Class, Method ) + if not _TraceClassMethod[Class] then + _TraceClassMethod[Class] = {} + _TraceClassMethod[Class].Method = {} + end + _TraceClassMethod[Class].Method[Method] = true + self:E( "Tracing method " .. Method .. " of class " .. Class ) +end + +--- Trace a function call. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F( Arguments ) + + if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = 0 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "F", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) + end + end +end + +--- Trace a function call level 2. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F2( Arguments ) + + if _TraceLevel >= 2 then + self:F( Arguments ) + end + +end + +--- Trace a function call level 3. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F3( Arguments ) + + if _TraceLevel >= 3 then + self:F( Arguments ) + end + +end + +--- Trace a function logic. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T( Arguments ) + + if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = 0 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s" , LineCurrent, LineFrom, "T", self.ClassName, self.ClassID, routines.utils.oneLineSerialize( Arguments ) ) ) + end + end +end + +--- Trace a function logic level 2. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T2( Arguments ) + + if _TraceLevel >= 2 then + self:T( Arguments ) + end + +end + +--- Trace a function logic level 3. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T3( Arguments ) + + if _TraceLevel >= 3 then + self:T( Arguments ) + end + +end + +--- Log an exception which will be traced always. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:E( Arguments ) + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = -1 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "E", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) +end + + + +--- Models time events calling event handing functions. +-- +-- @{SCHEDULER} class +-- =================== +-- The @{SCHEDULER} class models time events calling given event handling functions. +-- +-- SCHEDULER constructor +-- ===================== +-- The SCHEDULER class is quite easy to use: +-- +-- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. +-- +-- SCHEDULER timer methods +-- ======================= +-- The SCHEDULER can be stopped and restarted with the following methods: +-- +-- * @{#SCHEDULER.Start}: (Re-)Start the scheduler. +-- * @{#SCHEDULER.Start}: Stop the scheduler. +-- +-- @module Scheduler +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) + + +--- The SCHEDULER class +-- @type SCHEDULER +-- @extends Base#BASE +SCHEDULER = { + ClassName = "SCHEDULER", +} + + +--- Constructor. +-- @param #SCHEDULER self +-- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. +-- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. +-- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. +-- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. +-- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. +-- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. +-- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. +-- @return #SCHEDULER self +function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( { TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) + + self.TimeEventObject = TimeEventObject + self.TimeEventFunction = TimeEventFunction + self.TimeEventFunctionArguments = TimeEventFunctionArguments + self.StartSeconds = StartSeconds + + if RepeatSecondsInterval then + self.RepeatSecondsInterval = RepeatSecondsInterval + else + self.RepeatSecondsInterval = 0 + end + + if RandomizationFactor then + self.RandomizationFactor = RandomizationFactor + else + self.RandomizationFactor = 0 + end + + if StopSeconds then + self.StopSeconds = StopSeconds + end + + self.Repeat = false + + self.StartTime = timer.getTime() + + self:Start() + + return self +end + +--- (Re-)Starts the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Start() + self:F2( self.TimeEventObject ) + + self.Repeat = true + timer.scheduleFunction( self._Scheduler, self, timer.getTime() + self.StartSeconds + .01 ) + + return self +end + +--- Stops the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Stop() + self:F2( self.TimeEventObject ) + + self.Repeat = false + + return self +end + +-- Private Functions + +function SCHEDULER:_Scheduler() + self:F2( self.TimeEventFunctionArguments ) + + local ErrorHandler = function( errmsg ) + + env.info( "Error in SCHEDULER function:" .. errmsg ) + env.info( debug.traceback() ) + + return errmsg + end + + local Status, Result + if self.TimeEventObject then + Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + else + Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + end + + self:T( { Status, Result } ) + + if Status and Status == true and Result and Result == true then + if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then + timer.scheduleFunction( + self._Scheduler, + self, + timer.getTime() + self.RepeatSecondsInterval + math.random( - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) ) + 0.01 + ) + end + end + +end + + + + + + + + +--- The EVENT class models an efficient event handling process between other classes and its units, weapons. +-- @module Event +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) + +--- The EVENT structure +-- @type EVENT +-- @field #EVENT.Events Events +EVENT = { + ClassName = "EVENT", + ClassID = 0, +} + +local _EVENTCODES = { + "S_EVENT_SHOT", + "S_EVENT_HIT", + "S_EVENT_TAKEOFF", + "S_EVENT_LAND", + "S_EVENT_CRASH", + "S_EVENT_EJECTION", + "S_EVENT_REFUELING", + "S_EVENT_DEAD", + "S_EVENT_PILOT_DEAD", + "S_EVENT_BASE_CAPTURED", + "S_EVENT_MISSION_START", + "S_EVENT_MISSION_END", + "S_EVENT_TOOK_CONTROL", + "S_EVENT_REFUELING_STOP", + "S_EVENT_BIRTH", + "S_EVENT_HUMAN_FAILURE", + "S_EVENT_ENGINE_STARTUP", + "S_EVENT_ENGINE_SHUTDOWN", + "S_EVENT_PLAYER_ENTER_UNIT", + "S_EVENT_PLAYER_LEAVE_UNIT", + "S_EVENT_PLAYER_COMMENT", + "S_EVENT_SHOOTING_START", + "S_EVENT_SHOOTING_END", + "S_EVENT_MAX", +} + +--- The Event structure +-- @type EVENTDATA +-- @field id +-- @field initiator +-- @field target +-- @field weapon +-- @field IniDCSUnit +-- @field IniDCSUnitName +-- @field IniDCSGroup +-- @field IniDCSGroupName +-- @field TgtDCSUnit +-- @field TgtDCSUnitName +-- @field TgtDCSGroup +-- @field TgtDCSGroupName +-- @field Weapon +-- @field WeaponName +-- @field WeaponTgtDCSUnit + +--- The Events structure +-- @type EVENT.Events +-- @field #number IniUnit + +function EVENT:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F2() + self.EventHandler = world.addEventHandler( self ) + return self +end + +function EVENT:EventText( EventID ) + + local EventText = _EVENTCODES[EventID] + + return EventText +end + + +--- Initializes the Events structure for the event +-- @param #EVENT self +-- @param DCSWorld#world.event EventID +-- @param #string EventClass +-- @return #EVENT.Events +function EVENT:Init( EventID, EventClass ) + self:F3( { _EVENTCODES[EventID], EventClass } ) + if not self.Events[EventID] then + self.Events[EventID] = {} + end + if not self.Events[EventID][EventClass] then + self.Events[EventID][EventClass] = {} + end + return self.Events[EventID][EventClass] +end + + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @param #function OnEventFunction +-- @return #EVENT +function EVENT:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, OnEventFunction ) + self:F2( EventTemplate.name ) + + for EventUnitID, EventUnit in pairs( EventTemplate.units ) do + OnEventFunction( self, EventUnit.name, EventFunction, EventSelf ) + end + return self +end + +--- Set a new listener for an S_EVENT_X event independent from a unit or a weapon. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @param EventID +-- @return #EVENT +function EVENT:OnEventGeneric( EventFunction, EventSelf, EventID ) + self:F2( { EventID } ) + + local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) + Event.EventFunction = EventFunction + Event.EventSelf = EventSelf + return self +end + + +--- Set a new listener for an S_EVENT_X event +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @param EventID +-- @return #EVENT +function EVENT:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, EventID ) + self:F2( EventDCSUnitName ) + + local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) + if not Event.IniUnit then + Event.IniUnit = {} + end + Event.IniUnit[EventDCSUnitName] = {} + Event.IniUnit[EventDCSUnitName].EventFunction = EventFunction + Event.IniUnit[EventDCSUnitName].EventSelf = EventSelf + return self +end + + +--- Create an OnBirth event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnBirthForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnBirthForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_BIRTH event, and registers the unit born. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnBirth( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) + + return self +end + +--- Set a new listener for an S_EVENT_BIRTH event. +-- @param #EVENT self +-- @param #string EventDCSUnitName The id of the unit for the event to be handled. +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnBirthForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) + + return self +end + +--- Create an OnCrash event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnCrashForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnCrashForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_CRASH event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnCrash( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_CRASH ) + + return self +end + +--- Set a new listener for an S_EVENT_CRASH event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnCrashForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_CRASH ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnDeadForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnDeadForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_DEAD event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnDead( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_DEAD ) + + return self +end + + +--- Set a new listener for an S_EVENT_DEAD event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_DEAD ) + + return self +end + +--- Set a new listener for an S_EVENT_PILOT_DEAD event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPilotDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_PILOT_DEAD ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnLandForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnLandForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_LAND event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnLandForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_LAND ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnTakeOffForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnTakeOffForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_TAKEOFF event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnTakeOffForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_TAKEOFF ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineShutDownForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnEngineShutDownForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_ENGINE_SHUTDOWN event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineShutDownForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_SHUTDOWN ) + + return self +end + +--- Set a new listener for an S_EVENT_ENGINE_STARTUP event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineStartUpForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_STARTUP ) + + return self +end + +--- Set a new listener for an S_EVENT_SHOT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnShot( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_SHOT ) + + return self +end + +--- Set a new listener for an S_EVENT_SHOT event for a unit. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnShotForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_SHOT ) + + return self +end + +--- Set a new listener for an S_EVENT_HIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnHit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_HIT ) + + return self +end + +--- Set a new listener for an S_EVENT_HIT event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnHitForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_HIT ) + + return self +end + +--- Set a new listener for an S_EVENT_PLAYER_ENTER_UNIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPlayerEnterUnit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_ENTER_UNIT ) + + return self +end + +--- Set a new listener for an S_EVENT_PLAYER_LEAVE_UNIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPlayerLeaveUnit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_LEAVE_UNIT ) + + return self +end + + + +function EVENT:onEvent( Event ) + self:F2( { _EVENTCODES[Event.id], Event } ) + + 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.IniDCSGroupName = "" + if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then + Event.IniDCSGroupName = Event.IniDCSGroup:getName() + end + end + if Event.target then + if Event.target and Event.target:getCategory() == Object.Category.UNIT then + Event.TgtDCSUnit = Event.target + Event.TgtDCSGroup = Event.TgtDCSUnit:getGroup() + Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() + Event.TgtDCSGroupName = "" + if Event.TgtDCSGroup and Event.TgtDCSGroup:isExist() then + Event.TgtDCSGroupName = Event.TgtDCSGroup:getName() + end + end + end + if Event.weapon then + Event.Weapon = Event.weapon + Event.WeaponName = Event.Weapon:getTypeName() + --Event.WeaponTgtDCSUnit = Event.Weapon:getTarget() + end + self:E( { _EVENTCODES[Event.id], Event } ) + for ClassName, EventData in pairs( self.Events[Event.id] ) do + if Event.IniDCSUnitName and EventData.IniUnit and EventData.IniUnit[Event.IniDCSUnitName] then + self:T2( { "Calling event function for class ", ClassName, " unit ", Event.IniDCSUnitName } ) + EventData.IniUnit[Event.IniDCSUnitName].EventFunction( EventData.IniUnit[Event.IniDCSUnitName].EventSelf, Event ) + else + if Event.IniDCSUnit and not EventData.IniUnit then + self:T2( { "Calling event function for class ", ClassName } ) + EventData.EventFunction( EventData.EventSelf, Event ) + end + end + end + end +end + +--- Encapsulation of DCS World Menu system in a set of MENU classes. +-- @module Menu + +Include.File( "Routines" ) +Include.File( "Base" ) + +--- The MENU class +-- @type MENU +-- @extends Base#BASE +MENU = { + ClassName = "MENU", + MenuPath = nil, + MenuText = "", + MenuParentPath = nil +} + +--- +function MENU:New( MenuText, MenuParentPath ) + + -- Arrange meta tables + local Child = BASE:Inherit( self, BASE:New() ) + + Child.MenuPath = nil + Child.MenuText = MenuText + Child.MenuParentPath = MenuParentPath + return Child +end + +--- The COMMANDMENU class +-- @type COMMANDMENU +-- @extends Menu#MENU +COMMANDMENU = { + ClassName = "COMMANDMENU", + CommandMenuFunction = nil, + CommandMenuArgument = nil +} + +function COMMANDMENU:New( MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = nil + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + Child.MenuPath = missionCommands.addCommand( MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + Child.CommandMenuFunction = CommandMenuFunction + Child.CommandMenuArgument = CommandMenuArgument + return Child +end + +--- The SUBMENU class +-- @type SUBMENU +-- @extends Menu#MENU +SUBMENU = { + ClassName = "SUBMENU" +} + +function SUBMENU:New( MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = nil + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + Child.MenuPath = missionCommands.addSubMenu( MenuText, MenuParentPath ) + return Child +end + +-- This local variable is used to cache the menus registered under clients. +-- Menus don't dissapear when clients are destroyed and restarted. +-- So every menu for a client created must be tracked so that program logic accidentally does not create +-- the same menus twice during initialization logic. +-- These menu classes are handling this logic with this variable. +local _MENUCLIENTS = {} + +--- The MENU_CLIENT class +-- @type MENU_CLIENT +-- @extends Menu#MENU +MENU_CLIENT = { + ClassName = "MENU_CLIENT" +} + +--- Creates a new menu item for a group +-- @param self +-- @param Client#CLIENT MenuClient The Client owning the menu. +-- @param #string MenuText The text for the menu. +-- @param #table ParentMenu The parent menu. +-- @return #MENU_CLIENT self +function MENU_CLIENT:New( MenuClient, MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + self:F( { MenuClient, MenuText, ParentMenu } ) + + self.MenuClient = MenuClient + self.MenuClientGroupID = MenuClient:GetClientGroupID() + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self.Menus = {} + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText } ) + + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) + end + + self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath ) + MenuPath[MenuPathID] = self.MenuPath + + self:T( { MenuClient:GetClientGroupName(), self.MenuPath } ) + + if ParentMenu and ParentMenu.Menus then + ParentMenu.Menus[self.MenuPath] = self + end + return self +end + +--- Removes the sub menus recursively of this MENU_CLIENT. +-- @param #MENU_CLIENT self +-- @return #MENU_CLIENT self +function MENU_CLIENT:RemoveSubMenus() + self:F( self.MenuPath ) + + for MenuID, Menu in pairs( self.Menus ) do + Menu:Remove() + end + +end + +--- Removes the sub menus recursively of this MENU_CLIENT. +-- @param #MENU_CLIENT self +-- @return #MENU_CLIENT self +function MENU_CLIENT:Remove() + self:F( self.MenuPath ) + + self:RemoveSubMenus() + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then + MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil + end + + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end + + +--- The MENU_CLIENT_COMMAND class +-- @type MENU_CLIENT_COMMAND +-- @extends Menu#MENU +MENU_CLIENT_COMMAND = { + ClassName = "MENU_CLIENT_COMMAND" +} + +--- Creates a new radio command item for a group +-- @param self +-- @param Client#CLIENT MenuClient The Client owning the menu. +-- @param MenuText The text for the menu. +-- @param ParentMenu The parent menu. +-- @param CommandMenuFunction A function that is called when the menu key is pressed. +-- @param CommandMenuArgument An argument for the function. +-- @return Menu#MENU_CLIENT_COMMAND self +function MENU_CLIENT_COMMAND:New( MenuClient, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + self.MenuClient = MenuClient + self.MenuClientGroupID = MenuClient:GetClientGroupID() + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) + + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) + end + + self.MenuPath = missionCommands.addCommandForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + MenuPath[MenuPathID] = self.MenuPath + + self.CommandMenuFunction = CommandMenuFunction + self.CommandMenuArgument = CommandMenuArgument + + ParentMenu.Menus[self.MenuPath] = self + + return self +end + +function MENU_CLIENT_COMMAND:Remove() + self:F( self.MenuPath ) + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then + MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil + end + + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end + + +--- The MENU_COALITION class +-- @type MENU_COALITION +-- @extends Menu#MENU +MENU_COALITION = { + ClassName = "MENU_COALITION" +} + +--- Creates a new coalition menu item +-- @param #MENU_COALITION self +-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. +-- @param #string MenuText The text for the menu. +-- @param #table ParentMenu The parent menu. +-- @return #MENU_COALITION self +function MENU_COALITION:New( MenuCoalition, MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + self:F( { MenuCoalition, MenuText, ParentMenu } ) + + self.MenuCoalition = MenuCoalition + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self.Menus = {} + + self:T( { MenuParentPath, MenuText } ) + + self.MenuPath = missionCommands.addSubMenuForCoalition( self.MenuCoalition, MenuText, MenuParentPath ) + + self:T( { self.MenuPath } ) + + if ParentMenu and ParentMenu.Menus then + ParentMenu.Menus[self.MenuPath] = self + end + return self +end + +--- Removes the sub menus recursively of this MENU_COALITION. +-- @param #MENU_COALITION self +-- @return #MENU_COALITION self +function MENU_COALITION:RemoveSubMenus() + self:F( self.MenuPath ) + + for MenuID, Menu in pairs( self.Menus ) do + Menu:Remove() + end + +end + +--- Removes the sub menus recursively of this MENU_COALITION. +-- @param #MENU_COALITION self +-- @return #MENU_COALITION self +function MENU_COALITION:Remove() + self:F( self.MenuPath ) + + self:RemoveSubMenus() + missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + + return nil +end + + +--- The MENU_COALITION_COMMAND class +-- @type MENU_COALITION_COMMAND +-- @extends Menu#MENU +MENU_COALITION_COMMAND = { + ClassName = "MENU_COALITION_COMMAND" +} + +--- Creates a new radio command item for a group +-- @param #MENU_COALITION_COMMAND self +-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. +-- @param MenuText The text for the menu. +-- @param ParentMenu The parent menu. +-- @param CommandMenuFunction A function that is called when the menu key is pressed. +-- @param CommandMenuArgument An argument for the function. +-- @return #MENU_COALITION_COMMAND self +function MENU_COALITION_COMMAND:New( MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + self.MenuCoalition = MenuCoalition + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self:T( { MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) + + self.MenuPath = missionCommands.addCommandForCoalition( self.MenuCoalition, MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + + self.CommandMenuFunction = CommandMenuFunction + self.CommandMenuArgument = CommandMenuArgument + + ParentMenu.Menus[self.MenuPath] = self + + return self +end + +--- Removes a radio command item for a coalition +-- @param #MENU_COALITION_COMMAND self +-- @return #MENU_COALITION_COMMAND self +function MENU_COALITION_COMMAND:Remove() + self:F( self.MenuPath ) + + missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end +--- GROUP class. +-- +-- @{GROUP} class +-- ============== +-- The @{GROUP} class is a wrapper class to handle the DCS Group objects: +-- +-- * Support all DCS Group APIs. +-- * Enhance with Group specific APIs not in the DCS Group API set. +-- * Handle local Group Controller. +-- * Manage the "state" of the DCS Group. +-- +-- +-- GROUP reference methods +-- ======================= +-- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). +-- +-- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the DCS Group or the DCS GroupName. +-- +-- Another thing to know is that GROUP objects do not "contain" the DCS Group object. +-- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. +-- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. +-- +-- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: +-- +-- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. +-- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). +-- @module Group +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) +Include.File( "Unit" ) + +--- The GROUP class +-- @type GROUP +-- @extends Base#BASE +-- @field DCSGroup#Group DCSGroup The DCS group class. +-- @field #string GroupName The name of the group. +GROUP = { + ClassName = "GROUP", + GroupName = "", + GroupID = 0, + Controller = nil, + DCSGroup = nil, + WayPointFunctions = {}, + } + +--- A DCSGroup +-- @type DCSGroup +-- @field id_ The ID of the group in DCS + +--- Create a new GROUP from a DCSGroup +-- @param #GROUP self +-- @param DCSGroup#Group GroupName The DCS Group name +-- @return #GROUP self +function GROUP:Register( GroupName ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( GroupName ) + self.GroupName = GroupName + return self +end + +-- Reference methods. + +--- Find the GROUP wrapper class instance using the DCS Group. +-- @param #GROUP self +-- @param DCSGroup#Group DCSGroup The DCS Group. +-- @return #GROUP The GROUP. +function GROUP:Find( DCSGroup ) + + local GroupName = DCSGroup:getName() -- Group#GROUP + local GroupFound = _DATABASE:FindGroup( GroupName ) + return GroupFound +end + +--- Find the created GROUP using the DCS Group Name. +-- @param #GROUP self +-- @param #string GroupName The DCS Group Name. +-- @return #GROUP The GROUP. +function GROUP:FindByName( GroupName ) + + local GroupFound = _DATABASE:FindGroup( GroupName ) + return GroupFound +end + +-- DCS Group methods support. + +--- Returns the DCS Group. +-- @param #GROUP self +-- @return DCSGroup#Group The DCS Group. +function GROUP:GetDCSGroup() + local DCSGroup = Group.getByName( self.GroupName ) + + if DCSGroup then + return DCSGroup + end + + return nil +end + + +--- Returns if the DCS Group is alive. +-- When the group exists at run-time, this method will return true, otherwise false. +-- @param #GROUP self +-- @return #boolean true if the DCS Group is alive. +function GROUP:IsAlive() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupIsAlive = DCSGroup:isExist() + self:T3( GroupIsAlive ) + return GroupIsAlive + end + + return nil +end + +--- Destroys the DCS Group and all of its DCS Units. +-- Note that this destroy method also raises a destroy event at run-time. +-- So all event listeners will catch the destroy event of this DCS Group. +-- @param #GROUP self +function GROUP:Destroy() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + self:CreateEventCrash( timer.getTime(), UnitData ) + end + DCSGroup:destroy() + DCSGroup = nil + end + + return nil +end + +--- Returns category of the DCS Group. +-- @param #GROUP self +-- @return DCSGroup#Group.Category The category ID +function GROUP:GetCategory() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T3( GroupCategory ) + return GroupCategory + end + + return nil +end + +--- Returns the category name of the DCS Group. +-- @param #GROUP self +-- @return #string Category name = Helicopter, Airplane, Ground Unit, Ship +function GROUP:GetCategoryName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local CategoryNames = { + [Group.Category.AIRPLANE] = "Airplane", + [Group.Category.HELICOPTER] = "Helicopter", + [Group.Category.GROUND] = "Ground Unit", + [Group.Category.SHIP] = "Ship", + } + local GroupCategory = DCSGroup:getCategory() + self:T3( GroupCategory ) + + return CategoryNames[GroupCategory] + end + + return nil +end + + +--- Returns the coalition of the DCS Group. +-- @param #GROUP self +-- @return DCSCoalitionObject#coalition.side The coalition side of the DCS Group. +function GROUP:GetCoalition() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCoalition = DCSGroup:getCoalition() + self:T3( GroupCoalition ) + return GroupCoalition + end + + return nil +end + +--- Returns the country of the DCS Group. +-- @param #GROUP self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Group is not existing or alive. +function GROUP:GetCountry() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCountry = DCSGroup:getUnit(1):getCountry() + self:T3( GroupCountry ) + return GroupCountry + end + + return nil +end + +--- Returns the name of the DCS Group. +-- @param #GROUP self +-- @return #string The DCS Group name. +function GROUP:GetName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupName = DCSGroup:getName() + self:T3( GroupName ) + return GroupName + end + + return nil +end + +--- Returns the DCS Group identifier. +-- @param #GROUP self +-- @return #number The identifier of the DCS Group. +function GROUP:GetID() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupID = DCSGroup:getID() + self:T3( GroupID ) + return GroupID + end + + return nil +end + +--- Returns the UNIT wrapper class with number UnitNumber. +-- If the underlying DCS Unit does not exist, the method will return nil. . +-- @param #GROUP self +-- @param #number UnitNumber The number of the UNIT wrapper class to be returned. +-- @return Unit#UNIT The UNIT wrapper class. +function GROUP:GetUnit( UnitNumber ) + self:F2( { self.GroupName, UnitNumber } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) + self:T3( UnitFound.UnitName ) + self:T2( UnitFound ) + return UnitFound + end + + return nil +end + +--- Returns the DCS Unit with number UnitNumber. +-- If the underlying DCS Unit does not exist, the method will return nil. . +-- @param #GROUP self +-- @param #number UnitNumber The number of the DCS Unit to be returned. +-- @return DCSUnit#Unit The DCS Unit. +function GROUP:GetDCSUnit( UnitNumber ) + self:F2( { self.GroupName, UnitNumber } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) + self:T3( DCSUnitFound ) + return DCSUnitFound + end + + return nil +end + +--- Returns current size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. +-- @param #GROUP self +-- @return #number The DCS Group size. +function GROUP:GetSize() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupSize = DCSGroup:getSize() + self:T3( GroupSize ) + return GroupSize + end + + return nil +end + +--- +--- Returns the initial size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. +-- @param #GROUP self +-- @return #number The DCS Group initial size. +function GROUP:GetInitialSize() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupInitialSize = DCSGroup:getInitialSize() + self:T3( GroupInitialSize ) + return GroupInitialSize + end + + return nil +end + +--- Returns the UNITs wrappers of the DCS Units of the DCS Group. +-- @param #GROUP self +-- @return #table The UNITs wrappers. +function GROUP:GetUnits() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnits = DCSGroup:getUnits() + local Units = {} + for Index, UnitData in pairs( DCSUnits ) do + Units[#Units+1] = UNIT:Find( UnitData ) + end + self:T3( Units ) + return Units + end + + return nil +end + + +--- Returns the DCS Units of the DCS Group. +-- @param #GROUP self +-- @return #table The DCS Units. +function GROUP:GetDCSUnits() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnits = DCSGroup:getUnits() + self:T3( DCSUnits ) + return DCSUnits + end + + return nil +end + +--- Get the controller for the GROUP. +-- @param #GROUP self +-- @return DCSController#Controller +function GROUP:_GetController() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupController = DCSGroup:getController() + self:T3( GroupController ) + return GroupController + end + + return nil +end + + +--- Retrieve the group mission and allow to place function hooks within the mission waypoint plan. +-- Use the method @{Group#GROUP:WayPointFunction} to define the hook functions for specific waypoints. +-- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. +-- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! +-- @param #GROUP self +-- @return #GROUP +function GROUP:WayPointInitialize() + + self.WayPoints = self:GetTaskRoute() + + return self +end + + +--- Registers a waypoint function that will be executed when the group moves over the WayPoint. +-- @param #GROUP self +-- @param #number WayPoint The waypoint number. Note that the start waypoint on the route is WayPoint 1! +-- @param #number WayPointIndex When defining multiple WayPoint functions for one WayPoint, use WayPointIndex to set the sequence of actions. +-- @param #function WayPointFunction The waypoint function to be called when the group moves over the waypoint. The waypoint function takes variable parameters. +-- @return #GROUP +function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) + self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) + + table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) + self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) + return self +end + + +function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) + + local DCSTask + + local DCSScript = {} + DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " + + if FunctionArguments.n > 0 then + DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" + else + DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" + end + + DCSTask = self:TaskWrappedAction( + self:CommandDoScript( + table.concat( DCSScript ) + ), WayPointIndex + ) + + self:T3( DCSTask ) + + return DCSTask + +end + + + +--- Executes the WayPoint plan. +-- The function gets a WayPoint parameter, that you can use to restart the mission at a specific WayPoint. +-- Note that when the WayPoint parameter is used, the new start mission waypoint of the group will be 1! +-- @param #GROUP self +-- @param #number WayPoint The WayPoint from where to execute the mission. +-- @param #WaitTime The amount seconds to wait before initiating the mission. +-- @return #GROUP +function GROUP:WayPointExecute( WayPoint, WaitTime ) + + if not WayPoint then + WayPoint = 1 + end + + -- When starting the mission from a certain point, the TaskPoints need to be deleted before the given WayPoint. + for TaskPointID = 1, WayPoint - 1 do + table.remove( self.WayPoints, 1 ) + end + + self:T3( self.WayPoints ) + + self:SetTask( self:TaskRoute( self.WayPoints ), WaitTime ) + + return self +end + + +--- Activates a GROUP. +-- @param #GROUP self +function GROUP:Activate() + self:F2( { self.GroupName } ) + trigger.action.activateGroup( self:GetDCSGroup() ) + return self:GetDCSGroup() +end + + +--- Gets the type name of the group. +-- @param #GROUP self +-- @return #string The type name of the group. +function GROUP:GetTypeName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupTypeName = DCSGroup:getUnit(1):getTypeName() + self:T3( GroupTypeName ) + return( GroupTypeName ) + end + + return nil +end + +--- Gets the CallSign of the first DCS Unit of the DCS Group. +-- @param #GROUP self +-- @return #string The CallSign of the first DCS Unit of the DCS Group. +function GROUP:GetCallsign() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCallSign = DCSGroup:getUnit(1):getCallsign() + self:T3( GroupCallSign ) + return GroupCallSign + end + + return nil +end + +--- Returns the current point (Vec2 vector) of the first DCS Unit in the DCS Group. +-- @return DCSTypes#Vec2 Current Vec2 point of the first DCS Unit of the DCS Group. +function GROUP:GetPointVec2() + self:F2( self.GroupName ) + + local GroupPointVec2 = self:GetUnit(1):GetPointVec2() + self:T3( GroupPointVec2 ) + return GroupPointVec2 +end + +--- Returns the current point (Vec3 vector) of the first DCS Unit in the DCS Group. +-- @return DCSTypes#Vec3 Current Vec3 point of the first DCS Unit of the DCS Group. +function GROUP:GetPointVec3() + self:F2( self.GroupName ) + + local GroupPointVec3 = self:GetUnit(1):GetPointVec3() + self:T3( GroupPointVec3 ) + return GroupPointVec3 +end + + + +-- Is Functions + +--- Returns if the group is of an air category. +-- If the group is a helicopter or a plane, then this method will return true, otherwise false. +-- @param #GROUP self +-- @return #boolean Air category evaluation result. +function GROUP:IsAir() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER + self:T3( IsAirResult ) + return IsAirResult + end + + return nil +end + +--- Returns if the DCS Group contains Helicopters. +-- @param #GROUP self +-- @return #boolean true if DCS Group contains Helicopters. +function GROUP:IsHelicopter() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T2( GroupCategory ) + return GroupCategory == Group.Category.HELICOPTER + end + + return nil +end + +--- Returns if the DCS Group contains AirPlanes. +-- @param #GROUP self +-- @return #boolean true if DCS Group contains AirPlanes. +function GROUP:IsAirPlane() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T2( GroupCategory ) + return GroupCategory == Group.Category.AIRPLANE + end + + return nil +end + +--- Returns if the DCS Group contains Ground troops. +-- @param #GROUP self +-- @return #boolean true if DCS Group contains Ground troops. +function GROUP:IsGround() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T2( GroupCategory ) + return GroupCategory == Group.Category.GROUND + end + + return nil +end + +--- Returns if the DCS Group contains Ships. +-- @param #GROUP self +-- @return #boolean true if DCS Group contains Ships. +function GROUP:IsShip() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T2( GroupCategory ) + return GroupCategory == Group.Category.SHIP + end + + return nil +end + +--- Returns if all units of the group are on the ground or landed. +-- If all units of this group are on the ground, this function will return true, otherwise false. +-- @param #GROUP self +-- @return #boolean All units on the ground result. +function GROUP:AllOnGround() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local AllOnGroundResult = true + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + if UnitData:inAir() then + AllOnGroundResult = false + end + end + + self:T3( AllOnGroundResult ) + return AllOnGroundResult + end + + return nil +end + +--- Returns the current maximum velocity of the group. +-- Each unit within the group gets evaluated, and the maximum velocity (= the unit which is going the fastest) is returned. +-- @param #GROUP self +-- @return #number Maximum velocity found. +function GROUP:GetMaxVelocity() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local MaxVelocity = 0 + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + + local Velocity = UnitData:getVelocity() + local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) + + if VelocityTotal < MaxVelocity then + MaxVelocity = VelocityTotal + end + end + + return MaxVelocity + end + + return nil +end + +--- Returns the current minimum height of the group. +-- Each unit within the group gets evaluated, and the minimum height (= the unit which is the lowest elevated) is returned. +-- @param #GROUP self +-- @return #number Minimum height found. +function GROUP:GetMinHeight() + self:F2() + +end + +--- Returns the current maximum height of the group. +-- Each unit within the group gets evaluated, and the maximum height (= the unit which is the highest elevated) is returned. +-- @param #GROUP self +-- @return #number Maximum height found. +function GROUP:GetMaxHeight() + self:F2() + +end + +-- Tasks + +--- Popping current Task from the group. +-- @param #GROUP self +-- @return Group#GROUP self +function GROUP:PopCurrentTask() + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Controller = self:_GetController() + Controller:popTask() + return self + end + + return nil +end + +--- Pushing Task on the queue from the group. +-- @param #GROUP self +-- @return Group#GROUP self +function GROUP:PushTask( DCSTask, WaitTime ) + self:F2() + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Controller = self:_GetController() + + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. + -- Therefore we schedule the functions to set the mission and options for the Group. + -- Controller:pushTask( DCSTask ) + + if WaitTime then + --routines.scheduleFunction( Controller.pushTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) + SCHEDULER:New( Controller, Controller.pushTask, { DCSTask }, WaitTime ) + else + Controller:pushTask( DCSTask ) + end + + return self + end + + return nil +end + +--- Clearing the Task Queue and Setting the Task on the queue from the group. +-- @param #GROUP self +-- @return Group#GROUP self +function GROUP:SetTask( DCSTask, WaitTime ) + self:F2( { DCSTask } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + + local Controller = self:_GetController() + + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. + -- Therefore we schedule the functions to set the mission and options for the Group. + -- Controller.setTask( Controller, DCSTask ) + + if not WaitTime then + WaitTime = 1 + end + --routines.scheduleFunction( Controller.setTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) + SCHEDULER:New( Controller, Controller.setTask, { DCSTask }, WaitTime ) + + return self + end + + return nil +end + + +--- Return a condition section for a controlled task +-- @param #GROUP self +-- @param DCSTime#Time time +-- @param #string userFlag +-- @param #boolean userFlagValue +-- @param #string condition +-- @param DCSTime#Time duration +-- @param #number lastWayPoint +-- return DCSTask#Task +function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration, lastWayPoint ) + self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) + + local DCSStopCondition = {} + DCSStopCondition.time = time + DCSStopCondition.userFlag = userFlag + DCSStopCondition.userFlagValue = userFlagValue + DCSStopCondition.condition = condition + DCSStopCondition.duration = duration + DCSStopCondition.lastWayPoint = lastWayPoint + + self:T3( { DCSStopCondition } ) + return DCSStopCondition +end + +--- Return a Controlled Task taking a Task and a TaskCondition +-- @param #GROUP self +-- @param DCSTask#Task DCSTask +-- @param #DCSStopCondition DCSStopCondition +-- @return DCSTask#Task +function GROUP:TaskControlled( DCSTask, DCSStopCondition ) + self:F2( { DCSTask, DCSStopCondition } ) + + local DCSTaskControlled + + DCSTaskControlled = { + id = 'ControlledTask', + params = { + task = DCSTask, + stopCondition = DCSStopCondition + } + } + + self:T3( { DCSTaskControlled } ) + return DCSTaskControlled +end + +--- Return a Combo Task taking an array of Tasks +-- @param #GROUP self +-- @param #list DCSTasks +-- @return DCSTask#Task +function GROUP:TaskCombo( DCSTasks ) + self:F2( { DCSTasks } ) + + local DCSTaskCombo + + DCSTaskCombo = { + id = 'ComboTask', + params = { + tasks = DCSTasks + } + } + + self:T3( { DCSTaskCombo } ) + return DCSTaskCombo +end + +--- Return a WrappedAction Task taking a Command +-- @param #GROUP self +-- @param DCSCommand#Command DCSCommand +-- @return DCSTask#Task +function GROUP:TaskWrappedAction( DCSCommand, Index ) + self:F2( { DCSCommand } ) + + local DCSTaskWrappedAction + + DCSTaskWrappedAction = { + id = "WrappedAction", + enabled = true, + number = Index, + auto = false, + params = { + action = DCSCommand, + }, + } + + self:T3( { DCSTaskWrappedAction } ) + return DCSTaskWrappedAction +end + +--- Executes a command action +-- @param #GROUP self +-- @param DCSCommand#Command DCSCommand +-- @return #GROUP self +function GROUP:SetCommand( DCSCommand ) + self:F2( DCSCommand ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Controller = self:_GetController() + Controller:setCommand( DCSCommand ) + return self + end + + return nil +end + +--- Perform a switch waypoint command +-- @param #GROUP self +-- @param #number FromWayPoint +-- @param #number ToWayPoint +-- @return DCSTask#Task +function GROUP:CommandSwitchWayPoint( FromWayPoint, ToWayPoint, Index ) + self:F2( { FromWayPoint, ToWayPoint, Index } ) + + local CommandSwitchWayPoint = { + id = 'SwitchWaypoint', + params = { + fromWaypointIndex = FromWayPoint, + goToWaypointIndex = ToWayPoint, + }, + } + + self:T3( { CommandSwitchWayPoint } ) + return CommandSwitchWayPoint +end + + +--- Orbit at a specified position at a specified alititude during a specified duration with a specified speed. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point to hold the position. +-- @param #number Altitude The altitude to hold the position. +-- @param #number Speed The speed flying when holding the position. +-- @return #GROUP self +function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed ) + self:F2( { self.GroupName, Point, Altitude, Speed } ) + +-- pattern = enum AI.Task.OribtPattern, +-- point = Vec2, +-- point2 = Vec2, +-- speed = Distance, +-- altitude = Distance + + local LandHeight = land.getHeight( Point ) + + self:T3( { LandHeight } ) + + local DCSTask = { id = 'Orbit', + params = { pattern = AI.Task.OrbitPattern.CIRCLE, + point = Point, + speed = Speed, + altitude = Altitude + LandHeight + } + } + + +-- local AITask = { id = 'ControlledTask', +-- params = { task = { id = 'Orbit', +-- params = { pattern = AI.Task.OrbitPattern.CIRCLE, +-- point = Point, +-- speed = Speed, +-- altitude = Altitude + LandHeight +-- } +-- }, +-- stopCondition = { duration = Duration +-- } +-- } +-- } +-- ) + + return DCSTask +end + +--- Orbit at the current position of the first unit of the group at a specified alititude +-- @param #GROUP self +-- @param #number Altitude The altitude to hold the position. +-- @param #number Speed The speed flying when holding the position. +-- @return #GROUP self +function GROUP:TaskOrbitCircle( Altitude, Speed ) + self:F2( { self.GroupName, Altitude, Speed } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupPoint = self:GetPointVec2() + return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) + end + + return nil +end + + + +--- Hold position at the current position of the first unit of the group. +-- @param #GROUP self +-- @param #number Duration The maximum duration in seconds to hold the position. +-- @return #GROUP self +function GROUP:TaskHoldPosition() + self:F2( { self.GroupName } ) + + return self:TaskOrbitCircle( 30, 10 ) +end + + +--- Land the group at a Vec2Point. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to land. +-- @param #number Duration The duration in seconds to stay on the ground. +-- @return #GROUP self +function GROUP:TaskLandAtVec2( Point, Duration ) + self:F2( { self.GroupName, Point, Duration } ) + + local DCSTask + + if Duration and Duration > 0 then + DCSTask = { id = 'Land', params = { point = Point, durationFlag = true, duration = Duration } } + else + DCSTask = { id = 'Land', params = { point = Point, durationFlag = false } } + end + + self:T3( DCSTask ) + return DCSTask +end + +--- Land the group at a @{Zone#ZONE). +-- @param #GROUP self +-- @param Zone#ZONE Zone The zone where to land. +-- @param #number Duration The duration in seconds to stay on the ground. +-- @return #GROUP self +function GROUP:TaskLandAtZone( Zone, Duration, RandomPoint ) + self:F2( { self.GroupName, Zone, Duration, RandomPoint } ) + + local Point + if RandomPoint then + Point = Zone:GetRandomPointVec2() + else + Point = Zone:GetPointVec2() + end + + local DCSTask = self:TaskLandAtVec2( Point, Duration ) + + self:T3( DCSTask ) + return DCSTask +end + + +--- Attack the Unit. +-- @param #GROUP self +-- @param Unit#UNIT The unit. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackUnit( AttackUnit ) + self:F2( { self.GroupName, AttackUnit } ) + +-- AttackUnit = { +-- id = 'AttackUnit', +-- params = { +-- unitId = Unit.ID, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend +-- attackQty = number, +-- direction = Azimuth, +-- attackQtyLimit = boolean, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'AttackUnit', + params = { unitId = AttackUnit:GetID(), + expend = AI.Task.WeaponExpend.TWO, + groupAttack = true, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Attack a Group. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup The Group to be attacked. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackGroup( AttackGroup ) + self:F2( { self.GroupName, AttackGroup } ) + +-- AttackGroup = { +-- id = 'AttackGroup', +-- params = { +-- groupId = Group.ID, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- directionEnabled = boolean, +-- direction = Azimuth, +-- altitudeEnabled = boolean, +-- altitude = Distance, +-- attackQtyLimit = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'AttackGroup', + params = { groupId = AttackGroup:GetID(), + expend = AI.Task.WeaponExpend.TWO, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Fires at a VEC2 point. +-- @param #GROUP self +-- @param DCSTypes#Vec2 The point to fire at. +-- @param DCSTypes#Distance Radius The radius of the zone to deploy the fire at. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskFireAtPoint( PointVec2, Radius ) + self:F2( { self.GroupName, PointVec2, Radius } ) + +-- FireAtPoint = { +-- id = 'FireAtPoint', +-- params = { +-- point = Vec2, +-- radius = Distance, +-- } +-- } + + local DCSTask + DCSTask = { id = 'FireAtPoint', + params = { point = PointVec2, + radius = Radius, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + + +--- Move the group to a Vec2 Point, wait for a defined duration and embark a group. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to wait. +-- @param #number Duration The duration in seconds to wait. +-- @param #GROUP EmbarkingGroup The group to be embarked. +-- @return DCSTask#Task The DCS task structure +function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) + self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) + + local DCSTask + DCSTask = { id = 'Embarking', + params = { x = Point.x, + y = Point.y, + duration = Duration, + groupsForEmbarking = { EmbarkingGroup.GroupID }, + durationFlag = true, + distributionFlag = false, + distribution = {}, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to wait. +-- @param #number Radius The radius of the embarking zone around the Point. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) + self:F2( { self.GroupName, Point, Radius } ) + + local DCSTask --DCSTask#Task + DCSTask = { id = 'EmbarkToTransport', + params = { x = Point.x, + y = Point.y, + zoneRadius = Radius, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task from a mission template. +-- @param #GROUP self +-- @param #table TaskMission A table containing the mission task. +-- @return DCSTask#Task +function GROUP:TaskMission( TaskMission ) + self:F2( Points ) + + local DCSTask + DCSTask = { id = 'Mission', params = { TaskMission, }, } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task to follow a given route defined by Points. +-- @param #GROUP self +-- @param #table Points A table of route points. +-- @return DCSTask#Task +function GROUP:TaskRoute( Points ) + self:F2( Points ) + + local DCSTask + DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Make the DCS Group to fly to a given point and hover. +-- @param #GROUP self +-- @param DCSTypes#Vec3 Point The destination point in Vec3 format. +-- @param #number Speed The speed to travel. +-- @return #GROUP self +function GROUP:TaskRouteToVec2( Point, Speed ) + self:F2( { Point, Speed } ) + + local GroupPoint = self:GetUnit( 1 ):GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local PointTo = {} + PointTo.x = Point.x + PointTo.y = Point.y + PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" + PointTo.speed = Speed + PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self +end + +--- Make the DCS Group to fly to a given point and hover. +-- @param #GROUP self +-- @param DCSTypes#Vec3 Point The destination point in Vec3 format. +-- @param #number Speed The speed to travel. +-- @return #GROUP self +function GROUP:TaskRouteToVec3( Point, Speed ) + self:F2( { Point, Speed } ) + + local GroupPoint = self:GetUnit( 1 ):GetPointVec3() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.z + PointFrom.alt = GroupPoint.y + PointFrom.alt_type = "BARO" + PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local PointTo = {} + PointTo.x = Point.x + PointTo.y = Point.z + PointTo.alt = Point.y + PointTo.alt_type = "BARO" + PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" + PointTo.speed = Speed + PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self +end + + + +--- Make the group to follow a given route. +-- @param #GROUP self +-- @param #table GoPoints A table of Route Points. +-- @return #GROUP self +function GROUP:Route( GoPoints ) + self:F2( GoPoints ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Points = routines.utils.deepCopy( GoPoints ) + local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } + local Controller = self:_GetController() + --Controller.setTask( Controller, MissionTask ) + --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) + SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) + return self + end + + return nil +end + + + +--- Route the group to a given zone. +-- The group final destination point can be randomized. +-- A speed can be given in km/h. +-- A given formation can be given. +-- @param #GROUP self +-- @param Zone#ZONE Zone The zone where to route to. +-- @param #boolean Randomize Defines whether to target point gets randomized within the Zone. +-- @param #number Speed The speed. +-- @param Base#FORMATION Formation The formation string. +function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) + self:F2( Zone ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + + local GroupPoint = self:GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Cone" + PointFrom.speed = 20 / 1.6 + + + local PointTo = {} + local ZonePoint + + if Randomize then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + PointTo.x = ZonePoint.x + PointTo.y = ZonePoint.y + PointTo.type = "Turning Point" + + if Formation then + PointTo.action = Formation + else + PointTo.action = "Cone" + end + + if Speed then + PointTo.speed = Speed + else + PointTo.speed = 20 / 1.6 + end + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self + end + + return nil +end + +-- Commands + +--- Do Script command +-- @param #GROUP self +-- @param #string DoScript +-- @return #DCSCommand +function GROUP:CommandDoScript( DoScript ) + + local DCSDoScript = { + id = "Script", + params = { + command = DoScript, + }, + } + + self:T3( DCSDoScript ) + return DCSDoScript +end + + +--- Return the mission template of the group. +-- @param #GROUP self +-- @return #table The MissionTemplate +function GROUP:GetTaskMission() + self:F2( self.GroupName ) + + return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template ) +end + +--- Return the mission route of the group. +-- @param #GROUP self +-- @return #table The mission route defined by points. +function GROUP:GetTaskRoute() + self:F2( self.GroupName ) + + return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template.route.points ) +end + +--- Return the route of a group by using the @{Database#DATABASE} class. +-- @param #GROUP self +-- @param #number Begin The route point from where the copy will start. The base route point is 0. +-- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. +-- @param #boolean Randomize Randomization of the route, when true. +-- @param #number Radius When randomization is on, the randomization is within the radius. +function GROUP:CopyRoute( Begin, End, Randomize, Radius ) + self:F2( { Begin, End } ) + + local Points = {} + + -- Could be a Spawned Group + local GroupName = string.match( self:GetName(), ".*#" ) + if GroupName then + GroupName = GroupName:sub( 1, -2 ) + else + GroupName = self:GetName() + end + + self:T3( { GroupName } ) + + local Template = _DATABASE.Templates.Groups[GroupName].Template + + if Template then + if not Begin then + Begin = 0 + end + if not End then + End = 0 + end + + for TPointID = Begin + 1, #Template.route.points - End do + if Template.route.points[TPointID] then + Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) + if Randomize then + if not Radius then + Radius = 500 + end + Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) + Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) + end + end + end + return Points + end + + return nil +end + + +function GROUP:GetDetectedTargets() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + return self:_GetController():getDetectedTargets() + end + + return nil +end + +function GROUP:IsTargetDetected( DCSObject ) + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + + local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity + = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, + Controller.Detection.VISUAL, + Controller.Detection.OPTIC, + Controller.Detection.RADAR, + Controller.Detection.IRST, + Controller.Detection.RWR, + Controller.Detection.DLINK + ) + return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity + end + + return nil +end + +-- Options + +--- Can the GROUP hold their weapons? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEHoldFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Holding weapons. +-- @param Group#GROUP self +-- @return Group#GROUP self +function GROUP:OptionROEHoldFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.WEAPON_HOLD ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack returning on enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEReturnFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Return fire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEReturnFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.RETURN_FIRE ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack designated targets? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEOpenFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Openfire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEOpenFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.OPEN_FIRE ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack targets of opportunity? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEWeaponFreePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + +--- Weapon free. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEWeaponFree() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) + end + + return self + end + + return nil +end + +--- Can the GROUP ignore enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTNoReactionPossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- No evasion on enemy threats. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTNoReaction() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade using passive defenses? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTPassiveDefensePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + +--- Evasion passive defense. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTPassiveDefense() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade on enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTEvadeFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- Evade on fire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTEvadeFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade on fire using vertical manoeuvres? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTVerticalPossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- Evade on fire using vertical manoeuvres. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTVertical() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + end + + return self + end + + return nil +end + +-- Message APIs + +--- Returns a message for a coalition or a client. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +-- @return Message#MESSAGE +function GROUP:Message( Message, Duration ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + return MESSAGE:New( Message, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) + end + + return nil +end + +--- Send a message to all coalitions. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +function GROUP:MessageToAll( Message, Duration ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + self:Message( Message, Duration ):ToAll() + end + + return nil +end + +--- Send a message to the red coalition. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +function GROUP:MessageToRed( Message, Duration ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + self:Message( Message, Duration ):ToRed() + end + + return nil +end + +--- Send a message to the blue coalition. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +function GROUP:MessageToBlue( Message, Duration ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + self:Message( Message, Duration ):ToBlue() + end + + return nil +end + +--- Send a message to a client. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param #Duration Duration The duration of the message. +-- @param Client#CLIENT Client The client object receiving the message. +function GROUP:MessageToClient( Message, Duration, Client ) + self:F2( { Message, Duration } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + self:Message( Message, Duration ):ToClient( Client ) + end + + return nil +end +--- UNIT Class +-- +-- @{UNIT} class +-- ============== +-- The @{UNIT} class is a wrapper class to handle the DCS Unit objects: +-- +-- * Support all DCS Unit APIs. +-- * Enhance with Unit specific APIs not in the DCS Unit API set. +-- * Handle local Unit Controller. +-- * Manage the "state" of the DCS Unit. +-- +-- +-- UNIT reference methods +-- ====================== +-- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class). +-- +-- The UNIT class **does not contain a :New()** method, rather it provides **:Find()** methods to retrieve the object reference +-- using the DCS Unit or the DCS UnitName. +-- +-- Another thing to know is that UNIT objects do not "contain" the DCS Unit object. +-- The UNIT methods will reference the DCS Unit object by name when it is needed during API execution. +-- If the DCS Unit object does not exist or is nil, the UNIT methods will return nil and log an exception in the DCS.log file. +-- +-- The UNIT class provides the following functions to retrieve quickly the relevant UNIT instance: +-- +-- * @{#UNIT.Find}(): Find a UNIT instance from the _DATABASE object using a DCS Unit object. +-- * @{#UNIT.FindByName}(): Find a UNIT instance from the _DATABASE object using a DCS Unit name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil). +-- +-- DCS UNIT APIs +-- ============= +-- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method. +-- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call, +-- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSUnit#Unit.getName}() +-- is implemented in the UNIT class as @{#UNIT.GetName}(). +-- +-- Additional UNIT APIs +-- ==================== +-- The UNIT class comes with additional methods. Find below a summary. +-- +-- Smoke, Flare Units +-- ------------------ +-- The UNIT class provides methods to smoke or flare units easily. +-- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods +-- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit. +-- When the DCS Unit moves for whatever reason, the smoking will still continue! +-- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}() +-- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration. +-- +-- Position, Point +-- --------------- +-- The UNIT class provides methods to obtain the current point or position of the DCS Unit. +-- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetPointVec3}() will obtain the current location of the DCS Unit in a Vec2 (2D) or a Vec3 (3D) vector respectively. +-- If you want to obtain the complete 3D position including oriëntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively. +-- +-- Alive +-- ----- +-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active. +-- +-- Test for other units in radius +-- ------------------------------ +-- One can test if another DCS Unit is within a given radius of the current DCS Unit, by using the @{#UNIT.OtherUnitInRadius}() method. +-- +-- More functions will be added +-- ---------------------------- +-- During the MOOSE development, more functions will be added. A complete list of the current functions is below. +-- +-- +-- +-- +-- @module Unit +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + +--- The UNIT class +-- @type UNIT +-- @extends Base#BASE +-- @field #UNIT.FlareColor FlareColor +-- @field #UNIT.SmokeColor SmokeColor +UNIT = { + ClassName="UNIT", + CategoryName = { + [Unit.Category.AIRPLANE] = "Airplane", + [Unit.Category.HELICOPTER] = "Helicoper", + [Unit.Category.GROUND_UNIT] = "Ground Unit", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + }, + FlareColor = { + Green = trigger.flareColor.Green, + Red = trigger.flareColor.Red, + White = trigger.flareColor.White, + Yellow = trigger.flareColor.Yellow + }, + SmokeColor = { + Green = trigger.smokeColor.Green, + Red = trigger.smokeColor.Red, + White = trigger.smokeColor.White, + Orange = trigger.smokeColor.Orange, + Blue = trigger.smokeColor.Blue + }, + } + +--- FlareColor +-- @type UNIT.FlareColor +-- @field Green +-- @field Red +-- @field White +-- @field Yellow + +--- SmokeColor +-- @type UNIT.SmokeColor +-- @field Green +-- @field Red +-- @field White +-- @field Orange +-- @field Blue + +-- Registration. + +--- Create a new UNIT from DCSUnit. +-- @param #UNIT self +-- @param DCSUnit#Unit DCSUnit +-- @param Database#DATABASE Database +-- @return Unit#UNIT +function UNIT:Register( UnitName ) + + local self = BASE:Inherit( self, BASE:New() ) + self:F2( UnitName ) + self.UnitName = UnitName + return self +end + +-- Reference methods. + +--- Finds a UNIT from the _DATABASE using a DCSUnit object. +-- @param #UNIT self +-- @param DCSUnit#Unit DCSUnit An existing DCS Unit object reference. +-- @return Unit#UNIT self +function UNIT:Find( DCSUnit ) + + local UnitName = DCSUnit:getName() + local UnitFound = _DATABASE:FindUnit( UnitName ) + return UnitFound +end + +--- Find a UNIT in the _DATABASE using the name of an existing DCS Unit. +-- @param #UNIT self +-- @param #string UnitName The Unit Name. +-- @return Unit#UNIT self +function UNIT:FindByName( UnitName ) + + local UnitFound = _DATABASE:FindUnit( UnitName ) + return UnitFound +end + +function UNIT:GetDCSUnit() + local DCSUnit = Unit.getByName( self.UnitName ) + + if DCSUnit then + return DCSUnit + end + + return nil +end + +--- Returns coalition of the Unit. +-- @param Unit#UNIT self +-- @return DCSCoalitionObject#coalition.side The side of the coalition. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCoalition() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCoalition = DCSUnit:getCoalition() + self:T3( UnitCoalition ) + return UnitCoalition + end + + return nil +end + +--- Returns country of the Unit. +-- @param Unit#UNIT self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCountry() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCountry = DCSUnit:getCountry() + self:T3( UnitCountry ) + return UnitCountry + end + + return nil +end + + +--- Returns DCS Unit object name. +-- The function provides access to non-activated units too. +-- @param Unit#UNIT self +-- @return #string The name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitName = self.UnitName + return UnitName + end + + return nil +end + + +--- Returns if the unit is alive. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is alive. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsAlive() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitIsAlive = DCSUnit:isExist() + return UnitIsAlive + end + + return false +end + +--- Returns if the unit is activated. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is activated. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsActive() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local UnitIsActive = DCSUnit:isActive() + return UnitIsActive + end + + return nil +end + +--- Returns name of the player that control the unit or nil if the unit is controlled by A.I. +-- @param Unit#UNIT self +-- @return #string Player Name +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPlayerName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local PlayerName = DCSUnit:getPlayerName() + if PlayerName == nil then + PlayerName = "" + end + return PlayerName + end + + return nil +end + +--- Returns the unit's unique identifier. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.ID Unit ID +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetID() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitID = DCSUnit:getID() + return UnitID + end + + return nil +end + +--- Returns the unit's number in the group. +-- The number is the same number the unit has in ME. +-- It may not be changed during the mission. +-- If any unit in the group is destroyed, the numbers of another units will not be changed. +-- @param Unit#UNIT self +-- @return #number The Unit number. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetNumber() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitNumber = DCSUnit:getNumber() + return UnitNumber + end + + return nil +end + +--- Returns the unit's group if it exist and nil otherwise. +-- @param Unit#UNIT self +-- @return Group#GROUP The Group of the Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetGroup() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitGroup = DCSUnit:getGroup() + return UnitGroup + end + + return nil +end + + +--- Returns the unit's callsign - the localized string. +-- @param Unit#UNIT self +-- @return #string The Callsign of the Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCallSign() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCallSign = DCSUnit:getCallsign() + return UnitCallSign + end + + return nil +end + +--- Returns the unit's health. Dead units has health <= 1.0. +-- @param Unit#UNIT self +-- @return #number The Unit's health value. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetLife() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitLife = DCSUnit:getLife() + return UnitLife + end + + return nil +end + +--- Returns the Unit's initial health. +-- @param Unit#UNIT self +-- @return #number The Unit's initial health value. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetLife0() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitLife0 = DCSUnit:getLife0() + return UnitLife0 + end + + return nil +end + +--- Returns relative amount of fuel (from 0.0 to 1.0) the unit has in its internal tanks. If there are additional fuel tanks the value may be greater than 1.0. +-- @param Unit#UNIT self +-- @return #number The relative amount of fuel (from 0.0 to 1.0). +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetFuel() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitFuel = DCSUnit:getFuel() + return UnitFuel + end + + return nil +end + +--- Returns the Unit's ammunition. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Ammo +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetAmmo() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitAmmo = DCSUnit:getAmmo() + return UnitAmmo + end + + return nil +end + +--- Returns the unit sensors. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Sensors +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetSensors() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitSensors = DCSUnit:getSensors() + return UnitSensors + end + + return nil +end + +-- Need to add here a function per sensortype +-- unit:hasSensors(Unit.SensorType.RADAR, Unit.RadarType.AS) + +--- Returns two values: +-- +-- * First value indicates if at least one of the unit's radar(s) is on. +-- * Second value is the object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. +-- @param Unit#UNIT self +-- @return #boolean Indicates if at least one of the unit's radar(s) is on. +-- @return DCSObject#Object The object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetRadar() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitRadarOn, UnitRadarObject = DCSUnit:getRadar() + return UnitRadarOn, UnitRadarObject + end + + return nil, nil +end + +-- Need to add here functions to check if radar is on and which object etc. + +--- Returns unit descriptor. Descriptor type depends on unit category. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Desc The Unit descriptor. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetDesc() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitDesc = DCSUnit:getDesc() + return UnitDesc + end + + return nil +end + + +--- Returns the type name of the DCS Unit. +-- @param Unit#UNIT self +-- @return #string The type name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetTypeName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitTypeName = DCSUnit:getTypeName() + self:T3( UnitTypeName ) + return UnitTypeName + end + + return nil +end + + + +--- Returns the prefix name of the DCS Unit. A prefix name is a part of the name before a '#'-sign. +-- DCS Units spawned with the @{SPAWN} class contain a '#'-sign to indicate the end of the (base) DCS Unit name. +-- The spawn sequence number and unit number are contained within the name after the '#' sign. +-- @param Unit#UNIT self +-- @return #string The name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPrefix() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPrefix = string.match( self.UnitName, ".*#" ):sub( 1, -2 ) + self:T3( UnitPrefix ) + return UnitPrefix + end + + return nil +end + + + +--- Returns the @{DCSTypes#Vec2} vector indicating the point in 2D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec2 The 2D point vector of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPointVec2() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPosition().p + + local UnitPointVec2 = {} + UnitPointVec2.x = UnitPointVec3.x + UnitPointVec2.y = UnitPointVec3.z + + self:T3( UnitPointVec2 ) + return UnitPointVec2 + end + + return nil +end + + +--- Returns the @{DCSTypes#Vec3} vector indicating the point in 3D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec3 The 3D point vector of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPointVec3() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPosition().p + self:T3( UnitPointVec3 ) + return UnitPointVec3 + end + + return nil +end + +--- Returns the @{DCSTypes#Position3} position vectors indicating the point and direction vectors in 3D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Position The 3D position vectors of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPositionVec3() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPosition = DCSUnit:getPosition() + self:T3( UnitPosition ) + return UnitPosition + end + + return nil +end + +--- Returns the DCS Unit velocity vector. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec3 The velocity vector +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetVelocity() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitVelocityVec3 = DCSUnit:getVelocity() + self:T3( UnitVelocityVec3 ) + return UnitVelocityVec3 + end + + return nil +end + +--- Returns true if the DCS Unit is in the air. +-- @param Unit#UNIT self +-- @return #boolean true if in the air. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:InAir() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitInAir = DCSUnit:inAir() + self:T3( UnitInAir ) + return UnitInAir + end + + return nil +end + +--- Returns the altitude of the DCS Unit. +-- @param Unit#UNIT self +-- @return DCSTypes#Distance The altitude of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetAltitude() + self:F2() + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPoint() --DCSTypes#Vec3 + return UnitPointVec3.y + end + + return nil +end + +--- Returns true if there is an **other** DCS Unit within a radius of the current 2D point of the DCS Unit. +-- @param Unit#UNIT self +-- @param Unit#UNIT AwaitUnit The other UNIT wrapper object. +-- @param Radius The radius in meters with the DCS Unit in the centre. +-- @return true If the other DCS Unit is within the radius of the 2D point of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:OtherUnitInRadius( AwaitUnit, Radius ) + self:F2( { self.UnitName, AwaitUnit.UnitName, Radius } ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPos = self:GetPointVec3() + local AwaitUnitPos = AwaitUnit:GetPointVec3() + + if (((UnitPos.x - AwaitUnitPos.x)^2 + (UnitPos.z - AwaitUnitPos.z)^2)^0.5 <= Radius) then + self:T3( "true" ) + return true + else + self:T3( "false" ) + return false + end + end + + return nil +end + +--- Returns the DCS Unit category name as defined within the DCS Unit Descriptor. +-- @param Unit#UNIT self +-- @return #string The DCS Unit Category Name +function UNIT:GetCategoryName() + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCategoryName = self.CategoryName[ self:GetDesc().category ] + return UnitCategoryName + end + + return nil +end + +--- Signal a flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:Flare( FlareColor ) + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), FlareColor , 0 ) +end + +--- Signal a white flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareWhite() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.White , 0 ) +end + +--- Signal a yellow flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareYellow() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Yellow , 0 ) +end + +--- Signal a green flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareGreen() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Green , 0 ) +end + +--- Signal a red flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareRed() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Red, 0 ) +end + +--- Smoke the UNIT. +-- @param #UNIT self +function UNIT:Smoke( SmokeColor ) + self:F2() + trigger.action.smoke( self:GetPointVec3(), SmokeColor ) +end + +--- Smoke the UNIT Green. +-- @param #UNIT self +function UNIT:SmokeGreen() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Green ) +end + +--- Smoke the UNIT Red. +-- @param #UNIT self +function UNIT:SmokeRed() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Red ) +end + +--- Smoke the UNIT White. +-- @param #UNIT self +function UNIT:SmokeWhite() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.White ) +end + +--- Smoke the UNIT Orange. +-- @param #UNIT self +function UNIT:SmokeOrange() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Orange ) +end + +--- Smoke the UNIT Blue. +-- @param #UNIT self +function UNIT:SmokeBlue() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Blue ) +end + +-- Is methods + +--- Returns if the unit is of an air category. +-- If the unit is a helicopter or a plane, then this method will return true, otherwise false. +-- @param #UNIT self +-- @return #boolean Air category evaluation result. +function UNIT:IsAir() + self:F2() + + local UnitDescriptor = self.DCSUnit:getDesc() + self:T3( { UnitDescriptor.category, Unit.Category.AIRPLANE, Unit.Category.HELICOPTER } ) + + local IsAirResult = ( UnitDescriptor.category == Unit.Category.AIRPLANE ) or ( UnitDescriptor.category == Unit.Category.HELICOPTER ) + + self:T3( IsAirResult ) + return IsAirResult +end + +--- ZONE Classes +-- @module Zone + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + +--- The ZONE class +-- @type ZONE +-- @Extends Base#BASE +ZONE = { + ClassName="ZONE", + } + +function ZONE:New( ZoneName ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( ZoneName ) + + local Zone = trigger.misc.getZone( ZoneName ) + + if not Zone then + error( "Zone " .. ZoneName .. " does not exist." ) + return nil + end + + self.Zone = Zone + self.ZoneName = ZoneName + + return self +end + +function ZONE:GetPointVec2() + self:F( self.ZoneName ) + + local Zone = trigger.misc.getZone( self.ZoneName ) + local Point = { x = Zone.point.x, y = Zone.point.z } + + self:T( { Zone, Point } ) + + return Point +end + +function ZONE:GetPointVec3( Height ) + self:F( self.ZoneName ) + + local Zone = trigger.misc.getZone( self.ZoneName ) + local Point = { x = Zone.point.x, y = land.getHeight( self:GetPointVec2() ) + Height, z = Zone.point.z } + + self:T( { Zone, Point } ) + + return Point +end + +function ZONE:GetRandomPointVec2() + self:F( self.ZoneName ) + + local Point = {} + + local Zone = trigger.misc.getZone( self.ZoneName ) + + local angle = math.random() * math.pi*2; + Point.x = Zone.point.x + math.cos( angle ) * math.random() * Zone.radius; + Point.y = Zone.point.z + math.sin( angle ) * math.random() * Zone.radius; + + self:T( { Zone, Point } ) + + return Point +end + +function ZONE:GetRadius() + self:F( self.ZoneName ) + + local Zone = trigger.misc.getZone( self.ZoneName ) + + self:T( { Zone } ) + + return Zone.radius +end + +--- The CLIENT models client units in multi player missions. +-- +-- @{#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. +-- The @{CLIENT} class is a wrapper class to handle the DCS Unit objects that have the skillset defined as __Client__ or __Player__: +-- +-- * Wraps the DCS Unit objects with skill level set to Player or Client. +-- * Support all DCS Unit APIs. +-- * Enhance with Unit specific APIs not in the DCS Group API set. +-- * When player joins Unit, execute alive init logic. +-- * Handles messages to players. +-- * Manage the "state" of the DCS Unit. +-- +-- Clients are being used by the @{MISSION} class to follow players and register their successes. +-- +-- CLIENT reference methods +-- ======================= +-- For each DCS Unit having skill level Player or Client, a CLIENT wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts). +-- +-- The CLIENT class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the DCS Unit or the DCS UnitName. +-- +-- Another thing to know is that CLIENT objects do not "contain" the DCS Unit object. +-- The CLIENT methods will reference the DCS Unit object by name when it is needed during API execution. +-- If the DCS Unit object does not exist or is nil, the CLIENT methods will return nil and log an exception in the DCS.log file. +-- +-- The CLIENT class provides the following functions to retrieve quickly the relevant CLIENT instance: +-- +-- * @{#CLIENT.Find}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit object. +-- * @{#CLIENT.FindByName}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these CLIENT OBJECT REFERENCES! (make the CLIENT object references nil). +-- +-- @module Client +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Cargo" ) +Include.File( "Message" ) + + +--- The CLIENT class +-- @type CLIENT +-- @extends Unit#UNIT +CLIENT = { + ONBOARDSIDE = { + NONE = 0, + LEFT = 1, + RIGHT = 2, + BACK = 3, + FRONT = 4 + }, + ClassName = "CLIENT", + ClientName = nil, + ClientAlive = false, + ClientTransport = false, + ClientBriefingShown = false, + _Menus = {}, + _Tasks = {}, + Messages = { + } +} + + +--- Finds a CLIENT from the _DATABASE using the relevant DCS Unit. +-- @param #CLIENT self +-- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. +-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. +-- @return #CLIENT +-- @usage +-- -- Create new Clients. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- Mission:AddGoal( DeploySA6TroopsGoal ) +-- +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) +function CLIENT:Find( DCSUnit ) + local ClientName = DCSUnit:getName() + local ClientFound = _DATABASE:FindClient( ClientName ) + + if ClientFound then + ClientFound:F( ClientName ) + return ClientFound + end + + error( "CLIENT not found for: " .. ClientName ) +end + + +--- Finds a CLIENT from the _DATABASE using the relevant Client Unit Name. +-- As an optional parameter, a briefing text can be given also. +-- @param #CLIENT self +-- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. +-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. +-- @return #CLIENT +-- @usage +-- -- Create new Clients. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- Mission:AddGoal( DeploySA6TroopsGoal ) +-- +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) +function CLIENT:FindByName( ClientName, ClientBriefing ) + local ClientFound = _DATABASE:FindClient( ClientName ) + + if ClientFound then + ClientFound:F( { ClientName, ClientBriefing } ) + ClientFound:AddBriefing( ClientBriefing ) + ClientFound.MessageSwitch = true + + return ClientFound + end + + error( "CLIENT not found for: " .. ClientName ) +end + +function CLIENT:Register( ClientName ) + local self = BASE:Inherit( self, UNIT:Register( ClientName ) ) + + self:F( ClientName ) + self.ClientName = ClientName + self.MessageSwitch = true + self.ClientAlive2 = false + + --self.AliveCheckScheduler = routines.scheduleFunction( self._AliveCheckScheduler, { self }, timer.getTime() + 1, 5 ) + self.AliveCheckScheduler = SCHEDULER:New( self, self._AliveCheckScheduler, {}, 1, 5 ) + + return self +end + + +--- Transport defines that the Client is a Transport. Transports show cargo. +-- @param #CLIENT self +-- @return #CLIENT +function CLIENT:Transport() + self:F() + + self.ClientTransport = true + return self +end + +--- AddBriefing adds a briefing to a CLIENT when a player joins a mission. +-- @param #CLIENT self +-- @param #string ClientBriefing is the text defining the Mission briefing. +-- @return #CLIENT self +function CLIENT:AddBriefing( ClientBriefing ) + self:F( ClientBriefing ) + self.ClientBriefing = ClientBriefing + self.ClientBriefingShown = false + + return self +end + +--- Show the briefing of a CLIENT. +-- @param #CLIENT self +-- @return #CLIENT self +function CLIENT:ShowBriefing() + self:F( { self.ClientName, self.ClientBriefingShown } ) + + if not self.ClientBriefingShown then + self.ClientBriefingShown = true + local Briefing = "" + if self.ClientBriefing then + Briefing = Briefing .. self.ClientBriefing + end + Briefing = Briefing .. " Press [LEFT ALT]+[B] to view the complete mission briefing." + self:Message( Briefing, 60, self.ClientName .. '/ClientBriefing', "Briefing" ) + end + + return self +end + +--- Show the mission briefing of a MISSION to the CLIENT. +-- @param #CLIENT self +-- @param #string MissionBriefing +-- @return #CLIENT self +function CLIENT:ShowMissionBriefing( MissionBriefing ) + self:F( { self.ClientName } ) + + if MissionBriefing then + self:Message( MissionBriefing, 60, self.ClientName .. '/MissionBriefing', "Mission Briefing" ) + end + + return self +end + + + +--- Resets a CLIENT. +-- @param #CLIENT self +-- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client. +function CLIENT:Reset( ClientName ) + self:F() + self._Menus = {} +end + +-- Is Functions + +--- Checks if the CLIENT is a multi-seated UNIT. +-- @param #CLIENT self +-- @return #boolean true if multi-seated. +function CLIENT:IsMultiSeated() + self:F( self.ClientName ) + + local ClientMultiSeatedTypes = { + ["Mi-8MT"] = "Mi-8MT", + ["UH-1H"] = "UH-1H", + ["P-51B"] = "P-51B" + } + + if self:IsAlive() then + local ClientTypeName = self:GetClientGroupUnit():GetTypeName() + if ClientMultiSeatedTypes[ClientTypeName] then + return true + end + end + + return false +end + +--- Checks for a client alive event and calls a function on a continuous basis. +-- @param #CLIENT self +-- @param #function CallBack Function. +-- @return #CLIENT +function CLIENT:Alive( CallBack, ... ) + self:F() + + self.ClientCallBack = CallBack + self.ClientParameters = arg + + return self +end + +--- @param #CLIENT self +function CLIENT:_AliveCheckScheduler() + self:F( { self.ClientName, self.ClientAlive2, self.ClientBriefingShown } ) + + if self:IsAlive() then -- Polymorphic call of UNIT + if self.ClientAlive2 == false then + self:ShowBriefing() + if self.ClientCallBack then + self:T("Calling Callback function") + self.ClientCallBack( self, unpack( self.ClientParameters ) ) + end + self.ClientAlive2 = true + end + else + if self.ClientAlive2 == true then + self.ClientAlive2 = false + end + end + + return true +end + +--- Return the DCSGroup of a Client. +-- This function is modified to deal with a couple of bugs in DCS 1.5.3 +-- @param #CLIENT self +-- @return DCSGroup#Group +function CLIENT:GetDCSGroup() + self:F3() + +-- local ClientData = Group.getByName( self.ClientName ) +-- if ClientData and ClientData:isExist() then +-- self:T( self.ClientName .. " : group found!" ) +-- return ClientData +-- else +-- return nil +-- end + + local ClientUnit = Unit.getByName( self.ClientName ) + + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + self:T3( { "CoalitionData:", CoalitionData } ) + for UnitId, UnitData in pairs( CoalitionData ) do + self:T3( { "UnitData:", UnitData } ) + if UnitData and UnitData:isExist() then + + --self:E(self.ClientName) + if ClientUnit then + local ClientGroup = ClientUnit:getGroup() + if ClientGroup then + self:T3( "ClientGroup = " .. self.ClientName ) + if ClientGroup:isExist() and UnitData:getGroup():isExist() then + if ClientGroup:getID() == UnitData:getGroup():getID() then + self:T3( "Normal logic" ) + self:T3( self.ClientName .. " : group found!" ) + self.ClientGroupID = ClientGroup:getID() + self.ClientGroupName = ClientGroup:getName() + return ClientGroup + end + else + -- Now we need to resolve the bugs in DCS 1.5 ... + -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) + self:T3( "Bug 1.5 logic" ) + local ClientGroupTemplate = _DATABASE.Templates.Units[self.ClientName].GroupTemplate + self.ClientGroupID = ClientGroupTemplate.groupId + self.ClientGroupName = _DATABASE.Templates.Units[self.ClientName].GroupName + self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) + return ClientGroup + end + -- else + -- error( "Client " .. self.ClientName .. " not found!" ) + end + else + --self:E( { "Client not found!", self.ClientName } ) + end + end + end + end + + -- For non player clients + if ClientUnit then + local ClientGroup = ClientUnit:getGroup() + if ClientGroup then + self:T3( "ClientGroup = " .. self.ClientName ) + if ClientGroup:isExist() then + self:T3( "Normal logic" ) + self:T3( self.ClientName .. " : group found!" ) + return ClientGroup + end + end + end + + self.ClientGroupID = nil + self.ClientGroupUnit = nil + + return nil +end + + +-- TODO: Check DCSTypes#Group.ID +--- Get the group ID of the client. +-- @param #CLIENT self +-- @return DCSTypes#Group.ID +function CLIENT:GetClientGroupID() + + local ClientGroup = self:GetDCSGroup() + + --self:E( self.ClientGroupID ) -- Determined in GetDCSGroup() + return self.ClientGroupID +end + + +--- Get the name of the group of the client. +-- @param #CLIENT self +-- @return #string +function CLIENT:GetClientGroupName() + + local ClientGroup = self:GetDCSGroup() + + self:T( self.ClientGroupName ) -- Determined in GetDCSGroup() + return self.ClientGroupName +end + +--- Returns the UNIT of the CLIENT. +-- @param #CLIENT self +-- @return Unit#UNIT +function CLIENT:GetClientGroupUnit() + self:F2() + + local ClientDCSUnit = Unit.getByName( self.ClientName ) + + self:T( self.ClientDCSUnit ) + if ClientDCSUnit and ClientDCSUnit:isExist() then + local ClientUnit = _DATABASE:FindUnit( self.ClientName ) + self:T2( ClientUnit ) + return ClientUnit + end +end + +--- Returns the DCSUnit of the CLIENT. +-- @param #CLIENT self +-- @return DCSTypes#Unit +function CLIENT:GetClientGroupDCSUnit() + self:F2() + + local ClientDCSUnit = Unit.getByName( self.ClientName ) + + if ClientDCSUnit and ClientDCSUnit:isExist() then + self:T2( ClientDCSUnit ) + return ClientDCSUnit + end +end + + +--- Evaluates if the CLIENT is a transport. +-- @param #CLIENT self +-- @return #boolean true is a transport. +function CLIENT:IsTransport() + self:F() + return self.ClientTransport +end + +--- Shows the @{Cargo#CARGO} contained within the CLIENT to the player as a message. +-- The @{Cargo#CARGO} is shown using the @{Message#MESSAGE} distribution system. +-- @param #CLIENT self +function CLIENT:ShowCargo() + self:F() + + local CargoMsg = "" + + for CargoName, Cargo in pairs( CARGOS ) do + if self == Cargo:IsLoadedInClient() then + CargoMsg = CargoMsg .. Cargo.CargoName .. " Type:" .. Cargo.CargoType .. " Weight: " .. Cargo.CargoWeight .. "\n" + end + end + + if CargoMsg == "" then + CargoMsg = "empty" + end + + self:Message( CargoMsg, 15, self.ClientName .. "/Cargo", "Co-Pilot: Cargo Status", 30 ) + +end + +-- TODO (1) I urgently need to revise this. +--- A local function called by the DCS World Menu system to switch off messages. +function CLIENT.SwitchMessages( PrmTable ) + PrmTable[1].MessageSwitch = PrmTable[2] +end + +--- The main message driver for the CLIENT. +-- This function displays various messages to the Player logged into the CLIENT through the DCS World Messaging system. +-- @param #CLIENT self +-- @param #string Message is the text describing the message. +-- @param #number MessageDuration is the duration in seconds that the Message should be displayed. +-- @param #string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId +-- @param #string MessageCategory is the category of the message (the title). +-- @param #number MessageInterval is the interval in seconds between the display of the @{Message#MESSAGE} when the CLIENT is in the air. +function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, MessageInterval ) + self:F( { Message, MessageDuration, MessageId, MessageCategory, MessageInterval } ) + + if not self.MenuMessages then + if self:GetClientGroupID() then + self.MenuMessages = MENU_CLIENT:New( self, 'Messages' ) + self.MenuRouteMessageOn = MENU_CLIENT_COMMAND:New( self, 'Messages On', self.MenuMessages, CLIENT.SwitchMessages, { self, true } ) + self.MenuRouteMessageOff = MENU_CLIENT_COMMAND:New( self,'Messages Off', self.MenuMessages, CLIENT.SwitchMessages, { self, false } ) + end + end + + if self.MessageSwitch == true then + if MessageCategory == nil then + MessageCategory = "Messages" + end + if self.Messages[MessageId] == nil then + self.Messages[MessageId] = {} + self.Messages[MessageId].MessageId = MessageId + self.Messages[MessageId].MessageTime = timer.getTime() + self.Messages[MessageId].MessageDuration = MessageDuration + if MessageInterval == nil then + self.Messages[MessageId].MessageInterval = 600 + else + self.Messages[MessageId].MessageInterval = MessageInterval + end + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + else + if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then + if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + self.Messages[MessageId].MessageTime = timer.getTime() + end + else + if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + self.Messages[MessageId].MessageInterval then + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + self.Messages[MessageId].MessageTime = timer.getTime() + end + end + end + end +end +--- Manage the mission database. +-- +-- @{#DATABASE} class +-- ================== +-- Mission designers can use the DATABASE class to refer to: +-- +-- * UNITS +-- * GROUPS +-- * players +-- * alive players +-- * CLIENTS +-- * alive CLIENTS +-- +-- On top, for internal MOOSE administration purposes, the DATBASE administers the Unit and Gruop templates as defined within the Mission Editor. +-- +-- Moose will automatically create one instance of the DATABASE class into the **global** object _DATABASE. +-- Moose refers to _DATABASE within the framework extensively, but you can also refer to the _DATABASE object within your missions if required. +-- +-- DATABASE iterators: +-- =================== +-- You can iterate the database with the available iterator methods. +-- The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the DATABASE: +-- +-- * @{#DATABASE.ForEachUnit}: Calls a function for each @{UNIT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachGroup}: Calls a function for each @{GROUP} it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayer}: Calls a function for each player it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayerAlive}: Calls a function for each alive player it finds within the DATABASE. +-- * @{#DATABASE.ForEachClient}: Calls a function for each @{CLIENT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachClientAlive}: Calls a function for each alive @{CLIENT} it finds within the DATABASE. +-- +-- @module Database +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Unit" ) +Include.File( "Event" ) +Include.File( "Client" ) + + +--- DATABASE class +-- @type DATABASE +-- @extends Base#BASE +DATABASE = { + ClassName = "DATABASE", + Templates = { + Units = {}, + Groups = {}, + ClientsByName = {}, + ClientsByID = {}, + }, + DCSUnits = {}, + DCSGroups = {}, + UNITS = {}, + GROUPS = {}, + PLAYERS = {}, + PLAYERSALIVE = {}, + CLIENTS = {}, + CLIENTSALIVE = {}, + NavPoints = {}, +} + +local _DATABASECoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _DATABASECategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + + +--- Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #DATABASE self +-- @return #DATABASE +-- @usage +-- -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. +-- DBObject = DATABASE:New() +function DATABASE:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + + + -- Follow alive players and clients + _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) + _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) + + self:_RegisterTemplates() + self:_RegisterDatabase() + self:_RegisterPlayers() + + return self +end + +--- Finds a Unit based on the Unit Name. +-- @param #DATABASE self +-- @param #string UnitName +-- @return Unit#UNIT The found Unit. +function DATABASE:FindUnit( UnitName ) + + local UnitFound = self.UNITS[UnitName] + return UnitFound +end + + +--- Adds a Unit based on the Unit Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddUnit( DCSUnit, DCSUnitName ) + + self.DCSUnits[DCSUnitName] = DCSUnit + self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) +end + + +--- Deletes a Unit from the DATABASE based on the Unit Name. +-- @param #DATABASE self +function DATABASE:DeleteUnit( DCSUnitName ) + + self.DCSUnits[DCSUnitName] = nil +end + + +--- Finds a CLIENT based on the ClientName. +-- @param #DATABASE self +-- @param #string ClientName +-- @return Client#CLIENT The found CLIENT. +function DATABASE:FindClient( ClientName ) + + local ClientFound = self.CLIENTS[ClientName] + return ClientFound +end + + +--- Adds a CLIENT based on the ClientName in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddClient( ClientName ) + + self.CLIENTS[ClientName] = CLIENT:Register( ClientName ) + self:E( self.CLIENTS[ClientName]:GetClassNameAndID() ) +end + + +--- Finds a GROUP based on the GroupName. +-- @param #DATABASE self +-- @param #string GroupName +-- @return Group#GROUP The found GROUP. +function DATABASE:FindGroup( GroupName ) + + local GroupFound = self.GROUPS[GroupName] + return GroupFound +end + + +--- Adds a GROUP based on the GroupName in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddGroup( DCSGroup, GroupName ) + + self.DCSGroups[GroupName] = DCSGroup + self.GROUPS[GroupName] = GROUP:Register( GroupName ) +end + +--- Adds a player based on the Player Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddPlayer( UnitName, PlayerName ) + + if PlayerName then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self.PLAYERS[PlayerName] = PlayerName + self.PLAYERSALIVE[PlayerName] = PlayerName + self.CLIENTSALIVE[PlayerName] = self:FindClient( UnitName ) + end +end + +--- Deletes a player from the DATABASE based on the Player Name. +-- @param #DATABASE self +function DATABASE:DeletePlayer( PlayerName ) + + if PlayerName then + self:E( { "Clean player:", PlayerName } ) + self.PLAYERSALIVE[PlayerName] = nil + self.CLIENTSALIVE[PlayerName] = nil + end +end + + +--- Instantiate new Groups within the DCSRTE. +-- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: +-- SpawnCountryID, SpawnCategoryID +-- This method is used by the SPAWN class. +-- @param #DATABASE self +-- @param #table SpawnTemplate +-- @return #DATABASE self +function DATABASE:Spawn( SpawnTemplate ) + self:F2( SpawnTemplate.name ) + + self:T2( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) + + -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. + local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID + local SpawnCountryID = SpawnTemplate.SpawnCountryID + local SpawnCategoryID = SpawnTemplate.SpawnCategoryID + + -- Nullify + SpawnTemplate.SpawnCoalitionID = nil + SpawnTemplate.SpawnCountryID = nil + SpawnTemplate.SpawnCategoryID = nil + + self:_RegisterTemplate( SpawnTemplate ) + coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) + + -- Restore + SpawnTemplate.SpawnCoalitionID = SpawnCoalitionID + SpawnTemplate.SpawnCountryID = SpawnCountryID + SpawnTemplate.SpawnCategoryID = SpawnCategoryID + + + local SpawnGroup = GROUP:Register( SpawnTemplate.name ) + return SpawnGroup +end + +--- Set a status to a Group within the Database, this to check crossing events for example. +function DATABASE:SetStatusGroup( GroupName, Status ) + self:F2( Status ) + + self.Templates.Groups[GroupName].Status = Status +end + +--- Get a status to a Group within the Database, this to check crossing events for example. +function DATABASE:GetStatusGroup( GroupName ) + self:F2( Status ) + + if self.Templates.Groups[GroupName] then + return self.Templates.Groups[GroupName].Status + else + return "" + end +end + + +--- Private method that registers new Group Templates within the DATABASE Object. +-- @param #DATABASE self +-- @param #table GroupTemplate +-- @return #DATABASE self +function DATABASE:_RegisterTemplate( GroupTemplate ) + + local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) + + if not self.Templates.Groups[GroupTemplateName] then + self.Templates.Groups[GroupTemplateName] = {} + self.Templates.Groups[GroupTemplateName].Status = nil + end + + -- Delete the spans from the route, it is not needed and takes memory. + if GroupTemplate.route and GroupTemplate.route.spans then + GroupTemplate.route.spans = nil + end + + self.Templates.Groups[GroupTemplateName].GroupName = GroupTemplateName + self.Templates.Groups[GroupTemplateName].Template = GroupTemplate + self.Templates.Groups[GroupTemplateName].groupId = GroupTemplate.groupId + self.Templates.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units + self.Templates.Groups[GroupTemplateName].Units = GroupTemplate.units + + self:T2( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } ) + + for unit_num, UnitTemplate in pairs( GroupTemplate.units ) do + + local UnitTemplateName = env.getValueDictByKey(UnitTemplate.name) + self.Templates.Units[UnitTemplateName] = {} + self.Templates.Units[UnitTemplateName].UnitName = UnitTemplateName + self.Templates.Units[UnitTemplateName].Template = UnitTemplate + self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName + self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate + self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId + self:E( {"skill",UnitTemplate.skill}) + if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then + self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate + self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate + end + self:E( { "Unit", self.Templates.Units[UnitTemplateName].UnitName } ) + end +end + + +--- Private method that registers all alive players in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterPlayers() + + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for UnitId, UnitData in pairs( CoalitionData ) do + self:T3( { "UnitData:", UnitData } ) + if UnitData and UnitData:isExist() then + local UnitName = UnitData:getName() + local PlayerName = UnitData:getPlayerName() + if not self.PLAYERS[PlayerName] then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self:AddPlayer( UnitName, PlayerName ) + end + end + end + end + + return self +end + + +--- Private method that registers all datapoints within in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterDatabase() + + local CoalitionsData = { GroupsRed = coalition.getGroups( coalition.side.RED ), GroupsBlue = coalition.getGroups( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for DCSGroupId, DCSGroup in pairs( CoalitionData ) do + + if DCSGroup:isExist() then + local DCSGroupName = DCSGroup:getName() + + self:E( { "Register Group:", DCSGroup, DCSGroupName } ) + self:AddGroup( DCSGroup, DCSGroupName ) + + for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do + + local DCSUnitName = DCSUnit:getName() + self:E( { "Register Unit:", DCSUnit, DCSUnitName } ) + self:AddUnit( DCSUnit, DCSUnitName ) + end + else + self:E( { "Group does not exist: ", DCSGroup } ) + end + + end + end + + for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do + self:E( { "Adding Client:", ClientName } ) + self:AddClient( ClientName ) + end + + return self +end + +--- Events + +--- Handles the OnBirth event for the alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnBirth( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + self:AddUnit( Event.IniDCSUnit, Event.IniDCSUnitName ) + self:AddGroup( Event.IniDCSGroup, Event.IniDCSGroupName ) + self:_EventOnPlayerEnterUnit( Event ) + end +end + + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnDeadOrCrash( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + if self.DCSUnits[Event.IniDCSUnitName] then + self:DeleteUnit( Event.IniDCSUnitName ) + -- add logic to correctly remove a group once all units are destroyed... + end + end +end + + +--- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnPlayerEnterUnit( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + local PlayerName = Event.IniDCSUnit:getPlayerName() + if not self.PLAYERSALIVE[PlayerName] then + self:AddPlayer( Event.IniDCSUnitName, PlayerName ) + end + end +end + + +--- Handles the OnPlayerLeaveUnit event to clean the active players table. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnPlayerLeaveUnit( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + local PlayerName = Event.IniDCSUnit:getPlayerName() + if self.PLAYERSALIVE[PlayerName] then + self:DeletePlayer( PlayerName ) + end + end +end + +--- Iterators + +--- Iterate the DATABASE and call an iterator function for the given set, providing the Object for each element within the set and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. +-- @return #DATABASE self +function DATABASE:ForEach( IteratorFunction, arg, Set ) + self:F2( arg ) + + local function CoRoutine() + local Count = 0 + for ObjectID, Object in pairs( Set ) do + self:T2( Object ) + IteratorFunction( Object, unpack( arg ) ) + Count = Count + 1 + if Count % 10 == 0 then + coroutine.yield( false ) + end + end + return true + end + + local co = coroutine.create( CoRoutine ) + + local function Schedule() + + local status, res = coroutine.resume( co ) + self:T2( { status, res } ) + + if status == false then + error( res ) + end + if res == false then + return true -- resume next time the loop + end + + return false + end + + local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** unit, providing the DCSUnit and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a DCSUnit parameter. +-- @return #DATABASE self +function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.DCSUnits ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** UNIT, providing the UNIT and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.UNITS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **alive** GROUP, providing the GROUP and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the database. The function needs to accept a GROUP parameter. +-- @return #DATABASE self +function DATABASE:ForEachGroup( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.GROUPS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each player, providing the player name and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an player in the database. The function needs to accept the player name. +-- @return #DATABASE self +function DATABASE:ForEachPlayer( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** player, providing the Unit of the player and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachPlayerAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERSALIVE ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClient( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **ALIVE** CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClientAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTSALIVE ) + + return self +end + + +function DATABASE:_RegisterTemplates() + self:F2() + + self.Navpoints = {} + self.UNITS = {} + --Build routines.db.units and self.Navpoints + for coa_name, coa_data in pairs(env.mission.coalition) do + + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + --self.Units[coa_name] = {} + + ---------------------------------------------- + -- build nav points DB + self.Navpoints[coa_name] = {} + if coa_data.nav_points then --navpoints + for nav_ind, nav_data in pairs(coa_data.nav_points) do + + if type(nav_data) == 'table' then + self.Navpoints[coa_name][nav_ind] = routines.utils.deepCopy(nav_data) + + self.Navpoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. + self.Navpoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. + self.Navpoints[coa_name][nav_ind]['point']['x'] = nav_data.x + self.Navpoints[coa_name][nav_ind]['point']['y'] = 0 + self.Navpoints[coa_name][nav_ind]['point']['z'] = nav_data.y + end + end + end + ------------------------------------------------- + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + + local countryName = string.lower(cntry_data.name) + --self.Units[coa_name][countryName] = {} + --self.Units[coa_name][countryName]["countryId"] = cntry_data.id + + if type(cntry_data) == 'table' then --just making sure + + for obj_type_name, obj_type_data in pairs(cntry_data) do + + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check + + local category = obj_type_name + + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + + --self.Units[coa_name][countryName][category] = {} + + for group_num, GroupTemplate in pairs(obj_type_data.group) do + + if GroupTemplate and GroupTemplate.units and type(GroupTemplate.units) == 'table' then --making sure again- this is a valid group + self:_RegisterTemplate( GroupTemplate ) + end --if GroupTemplate and GroupTemplate.units then + end --for group_num, GroupTemplate in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --if type(cntry_data) == 'table' then + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do + + return self +end + + + + +--- The main include file for the MOOSE system. + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Event" ) + +-- The order of the declarations is important here. Don't touch it. + +--- Declare the event dispatcher based on the EVENT class +_EVENTDISPATCHER = EVENT:New() -- #EVENT + +--- Declare the main database object, which is used internally by the MOOSE classes. +_DATABASE = DATABASE:New() -- Database#DATABASE + +--- Scoring system for MOOSE. +-- This scoring class calculates the hits and kills that players make within a simulation session. +-- Scoring is calculated using a defined algorithm. +-- With a small change in MissionScripting.lua, the scoring can also be logged in a CSV file, that can then be uploaded +-- to a database or a BI tool to publish the scoring results to the player community. +-- @module Scoring +-- @author FlightControl + + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Event" ) + + +--- The Scoring class +-- @type SCORING +-- @field Players A collection of the current players that have joined the game. +-- @extends Base#BASE +SCORING = { + ClassName = "SCORING", + ClassID = 0, + Players = {}, +} + +local _SCORINGCoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _SCORINGCategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + +--- Creates a new SCORING object to administer the scoring achieved by players. +-- @param #SCORING self +-- @param #string GameName The name of the game. This name is also logged in the CSV score file. +-- @return #SCORING self +-- @usage +-- -- Define a new scoring object for the mission Gori Valley. +-- ScoringObject = SCORING:New( "Gori Valley" ) +function SCORING:New( GameName ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + if GameName then + self.GameName = GameName + else + error( "A game name must be given to register the scoring results" ) + end + + + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnHit( self._EventOnHit, self ) + + --self.SchedulerId = routines.scheduleFunction( SCORING._FollowPlayersScheduled, { self }, 0, 5 ) + self.SchedulerId = SCHEDULER:New( self, self._FollowPlayersScheduled, {}, 0, 5 ) + + self:ScoreMenu() + + return self + +end + +--- Creates a score radio menu. Can be accessed using Radio -> F10. +-- @param #SCORING self +-- @return #SCORING self +function SCORING:ScoreMenu() + self.Menu = SUBMENU:New( 'Scoring' ) + self.AllScoresMenu = COMMANDMENU:New( 'Score All Active Players', self.Menu, SCORING.ReportScoreAll, self ) + --- = COMMANDMENU:New('Your Current Score', ReportScore, SCORING.ReportScorePlayer, self ) + return self +end + +--- Follows new players entering Clients within the DCSRTE. +-- TODO: Need to see if i can catch this also with an event. It will eliminate the schedule ... +function SCORING:_FollowPlayersScheduled() + self:F3( "_FollowPlayersScheduled" ) + + local ClientUnit = 0 + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers(coalition.side.RED), AlivePlayersBlue = coalition.getPlayers(coalition.side.BLUE) } + local unitId + local unitData + local AlivePlayerUnits = {} + + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + self:T3( { "_FollowPlayersScheduled", CoalitionData } ) + for UnitId, UnitData in pairs( CoalitionData ) do + self:_AddPlayerFromUnit( UnitData ) + end + end + + return true +end + + +--- Track DEAD or CRASH events for the scoring. +-- @param #SCORING self +-- @param Event#EVENTDATA Event +function SCORING:_EventOnDeadOrCrash( Event ) + self:F( { Event } ) + + local TargetUnit = nil + local TargetGroup = nil + local TargetUnitName = "" + local TargetGroupName = "" + local TargetPlayerName = "" + local TargetCoalition = nil + local TargetCategory = nil + local TargetType = nil + local TargetUnitCoalition = nil + local TargetUnitCategory = nil + local TargetUnitType = nil + + if Event.IniDCSUnit then + + TargetUnit = Event.IniDCSUnit + TargetUnitName = Event.IniDCSUnitName + TargetGroup = Event.IniDCSGroup + TargetGroupName = Event.IniDCSGroupName + TargetPlayerName = TargetUnit:getPlayerName() + + TargetCoalition = TargetUnit:getCoalition() + --TargetCategory = TargetUnit:getCategory() + TargetCategory = TargetUnit:getDesc().category -- Workaround + TargetType = TargetUnit:getTypeName() + + TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] + TargetUnitCategory = _SCORINGCategory[TargetCategory] + TargetUnitType = TargetType + + self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } ) + end + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Something got killed" ) + + -- Some variables + local InitUnitName = PlayerData.UnitName + local InitUnitType = PlayerData.UnitType + local InitCoalition = PlayerData.UnitCoalition + local InitCategory = PlayerData.UnitCategory + local InitUnitCoalition = _SCORINGCoalition[InitCoalition] + local InitUnitCategory = _SCORINGCategory[InitCategory] + + self:T( { InitUnitName, InitUnitType, InitUnitCoalition, InitCoalition, InitUnitCategory, InitCategory } ) + + -- What is he hitting? + if TargetCategory then + if PlayerData and PlayerData.Hit and PlayerData.Hit[TargetCategory] and PlayerData.Hit[TargetCategory][TargetUnitName] then -- Was there a hit for this unit for this player before registered??? + if not PlayerData.Kill[TargetCategory] then + PlayerData.Kill[TargetCategory] = {} + end + if not PlayerData.Kill[TargetCategory][TargetType] then + PlayerData.Kill[TargetCategory][TargetType] = {} + PlayerData.Kill[TargetCategory][TargetType].Score = 0 + PlayerData.Kill[TargetCategory][TargetType].ScoreKill = 0 + PlayerData.Kill[TargetCategory][TargetType].Penalty = 0 + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = 0 + end + + if InitCoalition == TargetCoalition then + PlayerData.Penalty = PlayerData.Penalty + 25 + PlayerData.Kill[TargetCategory][TargetType].Penalty = PlayerData.Kill[TargetCategory][TargetType].Penalty + 25 + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = PlayerData.Kill[TargetCategory][TargetType].PenaltyKill + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' killed a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill .. " times. Penalty: -" .. PlayerData.Kill[TargetCategory][TargetType].Penalty .. + ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, + "", 5, "/PENALTY" .. PlayerName .. "/" .. InitUnitName ):ToAll() + self:ScoreCSV( PlayerName, "KILL_PENALTY", 1, -125, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + else + PlayerData.Score = PlayerData.Score + 10 + PlayerData.Kill[TargetCategory][TargetType].Score = PlayerData.Kill[TargetCategory][TargetType].Score + 10 + PlayerData.Kill[TargetCategory][TargetType].ScoreKill = PlayerData.Kill[TargetCategory][TargetType].ScoreKill + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' killed an enemy " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + PlayerData.Kill[TargetCategory][TargetType].ScoreKill .. " times. Score: " .. PlayerData.Kill[TargetCategory][TargetType].Score .. + ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, + "", 5, "/SCORE" .. PlayerName .. "/" .. InitUnitName ):ToAll() + self:ScoreCSV( PlayerName, "KILL_SCORE", 1, 10, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + end + end + end + end + end +end + + + +--- Add a new player entering a Unit. +function SCORING:_AddPlayerFromUnit( UnitData ) + self:F( UnitData ) + + if UnitData and UnitData:isExist() then + local UnitName = UnitData:getName() + local PlayerName = UnitData:getPlayerName() + local UnitDesc = UnitData:getDesc() + local UnitCategory = UnitDesc.category + local UnitCoalition = UnitData:getCoalition() + local UnitTypeName = UnitData:getTypeName() + + self:T( { PlayerName, UnitName, UnitCategory, UnitCoalition, UnitTypeName } ) + + if self.Players[PlayerName] == nil then -- I believe this is the place where a Player gets a life in a mission when he enters a unit ... + self.Players[PlayerName] = {} + self.Players[PlayerName].Hit = {} + self.Players[PlayerName].Kill = {} + self.Players[PlayerName].Mission = {} + + -- for CategoryID, CategoryName in pairs( SCORINGCategory ) do + -- self.Players[PlayerName].Hit[CategoryID] = {} + -- self.Players[PlayerName].Kill[CategoryID] = {} + -- end + self.Players[PlayerName].HitPlayers = {} + self.Players[PlayerName].HitUnits = {} + self.Players[PlayerName].Score = 0 + self.Players[PlayerName].Penalty = 0 + self.Players[PlayerName].PenaltyCoalition = 0 + self.Players[PlayerName].PenaltyWarning = 0 + end + + if not self.Players[PlayerName].UnitCoalition then + self.Players[PlayerName].UnitCoalition = UnitCoalition + else + if self.Players[PlayerName].UnitCoalition ~= UnitCoalition then + self.Players[PlayerName].Penalty = self.Players[PlayerName].Penalty + 50 + self.Players[PlayerName].PenaltyCoalition = self.Players[PlayerName].PenaltyCoalition + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' changed coalition from " .. _SCORINGCoalition[self.Players[PlayerName].UnitCoalition] .. " to " .. _SCORINGCoalition[UnitCoalition] .. + "(changed " .. self.Players[PlayerName].PenaltyCoalition .. " times the coalition). 50 Penalty points added.", + "", + 2, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + self:ScoreCSV( PlayerName, "COALITION_PENALTY", 1, -50, self.Players[PlayerName].UnitName, _SCORINGCoalition[self.Players[PlayerName].UnitCoalition], _SCORINGCategory[self.Players[PlayerName].UnitCategory], self.Players[PlayerName].UnitType, + UnitName, _SCORINGCoalition[UnitCoalition], _SCORINGCategory[UnitCategory], UnitData:getTypeName() ) + end + end + self.Players[PlayerName].UnitName = UnitName + self.Players[PlayerName].UnitCoalition = UnitCoalition + self.Players[PlayerName].UnitCategory = UnitCategory + self.Players[PlayerName].UnitType = UnitTypeName + + if self.Players[PlayerName].Penalty > 100 then + if self.Players[PlayerName].PenaltyWarning < 1 then + MESSAGE:New( "Player '" .. PlayerName .. "': WARNING! If you continue to commit FRATRICIDE and have a PENALTY score higher than 150, you will be COURT MARTIALED and DISMISSED from this mission! \nYour total penalty is: " .. self.Players[PlayerName].Penalty, + "", + 30, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + self.Players[PlayerName].PenaltyWarning = self.Players[PlayerName].PenaltyWarning + 1 + end + end + + if self.Players[PlayerName].Penalty > 150 then + ClientGroup = GROUP:NewFromDCSUnit( UnitData ) + ClientGroup:Destroy() + MESSAGE:New( "Player '" .. PlayerName .. "' committed FRATRICIDE, he will be COURT MARTIALED and is DISMISSED from this mission!", + "", + 10, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + end + + end +end + + +--- Registers Scores the players completing a Mission Task. +function SCORING:_AddMissionTaskScore( PlayerUnit, MissionName, Score ) + self:F( { PlayerUnit, MissionName, Score } ) + + local PlayerName = PlayerUnit:getPlayerName() + + if not self.Players[PlayerName].Mission[MissionName] then + self.Players[PlayerName].Mission[MissionName] = {} + self.Players[PlayerName].Mission[MissionName].ScoreTask = 0 + self.Players[PlayerName].Mission[MissionName].ScoreMission = 0 + end + + self:T( PlayerName ) + self:T( self.Players[PlayerName].Mission[MissionName] ) + + self.Players[PlayerName].Score = self.Players[PlayerName].Score + Score + self.Players[PlayerName].Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score + + MESSAGE:New( "Player '" .. PlayerName .. "' has finished another Task in Mission '" .. MissionName .. "'. " .. + Score .. " Score points added.", + "", 20, "/SCORETASK" .. PlayerName ):ToAll() + + self:ScoreCSV( PlayerName, "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score, PlayerUnit:getName() ) +end + + +--- Registers Mission Scores for possible multiple players that contributed in the Mission. +function SCORING:_AddMissionScore( MissionName, Score ) + self:F( { MissionName, Score } ) + + for PlayerName, PlayerData in pairs( self.Players ) do + + if PlayerData.Mission[MissionName] then + PlayerData.Score = PlayerData.Score + Score + PlayerData.Mission[MissionName].ScoreMission = PlayerData.Mission[MissionName].ScoreMission + Score + MESSAGE:New( "Player '" .. PlayerName .. "' has finished Mission '" .. MissionName .. "'. " .. + Score .. " Score points added.", + "", 20, "/SCOREMISSION" .. PlayerName ):ToAll() + self:ScoreCSV( PlayerName, "MISSION_" .. MissionName:gsub( ' ', '_' ), 1, Score ) + end + end +end + +--- Handles the OnHit event for the scoring. +-- @param #SCORING self +-- @param Event#EVENTDATA Event +function SCORING:_EventOnHit( Event ) + self:F( { Event } ) + + local InitUnit = nil + local InitUnitName = "" + local InitGroup = nil + local InitGroupName = "" + local InitPlayerName = nil + + local InitCoalition = nil + local InitCategory = nil + local InitType = nil + local InitUnitCoalition = nil + local InitUnitCategory = nil + local InitUnitType = nil + + local TargetUnit = nil + local TargetUnitName = "" + local TargetGroup = nil + local TargetGroupName = "" + local TargetPlayerName = "" + + local TargetCoalition = nil + local TargetCategory = nil + local TargetType = nil + local TargetUnitCoalition = nil + local TargetUnitCategory = nil + local TargetUnitType = nil + + if Event.IniDCSUnit then + + InitUnit = Event.IniDCSUnit + InitUnitName = Event.IniDCSUnitName + InitGroup = Event.IniDCSGroup + InitGroupName = Event.IniDCSGroupName + InitPlayerName = InitUnit:getPlayerName() + + InitCoalition = InitUnit:getCoalition() + --TODO: Workaround Client DCS Bug + --InitCategory = InitUnit:getCategory() + InitCategory = InitUnit:getDesc().category + InitType = InitUnit:getTypeName() + + InitUnitCoalition = _SCORINGCoalition[InitCoalition] + InitUnitCategory = _SCORINGCategory[InitCategory] + InitUnitType = InitType + + self:T( { InitUnitName, InitGroupName, InitPlayerName, InitCoalition, InitCategory, InitType , InitUnitCoalition, InitUnitCategory, InitUnitType } ) + end + + + if Event.TgtDCSUnit then + + TargetUnit = Event.TgtDCSUnit + TargetUnitName = Event.TgtDCSUnitName + TargetGroup = Event.TgtDCSGroup + TargetGroupName = Event.TgtDCSGroupName + TargetPlayerName = TargetUnit:getPlayerName() + + TargetCoalition = TargetUnit:getCoalition() + --TODO: Workaround Client DCS Bug + --TargetCategory = TargetUnit:getCategory() + TargetCategory = TargetUnit:getDesc().category + TargetType = TargetUnit:getTypeName() + + TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] + TargetUnitCategory = _SCORINGCategory[TargetCategory] + TargetUnitType = TargetType + + self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType, TargetUnitCoalition, TargetUnitCategory, TargetUnitType } ) + end + + if InitPlayerName ~= nil then -- It is a player that is hitting something + self:_AddPlayerFromUnit( InitUnit ) + if self.Players[InitPlayerName] then -- This should normally not happen, but i'll test it anyway. + if TargetPlayerName ~= nil then -- It is a player hitting another player ... + self:_AddPlayerFromUnit( TargetUnit ) + self.Players[InitPlayerName].HitPlayers = self.Players[InitPlayerName].HitPlayers + 1 + end + + self:T( "Hitting Something" ) + -- What is he hitting? + if TargetCategory then + if not self.Players[InitPlayerName].Hit[TargetCategory] then + self.Players[InitPlayerName].Hit[TargetCategory] = {} + end + if not self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] then + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] = {} + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = 0 + end + local Score = 0 + if InitCoalition == TargetCoalition then + self.Players[InitPlayerName].Penalty = self.Players[InitPlayerName].Penalty + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit + 1 + MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit .. " times. Penalty: -" .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty .. + ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, + "", + 2, + "/PENALTY" .. InitPlayerName .. "/" .. InitUnitName + ):ToAll() + self:ScoreCSV( InitPlayerName, "HIT_PENALTY", 1, -25, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + else + self.Players[InitPlayerName].Score = self.Players[InitPlayerName].Score + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score + 1 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit + 1 + MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a target " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit .. " times. Score: " .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score .. + ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, + "", + 2, + "/SCORE" .. InitPlayerName .. "/" .. InitUnitName + ):ToAll() + self:ScoreCSV( InitPlayerName, "HIT_SCORE", 1, 1, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + end + end + end + elseif InitPlayerName == nil then -- It is an AI hitting a player??? + + end +end + + +function SCORING:ReportScoreAll() + + env.info( "Hello World " ) + + local ScoreMessage = "" + local PlayerMessage = "" + + self:T( "Score Report" ) + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local PlayerScore = 0 + local PlayerPenalty = 0 + + ScoreMessage = ":\n" + + local ScoreMessageHits = "" + + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( CategoryName ) + if PlayerData.Hit[CategoryID] then + local Score = 0 + local ScoreHit = 0 + local Penalty = 0 + local PenaltyHit = 0 + self:T( "Hit scores exist for player " .. PlayerName ) + for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do + Score = Score + UnitData.Score + ScoreHit = ScoreHit + UnitData.ScoreHit + Penalty = Penalty + UnitData.Penalty + PenaltyHit = UnitData.PenaltyHit + end + local ScoreMessageHit = string.format( "%s:%d ", CategoryName, Score - Penalty ) + self:T( ScoreMessageHit ) + ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageHits ~= "" then + ScoreMessage = ScoreMessage .. " Hits: " .. ScoreMessageHits .. "\n" + end + + local ScoreMessageKills = "" + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( "Kill scores exist for player " .. PlayerName ) + if PlayerData.Kill[CategoryID] then + local Score = 0 + local ScoreKill = 0 + local Penalty = 0 + local PenaltyKill = 0 + + for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do + Score = Score + UnitData.Score + ScoreKill = ScoreKill + UnitData.ScoreKill + Penalty = Penalty + UnitData.Penalty + PenaltyKill = PenaltyKill + UnitData.PenaltyKill + end + + local ScoreMessageKill = string.format( " %s:%d ", CategoryName, Score - Penalty ) + self:T( ScoreMessageKill ) + ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill + + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageKills ~= "" then + ScoreMessage = ScoreMessage .. " Kills: " .. ScoreMessageKills .. "\n" + end + + local ScoreMessageCoalitionChangePenalties = "" + if PlayerData.PenaltyCoalition ~= 0 then + ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) + PlayerPenalty = PlayerPenalty + PlayerData.Penalty + end + if ScoreMessageCoalitionChangePenalties ~= "" then + ScoreMessage = ScoreMessage .. " Coalition Penalties: " .. ScoreMessageCoalitionChangePenalties .. "\n" + end + + local ScoreMessageMission = "" + local ScoreMission = 0 + local ScoreTask = 0 + for MissionName, MissionData in pairs( PlayerData.Mission ) do + ScoreMission = ScoreMission + MissionData.ScoreMission + ScoreTask = ScoreTask + MissionData.ScoreTask + ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " + end + PlayerScore = PlayerScore + ScoreMission + ScoreTask + + if ScoreMessageMission ~= "" then + ScoreMessage = ScoreMessage .. " Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")\n" + end + + PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score:%d (%d Score -%d Penalties)%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) + end + end + MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() +end + + +function SCORING:ReportScorePlayer() + + env.info( "Hello World " ) + + local ScoreMessage = "" + local PlayerMessage = "" + + self:T( "Score Report" ) + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local PlayerScore = 0 + local PlayerPenalty = 0 + + ScoreMessage = "" + + local ScoreMessageHits = "" + + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( CategoryName ) + if PlayerData.Hit[CategoryID] then + local Score = 0 + local ScoreHit = 0 + local Penalty = 0 + local PenaltyHit = 0 + self:T( "Hit scores exist for player " .. PlayerName ) + for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do + Score = Score + UnitData.Score + ScoreHit = ScoreHit + UnitData.ScoreHit + Penalty = Penalty + UnitData.Penalty + PenaltyHit = UnitData.PenaltyHit + end + local ScoreMessageHit = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreHit, PenaltyHit ) + self:T( ScoreMessageHit ) + ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageHits ~= "" then + ScoreMessage = ScoreMessage .. "\n Hits: " .. ScoreMessageHits .. " " + end + + local ScoreMessageKills = "" + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( "Kill scores exist for player " .. PlayerName ) + if PlayerData.Kill[CategoryID] then + local Score = 0 + local ScoreKill = 0 + local Penalty = 0 + local PenaltyKill = 0 + + for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do + Score = Score + UnitData.Score + ScoreKill = ScoreKill + UnitData.ScoreKill + Penalty = Penalty + UnitData.Penalty + PenaltyKill = PenaltyKill + UnitData.PenaltyKill + end + + local ScoreMessageKill = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreKill, PenaltyKill ) + self:T( ScoreMessageKill ) + ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill + + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageKills ~= "" then + ScoreMessage = ScoreMessage .. "\n Kills: " .. ScoreMessageKills .. " " + end + + local ScoreMessageCoalitionChangePenalties = "" + if PlayerData.PenaltyCoalition ~= 0 then + ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) + PlayerPenalty = PlayerPenalty + PlayerData.Penalty + end + if ScoreMessageCoalitionChangePenalties ~= "" then + ScoreMessage = ScoreMessage .. "\n Coalition: " .. ScoreMessageCoalitionChangePenalties .. " " + end + + local ScoreMessageMission = "" + local ScoreMission = 0 + local ScoreTask = 0 + for MissionName, MissionData in pairs( PlayerData.Mission ) do + ScoreMission = ScoreMission + MissionData.ScoreMission + ScoreTask = ScoreTask + MissionData.ScoreTask + ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " + end + PlayerScore = PlayerScore + ScoreMission + ScoreTask + + if ScoreMessageMission ~= "" then + ScoreMessage = ScoreMessage .. "\n Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ") " + end + + PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties ):%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) + end + end + MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() + +end + + +function SCORING:SecondsToClock(sSeconds) + local nSeconds = sSeconds + if nSeconds == 0 then + --return nil; + return "00:00:00"; + else + nHours = string.format("%02.f", math.floor(nSeconds/3600)); + nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); + nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); + return nHours..":"..nMins..":"..nSecs + end +end + +--- Opens a score CSV file to log the scores. +-- @param #SCORING self +-- @param #string ScoringCSV +-- @return #SCORING self +-- @usage +-- -- Open a new CSV file to log the scores of the game Gori Valley. Let the name of the CSV file begin with "Player Scores". +-- ScoringObject = SCORING:New( "Gori Valley" ) +-- ScoringObject:OpenCSV( "Player Scores" ) +function SCORING:OpenCSV( ScoringCSV ) + self:F( ScoringCSV ) + + if lfs and io and os then + if ScoringCSV then + self.ScoringCSV = ScoringCSV + local fdir = lfs.writedir() .. [[Logs\]] .. self.ScoringCSV .. " " .. os.date( "%Y-%m-%d %H-%M-%S" ) .. ".csv" + + self.CSVFile, self.err = io.open( fdir, "w+" ) + if not self.CSVFile then + error( "Error: Cannot open CSV file in " .. lfs.writedir() ) + end + + self.CSVFile:write( '"GameName","RunTime","Time","PlayerName","ScoreType","PlayerUnitCoaltion","PlayerUnitCategory","PlayerUnitType","PlayerUnitName","TargetUnitCoalition","TargetUnitCategory","TargetUnitType","TargetUnitName","Times","Score"\n' ) + + self.RunTime = os.date("%y-%m-%d_%H-%M-%S") + else + error( "A string containing the CSV file name must be given." ) + end + else + self:E( "The MissionScripting.lua file has not been changed to allow lfs, io and os modules to be used..." ) + end + return self +end + + +--- Registers a score for a player. +-- @param #SCORING self +-- @param #string PlayerName The name of the player. +-- @param #string ScoreType The type of the score. +-- @param #string ScoreTimes The amount of scores achieved. +-- @param #string ScoreAmount The score given. +-- @param #string PlayerUnitName The unit name of the player. +-- @param #string PlayerUnitCoalition The coalition of the player unit. +-- @param #string PlayerUnitCategory The category of the player unit. +-- @param #string PlayerUnitType The type of the player unit. +-- @param #string TargetUnitName The name of the target unit. +-- @param #string TargetUnitCoalition The coalition of the target unit. +-- @param #string TargetUnitCategory The category of the target unit. +-- @param #string TargetUnitType The type of the target unit. +-- @return #SCORING self +function SCORING:ScoreCSV( PlayerName, ScoreType, ScoreTimes, ScoreAmount, PlayerUnitName, PlayerUnitCoalition, PlayerUnitCategory, PlayerUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + --write statistic information to file + local ScoreTime = self:SecondsToClock( timer.getTime() ) + PlayerName = PlayerName:gsub( '"', '_' ) + + if PlayerUnitName and PlayerUnitName ~= '' then + local PlayerUnit = Unit.getByName( PlayerUnitName ) + + if PlayerUnit then + if not PlayerUnitCategory then + --PlayerUnitCategory = SCORINGCategory[PlayerUnit:getCategory()] + PlayerUnitCategory = _SCORINGCategory[PlayerUnit:getDesc().category] + end + + if not PlayerUnitCoalition then + PlayerUnitCoalition = _SCORINGCoalition[PlayerUnit:getCoalition()] + end + + if not PlayerUnitType then + PlayerUnitType = PlayerUnit:getTypeName() + end + else + PlayerUnitName = '' + PlayerUnitCategory = '' + PlayerUnitCoalition = '' + PlayerUnitType = '' + end + else + PlayerUnitName = '' + PlayerUnitCategory = '' + PlayerUnitCoalition = '' + PlayerUnitType = '' + end + + if not TargetUnitCoalition then + TargetUnitCoalition = '' + end + + if not TargetUnitCategory then + TargetUnitCategory = '' + end + + if not TargetUnitType then + TargetUnitType = '' + end + + if not TargetUnitName then + TargetUnitName = '' + end + + if lfs and io and os then + self.CSVFile:write( + '"' .. self.GameName .. '"' .. ',' .. + '"' .. self.RunTime .. '"' .. ',' .. + '' .. ScoreTime .. '' .. ',' .. + '"' .. PlayerName .. '"' .. ',' .. + '"' .. ScoreType .. '"' .. ',' .. + '"' .. PlayerUnitCoalition .. '"' .. ',' .. + '"' .. PlayerUnitCategory .. '"' .. ',' .. + '"' .. PlayerUnitType .. '"' .. ',' .. + '"' .. PlayerUnitName .. '"' .. ',' .. + '"' .. TargetUnitCoalition .. '"' .. ',' .. + '"' .. TargetUnitCategory .. '"' .. ',' .. + '"' .. TargetUnitType .. '"' .. ',' .. + '"' .. TargetUnitName .. '"' .. ',' .. + '' .. ScoreTimes .. '' .. ',' .. + '' .. ScoreAmount + ) + + self.CSVFile:write( "\n" ) + end +end + + +function SCORING:CloseCSV() + if lfs and io and os then + self.CSVFile:close() + end +end + +--- CARGO Classes +-- @module CARGO + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) +Include.File( "Scheduler" ) + + +--- Clients are those Groups defined within the Mission Editor that have the skillset defined as "Client" or "Player". +-- These clients are defined within the Mission Orchestration Framework (MOF) + +CARGOS = {} + + +CARGO_ZONE = { + ClassName="CARGO_ZONE", + CargoZoneName = '', + CargoHostUnitName = '', + SIGNAL = { + TYPE = { + SMOKE = { ID = 1, TEXT = "smoke" }, + FLARE = { ID = 2, TEXT = "flare" } + }, + COLOR = { + GREEN = { ID = 1, TRIGGERCOLOR = trigger.smokeColor.Green, TEXT = "A green" }, + RED = { ID = 2, TRIGGERCOLOR = trigger.smokeColor.Red, TEXT = "A red" }, + WHITE = { ID = 3, TRIGGERCOLOR = trigger.smokeColor.White, TEXT = "A white" }, + ORANGE = { ID = 4, TRIGGERCOLOR = trigger.smokeColor.Orange, TEXT = "An orange" }, + BLUE = { ID = 5, TRIGGERCOLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, + YELLOW = { ID = 6, TRIGGERCOLOR = trigger.flareColor.Yellow, TEXT = "A yellow" } + } + } +} + +--- Creates a new zone where cargo can be collected or deployed. +-- The zone functionality is useful to smoke or indicate routes for cargo pickups or deployments. +-- Provide the zone name as declared in the mission file into the CargoZoneName in the :New method. +-- An optional parameter is the CargoHostName, which is a Group declared with Late Activation switched on in the mission file. +-- The CargoHostName is the "host" of the cargo zone: +-- +-- * It will smoke the zone position when a client is approaching the zone. +-- * Depending on the cargo type, it will assist in the delivery of the cargo by driving to and from the client. +-- +-- @param #CARGO_ZONE self +-- @param #string CargoZoneName The name of the zone as declared within the mission editor. +-- @param #string CargoHostName The name of the Group "hosting" the zone. The Group MUST NOT be a static, and must be a "mobile" unit. +function CARGO_ZONE:New( CargoZoneName, CargoHostName ) local self = BASE:Inherit( self, ZONE:New( CargoZoneName ) ) + self:F( { CargoZoneName, CargoHostName } ) + + self.CargoZoneName = CargoZoneName + self.SignalHeight = 2 + --self.CargoZone = trigger.misc.getZone( CargoZoneName ) + + + if CargoHostName then + self.CargoHostName = CargoHostName + end + + self:T( self.CargoZoneName ) + + return self +end + +function CARGO_ZONE:Spawn() + self:F( self.CargoHostName ) + + if self.CargoHostName then -- Only spawn a host in the zone when there is one given as a parameter in the New function. + if self.CargoHostSpawn then + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() + if CargoHostGroup and CargoHostGroup:IsAlive() then + else + self.CargoHostSpawn:ReSpawn( 1 ) + end + else + self:T( "Initialize CargoHostSpawn" ) + self.CargoHostSpawn = SPAWN:New( self.CargoHostName ):Limit( 1, 1 ) + self.CargoHostSpawn:ReSpawn( 1 ) + end + end + + return self +end + +function CARGO_ZONE:GetHostUnit() + self:F( self ) + + if self.CargoHostName then + + -- A Host has been given, signal the host + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() + local CargoHostUnit + if CargoHostGroup and CargoHostGroup:IsAlive() then + CargoHostUnit = CargoHostGroup:GetUnit(1) + else + CargoHostUnit = StaticObject.getByName( self.CargoHostName ) + end + + return CargoHostUnit + end + + return nil +end + +function CARGO_ZONE:ReportCargosToClient( Client, CargoType ) + self:F() + + local SignalUnit = self:GetHostUnit() + + if SignalUnit then + + local SignalUnitTypeName = SignalUnit:getTypeName() + + local HostMessage = "" + + local IsCargo = false + for CargoID, Cargo in pairs( CARGOS ) do + if Cargo.CargoType == Task.CargoType then + if Cargo:IsStatusNone() then + HostMessage = HostMessage .. " - " .. Cargo.CargoName .. " - " .. Cargo.CargoType .. " (" .. Cargo.Weight .. "kg)" .. "\n" + IsCargo = true + end + end + end + + if not IsCargo then + HostMessage = "No Cargo Available." + end + + Client:Message( HostMessage, 20, Mission.Name .. "/StageHosts." .. SignalUnitTypeName, SignalUnitTypeName .. ": Reporting Cargo", 10 ) + end +end + + +function CARGO_ZONE:Signal() + self:F() + + local Signalled = false + + if self.SignalType then + + if self.CargoHostName then + + -- A Host has been given, signal the host + + local SignalUnit = self:GetHostUnit() + + if SignalUnit then + + self:T( 'Signalling Unit' ) + local SignalVehiclePos = SignalUnit:GetPointVec3() + SignalVehiclePos.y = SignalVehiclePos.y + 2 + + if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then + + trigger.action.smoke( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR ) + Signalled = true + + elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then + + trigger.action.signalFlare( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR , 0 ) + Signalled = false + + end + end + + else + + local ZonePointVec3 = self:GetPointVec3( self.SignalHeight ) -- Get the zone position + the landheight + 2 meters + + if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then + + trigger.action.smoke( ZonePointVec3, self.SignalColor.TRIGGERCOLOR ) + Signalled = true + + elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then + trigger.action.signalFlare( ZonePointVec3, self.SignalColor.TRIGGERCOLOR, 0 ) + Signalled = false + + end + end + end + + return Signalled + +end + +function CARGO_ZONE:WhiteSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:BlueSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.BLUE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:RedSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:OrangeSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.ORANGE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:GreenSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + + +function CARGO_ZONE:WhiteFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:RedFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:GreenFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:YellowFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.YELLOW + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + + +function CARGO_ZONE:GetCargoHostUnit() + self:F( self ) + + if self.CargoHostSpawn then + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex(1) + if CargoHostGroup and CargoHostGroup:IsAlive() then + local CargoHostUnit = CargoHostGroup:GetUnit(1) + if CargoHostUnit and CargoHostUnit:IsAlive() then + return CargoHostUnit + end + end + end + + return nil +end + +function CARGO_ZONE:GetCargoZoneName() + self:F() + + return self.CargoZoneName +end + +CARGO = { + ClassName = "CARGO", + STATUS = { + NONE = 0, + LOADED = 1, + UNLOADED = 2, + LOADING = 3 + }, + CargoClient = nil +} + +--- Add Cargo to the mission... Cargo functionality needs to be reworked a bit, so this is still under construction. I need to make a CARGO Class... +function CARGO:New( CargoType, CargoName, CargoWeight ) local self = BASE:Inherit( self, BASE:New() ) + self:F( { CargoType, CargoName, CargoWeight } ) + + + self.CargoType = CargoType + self.CargoName = CargoName + self.CargoWeight = CargoWeight + + self:StatusNone() + + return self +end + +function CARGO:Spawn( Client ) + self:F() + + return self + +end + +function CARGO:IsNear( Client, LandingZone ) + self:F() + + local Near = true + + return Near + +end + + +function CARGO:IsLoadingToClient() + self:F() + + if self:IsStatusLoading() then + return self.CargoClient + end + + return nil + +end + + +function CARGO:IsLoadedInClient() + self:F() + + if self:IsStatusLoaded() then + return self.CargoClient + end + + return nil + +end + + +function CARGO:UnLoad( Client, TargetZoneName ) + self:F() + + self:StatusUnLoaded() + + return self +end + +function CARGO:OnBoard( Client, LandingZone ) + self:F() + + local Valid = true + + self.CargoClient = Client + local ClientUnit = Client:GetClientGroupDCSUnit() + + return Valid +end + +function CARGO:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = true + + return OnBoarded +end + +function CARGO:Load( Client ) + self:F() + + self:StatusLoaded( Client ) + + return self +end + +function CARGO:IsLandingRequired() + self:F() + return true +end + +function CARGO:IsSlingLoad() + self:F() + return false +end + + +function CARGO:StatusNone() + self:F() + + self.CargoClient = nil + self.CargoStatus = CARGO.STATUS.NONE + + return self +end + +function CARGO:StatusLoading( Client ) + self:F() + + self.CargoClient = Client + self.CargoStatus = CARGO.STATUS.LOADING + self:T( "Cargo " .. self.CargoName .. " loading to Client: " .. self.CargoClient:GetClientGroupName() ) + + return self +end + +function CARGO:StatusLoaded( Client ) + self:F() + + self.CargoClient = Client + self.CargoStatus = CARGO.STATUS.LOADED + self:T( "Cargo " .. self.CargoName .. " loaded in Client: " .. self.CargoClient:GetClientGroupName() ) + + return self +end + +function CARGO:StatusUnLoaded() + self:F() + + self.CargoClient = nil + self.CargoStatus = CARGO.STATUS.UNLOADED + + return self +end + + +function CARGO:IsStatusNone() + self:F() + + return self.CargoStatus == CARGO.STATUS.NONE +end + +function CARGO:IsStatusLoading() + self:F() + + return self.CargoStatus == CARGO.STATUS.LOADING +end + +function CARGO:IsStatusLoaded() + self:F() + + return self.CargoStatus == CARGO.STATUS.LOADED +end + +function CARGO:IsStatusUnLoaded() + self:F() + + return self.CargoStatus == CARGO.STATUS.UNLOADED +end + + +CARGO_GROUP = { + ClassName = "CARGO_GROUP" +} + + +function CARGO_GROUP:New( CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone } ) + + self.CargoSpawn = SPAWN:NewWithAlias( CargoGroupTemplate, CargoName ) + self.CargoZone = CargoZone + + CARGOS[self.CargoName] = self + + return self + +end + +function CARGO_GROUP:Spawn( Client ) + self:F( { Client } ) + + local SpawnCargo = true + + if self:IsStatusNone() then + local CargoGroup = Group.getByName( self.CargoName ) + if CargoGroup and CargoGroup:isExist() then + SpawnCargo = false + end + + elseif self:IsStatusLoading() then + + local Client = self:IsLoadingToClient() + if Client and Client:GetDCSGroup() then + SpawnCargo = false + else + local CargoGroup = Group.getByName( self.CargoName ) + if CargoGroup and CargoGroup:isExist() then + SpawnCargo = false + end + end + + elseif self:IsStatusLoaded() then + + local ClientLoaded = self:IsLoadedInClient() + -- Now test if another Client is alive (not this one), and it has the CARGO, then this cargo does not need to be initialized and spawned. + if ClientLoaded and ClientLoaded ~= Client then + local ClientGroup = Client:GetDCSGroup() + if ClientLoaded:GetClientGroupDCSUnit() and ClientLoaded:GetClientGroupDCSUnit():isExist() then + SpawnCargo = false + else + self:StatusNone() + end + else + -- Same Client, but now in initialize, so set back the status to None. + self:StatusNone() + end + + elseif self:IsStatusUnLoaded() then + + SpawnCargo = false + + end + + if SpawnCargo then + if self.CargoZone:GetCargoHostUnit() then + --- ReSpawn the Cargo from the CargoHost + self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30, 1 ):GetName() + else + --- ReSpawn the Cargo in the CargoZone without a host ... + self:T( self.CargoZone ) + self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone, true, 1 ):GetName() + end + self:StatusNone() + end + + self:T( { self.CargoGroupName, CARGOS[self.CargoName].CargoGroupName } ) + + return self +end + +function CARGO_GROUP:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + if self.CargoGroupName then + local CargoGroup = Group.getByName( self.CargoGroupName ) + if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 250 ) then + Near = true + end + end + + return Near + +end + + +function CARGO_GROUP:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + local ClientUnit = Client:GetClientGroupDCSUnit() + + local CarrierPos = ClientUnit:getPoint() + local CarrierPosMove = ClientUnit:getPoint() + local CarrierPosOnBoard = ClientUnit:getPoint() + + local CargoGroup = Group.getByName( self.CargoGroupName ) + + local CargoUnit = CargoGroup:getUnit(1) + local CargoPos = CargoUnit:getPoint() + + self.CargoInAir = CargoUnit:inAir() + + self:T( self.CargoInAir ) + + -- Only move the group to the carrier when the cargo is not in the air + -- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea). + if not self.CargoInAir then + + local Points = {} + + self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) + self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) + + Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) + + self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) + + if OnBoardSide == nil then + OnBoardSide = CLIENT.ONBOARDSIDE.NONE + end + + if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then + + self:T( "TransportCargoOnBoard: Onboarding LEFT" ) + CarrierPosMove.z = CarrierPosMove.z - 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then + + self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) + CarrierPosMove.z = CarrierPosMove.z + 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then + + self:T( "TransportCargoOnBoard: Onboarding BACK" ) + CarrierPosMove.x = CarrierPosMove.x - 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then + + self:T( "TransportCargoOnBoard: Onboarding CENTRAL" ) + Points[#Points+1] = routines.ground.buildWP( CarrierPos, "Cone", 10 ) + + end + self:T( "TransportCargoOnBoard: Routing " .. self.CargoGroupName ) + + --routines.scheduleFunction( routines.goRoute, { self.CargoGroupName, Points}, timer.getTime() + 4 ) + SCHEDULER:New( self, routines.goRoute, { self.CargoGroupName, Points}, 4 ) + end + + self:StatusLoading( Client ) + + return Valid + +end + + +function CARGO_GROUP:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + local CargoGroup = Group.getByName( self.CargoGroupName ) + + if not self.CargoInAir then + if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 25 ) then + CargoGroup:destroy() + self:StatusLoaded( Client ) + OnBoarded = true + end + else + CargoGroup:destroy() + self:StatusLoaded( Client ) + OnBoarded = true + end + + return OnBoarded +end + + +function CARGO_GROUP:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + + local CargoGroup = self.CargoSpawn:SpawnFromUnit( Client:GetClientGroupUnit(), 60, 30 ) + + self.CargoGroupName = CargoGroup:GetName() + self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) + + CargoGroup:TaskRouteToZone( ZONE:New( TargetZoneName ), true ) + + self:StatusUnLoaded() + + return self +end + + +CARGO_PACKAGE = { + ClassName = "CARGO_PACKAGE" +} + + +function CARGO_PACKAGE:New( CargoType, CargoName, CargoWeight, CargoClient ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoClient } ) + + self.CargoClient = CargoClient + + CARGOS[self.CargoName] = self + + return self + +end + + +function CARGO_PACKAGE:Spawn( Client ) + self:F( { self, Client } ) + + -- this needs to be checked thoroughly + + local CargoClientGroup = self.CargoClient:GetDCSGroup() + if not CargoClientGroup then + if not self.CargoClientSpawn then + self.CargoClientSpawn = SPAWN:New( self.CargoClient:GetClientGroupName() ):Limit( 1, 1 ) + end + self.CargoClientSpawn:ReSpawn( 1 ) + end + + local SpawnCargo = true + + if self:IsStatusNone() then + + elseif self:IsStatusLoading() or self:IsStatusLoaded() then + + local CargoClientLoaded = self:IsLoadedInClient() + if CargoClientLoaded and CargoClientLoaded:GetDCSGroup() then + SpawnCargo = false + end + + elseif self:IsStatusUnLoaded() then + + SpawnCargo = false + + else + + end + + if SpawnCargo then + self:StatusLoaded( self.CargoClient ) + end + + return self +end + + +function CARGO_PACKAGE:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + if self.CargoClient and self.CargoClient:GetDCSGroup() then + self:T( self.CargoClient.ClientName ) + self:T( 'Client Exists.' ) + + if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), Client:GetPositionVec3(), 150 ) then + Near = true + end + end + + return Near + +end + + +function CARGO_PACKAGE:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + local ClientUnit = Client:GetClientGroupDCSUnit() + + local CarrierPos = ClientUnit:getPoint() + local CarrierPosMove = ClientUnit:getPoint() + local CarrierPosOnBoard = ClientUnit:getPoint() + local CarrierPosMoveAway = ClientUnit:getPoint() + + local CargoHostGroup = self.CargoClient:GetDCSGroup() + local CargoHostName = self.CargoClient:GetDCSGroup():getName() + + local CargoHostUnits = CargoHostGroup:getUnits() + local CargoPos = CargoHostUnits[1]:getPoint() + + local Points = {} + + self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) + self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) + + Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) + + self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) + + if OnBoardSide == nil then + OnBoardSide = CLIENT.ONBOARDSIDE.NONE + end + + if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then + + self:T( "TransportCargoOnBoard: Onboarding LEFT" ) + CarrierPosMove.z = CarrierPosMove.z - 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 + CarrierPosMoveAway.z = CarrierPosMoveAway.z - 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then + + self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) + CarrierPosMove.z = CarrierPosMove.z + 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 + CarrierPosMoveAway.z = CarrierPosMoveAway.z + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then + + self:T( "TransportCargoOnBoard: Onboarding BACK" ) + CarrierPosMove.x = CarrierPosMove.x - 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x - 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + end + self:T( "Routing " .. CargoHostName ) + + --routines.scheduleFunction( routines.goRoute, { CargoHostName, Points}, timer.getTime() + 4 ) + SCHEDULER:New( self, routines.goRoute, { CargoHostName, Points }, 4 ) + + return Valid + +end + + +function CARGO_PACKAGE:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + if self.CargoClient and self.CargoClient:GetDCSGroup() then + if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), self.CargoClient:GetPositionVec3(), 10 ) then + + -- Switch Cargo from self.CargoClient to Client ... Each cargo can have only one client. So assigning the new client for the cargo is enough. + self:StatusLoaded( Client ) + + -- All done, onboarded the Cargo to the new Client. + OnBoarded = true + end + end + + return OnBoarded +end + + +function CARGO_PACKAGE:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + --self:T( 'self.CargoHostName = ' .. self.CargoHostName ) + + --self.CargoSpawn:FromCarrier( Client:GetDCSGroup(), TargetZoneName, self.CargoHostName ) + self:StatusUnLoaded() + + return Cargo +end + + +CARGO_SLINGLOAD = { + ClassName = "CARGO_SLINGLOAD" +} + + +function CARGO_SLINGLOAD:New( CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID ) + local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID } ) + + self.CargoHostName = CargoHostName + + -- Cargo will be initialized around the CargoZone position. + self.CargoZone = CargoZone + + self.CargoCount = 0 + self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) + + -- The country ID needs to be correctly set. + self.CargoCountryID = CargoCountryID + + CARGOS[self.CargoName] = self + + return self + +end + + +function CARGO_SLINGLOAD:IsLandingRequired() + self:F() + return false +end + + +function CARGO_SLINGLOAD:IsSlingLoad() + self:F() + return true +end + + +function CARGO_SLINGLOAD:Spawn( Client ) + self:F( { self, Client } ) + + local Zone = trigger.misc.getZone( self.CargoZone ) + + local ZonePos = {} + ZonePos.x = Zone.point.x + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) + ZonePos.y = Zone.point.z + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) + + self:T( "Cargo Location = " .. ZonePos.x .. ", " .. ZonePos.y ) + + --[[ + -- This does not work in 1.5.2. + CargoStatic = StaticObject.getByName( self.CargoName ) + if CargoStatic then + CargoStatic:destroy() + end + --]] + + CargoStatic = StaticObject.getByName( self.CargoStaticName ) + + if CargoStatic and CargoStatic:isExist() then + CargoStatic:destroy() + end + + -- I need to make every time a new cargo due to bugs in 1.5.2. + + self.CargoCount = self.CargoCount + 1 + self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) + + local CargoTemplate = { + ["category"] = "Cargo", + ["shape_name"] = "ab-212_cargo", + ["type"] = "Cargo1", + ["x"] = ZonePos.x, + ["y"] = ZonePos.y, + ["mass"] = self.CargoWeight, + ["name"] = self.CargoStaticName, + ["canCargo"] = true, + ["heading"] = 0, + } + + coalition.addStaticObject( self.CargoCountryID, CargoTemplate ) + +-- end + + return self +end + + +function CARGO_SLINGLOAD:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + return Near +end + + +function CARGO_SLINGLOAD:IsInLandingZone( Client, LandingZone ) + self:F() + + local Near = false + + local CargoStaticUnit = StaticObject.getByName( self.CargoName ) + if CargoStaticUnit then + if routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then + Near = true + end + end + + return Near +end + + +function CARGO_SLINGLOAD:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + + return Valid +end + + +function CARGO_SLINGLOAD:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + local CargoStaticUnit = StaticObject.getByName( self.CargoName ) + if CargoStaticUnit then + if not routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then + OnBoarded = true + end + end + + return OnBoarded +end + + +function CARGO_SLINGLOAD:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) + + self:StatusUnLoaded() + + return Cargo +end +--- Message System to display Messages for Clients and Coalitions or All. +-- Messages are grouped on the display panel per Category to improve readability for the players. +-- Messages are shown on the display panel for an amount of seconds, and will then disappear. +-- Messages are identified by an ID. The messages with the same ID belonging to the same category will be overwritten if they were still being displayed on the display panel. +-- Messages are created with MESSAGE:@{New}(). +-- Messages are sent to Clients with MESSAGE:@{ToClient}(). +-- Messages are sent to Coalitions with MESSAGE:@{ToCoalition}(). +-- Messages are sent to All Players with MESSAGE:@{ToAll}(). +-- @module Message + +Include.File( "Base" ) + +--- The MESSAGE class +-- @type MESSAGE +MESSAGE = { + ClassName = "MESSAGE", + MessageCategory = 0, + MessageID = 0, +} + + +--- Creates a new MESSAGE object. Note that these MESSAGE objects are not yet displayed on the display panel. You must use the functions @{ToClient} or @{ToCoalition} or @{ToAll} to send these Messages to the respective recipients. +-- @param self +-- @param #string MessageText is the text of the Message. +-- @param #string MessageCategory is a string expressing the Category of the Message. Messages are grouped on the display panel per Category to improve readability. +-- @param #number MessageDuration is a number in seconds of how long the MESSAGE should be shown on the display panel. +-- @param #string MessageID is a string expressing the ID of the Message. +-- @return #MESSAGE +-- @usage +-- -- Create a series of new Messages. +-- -- MessageAll is meant to be sent to all players, for 25 seconds, and is classified as "Score". +-- -- MessageRED is meant to be sent to the RED players only, for 10 seconds, and is classified as "End of Mission", with ID "Win". +-- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". +-- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ) +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) +function MESSAGE:New( MessageText, MessageCategory, MessageDuration, MessageID ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MessageText, MessageCategory, MessageDuration, MessageID } ) + + -- When no messagecategory is given, we don't show it as a title... + if MessageCategory and MessageCategory ~= "" then + self.MessageCategory = MessageCategory .. ": " + else + self.MessageCategory = "" + end + + self.MessageDuration = MessageDuration + self.MessageID = MessageID + self.MessageTime = timer.getTime() + self.MessageText = MessageText + + self.MessageSent = false + self.MessageGroup = false + self.MessageCoalition = false + + return self +end + +--- Sends a MESSAGE to a Client Group. Note that the Group needs to be defined within the ME with the skillset "Client" or "Player". +-- @param #MESSAGE self +-- @param Client#CLIENT Client is the Group of the Client. +-- @return #MESSAGE +-- @usage +-- -- Send the 2 messages created with the @{New} method to the Client Group. +-- -- Note that the Message of MessageClient2 is overwriting the Message of MessageClient1. +-- ClientGroup = Group.getByName( "ClientGroup" ) +-- +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- or +-- MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- or +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) +-- MessageClient1:ToClient( ClientGroup ) +-- MessageClient2:ToClient( ClientGroup ) +function MESSAGE:ToClient( Client ) + self:F( Client ) + + if Client and Client:GetClientGroupID() then + + local ClientGroupID = Client:GetClientGroupID() + self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) + trigger.action.outTextForGroup( ClientGroupID, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) + end + + return self +end + +--- Sends a MESSAGE to the Blue coalition. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the BLUE coalition. +-- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() +-- or +-- MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() +-- or +-- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageBLUE:ToBlue() +function MESSAGE:ToBlue() + self:F() + + self:ToCoalition( coalition.side.BLUE ) + + return self +end + +--- Sends a MESSAGE to the Red Coalition. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the RED coalition. +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() +-- or +-- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() +-- 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:ToRed() +function MESSAGE:ToRed( ) + self:F() + + self:ToCoalition( coalition.side.RED ) + + return self +end + +--- Sends a MESSAGE to a Coalition. +-- @param #MESSAGE self +-- @param CoalitionSide needs to be filled out by the defined structure of the standard scripting engine @{coalition.side}. +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the RED coalition. +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) +-- or +-- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) +-- 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 ) +function MESSAGE:ToCoalition( CoalitionSide ) + self:F( CoalitionSide ) + + if CoalitionSide then + self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) + trigger.action.outTextForCoalition( CoalitionSide, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) + end + + return self +end + +--- Sends a MESSAGE to all players. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created to all players. +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() +-- or +-- MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() +-- or +-- 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:ToCoalition( coalition.side.RED ) + self:ToCoalition( coalition.side.BLUE ) + + return self +end + + + +--- The MESSAGEQUEUE class +-- @type MESSAGEQUEUE +MESSAGEQUEUE = { + ClientGroups = {}, + CoalitionSides = {} +} + +function MESSAGEQUEUE:New( RefreshInterval ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { RefreshInterval } ) + + self.RefreshInterval = RefreshInterval + + --self.DisplayFunction = routines.scheduleFunction( self._DisplayMessages, { self }, 0, RefreshInterval ) + self.DisplayFunction = SCHEDULER:New( self, self._DisplayMessages, {}, 0, RefreshInterval ) + + return self +end + +--- This function is called automatically by the MESSAGEQUEUE scheduler. +function MESSAGEQUEUE:_DisplayMessages() + + -- First we display all messages that a coalition needs to receive... Also those who are not in a client (CA module clients...). + for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do + for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do + if MessageData.MessageSent == false then + --trigger.action.outTextForCoalition( CoalitionSideID, MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageSent = true + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + end + + -- Then we send the messages for each individual client, but also to be included are those Coalition messages for the Clients who belong to a coalition. + -- Because the Client messages will overwrite the Coalition messages (for that Client). + for ClientGroupName, ClientGroupData in pairs( self.ClientGroups ) do + for MessageID, MessageData in pairs( ClientGroupData.Messages ) do + if MessageData.MessageGroup == false then + trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageGroup = true + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + + -- Now check if the Client also has messages that belong to the Coalition of the Client... + for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do + for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do + local CoalitionGroup = Group.getByName( ClientGroupName ) + if CoalitionGroup and CoalitionGroup:getCoalition() == CoalitionSideID then + if MessageData.MessageCoalition == false then + trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageCoalition = true + end + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + end + end + + return true +end + +--- The _MessageQueue object is created when the MESSAGE class module is loaded. +--_MessageQueue = MESSAGEQUEUE:New( 0.5 ) + +--- Stages within a @{TASK} within a @{MISSION}. All of the STAGE functionality is considered internally administered and not to be used by any Mission designer. +-- @module STAGE +-- @author Flightcontrol + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The STAGE class +-- @type +STAGE = { + ClassName = "STAGE", + MSG = { ID = "None", TIME = 10 }, + FREQUENCY = { NONE = 0, ONCE = 1, REPEAT = -1 }, + + Name = "NoStage", + StageType = '', + WaitTime = 1, + Frequency = 1, + MessageCount = 0, + MessageInterval = 15, + MessageShown = {}, + MessageShow = false, + MessageFlash = false +} + + +function STAGE:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F() + return self +end + +function STAGE:Execute( Mission, Client, Task ) + + local Valid = true + + return Valid +end + +function STAGE:Executing( Mission, Client, Task ) + +end + +function STAGE:Validate( Mission, Client, Task ) + local Valid = true + + return Valid +end + + +STAGEBRIEF = { + ClassName = "BRIEF", + MSG = { ID = "Brief", TIME = 1 }, + Name = "Brief", + StageBriefingTime = 0, + StageBriefingDuration = 1 +} + +function STAGEBRIEF:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Execute +-- @param #STAGEBRIEF self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +-- @return #boolean +function STAGEBRIEF:Execute( Mission, Client, Task ) + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + self:F() + Client:ShowMissionBriefing( Mission.MissionBriefing ) + self.StageBriefingTime = timer.getTime() + return Valid +end + +function STAGEBRIEF:Validate( Mission, Client, Task ) + local Valid = STAGE:Validate( Mission, Client, Task ) + self:T() + + if timer.getTime() - self.StageBriefingTime <= self.StageBriefingDuration then + return 0 + else + self.StageBriefingTime = timer.getTime() + return 1 + end + +end + + +STAGESTART = { + ClassName = "START", + MSG = { ID = "Start", TIME = 1 }, + Name = "Start", + StageStartTime = 0, + StageStartDuration = 1 +} + +function STAGESTART:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGESTART:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + if Task.TaskBriefing then + Client:Message( Task.TaskBriefing, 30, Mission.Name .. "/Stage", "Command" ) + else + Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, Mission.Name .. "/Stage", "Command" ) + end + self.StageStartTime = timer.getTime() + return Valid +end + +function STAGESTART:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + if timer.getTime() - self.StageStartTime <= self.StageStartDuration then + return 0 + else + self.StageStartTime = timer.getTime() + return 1 + end + + return 1 + +end + +STAGE_CARGO_LOAD = { + ClassName = "STAGE_CARGO_LOAD" +} + +function STAGE_CARGO_LOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGE_CARGO_LOAD:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + for LoadCargoID, LoadCargo in pairs( Task.Cargos.LoadCargos ) do + LoadCargo:Load( Client ) + end + + if Mission.MissionReportFlash and Client:IsTransport() then + Client:ShowCargo() + end + + return Valid +end + +function STAGE_CARGO_LOAD:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + return 1 +end + + +STAGE_CARGO_INIT = { + ClassName = "STAGE_CARGO_INIT" +} + +function STAGE_CARGO_INIT:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGE_CARGO_INIT:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + for InitLandingZoneID, InitLandingZone in pairs( Task.LandingZones.LandingZones ) do + self:T( InitLandingZone ) + InitLandingZone:Spawn() + end + + + self:T( Task.Cargos.InitCargos ) + for InitCargoID, InitCargoData in pairs( Task.Cargos.InitCargos ) do + self:T( { InitCargoData } ) + InitCargoData:Spawn( Client ) + end + + return Valid +end + + +function STAGE_CARGO_INIT:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + return 1 +end + + + +STAGEROUTE = { + ClassName = "STAGEROUTE", + MSG = { ID = "Route", TIME = 5 }, + Frequency = STAGE.FREQUENCY.REPEAT, + Name = "Route" +} + +function STAGEROUTE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + self.MessageSwitch = true + return self +end + + +--- Execute the routing. +-- @param #STAGEROUTE self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEROUTE:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + local RouteMessage = "Fly to: " + self:T( Task.LandingZones ) + for LandingZoneID, LandingZoneName in pairs( Task.LandingZones.LandingZoneNames ) do + RouteMessage = RouteMessage .. "\n " .. LandingZoneName .. ' at ' .. routines.getBRStringZone( { zone = LandingZoneName, ref = Client:GetClientGroupDCSUnit():getPoint(), true, true } ) .. ' km.' + end + + if Client:IsMultiSeated() then + Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot", 20 ) + else + Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Command", 20 ) + end + + + if Mission.MissionReportFlash and Client:IsTransport() then + Client:ShowCargo() + end + + return Valid +end + +function STAGEROUTE:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + -- check if the Client is in the landing zone + self:T( Task.LandingZones.LandingZoneNames ) + Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) + + if Task.CurrentLandingZoneName then + + Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone + Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] + + if Task.CurrentCargoZone then + if not Task.Signalled then + Task.Signalled = Task.CurrentCargoZone:Signal() + end + end + + self:T( 1 ) + return 1 + end + + self:T( 0 ) + return 0 +end + + + +STAGELANDING = { + ClassName = "STAGELANDING", + MSG = { ID = "Landing", TIME = 10 }, + Name = "Landing", + Signalled = false +} + +function STAGELANDING:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Execute the landing coordination. +-- @param #STAGELANDING self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGELANDING:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( "We have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Co-Pilot", 10 ) + else + Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Command", 10 ) + end + + Task.HostUnit = Task.CurrentCargoZone:GetHostUnit() + + self:T( { Task.HostUnit } ) + + if Task.HostUnit then + + Task.HostUnitName = Task.HostUnit:GetPrefix() + Task.HostUnitTypeName = Task.HostUnit:GetTypeName() + + local HostMessage = "" + Task.CargoNames = "" + + local IsFirst = true + + for CargoID, Cargo in pairs( CARGOS ) do + if Cargo.CargoType == Task.CargoType then + + if Cargo:IsLandingRequired() then + self:T( "Task for cargo " .. Cargo.CargoType .. " requires landing.") + Task.IsLandingRequired = true + end + + if Cargo:IsSlingLoad() then + self:T( "Task for cargo " .. Cargo.CargoType .. " is a slingload.") + Task.IsSlingLoad = true + end + + if IsFirst then + IsFirst = false + Task.CargoNames = Task.CargoNames .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" + else + Task.CargoNames = Task.CargoNames .. "; " .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" + end + end + end + + if Task.IsLandingRequired then + HostMessage = "Land the helicopter to " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." + else + HostMessage = "Use the Radio menu and F6 to find the cargo, then fly or land near the cargo and " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." + end + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Host, Host, 10 ) + + end +end + +function STAGELANDING:Validate( Mission, Client, Task ) + self:F() + + Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) + if Task.CurrentLandingZoneName then + + -- Client is in de landing zone. + self:T( Task.CurrentLandingZoneName ) + + Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone + Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] + + if Task.CurrentCargoZone then + if not Task.Signalled then + Task.Signalled = Task.CurrentCargoZone:Signal() + end + end + else + if Task.CurrentLandingZone then + Task.CurrentLandingZone = nil + end + if Task.CurrentCargoZone then + Task.CurrentCargoZone = nil + end + Task.Signalled = false + Task:RemoveCargoMenus( Client ) + self:T( -1 ) + return -1 + end + + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and not Client:GetClientGroupDCSUnit():inAir() then + self:T( 1 ) + Task.IsInAirTestRequired = true + return 1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and DCSUnitVelocity <= 0.05 and DCSUnitHeight <= Task.CurrentCargoZone.SignalHeight then + self:T( 1 ) + Task.IsInAirTestRequired = false + return 1 + end + + self:T( 0 ) + return 0 +end + +STAGELANDED = { + ClassName = "STAGELANDED", + MSG = { ID = "Land", TIME = 10 }, + Name = "Landed", + MenusAdded = false +} + +function STAGELANDED:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGELANDED:Execute( Mission, Client, Task ) + self:F() + + if Task.IsLandingRequired then + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.', + self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC" .. Host, Host ) + + if not self.MenusAdded then + Task.Cargo = nil + Task:RemoveCargoMenus( Client ) + Task:AddCargoMenus( Client, CARGOS, 250 ) + end + end +end + + + +function STAGELANDED:Validate( Mission, Client, Task ) + self:F() + + if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." ) + Task.Signalled = false + Task:RemoveCargoMenus( Client ) + self:T( -2 ) + return -2 + end + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then + self:T( "Client went back in the air. Go back to stage Landing." ) + self:T( -1 ) + return -1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then + self:T( "It seems the Client went back in the air and over the boundary limits. Go back to stage Landing." ) + self:T( -1 ) + return -1 + end + + -- Wait until cargo is selected from the menu. + if Task.IsLandingRequired then + if not Task.Cargo then + self:T( 0 ) + return 0 + end + end + + self:T( 1 ) + return 1 +end + +STAGEUNLOAD = { + ClassName = "STAGEUNLOAD", + MSG = { ID = "Unload", TIME = 10 }, + Name = "Unload" +} + +function STAGEUNLOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Coordinate UnLoading +-- @param #STAGEUNLOAD self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEUNLOAD:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Co-Pilot" ) + else + Client:Message( 'You are unloading the ' .. Task.CargoType .. ' ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Command" ) + end + Task:RemoveCargoMenus( Client ) +end + +function STAGEUNLOAD:Executing( Mission, Client, Task ) + self:F() + env.info( 'STAGEUNLOAD:Executing() Task.Cargo.CargoName = ' .. Task.Cargo.CargoName ) + + local TargetZoneName + + if Task.TargetZoneName then + TargetZoneName = Task.TargetZoneName + else + TargetZoneName = Task.CurrentLandingZoneName + end + + if Task.Cargo:UnLoad( Client, TargetZoneName ) then + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + if Mission.MissionReportFlash then + Client:ShowCargo() + end + end +end + +--- Validate UnLoading +-- @param #STAGEUNLOAD self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEUNLOAD:Validate( Mission, Client, Task ) + self:F() + env.info( 'STAGEUNLOAD:Validate()' ) + + if routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + else + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task:RemoveCargoMenus( Client ) + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) + end + return 1 + end + + if not Client:GetClientGroupDCSUnit():inAir() then + else + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task:RemoveCargoMenus( Client ) + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) + end + return 1 + end + + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Command" ) + end + Task:RemoveCargoMenus( Client ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) -- We set the cargo as one more goal completed in the mission. + return 1 + end + + return 1 +end + +STAGELOAD = { + ClassName = "STAGELOAD", + MSG = { ID = "Load", TIME = 10 }, + Name = "Load" +} + +function STAGELOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGELOAD:Execute( Mission, Client, Task ) + self:F() + + if not Task.IsSlingLoad then + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Host, Host ) + + -- Route the cargo to the Carrier + + Task.Cargo:OnBoard( Client, Task.CurrentCargoZone, Task.OnBoardSide ) + Task.ExecuteStage = _TransportExecuteStage.EXECUTING + else + Task.ExecuteStage = _TransportExecuteStage.EXECUTING + end +end + +function STAGELOAD:Executing( Mission, Client, Task ) + self:F() + + -- If the Cargo is ready to be loaded, load it into the Client. + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + if not Task.IsSlingLoad then + self:T( Task.Cargo.CargoName) + + if Task.Cargo:OnBoarded( Client, Task.CurrentCargoZone ) then + + -- Load the Cargo onto the Client + Task.Cargo:Load( Client ) + + -- Message to the pilot that cargo has been loaded. + Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.", + 20, Mission.Name .. "/STAGELANDING.LOADING1." .. Host, Host ) + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + + Client:ShowCargo() + end + else + Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.", + _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Host, Host , 10 ) + for CargoID, Cargo in pairs( CARGOS ) do + self:T( "Cargo.CargoName = " .. Cargo.CargoName ) + + if Cargo:IsSlingLoad() then + local CargoStatic = StaticObject.getByName( Cargo.CargoStaticName ) + if CargoStatic then + self:T( "Cargo is found in the DCS simulator.") + local CargoStaticPosition = CargoStatic:getPosition().p + self:T( "Cargo Position x = " .. CargoStaticPosition.x .. ", y = " .. CargoStaticPosition.y .. ", z = " .. CargoStaticPosition.z ) + local CargoStaticHeight = routines.GetUnitHeight( CargoStatic ) + if CargoStaticHeight > 5 then + self:T( "Cargo is airborne.") + Cargo:StatusLoaded() + Task.Cargo = Cargo + Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.', + self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Host, Host ) + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + break + end + else + self:T( "Cargo not found in the DCS simulator." ) + end + end + end + end + +end + +function STAGELOAD:Validate( Mission, Client, Task ) + self:F() + + self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName ) + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + if not Task.IsSlingLoad then + if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + Task:RemoveCargoMenus( Client ) + Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Host, Host ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) + self:T( 1 ) + return 1 + end + + else + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName ) + if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then + Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Host, Host ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 ) + self:T( 1 ) + return 1 + end + end + + end + + + self:T( 0 ) + return 0 +end + + +STAGEDONE = { + ClassName = "STAGEDONE", + MSG = { ID = "Done", TIME = 10 }, + Name = "Done" +} + +function STAGEDONE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'AI' + return self +end + +function STAGEDONE:Execute( Mission, Client, Task ) + self:F() + +end + +function STAGEDONE:Validate( Mission, Client, Task ) + self:F() + + Task:Done() + + return 0 +end + +STAGEARRIVE = { + ClassName = "STAGEARRIVE", + MSG = { ID = "Arrive", TIME = 10 }, + Name = "Arrive" +} + +function STAGEARRIVE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + + +--- Execute Arrival +-- @param #STAGEARRIVE self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEARRIVE:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Co-Pilot" ) + else + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Command" ) + end + +end + +function STAGEARRIVE:Validate( Mission, Client, Task ) + self:F() + + Task.CurrentLandingZoneID = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones ) + if ( Task.CurrentLandingZoneID ) then + else + return -1 + end + + return 1 +end + +STAGEGROUPSDESTROYED = { + ClassName = "STAGEGROUPSDESTROYED", + DestroyGroupSize = -1, + Frequency = STAGE.FREQUENCY.REPEAT, + MSG = { ID = "DestroyGroup", TIME = 10 }, + Name = "GroupsDestroyed" +} + +function STAGEGROUPSDESTROYED:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'AI' + return self +end + +--function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) +-- +-- Client:Message( 'Task: Still ' .. DestroyGroupSize .. " of " .. Task.DestroyGroupCount .. " " .. Task.DestroyGroupType .. " to be destroyed!", self.MSG.TIME, Mission.Name .. "/Stage" ) +-- +--end + +function STAGEGROUPSDESTROYED:Validate( Mission, Client, Task ) + self:F() + + if Task.MissionTask:IsGoalReached() then + return 1 + else + return 0 + end +end + +function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) + self:F() + self:T( { Task.ClassName, Task.Destroyed } ) + --env.info( 'Event Table Task = ' .. tostring(Task) ) + +end + + + + + + + + + + + + + +--[[ + _TransportStage: Defines the different stages of which of transport missions can be in. This table is internal and is used to control the sequence of messages, actions and flow. + + - _TransportStage.START + - _TransportStage.ROUTE + - _TransportStage.LAND + - _TransportStage.EXECUTE + - _TransportStage.DONE + - _TransportStage.REMOVE +--]] +_TransportStage = { + HOLD = "HOLD", + START = "START", + ROUTE = "ROUTE", + LANDING = "LANDING", + LANDED = "LANDED", + EXECUTING = "EXECUTING", + LOAD = "LOAD", + UNLOAD = "UNLOAD", + DONE = "DONE", + NEXT = "NEXT" +} + +_TransportStageMsgTime = { + HOLD = 10, + START = 60, + ROUTE = 5, + LANDING = 10, + LANDED = 30, + EXECUTING = 30, + LOAD = 30, + UNLOAD = 30, + DONE = 30, + NEXT = 0 +} + +_TransportStageTime = { + HOLD = 10, + START = 5, + ROUTE = 5, + LANDING = 1, + LANDED = 1, + EXECUTING = 5, + LOAD = 5, + UNLOAD = 5, + DONE = 1, + NEXT = 0 +} + +_TransportStageAction = { + REPEAT = -1, + NONE = 0, + ONCE = 1 +} +--- The TASK Classes define major end-to-end activities within a MISSION. The TASK Class is the Master Class to orchestrate these activities. From this class, many concrete TASK classes are inherited. +-- @module TASK + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Stage" ) + +--- The TASK class +-- @type TASK +-- @extends Base#BASE +TASK = { + + -- Defines the different signal types with a Task. + SIGNAL = { + COLOR = { + RED = { ID = 1, COLOR = trigger.smokeColor.Red, TEXT = "A red" }, + GREEN = { ID = 2, COLOR = trigger.smokeColor.Green, TEXT = "A green" }, + BLUE = { ID = 3, COLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, + WHITE = { ID = 4, COLOR = trigger.smokeColor.White, TEXT = "A white" }, + ORANGE = { ID = 5, COLOR = trigger.smokeColor.Orange, TEXT = "An orange" } + }, + TYPE = { + SMOKE = { ID = 1, TEXT = "smoke" }, + FLARE = { ID = 2, TEXT = "flare" } + } + }, + ClassName = "TASK", + Mission = {}, -- Owning mission of the Task + Name = '', + Stages = {}, + Stage = {}, + Cargos = { + InitCargos = {}, + LoadCargos = {} + }, + LandingZones = { + LandingZoneNames = {}, + LandingZones = {} + }, + ActiveStage = 0, + TaskDone = false, + TaskFailed = false, + GoalTasks = {} +} + +--- Instantiates a new TASK Base. Should never be used. Interface Class. +-- @return TASK +function TASK:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F() + + -- assign Task default values during construction + self.TaskBriefing = "Task: No Task." + self.Time = timer.getTime() + self.ExecuteStage = _TransportExecuteStage.NONE + + return self +end + +function TASK:SetStage( StageSequenceIncrement ) + self:F( { StageSequenceIncrement } ) + + local Valid = false + if StageSequenceIncrement ~= 0 then + self.ActiveStage = self.ActiveStage + StageSequenceIncrement + if 1 <= self.ActiveStage and self.ActiveStage <= #self.Stages then + self.Stage = self.Stages[self.ActiveStage] + self:T( { self.Stage.Name } ) + self.Frequency = self.Stage.Frequency + Valid = true + else + Valid = false + env.info( "TASK:SetStage() self.ActiveStage is smaller or larger than self.Stages array. self.ActiveStage = " .. self.ActiveStage ) + end + end + self.Time = timer.getTime() + return Valid +end + +function TASK:Init() + self:F() + self.ActiveStage = 0 + self:SetStage(1) + self.TaskDone = false + self.TaskFailed = false +end + + +--- Get progress of a TASK. +-- @return string GoalsText +function TASK:GetGoalProgress() + self:F2() + + local GoalsText = "" + for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do + local Goals = self:GetGoalCompletion( GoalVerb ) + if Goals and Goals ~= "" then + Goals = '(' .. Goals .. ')' + else + Goals = '( - )' + end + GoalsText = GoalsText .. GoalVerb .. ': ' .. self:GetGoalCount(GoalVerb) .. ' goals ' .. Goals .. ' of ' .. self:GetGoalTotal(GoalVerb) .. ' goals completed (' .. self:GetGoalPercentage(GoalVerb) .. '%); ' + end + + if GoalsText == "" then + GoalsText = "( - )" + end + + return GoalsText +end + +--- Show progress of a TASK. +-- @param MISSION Mission Group structure describing the Mission. +-- @param CLIENT Client Group structure describing the Client. +function TASK:ShowGoalProgress( Mission, Client ) + self:F2() + + local GoalsText = "" + for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do + if Mission:IsCompleted() then + else + local Goals = self:GetGoalCompletion( GoalVerb ) + if Goals and Goals ~= "" then + else + Goals = "-" + end + GoalsText = GoalsText .. self:GetGoalProgress() + end + end + + if Mission.MissionReportFlash or Mission.MissionReportShow then + Client:Message( GoalsText, 10, "/TASKPROGRESS" .. self.ClassName, "Mission Command: Task Status", 30 ) + end +end + +--- Sets a TASK to status Done. +function TASK:Done() + self:F2() + self.TaskDone = true +end + +--- Returns if a TASK is done. +-- @return bool +function TASK:IsDone() + self:F2( self.TaskDone ) + return self.TaskDone +end + +--- Sets a TASK to status failed. +function TASK:Failed() + self:F() + self.TaskFailed = true +end + +--- Returns if a TASk has failed. +-- @return bool +function TASK:IsFailed() + self:F2( self.TaskFailed ) + return self.TaskFailed +end + +function TASK:Reset( Mission, Client ) + self:F2() + self.ExecuteStage = _TransportExecuteStage.NONE +end + +--- Returns the Goals of a TASK +-- @return @table Goals +function TASK:GetGoals() + return self.GoalTasks +end + +--- Returns if a TASK has Goal(s). +-- @param #TASK self +-- @param #string GoalVerb is the name of the Goal of the TASK. +-- @return bool +function TASK:Goal( GoalVerb ) + self:F2( { GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + self:T2( {self.GoalTasks[GoalVerb] } ) + if self.GoalTasks[GoalVerb] and self.GoalTasks[GoalVerb].GoalTotal > 0 then + return true + else + return false + end +end + +--- Sets the total Goals to be achieved of the Goal Name +-- @param number GoalTotal is the number of times the GoalVerb needs to be achieved. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +function TASK:SetGoalTotal( GoalTotal, GoalVerb ) + self:F2( { GoalTotal, GoalVerb } ) + + if not GoalVerb then + GoalVerb = self.GoalVerb + end + self.GoalTasks[GoalVerb] = {} + self.GoalTasks[GoalVerb].Goals = {} + self.GoalTasks[GoalVerb].GoalTotal = GoalTotal + self.GoalTasks[GoalVerb].GoalCount = 0 + return self +end + +--- Gets the total of Goals to be achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +function TASK:GetGoalTotal( GoalVerb ) + self:F2( { GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return self.GoalTasks[GoalVerb].GoalTotal + else + return 0 + end +end + +--- Sets the total of Goals currently achieved within the TASK of the GoalVerb. +-- @param number GoalCount is the total number of Goals achieved within the TASK. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:SetGoalCount( GoalCount, GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb) then + self.GoalTasks[GoalVerb].GoalCount = GoalCount + end + return self +end + +--- Increments the total of Goals currently achieved within the TASK of the GoalVerb, with the given GoalCountIncrease. +-- @param number GoalCountIncrease is the number of new Goals achieved within the TASK. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:IncreaseGoalCount( GoalCountIncrease, GoalVerb ) + self:F2( { GoalCountIncrease, GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb) then + self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalCountIncrease + end + return self +end + +--- Gets the total of Goals currently achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:GetGoalCount( GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return self.GoalTasks[GoalVerb].GoalCount + else + return 0 + end +end + +--- Gets the percentage of Goals currently achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:GetGoalPercentage( GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return math.floor( self:GetGoalCount( GoalVerb ) / self:GetGoalTotal( GoalVerb ) * 100 + .5 ) + else + return 100 + end +end + +--- Returns if all the Goals of the TASK were achieved. +-- @return bool +function TASK:IsGoalReached() + self:F2() + + local GoalReached = true + + for GoalVerb, Goals in pairs( self.GoalTasks ) do + self:T2( { "GoalVerb", GoalVerb } ) + if self:Goal( GoalVerb ) then + local GoalToDo = self:GetGoalTotal( GoalVerb ) - self:GetGoalCount( GoalVerb ) + self:T2( "GoalToDo = " .. GoalToDo ) + if GoalToDo <= 0 then + else + GoalReached = false + break + end + else + break + end + end + + self:T( { GoalReached, self.GoalTasks } ) + return GoalReached +end + +--- Adds an Additional Goal for the TASK to be achieved. +-- @param string GoalVerb is the name of the Goal of the TASK. +-- @param string GoalTask is a text describing the Goal of the TASK to be achieved. +-- @param number GoalIncrease is a number by which the Goal achievement is increasing. +function TASK:AddGoalCompletion( GoalVerb, GoalTask, GoalIncrease ) + self:F2( { GoalVerb, GoalTask, GoalIncrease } ) + + if self:Goal( GoalVerb ) then + self.GoalTasks[GoalVerb].Goals[#self.GoalTasks[GoalVerb].Goals+1] = GoalTask + self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalIncrease + end + return self +end + +--- Returns if the additional Goal for the TASK was completed. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return string Goals +function TASK:GetGoalCompletion( GoalVerb ) + self:F2( { GoalVerb } ) + + if self:Goal( GoalVerb ) then + local Goals = "" + for GoalID, GoalName in pairs( self.GoalTasks[GoalVerb].Goals ) do Goals = Goals .. GoalName .. " + " end + return Goals:gsub(" + $", ""), self.GoalTasks[GoalVerb].GoalCount + end +end + +function TASK.MenuAction( Parameter ) + Parameter.ReferenceTask.ExecuteStage = _TransportExecuteStage.EXECUTING + Parameter.ReferenceTask.Cargo = Parameter.CargoTask +end + +function TASK:StageExecute() + self:F() + + local Execute = false + + if self.Frequency == STAGE.FREQUENCY.REPEAT then + Execute = true + elseif self.Frequency == STAGE.FREQUENCY.NONE then + Execute = false + elseif self.Frequency >= 0 then + Execute = true + self.Frequency = self.Frequency - 1 + end + + return Execute + +end + +--- Work function to set signal events within a TASK. +function TASK:AddSignal( SignalUnitNames, SignalType, SignalColor, SignalHeight ) + self:F() + + local Valid = true + + if Valid then + if type( SignalUnitNames ) == "table" then + self.LandingZoneSignalUnitNames = SignalUnitNames + else + self.LandingZoneSignalUnitNames = { SignalUnitNames } + end + self.LandingZoneSignalType = SignalType + self.LandingZoneSignalColor = SignalColor + self.Signalled = false + if SignalHeight ~= nil then + self.LandingZoneSignalHeight = SignalHeight + else + self.LandingZoneSignalHeight = 0 + end + + if self.TaskBriefing then + self.TaskBriefing = self.TaskBriefing .. " " .. SignalColor.TEXT .. " " .. SignalType.TEXT .. " will be fired when entering the landing zone." + end + end + + return Valid +end + +--- When the CLIENT is approaching the landing zone, a RED SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeRed( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.RED, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a GREEN SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeGreen( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a BLUE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeBlue( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a WHITE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeWhite( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, an ORANGE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeOrange( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a RED FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareRed( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.RED, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a GREEN FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareGreen( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a BLUE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareBlue( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a WHITE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareWhite( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, an ORANGE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareOrange( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) +end +--- A GOHOMETASK orchestrates the travel back to the home base, which is a specific zone defined within the ME. +-- @module GOHOMETASK + +Include.File("Task") + +--- The GOHOMETASK class +-- @type +GOHOMETASK = { + ClassName = "GOHOMETASK", +} + +--- Creates a new GOHOMETASK. +-- @param table{string,...}|string LandingZones Table of Landing Zone names where Home(s) are located. +-- @return GOHOMETASK +function GOHOMETASK:New( LandingZones ) + local self = BASE:Inherit( self, TASK:New() ) + self:F( { LandingZones } ) + local Valid = true + + Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) + + if Valid then + self.Name = 'Fly Home' + self.TaskBriefing = "Task: Fly back to your home base. Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to your home base." + if type( LandingZones ) == "table" then + self.LandingZones = LandingZones + else + self.LandingZones = { LandingZones } + end + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end +--- A DESTROYBASETASK will monitor the destruction of Groups and Units. This is a BASE class, other classes are derived from this class. +-- @module DESTROYBASETASK +-- @see DESTROYGROUPSTASK +-- @see DESTROYUNITTYPESTASK +-- @see DESTROY_RADARS_TASK + +Include.File("Task") + +--- The DESTROYBASETASK class +-- @type DESTROYBASETASK +DESTROYBASETASK = { + ClassName = "DESTROYBASETASK", + Destroyed = 0, + GoalVerb = "Destroy", + DestroyPercentage = 100, +} + +--- Creates a new DESTROYBASETASK. +-- @param #DESTROYBASETASK self +-- @param #string DestroyGroupType Text describing the group to be destroyed. f.e. "Radar Installations", "Ships", "Vehicles", "Command Centers". +-- @param #string DestroyUnitType Text describing the unit types to be destroyed. f.e. "SA-6", "Row Boats", "Tanks", "Tents". +-- @param #list<#string> DestroyGroupPrefixes Table of Prefixes of the Groups to be destroyed before task is completed. +-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. +-- @return DESTROYBASETASK +function DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupPrefixes, DestroyPercentage ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + self.Name = 'Destroy' + self.Destroyed = 0 + self.DestroyGroupPrefixes = DestroyGroupPrefixes + self.DestroyGroupType = DestroyGroupType + self.DestroyUnitType = DestroyUnitType + if DestroyPercentage then + self.DestroyPercentage = DestroyPercentage + end + self.TaskBriefing = "Task: Destroy " .. DestroyGroupType .. "." + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEGROUPSDESTROYED:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + + return self +end + +--- Handle the S_EVENT_DEAD events to validate the destruction of units for the task monitoring. +-- @param #DESTROYBASETASK self +-- @param Event#EVENTDATA Event structure of MOOSE. +function DESTROYBASETASK:EventDead( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + local DestroyUnit = Event.IniDCSUnit + local DestroyUnitName = Event.IniDCSUnitName + local DestroyGroup = Event.IniDCSGroup + local DestroyGroupName = Event.IniDCSGroupName + + --TODO: I need to fix here if 2 groups in the mission have a similar name with GroupPrefix equal, then i should differentiate for which group the goal was reached! + --I may need to test if for the goalverb that group goal was reached or something. Need to think about it a bit more ... + local UnitsDestroyed = 0 + for DestroyGroupPrefixID, DestroyGroupPrefix in pairs( self.DestroyGroupPrefixes ) do + self:T( DestroyGroupPrefix ) + if string.find( DestroyGroupName, DestroyGroupPrefix, 1, true ) then + self:T( BASE:Inherited(self).ClassName ) + UnitsDestroyed = self:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:T( UnitsDestroyed ) + end + end + + self:T( { UnitsDestroyed } ) + self:IncreaseGoalCount( UnitsDestroyed, self.GoalVerb ) + end + +end + +--- Validate task completeness of DESTROYBASETASK. +-- @param DestroyGroup Group structure describing the group to be evaluated. +-- @param DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYBASETASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F() + + return 0 +end +--- DESTROYGROUPSTASK +-- @module DESTROYGROUPSTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYGROUPSTASK class +-- @type +DESTROYGROUPSTASK = { + ClassName = "DESTROYGROUPSTASK", + GoalVerb = "Destroy Groups", +} + +--- Creates a new DESTROYGROUPSTASK. +-- @param #DESTROYGROUPSTASK self +-- @param #string DestroyGroupType String describing the group to be destroyed. +-- @param #string DestroyUnitType String describing the unit to be destroyed. +-- @param #list<#string> DestroyGroupNames Table of string containing the name of the groups to be destroyed before task is completed. +-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. +---@return DESTROYGROUPSTASK +function DESTROYGROUPSTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) + local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) ) + self:F() + + self.Name = 'Destroy Groups' + self.GoalVerb = "Destroy " .. DestroyGroupType + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + _EVENTDISPATCHER:OnCrash( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param #DESTROYGROUPSTASK self +-- @param DCSGroup#Group DestroyGroup Group structure describing the group to be evaluated. +-- @param DCSUnit#Unit DestroyUnit Unit structure describing the Unit to be evaluated. +-- @return #number The DestroyCount reflecting the amount of units destroyed within the group. +function DESTROYGROUPSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit, self.DestroyPercentage } ) + + local DestroyGroupSize = DestroyGroup:getSize() - 1 -- When a DEAD event occurs, the getSize is still one larger than the destroyed unit. + local DestroyGroupInitialSize = DestroyGroup:getInitialSize() + self:T( { DestroyGroupSize, DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) } ) + + local DestroyCount = 0 + if DestroyGroup then + if DestroyGroupSize <= DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) then + DestroyCount = 1 + end + else + DestroyCount = 1 + end + + self:T( DestroyCount ) + + return DestroyCount +end +--- Task class to destroy radar installations. +-- @module DESTROYRADARSTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYRADARS class +-- @type +DESTROYRADARSTASK = { + ClassName = "DESTROYRADARSTASK", + GoalVerb = "Destroy Radars" +} + +--- Creates a new DESTROYRADARSTASK. +-- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. +-- @return DESTROYRADARSTASK +function DESTROYRADARSTASK:New( DestroyGroupNames ) + local self = BASE:Inherit( self, DESTROYGROUPSTASK:New( 'radar installations', 'radars', DestroyGroupNames ) ) + self:F() + + self.Name = 'Destroy Radars' + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param Group DestroyGroup Group structure describing the group to be evaluated. +-- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYRADARSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit } ) + + local DestroyCount = 0 + if DestroyUnit and DestroyUnit:hasSensors( Unit.SensorType.RADAR, Unit.RadarType.AS ) then + if DestroyUnit and DestroyUnit:getLife() <= 1.0 then + self:T( 'Destroyed a radar' ) + DestroyCount = 1 + end + end + return DestroyCount +end +--- Set TASK to destroy certain unit types. +-- @module DESTROYUNITTYPESTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYUNITTYPESTASK class +-- @type +DESTROYUNITTYPESTASK = { + ClassName = "DESTROYUNITTYPESTASK", + GoalVerb = "Destroy", +} + +--- Creates a new DESTROYUNITTYPESTASK. +-- @param string DestroyGroupType String describing the group to be destroyed. f.e. "Radar Installations", "Fleet", "Batallion", "Command Centers". +-- @param string DestroyUnitType String describing the unit to be destroyed. f.e. "radars", "ships", "tanks", "centers". +-- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. +-- @param string DestroyUnitTypes Table of string containing the type names of the units to achieve mission success. +-- @return DESTROYUNITTYPESTASK +function DESTROYUNITTYPESTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes ) + local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames ) ) + self:F( { DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes } ) + + if type(DestroyUnitTypes) == 'table' then + self.DestroyUnitTypes = DestroyUnitTypes + else + self.DestroyUnitTypes = { DestroyUnitTypes } + end + + self.Name = 'Destroy Unit Types' + self.GoalVerb = "Destroy " .. DestroyGroupType + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param Group DestroyGroup Group structure describing the group to be evaluated. +-- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYUNITTYPESTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit } ) + + local DestroyCount = 0 + for UnitTypeID, UnitType in pairs( self.DestroyUnitTypes ) do + if DestroyUnit and DestroyUnit:getTypeName() == UnitType then + if DestroyUnit and DestroyUnit:getLife() <= 1.0 then + DestroyCount = DestroyCount + 1 + end + end + end + return DestroyCount +end +--- A PICKUPTASK orchestrates the loading of CARGO at a specific landing zone. +-- @module PICKUPTASK +-- @parent TASK + +Include.File("Task") +Include.File("Cargo") + +--- The PICKUPTASK class +-- @type +PICKUPTASK = { + ClassName = "PICKUPTASK", + TEXT = { "Pick-Up", "picked-up", "loaded" }, + GoalVerb = "Pick-Up" +} + +--- Creates a new PICKUPTASK. +-- @param table{string,...}|string LandingZones Table of Zone names where Cargo is to be loaded. +-- @param CARGO_TYPE CargoType Type of the Cargo. The type must be of the following Enumeration:.. +-- @param number OnBoardSide Reflects from which side the cargo Group will be on-boarded on the Carrier. +function PICKUPTASK:New( CargoType, OnBoardSide ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + -- self holds the inherited instance of the PICKUPTASK Class to the BASE class. + + local Valid = true + + if Valid then + self.Name = 'Pickup Cargo' + self.TaskBriefing = "Task: Fly to the indicated landing zones and pickup " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the pickup zone." + self.CargoType = CargoType + self.GoalVerb = CargoType .. " " .. self.GoalVerb + self.OnBoardSide = OnBoardSide + self.IsLandingRequired = true -- required to decide whether the client needs to land or not + self.IsSlingLoad = false -- Indicates whether the cargo is a sling load cargo + self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGELOAD:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +function PICKUPTASK:FromZone( LandingZone ) + self:F() + + self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName + self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone + + return self +end + +function PICKUPTASK:InitCargo( InitCargos ) + self:F( { InitCargos } ) + + if type( InitCargos ) == "table" then + self.Cargos.InitCargos = InitCargos + else + self.Cargos.InitCargos = { InitCargos } + end + + return self +end + +function PICKUPTASK:LoadCargo( LoadCargos ) + self:F( { LoadCargos } ) + + if type( LoadCargos ) == "table" then + self.Cargos.LoadCargos = LoadCargos + else + self.Cargos.LoadCargos = { LoadCargos } + end + + return self +end + +function PICKUPTASK:AddCargoMenus( Client, Cargos, TransportRadius ) + self:F() + + for CargoID, Cargo in pairs( Cargos ) do + + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) + + -- If the Cargo has no status, allow the menu option. + if Cargo:IsStatusNone() or ( Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() ) then + + local MenuAdd = false + if Cargo:IsNear( Client, self.CurrentCargoZone ) then + MenuAdd = true + end + + if MenuAdd then + if Client._Menus[Cargo.CargoType] == nil then + Client._Menus[Cargo.CargoType] = {} + end + + if not Client._Menus[Cargo.CargoType].PickupMenu then + Client._Menus[Cargo.CargoType].PickupMenu = missionCommands.addSubMenuForGroup( + Client:GetClientGroupID(), + self.TEXT[1] .. " " .. Cargo.CargoType, + nil + ) + self:T( 'Added PickupMenu: ' .. self.TEXT[1] .. " " .. Cargo.CargoType ) + end + + if Client._Menus[Cargo.CargoType].PickupSubMenus == nil then + Client._Menus[Cargo.CargoType].PickupSubMenus = {} + end + + Client._Menus[Cargo.CargoType].PickupSubMenus[ #Client._Menus[Cargo.CargoType].PickupSubMenus + 1 ] = missionCommands.addCommandForGroup( + Client:GetClientGroupID(), + Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", + Client._Menus[Cargo.CargoType].PickupMenu, + self.MenuAction, + { ReferenceTask = self, CargoTask = Cargo } + ) + self:T( 'Added PickupSubMenu' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) + end + end + end + +end + +function PICKUPTASK:RemoveCargoMenus( Client ) + self:F() + + for MenuID, MenuData in pairs( Client._Menus ) do + for SubMenuID, SubMenuData in pairs( MenuData.PickupSubMenus ) do + missionCommands.removeItemForGroup( Client:GetClientGroupID(), SubMenuData ) + self:T( "Removed PickupSubMenu " ) + SubMenuData = nil + end + if MenuData.PickupMenu then + missionCommands.removeItemForGroup( Client:GetClientGroupID(), MenuData.PickupMenu ) + self:T( "Removed PickupMenu " ) + MenuData.PickupMenu = nil + end + end + + for CargoID, Cargo in pairs( CARGOS ) do + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) + if Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() then + Cargo:StatusNone() + end + end + +end + + + +function PICKUPTASK:HasFailed( ClientDead ) + self:F() + + local TaskHasFailed = self.TaskFailed + return TaskHasFailed +end + +--- A DEPLOYTASK orchestrates the deployment of CARGO within a specific landing zone. +-- @module DEPLOYTASK + +Include.File( "Task" ) + +--- A DeployTask +-- @type DEPLOYTASK +DEPLOYTASK = { + ClassName = "DEPLOYTASK", + TEXT = { "Deploy", "deployed", "unloaded" }, + GoalVerb = "Deployment" +} + + +--- Creates a new DEPLOYTASK object, which models the sequence of STAGEs to unload a cargo. +-- @function [parent=#DEPLOYTASK] New +-- @param #string CargoType Type of the Cargo. +-- @return #DEPLOYTASK The created DeployTask +function DEPLOYTASK:New( CargoType ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + local Valid = true + + if Valid then + self.Name = 'Deploy Cargo' + self.TaskBriefing = "Fly to one of the indicated landing zones and deploy " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the deployment zone." + self.CargoType = CargoType + self.GoalVerb = CargoType .. " " .. self.GoalVerb + self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGEUNLOAD:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +function DEPLOYTASK:ToZone( LandingZone ) + self:F() + + self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName + self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone + + return self +end + + +function DEPLOYTASK:InitCargo( InitCargos ) + self:F( { InitCargos } ) + + if type( InitCargos ) == "table" then + self.Cargos.InitCargos = InitCargos + else + self.Cargos.InitCargos = { InitCargos } + end + + return self +end + + +function DEPLOYTASK:LoadCargo( LoadCargos ) + self:F( { LoadCargos } ) + + if type( LoadCargos ) == "table" then + self.Cargos.LoadCargos = LoadCargos + else + self.Cargos.LoadCargos = { LoadCargos } + end + + return self +end + + +--- When the cargo is unloaded, it will move to the target zone name. +-- @param string TargetZoneName Name of the Zone to where the Cargo should move after unloading. +function DEPLOYTASK:SetCargoTargetZoneName( TargetZoneName ) + self:F() + + local Valid = true + + Valid = routines.ValidateString( TargetZoneName, "TargetZoneName", Valid ) + + if Valid then + self.TargetZoneName = TargetZoneName + end + + return Valid + +end + +function DEPLOYTASK:AddCargoMenus( Client, Cargos, TransportRadius ) + self:F() + + local ClientGroupID = Client:GetClientGroupID() + + self:T( ClientGroupID ) + + for CargoID, Cargo in pairs( Cargos ) do + + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo.CargoWeight } ) + + if Cargo:IsStatusLoaded() and Client == Cargo:IsLoadedInClient() then + + if Client._Menus[Cargo.CargoType] == nil then + Client._Menus[Cargo.CargoType] = {} + end + + if not Client._Menus[Cargo.CargoType].DeployMenu then + Client._Menus[Cargo.CargoType].DeployMenu = missionCommands.addSubMenuForGroup( + ClientGroupID, + self.TEXT[1] .. " " .. Cargo.CargoType, + nil + ) + self:T( 'Added DeployMenu ' .. self.TEXT[1] ) + end + + if Client._Menus[Cargo.CargoType].DeploySubMenus == nil then + Client._Menus[Cargo.CargoType].DeploySubMenus = {} + end + + if Client._Menus[Cargo.CargoType].DeployMenu == nil then + self:T( 'deploymenu is nil' ) + end + + Client._Menus[Cargo.CargoType].DeploySubMenus[ #Client._Menus[Cargo.CargoType].DeploySubMenus + 1 ] = missionCommands.addCommandForGroup( + ClientGroupID, + Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", + Client._Menus[Cargo.CargoType].DeployMenu, + self.MenuAction, + { ReferenceTask = self, CargoTask = Cargo } + ) + self:T( 'Added DeploySubMenu ' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) + end + end + +end + +function DEPLOYTASK:RemoveCargoMenus( Client ) + self:F() + + local ClientGroupID = Client:GetClientGroupID() + self:T( ClientGroupID ) + + for MenuID, MenuData in pairs( Client._Menus ) do + if MenuData.DeploySubMenus ~= nil then + for SubMenuID, SubMenuData in pairs( MenuData.DeploySubMenus ) do + missionCommands.removeItemForGroup( ClientGroupID, SubMenuData ) + self:T( "Removed DeploySubMenu " ) + SubMenuData = nil + end + end + if MenuData.DeployMenu then + missionCommands.removeItemForGroup( ClientGroupID, MenuData.DeployMenu ) + self:T( "Removed DeployMenu " ) + MenuData.DeployMenu = nil + end + end + +end +--- A NOTASK is a dummy activity... But it will show a Mission Briefing... +-- @module NOTASK + +Include.File("Task") + +--- The NOTASK class +-- @type +NOTASK = { + ClassName = "NOTASK", +} + +--- Creates a new NOTASK. +function NOTASK:New() + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + local Valid = true + + if Valid then + self.Name = 'Nothing' + self.TaskBriefing = "Task: Execute your mission." + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end +--- A ROUTETASK orchestrates the travel to a specific zone defined within the ME. +-- @module ROUTETASK + +--- The ROUTETASK class +-- @type +ROUTETASK = { + ClassName = "ROUTETASK", + GoalVerb = "Route", +} + +--- Creates a new ROUTETASK. +-- @param table{sring,...}|string LandingZones Table of Zone Names where the target is located. +-- @param string TaskBriefing (optional) Defines a text describing the briefing of the task. +-- @return ROUTETASK +function ROUTETASK:New( LandingZones, TaskBriefing ) + local self = BASE:Inherit( self, TASK:New() ) + self:F( { LandingZones, TaskBriefing } ) + + local Valid = true + + Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) + + if Valid then + self.Name = 'Route To Zone' + if TaskBriefing then + self.TaskBriefing = TaskBriefing .. " Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." + else + self.TaskBriefing = "Task: Fly to specified zone(s). Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." + end + if type( LandingZones ) == "table" then + self.LandingZones = LandingZones + else + self.LandingZones = { LandingZones } + end + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +--- A MISSION is the main owner of a Mission orchestration within MOOSE . The Mission framework orchestrates @{CLIENT}s, @{TASK}s, @{STAGE}s etc. +-- A @{CLIENT} needs to be registered within the @{MISSION} through the function @{AddClient}. A @{TASK} needs to be registered within the @{MISSION} through the function @{AddTask}. +-- @module Mission + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The MISSION class +-- @type MISSION +-- @extends Base#BASE +-- @field #MISSION.Clients _Clients +-- @field #string MissionBriefing +MISSION = { + ClassName = "MISSION", + Name = "", + MissionStatus = "PENDING", + _Clients = {}, + _Tasks = {}, + _ActiveTasks = {}, + GoalFunction = nil, + MissionReportTrigger = 0, + MissionProgressTrigger = 0, + MissionReportShow = false, + MissionReportFlash = false, + MissionTimeInterval = 0, + MissionCoalition = "", + SUCCESS = 1, + FAILED = 2, + REPEAT = 3, + _GoalTasks = {} +} + +--- @type MISSION.Clients +-- @list + +function MISSION:Meta() + + local self = BASE:Inherit( self, BASE:New() ) + self:F() + + return self +end + +--- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. +-- @param string MissionName is the name of the mission. This name will be used to reference the status of each mission by the players. +-- @param string MissionPriority is a string indicating the "priority" of the Mission. f.e. "Primary", "Secondary" or "First", "Second". It is free format and up to the Mission designer to choose. There are no rules behind this field. +-- @param string MissionBriefing is a string indicating the mission briefing to be shown when a player joins a @{CLIENT}. +-- @param string MissionCoalition is a string indicating the coalition or party to which this mission belongs to. It is free format and can be chosen freely by the mission designer. Note that this field is not to be confused with the coalition concept of the ME. Examples of a Mission Coalition could be "NATO", "CCCP", "Intruders", "Terrorists"... +-- @return MISSION +-- @usage +-- -- Declare a few missions. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Patriots', 'Primary', 'Our intelligence reports that 3 Patriot SAM defense batteries are located near Ruisi, Kvarhiti and Gori.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Package Delivery', 'Operational', 'In order to be in full control of the situation, we need you to deliver a very important package at a secret location. Fly undetected through the NATO defenses and deliver the secret package. The secret agent is located at waypoint 4.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue General', 'Tactical', 'Our intelligence has received a remote signal behind Gori. We believe it is a very important Russian General that was captured by Georgia. Go out there and rescue him! Ensure you stay out of the battle zone, keep south. Waypoint 4 is the location of our Russian General.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'SA-6 SAMs', 'Primary', 'Our intelligence reports that 3 SA-6 SAM defense batteries are located near Didmukha, Khetagurov and Berula. Eliminate the Russian SAMs.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Sling Load', 'Operational', 'Fly to the cargo pickup zone at Dzegvi or Kaspi, and sling the cargo to Soganlug airbase.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue secret agent', 'Tactical', 'In order to be in full control of the situation, we need you to rescue a secret agent from the woods behind enemy lines. Avoid the Russian defenses and rescue the agent. Keep south until Khasuri, and keep your eyes open for any SAM presence. The agent is located at waypoint 4 on your kneeboard.', 'NATO' ) +function MISSION:New( MissionName, MissionPriority, MissionBriefing, MissionCoalition ) + + self = MISSION:Meta() + self:T({ MissionName, MissionPriority, MissionBriefing, MissionCoalition }) + + local Valid = true + + Valid = routines.ValidateString( MissionName, "MissionName", Valid ) + Valid = routines.ValidateString( MissionPriority, "MissionPriority", Valid ) + Valid = routines.ValidateString( MissionBriefing, "MissionBriefing", Valid ) + Valid = routines.ValidateString( MissionCoalition, "MissionCoalition", Valid ) + + if Valid then + self.Name = MissionName + self.MissionPriority = MissionPriority + self.MissionBriefing = MissionBriefing + self.MissionCoalition = MissionCoalition + end + + return self +end + +--- Returns if a Mission has completed. +-- @return bool +function MISSION:IsCompleted() + self:F() + return self.MissionStatus == "ACCOMPLISHED" +end + +--- Set a Mission to completed. +function MISSION:Completed() + self:F() + self.MissionStatus = "ACCOMPLISHED" + self:StatusToClients() +end + +--- Returns if a Mission is ongoing. +-- treturn bool +function MISSION:IsOngoing() + self:F() + return self.MissionStatus == "ONGOING" +end + +--- Set a Mission to ongoing. +function MISSION:Ongoing() + self:F() + self.MissionStatus = "ONGOING" + --self:StatusToClients() +end + +--- Returns if a Mission is pending. +-- treturn bool +function MISSION:IsPending() + self:F() + return self.MissionStatus == "PENDING" +end + +--- Set a Mission to pending. +function MISSION:Pending() + self:F() + self.MissionStatus = "PENDING" + self:StatusToClients() +end + +--- Returns if a Mission has failed. +-- treturn bool +function MISSION:IsFailed() + self:F() + return self.MissionStatus == "FAILED" +end + +--- Set a Mission to failed. +function MISSION:Failed() + self:F() + self.MissionStatus = "FAILED" + self:StatusToClients() +end + +--- Send the status of the MISSION to all Clients. +function MISSION:StatusToClients() + self:F() + if self.MissionReportFlash then + for ClientID, Client in pairs( self._Clients ) do + Client:Message( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. '! ( ' .. self.MissionPriority .. ' mission ) ', 10, self.Name .. '/Status', "Mission Command: Mission Status") + end + end +end + +--- Handles the reporting. After certain time intervals, a MISSION report MESSAGE will be shown to All Players. +function MISSION:ReportTrigger() + self:F() + + if self.MissionReportShow == true then + self.MissionReportShow = false + return true + else + if self.MissionReportFlash == true then + if timer.getTime() >= self.MissionReportTrigger then + self.MissionReportTrigger = timer.getTime() + self.MissionTimeInterval + return true + else + return false + end + else + return false + end + end +end + +--- Report the status of all MISSIONs to all active Clients. +function MISSION:ReportToAll() + self:F() + + local AlivePlayers = '' + for ClientID, Client in pairs( self._Clients ) do + if Client:GetDCSGroup() then + if Client:GetClientGroupDCSUnit() then + if Client:GetClientGroupDCSUnit():getLife() > 0.0 then + if AlivePlayers == '' then + AlivePlayers = ' Players: ' .. Client:GetClientGroupDCSUnit():getPlayerName() + else + AlivePlayers = AlivePlayers .. ' / ' .. Client:GetClientGroupDCSUnit():getPlayerName() + end + end + end + end + end + local Tasks = self:GetTasks() + local TaskText = "" + for TaskID, TaskData in pairs( Tasks ) do + TaskText = TaskText .. " - Task " .. TaskID .. ": " .. TaskData.Name .. ": " .. TaskData:GetGoalProgress() .. "\n" + end + MESSAGE:New( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. ' ( ' .. self.MissionPriority .. ' mission )' .. AlivePlayers .. "\n" .. TaskText:gsub("\n$",""), "Mission Command: Mission Report", 10, self.Name .. '/Status'):ToAll() +end + + +--- Add a goal function to a MISSION. Goal functions are called when a @{TASK} within a mission has been completed. +-- @param function GoalFunction is the function defined by the mission designer to evaluate whether a certain goal has been reached after a @{TASK} finishes within the @{MISSION}. A GoalFunction must accept 2 parameters: Mission, Client, which contains the current MISSION object and the current CLIENT object respectively. +-- @usage +-- PatriotActivation = { +-- { "US SAM Patriot Zerti", false }, +-- { "US SAM Patriot Zegduleti", false }, +-- { "US SAM Patriot Gvleti", false } +-- } +-- +-- function DeployPatriotTroopsGoal( Mission, Client ) +-- +-- +-- -- Check if the cargo is all deployed for mission success. +-- for CargoID, CargoData in pairs( Mission._Cargos ) do +-- if Group.getByName( CargoData.CargoGroupName ) then +-- CargoGroup = Group.getByName( CargoData.CargoGroupName ) +-- if CargoGroup then +-- -- Check if the cargo is ready to activate +-- CurrentLandingZoneID = routines.IsUnitInZones( CargoGroup:getUnits()[1], Mission:GetTask( 2 ).LandingZones ) -- The second task is the Deploytask to measure mission success upon +-- if CurrentLandingZoneID then +-- if PatriotActivation[CurrentLandingZoneID][2] == false then +-- -- Now check if this is a new Mission Task to be completed... +-- trigger.action.setGroupAIOn( Group.getByName( PatriotActivation[CurrentLandingZoneID][1] ) ) +-- PatriotActivation[CurrentLandingZoneID][2] = true +-- MessageToBlue( "Mission Command: Message to all airborne units! The " .. PatriotActivation[CurrentLandingZoneID][1] .. " is armed. Our air defenses are now stronger.", 60, "BLUE/PatriotDefense" ) +-- MessageToRed( "Mission Command: Our satellite systems are detecting additional NATO air defenses. To all airborne units: Take care!!!", 60, "RED/PatriotDefense" ) +-- Mission:GetTask( 2 ):AddGoalCompletion( "Patriots activated", PatriotActivation[CurrentLandingZoneID][1], 1 ) -- Register Patriot activation as part of mission goal. +-- end +-- end +-- end +-- end +-- end +-- end +-- +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) +-- Mission:AddGoalFunction( DeployPatriotTroopsGoal ) +function MISSION:AddGoalFunction( GoalFunction ) + self:F() + self.GoalFunction = GoalFunction +end + +--- Register a new @{CLIENT} to participate within the mission. +-- @param CLIENT Client is the @{CLIENT} object. The object must have been instantiated with @{CLIENT:New}. +-- @return CLIENT +-- @usage +-- Add a number of Client objects to the Mission. +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 1', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 3', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 2', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 4', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +function MISSION:AddClient( Client ) + self:F( { Client } ) + + local Valid = true + + if Valid then + self._Clients[Client.ClientName] = Client + end + + return Client +end + +--- Find a @{CLIENT} object within the @{MISSION} by its ClientName. +-- @param CLIENT ClientName is a string defining the Client Group as defined within the ME. +-- @return CLIENT +-- @usage +-- -- Seach for Client "Bomber" within the Mission. +-- local BomberClient = Mission:FindClient( "Bomber" ) +function MISSION:FindClient( ClientName ) + self:F( { self._Clients[ClientName] } ) + return self._Clients[ClientName] +end + + +--- Register a @{TASK} to be completed within the @{MISSION}. Note that there can be multiple @{TASK}s registered to be completed. Each TASK can be set a certain Goal. The MISSION will not be completed until all Goals are reached. +-- @param TASK Task is the @{TASK} object. The object must have been instantiated with @{TASK:New} or any of its inherited @{TASK}s. +-- @param number TaskNumber is the sequence number of the TASK within the MISSION. This number does have to be chronological. +-- @return TASK +-- @usage +-- -- Define a few tasks for the Mission. +-- PickupZones = { "NATO Gold Pickup Zone", "NATO Titan Pickup Zone" } +-- PickupSignalUnits = { "NATO Gold Coordination Center", "NATO Titan Coordination Center" } +-- +-- -- Assign the Pickup Task +-- local PickupTask = PICKUPTASK:New( PickupZones, CARGO_TYPE.ENGINEERS, CLIENT.ONBOARDSIDE.LEFT ) +-- PickupTask:AddSmokeBlue( PickupSignalUnits ) +-- PickupTask:SetGoalTotal( 3 ) +-- Mission:AddTask( PickupTask, 1 ) +-- +-- -- Assign the Deploy Task +-- local PatriotActivationZones = { "US Patriot Battery 1 Activation", "US Patriot Battery 2 Activation", "US Patriot Battery 3 Activation" } +-- local PatriotActivationZonesSmokeUnits = { "US SAM Patriot - Battery 1 Control", "US SAM Patriot - Battery 2 Control", "US SAM Patriot - Battery 3 Control" } +-- local DeployTask = DEPLOYTASK:New( PatriotActivationZones, CARGO_TYPE.ENGINEERS ) +-- --DeployTask:SetCargoTargetZoneName( 'US Troops Attack ' .. math.random(2) ) +-- DeployTask:AddSmokeBlue( PatriotActivationZonesSmokeUnits ) +-- DeployTask:SetGoalTotal( 3 ) +-- DeployTask:SetGoalTotal( 3, "Patriots activated" ) +-- Mission:AddTask( DeployTask, 2 ) + +function MISSION:AddTask( Task, TaskNumber ) + self:F() + + self._Tasks[TaskNumber] = Task + self._Tasks[TaskNumber]:EnableEvents() + self._Tasks[TaskNumber].ID = TaskNumber + + return Task + end + +--- Get the TASK idenified by the TaskNumber from the Mission. This function is useful in GoalFunctions. +-- @param number TaskNumber is the number of the @{TASK} within the @{MISSION}. +-- @return TASK +-- @usage +-- -- Get Task 2 from the Mission. +-- Task2 = Mission:GetTask( 2 ) + +function MISSION:GetTask( TaskNumber ) + self:F() + + local Valid = true + + local Task = nil + + if type(TaskNumber) ~= "number" then + Valid = false + end + + if Valid then + Task = self._Tasks[TaskNumber] + end + + return Task +end + +--- Get all the TASKs from the Mission. This function is useful in GoalFunctions. +-- @return {TASK,...} Structure of TASKS with the @{TASK} number as the key. +-- @usage +-- -- Get Tasks from the Mission. +-- Tasks = Mission:GetTasks() +-- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" ) +function MISSION:GetTasks() + self:F() + + return self._Tasks +end + + +--[[ + _TransportExecuteStage: Defines the different stages of Transport unload/load execution. This table is internal and is used to control the validity of Transport load/unload timing. + + - _TransportExecuteStage.EXECUTING + - _TransportExecuteStage.SUCCESS + - _TransportExecuteStage.FAILED + +--]] +_TransportExecuteStage = { + NONE = 0, + EXECUTING = 1, + SUCCESS = 2, + FAILED = 3 +} + + +--- The MISSIONSCHEDULER is an OBJECT and is the main scheduler of ALL active MISSIONs registered within this scheduler. It's workings are considered internal and is automatically created when the Mission.lua file is included. +-- @type MISSIONSCHEDULER +-- @field #MISSIONSCHEDULER.MISSIONS Missions +MISSIONSCHEDULER = { + Missions = {}, + MissionCount = 0, + TimeIntervalCount = 0, + TimeIntervalShow = 150, + TimeSeconds = 14400, + TimeShow = 5 +} + +--- @type MISSIONSCHEDULER.MISSIONS +-- @list <#MISSION> Mission + +--- This is the main MISSIONSCHEDULER Scheduler function. It is considered internal and is automatically created when the Mission.lua file is included. +function MISSIONSCHEDULER.Scheduler() + + + -- loop through the missions in the TransportTasks + for MissionName, MissionData in pairs( MISSIONSCHEDULER.Missions ) do + + local Mission = MissionData -- #MISSION + + if not Mission:IsCompleted() then + + -- This flag will monitor if for this mission, there are clients alive. If this flag is still false at the end of the loop, the mission status will be set to Pending (if not Failed or Completed). + local ClientsAlive = false + + for ClientID, ClientData in pairs( Mission._Clients ) do + + local Client = ClientData -- Client#CLIENT + + if Client:IsAlive() then + + -- There is at least one Client that is alive... So the Mission status is set to Ongoing. + ClientsAlive = true + + -- If this Client was not registered as Alive before: + -- 1. We register the Client as Alive. + -- 2. We initialize the Client Tasks and make a link to the original Mission Task. + -- 3. We initialize the Cargos. + -- 4. We flag the Mission as Ongoing. + if not Client.ClientAlive then + Client.ClientAlive = true + Client.ClientBriefingShown = false + for TaskNumber, Task in pairs( Mission._Tasks ) do + -- Note that this a deepCopy. Each client must have their own Tasks with own Stages!!! + Client._Tasks[TaskNumber] = routines.utils.deepCopy( Mission._Tasks[TaskNumber] ) + -- Each MissionTask must point to the original Mission. + Client._Tasks[TaskNumber].MissionTask = Mission._Tasks[TaskNumber] + Client._Tasks[TaskNumber].Cargos = Mission._Tasks[TaskNumber].Cargos + Client._Tasks[TaskNumber].LandingZones = Mission._Tasks[TaskNumber].LandingZones + end + + Mission:Ongoing() + end + + + -- For each Client, check for each Task the state and evolve the mission. + -- This flag will indicate if the Task of the Client is Complete. + local TaskComplete = false + + for TaskNumber, Task in pairs( Client._Tasks ) do + + if not Task.Stage then + Task:SetStage( 1 ) + end + + + local TransportTime = timer.getTime() + + if not Task:IsDone() then + + if Task:Goal() then + Task:ShowGoalProgress( Mission, Client ) + end + + --env.info( 'Scheduler: Mission = ' .. Mission.Name .. ' / Client = ' .. Client.ClientName .. ' / Task = ' .. Task.Name .. ' / Stage = ' .. Task.ActiveStage .. ' - ' .. Task.Stage.Name .. ' - ' .. Task.Stage.StageType ) + + -- Action + if Task:StageExecute() then + Task.Stage:Execute( Mission, Client, Task ) + end + + -- Wait until execution is finished + if Task.ExecuteStage == _TransportExecuteStage.EXECUTING then + Task.Stage:Executing( Mission, Client, Task ) + end + + -- Validate completion or reverse to earlier stage + if Task.Time + Task.Stage.WaitTime <= TransportTime then + Task:SetStage( Task.Stage:Validate( Mission, Client, Task ) ) + end + + if Task:IsDone() then + --env.info( 'Scheduler: Mission '.. Mission.Name .. ' Task ' .. Task.Name .. ' Stage ' .. Task.Stage.Name .. ' done. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) + TaskComplete = true -- when a task is not yet completed, a mission cannot be completed + + else + -- break only if this task is not yet done, so that future task are not yet activated. + TaskComplete = false -- when a task is not yet completed, a mission cannot be completed + --env.info( 'Scheduler: Mission "'.. Mission.Name .. '" Task "' .. Task.Name .. '" Stage "' .. Task.Stage.Name .. '" break. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) + break + end + + if TaskComplete then + + if Mission.GoalFunction ~= nil then + Mission.GoalFunction( Mission, Client ) + end + if MISSIONSCHEDULER.Scoring then + MISSIONSCHEDULER.Scoring:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) + end + +-- if not Mission:IsCompleted() then +-- end + end + end + end + + local MissionComplete = true + for TaskNumber, Task in pairs( Mission._Tasks ) do + if Task:Goal() then +-- Task:ShowGoalProgress( Mission, Client ) + if Task:IsGoalReached() then + else + MissionComplete = false + end + else + MissionComplete = false -- If there is no goal, the mission should never be ended. The goal status will be set somewhere else. + end + end + + if MissionComplete then + Mission:Completed() + if MISSIONSCHEDULER.Scoring then + MISSIONSCHEDULER.Scoring:_AddMissionScore( Mission.Name, 100 ) + end + else + if TaskComplete then + -- Reset for new tasking of active client + Client.ClientAlive = false -- Reset the client tasks. + end + end + + + else + if Client.ClientAlive then + env.info( 'Scheduler: Client "' .. Client.ClientName .. '" is inactive.' ) + Client.ClientAlive = false + + -- This is tricky. If we sanitize Client._Tasks before sanitizing Client._Tasks[TaskNumber].MissionTask, then the original MissionTask will be sanitized, and will be lost within the garbage collector. + -- So first sanitize Client._Tasks[TaskNumber].MissionTask, after that, sanitize only the whole _Tasks structure... + --Client._Tasks[TaskNumber].MissionTask = nil + --Client._Tasks = nil + end + end + end + + -- If all Clients of this Mission are not activated, then the Mission status needs to be put back into Pending status. + -- But only if the Mission was Ongoing. In case the Mission is Completed or Failed, the Mission status may not be changed. In these cases, this will be the last run of this Mission in the Scheduler. + if ClientsAlive == false then + if Mission:IsOngoing() then + -- Mission status back to pending... + Mission:Pending() + end + end + end + + Mission:StatusToClients() + + if Mission:ReportTrigger() then + Mission:ReportToAll() + end + end + + return true +end + +--- Start the MISSIONSCHEDULER. +function MISSIONSCHEDULER.Start() + if MISSIONSCHEDULER ~= nil then + --MISSIONSCHEDULER.SchedulerId = routines.scheduleFunction( MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) + MISSIONSCHEDULER.SchedulerId = SCHEDULER:New( nil, MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) + end +end + +--- Stop the MISSIONSCHEDULER. +function MISSIONSCHEDULER.Stop() + if MISSIONSCHEDULER.SchedulerId then + routines.removeFunction(MISSIONSCHEDULER.SchedulerId) + MISSIONSCHEDULER.SchedulerId = nil + end +end + +--- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. +-- @param Mission is the MISSION object instantiated by @{MISSION:New}. +-- @return MISSION +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +function MISSIONSCHEDULER.AddMission( Mission ) + MISSIONSCHEDULER.Missions[Mission.Name] = Mission + MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount + 1 + -- Add an overall AI Client for the AI tasks... This AI Client will facilitate the Events in the background for each Task. + --MissionAdd:AddClient( CLIENT:Register( 'AI' ) ) + + return Mission +end + +--- Remove a MISSION from the MISSIONSCHEDULER. +-- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +-- +-- -- Now remove the Mission. +-- MISSIONSCHEDULER:RemoveMission( 'Russia Transport Troops SA-6' ) +function MISSIONSCHEDULER.RemoveMission( MissionName ) + MISSIONSCHEDULER.Missions[MissionName] = nil + MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount - 1 +end + +--- Find a MISSION within the MISSIONSCHEDULER. +-- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. +-- @return MISSION +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +-- +-- -- Now find the Mission. +-- MissionFind = MISSIONSCHEDULER:FindMission( 'Russia Transport Troops SA-6' ) +function MISSIONSCHEDULER.FindMission( MissionName ) + return MISSIONSCHEDULER.Missions[MissionName] +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsShow( ) + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = true + Mission.MissionReportFlash = false + end +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsFlash( TimeInterval ) + local Count = 0 + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = false + Mission.MissionReportFlash = true + Mission.MissionReportTrigger = timer.getTime() + Count * TimeInterval + Mission.MissionTimeInterval = MISSIONSCHEDULER.MissionCount * TimeInterval + env.info( "TimeInterval = " .. Mission.MissionTimeInterval ) + Count = Count + 1 + end +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsHide( Prm ) + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = false + Mission.MissionReportFlash = false + end +end + +--- Enables a MENU option in the communications menu under F10 to control the status of the active missions. +-- This function should be called only once when starting the MISSIONSCHEDULER. +function MISSIONSCHEDULER.ReportMenu() + local ReportMenu = SUBMENU:New( 'Status' ) + local ReportMenuShow = COMMANDMENU:New( 'Show Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsShow, 0 ) + local ReportMenuFlash = COMMANDMENU:New('Flash Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsFlash, 120 ) + local ReportMenuHide = COMMANDMENU:New( 'Hide Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsHide, 0 ) +end + +--- Show the remaining mission time. +function MISSIONSCHEDULER:TimeShow() + self.TimeIntervalCount = self.TimeIntervalCount + 1 + if self.TimeIntervalCount >= self.TimeTriggerShow then + local TimeMsg = string.format("%00d", ( self.TimeSeconds / 60 ) - ( timer.getTime() / 60 )) .. ' minutes left until mission reload.' + MESSAGE:New( TimeMsg, "Mission time", self.TimeShow, '/TimeMsg' ):ToAll() + self.TimeIntervalCount = 0 + end +end + +function MISSIONSCHEDULER:Time( TimeSeconds, TimeIntervalShow, TimeShow ) + + self.TimeIntervalCount = 0 + self.TimeSeconds = TimeSeconds + self.TimeIntervalShow = TimeIntervalShow + self.TimeShow = TimeShow +end + +--- Adds a mission scoring to the game. +function MISSIONSCHEDULER:Scoring( Scoring ) + + self.Scoring = Scoring +end + +--- The CLEANUP class keeps an area clean of crashing or colliding airplanes. It also prevents airplanes from firing within this area. +-- @module CleanUp +-- @author Flightcontrol + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The CLEANUP class. +-- @type CLEANUP +-- @extends Base#BASE +CLEANUP = { + ClassName = "CLEANUP", + ZoneNames = {}, + TimeInterval = 300, + CleanUpList = {}, +} + +--- Creates the main object which is handling the cleaning of the debris within the given Zone Names. +-- @param #CLEANUP self +-- @param #table ZoneNames Is a table of zone names where the debris should be cleaned. Also a single string can be passed with one zone name. +-- @param #number TimeInterval The interval in seconds when the clean activity takes place. The default is 300 seconds, thus every 5 minutes. +-- @return #CLEANUP +-- @usage +-- -- Clean these Zones. +-- CleanUpAirports = CLEANUP:New( { 'CLEAN Tbilisi', 'CLEAN Kutaisi' }, 150 ) +-- or +-- CleanUpTbilisi = CLEANUP:New( 'CLEAN Tbilisi', 150 ) +-- CleanUpKutaisi = CLEANUP:New( 'CLEAN Kutaisi', 600 ) +function CLEANUP:New( ZoneNames, TimeInterval ) local self = BASE:Inherit( self, BASE:New() ) + self:F( { ZoneNames, TimeInterval } ) + + if type( ZoneNames ) == 'table' then + self.ZoneNames = ZoneNames + else + self.ZoneNames = { ZoneNames } + end + if TimeInterval then + self.TimeInterval = TimeInterval + end + + _EVENTDISPATCHER:OnBirth( self._OnEventBirth, self ) + + --self.CleanUpScheduler = routines.scheduleFunction( self._CleanUpScheduler, { self }, timer.getTime() + 1, TimeInterval ) + self.CleanUpScheduler = SCHEDULER:New( self, self._CleanUpScheduler, {}, 1, TimeInterval ) + + return self +end + + +--- Destroys a group from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSGroup#Group GroupObject The object to be destroyed. +-- @param #string CleanUpGroupName The groupname... +function CLEANUP:_DestroyGroup( GroupObject, CleanUpGroupName ) + self:F( { GroupObject, CleanUpGroupName } ) + + if GroupObject then -- and GroupObject:isExist() then + --MESSAGE:New( "Destroy Group " .. CleanUpGroupName, CleanUpGroupName, 1, CleanUpGroupName ):ToAll() + trigger.action.deactivateGroup(GroupObject) + self:T( { "GroupObject Destroyed", GroupObject } ) + end +end + +--- Destroys a @{DCSUnit#Unit} from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSUnit#Unit CleanUpUnit The object to be destroyed. +-- @param #string CleanUpUnitName The Unit name ... +function CLEANUP:_DestroyUnit( CleanUpUnit, CleanUpUnitName ) + self:F( { CleanUpUnit, CleanUpUnitName } ) + + if CleanUpUnit then + --MESSAGE:New( "Destroy " .. CleanUpUnitName, CleanUpUnitName, 1, CleanUpUnitName ):ToAll() + local CleanUpGroup = Unit.getGroup(CleanUpUnit) + -- TODO Client bug in 1.5.3 + if CleanUpGroup and CleanUpGroup:isExist() then + local CleanUpGroupUnits = CleanUpGroup:getUnits() + if #CleanUpGroupUnits == 1 then + local CleanUpGroupName = CleanUpGroup:getName() + --self:CreateEventCrash( timer.getTime(), CleanUpUnit ) + CleanUpGroup:destroy() + self:T( { "Destroyed Group:", CleanUpGroupName } ) + else + CleanUpUnit:destroy() + self:T( { "Destroyed Unit:", CleanUpUnitName } ) + end + self.CleanUpList[CleanUpUnitName] = nil -- Cleaning from the list + CleanUpUnit = nil + end + end +end + +-- TODO check DCSTypes#Weapon +--- Destroys a missile from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSTypes#Weapon MissileObject +function CLEANUP:_DestroyMissile( MissileObject ) + self:F( { MissileObject } ) + + if MissileObject and MissileObject:isExist() then + MissileObject:destroy() + self:T( "MissileObject Destroyed") + end +end + +function CLEANUP:_OnEventBirth( Event ) + self:F( { Event } ) + + self.CleanUpList[Event.IniDCSUnitName] = {} + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName + + _EVENTDISPATCHER:OnEngineShutDownForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnEngineStartUpForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnHitForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnPilotDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnShotForUnit( Event.IniDCSUnitName, self._EventShot, self ) + + --self:AddEvent( world.event.S_EVENT_ENGINE_SHUTDOWN, self._EventAddForCleanUp ) + --self:AddEvent( world.event.S_EVENT_ENGINE_STARTUP, self._EventAddForCleanUp ) +-- self:AddEvent( world.event.S_EVENT_HIT, self._EventAddForCleanUp ) -- , self._EventHitCleanUp ) +-- self:AddEvent( world.event.S_EVENT_CRASH, self._EventCrash ) -- , self._EventHitCleanUp ) +-- --self:AddEvent( world.event.S_EVENT_DEAD, self._EventCrash ) +-- self:AddEvent( world.event.S_EVENT_SHOT, self._EventShot ) +-- +-- self:EnableEvents() + + +end + +--- Detects if a crash event occurs. +-- Crashed units go into a CleanUpList for removal. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventCrash( Event ) + self:F( { Event } ) + + --TODO: This stuff is not working due to a DCS bug. Burning units cannot be destroyed. + --MESSAGE:New( "Crash ", "Crash", 10, "Crash" ):ToAll() + -- self:T("before getGroup") + -- local _grp = Unit.getGroup(event.initiator)-- Identify the group that fired + -- self:T("after getGroup") + -- _grp:destroy() + -- self:T("after deactivateGroup") + -- event.initiator:destroy() + + self.CleanUpList[Event.IniDCSUnitName] = {} + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName + +end + +--- Detects if a unit shoots a missile. +-- If this occurs within one of the zones, then the weapon used must be destroyed. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventShot( Event ) + self:F( { Event } ) + + -- Test if the missile was fired within one of the CLEANUP.ZoneNames. + local CurrentLandingZoneID = 0 + CurrentLandingZoneID = routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) + if ( CurrentLandingZoneID ) then + -- Okay, the missile was fired within the CLEANUP.ZoneNames, destroy the fired weapon. + --_SEADmissile:destroy() + --routines.scheduleFunction( CLEANUP._DestroyMissile, { self, Event.Weapon }, timer.getTime() + 0.1) + SCHEDULER:New( self, CLEANUP._DestroyMissile, { Event.Weapon }, 0.1 ) + end +end + + +--- Detects if the Unit has an S_EVENT_HIT within the given ZoneNames. If this is the case, destroy the unit. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventHitCleanUp( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then + self:T( { "Life: ", Event.IniDCSUnitName, ' = ', Event.IniDCSUnit:getLife(), "/", Event.IniDCSUnit:getLife0() } ) + if Event.IniDCSUnit:getLife() < Event.IniDCSUnit:getLife0() then + self:T( "CleanUp: Destroy: " .. Event.IniDCSUnitName ) + --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.IniDCSUnit }, timer.getTime() + 0.1) + SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.IniDCSUnit }, 0.1 ) + end + end + end + + if Event.TgtDCSUnit then + if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then + self:T( { "Life: ", Event.TgtDCSUnitName, ' = ', Event.TgtDCSUnit:getLife(), "/", Event.TgtDCSUnit:getLife0() } ) + if Event.TgtDCSUnit:getLife() < Event.TgtDCSUnit:getLife0() then + self:T( "CleanUp: Destroy: " .. Event.TgtDCSUnitName ) + --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.TgtDCSUnit }, timer.getTime() + 0.1 ) + SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.TgtDCSUnit }, 0.1 ) + end + end + end +end + +--- Add the @{DCSUnit#Unit} to the CleanUpList for CleanUp. +function CLEANUP:_AddForCleanUp( CleanUpUnit, CleanUpUnitName ) + self:F( { CleanUpUnit, CleanUpUnitName } ) + + self.CleanUpList[CleanUpUnitName] = {} + self.CleanUpList[CleanUpUnitName].CleanUpUnit = CleanUpUnit + self.CleanUpList[CleanUpUnitName].CleanUpUnitName = CleanUpUnitName + self.CleanUpList[CleanUpUnitName].CleanUpGroup = Unit.getGroup(CleanUpUnit) + self.CleanUpList[CleanUpUnitName].CleanUpGroupName = Unit.getGroup(CleanUpUnit):getName() + self.CleanUpList[CleanUpUnitName].CleanUpTime = timer.getTime() + self.CleanUpList[CleanUpUnitName].CleanUpMoved = false + + self:T( { "CleanUp: Add to CleanUpList: ", Unit.getGroup(CleanUpUnit):getName(), CleanUpUnitName } ) + +end + +--- Detects if the Unit has an S_EVENT_ENGINE_SHUTDOWN or an S_EVENT_HIT within the given ZoneNames. If this is the case, add the Group to the CLEANUP List. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventAddForCleanUp( Event ) + + if Event.IniDCSUnit then + if self.CleanUpList[Event.IniDCSUnitName] == nil then + if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then + self:_AddForCleanUp( Event.IniDCSUnit, Event.IniDCSUnitName ) + end + end + end + + if Event.TgtDCSUnit then + if self.CleanUpList[Event.TgtDCSUnitName] == nil then + if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then + self:_AddForCleanUp( Event.TgtDCSUnit, Event.TgtDCSUnitName ) + end + end + end + +end + +local CleanUpSurfaceTypeText = { + "LAND", + "SHALLOW_WATER", + "WATER", + "ROAD", + "RUNWAY" + } + +--- At the defined time interval, CleanUp the Groups within the CleanUpList. +-- @param #CLEANUP self +function CLEANUP:_CleanUpScheduler() + self:F( { "CleanUp Scheduler" } ) + + local CleanUpCount = 0 + for CleanUpUnitName, UnitData in pairs( self.CleanUpList ) do + CleanUpCount = CleanUpCount + 1 + + self:T( { CleanUpUnitName, UnitData } ) + local CleanUpUnit = Unit.getByName(UnitData.CleanUpUnitName) + local CleanUpGroupName = UnitData.CleanUpGroupName + local CleanUpUnitName = UnitData.CleanUpUnitName + if CleanUpUnit then + self:T( { "CleanUp Scheduler", "Checking:", CleanUpUnitName } ) + if _DATABASE:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then + local CleanUpUnitVec3 = CleanUpUnit:getPoint() + --self:T( CleanUpUnitVec3 ) + local CleanUpUnitVec2 = {} + CleanUpUnitVec2.x = CleanUpUnitVec3.x + CleanUpUnitVec2.y = CleanUpUnitVec3.z + --self:T( CleanUpUnitVec2 ) + local CleanUpSurfaceType = land.getSurfaceType(CleanUpUnitVec2) + --self:T( CleanUpSurfaceType ) + --MESSAGE:New( "Surface " .. CleanUpUnitName .. " = " .. CleanUpSurfaceTypeText[CleanUpSurfaceType], CleanUpUnitName, 10, CleanUpUnitName ):ToAll() + + if CleanUpUnit and CleanUpUnit:getLife() <= CleanUpUnit:getLife0() * 0.95 then + if CleanUpSurfaceType == land.SurfaceType.RUNWAY then + if CleanUpUnit:inAir() then + local CleanUpLandHeight = land.getHeight(CleanUpUnitVec2) + local CleanUpUnitHeight = CleanUpUnitVec3.y - CleanUpLandHeight + self:T( { "CleanUp Scheduler", "Height = " .. CleanUpUnitHeight } ) + if CleanUpUnitHeight < 30 then + self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because below safe height and damaged." } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + else + self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because on runway and damaged." } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + end + end + -- Clean Units which are waiting for a very long time in the CleanUpZone. + if CleanUpUnit then + local CleanUpUnitVelocity = CleanUpUnit:getVelocity() + local CleanUpUnitVelocityTotal = math.abs(CleanUpUnitVelocity.x) + math.abs(CleanUpUnitVelocity.y) + math.abs(CleanUpUnitVelocity.z) + if CleanUpUnitVelocityTotal < 1 then + if UnitData.CleanUpMoved then + if UnitData.CleanUpTime + 180 <= timer.getTime() then + self:T( { "CleanUp Scheduler", "Destroy due to not moving anymore " .. CleanUpUnitName } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + end + else + UnitData.CleanUpTime = timer.getTime() + UnitData.CleanUpMoved = true + --MESSAGE:New( "Moved " .. CleanUpUnitName, CleanUpUnitName, 10, CleanUpUnitName ):ToAll() + end + end + + else + -- Do nothing ... + self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE + end + else + self:T( "CleanUp: Group " .. CleanUpUnitName .. " cannot be found in DCS RTE, removing ..." ) + self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE + end + end + self:T(CleanUpCount) + + return true +end + +--- Dynamic spawning of groups (and units). +-- +-- @{#SPAWN} class +-- =============== +-- The @{#SPAWN} class allows to spawn dynamically new groups, based on pre-defined initialization settings, modifying the behaviour when groups are spawned. +-- For each group to be spawned, within the mission editor, a group has to be created with the "late activation flag" set. We call this group the *"Spawn Template"* of the SPAWN object. +-- A reference to this Spawn Template needs to be provided when constructing the SPAWN object, by indicating the name of the group within the mission editor in the constructor methods. +-- +-- Within the SPAWN object, there is an internal index that keeps track of which group from the internal group list was spawned. +-- When new groups get spawned by using the SPAWN functions (see below), it will be validated whether the Limits (@{#SPAWN.Limit}) of the SPAWN object are not reached. +-- When all is valid, a new group will be created by the spawning methods, and the internal index will be increased with 1. +-- +-- Regarding the name of new spawned groups, a _SpawnPrefix_ will be assigned for each new group created. +-- If you want to have the Spawn Template name to be used as the _SpawnPrefix_ name, use the @{#SPAWN.New} constructor. +-- However, when the @{#SPAWN.NewWithAlias} constructor was used, the Alias name will define the _SpawnPrefix_ name. +-- Groups will follow the following naming structure when spawned at run-time: +-- +-- 1. Spawned groups will have the name _SpawnPrefix_#ggg, where ggg is a counter from 0 to 999. +-- 2. Spawned units will have the name _SpawnPrefix_#ggg-uu, where uu is a counter from 0 to 99 for each new spawned unit belonging to the group. +-- +-- Some additional notes that need to be remembered: +-- +-- * Templates are actually groups defined within the mission editor, with the flag "Late Activation" set. As such, these groups are never used within the mission, but are used by the @{#SPAWN} module. +-- * It is important to defined BEFORE you spawn new groups, a proper initialization of the SPAWN instance is done with the options you want to use. +-- * When designing a mission, NEVER name groups using a "#" within the name of the group Spawn Template(s), or the SPAWN module logic won't work anymore. +-- +-- SPAWN construction methods: +-- =========================== +-- Create a new SPAWN object with the @{#SPAWN.New} or the @{#SPAWN.NewWithAlias} methods: +-- +-- * @{#SPAWN.New}: Creates a new SPAWN object taking the name of the group that functions as the Template. +-- +-- It is important to understand how the SPAWN class works internally. The SPAWN object created will contain internally a list of groups that will be spawned and that are already spawned. +-- The initialization functions will modify this list of groups so that when a group gets spawned, ALL information is already prepared when spawning. This is done for performance reasons. +-- So in principle, the group list will contain all parameters and configurations after initialization, and when groups get actually spawned, this spawning can be done quickly and efficient. +-- +-- SPAWN initialization methods: +-- ============================= +-- A spawn object will behave differently based on the usage of initialization methods: +-- +-- * @{#SPAWN.Limit}: Limits the amount of groups that can be alive at the same time and that can be dynamically spawned. +-- * @{#SPAWN.RandomizeRoute}: Randomize the routes of spawned groups. +-- * @{#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.InitRepeat}: Re-spawn groups when they land at the home base. Similar functions are @{#SPAWN.InitRepeatOnLanding} and @{#SPAWN.InitRepeatOnEngineShutDown}. +-- +-- SPAWN spawning methods: +-- ======================= +-- Groups can be spawned at different times and methods: +-- +-- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index. +-- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index. +-- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively. +-- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}. +-- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}. +-- +-- Note that @{#SPAWN.Spawn} and @{#SPAWN.ReSpawn} return a @{GROUP#GROUP.New} object, that contains a reference to the DCSGroup object. +-- You can use the @{GROUP} object to do further actions with the DCSGroup. +-- +-- SPAWN object cleaning: +-- ========================= +-- Sometimes, it will occur during a mission run-time, that ground or especially air objects get damaged, and will while being damged stop their activities, while remaining alive. +-- In such cases, the SPAWN object will just sit there and wait until that group gets destroyed, but most of the time it won't, +-- and it may occur that no new groups are or can be spawned as limits are reached. +-- To prevent this, a @{#SPAWN.CleanUp} initialization method has been defined that will silently monitor the status of each spawned group. +-- Once a group has a velocity = 0, and has been waiting for a defined interval, that group will be cleaned or removed from run-time. +-- There is a catch however :-) If a damaged group has returned to an airbase within the coalition, that group will not be considered as "lost"... +-- In such a case, when the inactive group is cleaned, a new group will Re-spawned automatically. +-- This models AI that has succesfully returned to their airbase, to restart their combat activities. +-- Check the @{#SPAWN.CleanUp} for further info. +-- +-- ==== +-- @module Spawn +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Group" ) +Include.File( "Zone" ) +Include.File( "Event" ) +Include.File( "Scheduler" ) + +--- SPAWN Class +-- @type SPAWN +-- @extends Base#BASE +-- @field ClassName +-- @field #string SpawnTemplatePrefix +-- @field #string SpawnAliasPrefix +SPAWN = { + ClassName = "SPAWN", + SpawnTemplatePrefix = nil, + SpawnAliasPrefix = nil, +} + + + +--- Creates the main object to spawn a GROUP defined in the DCS ME. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. Each new group will have the name starting with SpawnTemplatePrefix. +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ) +-- @usage local Plane = SPAWN:New( "Plane" ) -- Creates a new local variable that can initiate new planes with the name "Plane#ddd" using the template "Plane" as defined within the ME. +function SPAWN:New( SpawnTemplatePrefix ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { SpawnTemplatePrefix } ) + + local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) + if TemplateGroup then + self.SpawnTemplatePrefix = SpawnTemplatePrefix + self.SpawnIndex = 0 + self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. + self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! + self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. + self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. + self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. + self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. + self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. + + self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. + else + error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) + end + + return self +end + +--- Creates a new SPAWN instance to create new groups based on the defined template and using a new alias for each new group. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. +-- @param #string SpawnAliasPrefix is the name that will be given to the Group at runtime. +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- Spawn_BE_KA50 = SPAWN:NewWithAlias( 'BE KA-50@RAMP-Ground Defense', 'Helicopter Attacking a City' ) +-- @usage local PlaneWithAlias = SPAWN:NewWithAlias( "Plane", "Bomber" ) -- Creates a new local variable that can instantiate new planes with the name "Bomber#ddd" using the template "Plane" as defined within the ME. +function SPAWN:NewWithAlias( SpawnTemplatePrefix, SpawnAliasPrefix ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { SpawnTemplatePrefix, SpawnAliasPrefix } ) + + local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) + if TemplateGroup then + self.SpawnTemplatePrefix = SpawnTemplatePrefix + self.SpawnAliasPrefix = SpawnAliasPrefix + self.SpawnIndex = 0 + self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. + self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! + self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. + self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. + self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. + self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. + self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. + + self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. + else + error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) + end + + return self +end + + +--- Limits the Maximum amount of Units that can be alive at the same time, and the maximum amount of groups that can be spawned. +-- Note that this method is exceptionally important to balance the performance of the mission. Depending on the machine etc, a mission can only process a maximum amount of units. +-- If the time interval must be short, but there should not be more Units or Groups alive than a maximum amount of units, then this function should be used... +-- When a @{#SPAWN.New} is executed and the limit of the amount of units alive is reached, then no new spawn will happen of the group, until some of these units of the spawn object will be destroyed. +-- @param #SPAWN self +-- @param #number SpawnMaxUnitsAlive The maximum amount of units that can be alive at runtime. +-- @param #number SpawnMaxGroups The maximum amount of groups that can be spawned. When the limit is reached, then no more actual spawns will happen of the group. +-- This parameter is useful to define a maximum amount of airplanes, ground troops, helicopters, ships etc within a supply area. +-- This parameter accepts the value 0, which defines that there are no maximum group limits, but there are limits on the maximum of units that can be alive at the same time. +-- @return #SPAWN self +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- This helicopter group consists of one Unit. So, this group will SPAWN maximum 2 groups simultaneously within the DCSRTE. +-- -- There will be maximum 24 groups spawned during the whole mission lifetime. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Limit( 2, 24 ) +function SPAWN:Limit( SpawnMaxUnitsAlive, SpawnMaxGroups ) + self:F( { self.SpawnTemplatePrefix, SpawnMaxUnitsAlive, SpawnMaxGroups } ) + + self.SpawnMaxUnitsAlive = SpawnMaxUnitsAlive -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = SpawnMaxGroups -- The maximum amount of groups that can be spawned. + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:_InitializeSpawnGroups( SpawnGroupID ) + end + + return self +end + + +--- Randomizes the defined route of the SpawnTemplatePrefix group in the ME. This is very useful to define extra variation of the behaviour of groups. +-- @param #SPAWN self +-- @param #number SpawnStartPoint is the waypoint where the randomization begins. +-- Note that the StartPoint = 0 equaling the point where the group is spawned. +-- @param #number SpawnEndPoint is the waypoint where the randomization ends counting backwards. +-- This parameter is useful to avoid randomization to end at a waypoint earlier than the last waypoint on the route. +-- @param #number SpawnRadius is the radius in meters in which the randomization of the new waypoints, with the original waypoint of the original template located in the middle ... +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- The KA-50 has waypoints Start point ( =0 or SP ), 1, 2, 3, 4, End point (= 5 or DP). +-- -- Waypoints 2 and 3 will only be randomized. The others will remain on their original position with each new spawn of the helicopter. +-- -- The randomization of waypoint 2 and 3 will take place within a radius of 2000 meters. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):RandomizeRoute( 2, 2, 2000 ) +function SPAWN:RandomizeRoute( SpawnStartPoint, SpawnEndPoint, SpawnRadius ) + self:F( { self.SpawnTemplatePrefix, SpawnStartPoint, SpawnEndPoint, SpawnRadius } ) + + self.SpawnRandomizeRoute = true + self.SpawnRandomizeRouteStartPoint = SpawnStartPoint + self.SpawnRandomizeRouteEndPoint = SpawnEndPoint + self.SpawnRandomizeRouteRadius = SpawnRadius + + for GroupID = 1, self.SpawnMaxGroups do + self:_RandomizeRoute( GroupID ) + end + + return self +end + + +--- This function is rather complicated to understand. But I'll try to explain. +-- This function becomes useful when you need to spawn groups with random templates of groups defined within the mission editor, +-- but they will all follow the same Template route and have the same prefix name. +-- In other words, this method randomizes between a defined set of groups the template to be used for each new spawn of a group. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefixTable A table with the names of the groups defined within the mission editor, from which one will be choosen when a new group will be spawned. +-- @return #SPAWN +-- @usage +-- -- NATO Tank Platoons invading Gori. +-- -- Choose between 13 different 'US Tank Platoon' configurations for each new SPAWN the Group to be spawned for the +-- -- 'US Tank Platoon Left', 'US Tank Platoon Middle' and 'US Tank Platoon Right' SpawnTemplatePrefixes. +-- -- Each new SPAWN will randomize the route, with a defined time interval of 200 seconds with 40% time variation (randomization) and +-- -- with a limit set of maximum 12 Units alive simulteneously and 150 Groups to be spawned during the whole mission. +-- Spawn_US_Platoon = { 'US Tank Platoon 1', 'US Tank Platoon 2', 'US Tank Platoon 3', 'US Tank Platoon 4', 'US Tank Platoon 5', +-- 'US Tank Platoon 6', 'US Tank Platoon 7', 'US Tank Platoon 8', 'US Tank Platoon 9', 'US Tank Platoon 10', +-- 'US Tank Platoon 11', 'US Tank Platoon 12', 'US Tank Platoon 13' } +-- Spawn_US_Platoon_Left = SPAWN:New( 'US Tank Platoon Left' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +-- Spawn_US_Platoon_Middle = SPAWN:New( 'US Tank Platoon Middle' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +-- Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +function SPAWN:RandomizeTemplate( SpawnTemplatePrefixTable ) + self:F( { self.SpawnTemplatePrefix, SpawnTemplatePrefixTable } ) + + self.SpawnTemplatePrefixTable = SpawnTemplatePrefixTable + self.SpawnRandomizeTemplate = true + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:_RandomizeTemplate( SpawnGroupID ) + end + + return self +end + + + + + +--- 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 ... +-- @param #SPAWN self +-- @return #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() +function SPAWN:InitRepeat() + self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) + + self.Repeat = true + self.RepeatOnEngineShutDown = false + self.RepeatOnLanding = true + + return self +end + +--- Respawn group after landing. +-- @param #SPAWN self +-- @return #SPAWN self +function SPAWN:InitRepeatOnLanding() + self:F( { self.SpawnTemplatePrefix } ) + + self:InitRepeat() + self.RepeatOnEngineShutDown = false + self.RepeatOnLanding = true + + return self +end + + +--- Respawn after landing when its engines have shut down. +-- @param #SPAWN self +-- @return #SPAWN self +function SPAWN:InitRepeatOnEngineShutDown() + self:F( { self.SpawnTemplatePrefix } ) + + self:InitRepeat() + self.RepeatOnEngineShutDown = true + self.RepeatOnLanding = false + + return self +end + + +--- CleanUp groups when they are still alive, but inactive. +-- When groups are still alive and have become inactive due to damage and are unable to contribute anything, then this group will be removed at defined intervals in seconds. +-- @param #SPAWN self +-- @param #string SpawnCleanUpInterval The interval to check for inactive groups within seconds. +-- @return #SPAWN self +-- @usage Spawn_Helicopter:CleanUp( 20 ) -- CleanUp the spawning of the helicopters every 20 seconds when they become inactive. +function SPAWN:CleanUp( SpawnCleanUpInterval ) + self:F( { self.SpawnTemplatePrefix, SpawnCleanUpInterval } ) + + self.SpawnCleanUpInterval = SpawnCleanUpInterval + self.SpawnCleanUpTimeStamps = {} + --self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval ) + self.CleanUpScheduler = SCHEDULER:New( self, self._SpawnCleanUpScheduler, {}, 1, SpawnCleanUpInterval, 0.2 ) + return self +end + + + +--- Makes the groups visible before start (like a batallion). +-- The method will take the position of the group as the first position in the array. +-- @param #SPAWN self +-- @param #number SpawnAngle The angle in degrees how the groups and each unit of the group will be positioned. +-- @param #number SpawnWidth The amount of Groups that will be positioned on the X axis. +-- @param #number SpawnDeltaX The space between each Group on the X-axis. +-- @param #number SpawnDeltaY The space between each Group on the Y-axis. +-- @return #SPAWN self +-- @usage +-- -- Define an array of Groups. +-- Spawn_BE_Ground = SPAWN:New( 'BE Ground' ):Limit( 2, 24 ):Visible( 90, "Diamond", 10, 100, 50 ) +function SPAWN:Array( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) + self:F( { self.SpawnTemplatePrefix, SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY } ) + + self.SpawnVisible = true -- When the first Spawn executes, all the Groups need to be made visible before start. + + local SpawnX = 0 + local SpawnY = 0 + local SpawnXIndex = 0 + local SpawnYIndex = 0 + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:T( { SpawnX, SpawnY, SpawnXIndex, SpawnYIndex } ) + + self.SpawnGroups[SpawnGroupID].Visible = true + self.SpawnGroups[SpawnGroupID].Spawned = false + + SpawnXIndex = SpawnXIndex + 1 + if SpawnWidth and SpawnWidth ~= 0 then + if SpawnXIndex >= SpawnWidth then + SpawnXIndex = 0 + SpawnYIndex = SpawnYIndex + 1 + end + end + + local SpawnRootX = self.SpawnGroups[SpawnGroupID].SpawnTemplate.x + local SpawnRootY = self.SpawnGroups[SpawnGroupID].SpawnTemplate.y + + self:_TranslateRotate( SpawnGroupID, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) + + self.SpawnGroups[SpawnGroupID].SpawnTemplate.lateActivation = true + self.SpawnGroups[SpawnGroupID].SpawnTemplate.visible = true + + self.SpawnGroups[SpawnGroupID].Visible = true + + _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnBirth, self ) + _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) + + if self.Repeat then + _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnTakeOff, self ) + _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnLand, self ) + end + if self.RepeatOnEngineShutDown then + _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnEngineShutDown, self ) + end + + self.SpawnGroups[SpawnGroupID].Group = _DATABASE:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) + + SpawnX = SpawnXIndex * SpawnDeltaX + SpawnY = SpawnYIndex * SpawnDeltaY + end + + return self +end + + + +--- Will spawn a group based on the internal index. +-- Note: Uses @{DATABASE} module defined in MOOSE. +-- @param #SPAWN self +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:Spawn() + self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) + + return self:SpawnWithIndex( self.SpawnIndex + 1 ) +end + +--- Will re-spawn a group based on a given index. +-- Note: Uses @{DATABASE} module defined in MOOSE. +-- @param #SPAWN self +-- @param #string SpawnIndex The index of the group to be spawned. +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:ReSpawn( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + if not SpawnIndex then + SpawnIndex = 1 + end + +-- TODO: This logic makes DCS crash and i don't know why (yet). + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup then + local SpawnDCSGroup = SpawnGroup:GetDCSGroup() + if SpawnDCSGroup then + SpawnGroup:Destroy() + end + end + + return self:SpawnWithIndex( SpawnIndex ) +end + +--- Will spawn a group with a specified index number. +-- Uses @{DATABASE} global object defined in MOOSE. +-- @param #SPAWN self +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:SpawnWithIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups } ) + + if self:_GetSpawnIndex( SpawnIndex ) then + + if self.SpawnGroups[self.SpawnIndex].Visible then + self.SpawnGroups[self.SpawnIndex].Group:Activate() + else + self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnBirth, self ) + _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) + + if self.Repeat then + _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnTakeOff, self ) + _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnLand, self ) + end + if self.RepeatOnEngineShutDown then + _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) + end + + self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + + self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + + -- If there is a SpawnFunction hook defined, call it. + if self.SpawnFunctionHook then + self.SpawnFunctionHook( self.SpawnGroups[self.SpawnIndex].Group, unpack( self.SpawnFunctionArguments ) ) + end + -- TODO: Need to fix this by putting an "R" in the name of the group when the group repeats. + --if self.Repeat then + -- _DATABASE:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) + --end + end + + self.SpawnGroups[self.SpawnIndex].Spawned = true + return self.SpawnGroups[self.SpawnIndex].Group + else + --self:E( { self.SpawnTemplatePrefix, "No more Groups to Spawn:", SpawnIndex, self.SpawnMaxGroups } ) + end + + return nil +end + +--- Spawns new groups at varying time intervals. +-- This is useful if you want to have continuity within your missions of certain (AI) groups to be present (alive) within your missions. +-- @param #SPAWN self +-- @param #number SpawnTime The time interval defined in seconds between each new spawn of new groups. +-- @param #number SpawnTimeVariation The variation to be applied on the defined time interval between each new spawn. +-- The variation is a number between 0 and 1, representing the %-tage of variation to be applied on the time interval. +-- @return #SPAWN self +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- The time interval is set to SPAWN new helicopters between each 600 seconds, with a time variation of 50%. +-- -- The time variation in this case will be between 450 seconds and 750 seconds. +-- -- This is calculated as follows: +-- -- Low limit: 600 * ( 1 - 0.5 / 2 ) = 450 +-- -- High limit: 600 * ( 1 + 0.5 / 2 ) = 750 +-- -- Between these two values, a random amount of seconds will be choosen for each new spawn of the helicopters. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) +function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation ) + self:F( { SpawnTime, SpawnTimeVariation } ) + + if SpawnTime ~= nil and SpawnTimeVariation ~= nil then + self.SpawnScheduler = SCHEDULER:New( self, self._Scheduler, {}, 1, SpawnTime, SpawnTimeVariation ) + end + + return self +end + +--- Will re-start the spawning scheduler. +-- Note: This function is only required to be called when the schedule was stopped. +function SPAWN:SpawnScheduleStart() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnScheduler:Start() +end + +--- Will stop the scheduled spawning scheduler. +function SPAWN:SpawnScheduleStop() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnScheduler:Stop() +end + + +--- Allows to place a CallFunction hook when a new group spawns. +-- The provided function will be called when a new group is spawned, including its given parameters. +-- The first parameter of the SpawnFunction is the @{Group#GROUP} that was spawned. +-- @param #SPAWN self +-- @param #function SpawnFunctionHook The function to be called when a group spawns. +-- @param SpawnFunctionArguments A random amount of arguments to be provided to the function when the group spawns. +-- @return #SPAWN +function SPAWN:SpawnFunction( SpawnFunctionHook, ... ) + self:F( SpawnFunction ) + + self.SpawnFunctionHook = SpawnFunctionHook + self.SpawnFunctionArguments = {} + if arg then + self.SpawnFunctionArguments = arg + end + + return self +end + + + + +--- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone. +-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. +-- You can use the returned group to further define the route to be followed. +-- @param #SPAWN self +-- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group. +-- @param #number OuterRadius The outer radius in meters where the new group will be spawned. +-- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned. +-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. +-- @return Group#GROUP that was spawned. +-- @return #nil Nothing was spawned. +function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } ) + + if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then + + if SpawnIndex then + else + SpawnIndex = self.SpawnIndex + 1 + end + + if self:_GetSpawnIndex( SpawnIndex ) then + + local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate + + if SpawnTemplate then + + local UnitPoint = HostUnit:GetPointVec2() + + self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } ) + + --for PointID, Point in pairs( SpawnTemplate.route.points ) do + --Point.x = UnitPoint.x + --Point.y = UnitPoint.y + --Point.alt = nil + --Point.alt_type = nil + --end + + SpawnTemplate.route.points[1].x = UnitPoint.x + SpawnTemplate.route.points[1].y = UnitPoint.y + + if not InnerRadius then + InnerRadius = 10 + end + + if not OuterRadius then + OuterRadius = 50 + end + + -- Apply SpawnFormation + for UnitID = 1, #SpawnTemplate.units do + if InnerRadius == 0 then + SpawnTemplate.units[UnitID].x = UnitPoint.x + SpawnTemplate.units[UnitID].y = UnitPoint.y + else + local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) + SpawnTemplate.units[UnitID].x = CirclePos.x + SpawnTemplate.units[UnitID].y = CirclePos.y + end + self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) + end + + local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) + local Point = {} + Point.type = "Turning Point" + Point.x = SpawnPos.x + Point.y = SpawnPos.y + Point.action = "Cone" + Point.speed = 5 + + table.insert( SpawnTemplate.route.points, 2, Point ) + + return self:SpawnWithIndex( self.SpawnIndex ) + end + end + end + + return nil +end + +--- Will spawn a Group within a given @{Zone#ZONE}. +-- Once the group is spawned within the zone, it will continue on its route. +-- The first waypoint (where the group is spawned) is replaced with the zone coordinates. +-- @param #SPAWN self +-- @param Zone#ZONE Zone The zone where the group is to be spawned. +-- @param #number ZoneRandomize (Optional) Set to true if you want to randomize the starting point in the zone. +-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. +-- @return Group#GROUP that was spawned. +-- @return #nil when nothing was spawned. +function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } ) + + if Zone then + + if SpawnIndex then + else + SpawnIndex = self.SpawnIndex + 1 + end + + if self:_GetSpawnIndex( SpawnIndex ) then + + local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate + + if SpawnTemplate then + + local ZonePoint + + if ZoneRandomize == true then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + SpawnTemplate.route.points[1].x = ZonePoint.x + SpawnTemplate.route.points[1].y = ZonePoint.y + + -- Apply SpawnFormation + for UnitID = 1, #SpawnTemplate.units do + local ZonePointUnit = Zone:GetRandomPointVec2() + SpawnTemplate.units[UnitID].x = ZonePointUnit.x + SpawnTemplate.units[UnitID].y = ZonePointUnit.y + self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) + end + + return self:SpawnWithIndex( self.SpawnIndex ) + end + end + end + + return nil +end + + + + +--- Will spawn a plane group in uncontrolled mode... +-- This will be similar to the uncontrolled flag setting in the ME. +-- @return #SPAWN self +function SPAWN:UnControlled() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnUnControlled = true + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self.SpawnGroups[SpawnGroupID].UnControlled = true + end + + return self +end + + + +--- Will return the SpawnGroupName either with with a specific count number or without any count. +-- @param #SPAWN self +-- @param #number SpawnIndex Is the number of the Group that is to be spawned. +-- @return #string SpawnGroupName +function SPAWN:SpawnGroupName( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + local SpawnPrefix = self.SpawnTemplatePrefix + if self.SpawnAliasPrefix then + SpawnPrefix = self.SpawnAliasPrefix + end + + if SpawnIndex then + local SpawnName = string.format( '%s#%03d', SpawnPrefix, SpawnIndex ) + self:T( SpawnName ) + return SpawnName + else + self:T( SpawnPrefix ) + return SpawnPrefix + end + +end + +--- Find the first alive group. +-- @param #SPAWN self +-- @param #number SpawnCursor A number holding the index from where to find the first group from. +-- @return Group#GROUP, #number The group found, the new index where the group was found. +-- @return #nil, #nil When no group is found, #nil is returned. +function SPAWN:GetFirstAliveGroup( SpawnCursor ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) + + for SpawnIndex = 1, self.SpawnCount do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + SpawnCursor = SpawnIndex + return SpawnGroup, SpawnCursor + end + end + + return nil, nil +end + + +--- Find the next alive group. +-- @param #SPAWN self +-- @param #number SpawnCursor A number holding the last found previous index. +-- @return Group#GROUP, #number The group found, the new index where the group was found. +-- @return #nil, #nil When no group is found, #nil is returned. +function SPAWN:GetNextAliveGroup( SpawnCursor ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) + + SpawnCursor = SpawnCursor + 1 + for SpawnIndex = SpawnCursor, self.SpawnCount do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + SpawnCursor = SpawnIndex + return SpawnGroup, SpawnCursor + end + end + + return nil, nil +end + +--- Find the last alive group during runtime. +function SPAWN:GetLastAliveGroup() + self:F( { self.SpawnTemplatePrefixself.SpawnAliasPrefix } ) + + self.SpawnIndex = self:_GetLastIndex() + for SpawnIndex = self.SpawnIndex, 1, -1 do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + self.SpawnIndex = SpawnIndex + return SpawnGroup + end + end + + self.SpawnIndex = nil + return nil +end + + + +--- Get the group from an index. +-- Returns the group from the SpawnGroups list. +-- If no index is given, it will return the first group in the list. +-- @param #SPAWN self +-- @param #number SpawnIndex The index of the group to return. +-- @return Group#GROUP +function SPAWN:GetGroupFromIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) + + if not SpawnIndex then + SpawnIndex = 1 + end + + if self.SpawnGroups and self.SpawnGroups[SpawnIndex] then + local SpawnGroup = self.SpawnGroups[SpawnIndex].Group + return SpawnGroup + else + return nil + end +end + +--- Get the group index from a DCSUnit. +-- The method will search for a #-mark, and will return the index behind the #-mark of the DCSUnit. +-- It will return nil of no prefix was found. +-- @param #SPAWN self +-- @param DCSUnit The DCS unit to be searched. +-- @return #string The prefix +-- @return #nil Nothing found +function SPAWN:_GetGroupIndexFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit and DCSUnit:getName() then + local IndexString = string.match( DCSUnit:getName(), "#.*-" ):sub( 2, -2 ) + self:T( IndexString ) + + if IndexString then + local Index = tonumber( IndexString ) + self:T( { "Index:", IndexString, Index } ) + return Index + end + end + + return nil +end + +--- Return the prefix of a DCSUnit. +-- The method will search for a #-mark, and will return the text before the #-mark. +-- It will return nil of no prefix was found. +-- @param #SPAWN self +-- @param DCSUnit The DCS unit to be searched. +-- @return #string The prefix +-- @return #nil Nothing found +function SPAWN:_GetPrefixFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit and DCSUnit:getName() then + local SpawnPrefix = string.match( DCSUnit:getName(), ".*#" ) + if SpawnPrefix then + SpawnPrefix = SpawnPrefix:sub( 1, -2 ) + end + self:T( SpawnPrefix ) + return SpawnPrefix + end + + return nil +end + +--- Return the group within the SpawnGroups collection with input a DCSUnit. +function SPAWN:_GetGroupFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit then + local SpawnPrefix = self:_GetPrefixFromDCSUnit( DCSUnit ) + + if self.SpawnTemplatePrefix == SpawnPrefix or ( self.SpawnAliasPrefix and self.SpawnAliasPrefix == SpawnPrefix ) then + local SpawnGroupIndex = self:_GetGroupIndexFromDCSUnit( DCSUnit ) + local SpawnGroup = self.SpawnGroups[SpawnGroupIndex].Group + self:T( SpawnGroup ) + return SpawnGroup + end + end + + return nil +end + + +--- Get the index from a given group. +-- The function will search the name of the group for a #, and will return the number behind the #-mark. +function SPAWN:GetSpawnIndexFromGroup( SpawnGroup ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnGroup } ) + + local IndexString = string.match( SpawnGroup:GetName(), "#.*$" ):sub( 2 ) + local Index = tonumber( IndexString ) + + self:T( IndexString, Index ) + return Index + +end + +--- Return the last maximum index that can be used. +function SPAWN:_GetLastIndex() + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) + + return self.SpawnMaxGroups +end + +--- Initalize the SpawnGroups collection. +function SPAWN:_InitializeSpawnGroups( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) + + if not self.SpawnGroups[SpawnIndex] then + self.SpawnGroups[SpawnIndex] = {} + self.SpawnGroups[SpawnIndex].Visible = false + self.SpawnGroups[SpawnIndex].Spawned = false + self.SpawnGroups[SpawnIndex].UnControlled = false + self.SpawnGroups[SpawnIndex].SpawnTime = 0 + + self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefix + self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) + end + + self:_RandomizeTemplate( SpawnIndex ) + self:_RandomizeRoute( SpawnIndex ) + --self:_TranslateRotate( SpawnIndex ) + + return self.SpawnGroups[SpawnIndex] +end + + + +--- Gets the CategoryID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCategoryID( SpawnPrefix ) + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + return TemplateGroup:getCategory() + else + return nil + end +end + +--- Gets the CoalitionID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCoalitionID( SpawnPrefix ) + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + return TemplateGroup:getCoalition() + else + return nil + end +end + +--- Gets the CountryID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCountryID( SpawnPrefix ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnPrefix } ) + + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + local TemplateUnits = TemplateGroup:getUnits() + return TemplateUnits[1]:getCountry() + else + return nil + end +end + +--- Gets the Group Template from the ME environment definition. +-- This method used the @{DATABASE} object, which contains ALL initial and new spawned object in MOOSE. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix +-- @return @SPAWN self +function SPAWN:_GetTemplate( SpawnTemplatePrefix ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnTemplatePrefix } ) + + local SpawnTemplate = nil + + SpawnTemplate = routines.utils.deepCopy( _DATABASE.Templates.Groups[SpawnTemplatePrefix].Template ) + + if SpawnTemplate == nil then + error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) + end + + SpawnTemplate.SpawnCoalitionID = self:_GetGroupCoalitionID( SpawnTemplatePrefix ) + SpawnTemplate.SpawnCategoryID = self:_GetGroupCategoryID( SpawnTemplatePrefix ) + SpawnTemplate.SpawnCountryID = self:_GetGroupCountryID( SpawnTemplatePrefix ) + + self:T( { SpawnTemplate } ) + return SpawnTemplate +end + +--- Prepares the new Group Template. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix +-- @param #number SpawnIndex +-- @return #SPAWN self +function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) + + local SpawnTemplate = self:_GetTemplate( SpawnTemplatePrefix ) + SpawnTemplate.name = self:SpawnGroupName( SpawnIndex ) + + SpawnTemplate.groupId = nil + SpawnTemplate.lateActivation = false + + if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then + self:T( "For ground units, visible needs to be false..." ) + SpawnTemplate.visible = false + end + + if SpawnTemplate.SpawnCategoryID == Group.Category.HELICOPTER or SpawnTemplate.SpawnCategoryID == Group.Category.AIRPLANE then + SpawnTemplate.uncontrolled = false + end + + for UnitID = 1, #SpawnTemplate.units do + SpawnTemplate.units[UnitID].name = string.format( SpawnTemplate.name .. '-%02d', UnitID ) + SpawnTemplate.units[UnitID].unitId = nil + SpawnTemplate.units[UnitID].x = SpawnTemplate.route.points[1].x + SpawnTemplate.units[UnitID].y = SpawnTemplate.route.points[1].y + end + + self:T( { "Template:", SpawnTemplate } ) + return SpawnTemplate + +end + +--- Private method randomizing the routes. +-- @param #SPAWN self +-- @param #number SpawnIndex The index of the group to be spawned. +-- @return #SPAWN +function SPAWN:_RandomizeRoute( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnRandomizeRoute, self.SpawnRandomizeRouteStartPoint, self.SpawnRandomizeRouteEndPoint, self.SpawnRandomizeRouteRadius } ) + + if self.SpawnRandomizeRoute then + local SpawnTemplate = self.SpawnGroups[SpawnIndex].SpawnTemplate + local RouteCount = #SpawnTemplate.route.points + + for t = self.SpawnRandomizeRouteStartPoint + 1, ( RouteCount - self.SpawnRandomizeRouteEndPoint ) do + SpawnTemplate.route.points[t].x = SpawnTemplate.route.points[t].x + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) + SpawnTemplate.route.points[t].y = SpawnTemplate.route.points[t].y + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) + -- TODO: manage altitude for airborne units ... + SpawnTemplate.route.points[t].alt = nil + --SpawnGroup.route.points[t].alt_type = nil + self:T( 'SpawnTemplate.route.points[' .. t .. '].x = ' .. SpawnTemplate.route.points[t].x .. ', SpawnTemplate.route.points[' .. t .. '].y = ' .. SpawnTemplate.route.points[t].y ) + end + end + + return self +end + +--- Private method that randomizes the template of the group. +-- @param #SPAWN self +-- @param #number SpawnIndex +-- @return #SPAWN self +function SPAWN:_RandomizeTemplate( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + if self.SpawnRandomizeTemplate then + self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefixTable[ math.random( 1, #self.SpawnTemplatePrefixTable ) ] + self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) + self.SpawnGroups[SpawnIndex].SpawnTemplate.route = routines.utils.deepCopy( self.SpawnTemplate.route ) + 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 + for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading + end + end + + self:_RandomizeRoute( SpawnIndex ) + + return self +end + +function SPAWN:_TranslateRotate( SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle } ) + + -- Translate + local TranslatedX = SpawnX + local TranslatedY = SpawnY + + -- Rotate + -- From Wikipedia: https://en.wikipedia.org/wiki/Rotation_matrix#Common_rotations + -- x' = x \cos \theta - y \sin \theta\ + -- y' = x \sin \theta + y \cos \theta\ + local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) + + TranslatedY * math.sin( math.rad( SpawnAngle ) ) + local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) + + TranslatedY * math.cos( math.rad( SpawnAngle ) ) + + -- Assign + self.SpawnGroups[SpawnIndex].SpawnTemplate.x = SpawnRootX - RotatedX + self.SpawnGroups[SpawnIndex].SpawnTemplate.y = SpawnRootY + RotatedY + + + local SpawnUnitCount = table.getn( self.SpawnGroups[SpawnIndex].SpawnTemplate.units ) + for u = 1, SpawnUnitCount do + + -- Translate + local TranslatedX = SpawnX + local TranslatedY = SpawnY - 10 * ( u - 1 ) + + -- Rotate + local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) + + TranslatedY * math.sin( math.rad( SpawnAngle ) ) + local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) + + TranslatedY * math.cos( math.rad( SpawnAngle ) ) + + -- Assign + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].x = SpawnRootX - RotatedX + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].y = SpawnRootY + RotatedY + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading = self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading + math.rad( SpawnAngle ) + end + + return self +end + +--- Get the next index of the groups to be spawned. This function is complicated, as it is used at several spaces. +function SPAWN:_GetSpawnIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive, self.AliveUnits, #self.SpawnTemplate.units } ) + + + if ( self.SpawnMaxGroups == 0 ) or ( SpawnIndex <= self.SpawnMaxGroups ) then + if ( self.SpawnMaxUnitsAlive == 0 ) or ( self.AliveUnits < self.SpawnMaxUnitsAlive * #self.SpawnTemplate.units ) or self.UnControlled then + if SpawnIndex and SpawnIndex >= self.SpawnCount + 1 then + self.SpawnCount = self.SpawnCount + 1 + SpawnIndex = self.SpawnCount + end + self.SpawnIndex = SpawnIndex + if not self.SpawnGroups[self.SpawnIndex] then + self:_InitializeSpawnGroups( self.SpawnIndex ) + end + else + return nil + end + else + return nil + end + + return self.SpawnIndex +end + + +-- TODO Need to delete this... _DATABASE does this now ... +function SPAWN:_OnBirth( event ) + + if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if event.initiator and event.initiator:getName() then + local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) + if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then + self:T( { "Birth event: " .. event.initiator:getName(), event } ) + --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " spawned." , 5, EventPrefix .. '/Event') + self.AliveUnits = self.AliveUnits + 1 + self:T( "Alive Units: " .. self.AliveUnits ) + end + end + end + +end + +--- Obscolete +-- @todo Need to delete this... _DATABASE does this now ... +function SPAWN:_OnDeadOrCrash( event ) + self:F( self.SpawnTemplatePrefix, event ) + + if event.initiator and event.initiator:getName() then + local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) + if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then + self:T( { "Dead event: " .. event.initiator:getName(), event } ) +-- local DestroyedUnit = Unit.getByName( EventPrefix ) +-- if DestroyedUnit and DestroyedUnit.getLife() <= 1.0 then + --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " crashed." , 5, EventPrefix .. '/Event') + self.AliveUnits = self.AliveUnits - 1 + self:T( "Alive Units: " .. self.AliveUnits ) +-- end + end + end +end + +--- Will detect AIR Units taking off... When the event takes place, the spawned Group is registered as airborne... +-- This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups. +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnTakeOff( event ) + self:F( self.SpawnTemplatePrefix, event ) + + if event.initiator and event.initiator:getName() then + local SpawnGroup = self:_GetGroupFromDCSUnit( event.initiator ) + if SpawnGroup then + self:T( { "TakeOff event: " .. event.initiator:getName(), event } ) + self:T( "self.Landed = false" ) + self.Landed = false + end + end +end + +--- Will detect AIR Units landing... When the event takes place, the spawned Group is registered as landed. +-- This is needed to ensure that Re-SPAWNing is only done for landed AIR Groups. +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnLand( event ) + self:F( self.SpawnTemplatePrefix, event ) + + local SpawnUnit = event.initiator + if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then + local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) + if SpawnGroup then + self:T( { "Landed event:" .. SpawnUnit:getName(), event } ) + self.Landed = true + self:T( "self.Landed = true" ) + if self.Landed and self.RepeatOnLanding then + local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) + self:T( { "Landed:", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + self:ReSpawn( SpawnGroupIndex ) + end + end + end +end + +--- Will detect AIR Units shutting down their engines ... +-- When the event takes place, and the method @{RepeatOnEngineShutDown} was called, the spawned Group will Re-SPAWN. +-- But only when the Unit was registered to have landed. +-- @param #SPAWN self +-- @see _OnTakeOff +-- @see _OnLand +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnEngineShutDown( event ) + self:F( self.SpawnTemplatePrefix, event ) + + local SpawnUnit = event.initiator + if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then + local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) + if SpawnGroup then + self:T( { "EngineShutDown event: " .. SpawnUnit:getName(), event } ) + if self.Landed and self.RepeatOnEngineShutDown then + local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) + self:T( { "EngineShutDown: ", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + self:ReSpawn( SpawnGroupIndex ) + end + end + end +end + +--- This function is called automatically by the Spawning scheduler. +-- It is the internal worker method SPAWNing new Groups on the defined time intervals. +function SPAWN:_Scheduler() + self:F( { "_Scheduler", self.SpawnTemplatePrefix, self.SpawnAliasPrefix, self.SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive } ) + + -- Validate if there are still groups left in the batch... + self:Spawn() + + return true +end + +function SPAWN:_SpawnCleanUpScheduler() + self:F( { "CleanUp Scheduler:", self.SpawnTemplatePrefix } ) + + local SpawnCursor + local SpawnGroup, SpawnCursor = self:GetFirstAliveGroup( SpawnCursor ) + + self:T( { "CleanUp Scheduler:", SpawnGroup } ) + + while SpawnGroup do + + if SpawnGroup:AllOnGround() and SpawnGroup:GetMaxVelocity() < 1 then + if not self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] then + self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = timer.getTime() + else + if self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] + self.SpawnCleanUpInterval < timer.getTime() then + self:T( { "CleanUp Scheduler:", "Cleaning:", SpawnGroup } ) + SpawnGroup:Destroy() + end + end + else + self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = nil + end + + SpawnGroup, SpawnCursor = self:GetNextAliveGroup( SpawnCursor ) + + self:T( { "CleanUp Scheduler:", SpawnGroup } ) + + end + + return true -- Repeat + +end +--- Limit the simultaneous movement of Groups within a running Mission. +-- This module is defined to improve the performance in missions, and to bring additional realism for GROUND vehicles. +-- Performance: If in a DCSRTE there are a lot of moving GROUND units, then in a multi player mission, this WILL create lag if +-- the main DCS execution core of your CPU is fully utilized. So, this class will limit the amount of simultaneous moving GROUND units +-- on defined intervals (currently every minute). +-- @module MOVEMENT + +Include.File( "Routines" ) + +--- the MOVEMENT class +-- @type +MOVEMENT = { + ClassName = "MOVEMENT", +} + +--- Creates the main object which is handling the GROUND forces movement. +-- @param table{string,...}|string MovePrefixes is a table of the Prefixes (names) of the GROUND Groups that need to be controlled by the MOVEMENT Object. +-- @param number MoveMaximum is a number that defines the maximum amount of GROUND Units to be moving during one minute. +-- @return MOVEMENT +-- @usage +-- -- Limit the amount of simultaneous moving units on the ground to prevent lag. +-- Movement_US_Platoons = MOVEMENT:New( { 'US Tank Platoon Left', 'US Tank Platoon Middle', 'US Tank Platoon Right', 'US CH-47D Troops' }, 15 ) + +function MOVEMENT:New( MovePrefixes, MoveMaximum ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MovePrefixes, MoveMaximum } ) + + if type( MovePrefixes ) == 'table' then + self.MovePrefixes = MovePrefixes + else + self.MovePrefixes = { MovePrefixes } + end + self.MoveCount = 0 -- The internal counter of the amount of Moveing the has happened since MoveStart. + self.MoveMaximum = MoveMaximum -- Contains the Maximum amount of units that are allowed to move... + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.MoveUnits = {} -- Reflects if the Moving for this MovePrefixes is going to be scheduled or not. + + _EVENTDISPATCHER:OnBirth( self.OnBirth, self ) + +-- self:AddEvent( world.event.S_EVENT_BIRTH, self.OnBirth ) +-- +-- self:EnableEvents() + + self:ScheduleStart() + + return self +end + +--- Call this function to start the MOVEMENT scheduling. +function MOVEMENT:ScheduleStart() + self:F() + --self.MoveFunction = routines.scheduleFunction( self._Scheduler, { self }, timer.getTime() + 1, 120 ) + self.MoveFunction = SCHEDULER:New( self, self._Scheduler, {}, 1, 120 ) +end + +--- Call this function to stop the MOVEMENT scheduling. +-- @todo need to implement it ... Forgot. +function MOVEMENT:ScheduleStop() + self:F() + +end + +--- Captures the birth events when new Units were spawned. +-- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. +function MOVEMENT:OnBirth( Event ) + self:F( { Event } ) + + if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if Event.IniDCSUnit then + self:T( "Birth object : " .. Event.IniDCSUnitName ) + if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then + for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do + if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then + self.AliveUnits = self.AliveUnits + 1 + self.MoveUnits[Event.IniDCSUnitName] = Event.IniDCSGroupName + self:T( self.AliveUnits ) + end + end + end + end + _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) + end + +end + +--- Captures the Dead or Crash events when Units crash or are destroyed. +-- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. +function MOVEMENT:OnDeadOrCrash( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + self:T( "Dead object : " .. Event.IniDCSUnitName ) + for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do + if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then + self.AliveUnits = self.AliveUnits - 1 + self.MoveUnits[Event.IniDCSUnitName] = nil + self:T( self.AliveUnits ) + end + end + end +end + +--- This function is called automatically by the MOVEMENT scheduler. A new function is scheduled when MoveScheduled is true. +function MOVEMENT:_Scheduler() + self:F( { self.MovePrefixes, self.MoveMaximum, self.AliveUnits, self.MovementGroups } ) + + if self.AliveUnits > 0 then + local MoveProbability = ( self.MoveMaximum * 100 ) / self.AliveUnits + self:T( 'Move Probability = ' .. MoveProbability ) + + for MovementUnitName, MovementGroupName in pairs( self.MoveUnits ) do + local MovementGroup = Group.getByName( MovementGroupName ) + if MovementGroup and MovementGroup:isExist() then + local MoveOrStop = math.random( 1, 100 ) + self:T( 'MoveOrStop = ' .. MoveOrStop ) + if MoveOrStop <= MoveProbability then + self:T( 'Group continues moving = ' .. MovementGroupName ) + trigger.action.groupContinueMoving( MovementGroup ) + else + self:T( 'Group stops moving = ' .. MovementGroupName ) + trigger.action.groupStopMoving( MovementGroup ) + end + else + self.MoveUnits[MovementUnitName] = nil + end + end + end + return true +end +--- Provides defensive behaviour to a set of SAM sites within a running Mission. +-- @module Sead +-- @author to be searched on the forum +-- @author (co) Flightcontrol (Modified and enriched with functionality) + +Include.File( "Routines" ) +Include.File( "Event" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The SEAD class +-- @type SEAD +-- @extends Base#BASE +SEAD = { + ClassName = "SEAD", + TargetSkill = { + Average = { Evade = 50, DelayOff = { 10, 25 }, DelayOn = { 10, 30 } } , + Good = { Evade = 30, DelayOff = { 8, 20 }, DelayOn = { 20, 40 } } , + High = { Evade = 15, DelayOff = { 5, 17 }, DelayOn = { 30, 50 } } , + Excellent = { Evade = 10, DelayOff = { 3, 10 }, DelayOn = { 30, 60 } } + }, + SEADGroupPrefixes = {} +} + +--- Creates the main object which is handling defensive actions for SA sites or moving SA vehicles. +-- When an anti radiation missile is fired (KH-58, KH-31P, KH-31A, KH-25MPU, HARM missiles), the SA will shut down their radars and will take evasive actions... +-- Chances are big that the missile will miss. +-- @param table{string,...}|string SEADGroupPrefixes which is a table of Prefixes of the SA Groups in the DCSRTE on which evasive actions need to be taken. +-- @return SEAD +-- @usage +-- -- CCCP SEAD Defenses +-- -- Defends the Russian SA installations from SEAD attacks. +-- SEAD_RU_SAM_Defenses = SEAD:New( { 'RU SA-6 Kub', 'RU SA-6 Defenses', 'RU MI-26 Troops', 'RU Attack Gori' } ) +function SEAD:New( SEADGroupPrefixes ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( SEADGroupPrefixes ) + if type( SEADGroupPrefixes ) == 'table' then + for SEADGroupPrefixID, SEADGroupPrefix in pairs( SEADGroupPrefixes ) do + self.SEADGroupPrefixes[SEADGroupPrefix] = SEADGroupPrefix + end + else + self.SEADGroupNames[SEADGroupPrefixes] = SEADGroupPrefixes + end + _EVENTDISPATCHER:OnShot( self.EventShot, self ) + + return self +end + +--- 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. +-- @see SEAD +function SEAD:EventShot( Event ) + self:F( { Event } ) + + local SEADUnit = Event.IniDCSUnit + local SEADUnitName = Event.IniDCSUnitName + local SEADWeapon = Event.Weapon -- Identify the weapon fired + local SEADWeaponName = Event.WeaponName -- return weapon type + --trigger.action.outText( string.format("Alerte, depart missile " ..string.format(SEADWeaponName)), 20) --debug message + -- Start of the 2nd loop + self:T( "Missile Launched = " .. SEADWeaponName ) + if SEADWeaponName == "KH-58" or SEADWeaponName == "KH-25MPU" or SEADWeaponName == "AGM-88" or SEADWeaponName == "KH-31A" or SEADWeaponName == "KH-31P" then -- Check if the missile is a SEAD + local _evade = math.random (1,100) -- random number for chance of evading action + local _targetMim = Event.Weapon:getTarget() -- Identify target + local _targetMimname = Unit.getName(_targetMim) + local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) + local _targetMimgroupName = _targetMimgroup:getName() + local _targetMimcont= _targetMimgroup:getController() + local _targetskill = _DATABASE.Templates.Units[_targetMimname].Template.skill + self:T( self.SEADGroupPrefixes ) + self:T( _targetMimgroupName ) + local SEADGroupFound = false + for SEADGroupPrefixID, SEADGroupPrefix in pairs( self.SEADGroupPrefixes ) do + if string.find( _targetMimgroupName, SEADGroupPrefix, 1, true ) then + SEADGroupFound = true + self:T( 'Group Found' ) + break + end + end + if SEADGroupFound == true then + if _targetskill == "Random" then -- when skill is random, choose a skill + local Skills = { "Average", "Good", "High", "Excellent" } + _targetskill = Skills[ math.random(1,4) ] + end + self:T( _targetskill ) -- debug message for skill check + if self.TargetSkill[_targetskill] then + if (_evade > self.TargetSkill[_targetskill].Evade) then + self:T( string.format("Evading, target skill " ..string.format(_targetskill)) ) --debug message + local _targetMim = Weapon.getTarget(SEADWeapon) + local _targetMimname = Unit.getName(_targetMim) + local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) + local _targetMimcont= _targetMimgroup:getController() + routines.groupRandomDistSelf(_targetMimgroup,300,'Diamond',250,20) -- move randomly + local SuppressedGroups1 = {} -- unit suppressed radar off for a random time + local function SuppressionEnd1(id) + id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) + SuppressedGroups1[id.groupName] = nil + end + local id = { + groupName = _targetMimgroup, + ctrl = _targetMimcont + } + local delay1 = math.random(self.TargetSkill[_targetskill].DelayOff[1], self.TargetSkill[_targetskill].DelayOff[2]) + if SuppressedGroups1[id.groupName] == nil then + SuppressedGroups1[id.groupName] = { + SuppressionEndTime1 = timer.getTime() + delay1, + SuppressionEndN1 = SuppressionEndCounter1 --Store instance of SuppressionEnd() scheduled function + } + Controller.setOption(_targetMimcont, AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) + timer.scheduleFunction(SuppressionEnd1, id, SuppressedGroups1[id.groupName].SuppressionEndTime1) --Schedule the SuppressionEnd() function + --trigger.action.outText( string.format("Radar Off " ..string.format(delay1)), 20) + end + + local SuppressedGroups = {} + local function SuppressionEnd(id) + id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.RED) + SuppressedGroups[id.groupName] = nil + end + local id = { + groupName = _targetMimgroup, + ctrl = _targetMimcont + } + local delay = math.random(self.TargetSkill[_targetskill].DelayOn[1], self.TargetSkill[_targetskill].DelayOn[2]) + if SuppressedGroups[id.groupName] == nil then + SuppressedGroups[id.groupName] = { + SuppressionEndTime = timer.getTime() + delay, + SuppressionEndN = SuppressionEndCounter --Store instance of SuppressionEnd() scheduled function + } + timer.scheduleFunction(SuppressionEnd, id, SuppressedGroups[id.groupName].SuppressionEndTime) --Schedule the SuppressionEnd() function + --trigger.action.outText( string.format("Radar On " ..string.format(delay)), 20) + end + end + end + end + end +end +--- Taking the lead of AI escorting your flight. +-- +-- @{#ESCORT} class +-- ================ +-- The @{#ESCORT} class allows you to interact with escorting AI on your flight and take the lead. +-- Each escorting group can be commanded with a whole set of radio commands (radio menu in your flight, and then F10). +-- +-- The radio commands will vary according the category of the group. The richest set of commands are with Helicopters and AirPlanes. +-- Ships and Ground troops will have a more limited set, but they can provide support through the bombing of targets designated by the other escorts. +-- +-- RADIO MENUs that can be created: +-- ================================ +-- Find a summary below of the current available commands: +-- +-- Navigation ...: +-- --------------- +-- Escort group navigation functions: +-- +-- * **"Join-Up and Follow at x meters":** The escort group fill follow you at about x meters, and they will follow you. +-- * **"Flare":** Provides menu commands to let the escort group shoot a flare in the air in a color. +-- * **"Smoke":** Provides menu commands to let the escort group smoke the air in a color. Note that smoking is only available for ground and naval troops. +-- +-- Hold position ...: +-- ------------------ +-- Escort group navigation functions: +-- +-- * **"At current location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. +-- * **"At client location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. +-- +-- Report targets ...: +-- ------------------- +-- Report targets will make the escort group to report any target that it identifies within a 8km range. Any detected target can be attacked using the 4. Attack nearby targets function. (see below). +-- +-- * **"Report now":** Will report the current detected targets. +-- * **"Report targets on":** Will make the escort group to report detected targets and will fill the "Attack nearby targets" menu list. +-- * **"Report targets off":** Will stop detecting targets. +-- +-- Scan targets ...: +-- ----------------- +-- Menu items to pop-up the escort group for target scanning. After scanning, the escort group will resume with the mission or defined task. +-- +-- * **"Scan targets 30 seconds":** Scan 30 seconds for targets. +-- * **"Scan targets 60 seconds":** Scan 60 seconds for targets. +-- +-- Attack targets ...: +-- ------------------- +-- This menu item will list all detected targets within a 15km range. Depending on the level of detection (known/unknown) and visuality, the targets type will also be listed. +-- +-- Request assistance from ...: +-- ---------------------------- +-- This menu item will list all detected targets within a 15km range, as with the menu item **Attack Targets**. +-- This menu item allows to request attack support from other escorts supporting the current client group. +-- eg. the function allows a player to request support from the Ship escort to attack a target identified by the Plane escort with its Tomahawk missiles. +-- eg. the function allows a player to request support from other Planes escorting to bomb the unit with illumination missiles or bombs, so that the main plane escort can attack the area. +-- +-- ROE ...: +-- -------- +-- Sets the Rules of Engagement (ROE) of the escort group when in flight. +-- +-- * **"Hold Fire":** The escort group will hold fire. +-- * **"Return Fire":** The escort group will return fire. +-- * **"Open Fire":** The escort group will open fire on designated targets. +-- * **"Weapon Free":** The escort group will engage with any target. +-- +-- Evasion ...: +-- ------------ +-- Will define the evasion techniques that the escort group will perform during flight or combat. +-- +-- * **"Fight until death":** The escort group will have no reaction to threats. +-- * **"Use flares, chaff and jammers":** The escort group will use passive defense using flares and jammers. No evasive manoeuvres are executed. +-- * **"Evade enemy fire":** The rescort group will evade enemy fire before firing. +-- * **"Go below radar and evade fire":** The escort group will perform evasive vertical manoeuvres. +-- +-- Resume Mission ...: +-- ------------------- +-- Escort groups can have their own mission. This menu item will allow the escort group to resume their Mission from a given waypoint. +-- Note that this is really fantastic, as you now have the dynamic of taking control of the escort groups, and allowing them to resume their path or mission. +-- +-- ESCORT construction methods. +-- ============================ +-- Create a new SPAWN object with the @{#ESCORT.New} method: +-- +-- * @{#ESCORT.New}: Creates a new ESCORT object from a @{Group#GROUP} for a @{Client#CLIENT}, with an optional briefing text. +-- +-- ESCORT initialization methods. +-- ============================== +-- The following menus are created within the RADIO MENU of an active unit hosted by a player: +-- +-- * @{#ESCORT.MenuFollowAt}: Creates a menu to make the escort follow the client. +-- * @{#ESCORT.MenuHoldAtEscortPosition}: Creates a menu to hold the escort at its current position. +-- * @{#ESCORT.MenuHoldAtLeaderPosition}: Creates a menu to hold the escort at the client position. +-- * @{#ESCORT.MenuScanForTargets}: Creates a menu so that the escort scans targets. +-- * @{#ESCORT.MenuFlare}: Creates a menu to disperse flares. +-- * @{#ESCORT.MenuSmoke}: Creates a menu to disparse smoke. +-- * @{#ESCORT.MenuReportTargets}: Creates a menu so that the escort reports targets. +-- * @{#ESCORT.MenuReportPosition}: Creates a menu so that the escort reports its current position from bullseye. +-- * @{#ESCORT.MenuAssistedAttack: Creates a menu so that the escort supportes assisted attack from other escorts with the client. +-- * @{#ESCORT.MenuROE: Creates a menu structure to set the rules of engagement of the escort. +-- * @{#ESCORT.MenuEvasion: Creates a menu structure to set the evasion techniques when the escort is under threat. +-- * @{#ESCORT.MenuResumeMission}: Creates a menu structure so that the escort can resume from a waypoint. +-- +-- @module Escort +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Group" ) +Include.File( "Zone" ) + +--- +-- @type ESCORT +-- @extends Base#BASE +-- @field Client#CLIENT EscortClient +-- @field Group#GROUP EscortGroup +-- @field #string EscortName +-- @field #ESCORT.MODE EscortMode The mode the escort is in. +-- @field #number FollowScheduler The id of the _FollowScheduler function. +-- @field #boolean ReportTargets If true, nearby targets are reported. +-- @Field DCSTypes#AI.Option.Air.val.ROE OptionROE Which ROE is set to the EscortGroup. +-- @field DCSTypes#AI.Option.Air.val.REACTION_ON_THREAT OptionReactionOnThreat Which REACTION_ON_THREAT is set to the EscortGroup. +-- @field Menu#MENU_CLIENT EscortMenuResumeMission +ESCORT = { + ClassName = "ESCORT", + EscortName = nil, -- The Escort Name + EscortClient = nil, + EscortGroup = nil, + EscortMode = nil, + MODE = { + FOLLOW = 1, + MISSION = 2, + }, + Targets = {}, -- The identified targets + FollowScheduler = nil, + ReportTargets = true, + OptionROE = AI.Option.Air.val.ROE.OPEN_FIRE, + OptionReactionOnThreat = AI.Option.Air.val.REACTION_ON_THREAT.ALLOW_ABORT_MISSION, + TaskPoints = {} +} + +--- ESCORT.Mode class +-- @type ESCORT.MODE +-- @field #number FOLLOW +-- @field #number MISSION + +--- MENUPARAM type +-- @type MENUPARAM +-- @field #ESCORT ParamSelf +-- @field #Distance ParamDistance +-- @field #function ParamFunction +-- @field #string ParamMessage + +--- ESCORT class constructor for an AI group +-- @param #ESCORT self +-- @param Client#CLIENT EscortClient The client escorted by the EscortGroup. +-- @param Group#GROUP EscortGroup The group AI escorting the EscortClient. +-- @param #string EscortName Name of the escort. +-- @return #ESCORT self +function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { EscortClient, EscortGroup, EscortName } ) + + self.EscortClient = EscortClient -- Client#CLIENT + self.EscortGroup = EscortGroup -- Group#GROUP + self.EscortName = EscortName + self.EscortBriefing = EscortBriefing + + self:T( EscortGroup:GetClassNameAndID() ) + + -- Set EscortGroup known at EscortClient. + if not self.EscortClient._EscortGroups then + self.EscortClient._EscortGroups = {} + end + + if not self.EscortClient._EscortGroups[EscortGroup:GetName()] then + self.EscortClient._EscortGroups[EscortGroup:GetName()] = {} + self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortGroup = self.EscortGroup + self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortName = self.EscortName + self.EscortClient._EscortGroups[EscortGroup:GetName()].Targets = {} + self.EscortMode = ESCORT.MODE.FOLLOW + end + + + self.EscortMenu = MENU_CLIENT:New( self.EscortClient, self.EscortName ) + + self.EscortGroup:WayPointInitialize(1) + + self.EscortGroup:OptionROTVertical() + self.EscortGroup:OptionROEOpenFire() + + EscortGroup:MessageToClient( EscortGroup:GetCategoryName() .. " '" .. EscortName .. "' (" .. EscortGroup:GetCallsign() .. ") reporting! " .. + "We're escorting your flight. " .. + "Use the Radio Menu and F10 and use the options under + " .. EscortName .. "\n", + 60, EscortClient + ) + + return self +end + + +--- Defines the default menus +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:Menus() + self:F() + + self:MenuFollowAt( 100 ) + self:MenuFollowAt( 200 ) + self:MenuFollowAt( 300 ) + self:MenuFollowAt( 400 ) + + self:MenuScanForTargets( 100, 60 ) + + self:MenuHoldAtEscortPosition( 30 ) + self:MenuHoldAtLeaderPosition( 30 ) + + self:MenuFlare() + self:MenuSmoke() + + self:MenuReportTargets( 60 ) + self:MenuAssistedAttack() + self:MenuROE() + self:MenuEvasion() + self:MenuResumeMission() + + return self +end + + + +--- Defines a menu slot to let the escort Join and Follow you at a certain distance. +-- This menu will appear under **Navigation**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Distance The distance in meters that the escort needs to follow the client. +-- @return #ESCORT +function ESCORT:MenuFollowAt( Distance ) + self:F(Distance) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + if not self.EscortMenuJoinUpAndFollow then + self.EscortMenuJoinUpAndFollow = {} + end + + self.EscortMenuJoinUpAndFollow[#self.EscortMenuJoinUpAndFollow+1] = MENU_CLIENT_COMMAND:New( self.EscortClient, "Join-Up and Follow at " .. Distance, self.EscortMenuReportNavigation, ESCORT._JoinUpAndFollow, { ParamSelf = self, ParamDistance = Distance } ) + + self.EscortMode = ESCORT.MODE.FOLLOW + end + + return self +end + +--- Defines a menu slot to let the escort hold at their current position and stay low with a specified height during a specified time in seconds. +-- This menu will appear under **Hold position**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +-- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. +function ESCORT:MenuHoldAtEscortPosition( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + + if not self.EscortMenuHold then + self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) + end + + if not Height then + Height = 30 + end + + if not Seconds then + Seconds = 0 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "Hold at %d meter", Height ) + else + MenuText = string.format( "Hold at %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuHoldPosition then + self.EscortMenuHoldPosition = {} + end + + self.EscortMenuHoldPosition[#self.EscortMenuHoldPosition+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuHold, + ESCORT._HoldPosition, + { ParamSelf = self, + ParamOrbitGroup = self.EscortGroup, + ParamHeight = Height, + ParamSeconds = Seconds + } + ) + end + + return self +end + + +--- Defines a menu slot to let the escort hold at the client position and stay low with a specified height during a specified time in seconds. +-- This menu will appear under **Navigation**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +-- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. +function ESCORT:MenuHoldAtLeaderPosition( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + + if not self.EscortMenuHold then + self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) + end + + if not Height then + Height = 30 + end + + if not Seconds then + Seconds = 0 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "Rejoin and hold at %d meter", Height ) + else + MenuText = string.format( "Rejoin and hold at %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuHoldAtLeaderPosition then + self.EscortMenuHoldAtLeaderPosition = {} + end + + self.EscortMenuHoldAtLeaderPosition[#self.EscortMenuHoldAtLeaderPosition+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuHold, + ESCORT._HoldPosition, + { ParamSelf = self, + ParamOrbitGroup = self.EscortClient, + ParamHeight = Height, + ParamSeconds = Seconds + } + ) + end + + return self +end + +--- Defines a menu slot to let the escort scan for targets at a certain height for a certain time in seconds. +-- This menu will appear under **Scan targets**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuScanForTargets( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuScan then + self.EscortMenuScan = MENU_CLIENT:New( self.EscortClient, "Scan for targets", self.EscortMenu ) + end + + if not Height then + Height = 100 + end + + if not Seconds then + Seconds = 30 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "At %d meter", Height ) + else + MenuText = string.format( "At %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuScanForTargets then + self.EscortMenuScanForTargets = {} + end + + self.EscortMenuScanForTargets[#self.EscortMenuScanForTargets+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuScan, + ESCORT._ScanTargets, + { ParamSelf = self, + ParamScanDuration = 30 + } + ) + end + + return self +end + + + +--- Defines a menu slot to let the escort disperse a flare in a certain color. +-- This menu will appear under **Navigation**. +-- The flare will be fired from the first unit in the group. +-- @param #ESCORT self +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuFlare( MenuTextFormat ) + self:F() + + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + local MenuText = "" + if not MenuTextFormat then + MenuText = "Flare" + else + MenuText = MenuTextFormat + end + + if not self.EscortMenuFlare then + self.EscortMenuFlare = MENU_CLIENT:New( self.EscortClient, MenuText, self.EscortMenuReportNavigation, ESCORT._Flare, { ParamSelf = self } ) + self.EscortMenuFlareGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Green, ParamMessage = "Released a green flare!" } ) + self.EscortMenuFlareRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Red, ParamMessage = "Released a red flare!" } ) + self.EscortMenuFlareWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.White, ParamMessage = "Released a white flare!" } ) + self.EscortMenuFlareYellow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release yellow flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Yellow, ParamMessage = "Released a yellow flare!" } ) + end + + return self +end + +--- Defines a menu slot to let the escort disperse a smoke in a certain color. +-- This menu will appear under **Navigation**. +-- Note that smoke menu options will only be displayed for ships and ground units. Not for air units. +-- The smoke will be fired from the first unit in the group. +-- @param #ESCORT self +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuSmoke( MenuTextFormat ) + self:F() + + if not self.EscortGroup:IsAir() then + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + local MenuText = "" + if not MenuTextFormat then + MenuText = "Smoke" + else + MenuText = MenuTextFormat + end + + if not self.EscortMenuSmoke then + self.EscortMenuSmoke = MENU_CLIENT:New( self.EscortClient, "Smoke", self.EscortMenuReportNavigation, ESCORT._Smoke, { ParamSelf = self } ) + self.EscortMenuSmokeGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Green, ParamMessage = "Releasing green smoke!" } ) + self.EscortMenuSmokeRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Red, ParamMessage = "Releasing red smoke!" } ) + self.EscortMenuSmokeWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.White, ParamMessage = "Releasing white smoke!" } ) + self.EscortMenuSmokeOrange = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release orange smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Orange, ParamMessage = "Releasing orange smoke!" } ) + self.EscortMenuSmokeBlue = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release blue smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Blue, ParamMessage = "Releasing blue smoke!" } ) + end + end + + return self +end + +--- Defines a menu slot to let the escort report their current detected targets with a specified time interval in seconds. +-- This menu will appear under **Report targets**. +-- Note that if a report targets menu is not specified, no targets will be detected by the escort, and the attack and assisted attack menus will not be displayed. +-- @param #ESCORT self +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort report their current detected targets after specified time interval in seconds. The default time is 30 seconds. +-- @return #ESCORT +function ESCORT:MenuReportTargets( Seconds ) + self:F( { Seconds } ) + + if not self.EscortMenuReportNearbyTargets then + self.EscortMenuReportNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Report targets", self.EscortMenu ) + end + + if not Seconds then + Seconds = 30 + end + + -- Report Targets + self.EscortMenuReportNearbyTargetsNow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets now!", self.EscortMenuReportNearbyTargets, ESCORT._ReportNearbyTargetsNow, { ParamSelf = self } ) + self.EscortMenuReportNearbyTargetsOn = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets on", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = true } ) + self.EscortMenuReportNearbyTargetsOff = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets off", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = false, } ) + + -- Attack Targets + self.EscortMenuAttackNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Attack targets", self.EscortMenu ) + + + --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, Seconds ) + self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, Seconds ) + + return self +end + +--- Defines a menu slot to let the escort attack its detected targets using assisted attack from another escort joined also with the client. +-- This menu will appear under **Request assistance from**. +-- Note that this method needs to be preceded with the method MenuReportTargets. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuAssistedAttack() + self:F() + + -- Request assistance from other escorts. + -- This is very useful to let f.e. an escorting ship attack a target detected by an escorting plane... + self.EscortMenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, "Request assistance from", self.EscortMenu ) + + return self +end + +--- Defines a menu to let the escort set its rules of engagement. +-- All rules of engagement will appear under the menu **ROE**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuROE( MenuTextFormat ) + self:F( MenuTextFormat ) + + if not self.EscortMenuROE then + -- Rules of Engagement + self.EscortMenuROE = MENU_CLIENT:New( self.EscortClient, "ROE", self.EscortMenu ) + if self.EscortGroup:OptionROEHoldFirePossible() then + self.EscortMenuROEHoldFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Hold Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEHoldFire(), ParamMessage = "Holding weapons!" } ) + end + if self.EscortGroup:OptionROEReturnFirePossible() then + self.EscortMenuROEReturnFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Return Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEReturnFire(), ParamMessage = "Returning fire!" } ) + end + if self.EscortGroup:OptionROEOpenFirePossible() then + self.EscortMenuROEOpenFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Open Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEOpenFire(), ParamMessage = "Opening fire on designated targets!!" } ) + end + if self.EscortGroup:OptionROEWeaponFreePossible() then + self.EscortMenuROEWeaponFree = MENU_CLIENT_COMMAND:New( self.EscortClient, "Weapon Free", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEWeaponFree(), ParamMessage = "Opening fire on targets of opportunity!" } ) + end + end + + return self +end + + +--- Defines a menu to let the escort set its evasion when under threat. +-- All rules of engagement will appear under the menu **Evasion**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuEvasion( MenuTextFormat ) + self:F( MenuTextFormat ) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuEvasion then + -- Reaction to Threats + self.EscortMenuEvasion = MENU_CLIENT:New( self.EscortClient, "Evasion", self.EscortMenu ) + if self.EscortGroup:OptionROTNoReactionPossible() then + self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTNoReaction(), ParamMessage = "Fighting until death!" } ) + end + if self.EscortGroup:OptionROTPassiveDefensePossible() then + self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTPassiveDefense(), ParamMessage = "Defending using jammers, chaff and flares!" } ) + end + if self.EscortGroup:OptionROTEvadeFirePossible() then + self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTEvadeFire(), ParamMessage = "Evading on enemy fire!" } ) + end + if self.EscortGroup:OptionROTVerticalPossible() then + self.EscortMenuOptionEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTVertical(), ParamMessage = "Evading on enemy fire with vertical manoeuvres!" } ) + end + end + end + + return self +end + +--- Defines a menu to let the escort resume its mission from a waypoint on its route. +-- All rules of engagement will appear under the menu **Resume mission from**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuResumeMission() + self:F() + + if not self.EscortMenuResumeMission then + -- Mission Resume Menu Root + self.EscortMenuResumeMission = MENU_CLIENT:New( self.EscortClient, "Resume mission from", self.EscortMenu ) + end + + return self +end + + +--- @param #MENUPARAM MenuParam +function ESCORT._HoldPosition( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local OrbitGroup = MenuParam.ParamOrbitGroup -- Group#GROUP + local OrbitUnit = OrbitGroup:GetUnit(1) -- Unit#UNIT + local OrbitHeight = MenuParam.ParamHeight + local OrbitSeconds = MenuParam.ParamSeconds -- Not implemented yet + + routines.removeFunction( self.FollowScheduler ) + + local PointFrom = {} + local GroupPoint = EscortGroup:GetUnit(1):GetPointVec3() + PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.z + PointFrom.speed = 250 + PointFrom.type = AI.Task.WaypointType.TURNING_POINT + PointFrom.alt = GroupPoint.y + PointFrom.alt_type = AI.Task.AltitudeType.BARO + + local OrbitPoint = OrbitUnit:GetPointVec2() + local PointTo = {} + PointTo.x = OrbitPoint.x + PointTo.y = OrbitPoint.y + PointTo.speed = 250 + PointTo.type = AI.Task.WaypointType.TURNING_POINT + PointTo.alt = OrbitHeight + PointTo.alt_type = AI.Task.AltitudeType.BARO + PointTo.task = EscortGroup:TaskOrbitCircleAtVec2( OrbitPoint, OrbitHeight, 0 ) + + local Points = { PointFrom, PointTo } + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + EscortGroup:SetTask( EscortGroup:TaskRoute( Points ) ) + EscortGroup:MessageToClient( "Orbiting at location.", 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._JoinUpAndFollow( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.Distance = MenuParam.ParamDistance + + self:JoinUpAndFollow( EscortGroup, EscortClient, self.Distance ) +end + +--- JoinsUp and Follows a CLIENT. +-- @param Escort#ESCORT self +-- @param Group#GROUP EscortGroup +-- @param Client#CLIENT EscortClient +-- @param DCSTypes#Distance Distance +function ESCORT:JoinUpAndFollow( EscortGroup, EscortClient, Distance ) + self:F( { EscortGroup, EscortClient, Distance } ) + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + self.EscortMode = ESCORT.MODE.FOLLOW + + self.CT1 = 0 + self.GT1 = 0 + --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + 1, .5 ) + self.FollowScheduler = SCHEDULER:New( self, self._FollowScheduler, { Distance }, 1, .5, .1 ) + EscortGroup:MessageToClient( "Rejoining and Following at " .. Distance .. "!", 30, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._Flare( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local Color = MenuParam.ParamColor + local Message = MenuParam.ParamMessage + + EscortGroup:GetUnit(1):Flare( Color ) + EscortGroup:MessageToClient( Message, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._Smoke( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local Color = MenuParam.ParamColor + local Message = MenuParam.ParamMessage + + EscortGroup:GetUnit(1):Smoke( Color ) + EscortGroup:MessageToClient( Message, 10, EscortClient ) +end + + +--- @param #MENUPARAM MenuParam +function ESCORT._ReportNearbyTargetsNow( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self:_ReportTargetsScheduler() + +end + +function ESCORT._SwitchReportNearbyTargets( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.ReportTargets = MenuParam.ParamReportTargets + + if self.ReportTargets then + if not self.ReportTargetsScheduler then + --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, 30 ) + self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, 30 ) + end + else + routines.removeFunction( self.ReportTargetsScheduler ) + self.ReportTargetsScheduler = nil + end +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ScanTargets( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local ScanDuration = MenuParam.ParamScanDuration + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + self:T( { "FollowScheduler after removefunction: ", self.FollowScheduler } ) + + if EscortGroup:IsHelicopter() then + SCHEDULER:New( EscortGroup, EscortGroup.PushTask, + { EscortGroup:TaskControlled( + EscortGroup:TaskOrbitCircle( 200, 20 ), + EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) + ) + }, + 1 + ) + elseif EscortGroup:IsAirPlane() then + SCHEDULER:New( EscortGroup, EscortGroup.PushTask, + { EscortGroup:TaskControlled( + EscortGroup:TaskOrbitCircle( 1000, 500 ), + EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) + ) + }, + 1 + ) + end + + EscortGroup:MessageToClient( "Scanning targets for " .. ScanDuration .. " seconds.", ScanDuration, EscortClient ) + + if self.EscortMode == ESCORT.MODE.FOLLOW then + --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + ScanDuration, 1 ) + self.FollowScheduler:Start() + end + +end + +function _Resume( EscortGroup ) + env.info( '_Resume' ) + + local Escort = EscortGroup.Escort -- #ESCORT + env.info( "EscortMode = " .. Escort.EscortMode ) + if Escort.EscortMode == ESCORT.MODE.FOLLOW then + Escort:JoinUpAndFollow( EscortGroup, Escort.EscortClient, Escort.Distance ) + end + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._AttackTarget( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + self:T( AttackUnit ) + + if EscortGroup:IsAir() then + EscortGroup:OptionROEOpenFire() + EscortGroup:OptionROTPassiveDefense() + EscortGroup.Escort = self -- Need to do this trick to get the reference for the escort in the _Resume function. +-- routines.scheduleFunction( +-- EscortGroup.PushTask, +-- { EscortGroup, +-- EscortGroup:TaskCombo( +-- { EscortGroup:TaskAttackUnit( AttackUnit ), +-- EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroup, + EscortGroup.PushTask, + { EscortGroup:TaskCombo( + { EscortGroup:TaskAttackUnit( AttackUnit ), + EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) + } + ) + }, 10 + ) + else +-- routines.scheduleFunction( +-- EscortGroup.PushTask, +-- { EscortGroup, +-- EscortGroup:TaskCombo( +-- { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroup, + EscortGroup.PushTask, + { EscortGroup:TaskCombo( + { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) + } + ) + }, 10 + ) + end + EscortGroup:MessageToClient( "Engaging Designated Unit!", 10, EscortClient ) + + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._AssistTarget( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + local EscortGroupAttack = MenuParam.ParamEscortGroup + local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + + self:T( AttackUnit ) + + if EscortGroupAttack:IsAir() then + EscortGroupAttack:OptionROEOpenFire() + EscortGroupAttack:OptionROTVertical() +-- routines.scheduleFunction( +-- EscortGroupAttack.PushTask, +-- { EscortGroupAttack, +-- EscortGroupAttack:TaskCombo( +-- { EscortGroupAttack:TaskAttackUnit( AttackUnit ), +-- EscortGroupAttack:TaskOrbitCircle( 500, 350 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHDULER:New( EscortGroupAttack, + EscortGroupAttack.PushTask, + { EscortGroupAttack:TaskCombo( + { EscortGroupAttack:TaskAttackUnit( AttackUnit ), + EscortGroupAttack:TaskOrbitCircle( 500, 350 ) + } + ) + }, 10 + ) + else +-- routines.scheduleFunction( +-- EscortGroupAttack.PushTask, +-- { EscortGroupAttack, +-- EscortGroupAttack:TaskCombo( +-- { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroupAttack, + EscortGroupAttack.PushTask, + { EscortGroupAttack:TaskCombo( + { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) + } + ) + }, 10 + ) + end + EscortGroupAttack:MessageToClient( "Assisting with the destroying the enemy unit!", 10, EscortClient ) + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ROE( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local EscortROEFunction = MenuParam.ParamFunction + local EscortROEMessage = MenuParam.ParamMessage + + pcall( function() EscortROEFunction() end ) + EscortGroup:MessageToClient( EscortROEMessage, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ROT( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local EscortROTFunction = MenuParam.ParamFunction + local EscortROTMessage = MenuParam.ParamMessage + + pcall( function() EscortROTFunction() end ) + EscortGroup:MessageToClient( EscortROTMessage, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ResumeMission( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local WayPoint = MenuParam.ParamWayPoint + + routines.removeFunction( self.FollowScheduler ) + self.FollowScheduler = nil + + local WayPoints = EscortGroup:GetTaskRoute() + self:T( WayPoint, WayPoints ) + + for WayPointIgnore = 1, WayPoint do + table.remove( WayPoints, 1 ) + end + + --routines.scheduleFunction( EscortGroup.SetTask, {EscortGroup, EscortGroup:TaskRoute( WayPoints ) }, timer.getTime() + 1 ) + SCHEDULER:New( EscortGroup, EscortGroup.SetTask, { EscortGroup:TaskRoute( WayPoints ) }, 1 ) + + EscortGroup:MessageToClient( "Resuming mission from waypoint " .. WayPoint .. ".", 10, EscortClient ) +end + +--- Registers the waypoints +-- @param #ESCORT self +-- @return #table +function ESCORT:RegisterRoute() + self:F() + + local EscortGroup = self.EscortGroup -- Group#GROUP + + local TaskPoints = EscortGroup:GetTaskRoute() + + self:T( TaskPoints ) + + return TaskPoints +end + +--- @param Escort#ESCORT self +function ESCORT:_FollowScheduler( FollowDistance ) + self:F( { FollowDistance }) + + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + + local ClientUnit = self.EscortClient:GetClientGroupUnit() + local GroupUnit = self.EscortGroup:GetUnit( 1 ) + + if self.CT1 == 0 and self.GT1 == 0 then + self.CV1 = ClientUnit:GetPointVec3() + self.CT1 = timer.getTime() + self.GV1 = GroupUnit:GetPointVec3() + self.GT1 = timer.getTime() + else + local CT1 = self.CT1 + local CT2 = timer.getTime() + local CV1 = self.CV1 + local CV2 = ClientUnit:GetPointVec3() + self.CT1 = CT2 + self.CV1 = CV2 + + local CD = ( ( CV2.x - CV1.x )^2 + ( CV2.y - CV1.y )^2 + ( CV2.z - CV1.z )^2 ) ^ 0.5 + local CT = CT2 - CT1 + + local CS = ( 3600 / CT ) * ( CD / 1000 ) + + self:T2( { "Client:", CS, CD, CT, CV2, CV1, CT2, CT1 } ) + + local GT1 = self.GT1 + local GT2 = timer.getTime() + local GV1 = self.GV1 + local GV2 = GroupUnit:GetPointVec3() + self.GT1 = GT2 + self.GV1 = GV2 + + local GD = ( ( GV2.x - GV1.x )^2 + ( GV2.y - GV1.y )^2 + ( GV2.z - GV1.z )^2 ) ^ 0.5 + local GT = GT2 - GT1 + + local GS = ( 3600 / GT ) * ( GD / 1000 ) + + self:T2( { "Group:", GS, GD, GT, GV2, GV1, GT2, GT1 } ) + + -- Calculate the group direction vector + local GV = { x = GV2.x - CV2.x, y = GV2.y - CV2.y, z = GV2.z - CV2.z } + + -- Calculate GH2, GH2 with the same height as CV2. + local GH2 = { x = GV2.x, y = CV2.y, z = GV2.z } + + -- Calculate the angle of GV to the orthonormal plane + local alpha = math.atan2( GV.z, GV.x ) + + -- Now we calculate the intersecting vector between the circle around CV2 with radius FollowDistance and GH2. + -- From the GeoGebra model: CVI = (x(CV2) + FollowDistance cos(alpha), y(GH2) + FollowDistance sin(alpha), z(CV2)) + local CVI = { x = CV2.x + FollowDistance * math.cos(alpha), + y = GH2.y, + z = CV2.z + FollowDistance * math.sin(alpha), + } + + -- Calculate the direction vector DV of the escort group. We use CVI as the base and CV2 as the direction. + local DV = { x = CV2.x - CVI.x, y = CV2.y - CVI.y, z = CV2.z - CVI.z } + + -- We now calculate the unary direction vector DVu, so that we can multiply DVu with the speed, which is expressed in meters / s. + -- We need to calculate this vector to predict the point the escort group needs to fly to according its speed. + -- The distance of the destination point should be far enough not to have the aircraft starting to swipe left to right... + local DVu = { x = DV.x / FollowDistance, y = DV.y / FollowDistance, z = DV.z / FollowDistance } + + -- Now we can calculate the group destination vector GDV. + local GDV = { x = DVu.x * CS * 8 + CVI.x, y = CVI.y, z = DVu.z * CS * 8 + CVI.z } + + --trigger.action.smoke( GDV, trigger.smokeColor.Red ) + self:T2( { "CV2:", CV2 } ) + self:T2( { "CVI:", CVI } ) + self:T2( { "GDV:", GDV } ) + + -- Measure distance between client and group + local CatchUpDistance = ( ( GDV.x - GV2.x )^2 + ( GDV.y - GV2.y )^2 + ( GDV.z - GV2.z )^2 ) ^ 0.5 + + -- The calculation of the Speed would simulate that the group would take 30 seconds to overcome + -- the requested Distance). + local Time = 10 + local CatchUpSpeed = ( CatchUpDistance - ( CS * 8.4 ) ) / Time + + local Speed = CS + CatchUpSpeed + if Speed < 0 then + Speed = 0 + end + + self:T( { "Client Speed, Escort Speed, Speed, FlyDistance, Time:", CS, GS, Speed, Distance, Time } ) + + -- Now route the escort to the desired point with the desired speed. + self.EscortGroup:TaskRouteToVec3( GDV, Speed / 3.6 ) -- DCS models speed in Mps (Miles per second) + end + return true + end + + return false +end + + +--- Report Targets Scheduler. +-- @param #ESCORT self +function ESCORT:_ReportTargetsScheduler() + self:F( self.EscortGroup:GetName() ) + + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + local EscortGroupName = self.EscortGroup:GetName() + local EscortTargets = self.EscortGroup:GetDetectedTargets() + + local ClientEscortTargets = self.EscortClient._EscortGroups[EscortGroupName].Targets + + local EscortTargetMessages = "" + for EscortTargetID, EscortTarget in pairs( EscortTargets ) do + local EscortObject = EscortTarget.object + self:T( EscortObject ) + if EscortObject and EscortObject:isExist() and EscortObject.id_ < 50000000 then + + local EscortTargetUnit = UNIT:Find( EscortObject ) + local EscortTargetUnitName = EscortTargetUnit:GetName() + + + + -- local EscortTargetIsDetected, + -- EscortTargetIsVisible, + -- EscortTargetLastTime, + -- EscortTargetKnowType, + -- EscortTargetKnowDistance, + -- EscortTargetLastPos, + -- EscortTargetLastVelocity + -- = self.EscortGroup:IsTargetDetected( EscortObject ) + -- + -- self:T( { EscortTargetIsDetected, + -- EscortTargetIsVisible, + -- EscortTargetLastTime, + -- EscortTargetKnowType, + -- EscortTargetKnowDistance, + -- EscortTargetLastPos, + -- EscortTargetLastVelocity } ) + + + local EscortTargetUnitPositionVec3 = EscortTargetUnit:GetPointVec3() + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + + ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + + ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + + self:T( { self.EscortGroup:GetName(), EscortTargetUnit:GetName(), Distance, EscortTarget } ) + + if Distance <= 15 then + + if not ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = {} + end + ClientEscortTargets[EscortTargetUnitName].AttackUnit = EscortTargetUnit + ClientEscortTargets[EscortTargetUnitName].visible = EscortTarget.visible + ClientEscortTargets[EscortTargetUnitName].type = EscortTarget.type + ClientEscortTargets[EscortTargetUnitName].distance = EscortTarget.distance + else + if ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = nil + end + end + end + end + + self:T( { "Sorting Targets Table:", ClientEscortTargets } ) + table.sort( ClientEscortTargets, function( a, b ) return a.Distance < b.Distance end ) + self:T( { "Sorted Targets Table:", ClientEscortTargets } ) + + -- Remove the sub menus of the Attack menu of the Escort for the EscortGroup. + self.EscortMenuAttackNearbyTargets:RemoveSubMenus() + + if self.EscortMenuTargetAssistance then + self.EscortMenuTargetAssistance:RemoveSubMenus() + end + + --for MenuIndex = 1, #self.EscortMenuAttackTargets do + -- self:T( { "Remove Menu:", self.EscortMenuAttackTargets[MenuIndex] } ) + -- self.EscortMenuAttackTargets[MenuIndex] = self.EscortMenuAttackTargets[MenuIndex]:Remove() + --end + + + if ClientEscortTargets then + for ClientEscortTargetUnitName, ClientEscortTargetData in pairs( ClientEscortTargets ) do + + for ClientEscortGroupName, EscortGroupData in pairs( self.EscortClient._EscortGroups ) do + + if ClientEscortTargetData and ClientEscortTargetData.AttackUnit:IsAlive() then + + local EscortTargetMessage = "" + local EscortTargetCategoryName = ClientEscortTargetData.AttackUnit:GetCategoryName() + local EscortTargetCategoryType = ClientEscortTargetData.AttackUnit:GetTypeName() + if ClientEscortTargetData.type then + EscortTargetMessage = EscortTargetMessage .. EscortTargetCategoryName .. " (" .. EscortTargetCategoryType .. ") at " + else + EscortTargetMessage = EscortTargetMessage .. "Unknown target at " + end + + local EscortTargetUnitPositionVec3 = ClientEscortTargetData.AttackUnit:GetPointVec3() + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + + ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + + ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + + self:T( { self.EscortGroup:GetName(), ClientEscortTargetData.AttackUnit:GetName(), Distance, ClientEscortTargetData.AttackUnit } ) + if ClientEscortTargetData.visible == false then + EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " estimated km" + else + EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " km" + end + + if ClientEscortTargetData.visible then + EscortTargetMessage = EscortTargetMessage .. ", visual" + end + + if ClientEscortGroupName == EscortGroupName then + + MENU_CLIENT_COMMAND:New( self.EscortClient, + EscortTargetMessage, + self.EscortMenuAttackNearbyTargets, + ESCORT._AttackTarget, + { ParamSelf = self, + ParamUnit = ClientEscortTargetData.AttackUnit + } + ) + EscortTargetMessages = EscortTargetMessages .. "\n - " .. EscortTargetMessage + else + if self.EscortMenuTargetAssistance then + local MenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, EscortGroupData.EscortName, self.EscortMenuTargetAssistance ) + MENU_CLIENT_COMMAND:New( self.EscortClient, + EscortTargetMessage, + MenuTargetAssistance, + ESCORT._AssistTarget, + { ParamSelf = self, + ParamEscortGroup = EscortGroupData.EscortGroup, + ParamUnit = ClientEscortTargetData.AttackUnit + } + ) + end + end + else + ClientEscortTargetData = nil + end + end + end + + if EscortTargetMessages ~= "" and self.ReportTargets == true then + self.EscortGroup:MessageToClient( "Detected targets within 15 km range:" .. EscortTargetMessages:gsub("\n$",""), 20, self.EscortClient ) + else + self.EscortGroup:MessageToClient( "No targets detected!", 20, self.EscortClient ) + end + end + + if self.EscortMenuResumeMission then + self.EscortMenuResumeMission:RemoveSubMenus() + + -- if self.EscortMenuResumeWayPoints then + -- for MenuIndex = 1, #self.EscortMenuResumeWayPoints do + -- self:T( { "Remove Menu:", self.EscortMenuResumeWayPoints[MenuIndex] } ) + -- self.EscortMenuResumeWayPoints[MenuIndex] = self.EscortMenuResumeWayPoints[MenuIndex]:Remove() + -- end + -- end + + local TaskPoints = self:RegisterRoute() + for WayPointID, WayPoint in pairs( TaskPoints ) do + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( WayPoint.x - EscortPositionVec3.x )^2 + + ( WayPoint.y - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + MENU_CLIENT_COMMAND:New( self.EscortClient, "Waypoint " .. WayPointID .. " at " .. string.format( "%.2f", Distance ).. "km", self.EscortMenuResumeMission, ESCORT._ResumeMission, { ParamSelf = self, ParamWayPoint = WayPointID } ) + end + end + return true + end + + return false +end +--- Provides missile training functions. +-- +-- @{#MISSILETRAINER} class +-- ======================== +-- 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. +-- +-- When running a mission where MISSILETRAINER is used, the following radio menu structure ( 'Radio Menu' -> 'Other (F10)' -> 'MissileTrainer' ) options are available for the players: +-- +-- * **Messages**: Menu to configure all messages. +-- * **Messages On**: Show all messages. +-- * **Messages Off**: Disable all messages. +-- * **Tracking**: Menu to configure missile tracking messages. +-- * **To All**: Shows missile tracking messages to all players. +-- * **To Target**: Shows missile tracking messages only to the player where the missile is targetted at. +-- * **Tracking On**: Show missile tracking messages. +-- * **Tracking Off**: Disable missile tracking messages. +-- * **Frequency Increase**: Increases the missile tracking message frequency with one second. +-- * **Frequency Decrease**: Decreases the missile tracking message frequency with one second. +-- * **Alerts**: Menu to configure alert messages. +-- * **To All**: Shows alert messages to all players. +-- * **To Target**: Shows alert messages only to the player where the missile is (was) targetted at. +-- * **Hits On**: Show missile hit alert messages. +-- * **Hits Off**: Disable missile hit alert messages. +-- * **Launches On**: Show missile launch messages. +-- * **Launches Off**: Disable missile launch messages. +-- * **Details**: Menu to configure message details. +-- * **Range On**: Shows range information when a missile is fired to a target. +-- * **Range Off**: Disable range information when a missile is fired to a target. +-- * **Bearing On**: Shows bearing information when a missile is fired to a target. +-- * **Bearing Off**: Disable bearing information when a missile is fired to a target. +-- * **Distance**: Menu to configure the distance when a missile needs to be destroyed when near to a player, during tracking. This will improve/influence hit calculation accuracy, but has the risk of damaging the aircraft when the missile reaches the aircraft before the distance is measured. +-- * **50 meter**: Destroys the missile when the distance to the aircraft is below or equal to 50 meter. +-- * **100 meter**: Destroys the missile when the distance to the aircraft is below or equal to 100 meter. +-- * **150 meter**: Destroys the missile when the distance to the aircraft is below or equal to 150 meter. +-- * **200 meter**: Destroys the missile when the distance to the aircraft is below or equal to 200 meter. +-- +-- +-- 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: +-- +-- * @{#MISSILETRAINER.InitMessagesOnOff}: Sets by default the display of any message to be ON or OFF. +-- * @{#MISSILETRAINER.InitTrackingToAll}: Sets by default the missile tracking report for all players or only for those missiles targetted to you. +-- * @{#MISSILETRAINER.InitTrackingOnOff}: Sets by default the display of missile tracking report to be ON or OFF. +-- * @{#MISSILETRAINER.InitTrackingFrequency}: Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. +-- * @{#MISSILETRAINER.InitAlertsToAll}: Sets by default the display of alerts to be shown to all players or only to you. +-- * @{#MISSILETRAINER.InitAlertsHitsOnOff}: Sets by default the display of hit alerts ON or OFF. +-- * @{#MISSILETRAINER.InitAlertsLaunchesOnOff}: Sets by default the display of launch alerts ON or OFF. +-- * @{#MISSILETRAINER.InitRangeOnOff}: Sets by default the display of range information of missiles ON of OFF. +-- * @{#MISSILETRAINER.InitBearingOnOff}: Sets by default the display of bearing information of missiles ON of OFF. +-- * @{#MISSILETRAINER.InitMenusOnOff}: Allows to configure the options through the radio menu. +-- +-- @module MissileTrainer +-- @author FlightControl + + +Include.File( "Client" ) +Include.File( "Scheduler" ) + +--- The MISSILETRAINER class +-- @type MISSILETRAINER +-- @extends Base#BASE +MISSILETRAINER = { + ClassName = "MISSILETRAINER", +} + +--- 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. +-- @param #MISSILETRAINER self +-- @param #number Distance The distance in meters when a tracked missile needs to be destroyed when close to a player. +-- @param #string Briefing (Optional) Will show a text to the players when starting their mission. Can be used for briefing purposes. +-- @return #MISSILETRAINER +function MISSILETRAINER:New( Distance, Briefing ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( Distance ) + + if Briefing then + self.Briefing = Briefing + end + + self.Schedulers = {} + self.SchedulerID = 0 + + self.MessageInterval = 2 + self.MessageLastTime = timer.getTime() + + self.Distance = Distance / 1000 + + _EVENTDISPATCHER:OnShot( self._EventShot, self ) + + self.DB = DATABASE:New():FilterStart() + self.DBClients = self.DB.Clients + self.DBUnits = self.DB.Units + + for ClientID, Client in pairs( self.DBClients ) do + + local function _Alive( Client ) + + if self.Briefing then + Client:Message( self.Briefing, 15, "HELLO WORLD", "Trainer" ) + end + + if self.MenusOnOff == true then + Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "MENU", "Trainer" ) + + Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) -- Menu#MENU_CLIENT + + Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu ) + Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } ) + Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } ) + + Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu ) + Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } ) + Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } ) + Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = true } ) + Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = false } ) + Client.MenuTrackIncrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Increase", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = -1 } ) + Client.MenuTrackDecrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Decrease", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = 1 } ) + + Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu ) + Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } ) + Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } ) + Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = true } ) + Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = false } ) + Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = true } ) + Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = false } ) + + Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu ) + Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = true } ) + Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = false } ) + Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = true } ) + Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = false } ) + + Client.MenuDistance = MENU_CLIENT:New( Client, "Set distance to plane", Client.MainMenu ) + Client.MenuDistance50 = MENU_CLIENT_COMMAND:New( Client, "50 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 50 / 1000 } ) + Client.MenuDistance100 = MENU_CLIENT_COMMAND:New( Client, "100 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 100 / 1000 } ) + Client.MenuDistance150 = MENU_CLIENT_COMMAND:New( Client, "150 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 150 / 1000 } ) + Client.MenuDistance200 = MENU_CLIENT_COMMAND:New( Client, "200 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 200 / 1000 } ) + else + if Client.MainMenu then + Client.MainMenu:Remove() + end + end + + + local ClientID = Client:GetID() + self:T( ClientID ) + if not self.TrackingMissiles[ClientID] then + self.TrackingMissiles[ClientID] = {} + end + self.TrackingMissiles[ClientID].Client = Client + if not self.TrackingMissiles[ClientID].MissileData then + self.TrackingMissiles[ClientID].MissileData = {} + end + end + + Client:Alive( _Alive ) + + end + +-- self.DB:ForEachClient( +-- --- @param Client#CLIENT Client +-- function( Client ) +-- +-- ... actions ... +-- +-- end +-- ) + + self.MessagesOnOff = true + + self.TrackingToAll = false + self.TrackingOnOff = true + self.TrackingFrequency = 3 + + self.AlertsToAll = true + self.AlertsHitsOnOff = true + self.AlertsLaunchesOnOff = true + + self.DetailsRangeOnOff = true + self.DetailsBearingOnOff = true + + self.MenusOnOff = true + + self.TrackingMissiles = {} + + self.TrackingScheduler = SCHEDULER:New( self, self._TrackMissiles, {}, 0.5, 0.05, 0 ) + + return self +end + +-- Initialization methods. + + +--- Sets by default the display of any message to be ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean MessagesOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitMessagesOnOff( MessagesOnOff ) + self:F( MessagesOnOff ) + + self.MessagesOnOff = MessagesOnOff + if self.MessagesOnOff == true then + MESSAGE:New( "Messages ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Messages OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the missile tracking report for all players or only for those missiles targetted to you. +-- @param #MISSILETRAINER self +-- @param #boolean TrackingToAll true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingToAll( TrackingToAll ) + self:F( TrackingToAll ) + + self.TrackingToAll = TrackingToAll + if self.TrackingToAll == true then + MESSAGE:New( "Missile tracking to all players ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Missile tracking to all players OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of missile tracking report to be ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean TrackingOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingOnOff( TrackingOnOff ) + self:F( TrackingOnOff ) + + self.TrackingOnOff = TrackingOnOff + if self.TrackingOnOff == true then + MESSAGE:New( "Missile tracking ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Missile tracking OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. +-- The default frequency is a 3 second interval, so the Tracking Frequency parameter specifies the increase or decrease from the default 3 seconds or the last frequency update. +-- @param #MISSILETRAINER self +-- @param #number TrackingFrequency Provide a negative or positive value in seconds to incraese or decrease the display frequency. +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingFrequency( TrackingFrequency ) + self:F( TrackingFrequency ) + + self.TrackingFrequency = self.TrackingFrequency + TrackingFrequency + if self.TrackingFrequency < 0.5 then + self.TrackingFrequency = 0.5 + end + if self.TrackingFrequency then + MESSAGE:New( "Missile tracking frequency is " .. self.TrackingFrequency .. " seconds.", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of alerts to be shown to all players or only to you. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsToAll true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsToAll( AlertsToAll ) + self:F( AlertsToAll ) + + self.AlertsToAll = AlertsToAll + if self.AlertsToAll == true then + MESSAGE:New( "Alerts to all players ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts to all players OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of hit alerts ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsHitsOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsHitsOnOff( AlertsHitsOnOff ) + self:F( AlertsHitsOnOff ) + + self.AlertsHitsOnOff = AlertsHitsOnOff + if self.AlertsHitsOnOff == true then + MESSAGE:New( "Alerts Hits ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts Hits OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of launch alerts ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsLaunchesOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsLaunchesOnOff( AlertsLaunchesOnOff ) + self:F( AlertsLaunchesOnOff ) + + self.AlertsLaunchesOnOff = AlertsLaunchesOnOff + if self.AlertsLaunchesOnOff == true then + MESSAGE:New( "Alerts Launches ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts Launches OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of range information of missiles ON of OFF. +-- @param #MISSILETRAINER self +-- @param #boolean DetailsRangeOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitRangeOnOff( DetailsRangeOnOff ) + self:F( DetailsRangeOnOff ) + + self.DetailsRangeOnOff = DetailsRangeOnOff + if self.DetailsRangeOnOff == true then + MESSAGE:New( "Range display ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Range display OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of bearing information of missiles ON of OFF. +-- @param #MISSILETRAINER self +-- @param #boolean DetailsBearingOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitBearingOnOff( DetailsBearingOnOff ) + self:F( DetailsBearingOnOff ) + + self.DetailsBearingOnOff = DetailsBearingOnOff + if self.DetailsBearingOnOff == true then + MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Enables / Disables the menus. +-- @param #MISSILETRAINER self +-- @param #boolean MenusOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitMenusOnOff( MenusOnOff ) + self:F( MenusOnOff ) + + self.MenusOnOff = MenusOnOff + if self.MenusOnOff == true then + MESSAGE:New( "Menus are ENABLED (only when a player rejoins a slot)", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Menus are DISABLED", "Menu", 15, "ID" ):ToAll() + end + + return self +end + + +-- Menu functions + +function MISSILETRAINER._MenuMessages( MenuParameters ) + + local self = MenuParameters.MenuSelf + + if MenuParameters.MessagesOnOff ~= nil then + self:InitMessagesOnOff( MenuParameters.MessagesOnOff ) + end + + if MenuParameters.TrackingToAll ~= nil then + self:InitTrackingToAll( MenuParameters.TrackingToAll ) + end + + if MenuParameters.TrackingOnOff ~= nil then + self:InitTrackingOnOff( MenuParameters.TrackingOnOff ) + end + + if MenuParameters.TrackingFrequency ~= nil then + self:InitTrackingFrequency( MenuParameters.TrackingFrequency ) + end + + if MenuParameters.AlertsToAll ~= nil then + self:InitAlertsToAll( MenuParameters.AlertsToAll ) + end + + if MenuParameters.AlertsHitsOnOff ~= nil then + self:InitAlertsHitsOnOff( MenuParameters.AlertsHitsOnOff ) + end + + if MenuParameters.AlertsLaunchesOnOff ~= nil then + self:InitAlertsLaunchesOnOff( MenuParameters.AlertsLaunchesOnOff ) + end + + if MenuParameters.DetailsRangeOnOff ~= nil then + self:InitRangeOnOff( MenuParameters.DetailsRangeOnOff ) + end + + if MenuParameters.DetailsBearingOnOff ~= nil then + self:InitBearingOnOff( MenuParameters.DetailsBearingOnOff ) + end + + if MenuParameters.Distance ~= nil then + self.Distance = MenuParameters.Distance + MESSAGE:New( "Hit detection distance set to " .. self.Distance .. " meters", "Menu", 15, "ID" ):ToAll() + end + +end + +--- 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. +-- @param #MISSILETRAINER self +-- @param Event#EVENTDATA Event +function MISSILETRAINER:_EventShot( Event ) + self:F( { Event } ) + + local TrainerSourceDCSUnit = Event.IniDCSUnit + local TrainerSourceDCSUnitName = Event.IniDCSUnitName + local TrainerWeapon = Event.Weapon -- Identify the weapon fired + local TrainerWeaponName = Event.WeaponName -- return weapon type + + self:T( "Missile Launched = " .. TrainerWeaponName ) + + local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target + local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit ) + local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill + + self:T(TrainerTargetDCSUnitName ) + + local Client = self.DBClients[TrainerTargetDCSUnitName] + if Client then + + local TrainerSourceUnit = UNIT:Find( TrainerSourceDCSUnit ) + local TrainerTargetUnit = UNIT:Find( TrainerTargetDCSUnit ) + + if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then + + local Message = MESSAGE:New( + string.format( "%s launched a %s", + TrainerSourceUnit:GetTypeName(), + TrainerWeaponName + ) .. self:_AddRange( Client, TrainerWeapon ) .. self:_AddBearing( Client, TrainerWeapon ),"Launch Alert", 5, "ID" ) + + if self.AlertsToAll then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + + local ClientID = Client:GetID() + local MissileData = {} + MissileData.TrainerSourceUnit = TrainerSourceUnit + MissileData.TrainerWeapon = TrainerWeapon + MissileData.TrainerTargetUnit = TrainerTargetUnit + MissileData.TrainerWeaponTypeName = TrainerWeapon:getTypeName() + MissileData.TrainerWeaponLaunched = true + table.insert( self.TrackingMissiles[ClientID].MissileData, MissileData ) + --self:T( self.TrackingMissiles ) + end +end + +function MISSILETRAINER:_AddRange( Client, TrainerWeapon ) + + local RangeText = "" + + if self.DetailsRangeOnOff then + + local PositionMissile = TrainerWeapon:getPoint() + local PositionTarget = Client:GetPointVec3() + + local Range = ( ( PositionMissile.x - PositionTarget.x )^2 + + ( PositionMissile.y - PositionTarget.y )^2 + + ( PositionMissile.z - PositionTarget.z )^2 + ) ^ 0.5 / 1000 + + RangeText = string.format( ", at %4.2fkm", Range ) + end + + return RangeText +end + +function MISSILETRAINER:_AddBearing( Client, TrainerWeapon ) + + local BearingText = "" + + if self.DetailsBearingOnOff then + + local PositionMissile = TrainerWeapon:getPoint() + local PositionTarget = Client:GetPointVec3() + + self:T2( { PositionTarget, PositionMissile }) + + local DirectionVector = { x = PositionMissile.x - PositionTarget.x, y = PositionMissile.y - PositionTarget.y, z = PositionMissile.z - PositionTarget.z } + local DirectionRadians = math.atan2( DirectionVector.z, DirectionVector.x ) + --DirectionRadians = DirectionRadians + routines.getNorthCorrection( PositionTarget ) + if DirectionRadians < 0 then + DirectionRadians = DirectionRadians + 2 * math.pi + end + local DirectionDegrees = DirectionRadians * 180 / math.pi + + BearingText = string.format( ", %d degrees", DirectionDegrees ) + end + + return BearingText +end + + +function MISSILETRAINER:_TrackMissiles() + self:F2() + + + local ShowMessages = false + if self.MessagesOnOff and self.MessageLastTime + self.TrackingFrequency <= timer.getTime() then + self.MessageLastTime = timer.getTime() + ShowMessages = true + end + + -- ALERTS PART + + -- Loop for all Player Clients to check the alerts and deletion of missiles. + for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do + + local Client = ClientData.Client + self:T2( { Client:GetName() } ) + + for MissileDataID, MissileData in pairs( ClientData.MissileData ) do + self:T3( MissileDataID ) + + local TrainerSourceUnit = MissileData.TrainerSourceUnit + local TrainerWeapon = MissileData.TrainerWeapon + local TrainerTargetUnit = MissileData.TrainerTargetUnit + local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName + local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched + + if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then + local PositionMissile = TrainerWeapon:getPosition().p + local PositionTarget = Client:GetPointVec3() + + local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 + + ( PositionMissile.y - PositionTarget.y )^2 + + ( PositionMissile.z - PositionTarget.z )^2 + ) ^ 0.5 / 1000 + + if Distance <= self.Distance then + -- Hit alert + TrainerWeapon:destroy() + if self.MessagesOnOff == true and self.AlertsHitsOnOff == true then + + self:T( "killed" ) + + local Message = MESSAGE:New( + string.format( "%s launched by %s killed %s", + TrainerWeapon:getTypeName(), + TrainerSourceUnit:GetTypeName(), + TrainerTargetUnit:GetPlayerName() + ),"Hit Alert", 15, "ID" ) + + if self.AlertsToAll == true then + Message:ToAll() + else + Message:ToClient( Client ) + end + + MissileData = nil + table.remove( ClientData.MissileData, MissileDataID ) + self:T(ClientData.MissileData) + end + end + else + if not ( TrainerWeapon and TrainerWeapon:isExist() ) then + if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then + -- Weapon does not exist anymore. Delete from Table + local Message = MESSAGE:New( + string.format( "%s launched by %s self destructed!", + TrainerWeaponTypeName, + TrainerSourceUnit:GetTypeName() + ),"Tracking", 5, "ID" ) + + if self.AlertsToAll == true then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + MissileData = nil + table.remove( ClientData.MissileData, MissileDataID ) + self:T( ClientData.MissileData ) + end + end + end + end + + if ShowMessages == true and self.MessagesOnOff == true and self.TrackingOnOff == true then -- Only do this when tracking information needs to be displayed. + + -- TRACKING PART + + -- For the current client, the missile range and bearing details are displayed To the Player Client. + -- For the other clients, the missile range and bearing details are displayed To the other Player Clients. + -- To achieve this, a cross loop is done for each Player Client <-> Other Player Client missile information. + + -- Main Player Client loop + for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do + + local Client = ClientData.Client + self:T2( { Client:GetName() } ) + + + ClientData.MessageToClient = "" + ClientData.MessageToAll = "" + + -- Other Players Client loop + for TrackingDataID, TrackingData in pairs( self.TrackingMissiles ) do + + for MissileDataID, MissileData in pairs( TrackingData.MissileData ) do + self:T3( MissileDataID ) + + local TrainerSourceUnit = MissileData.TrainerSourceUnit + local TrainerWeapon = MissileData.TrainerWeapon + local TrainerTargetUnit = MissileData.TrainerTargetUnit + local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName + local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched + + if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then + + if ShowMessages == true then + local TrackingTo + TrackingTo = string.format( " -> %s", + TrainerWeaponTypeName + ) + + if ClientDataID == TrackingDataID then + if ClientData.MessageToClient == "" then + ClientData.MessageToClient = "Missiles to You:\n" + end + ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. "\n" + else + if self.TrackingToAll == true then + if ClientData.MessageToAll == "" then + ClientData.MessageToAll = "Missiles to other Players:\n" + end + ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. " ( " .. TrainerTargetUnit:GetPlayerName() .. " )\n" + end + end + end + end + end + end + + -- Once the Player Client and the Other Player Client tracking messages are prepared, show them. + if ClientData.MessageToClient ~= "" or ClientData.MessageToAll ~= "" then + local Message = MESSAGE:New( ClientData.MessageToClient .. ClientData.MessageToAll, "Tracking", 1, "ID" ):ToClient( Client ) + end + end + end + + return true +end +env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz b/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz index c8858385e1d3314424ec4d99caa97951791d6e01..5b3946c14af8835f10236a53218148171feba072 100644 GIT binary patch delta 102712 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¨k~iI|Eys0+&b<0Unolc>xfYnG^vK4FCWD009610002Ho&uMj zeE~`XD4_zE?0o?|14z9Bmn(h&JOjne0+(uj0YU?`)dH8VegQiJbKwG)?S26~0|Vv) zm+)Hw7?)Lg0T7o|e*qc;bLRq=aeo0t1G@MEm$`odK?8F90+;=N0UHJm{{jF20QUU< AbpQYW delta 1005 zcmZ9~ZA_C_6bJD8Jf|(K6etxtY@uTa#6ha4FccAi@+MT*0Wt+~%}l2QEbjxypg65! zAx&T_H#Jyo#KMrlbeO`VmuVj3ePo&r5P4`2Fm?T2Ibo5ycU!c5{l9BUMpj(+SX}L%HUgkPpxbY~L>%!cp zN|^~7>uFEb?y8r)c_m`?JDv%=a?94xL=D4ig-)jCZ=kmvv$Pv-J>xLUe=Dt1 z*kWodZ?ku*ySl%VOA5xMg5XaZCo0&JyUym;jQDY)Yx-htCpE7>^g-7T8sTa$P3DGQ zyCfciH@tDvXyZ&-rFskd&2m@%MLbz9qN0o98aT5mkJH{EPQ(7PT&kby~<9 z?oF@G9iHVzpZezK>GB6d73?kcDy2{;btrPpJL6-h`XlVH!LiBZRkzAivMP$te7ZR3 z`p9*lj^%jN^8`6?QOm4zE}e01e*08w-5UcU*MUqEKi5sGhI&_R?Co50%e>aM&1#Fkn)>`+ z&$?rt+pe|+roI}VX+7_sk#gU8|47H2VY@2V+YtLGWT|#&%$lDwY7KbZEZM2vQ!Hv5 z>??j*ICW)m_qfy7x^FvVm7E|a+fsyH)M(jSPDm4hrkw!(>1iWjnl_TU{r~?m+DZs! zd|afH&YHA65JuK|;3*^Fi~R`jhXPN8lL^=i4OAvy zl!R~y+>3B22|HlnAi~#4*a>%w5MCl765>h`js%DWeg(p6fOsf5f$#_w$mc2?!6ChI z695O7tR^{5h+4$ThCr$8+?5Z=L{h{YC!%NUfbx*uT+10tYe0AZQ~ zb*7g^;8+K0!T>ITOX^ACzqEe+e`r;11RivN1X$n^*n>$maoqTpmA zf$uS?o5b%D*po$-hSCY_Wh33OibhR)l12H&83Z=4AO_S50zYI?q^NuXi&lYvF;%$o G4F3RSUy9EF diff --git a/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz b/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz index 35621d8d47379b72dda92f0f740f4a5442d94ba8..bc67a6daa2d83f936fd12899a5f42ed6fb284dea 100644 GIT binary patch delta 102550 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 diff --git a/Moose Test Missions/Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz b/Moose Test Missions/Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz index 5d1f7a1b2485548e55ff2da197103fa218d945db..741f65acd7eb6d392bfc04fe70cac57bb86326d9 100644 GIT binary patch delta 102476 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�Zo1el-UDLaD0@xRWq{JOcr? z0h4ckP6J`M0h7RgK?6v+0h0uPLIW_m0h399G6R_A0h4}!G6?JJ0RU4$L`;+Kd>xZ2 zV-O7h000010000008H%xlk$K<1HA45lc{7Ilf{4#lVX7y0|Nj8lYfCb10Mkblf8jE z2dM!9098mvlW}Ve&dn>H4K1vH7{XaZ4K1*55 zZdtC75I;vmYsd?e8;7@qP4%3Upt(`|_RZ5<{>RaX9MesKHpy7k|8cJ0}BD%Gd>Mu4OUCg3vh zxa+Z?RT{}@doK3L2`ltv={?%xBXfTL|ASV)9M4|MTeh@gu4>Lfh5*j&#cu)+nWa9H z*!y7tb4IJjlGK$+&klCY4B~8;6T5OGx~JgEJ0X|0U3VVTJ-^(*WBk3lUQRB6y;QKU zQ)OZIdz}%a#!Q~{y@$uJr!B>K3rg3uT$~H5dSv-|v8ejDbzE%Eh>!vB5 z(G^_cB^EmK`_y2g;4L3mRr*$IMP<3JxaK1nQ>wCku9q%dtYXUp81*&PuW;+P?^}fSuK6_endS9o9-G3x+&`>bDQmfDy+PQYn=jVQ*NP2! z%olle$A^X1tp!R8-Cmjhopkxe^`iW1*R|#M`q+2*mFuoQf4uy6$-RwteQ)w^o_S(N zLI;lt@3X%S^K_RVw5Vg;&bW-lNcC+9bJ5;%d<1d zPLF!aD8S1A1dJepK_;1Dx)L{&6H`yh^c(LOWu|}SViK4>iJM7^`En`4^!408OWv0; zOn(bxuveBdFob%zO<%~&Bs~2B4^Uwc50eyAamDogOia=ck#1%t0UnUa5c7R2r_W@D V$Z0XFR548d%flqiwyy@H0swzhP;USL diff --git a/Moose Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz b/Moose Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz index d80475c06c2e55b3d8890031c5313528df38e87f..e8c0176c4ab95d1c452f564c193f1094b4b24830 100644 GIT binary patch delta 102557 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�ZlN;xz{SLaD0@xRXcXJOdE> z0h9f3Ba^A(Dg){L0h89^K?BhK0h7IS7?VZi5R;a55DfqT0003100000xc>o@U*j?Z z^+5uYl;c_h+(ZJC@#8WHIZFZnQeQYSIFmo-9g|7q8Uy4@0+Z3f6O&Bl5R=Qo5E1|Y z0003100000?MwmyQ$a*blRxGilgQ*615Ql>ljY<>1HMiIldHrVlV;%%lU3y!5H?`~ z08~LlFLPydbZKs9bCW^k6qA$X8Uv+b0+X=iI|Dak0+a6LK?5*k0+Suu8k0=sDgz2- z0+V^>L<8Yv0+YbzK_qKt0swbma%E_5b#rBNP)h{{000009snKy4+sDNFlhn+001FY B-{JrO delta 895 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 delta 695 zcmV;o0!aPyu?@qW2e5P=5qwa)NVnrR(+C0p0K^3V02Y_=ssR;$E^KvSrBq#S+AtJ- zrc(dIm0xNj7CxqJ5)uyxScO#RG}yzmR+UMdU@5UH+u6&s|6bb(U}#!_`Vz(Vx#ygF zuYH;L8*!0J3^(m|8y5HXs~JpxFUO1d1m?@h-LL5kR_pQ4HMsK|AaH#Z1TCc03~rfV ziW)8jta-t-p~drm5C*;e*WQ=Gx2Jxu_qmF^zRG1xbJ$QDHG-$xfDGM9nsAZTCJ;oC z$3@0cswiV-ywQ#x6CjRiF5J?=hJ|H3^VtO9v)B!brEriB%zD% zJZGT`s1N+Ug|~PLLK+D1`p*&S5zLke3vC^P0?eb82$l|e=nkq+hOU+&%q{+ORC^BSaMb|TJ>d4 zakcjMv=Y6n@|ET}*XBsFR`lP)BY7P;vac{!{MqQPpDJBc;|^KXxbUGng>WLFM(Q{H zlGE7Na&OkxD<8c~KZ;IwEw9hVcl&hSvE5DC4YQdP$hcsLG!5qcK%On9!8m>aP)h>@ zmt0o^8i(|%0k`z30tT!Pd{Dbcx8pa{2m$~A#03DC30DI(26}awQ0}*vL{|em1EwGV zmxEUWRRfbE0GHcW12O}%uK|}3SOYQx2DSm0MOXtu19rComx@>eMI^n*0RVSla%E_5 db#rBNP)h{{000003;+xOP6Ge{U&{di003FxJtP1C diff --git a/Moose Test Missions/Moose_Test_SEAD/MOOSE_Test_SEAD.miz b/Moose Test Missions/Moose_Test_SEAD/MOOSE_Test_SEAD.miz index 48d70c1058e4294120e4d02ccbaf524929e71d1b..b7f520bf6fa532db920d65145007449d6938f047 100644 GIT binary patch delta 102362 zcmV(#K;*xx$pPEl2e8H$5<+adNReK1%{Yt!0AIui02Tm~++rAi>>d46+sg6hbmsjJ zS27*ji4b6#*A6XhNgyvw`AC7hOiNQn*fOZGEmx8Olc9fm_v1cwl5IXhXd7N0NPBy` zdwaWk-=}zZ5hlZ4+7yi!FJ6e<{r$r&ad@Tdu^SW-%lC33ucny8>JCmHyt*A3eh=_hG(%T&f`2bnBgG$XPW&S zXIKM}ZPiXnhIL7&g94(G>pb@6o+0te5Iazv>jwVM~>17gOH;zY`YI}Zq`p>vi zfMGm;;~3OW)6e74Nr422r%KUT#7PHeSQ(!sJyA?Xu>y&IgBuco1vH8wqCAs9i%}2~ zgFQk$F}#RTlw`Rs zO*bV`bgpAAKV@nmJ$|R$EiILn9b9q{7ZGKDZE7NcIJ4l27i8z$vPcY;gw{R9bAp3K zp7GT|js0+a&g=TEjhu|jCeixO&dO3ks4RUIK zmROKyRW?~+mRjVd06{4%8slWy*VjdZ$TY~tpeQOkNZp@^%QX9(3$zKs%72LzsQSyM z3gon%&Nfu8ReX|CLv}2xDve~~b68iH21x>rpDP+K#R?)ezBGu1w&?&&(wH+~qb=LD z2gY7NX_L6$%^{-_4)Z#~86`prDRE(cI3AqFnf7n|fi#wjABd)N;l9$8`~iA-Nk^O3Ek)#7H=2bS@ip6Ql5Qc54U~1;XbGss zQqpOf_Ty;SXtiw3Loy3O558V0{|wwlKr+|c7kfkqO;#r=nzG2P+vEX`Dvu6-|8DVE z+{Qd*n_5dxvB1?O9wvPqio_*#r()<5i1TPPilJAKVF&S#Q;Wh>oE)80bUd` zPEM%FbYjNhVjXXTKN}UQQed;R4WyIdXZ)QD_(#eM#J2b+#)znk9ry%0AF2T4oKsbM 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

BKwIDQQ^ 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 delta 667 zcmV;M0%ZN$-3P150kFmw5`0j*NVnrR(+C0p0K^3V02Tn34DA6Jf2CAiZ`v>veWp_X z!2v~(w=rq{Fv{sc#oM0)jE8E%2wEte)31Dbif%+1~_POVrd#`<& z_#1JNN(?vcb{iJ=_p2F9e=o<2`2^<6$=$E%3|8y$&o#L78z69f6$CA$)C_K!V2T

`}rtW#$;Y@Sp=| zg-E1jsbc2AikVUghaMKx#9NGT)b0{QhPvF~e&^GG3^VtOe;yuC2Xzr~i6o(m?>uLr z3#bqLzJ<4V3PKtP@%qmZ>JiMA2@7ol?av&d*}|TPlm3RA^oAfD7F?ifcPc)m;UL#`KGYg^&H z>kDkxp=a4{fAZ~&DMZ6`Vyy(3B5yI<(_NTxl5|xG+1(0FZ=1eZ?j z0UEbPqyeT#4}4I&NVnrR(+C0p0K^3Vm;3AiH3oWhnNaSxmp1JIJOlU{0GD;`0ZRj! z8UUBW?Ex|aw?zP#`0W8Q0}4z4mo4rALIZkD0GD#^0YwABUI3T6?g1MHQDFc8008(Z BIrRVl diff --git a/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz b/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz index cf86dece2888efeee19a1c58c078aebe40e023a7..efb125ade2b655ad94a89933d879792ea4cf2dd8 100644 GIT binary patch delta 102389 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�ZlK#x(~0LaD0@xRXT2JOiDo z0h5X#B9o=YDgzy|0h0%|? delta 692 zcmV;l0!#g*qzUwo1F$Nf2CAiZ`v>veWp_X!2v~(w=rq{Fv{sc#oM0)jE8E%2wEte)31Dbif%+1~_POVrd#`<&_#1JN zN(?vcb{iJ=_p2F9e=o<2`2^<6$=$E%3|8y$&o#L78z69f6$CA$)C_K!V2T`}rtW#$;Y@Sp=|g-E1j zsbc2AikVUghaMKx#9NGT)b0{QhPvF~e&^GG3^VtOe;yuC2Xzr~i6o(m?>uLr3#bqL zzJ<4V3PKtP@%qmZ>JiMA2@7ol?av&d*}|TPlm3RA^oAfD7F?ifcPc)m;UL#`KGYg^&H>kDkx zp=a4{fAZ~&DMZ6`Vyy(3B5yI<(_NTxl5|xG+1(0F@I0ab diff --git a/Moose Test Missions/Moose_Test_SPAWN_Repeat/MOOSE_Test_SPAWN_Repeat.miz b/Moose Test Missions/Moose_Test_SPAWN_Repeat/MOOSE_Test_SPAWN_Repeat.miz index 8899cab3200d9bb6025a9ddcdac781202d45c2dc..91112db60c338e0a577d6fdfb4630d804c70386d 100644 GIT binary patch delta 102388 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 z%0A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 delta 688 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�Zmnc{K+8LaD0@ zxRbVdJOc!#0h93?Gm|KKDg)Z80h3jFG6PfI0h5Y)G6SaM0h7OaJp)nY0h9lFJp)?i z0h2#_MFXMt0h5kx7n7cQDgzb$0h7ynLIVu`0h17XLj#=t0h3mILjyGb0h6438wTzH H0ssI2=!mRS delta 735 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�Zo9oizsiLaD0@xRW@ZJOi=V z0h69iB$Jz-Dg%ky0h7p{G6TN{0+aooS_7sE0+U*wG6Mq<0+aBD8veWp_X!2v~(w=rq{Fv{sc#oM0)jE8E%2wEte)31Dbif%+1~_POVrd#`<&_#1JN zN(?vcb{iJ=_p2F9e=o<2`2^<6$=$E%3|8y$&o#L78z69f6$CA$)C_K!V2T`}rtW#$;Y@Sp=|g-E1j zsbc2AikVUghaMKx#9NGT)b0{QhPvF~e&^GG3^VtOe;yuC2Xzr~i6o(m?>uLr3#bqL zzJ<4V3PKtP@%qmZ>JiMA2@7ol?av&d*}|TPlm3RA^oAfD7F?ifcPc)m;UL#`KGYg^&H>kDkx zp=a4{fAZ~&DMZ6`Vyy(3B5yI<(_NTxl5|xG+1(0FWoU18b7gZ-O9ci10000E Q01g200{{T=n*aa+0H_x^9{>OV From 3173dfb42ad96a72f8286f5515739c3146a6a917 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 27 May 2016 13:41:51 +0200 Subject: [PATCH 05/12] Documentations --- Moose Training/Documentation/Base.html | 28 +- Moose Training/Documentation/CARGO.html | 4 +- Moose Training/Documentation/CleanUp.html | 4 +- Moose Training/Documentation/Client.html | 40 +- Moose Training/Documentation/DCSAirbase.html | 4 +- .../Documentation/DCSCoalitionObject.html | 4 +- Moose Training/Documentation/DCSCommand.html | 4 +- .../Documentation/DCSController.html | 4 +- Moose Training/Documentation/DCSGroup.html | 4 +- Moose Training/Documentation/DCSObject.html | 4 +- Moose Training/Documentation/DCSTask.html | 4 +- Moose Training/Documentation/DCSTypes.html | 4 +- Moose Training/Documentation/DCSUnit.html | 4 +- Moose Training/Documentation/DCSWorld.html | 4 +- Moose Training/Documentation/DCStimer.html | 4 +- Moose Training/Documentation/DEPLOYTASK.html | 4 +- .../Documentation/DESTROYBASETASK.html | 4 +- .../Documentation/DESTROYGROUPSTASK.html | 4 +- .../Documentation/DESTROYRADARSTASK.html | 4 +- .../Documentation/DESTROYUNITTYPESTASK.html | 4 +- Moose Training/Documentation/Database.html | 622 ++++++------ Moose Training/Documentation/Escort.html | 7 +- Moose Training/Documentation/Event.html | 4 +- Moose Training/Documentation/GOHOMETASK.html | 4 +- Moose Training/Documentation/Group.html | 38 +- Moose Training/Documentation/GroupSet.html | 644 ++++++++++++ Moose Training/Documentation/MISSION.html | 82 +- Moose Training/Documentation/MOVEMENT.html | 4 +- Moose Training/Documentation/Menu.html | 4 +- Moose Training/Documentation/Message.html | 4 +- .../Documentation/MissileTrainer.html | 4 +- Moose Training/Documentation/NOTASK.html | 4 +- Moose Training/Documentation/PICKUPTASK.html | 4 +- Moose Training/Documentation/ROUTETASK.html | 4 +- Moose Training/Documentation/STAGE.html | 31 +- Moose Training/Documentation/Scheduler.html | 44 +- Moose Training/Documentation/Scoring.html | 4 +- Moose Training/Documentation/Sead.html | 4 +- Moose Training/Documentation/Set.html | 948 ++---------------- Moose Training/Documentation/Spawn.html | 4 +- .../Documentation/StaticObject.html | 4 +- Moose Training/Documentation/TASK.html | 4 +- Moose Training/Documentation/Unit.html | 4 +- Moose Training/Documentation/UnitSet.html | 682 +++++++++++++ Moose Training/Documentation/Zone.html | 4 +- Moose Training/Documentation/env.html | 4 +- Moose Training/Documentation/index.html | 22 +- Moose Training/Documentation/land.html | 4 +- Moose Training/Documentation/routines.html | 6 +- 49 files changed, 2040 insertions(+), 1298 deletions(-) create mode 100644 Moose Training/Documentation/GroupSet.html create mode 100644 Moose Training/Documentation/UnitSet.html diff --git a/Moose Training/Documentation/Base.html b/Moose Training/Documentation/Base.html index f7177aa41..c35a7adac 100644 --- a/Moose Training/Documentation/Base.html +++ b/Moose Training/Documentation/Base.html @@ -42,11 +42,12 @@

  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -253,7 +255,7 @@ These tracing levels were defined to avoid bulks of tracing to be generated by l BASE:New() - +

    The base constructor.

    @@ -769,7 +771,29 @@ is the Child class from which the Parent class needs to be retrieved.

    +

    The base constructor.

    + +

    This is the top top class of all classed defined within the MOOSE. +Any new class needs to be derived from this class for proper inheritance.

    + +

    Return value

    + +

    #BASE: +The new instance of the BASE class.

    + +

    Usage:

    +
    function TASK:New()
    +
    +    local self = BASE:Inherit( self, BASE:New() )
    +
    +    -- assign Task default values during construction
    +    self.TaskBriefing = "Task: No Task."
    +    self.Time = timer.getTime()
    +    self.ExecuteStage = _TransportExecuteStage.NONE
    +
    +    return self
    +end
    diff --git a/Moose Training/Documentation/CARGO.html b/Moose Training/Documentation/CARGO.html index fdacc75e3..f7ca9c91e 100644 --- a/Moose Training/Documentation/CARGO.html +++ b/Moose Training/Documentation/CARGO.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/CleanUp.html b/Moose Training/Documentation/CleanUp.html index 1b0702bb3..c22bc448d 100644 --- a/Moose Training/Documentation/CleanUp.html +++ b/Moose Training/Documentation/CleanUp.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/Client.html b/Moose Training/Documentation/Client.html index 67e324e6f..7ad2cd35e 100644 --- a/Moose Training/Documentation/Client.html +++ b/Moose Training/Documentation/Client.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -309,13 +311,19 @@ If the DCS Unit object does not exist or is nil, the CLIENT methods will return CLIENT:ShowBriefing() -

    Show the briefing of the MISSION to the CLIENT.

    +

    Show the briefing of a CLIENT.

    CLIENT:ShowCargo()

    Shows the Cargo#CARGO contained within the CLIENT to the player as a message.

    + + + + CLIENT:ShowMissionBriefing(MissionBriefing) + +

    Show the mission briefing of a MISSION to the CLIENT.

    @@ -992,7 +1000,7 @@ Name of the Group as defined within the Mission Editor. The Group must have a Un
    -

    Show the briefing of the MISSION to the CLIENT.

    +

    Show the briefing of a CLIENT.

    Return value

    @@ -1020,6 +1028,32 @@ self

    + +CLIENT:ShowMissionBriefing(MissionBriefing) + +
    +
    + +

    Show the mission briefing of a MISSION to the CLIENT.

    + +

    Parameter

    +
      +
    • + +

      #string MissionBriefing :

      + +
    • +
    +

    Return value

    + +

    #CLIENT: +self

    + +
    +
    +
    +
    + CLIENT.SwitchMessages(PrmTable) diff --git a/Moose Training/Documentation/DCSAirbase.html b/Moose Training/Documentation/DCSAirbase.html index 907c576e5..c5ad209a8 100644 --- a/Moose Training/Documentation/DCSAirbase.html +++ b/Moose Training/Documentation/DCSAirbase.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSCoalitionObject.html b/Moose Training/Documentation/DCSCoalitionObject.html index ee0e7b8dc..d7a968f25 100644 --- a/Moose Training/Documentation/DCSCoalitionObject.html +++ b/Moose Training/Documentation/DCSCoalitionObject.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSCommand.html b/Moose Training/Documentation/DCSCommand.html index 4c9762082..5f433a2f3 100644 --- a/Moose Training/Documentation/DCSCommand.html +++ b/Moose Training/Documentation/DCSCommand.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSController.html b/Moose Training/Documentation/DCSController.html index c4e7c7428..228983cdf 100644 --- a/Moose Training/Documentation/DCSController.html +++ b/Moose Training/Documentation/DCSController.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSGroup.html b/Moose Training/Documentation/DCSGroup.html index a7a84c8d1..d5df1b04a 100644 --- a/Moose Training/Documentation/DCSGroup.html +++ b/Moose Training/Documentation/DCSGroup.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSObject.html b/Moose Training/Documentation/DCSObject.html index 44157433f..d536b3e22 100644 --- a/Moose Training/Documentation/DCSObject.html +++ b/Moose Training/Documentation/DCSObject.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSTask.html b/Moose Training/Documentation/DCSTask.html index 93585f188..adf8812c1 100644 --- a/Moose Training/Documentation/DCSTask.html +++ b/Moose Training/Documentation/DCSTask.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSTypes.html b/Moose Training/Documentation/DCSTypes.html index 2cf9f22b0..56ccd79ff 100644 --- a/Moose Training/Documentation/DCSTypes.html +++ b/Moose Training/Documentation/DCSTypes.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSUnit.html b/Moose Training/Documentation/DCSUnit.html index e09265c44..e40060e37 100644 --- a/Moose Training/Documentation/DCSUnit.html +++ b/Moose Training/Documentation/DCSUnit.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCSWorld.html b/Moose Training/Documentation/DCSWorld.html index e91ba3f3f..13b3fe634 100644 --- a/Moose Training/Documentation/DCSWorld.html +++ b/Moose Training/Documentation/DCSWorld.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DCStimer.html b/Moose Training/Documentation/DCStimer.html index b4af45ac2..b05ff053c 100644 --- a/Moose Training/Documentation/DCStimer.html +++ b/Moose Training/Documentation/DCStimer.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DEPLOYTASK.html b/Moose Training/Documentation/DEPLOYTASK.html index b57bf41c4..53467e608 100644 --- a/Moose Training/Documentation/DEPLOYTASK.html +++ b/Moose Training/Documentation/DEPLOYTASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DESTROYBASETASK.html b/Moose Training/Documentation/DESTROYBASETASK.html index 263a03453..aa3bef726 100644 --- a/Moose Training/Documentation/DESTROYBASETASK.html +++ b/Moose Training/Documentation/DESTROYBASETASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DESTROYGROUPSTASK.html b/Moose Training/Documentation/DESTROYGROUPSTASK.html index 2235e0590..baa779ad1 100644 --- a/Moose Training/Documentation/DESTROYGROUPSTASK.html +++ b/Moose Training/Documentation/DESTROYGROUPSTASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DESTROYRADARSTASK.html b/Moose Training/Documentation/DESTROYRADARSTASK.html index f246dfc10..cab844e6f 100644 --- a/Moose Training/Documentation/DESTROYRADARSTASK.html +++ b/Moose Training/Documentation/DESTROYRADARSTASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/DESTROYUNITTYPESTASK.html b/Moose Training/Documentation/DESTROYUNITTYPESTASK.html index 62898b2ee..f5ce3a192 100644 --- a/Moose Training/Documentation/DESTROYUNITTYPESTASK.html +++ b/Moose Training/Documentation/DESTROYUNITTYPESTASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/Database.html b/Moose Training/Documentation/Database.html index baef7069e..211aacd2c 100644 --- a/Moose Training/Documentation/Database.html +++ b/Moose Training/Documentation/Database.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -68,80 +70,42 @@

    Module Database

    -

    Manage sets of units and groups.

    +

    Manage the mission database.

    -

    #Database class

    -

    Mission designers can use the DATABASE class to build sets of units belonging to certain:

    +

    #DATABASE class

    +

    Mission designers can use the DATABASE class to refer to:

      -
    • Coalitions
    • -
    • Categories
    • -
    • Countries
    • -
    • Unit types
    • -
    • Starting with certain prefix strings.
    • +
    • UNITS
    • +
    • GROUPS
    • +
    • players
    • +
    • alive players
    • +
    • CLIENTS
    • +
    • alive CLIENTS
    -

    This list will grow over time. Planned developments are to include filters and iterators. -Additional filters will be added around Zone#ZONEs, Radiuses, Active players, ... -More iterators will be implemented in the near future ...

    - -

    Administers the Initial Sets of the Mission Templates as defined within the Mission Editor.

    - -

    DATABASE construction methods:

    -

    Create a new DATABASE object with the DATABASE.New method:

    - - - - -

    DATABASE filter criteria:

    -

    You can set filter criteria to define the set of units within the database. -Filter criteria are defined by:

    - - - -

    Once the filter criteria have been set for the DATABASE, you can start filtering using:

    - - - -

    Planned filter criteria within development are (so these are not yet available):

    - - +

    On top, for internal MOOSE administration purposes, the DATBASE administers the Unit and Gruop templates as defined within the Mission Editor.

    +

    Moose will automatically create one instance of the DATABASE class into the global object _DATABASE. +Moose refers to _DATABASE within the framework extensively, but you can also refer to the _DATABASE object within your missions if required.

    DATABASE iterators:

    -

    Once the filters have been defined and the DATABASE has been built, you can iterate the database with the available iterator methods. +

    You can iterate the database with the available iterator methods. The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. The following iterator methods are currently available within the DATABASE:

    -

    Planned iterators methods in development are (so these are not yet available):

    - - - -
    -

    Global(s)

    @@ -163,6 +127,12 @@ The following iterator methods are currently available within the DATABASE:

    + + + + @@ -178,13 +148,13 @@ The following iterator methods are currently available within the DATABASE:

    - + - + @@ -199,24 +169,18 @@ The following iterator methods are currently available within the DATABASE:

    + + + + - - - - - - - - @@ -240,25 +204,49 @@ The following iterator methods are currently available within the DATABASE:

    + + + + + + + + + + + + + + + + @@ -286,19 +274,13 @@ The following iterator methods are currently available within the DATABASE:

    - + - - - - - + @@ -313,24 +295,12 @@ The following iterator methods are currently available within the DATABASE:

    - - - - - - - - @@ -361,24 +331,6 @@ The following iterator methods are currently available within the DATABASE:

    - - - - - - - - - - - - @@ -388,15 +340,21 @@ The following iterator methods are currently available within the DATABASE:

    - + + + + + - +
    DATABASE:AddGroup(DCSGroup, GroupName)

    Adds a GROUP based on the GroupName in the DATABASE.

    +
    DATABASE:AddPlayer(UnitName, PlayerName) +

    Adds a player based on the Player Name in the DATABASE.

    DATABASE.ClassNameDATABASE.CLIENTSALIVE
    DATABASE.ClientsAliveDATABASE.ClassName DATABASE.DCSUnits +
    DATABASE:DeletePlayer(PlayerName) +

    Deletes a player from the DATABASE based on the Player Name.

    DATABASE:DeleteUnit(DCSUnitName)

    Deletes a Unit from the DATABASE based on the Unit Name.

    -
    DATABASE.Filter - -
    DATABASE.FilterMeta -
    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.

    +

    Iterate the DATABASE and call an iterator 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.

    +

    Iterate the DATABASE and call an iterator function for each CLIENT, providing the CLIENT to the function and optional parameters.

    +
    DATABASE:ForEachClientAlive(IteratorFunction, ...) +

    Iterate the DATABASE and call an iterator function for each ALIVE CLIENT, providing the CLIENT to the function and optional parameters.

    DATABASE:ForEachDCSUnit(IteratorFunction, ...) -

    Interate the DATABASE and call an interator function for each alive unit, providing the Unit and optional parameters.

    +

    Iterate the DATABASE and call an iterator function for each alive unit, providing the DCSUnit and optional parameters.

    +
    DATABASE:ForEachGroup(IteratorFunction, ...) +

    Iterate the DATABASE and call an iterator function for each alive GROUP, providing the GROUP 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.

    +

    Iterate the DATABASE and call an iterator function for each player, providing the player name and optional parameters.

    +
    DATABASE:ForEachPlayerAlive(IteratorFunction, ...) +

    Iterate the DATABASE and call an iterator function for each alive player, providing the Unit of the player and optional parameters.

    +
    DATABASE:ForEachUnit(IteratorFunction, ...) +

    Iterate the DATABASE and call an iterator function for each alive UNIT, providing the UNIT and optional parameters.

    DATABASE.PlayersDATABASE.PLAYERS
    DATABASE.PlayersAlive - -
    DATABASE:ScanEnvironment()DATABASE.PLAYERSALIVE DATABASE:Spawn(SpawnTemplate)

    Instantiate new Groups within the DCSRTE.

    -
    DATABASE.Statics -
    DATABASE.Templates -
    DATABASE:TraceDatabase() -

    Traces the current database contents in the log ...

    DATABASE:_EventOnPlayerLeaveUnit(Event)

    Handles the OnPlayerLeaveUnit event to clean the active players table.

    -
    DATABASE:_IsAliveDCSGroup(DCSGroup) - -
    DATABASE:_IsAliveDCSUnit(DCSUnit) - -
    DATABASE:_IsIncludeDCSUnit(DCSUnit) -
    DATABASE:_RegisterGroup(GroupTemplate)DATABASE:_RegisterPlayers() +

    Private method that registers all alive players in the mission.

    +
    DATABASE:_RegisterTemplate(GroupTemplate)

    Private method that registers new Group Templates within the DATABASE Object.

    DATABASE:_RegisterPlayers()DATABASE:_RegisterTemplates() -

    Private method that registers all alive players in the mission.

    +
    @@ -473,6 +431,32 @@ The following iterator methods are currently available within the DATABASE:

    + +DATABASE:AddPlayer(UnitName, PlayerName) + +
    +
    + +

    Adds a player based on the Player Name in the DATABASE.

    + +

    Parameters

    +
      +
    • + +

      UnitName :

      + +
    • +
    • + +

      PlayerName :

      + +
    • +
    +
    +
    +
    +
    + DATABASE:AddUnit(DCSUnit, DCSUnitName) @@ -513,9 +497,9 @@ The following iterator methods are currently available within the DATABASE:

    - #string - -DATABASE.ClassName + + +DATABASE.CLIENTSALIVE
    @@ -527,9 +511,9 @@ The following iterator methods are currently available within the DATABASE:

    - - -DATABASE.ClientsAlive + #string + +DATABASE.ClassName
    @@ -564,6 +548,27 @@ The following iterator methods are currently available within the DATABASE:

    +
    +
    +
    +
    + + +DATABASE:DeletePlayer(PlayerName) + +
    +
    + +

    Deletes a player from the DATABASE based on the Player Name.

    + +

    Parameter

    +
      +
    • + +

      PlayerName :

      + +
    • +
    @@ -585,34 +590,6 @@ The following iterator methods are currently available within the DATABASE:

    -
    -
    -
    -
    - - - -DATABASE.Filter - -
    -
    - - - -
    -
    -
    -
    - - - -DATABASE.FilterMeta - -
    -
    - - -
    @@ -702,7 +679,7 @@ The found Unit.

    -

    Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters.

    +

    Iterate the DATABASE and call an iterator function for the given set, providing the Object for each element within the set and optional parameters.

    Parameters

      @@ -739,7 +716,7 @@ self

    -

    Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters.

    +

    Iterate the DATABASE and call an iterator function for each CLIENT, providing the CLIENT to the function and optional parameters.

    Parameters

      @@ -765,20 +742,84 @@ self

      - -DATABASE:ForEachDCSUnit(IteratorFunction, ...) + +DATABASE:ForEachClientAlive(IteratorFunction, ...)
      -

      Interate the DATABASE and call an interator function for each alive unit, providing the Unit and optional parameters.

      +

      Iterate the DATABASE and call an iterator function for each ALIVE CLIENT, providing the CLIENT to the function and optional parameters.

      Parameters

      • #function IteratorFunction : -The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter.

        +The function that will be called when there is an alive CLIENT in the database. The function needs to accept a CLIENT parameter.

        + +
      • +
      • + +

        ... :

        + +
      • +
      +

      Return value

      + +

      #DATABASE: +self

      + +
      +
      +
      +
      + + +DATABASE:ForEachDCSUnit(IteratorFunction, ...) + +
      +
      + +

      Iterate the DATABASE and call an iterator function for each alive unit, providing the DCSUnit and optional parameters.

      + +

      Parameters

      +
        +
      • + +

        #function IteratorFunction : +The function that will be called when there is an alive unit in the database. The function needs to accept a DCSUnit parameter.

        + +
      • +
      • + +

        ... :

        + +
      • +
      +

      Return value

      + +

      #DATABASE: +self

      + +
      +
      +
      +
      + + +DATABASE:ForEachGroup(IteratorFunction, ...) + +
      +
      + +

      Iterate the DATABASE and call an iterator function for each alive GROUP, providing the GROUP and optional parameters.

      + +

      Parameters

      +
        +
      • + +

        #function IteratorFunction : +The function that will be called when there is an alive GROUP in the database. The function needs to accept a GROUP parameter.

      • @@ -803,7 +844,39 @@ self

        -

        Interate the DATABASE and call an interator function for each alive player, providing the Unit of the player and optional parameters.

        +

        Iterate the DATABASE and call an iterator function for each player, providing the player name and optional parameters.

        + +

        Parameters

        +
          +
        • + +

          #function IteratorFunction : +The function that will be called when there is an player in the database. The function needs to accept the player name.

          + +
        • +
        • + +

          ... :

          + +
        • +
        +

        Return value

        + +

        #DATABASE: +self

        + +
        +
      +
      +
      + + +DATABASE:ForEachPlayerAlive(IteratorFunction, ...) + +
      +
      + +

      Iterate the DATABASE and call an iterator function for each alive player, providing the Unit of the player and optional parameters.

      Parameters

        @@ -824,6 +897,38 @@ The function that will be called when there is an alive player in the database.

        #DATABASE: self

        +
      +
      +
      +
      + + +DATABASE:ForEachUnit(IteratorFunction, ...) + +
      +
      + +

      Iterate the DATABASE and call an iterator function for each alive UNIT, providing the UNIT and optional parameters.

      + +

      Parameters

      +
        +
      • + +

        #function IteratorFunction : +The function that will be called when there is an alive UNIT in the database. The function needs to accept a UNIT parameter.

        + +
      • +
      • + +

        ... :

        + +
      • +
      +

      Return value

      + +

      #DATABASE: +self

      +
      @@ -901,8 +1006,8 @@ DBObject = DATABASE:New()
      - -DATABASE.Players + +DATABASE.PLAYERS
      @@ -915,21 +1020,8 @@ DBObject = DATABASE:New()
      - -DATABASE.PlayersAlive - -
      -
      - - - -
      -
      -
      -
      - - -DATABASE:ScanEnvironment() + +DATABASE.PLAYERSALIVE
      @@ -993,20 +1085,6 @@ This method is used by the SPAWN class.

      #DATABASE: self

      -
      -
      -
      -
      - - - -DATABASE.Statics - -
      -
      - - -
      @@ -1021,27 +1099,6 @@ self

      -
    -
    -
    -
    - - -DATABASE:TraceDatabase() - -
    -
    - -

    Traces the current database contents in the log ...

    - - -

    (for debug reasons).

    - -

    Return value

    - -

    #DATABASE: -self

    -
    @@ -1145,84 +1202,6 @@ self

    - -DATABASE:_IsAliveDCSGroup(DCSGroup) - -
    -
    - - - -

    Parameter

    - -

    Return value

    - -

    #DATABASE: -self

    - -
    -
    -
    -
    - - -DATABASE:_IsAliveDCSUnit(DCSUnit) - -
    -
    - - - -

    Parameter

    - -

    Return value

    - -

    #DATABASE: -self

    - -
    -
    -
    -
    - - -DATABASE:_IsIncludeDCSUnit(DCSUnit) - -
    -
    - - - -

    Parameter

    - -

    Return value

    - -

    #DATABASE: -self

    - -
    -
    -
    -
    - DATABASE:_RegisterDatabase() @@ -1241,32 +1220,6 @@ self

    - -DATABASE:_RegisterGroup(GroupTemplate) - -
    -
    - -

    Private method that registers new Group Templates within the DATABASE Object.

    - -

    Parameter

    -
      -
    • - -

      #table GroupTemplate :

      - -
    • -
    -

    Return value

    - -

    #DATABASE: -self

    - -
    -
    -
    -
    - DATABASE:_RegisterPlayers() @@ -1280,6 +1233,45 @@ self

    #DATABASE: self

    +
    + +
    +
    + + +DATABASE:_RegisterTemplate(GroupTemplate) + +
    +
    + +

    Private method that registers new Group Templates within the DATABASE Object.

    + +

    Parameter

    +
      +
    • + +

      #table GroupTemplate :

      + +
    • +
    +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + +DATABASE:_RegisterTemplates() + +
    +
    + + +
    diff --git a/Moose Training/Documentation/Escort.html b/Moose Training/Documentation/Escort.html index 6da80cd1e..040d46ca3 100644 --- a/Moose Training/Documentation/Escort.html +++ b/Moose Training/Documentation/Escort.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -1859,6 +1861,9 @@ self

    + +

    self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, Seconds )

    +
    diff --git a/Moose Training/Documentation/Event.html b/Moose Training/Documentation/Event.html index 153c8cb07..1591464a5 100644 --- a/Moose Training/Documentation/Event.html +++ b/Moose Training/Documentation/Event.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/GOHOMETASK.html b/Moose Training/Documentation/GOHOMETASK.html index 3a3adccd4..be69f3990 100644 --- a/Moose Training/Documentation/GOHOMETASK.html +++ b/Moose Training/Documentation/GOHOMETASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/Group.html b/Moose Training/Documentation/Group.html index cfbc60f20..4e957bb03 100644 --- a/Moose Training/Documentation/Group.html +++ b/Moose Training/Documentation/Group.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -212,6 +214,12 @@ If the DCS Group object does not exist or is nil, the GROUP methods will return GROUP:GetCoalition()

    Returns the coalition of the DCS Group.

    + + + + GROUP:GetCountry() + +

    Returns the country of the DCS Group.

    @@ -1068,6 +1076,34 @@ The coalition side of the DCS Group.

    + +GROUP:GetCountry() + +
    +
    + +

    Returns the country of the DCS Group.

    + +

    Return values

    +
      +
    1. + +

      DCScountry#country.id: +The country identifier.

      + +
    2. +
    3. + +

      #nil: +The DCS Group is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + GROUP:GetDCSGroup() diff --git a/Moose Training/Documentation/GroupSet.html b/Moose Training/Documentation/GroupSet.html new file mode 100644 index 000000000..140e7e19a --- /dev/null +++ b/Moose Training/Documentation/GroupSet.html @@ -0,0 +1,644 @@ + + + + + + +
    +
    + +
    +
    +
    +
    + +
    +

    Module GroupSet

    + +

    Create and manage a set of groups.

    + + + +

    #GROUPSET class

    +

    Mission designers can use the GROUPSET class to build sets of groups belonging to certain:

    + +
      +
    • Coalitions
    • +
    • Categories
    • +
    • Countries
    • +
    • Starting with certain prefix strings.
    • +
    + +

    GROUPSET construction methods:

    +

    Create a new GROUPSET object with the GROUPSET.New method:

    + + + + +

    GROUPSET filter criteria:

    +

    You can set filter criteria to define the set of groups within the GROUPSET. +Filter criteria are defined by:

    + + + +

    Once the filter criteria have been set for the GROUPSET, you can start filtering using:

    + + + +

    Planned filter criteria within development are (so these are not yet available):

    + + + + +

    GROUPSET iterators:

    +

    Once the filters have been defined and the GROUPSET has been built, you can iterate the GROUPSET with the available iterator methods. +The iterator methods will walk the GROUPSET set, and call for each element within the set a function that you provide. +The following iterator methods are currently available within the GROUPSET:

    + + + +

    Planned iterators methods in development are (so these are not yet available):

    + + + + +

    Global(s)

    + + + + + +
    GROUPSET + +
    +

    Type GROUPSET

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GROUPSET:AddInDatabase(Event) +

    Handles the Database to check on an event (birth) that the Object was added in the Database.

    +
    GROUPSET.ClassName + +
    GROUPSET.Filter + +
    GROUPSET:FilterCategories(Categories) +

    Builds a set of groups out of categories.

    +
    GROUPSET:FilterCoalitions(Coalitions) +

    Builds a set of groups of coalitions.

    +
    GROUPSET:FilterCountries(Countries) +

    Builds a set of groups of defined countries.

    +
    GROUPSET.FilterMeta + +
    GROUPSET:FilterPrefixes(Prefixes) +

    Builds a set of groups of defined unit prefixes.

    +
    GROUPSET:FilterStart() +

    Starts the filtering.

    +
    GROUPSET:FindInDatabase(Event) +

    Handles the Database to check on any event that Object exists in the Database.

    +
    GROUPSET:FindUnit(GroupName) +

    Finds a Unit based on the Unit Name.

    +
    GROUPSET:ForEachUnit(IteratorFunction, ...) +

    Interate the GROUPSET and call an interator function for each alive GROUP, providing the GROUP and optional parameters.

    +
    GROUPSET:IsIncludeObject(MooseGroup) + +
    GROUPSET:New() +

    Creates a new GROUPSET object, building a set of groups belonging to a coalitions, categories, countries, types or with defined prefix names.

    +
    GROUPSET.Units + +
    + +

    Global(s)

    +
    +
    + + #GROUPSET + +GROUPSET + +
    +
    + + + +
    +
    +

    Type GroupSet

    + +

    Type GROUPSET

    + +

    GROUPSET class

    + +

    Field(s)

    +
    +
    + + +GROUPSET:AddInDatabase(Event) + +
    +
    + +

    Handles the Database to check on an event (birth) that the Object was added in the Database.

    + + +

    This is required, because sometimes the _DATABASE birth event gets called later than the SET birth event!

    + +

    Parameter

    + +

    Return values

    +
      +
    1. + +

      #string: +The name of the GROUP

      + +
    2. +
    3. + +

      #table: +The GROUP

      + +
    4. +
    +
    +
    +
    +
    + + #string + +GROUPSET.ClassName + +
    +
    + + + +
    +
    +
    +
    + + + +GROUPSET.Filter + +
    +
    + + + +
    +
    +
    +
    + + +GROUPSET:FilterCategories(Categories) + +
    +
    + +

    Builds a set of groups out of categories.

    + + +

    Possible current categories are plane, helicopter, ground, ship.

    + +

    Parameter

    +
      +
    • + +

      #string Categories : +Can take the following values: "plane", "helicopter", "ground", "ship".

      + +
    • +
    +

    Return value

    + +

    #GROUPSET: +self

    + +
    +
    +
    +
    + + +GROUPSET:FilterCoalitions(Coalitions) + +
    +
    + +

    Builds a set of groups of coalitions.

    + + +

    Possible current coalitions are red, blue and neutral.

    + +

    Parameter

    +
      +
    • + +

      #string Coalitions : +Can take the following values: "red", "blue", "neutral".

      + +
    • +
    +

    Return value

    + +

    #GROUPSET: +self

    + +
    +
    +
    +
    + + +GROUPSET:FilterCountries(Countries) + +
    +
    + +

    Builds a set of groups of defined countries.

    + + +

    Possible current countries are those known within DCS world.

    + +

    Parameter

    +
      +
    • + +

      #string Countries : +Can take those country strings known within DCS world.

      + +
    • +
    +

    Return value

    + +

    #GROUPSET: +self

    + +
    +
    +
    +
    + + + +GROUPSET.FilterMeta + +
    +
    + + + +
    +
    +
    +
    + + +GROUPSET:FilterPrefixes(Prefixes) + +
    +
    + +

    Builds a set of groups of defined unit prefixes.

    + + +

    All the groups starting with the given prefixes will be included within the set.

    + +

    Parameter

    +
      +
    • + +

      #string Prefixes : +The prefix of which the group name starts with.

      + +
    • +
    +

    Return value

    + +

    #GROUPSET: +self

    + +
    +
    +
    +
    + + +GROUPSET:FilterStart() + +
    +
    + +

    Starts the filtering.

    + +

    Return value

    + +

    #GROUPSET: +self

    + +
    +
    +
    +
    + + +GROUPSET:FindInDatabase(Event) + +
    +
    + +

    Handles the Database to check on any event that Object exists in the Database.

    + + +

    This is required, because sometimes the _DATABASE event gets called later than the SET event or vise versa!

    + +

    Parameter

    + +

    Return values

    +
      +
    1. + +

      #string: +The name of the GROUP

      + +
    2. +
    3. + +

      #table: +The GROUP

      + +
    4. +
    +
    +
    +
    +
    + + +GROUPSET:FindUnit(GroupName) + +
    +
    + +

    Finds a Unit based on the Unit Name.

    + +

    Parameter

    +
      +
    • + +

      #string GroupName :

      + +
    • +
    +

    Return value

    + +

    Group#GROUP: +The found Unit.

    + +
    +
    +
    +
    + + +GROUPSET:ForEachUnit(IteratorFunction, ...) + +
    +
    + +

    Interate the GROUPSET and call an interator function for each alive GROUP, providing the GROUP and optional parameters.

    + +

    Parameters

    +
      +
    • + +

      #function IteratorFunction : +The function that will be called when there is an alive GROUP in the GROUPSET. The function needs to accept a GROUP parameter.

      + +
    • +
    • + +

      ... :

      + +
    • +
    +

    Return value

    + +

    #GROUPSET: +self

    + +
    +
    +
    +
    + + +GROUPSET:IsIncludeObject(MooseGroup) + +
    +
    + + + +

    Parameter

    + +

    Return value

    + +

    #GROUPSET: +self

    + +
    +
    +
    +
    + + +GROUPSET:New() + +
    +
    + +

    Creates a new GROUPSET object, building a set of groups belonging to a coalitions, categories, countries, types or with defined prefix names.

    + +

    Return value

    + +

    #GROUPSET:

    + + +

    Usage:

    +
    -- Define a new GROUPSET Object. This DBObject will contain a reference to all alive GROUPS.
    +DBObject = GROUPSET:New()
    + +
    +
    +
    +
    + + + +GROUPSET.Units + +
    +
    + + + +
    +
    + +
    + +
    + + diff --git a/Moose Training/Documentation/MISSION.html b/Moose Training/Documentation/MISSION.html index 0e909bbc5..785f9854a 100644 --- a/Moose Training/Documentation/MISSION.html +++ b/Moose Training/Documentation/MISSION.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -66,7 +68,7 @@
    -

    Module MISSION

    +

    Module Mission

    A MISSION is the main owner of a Mission orchestration within MOOSE .

    @@ -86,12 +88,6 @@ A CLIENT needs to be registered within the MISSIONSCHEDULER - - - - TaskComplete - - @@ -101,8 +97,8 @@ A CLIENT needs to be registered within the Type MISSION - +

    Type MISSION

    +
    + + + + @@ -466,24 +468,6 @@ A CLIENT needs to be registered within the -
    - - #boolean - -TaskComplete - -
    -
    - - - - -

    For each Client, check for each Task the state and evolve the mission. - This flag will indicate if the Task of the Client is Complete.

    -
    @@ -511,8 +495,13 @@ A CLIENT needs to be registered within the Type MISSION -

    Field(s)

    +

    Type Mission

    + +

    Type MISSION

    + +

    The MISSION class

    + +

    Field(s)

    @@ -550,10 +539,10 @@ Client is the CLIENT object. The object must have been

    Usage:

    Add a number of Client objects to the Mission.
    -	Mission:AddClient( CLIENT:New( 'US UH-1H*HOT-Deploy Troops 1', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() )
    -	Mission:AddClient( CLIENT:New( 'US UH-1H*RAMP-Deploy Troops 3', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() )
    -	Mission:AddClient( CLIENT:New( 'US UH-1H*HOT-Deploy Troops 2', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() )
    -	Mission:AddClient( CLIENT:New( 'US UH-1H*RAMP-Deploy Troops 4', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() )
    + Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 1', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) + Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 3', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) + Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 2', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) + Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 4', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() )
    @@ -885,6 +874,20 @@ env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" ) + +
    +
    +
    + + #string + +MISSION.MissionBriefing + +
    +
    + + +
    @@ -1197,7 +1200,7 @@ local Mission = MISSIONSCHEDULER.AddMission( 'Rescue secret agent', 'Tactical',
    - + #MISSION.Clients MISSION._Clients @@ -1237,6 +1240,8 @@ local Mission = MISSIONSCHEDULER.AddMission( 'Rescue secret agent', 'Tactical',
    +

    Type MISSION.Clients

    +

    Type MISSIONSCHEDULER

    The MISSIONSCHEDULER is an OBJECT and is the main scheduler of ALL active MISSIONs registered within this scheduler.

    @@ -1339,7 +1344,7 @@ MissionFind = MISSIONSCHEDULER:FindMission( 'Russia Transport Troops SA-6' )
    - + #MISSIONSCHEDULER.MISSIONS MISSIONSCHEDULER.Missions @@ -1491,6 +1496,9 @@ MISSIONSCHEDULER:RemoveMission( 'Russia Transport Troops SA-6' ) + +

    MISSIONSCHEDULER.SchedulerId = routines.scheduleFunction( MISSIONSCHEDULER.Scheduler, { }, 0, 2 )

    +
    @@ -1628,6 +1636,8 @@ MISSIONSCHEDULER:RemoveMission( 'Russia Transport Troops SA-6' )
    +

    Type MISSIONSCHEDULER.MISSIONS

    + diff --git a/Moose Training/Documentation/MOVEMENT.html b/Moose Training/Documentation/MOVEMENT.html index 5d35d954c..ef93fb7c1 100644 --- a/Moose Training/Documentation/MOVEMENT.html +++ b/Moose Training/Documentation/MOVEMENT.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/Menu.html b/Moose Training/Documentation/Menu.html index 286cd3f1f..7086e16b5 100644 --- a/Moose Training/Documentation/Menu.html +++ b/Moose Training/Documentation/Menu.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/Message.html b/Moose Training/Documentation/Message.html index e7fb13b06..5b3fd432f 100644 --- a/Moose Training/Documentation/Message.html +++ b/Moose Training/Documentation/Message.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/MissileTrainer.html b/Moose Training/Documentation/MissileTrainer.html index 8e21f7b5b..10678955f 100644 --- a/Moose Training/Documentation/MissileTrainer.html +++ b/Moose Training/Documentation/MissileTrainer.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/NOTASK.html b/Moose Training/Documentation/NOTASK.html index 8aeb474b4..66d88c1ba 100644 --- a/Moose Training/Documentation/NOTASK.html +++ b/Moose Training/Documentation/NOTASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/PICKUPTASK.html b/Moose Training/Documentation/PICKUPTASK.html index 079600693..50e1e220d 100644 --- a/Moose Training/Documentation/PICKUPTASK.html +++ b/Moose Training/Documentation/PICKUPTASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/ROUTETASK.html b/Moose Training/Documentation/ROUTETASK.html index b53f143b3..efd64169e 100644 --- a/Moose Training/Documentation/ROUTETASK.html +++ b/Moose Training/Documentation/ROUTETASK.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/STAGE.html b/Moose Training/Documentation/STAGE.html index c45a68326..a4476cf94 100644 --- a/Moose Training/Documentation/STAGE.html +++ b/Moose Training/Documentation/STAGE.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -274,6 +276,16 @@ + +
    MISSION.AddClient(CLIENT, self, Client) @@ -197,6 +193,12 @@ A CLIENT needs to be registered within the MISSION:Meta() +
    MISSION.MissionBriefing +
    STAGE.WaitTime +
    + +

    Type STAGEBRIEF

    + + + +
    STAGEBRIEF.StageBriefingTime +
    @@ -809,6 +821,23 @@

    Type STAGEARRIVE

    +

    Type STAGEBRIEF

    +

    Field(s)

    +
    +
    + + + +STAGEBRIEF.StageBriefingTime + +
    +
    + + + +
    +
    +

    Type STAGELANDING

    Type STAGEROUTE

    diff --git a/Moose Training/Documentation/Scheduler.html b/Moose Training/Documentation/Scheduler.html index 0b09abf54..59557d5cf 100644 --- a/Moose Training/Documentation/Scheduler.html +++ b/Moose Training/Documentation/Scheduler.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -91,8 +93,6 @@ - -

    Global(s)

    @@ -120,12 +120,6 @@ - - - - @@ -138,6 +132,12 @@ + + + +
    SCHEDULER.Repeat -
    SCHEDULER:Scheduler() -
    SCHEDULER:Stop()

    Stops the scheduler.

    +
    SCHEDULER:_Scheduler() +
    @@ -253,19 +253,6 @@ self

    - -
    -
    -
    - - -SCHEDULER:Scheduler() - -
    -
    - - -
    @@ -302,6 +289,19 @@ self

    #SCHEDULER: self

    + +
    +
    +
    + + +SCHEDULER:_Scheduler() + +
    +
    + + +
    diff --git a/Moose Training/Documentation/Scoring.html b/Moose Training/Documentation/Scoring.html index bcecc4626..199f2d13d 100644 --- a/Moose Training/Documentation/Scoring.html +++ b/Moose Training/Documentation/Scoring.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/Sead.html b/Moose Training/Documentation/Sead.html index e8bf12d86..68a532b60 100644 --- a/Moose Training/Documentation/Sead.html +++ b/Moose Training/Documentation/Sead.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • diff --git a/Moose Training/Documentation/Set.html b/Moose Training/Documentation/Set.html index e43329a31..5d11030b7 100644 --- a/Moose Training/Documentation/Set.html +++ b/Moose Training/Documentation/Set.html @@ -42,11 +42,12 @@
  • Event
  • GOHOMETASK
  • Group
  • -
  • MISSION
  • +
  • GroupSet
  • MOVEMENT
  • Menu
  • Message
  • MissileTrainer
  • +
  • Mission
  • NOTASK
  • PICKUPTASK
  • ROUTETASK
  • @@ -59,6 +60,7 @@
  • StaticObject
  • TASK
  • Unit
  • +
  • UnitSet
  • Zone
  • env
  • land
  • @@ -154,111 +156,21 @@ The following iterator methods are currently available within the SET:

    Type SET

    - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -268,99 +180,33 @@ The following iterator methods are currently available within the SET:

    - + - - - - - - - - - - - - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - @@ -370,45 +216,15 @@ The following iterator methods are currently available within the SET:

    - + - + - - - - - - - - - - - - - - - - - - - -
    SET:AddUnit(UnitToAdd) -

    Finds a Unit based on the Unit Name.

    -
    SET.ClassName
    SET.ClientsSET.Database
    SET.ClientsAliveSET:Flush() - -
    SET.DCSGroups - -
    SET.DCSGroupsAlive - -
    SET.DCSUnits - -
    SET.DCSUnitsAlive - -
    SET.Filter - -
    SET:FilterCategories(Categories) -

    Builds a set of units out of categories.

    -
    SET:FilterCoalitions(Coalitions) -

    Builds a set of units of coalitons.

    -
    SET:FilterCountries(Countries) -

    Builds a set of units of defined countries.

    -
    SET:FilterGroupPrefixes(Prefixes) -

    Builds a set of units of defined group prefixes.

    -
    SET.FilterMeta - -
    SET:FilterStart() -

    Starts the filtering.

    -
    SET:FilterTypes(Types) -

    Builds a set of units of defined unit types.

    -
    SET:FilterUnitPrefixes(Prefixes) -

    Builds a set of units of defined unit prefixes.

    -
    SET:FindUnit(UnitName) -

    Finds a Unit based on the Unit Name.

    +

    Flushes the current SET contents in the log ...

    SET:ForEachClient(IteratorFunction, ...)SET:IsIncludeObject(Object) -

    Interate the SET and call an interator function for each client, providing the Client to the function and optional parameters.

    +

    Decides whether to include the Object

    SET:ForEachDCSUnitAlive(IteratorFunction, ...) -

    Interate the SET and call an interator function for each alive unit, providing the Unit and optional parameters.

    -
    SET:ForEachPlayer(IteratorFunction, ...) -

    Interate the SET and call an interator function for each alive player, providing the Unit of the player and optional parameters.

    -
    SET.Groups - -
    SET.GroupsAlive - -
    SET.NavPoints - -
    SET:New()SET:New(Database)

    Creates a new SET object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names.

    SET.PlayersSET.Set
    SET.PlayersAliveSET:_Add(ObjectName, Object) - -
    SET:ScanEnvironment() - -
    SET.Statics - -
    SET.Templates - -
    SET:TraceDatabase() -

    Traces the current SET contents in the log ...

    -
    SET.Units - -
    SET.UnitsAlive - +

    Adds a Object based on the Object Name.

    SET:_EventOnBirth(Event) -

    Handles the OnBirth event for the alive units set.

    +

    Handles the OnBirth event for the Set.

    SET:_EventOnPlayerEnterUnit(Event)SET:_FilterStart() -

    Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied).

    +

    Starts the filtering for the defined collection.

    SET:_EventOnPlayerLeaveUnit(Event)SET:_Find(ObjectName) -

    Handles the OnPlayerLeaveUnit event to clean the active players table.

    -
    SET:_IsAliveDCSGroup(DCSGroup) - -
    SET:_IsAliveDCSUnit(DCSUnit) - -
    SET:_IsIncludeDCSUnit(DCSUnit) - -
    SET:_RegisterDatabase() -

    Private method that registers all datapoints within in the mission.

    -
    SET:_RegisterPlayers() -

    Private method that registers all alive players in the mission.

    +

    Finds an Object based on the Object Name.

    @@ -438,32 +254,6 @@ The following iterator methods are currently available within the SET:

    - -SET:AddUnit(UnitToAdd) - -
    -
    - -

    Finds a Unit based on the Unit Name.

    - -

    Parameter

    - -

    Return value

    - -

    Unit#UNIT: -The added Unit.

    - -
    -
    -
    -
    - #string SET.ClassName @@ -479,8 +269,8 @@ The added Unit.

    - -SET.Clients + +SET.Database
    @@ -492,322 +282,21 @@ The added Unit.

    - - -SET.ClientsAlive + +SET:Flush()
    - - -
    -
    -
    -
    - - - -SET.DCSGroups - -
    -
    - - - -
    -
    -
    -
    - - - -SET.DCSGroupsAlive - -
    -
    - - - -
    -
    -
    -
    - - - -SET.DCSUnits - -
    -
    - - - -
    -
    -
    -
    - - - -SET.DCSUnitsAlive - -
    -
    - - - -
    -
    -
    -
    - - - -SET.Filter - -
    -
    - - - -
    -
    -
    -
    - - -SET:FilterCategories(Categories) - -
    -
    - -

    Builds a set of units out of categories.

    +

    Flushes the current SET contents in the log ...

    -

    Possible current categories are plane, helicopter, ground, ship.

    - -

    Parameter

    -
      -
    • - -

      #string Categories : -Can take the following values: "plane", "helicopter", "ground", "ship".

      - -
    • -
    -

    Return value

    - -

    #SET: -self

    - -
    -
    -
    -
    - - -SET:FilterCoalitions(Coalitions) - -
    -
    - -

    Builds a set of units of coalitons.

    - - -

    Possible current coalitions are red, blue and neutral.

    - -

    Parameter

    -
      -
    • - -

      #string Coalitions : -Can take the following values: "red", "blue", "neutral".

      - -
    • -
    -

    Return value

    - -

    #SET: -self

    - -
    -
    -
    -
    - - -SET:FilterCountries(Countries) - -
    -
    - -

    Builds a set of units of defined countries.

    - - -

    Possible current countries are those known within DCS world.

    - -

    Parameter

    -
      -
    • - -

      #string Countries : -Can take those country strings known within DCS world.

      - -
    • -
    -

    Return value

    - -

    #SET: -self

    - -
    -
    -
    -
    - - -SET:FilterGroupPrefixes(Prefixes) - -
    -
    - -

    Builds a set of units of defined group prefixes.

    - - -

    All the units starting with the given group prefixes will be included within the set.

    - -

    Parameter

    -
      -
    • - -

      #string Prefixes : -The prefix of which the group name where the unit belongs to starts with.

      - -
    • -
    -

    Return value

    - -

    #SET: -self

    - -
    -
    -
    -
    - - - -SET.FilterMeta - -
    -
    - - - -
    -
    -
    -
    - - -SET:FilterStart() - -
    -
    - -

    Starts the filtering.

    +

    (for debug reasons).

    Return value

    -

    #SET: -self

    - -
    -
    -
    -
    - - -SET:FilterTypes(Types) - -
    -
    - -

    Builds a set of units of defined unit types.

    - - -

    Possible current types are those types known within DCS world.

    - -

    Parameter

    -
      -
    • - -

      #string Types : -Can take those type strings known within DCS world.

      - -
    • -
    -

    Return value

    - -

    #SET: -self

    - -
    -
    -
    -
    - - -SET:FilterUnitPrefixes(Prefixes) - -
    -
    - -

    Builds a set of units of defined unit prefixes.

    - - -

    All the units starting with the given prefixes will be included within the set.

    - -

    Parameter

    -
      -
    • - -

      #string Prefixes : -The prefix of which the unit name starts with.

      - -
    • -
    -

    Return value

    - -

    #SET: -self

    - -
    -
    -
    -
    - - -SET:FindUnit(UnitName) - -
    -
    - -

    Finds a Unit based on the Unit Name.

    - -

    Parameter

    -
      -
    • - -

      #string UnitName :

      - -
    • -
    -

    Return value

    - -

    Unit#UNIT: -The found Unit.

    +

    #string: +A string with the names of the objects.

    @@ -851,25 +340,19 @@ self

    - -SET:ForEachClient(IteratorFunction, ...) + +SET:IsIncludeObject(Object)
    -

    Interate the SET and call an interator function for each client, providing the Client to the function and optional parameters.

    +

    Decides whether to include the Object

    -

    Parameters

    +

    Parameter

    • -

      #function IteratorFunction : -The function that will be called when there is an alive player in the SET. The function needs to accept a CLIENT parameter.

      - -
    • -
    • - -

      ... :

      +

      #table Object :

    @@ -878,125 +361,27 @@ The function that will be called when there is an alive player in the SET. The f

    #SET: self

    -
    -
    -
    -
    - - -SET:ForEachDCSUnitAlive(IteratorFunction, ...) - -
    -
    - -

    Interate the SET and call an interator function for each alive unit, providing the Unit and optional parameters.

    - -

    Parameters

    -
      -
    • - -

      #function IteratorFunction : -The function that will be called when there is an alive unit in the SET. The function needs to accept a UNIT parameter.

      - -
    • -
    • - -

      ... :

      - -
    • -
    -

    Return value

    - -

    #SET: -self

    - -
    -
    -
    -
    - - -SET:ForEachPlayer(IteratorFunction, ...) - -
    -
    - -

    Interate the SET and call an interator function for each alive player, providing the Unit of the player and optional parameters.

    - -

    Parameters

    -
      -
    • - -

      #function IteratorFunction : -The function that will be called when there is an alive player in the SET. The function needs to accept a UNIT parameter.

      - -
    • -
    • - -

      ... :

      - -
    • -
    -

    Return value

    - -

    #SET: -self

    - -
    -
    -
    -
    - - - -SET.Groups - -
    -
    - - - -
    -
    -
    -
    - - - -SET.GroupsAlive - -
    -
    - - - -
    -
    -
    -
    - - - -SET.NavPoints - -
    -
    - - -
    -SET:New() +SET:New(Database)

    Creates a new SET object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names.

    +

    Parameter

    +
      +
    • + +

      Database :

      + +
    • +

    Return value

    #SET:

    @@ -1012,8 +397,8 @@ DBObject = SET:New()
    - -SET.Players + +SET.Set
    @@ -1025,104 +410,31 @@ DBObject = SET:New()
    - - -SET.PlayersAlive + +SET:_Add(ObjectName, Object)
    +

    Adds a Object based on the Object Name.

    +

    Parameters

    +
      +
    • + +

      #string ObjectName :

      -
    -
    -
    -
    - - -SET:ScanEnvironment() - -
    -
    - - - -
    -
    -
    -
    - - - -SET.Statics - -
    -
    - - - -
    -
    -
    -
    - - - -SET.Templates - -
    -
    - - - -
    -
    -
    -
    - - -SET:TraceDatabase() - -
    -
    - -

    Traces the current SET contents in the log ...

    - - -

    (for debug reasons).

    + +
  • + +

    #table Object :

    +
  • +

    Return value

    -

    #SET: -self

    - -
    -
    -
    -
    - - - -SET.Units - -
    -
    - - - -
    -
    -
    -
    - - - -SET.UnitsAlive - -
    -
    - - +

    #table: +The added Object.

    @@ -1135,7 +447,7 @@ self

    -

    Handles the OnBirth event for the alive units set.

    +

    Handles the OnBirth event for the Set.

    Parameter

    From 69c11ca1c6e14f109da7ab3d5d3aefaf2e73b1cd Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 27 May 2016 14:20:03 +0200 Subject: [PATCH 07/12] Bugfix GroupSet --- Moose Development/Moose/GroupSet.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/GroupSet.lua b/Moose Development/Moose/GroupSet.lua index f3aea95fc..6ef3e8488 100644 --- a/Moose Development/Moose/GroupSet.lua +++ b/Moose Development/Moose/GroupSet.lua @@ -57,7 +57,6 @@ Include.File( "Set" ) -- @extends Set#SET GROUPSET = { ClassName = "GROUPSET", - Units = {}, Filter = { Coalitions = nil, Categories = nil, @@ -100,7 +99,7 @@ end -- @param #GROUPSET self -- @param #string GroupName -- @return Group#GROUP The found Group. -function GROUPSET:FindUnit( GroupName ) +function GROUPSET:FindGroup( GroupName ) local GroupFound = self.Set[GroupName] return GroupFound @@ -228,7 +227,7 @@ end -- @param #GROUPSET self -- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the GROUPSET. The function needs to accept a GROUP parameter. -- @return #GROUPSET self -function GROUPSET:ForEachUnit( IteratorFunction, ... ) +function GROUPSET:ForEachGroup( IteratorFunction, ... ) self:F2( arg ) self:ForEach( IteratorFunction, arg, self.Set ) From ac1d9485cdc37bb64acd20a7a1596539dcad7caa Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 27 May 2016 14:22:56 +0200 Subject: [PATCH 08/12] Small bugfixes in GroupSet.lua --- .../l10n/DEFAULT/Moose.lua | 2 +- Moose Mission Setup/Moose.lua | 2 +- .../Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz | Bin 199246 -> 199246 bytes .../Moose_Test_DATABASE.miz | Bin 138994 -> 138994 bytes .../Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz | Bin 134430 -> 134430 bytes .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz | Bin 160085 -> 160085 bytes .../Moose_Test_MISSILETRAINER.miz | Bin 219379 -> 219379 bytes .../Moose_Test_SEAD/MOOSE_Test_SEAD.miz | Bin 126683 -> 126683 bytes .../Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz | Bin 152100 -> 152100 bytes .../MOOSE_Test_SPAWN_Repeat.miz | Bin 126244 -> 126244 bytes .../MOOSE_Test_TASK_Pickup_and_Deploy.miz | Bin 132845 -> 132845 bytes .../Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz | Bin 141864 -> 141864 bytes Moose Training/Documentation/GroupSet.html | 90 +++++++----------- 13 files changed, 37 insertions(+), 57 deletions(-) diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index a555b44df..9b72a9419 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160527_1352' ) +env.info( 'Moose Generation Timestamp: 20160527_1422' ) local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index a555b44df..9b72a9419 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160527_1352' ) +env.info( 'Moose Generation Timestamp: 20160527_1422' ) local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) diff --git a/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz b/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz index 4e11868b22543c1c5efdb283f6ad7dcbc8028a73..c30a01530d09674af9a3517586e45b382cce20ff 100644 GIT binary patch delta 102154 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 O0Wfe5$q%*C1AGZPRU4}S delta 102154 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 delta 102152 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 L$q%=02?DPJTG$vI delta 102151 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 WFmMjZ54h0*FmMjZ54T0_0hR#?D<0?o delta 102162 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 Wn70@G47kw&n70@G47Ww?0hR$hu>f8G diff --git a/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz b/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz index d661eba53fc7ee176e19fc56ab4f218d11b1f8ff..90a4339679bf93b66503f7bafca34da540e6e3a4 100644 GIT binary patch delta 102166 zcmV(vK3>3NGZse)z@qu+txRkpgrQ73To#jfWi+ zs0qkI2xgoY86wDJ zU0MCAa<_(O$uLI!E-o&LpQ9{E$GOPTaeo2e9HHV*gS0#D$0cAiF3!_TyzM7v=S3$S z7FpT{evnoY<|vCgB#fW58|Qg+#)(SSJTA7fEX`!v>-1`C7@hXxZnGEl^B6E$)UB%m z2p1yliQVnPBW(zI=*ag|hVFuyr1(Z@gx5`njY4$Jqv2UBit{*+4Q4oq{+VV!$A1~t z0AyRWlagUw(&;$qcLCOJ6OYIK`T9&raUY7LpDzli`3u%UAa=%)7$Z0kanT7al^|3p z9&`7ybRf=)Vzjoj)E`HS;~Z#&X?C`BnS4%`-lU_+5mtJcMA(hv5vJOnpPv3R?i64c z&o~D4)AaLrbW$Jz;;B+}7ID%68h=*CXGu>KlToZd;@{wgL|_4pVu&cuWYA(1gv4Nv zkkRIM%&DKsxhjz`ox;>JDc>-@bj5yFNqgNOB2Ev?JQ;T5t3X^t{c#L0ViYA=u1nKR zNfe#yn9EO@T1b!IDR)atrDX?~9K=OLS(}LI-5z!%>8Kq?T!6ij_Eh=&DO_aN#*ut=d98}%W$iL~EEWw2gOpjCsMnk5$G zS(Qyzn57oEDL_yPi^e!v_J8$t(I7GnvN0%%$_`TZC*m^AKIZ~$g0S*mA_c1cvZ(?& zZKtyhm1`BBq|}fdi>gW^nfM&m6{bOwfaB+i#!In+h>b4|Vxet10FyN44A^MPcI|<& z7f{+H?ss#@sD#73j&MeakU~ma7>)<0ai;wne;|$J;s+zwabpHXk$-Zn6Zu)xKCKfu z4j@pP!8k9(X$&UEM1HuhG$nt4US87CrgcjZxz>$lp+=K}tb@&d6f{)sUn>S6~z!On*&06FJW)t;1W z%16JyB=f0XRoSgFS#>7k(UjU#O`)p5Srw%4Y0TvY@tK+LqJJo^F(8URdSuoZ(+CIn zn|6)6a#TFg0O4jt3$2D0;6jF|;4UFNmJ8PM1&{;w0!M16QRg$y02psw>3PZ;@`sXIboMHp1?=Rkif~V&%8X zOTg_s93_gJPwW6@x}xE1Vv^7j5UnEyBODl;9;JJ`Hh(#WTJ#tIgkH60QF9Pz)P^>=>)54(xP>T$_ zy;%Kmd6`r+ozP%(K7&s9V;zOhC{frXSC)F%*PWLMCMi4Z8yvhsgl=C+b~5{PRBny5n7 zW>C*|u4}u%x|}F?po@Ro692R#%bfOld2CHDMStCY0$+wgl*J-eDrH&;n*C_l#R>9v zG4>XSQ%k%=+O6AaqfE<1Fe8(>K(C0$&@Ov+J;+OQn}p`Z>kXQjr1vdJI>r#B4( z3Iv9uG#M6JJCHR*VNFtarQj16K2h*%7k+JN29l+^%7XaK7p4FufS#Sj8O-M99aQ1p z0DsK6q)Fqm%2X?Gt;Dq=+cH&+a9Zzfq2kOI!EYZOU?#MCrGe__~0r0_Z*f>(&f2>AP@B1;7K zpp$j}21R5;(R7m@VgFt%D_uG?+NvEUFMl453xX#gGtJ7UJWls;1hTn?RGxvm*7?#)2_Ktk(q* znMI?vXQ8%D%VH2g@ql*5p3M}&3>W!PyZJIWwn@KM>E!x%)zRwwI$Cvgbl=j*gnx-i zn9Nf?S;n{1*B1_x!Kfb}q+`g0=#UJacm`9!7od^uh^9|7OvW)ogg%H?*o`~M033uS zeX)pnf;mdqJcv$;wnHim0Rm(U1yL)hgK-~wi7U(hXhH%tG?dEfWcTdBY-@&@ z#S6xNDVD=mEwMyzq?Gz;^semldwOoMi-0~IK7&O&u zw)}>Smh*^~6Z%--)lKm;g)u1TFd2>e5l^MtR;1UH9Mg)rj%ES0LZORo(X^omL&JNC z4{UY{IAI{0oC01e;Pnkj>M@4p>RT~htYW-a#dvWBW2luV+l3l0@ejxhDu39AS1&L{ za}Fo+{aU_X)B99@C(=M`MDcQUM>DmI6a94kk9O-H;M|ooG5&rS zCIz@miL`NBW?Pm7aXj6S41Y_IY8eQ<8vDRkQB%Myg*8DM>Xd|O2N)iT$YaR*;$A=} z&6|v+oq-czIZh@hu}mhDrd_v8jfMT%OXD+F=5-Slbvlcv4tyBH#M=a0m^kX3!>=4; z_0kZ#Q}7T9Y}>(*L4Poy`E`Je!7F=tT}|KY{&a9?>m1($WWeDWpMS77yj+gbh!=i1 z+QsfK&mT764}X=0=JY7xr? zwy@ly&bpwV2jWCM*-BPkH~sh+64!qC1+=W2yKAc9=e`M6DQpxO7r+BH=^(~o1xg;n zG-(%6xJ!`^xfg-eq<^phk6!y|9k4WgHcWa+CmLd3`79|wfWs7i{kk2lwgp)i=D>0O zr%x4@va@5`3AC;OH0MLIl>nuLa_Yzdsqf-JLKyf!wuDge2g{Ts7ET23HKe7K;D-&R zJtBeh91`%ZP`4C`68xh@0!izE%4v?J;BYszq3~KN%w~*{(0_EGWJZIqn;-=Qi$$5C z_2S26Lj@%-Q<01ef~11tEaJPQA`6d7rh?O$r%RKcd7!K%pdqud3%U4;8x3}(d{R(M z<0n@df{{R`T!+{^R9k)1P+pXjQCJl`TnS{^WFaw)pFDlI5&&S91eist%a;JOrc1Fd zel<OqXq$Uw>T{;Q|G~wb@A1tDwVBL&qv;nT{?N*3#Q-P#hK+)?_D(q46VE<;a5( zOU5FEV2Y|(H9B~vV)O5TvoVTc>JB4963VbcfB4mMyW6lW1y@u9|X&y=;n1v0LN10Gv zjVEi5@%~azbU2@E>F_qPr9)RX6G~;6bE1H%cHMRu zC$IA!PGx724mkyzQ+?M0VA&-Ys$D{dPkyLztqM8{YFvxy@I#erartlSTCB3WxfbMo z9M=Ly-+#un4CAtU)p^W)oW*b}J50$3{5};-bNp)zQ=Hv35#jJGqXj+MJ1$HbO=CeS z&tRdn>8PN&D#+G1DWZvU^+n2a4$yt3g<7zTNjjE0fG?vVV$f7jQnW&c7?6R2b$}kw zp*amig+UhyfNeFgOK>%a-UgI^l!1-m+!@quzkd%Xm(c{~*>J8Y%3$ePIy~jr+Xb;8 zdsx|Bdwt-nWnKrwI6$re3rB7rUDtVh&2lS{qHeA1lt@zAYmrGEMNC^-Szd+~x~*n+ zRGvAdFiWdMt;Lj-sY`dOT4!EfMe~cUrRf2j%@3)_qM&M2IZVk)%hzhJ1m&(4nKZnt zSAWHCm3PYeFVZE=muCO9duwl)GQqBF!pyZ}Fv9s=3WXhmIE-W1hJuP>>!qQkS+$Z2 z6KWS14&8qzcXp#w&`KH#s_@ojj)?)%40LJluNqcBQU`j3-Ee2WNOyLc?s@|Yb3#KO zgSi8k``D~u(?C?rtbx5YVP!UR!ZR53uEboiQH3pKtfeGSFhS2+}#@w*k-B9 zX-NQv)NvPgFG5>z4pF%uXLj8}8MiR)9Va<^CR$L2qzn7MbgS`8-H(y9%$`}roc^l5 zk3+Hs(jm#>Owz~wUVp&i^ClbwguSMOn3Z_gBi`?pi_?^pbqKbLp2dUo zBCaca(ru}O2%qCgpvr4@ZZpH!%AU(p2^5^IqQjH@x{j)_HuF^wItG@X1ns>-9B1jl zY+R#1<<$qT<3WKE%~|adqR@veGseU}ItySXEFXX*?=ie=58otNryp~K3xBBBGR_0g z1DxJFpcftXcq&w^o7GSLn*p(O(A0QH1hAYm@zQ;#NKS}<5Gz_+oUzTlCskCNEY8zY zR$D-<0q6bq>#`g+VY%ASlqri&5nmwZmo`ZE4@_o7^@Sx|ZHqL(oecu^c3j5&J{@s@ zE>&?(Q@u;oO_N{XVfPKTEq}yBGIyq*6avtog_6<)@(U&TOJ<=~Zqx*H9h%v<~OIH8y;1akaX zy-Dq2YRz%1Cb0_$`3C;T-`1uOmaBR*1|^;>ro3`)&HCvaX&@x%+t&XPx1hFhzmZt9|OiH!dBO!8R?h-~2wF(#( zTq!M<5^deiRN4#VWOX*)R?#uohEfToZm(doz05XSDhU=*6~s}#=1&;w7P@3?(wuyL z)I=n^G?5x6G{9!#Mv0smSoPCOa2Nd^o34S#3^9jG9v;#Oj}59tS( zuEtFc$zc`6;dFw-dV0_bes+oBk-d}X6vxqT74?&r9gTik&V0b1|JJu0@BB5G6mb-cDXeP=2|JPJ|6u|6rA!SX<} ztWh|QCdeUZ34agUXB<0}2HG6YFfw4iBM9J#OT9RtZ=(9;NRJ?@V)2yt`tdzdmqCrD zYUtMy03R{F>d6ocJsb()r8fQ{;yR)m!Uo)i*&c_kDvzch-^-E36#JQ#OFC~iNy!cx z(V4L}#q~th(80#$_P(z95|Ps=Q#A4^G+u8UND@O6(|>C@`4K#KTAj)!$In#Q`uX@? zaxrOs6gO<LFSn{2Df;WPU^yzA3eOn~UCiZIE<#P+@*5vg=})k^!ip(@MGgFf z;7Y8rTyG)cJ|GyuNHUjc!NQY%iG!aerX`+GqLyK%ZYl#&8ShrH$BsONUh3-oUxl1k z-y_bGjDI-o?-A!wBF?-4=c`2=8u1>b2Q<@!8Qe{#QD)6(sc}3&Wk%?V9mvHxjYY*( zSoDJP+a)YHKcmq2jW$6m3^ToC&@7NMvQ+8#3`Ari9 znij)_DrEKyg+njEV#YAiL~UG|#34|weToUentvA@vf(6cLkbtT(WHj)D3jt&ftu=p zBFg50IJspsEVR-}2-ca(Qs`DW{$R~{){_&92FnxDOrzarB36-;hq<`a#!U0WBFc&q zi=8+E7P+3A0({OLUe&F7>Ip(qvZhi}8xCy0fL2bt)Mdiiz}1$aTf3&K<|j4Xm(%G^ zB!6A3;p6A{TOHl5nKWuD9R&9L43JPYYK)2Pj2iqVDV-PHBmsD7(N1QWbZsYHx8&Al z@dsH?AUW)(P^NJUdA}Stt{RA7_+l1VKRj++y9w8na1&TF9IAY`Ubcj7|b3V>%v{pDyXRUP&I7CuiVD0;&uw$RME1t zkkgnIgPhh20(>%uqHwz~m8V0G)ocRn9} zIL>;o(Gi(hEAQ^ON)ka?oP?63z|Kk4EN5jj%lM>X=&t9Wnx?HLD1nlqw10Lly|i9= zM6*J71g}>ekps=qUq^8c52>_!X!{oGmXh2~)l>|vCUdqo+l zTNp~JZUt06miik+`-h6?&VMj-U2ACmfX{lkYrOyA7Zsf@Z`(s__I?8l4XmjlbSUQE zePD*+LkKJO=7SFiXgX(%Ks?+a#kj{SpY)JjCYg=shwt`3>}=wm;IlLZ%R3zx5VA&xro9}Z8j-S22w^Y)#~$iEL+9f&`+t_$fP^x>i*GWx znY-?OZ^&5j#3GGY40Os`6GMk97+V0cSw1caW@Rha#xDCkbK6eNWX zRGMHf>@o~PvtvV2#aehTPtG-4;izIiIlBw$z_uei>vu@T0Y~S^j=6RhO^*NpWGb+U zd~g4V-qAdc5J5`I)qj(pr{jKCUM1ZMB|+#>(C(-rhRC4rSXd@Sz+f!F3$b&!M8KTW z^M&(f+&p76vg;&ZtPfPwaZ!~^dXd!Lk_JwR+XPAStJhtyEV88!4V z9FaNAaze&>05>dMTqF*N3Tch%k6XZG7(v^vE^&y!+I_=8=I}gU-1!sh*9C83=@FDR7 z{ISNPJeW*ADWk@B97fQ?ni@}86F`RT@pJR6mVaOn;tibqahsj<5B3piY)S@cCVz1u zdbF6s2gCTBS^$4&5XmUhP1!p59bK^@ELvmOax#oWQ4)o`$S1?c8T=t8hA>zihyjxt zrxV5XcNUR#q-?6hE;HAQ;>$N1b>-DYHJ2VW>+XFuRIwKItW!&kyqgfT^OzoiQ zvS?PJwMaN0V$r(_@b`p%Uk4B*3VAdyQ2zjbMg^fb^-Y42C=hNf_@|rj2ZaJo^yj6U zBfK&=vbCFdI1_^-+rDcL=UU?E;_?H!XMg3K>@(eJe-TQ!CC;PU-H8S$wi0mTY#f4w zsg>j3Ho!Sb&D|Ug&#fj{9=H8bqhU=h;9Evtg|%(dJTo$8h1hS{7*%c6(-v1hVRNrZ zm(g8jTv*nfod>8iHKFn-l?OucMOfuY8=jbMcHlPnQ*+5@%bCW}OldYp-V4DuLVo~4 zy*s3{GsLb>o# zF7Tbkpl;08U|H9?1UkX3=yCxxnyz=(CuzdLY#=gD(h($8H6L7@V zL_xuVe)X%oVHW4;MvM0!APsvegeJJ$8Z;N7;X@$5pEMfb z%^(sN9z&NgvZ9-(tWkHB4%F zoaXF)*X&!xfSsKg5g=ee@%Q&&aGzix!@>6j6w_Pw0|6vV4+L|1{eSC&Z|(JN?^$mr z#fsre{!U|geNh*6Q?-h8ucezujw2+qA4jAbXx&O5-wd?m{P4Y(@o<6V>-`{g{Q4og zh*SrB%3_iBJ)`5g4j7^qVEqbvJ^jx#xTO1-5c4diD_Id{qEz@8fsqXZnBo>X_-^L^ zT;Ln`!B{6%`#-#G#eYgKy!R1QVm7L(B-_h3Ujqle2@3a(hNqGh;L)Jit$yYzy=XdT ztcN?Y#;i5GAAi?^B7-!`Q#k(%c2;g;H>!=Syc}sN+ppqU+=>N9=P;`?Nuwd__Wtj= z>|*gN{>&KrnWchz&4E7r+^1-&n<-mURzDutxO~;zdV1w+bbsUSwp-v1XTG1tl#tYX z{mhVe`Z~}$kPm@ZZWr)cKzJFlI%QJFXmC6mGkSY-OE$J^3p~yl+4M_Gl5Wb{5W` zx%(=UgWo2GzJEUWiZQe_J!nrInhC}4LG?aCmDo66x6kDfZTx5?9<-!S=+M`c@Mh}{ z6&^3`&pClqkMDf8n1OV!zjfRjkBbt{@pJtB6894W0x{S0lOA)_@q%VHFyO+C*SHZk z!QVhK&*hw<4Ex|9EId-%5$fKBlx%Fa>(1!5kijxXuGKdu4CeM`U|x*D z+NA8G&IT0Y)xTSS49XZYe;Wab|~4Kk58fD`#kGf z2BYY#DHaw2`u|Ib=#4Pf)4NHg(*0`p3v&d=uYYsAs2-uys+l55Lu8W+WYst;o5iwstfs zsG^=yHC0#AiWini>I!5-N`=X!X<{VCOMfTR+5+?#E9vM@(A|O^a!zk+0)c-B@eb|I%vMLDct&B;pI*Bo zL}kOn(%iM_!Mt-fK7xMk+x`gobL-H>ZIB^Q(+&y!^CV)N5$DlDo$WdmqlUTKB7ZxB zY>^Cr9Nm90j~rO;SkL6}Pp$@^LhaQwP-XR-hbirp$~0f>uWzbMh2M^%-CmWXp4Mh5 zR<~m$n=Q^}H(c`!iw_Hk%^iP)#PFHJ;{VZMkSgb8pP)%Dh-`rD0W}JbV z9ln9+tcfUU``l@@1GV_2LI{8=h6YaWU)~W+D{ct?CLz+A-6X@~$EvQl!8U~je6Qq) ziMZ05h@LVbgRG3lq+dJfuCW|gw&Ap}tVHwq2tE6)Dwz?eTIZTncIuX34}Vp;5@I+L z0G4=&i_3AryetGVXX{(o2y&c%0$d1p0=zrt1h^0$mzl;0dVnA6zOm^wy5^9^&tuT1 z@=H*JG+fwqCFV7UlKDO2*5Ya^1h-`_B^klJ1S5S_lCmi6s-}oj{8i)J)@O~^R`_jc z7)NeA+nbF)`(DLM$4$t=o_`UjC+asTr}7<`v_btolUMfncoUsYPqW-RC`}C1zx7 zdv6hxm7IIDYvw^KkvHOSMa`)#mSS#gF^7lO)*SjG=f1tVo;h|*qklHt4O3dF<~4^> zA|iJY!6}Mg%8A*MMxM>7kY~5F9>2SN8->{UzM)bcc@&!TW{+BU;91tm+*&~rtQtep zXa_%xz@8N26>>^Do__SWtZq0qUs>{ULGD?OyuJ|SGR!xSxrhC4K_rU#`o{X0fJo92 zW_4#(MpFRUq37u$0BJXCeT;ADp`Wd**`fUc zvB@37hK>5rp}wwa(S*qet&dJ^cVj$#UEufsd73Q;!SU3!LZ+`7(ix2c`0#cr4^Gkq0c|IOFJ!M;os<4!6RicmP}0@NNiF zN`7o|eG2*6+%*aR_|q!U$q?Oyp1O`@LtkE<7Yre_PhEZMdm~Mi*_?c|D4IiwE%RYo z#l-uB41^99oqrWh$oK3_)ORGTk2I(hB0%}LFbF(Jx&c3xic_X5OQJHTr~jlc#Iic{ zYl(;0wexnd~oc}=3e`qgG&f6rBaipKo#i_sh-lIHl)D6NL8v}lhb;b0r) zF;%BYnSTM3F>;$9O~L;BbsbLW8`tKCx;?eID2L8TztO^yqLBj(q8PWA5pQGN-4Y!- zggk)jJk*|IMFKB&#bQyb5jq?>dR9w-4UG~&ek!;Q)&I0~E!C*6ONGx<&`#`6PisJJ zh9v7|Fu%5KKfQP<>Akoqi+P*Vhw8h@Lrz@$gLfaxZN7>WwL%&0&%{$uSf zxVu_Y1JwGg_KWJeGBuUr=h9zVveVH}r$#9Z{$-eMWC;du^oeCd6lgw30A*57spTNq zjA-Ac^{pmK>qC0HYGk}$4})pkql?1??%27~ndj{9&C}fjx=eOfC$zEys>cuI58J}m zX@9e{Ph*Fwqf_|LocI}x6ylc~`?KFZRDR@59q-|{2mZL~Gg|~R1QMn1k2{H)i32T* zN$qAWmIGA6*e(D2EWJp&u^#o61j=kdFr`|;XO_O}Mte@qmOtHL>c+6fggHMUuJmmP z9nblxX$xPrOD@cOf7;QQ9@)!sSd~n-h<_ab(qZLS>Kk1cg~DoWL*tL|Hc^GgFZTD; z@#}zZtxxY;plW*Q(91Hc%khk>yi_)64&0H|wX3_Xcc~Zozp0<+y2|JNEVxzjz}0fA z^xXj?wENis1WUzejN?Srd7jczwTnPwjKg)bo^xO)o`K$py!jzxjH2<7p0qyp_x66I-eWmFGY0588P(l zaqhTmup1#vTW@C8zd z{OOX<^l9Rp#(Vt96!Gyr!0Ajn0s9fb{ARgx1Y?O+*)K4MX5UknLxD9wwu?q0CsB6_ z_yHIHsZW4qWj@Ex`LEJvV@g-2*{IIu*E7uD@4)L}oF&kmx{jM#q$!+RhJQS~@{vsZ zbP^ozWoXOkR3Qk}K^EIZ0v|IxyW8EMdVq_vF$F&|I^fT1Q2lZxseCHuVJAyQMI&IC z$wTk>MexA@ePLZz4v{t^vm3}K|H$7^MbdmK3`LF{bs?OO=cb5bzUpuL$@CBSo4Ts_ zE;9ME{(8SQcmI>aUT3rX$$xy$lDrP6hhdwz-xc&eZOm^TSanS3uL3&F9hI)`Ysc_! zie-CWD4w!%@DuOTc^4;V=LKx_z>kh2z*+RMw<%+SRyJbFuUDI_peqJ8TQ;KJsH46P z!$7?~(E(fw6E2K=4$8#HK`U(vMSam*mC4~PrC(gsTW(<02llSO#eeh}G?^~*+>M80h>YhY5TY!XcIIH( zMo~bE3ySOi47VJBgMaHKAEjF195RTDj`fj zMyED4yu{3iQNeQI!=XR~Au*mWFRzfaF557Vi~SKV#=0qi*w_v^Dcnf1FzJQ|`&(rw ztUV$)+<(8dck*`oU`yPW$JWN1qwW2@6Zm)Z4&IKcSo&Du)_>0%n_EVNq~|H=-_DA9 zS;)~iKgSlNSrYLJw`yGTq-AIgt(H(PMwIzsAllw+wgSAnJ;oLf3xX`dk8w0ghg$>= zH+FX5N(CbSmtwM$3=(yn&rQ=jApyJi}tJI*5c^5gO{VBvqQ*@ph> zI~n>moCrhtcthu9l;HSZpC?O(Kx0gXo8Q^mk6^NSzt@{>?-KF5#oycFU;p*}#^K?~ z#@^=1*5R9t_gnKA&~NW#Kv-#uP-}NKk9TRmJAd0Y5bL{Pd>g}fbtl7s8l!d-+w}W{ zkAtJvv&{pL7Un3)k9R7`fxK8V6@Sj6e3*8l?9QdxjDcf1iRUnRjXF=sesiaiX%$G$tkR#4X6bPtXYoy}<107yYQeHj z`44-?+SEu9{LH_Y%9TZ;O9ap7l~^JKMd3gad{I}_Ub4WJA&c3KiWdHM`!Ua*+3Y3+ z@rC7Ox2LN5Rsg_)YJXe)R?>5~+i5v!X1%43$-tQlPya*tGIp;HmgZgFqpXOhTkdDcP=jn`!e z<_Z0r_ndw~s4H+Z%hTa$k|#x5T#m1Vm%rMc8xwvP5YO^tx<8Ju+8@0a0ZD-A2`)e1 zf#;v0Xhv!KWReK;@v>3f1k>V_$bSN+efGxY^HD4Eb`Wa;F{2K565LW`vjR`eH=;#b zn|@*G=V!fVzueU^&Ja+6nr^R{^b0M0&?IhKOZ~kL7;l-6DDGm->we~F?`6FSO^BGw}EIgL8Oy&WU-0-XwAemSNI z?g>38k{hQSff7{lR)TnU=WdAO*LgNhibSsjeYd6xsqxjd-$=$Tvt<~{bPk)y$44J59e*ylx zxIqk8g$L4t6u@_s{E7h>^wgb#mb05S?!c&I4tdv#SeXxhZdayLkDxkhrmjwBa-(4{ zKT^6idZQEefnM*T@=_18?3Nc-m^4|Q%AzPl7l9;NCjoxBPREIx1uxxq2r9BTr#xQC zdgLsWJa^G`ZK}sSUw@}$(&hRqu_3m^$Bybu$6^sa+Y99iE895>*EFpC(kD#Ndj5A- zoxHS;v>weBln1dYze1g{xC-Eq_sBH9%dULM`Zei(s=W z%&k(!O{y!E_7ui$5C^DUHNdN=Sk>aP92Iq|&fEE+wt7*LVpvtb3_m|lUvZ1nv3FKd z$E==?-{v`k;OoJf$T~L_(WmspsT#{z$YncLKQSz>DV3wm%ASZf;_oMPI(5u=u4TPr z?|ShW=}sjTDSsI$dUkBnVWf=}azBS?3;E<2igH&3;11&*Ltb$8QhH19B;;)hr{@i-VBTSsSF!)qim%jP#Np9Bq`L*8s86-BgQ! z<~v6M847C{v6l~_uBh((rd1m_rK&z~DqB>&9maX_ZG1-?wG^y3xq`uCn58WC(!7W# z!{jK|1cP`AZi1WP^1AB81a^h0#d%nja+x{hmCO{(uTUx*j&Bv28g$9%h(E5W9+Wvb zY1M=r)PLnWk0qC+tY++!RtT;~d+qGaJ|FNlhk1Di5Vj$%*I93>9d|gh8cXdMQn{_} zGlmGbd^d6|(D68SC(P2z#>Z4^RH+Dl@;ENk`~$qIUWSK9`(^tHUTd3-oXK^^lIlqH zXD;y!!RkbY8J);r6R4hbfarYosykU!ed3MHcYj8%4kO66Gba;zu(c$^i>C(QE%oO!wDP*nmm)N};9@w1Q-|;yVR@Z0S?+&e? zIJen@oo+>rhkxi^?`*E1SortrDw+KT%vQncp6=ksQ~fT*c?-1Pdi5}-E<*|<58~*HN+SkXAm+&0DNl!rP!gD5x7lL<|+q7~{zqY=-IPY7G- z#7rqv`yVjlb6SYe;_jy?pWb>(l7CfMX};dzc$W5J$~x-x`#YcaUc5|xu_#-TV=Khu z#UL~D`NE&jufh22@T?bF1ZXcNTumVcnE+lwi?U>C=7{>)c$Tb8R%G@F!a{9yP9ky} zk|o+D4DaN^zNUMr%jc`k;49UM^5QOwN0vjS`^QY+1MY^pSKvuO|I@sG&@IZb!Ue) zw65V$GVG#0cMLyxO#Q4y3!Ej*~n9|9Y0ps_=K!j6i4=_f?t~*c0 z8-K$a+jtkvH24JPw%wDCpe&eSNI*^BNMs^$<@KlUn46@hN~34gMjdlG4lcczyJsp!<%)fs2%LUGMGmfU7%w#B+@u875MJfTy? z+l*~Gd+n`G*;#G+xdlD`N?;x8(^;od)8@7v6bverS)jzivTkruipr)oA4wGFBDuLO z?z(~+MjVNV3&GR>PWEe@v%gF?s86DDmnKnYP)w@mI25RY`G1j|>19))+6ueO#;d*i zRrpaoH86!1mYt4YK_d-FwK54z^wp)IH|{8*j)(=5V4luIg2~%E1WeDu7jShQvudr$>wWrJEeSft_*^u_d7m% zouS*~@|N0KvMVRvEWy#28LWdl6$5*H`o;A5{2FOryML<*x_&>5->kaIKz|LfEv{im z07kIo_T!hPAWuTH>U(ybPNTE*x5h9=Mrjxu(&;p0V13USKqK-}D3VM(FtU=Su?2j~ z%I#w>u30A1UeEUNw?z0jUQd+sW}IeTk8HU5Q7*Ok=_`sdT%pJB>9ClP4d`6JNaI&m@ejidSOHh-B)5Sr^I%L|cFM_A=1M#*J5Nk(*+ zaSBd*eBAF@A{-Rr8vF>t-U|a1;!VnRn3-Ln=lxC8SU!d91&E|)`!6#*S9 zqigq)VUgpSU4W?l)gt*d8P13^i$+rK?e@Fl>`Gi>PqYm_3FXVn^LC`XQ zhshKfNqu*fcFcXIdE(}Q3Q#5m4Zpqk>uPRAI}q`FCNw`!=$*xkQ>K_YQ^Uc)%+WWqkrGU|Fm1%J8% zjbPwJ=K`hXU60>D@zZDXKvhVGN)p2pc~M5U>~`X3zJMKzG@YA8PiGOc{}6`<Fj=T$OErm?I86`ugP>s^HInWnD2lNeF@OV{2uQ3cb7W|x_3eGr|$(h z)$v4rw7B3y^a>o_biuozFn^kir2hZj&R~ZM&m1BG_Io>f4q&g>ADkY4kBEbv{#Q=g z(eXFEqu$Gb%i(0_+m|k6u=BZ_%MZsdUBKt3$7d%F^Rkoy=;7>wMXZ8f?0+5~9qqhyvw)Lc zk56rq`+&`k$anP~qz$_lM+ods(5qk|zh0)vc*N=Wp+O`QcyPMtT@UwQk1*kfSK^n^ zF#~oYVVDD;g$cCyU-8lFdwUSH3pEYy6oC%@!s_IeWB>T{Xa`Tobp*uyjyqzAKbMLW zWYWk|FhnGo@V6yorhg`5>Wx_+7}>N7&{Tif6xl8Q&t*mhK-K4$WK{a3L43RB?@aDY zmz{!0&dt2;m2v=s+{~vF_Ojty%8sehFckO&g-4Mm<4cC}-~fZMIFuuF;`OJI`_&4d+@(Fz9UjZ)Fs!5Iw zn4Qpl33c2p2dmiV9KXKVJF`)y8;2AY(&j~a6&Hy}S?%hYQuL*1f*pRshK^{rEB3O< zdLhtneiV7uHGji7Mx)kFLHfR}z6X^JWbjX@nN%|bc~U@|7t><0HuH)k3egaxdvTHS zUJk|pIBCt)VCR)L2@+-n3I#PrfFDQ+z4S zIh4q$p7?RBnshb;d#CJPIQ@mHdSsxSndHqcOiEv_07O8$zlwi%h!Ja3QSzHjYWSsg z2dL{;Vn#FW;8eP@^%n3DLhxOrn!?T_y=3~*Y<8_@Rk{|M)A)zoc(@RrhV0Uau;Xmf zJzoskVqGdn1yn+2AuK)}v9wPC)ii~U6x((&k0NNLU$MY&P|NVzV(zyXT7*%+V=8-)4W=mQky2{7AJy3qjec^lsG7X^!4MPq=Ov{I^t}!Rc-2CXLHKs31vm z*%?5oV-V?$9M0PKXtdrHO&U?T^Re* zCMR23FA~6rGVLpTM(v!Sf1T1P**Hn9*Q>AZx^-p3$fXw@6)N{70zxFLOMv|Rnf3D4 z7B4NBgYt@h0gZm^F|CD(&U-y&kM}t{bJdoaZ1Xq+1qlg=n@Q-h^l1Y>qWqpw$E2)c zNG zd(ug)88i!B&z;e0w@;maLeN0hIQ-43n{|s-_Y0cSnF0zltI%x3(pe>3^;|3M%4*z8 z^GDVr=in=n0|UIW_Z_-SwdtcPPP<%GT7j>q}r z;P5z{f=0W5t8oTrr#&z6=%C++tS?}^>2y$)*z*fAI6nRg#%5l^IM-pN+`#qtM5Q_( zGM;}{&tQ<}Vt?o05QOyf^YZh9mpvBo?4&C7i?hMr@wYEMy&Ud*-#fj4NB9>9$SM$E zc%m)edKrmWhL<{Q$s2|+W8Ja_W;F8mrZ2T^gHY}+Agc>{GC_Zzn{1A z*=v{uA119=+wVoNjX1r*$4z)lCuxz!MK*tJ5n?*JfQPO3Km73BcR$>W?g8VL2~FyI zoACE8CL#pUkta-!tEJNb!s|cxH@4o}{q%I_=wxFjor=C3%Rb6xJPV3H& z!iQ?|e#bX;(nSIzV=}T)T#963!Q&A)452`}EPR>1M&)A&N^ zf5d@O39?WMqNxu`ujHh=e3n_uEN1XXgPb-Y>(v6FQVCXW4@ggm8Iow5@+)R)!(CvQ4_f=5M&+KSpyxrbnuGNBMsnK1}Z1{A1P*V1B-XtHR5d>E>oCy?M~sn-!U-aI>2b zIVu{a;4GUhb=PaD@`U(F*kN`hV!2wSolVAfBEQalnb7RK1Vg0ACLJq29pUUer|DWf z%fYYo`Uz)2k{QymSH;xFk!Nx)^pMfr0Al9c+l+uJ5$;^Pq7*#1*Mom~eP=Zi-PB^J z-Qg#*SPk8kgI@!gxq|WNSWsq4X)}V9*}%`~-&guGU-&c92IcqrP|;XYE*hcM77Z6A zrI+bYj>BUEykv3x1eUp45u7g75lM7b3vbD-RsdI4AsXnY8l}r`8j}=Ni+;{O#!kK& zq%zqKjE+w&(C%CdRV{ycq_zG9t)eNsRa*$q=)BmeK|8%Oy_(%nL%1WJ6;y30GT#ZB z`1kr=`)y4^BD0b7su&8aZO5D4G3i&p-q);$#9^4&>sj%=jiR=c5?YLqUV75-$v1z-AB9C9Mn*jCY(gl` z4_2P?PnEx^C8lhL=_Ju=^u-(U?-;OrI;qD^PH~liX-;;+B5~2YOl)Ncp}REYIh@uT z?~mH>f9LHtw(=KmytA3VvH9Mp`$pb=Bk#0CWS1?{xr3Eqa80D*T~VCYVm&{Jug5HY6J8G!tz>eRHo{t z!txW>&?O`C-~lm7h2$qL`I6DNS;^@`*V?$kYk_F{irKd!H?lmf9(tY{mI|Va#!x1y zj-d4cv_bro23ab&d7*7%3rt)U*&2s6CDRfSt*+bItBq<8>2^xFm4hE;qhy@(m^_c+ zQg;gqVhw);+vC9Qw$whXtk^p{?47z>Q>(YF_$1<{QUu;aOA8Pr&hKz--z>NH%qvlZ_6&APZC6 z?p&%q2vWlLx7+kp+VXpDN@+NTig5OJUrX*r29v@t-tn6Yt3Y{uv*!4u3 zaY;AuYXUF&bHu0lX?sSZue}GNjBJaJ@WL;i1|yrWtc^U>uD{+6kAa!X|&& zZBvs}l-Go8cNw`KD6~Cv0&Pes$BW2!>u8RrM~-7f;lf8DO-FX|G2kw|F-Z`VMwWj6 zn-qg)*py`5awy&|OX*`;JzEdvVf*C(vg$-l@5F*_r|9ZiD6E0f2T?bSv>hf!Iy^9^ z0sW@@wldQAiuYs*plpW-l^nISo)mwUrOUb7N!vD}^Ofin+pGa~4O6x6%`kXDc<$O| zf9bU8cI8gsXwacpAcn9gPHhZ3eTHb3yNa&=n7ODR3GPtLD4gfGO;vC` z4yxZ&=rYx|`1KZh6>U?_j?B42Z(##RVm7&j0yNOJ=wL}ASI-?4xK<|RD&#St&8$Ol zMdLV|Qnh`EiK!xt+r}AuKN5q(wLK^jc=6-o?Q#Tu%OfN` z7%?himP!_0@N!eks~^thwU6%oxdI}6bu0GfJVtMecSI*znw;qcO1lY>R+c6-PwDNW zaX+tV&7(82Lj$Onm+3GC2P_Td;CJXS$#dNk&+uFib&8fcOos1~iR6FE>AdR<8<3wr z#*l$iBD0Lr3>a{Ved@t8f~b{(^aJ6WfWZ+1N(r6BaBrO-LP)#EaK6X?n??TLEb=s) zMRaXor>?FIcvg*FBhr!eX7*UvKwcPWL%5z>5L_4y3xsh^Wf+PT%1@zV9xK3Q3Rtpf z<={g@_$CJ*?B~GSJ$!#i7|-PFX+N(}zX?4SJ2gO|HVoLkNv5HX@P~b~>le z-(vBfS(^e>2?DDgImucR$@02wil-cq+UO;+c-RJd4js9mY8-!pdwT_?z2se^J0Hq^ zvb`R%h7&({YclI`OIfgvYRO8b=KUbpFFBs#i%79U7&Q);Hc=Lac;T?9QgFNBn z0qpPMNf5ZO{B2Jg(Zaq}=CD!+lkIBH-r{5$Q5Wtun5D$?vY6byHo$A@-jxiNaeTYk zrcJ*OYPYG6{)`TwWB~~9mpcAx+`Y!PSyjt4%8lD#M0r^2PaQZVDp$h>gZ;IEkiO(u zUp%Efm3My}=Gq|QbvFImHmD02xZTi<&dkIDZD{3I_7&Tyktr%#E#4cBd(pIp-LE#b zj|>>2?mx)9OSDZ5nk3^14{8G+;2U;K$G!Rg$Mi-%fvWn4#B>(b#Po+n3LKtZBvL%K zxtFfhsFo)Q+Ni;B#T1Whi+|&{Mk6yX5mcWxcx!(jX&Sm8Jc{<8iQK5EW#Vb0z%9f| zLpRF0vdE1Se+vYQ$F}y;fg6?b6mc8%$J`$}JhY%C{)=H7jl4uOZ4k8|EoRsIM>Frh zY5Mnk|Ch{@)p^BXJbAqKeWk5CO1i?aHdsvbf5d3y8;e%s zrwo4xVEcdPY2rM% zo966x39J4ce1{Fa3fI9c7YjJdzs(u?*I9qD!0_ja20u~ht2G{{pgx<~@xNH{!Pd*v z#HXz9t8$bt4*tuP{EPGn>i8E2Phh$KVzvGvU8cT0WvyP3Ym|1{E#xTwHYYe4$9KuJ zHz^XZ(Nk3Sk}+0lVcIJBzlG7lhe`Z%@}w3fV>GaEVC$cE>y44q+tOw($mp31GOT|? zB5?h$y-}?EZaBEd6Z8U?ko5eUM0VpMxyq(@?GB!DAn)Q(z%G^EuoaSn*}y8c%S=5? zwXc*=U1}77(%K!L%!FN^(z=hNGC#Fhy=BgC_mNO7KGeGS zlah_sz@WU{El_d3<%De;FNnf2IUp1VubOg2+SsshjEY0VWMv{XQme~6n#CnRr{Hdm zc$IymxQN5|P8mje=b~1XU(?Z;hNIes6Na9L7;q32oQ*j&nZj;s*Eu0p#cY2pkh-NL zvP;&Ywh)1#oTNhduc>sUTaFeZvo>z2tj%FORcdABO|rtzOZ(@8b)|ISX``~deuGxVYvEeKklPAJDRqrl3uOYL3A$y%ds$&O^{lqB1cb z#SH@QOsDbWD#5dM<)NRsI?|f2>~D1D0+0}L*DZ)Ja8nxfsMEZ1xd3xbtY9-4Z0B@J#MlUe-K!ohVIcARBdu~`gkMvY2u<)j&+mfIcP!ZAjfk&!KCbtrt}2cUIM-9P&*=+F$Wc4kPgbYz*c^D6``8?kn;F;@PppZJ7jOe_v)Eo?bL^z{tvR;T0NE+WJ z@svLH6`la8#3;#&X?9mWUY&XLGi>muca$LyQb=Mkq?HdNaWl&cb%(@{@SbOURP*gL zyPC!~@{WyoI7~-C2EB+okSWQ9M$zobKuZAO2inyEU{CU&l#V9(E) zM7H2mCUY!X0SaY&It85GwQ9TiXfkwy-NOUu?DlErc)9t$;6$%-S!tCO%)$v)GAkV` zn!B(h=W!w~VG2E$iWMc^D9|n$=^67SaTr2Hl8-Qh&N^ZZhHk!AZp?HAJfHv-Bviev z3Q07#^vc-oc#nTo@bW>WR+6ckEOoTXfCHAEA8&+MD&Syo9vE-T4bJt2cTadW=pcf5 z@zeQp{b0{Q!{Zv9RC6d+eZNcL`F%H?X2f=MiRlh~F3n>Oig2pwdAKOnm{&7&>sSf* zI9U_s8!;k5&2gjE3gxf$Nb^4@AMFk^_;4xOu0lJn%D#VL9Dt4P%S+~*$CEDNe7gld zniuQXh@>7IeR{3kG`Y!sP7WX_!Tbo7O@8Rlb*3nsjX8Trx_+~EcJZ7m+vJc~khdet z!d7;ujmg}Q17#{lmE7pvOFDO$DjBu@)~aS5PRU-x886b;eFz-wPk&CvcRXgF=63kC zBfKB7mkNLAEQd5;ZXf#GcJ*Z+jfJp-JvLlRvA{pjhcI>jH`=uo+Sl?>T9%=iM@&6NWO}W>4h8`@H?nJPLqzR z!VPy=eZ1<9>ogvvnHaJr|I!}p0zKE-E-RyjzV3f_^iU{&^`yBstBQQYkI5ZhSCr(r zdtys)NMUCpVt&?Q>x|rPG#k)2i5GQzlt0-!*5)>9;OG1ck$k{`>+u@+(4l}yTnNx4 zBnAc;rgOC~$${ewcjuPCyaGxBKJ%(cnMEp#Kl~?jhtm8h&+vuNVZ;o}axW&@*7s7|#dk4(}#q zHY-q{Wri{sBnh6_)#7^w!;Zz3*2R<;Uu}OTwcY~!J!UTbR*7Z%xfEphjk#?KQ>m`- zNvT_cC#7zQo|Ni4jj2td*B$zOBPelYfAnHQIGHJ0@W{vTaw4es#H1gu^q8jW(b3AJ zmTlr7!iHNXvV6K;#RQa6o0@?#Hk9`BDQlVMKXEqd5}Oa1J-i}#enyiL@}V7oJZM-qkbuU?+ShH($4m8Jm+#di!E_+sNMm=Y9poFLx+EI z`0#g%1^RXRD@bmY@IZfG?mag&_C~T+9aJl|>Zlq8yh@DGC&0)${iQgv)qLhgEWdZ3 z`U<pr>U42+RaT7xzwdw!j}Pk9fQ;sVZj#f+AI>)q>rV)frces%FMJfZ zG1y|^x4zh)X%PJ)<1DW%)RSzUoipLvbp!qOHiT?GW({lpwLGozvm7KdA)kMJQBE}% z<9}QbltAUM7c5|s0xfvXEv6mL)nbmFwb7?UWn8J@yeT#?$F_FO1MX&f7vo|kJ^kbl zd=?MA`He1_%C@zF_L}7?YY-SvoEKaIWHkA2 zFkX>Z>EJAiOW2;{aU9?SVJl{dYT~qsJ3{@y&3y0)r6>6n*5+7nig{|8^)lMLoG0>^@ZZMP;o*^dJ`7 zl(8toA6Awu6kxQ9Pp^MbaW+&D$k=1u!IR^olkpI?DX62vk%B7;zWHij9m1iY6LmT~ z9F7lu7$NT3aQNs`d|y?;tE8io(c#|c^ffiOgxkMFw1I(;?03Cm7fj9OU&3vrKgsJl zJCA1JVHp1q2U8!64=J_t7>B%FX-<&s(7*O4V#Xglh||5RQ_g?PWr~Zy5+o<>RkeXgDK^ zFjlN94cJSat;OZ9!n$k;4`?c=$GM8XRqS!O09HH_pGY-PmM;Q{hNT=c+vlkbmzeNq zkB=z(a57@^0iJaj$z4UOefPu|A=mchH3#fg8&9Zsy^4RPagCyC5e*BPj*E1rfcrSG z_%&S+RL5|rWp-4G=SZZOOpUata;CwRiVmmR94Ok6Qc-gp&)oP9Y7)=LVG{r}7~DU= zH~JHv8fHd&F;i15AeSP^7ex)hKsKxMUOe7;R+h6oV-(#KhU`A5hnO+&uQ-TvG?WDa z1|sWZzNde?x@JHUp80kTHjm#M`0%@~7`-eJWn7Rf#(h3N)6!&&RcUZqp5e>?l!0M| z89g7CO-{i)3vbFuj1WOirK+-m&a;?IK6>j)-kj0Fia6I^D58VsN!IYC8$J@Vp3ukg zS_0P1eOUs=Nt=WDH2*Cj_W9?^J;zVn9qihb7b|~pjvnYxv3{%wc~_yuj|=Q99Mr9| z@KS+hpHU@0Eb6By#@;9TMuu>PK=mVy55Bh;|Vg|~v}mfEEy(C?>B za$uZZq0l-dZ#Awr4tq=ly+-F_dgnb4)g$$JJ}V~W6~uyx8Wz>nESu*E;hj%Oy%KeL zQCxrBCKX`*a=*DD$+&e=0B_ zcfGV%@%(i=Orn~W#!D9M%hE}koi8q*1O_ejr&WHbJ*Pyj# zoY9_VPY^B`A~H3p>NPD9&_I%;RF-0#e!gjtYs;sevm;zPRAwA49Mc8%Dh?UJZF;_L zBrfR9hK&(X>p2r5pJ%K*r3uMZEhT>vEUEu2rd+@zAikzay4AIwnr8ImpQT@>_S>`y zfk?3kaO{-onjHE&X%u8QO0`6jd_D5YnoQxzTB-s&5NTglUHl$)r=lcvd6~CmR0r_> zbt9M;$4eW!E^r&uwBL}}b}cRz!W|X)DP#<8modt9gHokbthOamND4Y_0rr1oDCvC! z7+AcyMCCq2nJlk>uCbYKK&oyn@mPTYUXhSZ?V+q~PAKxAXdrpX?yCUpu%b3yYrR~$ z{o*-3G%*hFclO%#%aw=rd9^PGp~UaTc^R|kq$3sZW*RBw#~u23^PQi(cpy5x7={3K zq;IdSsC!Qu%6)=&O$mWv;@_c+{OWz+num{TFD$X0(#*PGj|g|@Ex zwt7DC>lxABseBiz;oWdlB&SrFAjIttrb*lqe<_LgXK9?Kzk%*THpp{F{e)3?J1!9B zWJJ#kjrL#bqtu)psBl>Qz}?|&vTH|A$65Ug?%>G>J)Q+OTP|vqiCF#f0KA3K@Xs6z zkf!n;Vfcsb*pRf!D8+x2K|d*EaAxW)?&T~{0V`2pyR9bbk7zNN6p^=e zE@n+}HIpXzItf)tR)V((`q)U@a!q9Z>mt|p_GgSDjlU|;whfO3u@?rG3cwUjyHLRv zGP$)+5kWbsK)Q-T8hQu95}zGO(6mIQY1$qQ_AhQ6H2%-Wm5YCQomb7EWePu{1(0ftMM4WpNvmHl>Gl|S(pWI@ED3w> z>v91eY)+oDDb3xeUSt7KneF>6rdY>J#lou0{jQ1a;i-R;AawD1YtzL+pRsPIWq#03 zN+httHkv-uZKK~0e3uopZGw{IvUu1mNTpv1cqkV9T0LIm{aHFB@@%r9uXG z$71LXp7SA9mRs*#L|l?1zO5xAoGtKO=jRYtaa;l)T$aEFkp98&sfrhcNAF?D&JLxQp<}#UU#8I^DvPo9Zapma_u1Y!A^2)BU32 zlUjc{E3o#xjj{GUm$mP0j`KW!RD-a|6Vp(yg-In8eR&MTqL4wn1?n?8Npb zL})BLS6NZnor5XkXu)Ob!ftd^bjq0b|B)fz=kDyGLz;rqX|qL!4Z}zkrUqiWv!Miu z=ze<}Z9P=o3DM$st?;R`jy;FK%Kn99=OKR)U=+opfoRrN=w__u_JZB;`ru{lYyz!U zlcU~czZ_>EPsx5IUD66WEZ<#WYwuF|ZbDih{$n)L&B@AOj7rL6`f~cm%f%S$rlg|x z05?@xUTsb?F4m}Y7~o$f8`@gE;x@ES$>9F=4N3&C#U+6m|1vq?mi3jTfMaMa0=NcJoJUlUU__cP1CjfsmXG`>gl#K=@P9-KZ zp|+Z$TT55}JC7V~!5!AN%)??%!Isp&wH2wG`O5iPKkTO;$+(5Xc*f0MC#rEr9GBT| z#pU7>MjODgqPdRDh>Wty1<6(~w@QCL&8nJU6z4TFJ|Y`p9XzrROzYR7QBzAZ9e0-1 zOn8*QkCoJ;&;Uv_CHQCihX9eWd zvlai9<*H2E5?yjtC#q=l=7{WBxoA|TSK?GtqPcnZsnCxa^nQkq@~7%FZ+PJg)fWpa z=K4M@E+RK2K~DY~tZ+8DiQMYck~N0#ke9t)0Q$*AjyL#tS7+AFHWPnu7gu>j*|MJw ztF@Rtg=&jP`WfW1m6zo*qp0+)K&hci_96)K)F4mPA5L;&tGY?r=f%~Vo`!IBr+c4| z_P_aRbVApW+)-^%NeB`XT&(agZ|J6dAm5NE$fA+1Co5d%8mJf1xA zSQPC0`XeZAxX20-W=DoDDie#HQs;%fm@Yk}U*zNXtHsmPkc=*xA6~J5wsrzTub|qx z4bmkBDBDWg4H$p+m3}2!7GVZzsd3}@<8{eGz}FL<$=gpIXhkjx5)4r`z4omjB$feh z=<_Djl8{JWO~U*xHMx9N`WgbsRh8k)7p2!d6k`YPUi#3L=SPNsdR37FJp)^~EAFY| z!sOy2M@b7rNU43K2PwAJ-a-M~fjlHDE(&j>sV@?9eYk(>Aq%KTL+_YUlC+vI{H?DJ znuO=<0_g}uL_PsVkyDu0me;nIyPcRY3HJ+5^)$9l)II7Wrcozmi>5R)&PiL|M%U{?slJc;Q zlf3r4OJ09LbctJEYnZ*8T-d$GMkGCCVM4jbFfx?xJh_%yai;jdt1592 zci87r_#j@3*2^X%uGHi*$8PbbG-x((T;rn_O&0XL9G5Lnk6>$;aaSCt+&9fQjMfXK zjBXrN&x*#|?G7I2s;sG>Zl}|wOU+`M>-)joOdEeB(hRYigWvLLpHo==CPCTLPJE(w z1j-prE?WxIm<|qSOeK}g^pF0!1`V$8D;UnqoictHB;d@0jndL*? zU8q>-mh41RaO)Q8q@xro0aAoI+BA8EENPZE*4qL< zTaB66NI&3{YWqcc7X0RxbJMUrM*yKp`61_;x3{4 zHX!;$UlMf!dF3Uscj+B?x0G!w9woBB_Q1qtYd=j$(N8l}%Uh$W#KC>Q@acO0KzkoE zi|bApE3^;9HcdA9h40*&7rlIve+T9QOLfkO*jt$z{858#O#miOqk?8y_|kts`M%7D z2&6kglvFZAOq7`q$&@f&%vPWkweA4QFmvz$WyyPyXIJGM-81B~J-FGpz&)R~hp69C zp%LW?Y(@lq-CRd8O^YfwQ=G%!p$ZMJT`6a0qq!i4z5vAXFtE#I)RK1Y8k z+1qErrRBL8{>F#*S>E|{qgKaps$1_;f9k-7mdD9rOh#cOQ=49Bc_KVg83IPr|je;9NLfkMd7B!Wu=qnG5IJDy1*{){g zH6<~|P4%PL=3%4P8f>JIXo{BFbyz~I+d&-~x0Bgz+?`XhnoF)NsFtb&;VX4dK0)2O zZV8g6ck8zhs@Y>&-dyYY|;U>*f@XK!U>@6uj|KUW$8mQ z+ATJZ58Nagh2T)JakvFzI0h?l>)x|PYalJK3>LuBp0yC@MoAKl#Noe~aV{H&vt5>A zcAiy=&r8Z^NP|}W%mh|^?AB+MiYG!dtoA@2A*$#^G~v0S}(&B-)GnGVffB9lWV@fn_c_x z+rN=WJnb~cm#(;{WVGPQ2?qBkWlgW8E+DO`GC2FY+WaVqYh1c6lTinezLzN;vU~N3 z=i=T`yODo6%hqfu?guj4!X+g||H!D>N&30he(trO+wcf~d%UR7jd0Gk55rsTmO*(- z+Db(-pF&f9v0D;-064XBl~+ySzdNYZkK51Z+4Jq6=wd`SxdyJ}l>WAtp3Tpr>Cd|| z>L$-CN`KegG1X%IxD>|o@6_p*++?RKa*~%Y8X@7_Gu?=7!1YeLWF=RY+@_v!HDX#0Q1 zx708<n14Tq88}TESI0x_l?F7Qm0?ItRB56*{ahGPb7Krf zZy0|osT4V+Bty-50)Iz^(bV@?|9JG zK^Q%2`_9^jY+X_TwMMkH(h&!(-lTcHejCN6*#o&Jp0m%OKc7W9_DMFUHwbB~Lh-wq zHXU*&Zn7C~F;~A_zICA?IFTX(Lg>NvF{^*2J4{fD_$7^=<2^AXt9=?J*I2NDvRJgq zDiE1&BYdl!7CM)@P|ba!84u>utj>2HADuiIjt`Cw)nmf}0vCSpY2x&@D972rBJI&3 zO(KY0|3KgyyWy1n>A%&G;k)9bt=j{ot=q?VTYX}ktyr+L2MpodFvxlLZS|IVC;flG zQcqvPctMhhzsv_|a&ac|aV~vA&|bTKXopyLnE+Z`z?MWY3?FcmLK)6;*||I}u}u?2 zlcohhiv^PQgn%LsX@^wAiXB!G20bDEK%!vCJ^wYtB4@W7l+vezr^ zmx`VdS?NR?dlM+jMg3Sqj?J~bP4IuRiNz4O5S!tj3ESq>?arf?+z0@*sBb%I>DJ^= z*-3ir9tqOT_I&g@uN>Hy0d04zamDV=lDXgIm*q=ax?`-T`@`|@)8XkTHMQ1^r2f%I z_>%=N8;HA^0cGyU3C0x8I?H5noHb}7{T_a}2galvz%z-RT(aCTD{R=TMQwkUAU^qH zKLb8sk8UWqp=Z1MO||Q2;nV!Qpzhzyu?KI`K-L5rN_Ug;do3x!L(P7nqE>H5Ba+d4 z8q^R&4qPDASis^W7-&_aQyyS~KtKUM|01iIw6~W8U-nyOcm5k16C{ssV7+C9k#8KT zTr5a$IZqH%kl_Yz6)%Q{!z+JODOOFEOoAe7qcnty;G<9 zMk7*ETS#o+k%9nF5KT5IFeZ zL*X}ikVsx5Vq9+`V|L<>;sGI@mQa|gi9-EoQ2r#Sk=&b>a8lew)$^H$oDBqM$KIGuNK7Z4FE%Z>R_Fh-JhPQluHAt$+|nC9yHh z_Jg|zjoDSyNJJHV#y5X&=;p97jr;0eT~g1nQ~Y=q(-oh&cz7NX)Z>g*aECaS6-*R4 z9X{pf-dgHs#x*E+B+3314M3&XU;QU(U-Hu)g5^mVJCu=D4ig zpUyqF=C5mxC@lgeMd1?5yB>#@<9~uKrON1l*|!I$-weM>Hi&-_-iA2X+a$u1;r{Ss zlL!w^PREsRVA`{ZVB_zwLV$l4KuVa7rupDS+0M zjIPLe$KY}|ZH|AzLOf^qn+8WV*1k8i&Fo%p3*MQ-tIf$rrDCy#xBGCL2DtT~zot+k zEv6|nGijy5&Dxlpem5E(A00mZ{OGHF_c~dwR7AgGyEUo?C{6kQ)QNc|+h-r?GaN-jMdNFNNQN+(qBUg6;fJh^?nA#cFPKp$86YX0CJ zB8B_4c4~hol&JCz8oXuRf7Rr5wEXyFG`gQ?8M?r-$~PV$j}Oa}Jfoa{ui7&|4@-P5 z30D{GNCWDu@~r9k3S$pL(Cl30=B7LG@KqVYXt;+vj-JAQnwlnEbo_RGjxeGn~TrLzK>S+u@;Y& z|L(41U5hy$o}M0jJ9@f5dOSMZyQj{DtmZ!EU&bTEyz(IHAK1H$n1vgjUSaxWY7 z8pr6{;r<9m9rtY)AXL+L3_J13S z*wBBc-(wf^ba=S`bac8mJl>EgsV8||XXm*Z9v{^0H&8Qm$+`CVt!!41DLj@1`ctW{doPJ-LgXd^%ga;!doOq9B#)Yl?|4{@0Ig{g9%2#H*dXuMS3s zWBrQ?Pxx!e`#`IFk{8c`o}P-vh#~?`bRB;)l{576=kkaLRgZ3=reKK}%3S>eQ*YG7 zCO`82j86K1s=%1}1-(pe zzs$%ACJCz?X}rvvi*hR53;(DXo)c7gHo0gq2iX9Vj&h}4wV2cXqf2wORz`m{8h)En zgJRB`CwGnQs|l_i_~&?^e)5MszQZN0qbW#^Q@X3JL11zpTsQN;ke~*9U`0~+q)xrd zm-S7r=h;h%*12fR1KNLB@ZsZPK6SuIU#lEkR?atsYAQvnM1W8!t*N}#l8aY77idmwXC}HA#NIPcbIedRY;Ym)Tf5&iB z%sVS)dAHQ96sZi~RDt9hPwq?d*F`b;Wp=Hj^chT;%{AMNwRoNgly3)fQ&f)|IG~{L zi^{wr@(#Wn_c5$t1<3-r#qfW6jmol-T0pWM%MP9#ADxVchvSC|uMIf;{OB9lCV4pe zc66dnhlg++|A!Hxt~GyWk3Rikv^Q2KFo}PH)A*;aslg>*3&IeAIgr42MbnWMf+T-T zDY1^jchBqt7Bwg#L<@y+(xSqRt5A0#Rz2i!-$>q3R)g zN2Vlx>SqM^!dIk3hp%u`AJy57<94jm-sn-Ms{I!6aC`I9$ zmyEm!6TiDCnmkPYK1U}H=|r^Gx9}W&d3L5UmaySoR#c>feOPIW*6$mfq*Yh#0l!$E!aQ`?yVWj+c4uj z$Y6ekby9!898|@MYOYToyt}{4bK{6i4c>#F&w*o*gp7x8R~X<#v*%oZfLvMTqoeQCKC>!TB-%rm`C3~}C zt`B&Jx)yhvM}M(*>`%?qz@PcS{~^|KDA@1B=Q#Kn5l}n&i2^=RnWH`6wDj<4Jk``k?K*$bFhQ}lgQSh8MeScLIt>t zKSF=3m_MAdZ>uoJY17l9%w+Xu_b%xe)}~8agaEh`)>ZSG0T>SwEpBlV1O_j_pQt@i zI(*N+-a;vtS3GSo<*|R>y(ut)7IB0V(mAxXgxL%q?bMr1Jop)sN@uVN#OLpN$J#X- zJllgj451WD=VJiQg35vcg$aNo9Zuv=T4aBXD~`*A3rbGD%(KZ@IRoxKj*v=zdSEi2 zF&O`3FwEnKCmZ$_=ItJ)_6C>+Gs;y_(z@4qBm0a7E|Zz;4Ua$lc<+%++ys1j{P{jOAW$P1*o1NKc|l)<$r34src8=lm|tCGWpZg@63WsDULxg?9gn@PrX!cvkEXer4A6q3vfuQ(j#89-dk#lbK~+O_eA=}01y zS|>`PJ%ZcrBw#DuPa@k*V3z9Ygq?pub(ph;>WCd)3b!0npzsw8dv+DGq0LO_;7Fx- za6`1vW)#Q!@SQu%4o-jFJ&O5o^MhD2HpRWyme=y+q?X9pWwNufPar|C0-^_`j+l3c zQ<#SGS)URIl*Wfd-Wjf7lH|lDy=`-w!w;+D`Vn9v4=LfW%lpU3zTVx?%c+0Cs(e;^ zQ&~osDLUA|Cn2My2A|t}SZ2`sj1~@={M{>wqvArnj{~e5B8AXmj>~#suN3kwO#Gvg z7#}eWPeeGDQH>WZ^;h3s2w^b0G9TfqGw=AMr{2u9v&XNPZx;~Cm4r@$ip=qWAEcIVt*f-@lP{ng{rCQ}<78U+5*d^OH%>wfL z6RF%e)#UvKFVYjGBFtqff_P^kA0y0XXkS9j>=rGNO5Oez&>}(P{6c={20u>=QMGc? zMH$XvIeWLF1a;}>^xq_>h+P&b2yZ&WN7T!8i;VC;uE3~DPh2K36qbJ!sEbN+mI_MM zWEIQ-I5s+mUxrO`29b_N8DHT|i|G^Eh2lLD?Kd&GXe(+njGoGf?CpcsD_)e}W6GB2 zJ-?1XY5-Y4roWiDRAj!y>~X=|Jt}C;b2j8i+$IxoN;;6~ZfK50!=Uy^wEk8YCeadwr2iGSrU^nA^jFHL}n$+q}L?JbZ z$OC?xm@8dT`KWq5vBh@9E3+@swQDvt=P6V@Woi|;U~*vt}B@wQG*!1+wqtFXg(%}8Z`$KQ!stHyjn zNFP&cxJF-dIIX5V0=!~>S0!m7IXSa~Z_SWlB%)vPs`b*v4f-VyxAQFU0P96U|CmCd z3O$){k}nbgwGwHyXcU=4;hjbp~ci34jm$*&%FKdtNZg<{$o z$VCb~)5^LxBAV+goy@Kib&#cILv@{+Wc3z2K9uaVmXAMp33>&8&Q$YtuJwVnALo}3 zzGiVmL-qM$5eh^k4A{cA&l896D~CUMI?;T)2jexO2NuB2V@qHs6v2)!0|D(Ogfg3? zv@J+)@L&VSmCJcHQGGfe-${1VtiaB&6)ZLQ(tDPbXjwE%r$1JSHdQRi65cU9B9sh+ z`79P(pU?w5c+0_m8;j|x-L7>j)~gHeLmiK)3Rs_~36v5j0t0r_1L=&w!<+e(B-d6H z-g1BM=B8LHml5G(avAIMxJ)Slml?1-myJ6|Rg~3A3_jtqYvr-V`Iv0hReGE@iFIZR zcpHAJPxwJk9Dx)MN6ztTR%-6!6)%C4NOoaZGqpQxJ_R6u9h6#8GT6|hoVs_i70CCO zf(N&nYsLF$g338CW{&ewI%9LB6b(~T$SbCN&>~Be5-aLgTl~C4V!bpnI8_-NT$O7j z&*iz`rXHNLYDPwOycL*E?t)qg+^w6img$HM8#$g@>uUvj@}`FOXs4t1`gV!`sMAMn z?V36ls?4K*Zab;Mqv=3Cn0;PfU9ryWeerY)wLc!13I^I@2tNjdcpb)aePsrp9h1 zrAS>`l4T_pdyFJ5u-h`b%zuq@S?#&mY?}=NG@~!4USyXAO|qNMZ9c&rI|;`ksf>Ra zn}UblW!7&@Fu*urCrT;-^qV^SXrQ!Z&<7W(R2lFMPOhgTdr+EAd7p2;%gj`3UGt2gmyxT5Fsz#wAdajDecwkj9?geX_ zP1>k~aa?f6FtPIom!?}P(NOGVdCJsF#%G{^eEi9;5vaQWiXKJ}G);;G$|hND^lh=W zy|Pr>UU?{OdxiAomA^vUURjg2DYZUziwgghK=_h{8TJXU7F&2n@TPK*KKsguA52sa z;x01}ryYhq(GZ`=ht?9V?J*R^SzFn92j>=kP#kY>sowCtywhj z36hcl3Apfi<4GVFSxDV2mJXyfb{g$}!8?WU9tD1GZwK>P8h2#0%jM4Ut>^6hlIAn~ zB#99jkzg%8UiOW|0){%E^ag!LE23K{a=pWW?9#trBwm=99dVCNF6=X*vGMD)feBne z`@*WGM~3~qoxn?)Dfq`aMjCIqS4m-a!6|S;4gt$&q=b3YU-kQaT>>^5PoxZgC2W2F zvU)*TfZqf_Cjh|K_dCgJXe7W5-xA_w>DfayfK4zb*8=3y>&Nv1Xbl^bz(j`By^;R3 zTcv6ZkyB88wo#cE(?uBt*c_>LSft2_hl6I{)QKt*84pc9pLN|=YurIlFpFKdn|4M? za`c*5_I&4$h(4~C#tmqdl1^-YFoTq64B`YJ7d-YZ@LWPXeb+;^K7%OhR+&<{q#_!) zV66WPTx!Ri`sKX9-r%N5POk6P>UG(q9$FT8|r#n zM4qh=)F8sWs6AyiUT$J0!IoFZX#A+fDy zG}G4TnZB4(V09Nd+sV8em4I_GjWqgnp|b5z*o{uYx{y-#MDIi@l~_NmgmwwB;3VIP zRDfSUp@7sUQw?p1pe3$L?EIYOW$i9{=!2!|nuBG`vXVpiP^b-{hGRqJrarc^ch-{w zG4Q69H71=<= zW0DM1Q|OT}+$)iMOw9pm`b|}#lTExbg)x=76clQZ7PqA?F|HT6o9=anZy;_U2Zzln zFS^Y)#WZ`+7&cV1AH#+d`SUQ0VS|}r)EP|e>A)TvqE3j4<3CV;Q|twM$G8!Cqv|6u zXfV+YIs!-NBXqULplrxk@{gYS&O0lE;XKiD5)FDZps) zf+lvLev2|ksb=o@n@dht%?vsQf{L52N?@D$$LgA4%fS>r!GbsG>^dol9^k?@f8XZY zFTV+(RAW+Ss(OK;Mn%=vcx*|*#6|e9OmGEyr*T#Jv;(exZkoD44ur8K`@3;EAdzVk z(wrt~0%a7}0oh^F$R?Ez#xC*dZeY5}wO_BfV5|~14Eb|}Ac#aBL?7KJ%p6D-Rw-2m zr@v(Sv%MWVYdxj*vk}gIWj?v%LsK_!Bei|?;Oh5imTx@#B~)5Pt00~- zW;MZRdkQK*vKSE}j&sM%>99mY@IQ$$yo>EQ0Jpsbok1= z4M03*JXPo5@PTGtWOz(Duh<=(FY=!bPfp;et3O14q#VrJ)JpgDrH*rjW%5#0bBfH7 zX_BZS?rPlv&^JV&C#3;OUBLzt9jKJ6{Ch^A7tVMC5i_|lUi_kH@j6!gUm7W%TCsAh zcq;w(j22I%tv_Bop|sCC$^@V?h!klYF!dNo?u$U zkJtNuOCDq%K7Q(cT3!{)H>JUX#^0FgWIw#B8?}(L_2%^GllPAHjt@?T2WGpv@d*AMxshfTNG@H&VTGZ3$X593EDngjVctoX#Yjn)fBSTCm4@+D)^gj_hJPC*fP*k;#_3qAB) zAV4^m@gSS(i57=D@+m41hEdloLR_VrBYWwm#O=hWom|i?6nOp5O+o4D#mCA1hldA$ zpMQLKoa~LqI=8PjkLU0!RiX{2Wl`K#(EXphzBy2vM=|l$Z0yiT#k)w&$Gs>p4 zh$$Q|EW!r=JXKXbqxF`Jk)&5Ug{daNT9~L!#Sa~rw(J7o9~9}NuMV=?NpW|w_c{}c zi3}USGi&;+bzX!~#ci#`n%7wfG zSG$Wh=XBgeTIO6L82nrA^1+>t70TXo_+xzaV5EDvUw|INy;9-$L?%Q7mCCq(GsA&t z1aKD_$91PSNd6y3+m53f|F&UtquVIDvBF@{b`V_!ck3~9736J)&{c5XV+1w$q$3XM z{pManW|sl;_XSkoVPQ}Rd1L_k^#UPyqF0Y6FpP|@>Ev>rF^L-wHZ<3mE}_Of@K&M5 zVGqz$-o2m;=N?W^yopghOn#JqJyKW}`Y)UHy5g`lg z>BRRnNBWHTJW_0+?KRaO12xNUvNA!B(wtuEegQr4UXx}uRBH!OI+0-xF0Am6fkhk( z$}ZEa46HmY@tKND3w#eQV2S*!R0aDTHGY3j?=l$JQDkMZXs$>?I`t|U3n&ov?(+Le- z9hI+Ex?e}97AvKzdO^{~*Nqvj4gW2u2*38BS z%qx9)mx}L-#JA8JnNVcZ0DmDNm%`>};+)pitjf$RZ|%xx!nI~)Tno*Ve0}?*qN^QR zCnV{6+k zvpuixTP^@1YN_bS%E{eLQQltXBN8KwU(~COy2bVrdX?m=7=cBWErKNAv|HL5C-pEJ zN|O{W5X>;GXYoY^XEqJ<=`DT5C8wW#@)j2HEmPQ6sADuUg^C0`iEhP~bV5QD`d8VD zPa7FI)nkEwT%k)3%qz6N$uDz`i8apB2~8&0FQNE^CaQ}$9g`ta^-}U$@=B|r+>r1b z{Tr$^drt)cmdPOw5&0t_zWoJ!A#iz;C^E`pQM8woVl?*1r@RM2Qb2g)=@y{lrQI;b z#Hw@p%6|tbIX*m4TLZ5&nv=IJ{@%x*qXjZr&%(ejbPdM?`9K;`dv4PlQTW6|>2ZM< zmX5u3&nvpytK(wxH>{Dk29?p@rh43J{Cc<)SHZspJE)MPrTpw;TzzD`;UkmX!+uS8 zG9<}=#O(W(!heoVm>}Q=G>ikjK?J(cE-u$`(?du{T7haY#t@~n)MtQ@QsaeUL?I^g zCIJk8F*G(?+E8o7Cq;RaPS_j^`dn zs$Xji*(ZX8xD9NXAr*1p4FuKUE&oL>~SfE zl_gh{E6k1wa}|=zp=)QYMCn~H*NkLu0Gc^yRCcKXk^bNaBnqUz#8H6D(HIb=OU}Q4 zZMA~g*Gn1eXdq=oZuvpD)i)^hQpTV*e~j-q+Z+NeW20&8W+5*=dUhN-8^+Dm22CGX zY&>i+j&;x$kxYX&h`{KtgpP`K5$wm2EMyyJa?x0X4PHzh9USfQ-cJIU@DMUQ;6*7c z^PCr3hBl5AOSRppK!7^Bn)KRcPR%2KxwhmNRce4U+z1_Jr6KR=E1j78k)R+RRm)D zEh1PZ6abFPMX8kq!`rPDc+V?C;h=y4 zl`BQzYeUDhpur7<2`oq!vCr-A9e;52M(e2BLBp0F!iYq>~t6sMDTHujN;Qw;(+eAylX{n5}5%1zMqZqbcZ%H`e-@kwJCluXG1iDW^BKqztigyVwz#f z;J`7TfRHo87Q8EJCUH2Xk&{R???>Kg8l@Ri_w%!PHqR1uDk(;Pc?yu%FD2U5nH=_f zv+jLT>jILDf4*t<$b9pxYxSc~tj%YWY-NGQlxJwu2yE!OL+ z&a6s(7ocncq`UKl5Q+T>u=aPWBBwbXP}NQ7S`{_@#MCK&Df-Ae=p%lMTT~$>!7c-y zd(-DeoeS4e-1DLhJt&a|8o)?@Zyp@bjJDve%qonECxl9ek8e=;_0nRt5Xgj{72W~b z!0_>js@jPAowt|5nP#Fb<&LfN0lC#eo{g$1!X&2OmpvW%Q?*sYe-Iagqg42Z)|ldv zE=FYLCLmFNUOWYJv=Bs82xBTdHJCCCPltErqZGGpT#rE{e(U7a2|qlySUTuAF(34% zulX__?&gzCN&G}TshoH)ULsd?G=++92e_z~HzA)M9RYpm7!I!TYNl1=c3$2V6--Q~ z70?I)f|@Da9wB^C&Wl?$Gxr1S%(#RBPYbAv-I>#W`K-7B8gRFAr#<4)fkV7?i^~XS zWm&(yeKjdA(#iI=aif(B45^I8fC7ScT-?bwJTZ|QM<313Jsol*IKgbPJd4G32wJ6 zTH`!_Zgx^(4$I+}bn>Im=PH{Gtnre%G|>>U3E$EP^AJ*On=mOQt{K;Isao9210vGW z2ArPUNjsz(q0H?`?EP&84)-UAKqTtvAGpKzt*&e%pbU1vKY$E%iEd`GYLZ1Y(2TdF z3hLJPsDt;h3oGGa;l5Rn5yYZ;c!0TgZ8QgeEE5ckV)qdZ*V494-755)@eg$OdvJGr z+)%{QNeN>asQYMzzllRB{T4RHs*K0FQ+_C6kdaVV*O zdL9lEYG9wFKV$eRA&Ff7=@3t57Hi9+-i9)UM{v-FyaaQn-ax0kOetu>#7Qw^X0hhu ziicMubf03dOIt-#I7I^e(8kGZfJbJ2a&V3;rUGANU{N_~!hZ7M@KXXixz2B!U`~%e z-#`8Q_>ci%S3H`{OKHC~&@D4wq>#&hYHiNOIX<6^$w!DLvf@%(hg@WnVtQqqg~R}? z8kjSxJj37kvNivlktKCe(gd;CdL zyM*(R03*~S$f6ElZJeY#Mptu(2x!htk573}l)By~Vk8ixoQ!!Ha^BR$DLuEXBAL7Cu#phKUj`41!DU=B>C_N7F47`FiP`N-EDD^q6MpS{m8#RH-^touD2b}Dw0k4YB z7~WR`fev+GDFg1W0o)RQyRaWH?m!dl!e82es$h~WoHSH`C{5HwY7m*b?d7>#8Z6h- zYZ|T@nanu@jlLGJLK0moA2DMEOhhYRz|#U4T?0a_V$Q0Wq_;q40)T9iFAr39OKsq} zx5eNo-y6nc#I9Q+$s{5ISvHMuWvfplS}Lo_VxO#>n9$wca@Ko){E<1S9U}oSZn`z3 zfWk^O+b2{?6LLdbr-r7)a_U+wLme*Cpq15{>*MrKj+>2EUV%#rL|D)lnP zZOC=hrpr8=jP1^Z4*^f`QSp7+fx(`Cz~8(<#Dsvhyz=7A(rf2*z_EO1rgLU^D#`We zb*?u8w@?u(+xJm__%F-&dC4@ewWJr|e4v06VXp8+{2s|s;+DBlArM*BU>mJ_#LUo` zPw972rsW+-uPEsvXgZ%vz=(v!R%V!<#n2@(r!X~UKaFQKQE~-9in`5=7L@Fun6y7$ zPVy~pKHV}oK*g&Uu;#5*RDHxnEj4rD!VVID>WQNj$1KTKEw3lFV1u8~ zh9eOX)#OV}4(I52Z;~~Ol=ZDY=~AO2^E^HQA{ZI0b!-FK6WXDw}SlT2S{B2#%Yvl)z*UAr?TDh=w`Q_3E z$~3A)y0nCUW{G$$J7s&l_=Nar$zkJoCZS6%8-To$DN@eRJRbVTbloN!!n@*R6OJ4n zx^S^CS^982oBo{Ov(G6UEg$3~usQ!IyXzZB=~H1Oowx)9zc0J?Mew-1TM_93vfh#7 zH(nmvNo(rF76eQ)P<(mLmE(N#L1_9TMZ~|svuNFabe}C$8ewDU2~{QDQmPRsMt6s{ zyS{xvb|*~wtB$A}677aq$6?Yt;lfovO(KBpIUgOJ;de%ctd8RG*Iwr8ZO|UOl|qLy z(mb-%CK(9-?nXLGC{Lf*M+p=BJsKxS6q58u7aHfd@9qCq>>vnZpn zV^J=3sg~u|-=oY4IUumVm-H&>E4IXv?qR?r;(a8ph!k=(*hoTgfu0a4zeIgq1af(Q z&{Sm0Hbr=$2N?5HI3Yw!{1D4ZLF2!zzc9rAqSk)SJvF$qZR)AZZ+U}$D%<3M3~FcX z8KYeVD9#BHRmln}C{b7bXS8V+JllO1K^i1;I8sxO~+XJ0gsu+* zVS@z#!F!eu&4S|?Uw9kC5nSjLuqexHgx1<6oPhw(QWMH!Izp|UXeOp*hRzayv$8CvpEPdIx2u9LC&saec@;$&rPUdX1U9Dz9$>t zHMfTwzUR=JA%&5;XT@$IS!YVWr`&kRU=CkL1*Kb?l9U`4^BIGaHWR0&^j=hcL$J`E z;EX(FJPW{k4J4v>$fvCrTfB_9r#l-u{Q{0@2xh z4Y*cac=(aQbwOBvq!q1f7^}WVlWPYHPW89qRPTEs+N38>-b0^ndCPNr!B$eF9X=j& zDK#q6bDWC@^lR+hnxfg1xmdQBuyX%NyY;?7fP41MG8=Cy#wv*yaJRcjA-2eqyl*Pn zqFg!+-LxBhd38hEs4yxqxUxW<{*zMd7Z2-?pOxn5!F!y4>$5tjTCRL8s}jI+&cNnf zrKu_HU#lWuJ{=F}htK5*GMC4uQsy1NEau(fhMZ|Sphco3@Mi+Ll4ZB(GGVI#_3McA zY!kmX5xGH<;2?nkrA}rgaUUT#Rwt;_Y?7&qe5P)SG9&a)vR|PmOtH7!C7o-htWA~{ zRYnP}bIi$q$su&y`7OP)n$K3Q;%xI*znQ_eCK5*NQ9FR@#7qE@jx!0 zK1Zb@pO-?AkBICYuO<8mj_V;ng>g*cS=f`ahPBVVyGO)`WD);M&TAM2dJLDv;2+aWXf@(A<;paio7IT}B#13jd}J;hXSb2`N#apiKTQ2T@8SS!dN5ht*d21EK-p@G-9NNdo+h`OY z)P%ubQv^F>9J@FuosAP&l;f;42YTadG)Xy3DGgmYx*(%(xY$izq9MtAbd5_@ z@%hJM8KKCq3JUd}&PLbufDB|cV#3_jLnEoTIbR2y0>o@(5>~@JwL5qlU+fp?R@Y{K zac#q}PVQixE&S%{$xB+Iib_N+soikW?(nU@>ZmB?{Q{IGVRjw#D+b}Z@K|Crr|mS6 zac!m;^x@!_28<;RuB)t%q3Ky|}~zJ#BM z^9EP~3zc+A4-lBpu_vQ4zn#%ib)F7?kWSMG3CVhq$x{z_Fmmz*>GOb^fMC?E5DZ>* zr3Xo{Vs>^FVU_Up-VjoY31;2SFD7|)?bb*a>62OIKk*NlFsM(pTI@mN;b@DFYq+FSu zB8 zUe|&1!94q!&K5{Bf)iJbsX5#c$e(oJR9=r0Rifcdj!a-wkRbt~a8Mvxc&hWyO2fLF z<1N|-6=LJ&h8O<;a@7}j-h1bNjfplyqOOZAW_k`d^hY`S^uVO;4-z>szmy7Spmcl@ zZN}Rc#`l>w4{Yv{99RN3xD&rH_JOm)y5__N(_Ua!{})GP{FA+7ZEm9mehxGI2VtfY zhd4)49v=b)OcJPvkaQCBEKJ9ZFX;`*UGO1>_tG(5_G0P#t?tJP|? zl2$7zfc@CJ4iQoqN1BB4tLUh~*mfM2I$1*Mbo(aH_~u7#xD5K(JP)EUgsP|BW7fPP z!Xa1;*GySx%Bf~l(-a4iZpb&U_rz8X6~L)J$0Tbx z+E2Xns#ZKnaYjlwfMRPCip!_J{vBQrzo$n^!UMtlxk0t)xIR zHmIrlEWYYAfRXiRcvgOU6^C5?qj)WjxCYMS!Eroci%%%K-^ie(SS3}LR|A37oamFI zu8r~yJwU&T1GdkqV+NnW_$9ZdGIaBSPzm^TV@rk;2uxOL|DeCGP%bC^)5mfxjWh5h zQPYlj#|boE>xw;~!S@fS8~UC=~rh(MjR+B822O zm5U=eh{7&#ulZ~Y$uJ0W!1vSgth4SNb7moj^X-co&(mk&=d-bO3)g;@K^6c9r#LC;W__r8a zISR`;rPx~R7Xr>x`^pi-8$~(2$$oiD2gP2%>9{oKCvUQKJY1KSQ$^wOx4(|eF0;s@ zb6Vi}dz?~#TohCE8dU?b#1J5iTmi@#rbk0(u)Cb_nwV4%URue8=TskFr0yX|mX9SW zW1f$H&{0}hHx56+*A+WTathEXd$c>l#FnTm5y-k zsY0cHoJR>eOjNDY3*h`wJ-xlIhbDXjYLY=~!FWe-{*-~>RoBjzSH?Fexm6!-stggN zvv_5qbo#E^Li&r4^w{boN^!><7Sqw?Zk;gaZ3R@US0mH`M^O)+FMo1y)IS`47n1MW znCOf>^xh*lLIPKpP|4towT~aaN&*YxUsx+_)0>#UTzt6KL| z!g~q*6z7ZwciKy-1nQ%pUH{M?nvdh}8l(R??^LLf$ zmN&>n-yYZc<~X5@t9loll6*i}s8o2BFQ5i14e3&rbdNkWsn5FaHIUVhqpG4#uFkk> z<&-1~9BdY6P5o3zI}f4LMjSp9hg+K_vd)ACoI${ZUSu%30{%Ii`#hyc1+!_$2SWgh zR1H9QA(Du-2s0xy^O-=nHi`p8D;5WTsiQNzlLqXSmfPj4--u>;ENV+za#{$LnN@iz z_gAh14TJ8`w(a+aP^2n&e>j1cij;-7OR( zffaX`J9A6*429>Sk(n295KHPWrscB}CkFLsKFFqeZ#$l1#YqHdfu-rxB9ke9j;R{U z78S<~5U}s0iWBOOdQwz0k@2AIIYy_ec_QoCx;#3i|);P4td2hQnTaAgp;?30ayofU~W%4?c zEgm!-*;TyG)r9~{ZpjS;zS;^CJ5*0+Zd^&YUD-K2q7B zk6=2^cPqu1$eNA+Q0)-vLKbFMebYZVf(Cs<4bJ(s{2~X3@D08)OW~2(RDE{RAD#^M z2K#irmjePvN_PhxNAd!qBPmK~l&c-+8c3@;M7wwV)yYtO**_T$`iBR9`$PqzbiN$G zQMG;ZU_(}#N!1(bhn%7;rns_F*IG(hxf^G6W|@t5wpVO7Vw!0FSfL?#r0}~+OJ#ab zlu2IJc3#*)-M|G8>}Yyx9v^FWpRa(#y0=y_twk74EQ-{FIrB{Q$jX@-f{hw%;T>$> z)~zdTD-sXii+EC9Rn1X<0ClFo@s84S$44B<9glI5m(g$q{m=t(yErAV3M=lX!wm@i^pxN9> zMC6>PGl_<*wO}abOm=5P7z=D9x{;Hv)(A{aYSRW|G^BR+NlV%h+K+V&sz_}L&z=>) zJ3oAveL8db3kJZ(3!*t1maDoXH?`Q{Wx4anA-Ai4BPW}~E2ODiy(^|loC4sA$!cbW zu;_suMQ_Pz(O_JU)rc+O1~BZKcOV2c-#A2*x*HAwbcIX;X!Pbc7UTO&vgzt$e^*(% z=4jxR6(igS0}tnyr9%;;6n}v&_p0^ghAqzBOcM{3xBBQj9t>+?#{bMHV~li(?3dc+ z#Q?2;xVJ}@98UIcM3?Z7wLawDeu=in4xau; z+8vxx`9Iho`Aft{!Sz$F`U6=!>17k1n)A2AeFwXJm4{%S_vO?)GelHH=H|EW1g6^-@mX62n}C?ySP<0;h0iJ5lUouuC3e zbxDcoSpKl@yu-vU27}0wA&}{;ku-p(WxGG*9m(}H5zT9fZ~_z?CH-thn6#*Zi@nis z%+?E?mSsIzr0rUdd~kICK@sEE#y0!&dcw z*He;;9*;mStO!JYIvAYhAc>sJFB?TC1u>`~4^-&8_Irjh%I)9hXn>|5{0HUkgRxQ_ z(L{UCeyd`2BhYjnc?Zbv2!2wM)YJS!YwosvaK~PN>qlKh(w=~2qRplIVHv45cral5Spc+1;424i>P8 z4RGxoQdxnaLo$n7I>BDlR3U{`+bZTtetS5WxFU1KWjS9yrj+Mt;4Cc+STLnlX2Y-q z2P)VL{4}?RX<7a=ELjuN_hHMh+(nHU;j%UJXtp(H)f9G*&Z4k9vs5gcXIlJ!^C*9L z&l$%S5d{`#9JK{)(}n-^37U;gFLXM17T4Hf(OTw_ncu(-)mgO7h3|?IYd~C~?UX_S z`Z}Eulmz+uxe`Mx!=n=dX+D~bz6Nk@eZ6Qml+Y%c*ja*aF(zjdHP`!|Uw4+d%z_l7u}a-9SM zGP(NnjpT@}<`I&gJ;6w;4>(CDbhfv5>E8~e%fOmHE^a2JH;w5$*nXItLlxoUMRI;w z6qBwg_3d}w--f4XbpiR8S>6)={cUKqE|>h)`#{RjLWp*>fRLttgG|8}vqMx}2{2fa zbap#Qf>7o+6&gA;ehl6;dAQ0v6{)85UK~oDb6P%5r=OSta;+YgLuUB0(HWfB@7y`h z%c;Y3s;2I1ctYoSdXeSyLQ`GE7kQVijhCEw#y z(4RsciKcA9@^2V_wDKNVfbOVxKF%hP4aFqCPO@nVpWO|#Z%>~d78m6YKjOu89z7ng z@lR1EW0-8>T=cuG2Ulp~9z5Q9@a5KnQxF6JCTHa@;^bpmKm;G+?D1DRK_0RqDL_hH z;t34UubV)@JLDwDPL1Umz61Qbi;u7&0#X!>$a3b|t*#S)`x$0*m!P{4+iczd?DRS( zH~BE5U;IbwfzIV|>h@YPjC&XrLlP}VuaoGZYPx{{S4nk=xgoBSAjFXI(l84{t$rcS z5rM9zdQ>%b=fN$v^|Pw2H~i}<(iD9hoe+fV%$6O)cRiV0orF9$$&2qZ!; zaD4 zc1DyNJM_ky8D(gS;g$=+yE;rL zH}DZ#KS7su(a^s8(xpMPgM|DZ$8_{ZdoqsDW6`C569yZ4O4%{!4boVEP)Hi>$vDyo zp|^kBvVMt<=z7mm;hwFLy_&l9Li*DS=z>YRqq7BDTQr7%F&s_7U}R@78qrLUPhb{g zw`7)VYG+Ot)hE_;Qe~1rF$kmwvC!3Y_6@+3qeYEKn1b(rX1Mqf3zfi3TDLTsB$Xt!m$vyINH^K* zJ^bV2$mDb`&bkukkwy?4&JLGj+f+5b98Q!eSv*caDcj&^!mh3hj1PXMV(3Ev&uW3oB{ZB!gINQ&nBQ#zrtNos{7^fXH*rE;Hkb7rAm1A{qfNO zCcggK8p$1%@li+eIz7w*T`j&Z^0czORqErSG)gQvr-RSobiXFMHvI0%f%(05`sMK# z^rZ&-@CP;qhX>ydaVw>~Dt>}S`LjoGpB?s3EVzdPcYZmVARK}*@ZRy^@d?6zt`X|z zCkF>dZV@Mg&p$snF>tVIxVT6s36;24To#k$^9iidrHsD1z=Vn$cyZj~C5GThI=0D8 z(s4!X8#se(RqdS^a^Jjw?r9VJ6%#6w$0z-x&n=qo#?U;TfKS3EnyUhnge<<5E=1pp zAqp?CJA6Ke?~2}c2Zx8p-w4Hj_ZulvBQwSCQgoQuG;b+Is{s5D|NFD*tdkV%cBwtO zzZbcA0q6|Xm0r+)4j%=0RnPF!-C_dW>iV*{O~+NYV>Dy)VC0}X>(MQ9eshTnC8{u@ zX8Ab7$+((;A>tc=4m9;cX?Tf+I02;^G0migc0&xA7Tyr zAdFwwyp)iNmQodYh*OcHQ;aFQ^8yk&ygJv-LQ>czH2U9LYA~fsxRmh4#iybBT_VLTqW1(@h$*?v9a)k4m>qYGO}mxJiPjlT66BO50$j$dyd1+b9z1c zHSgL|^cfMyO(3&>iljfzA#%P%a`?J)A>GQ@WBQtqNq`h~+@g+;#8ep+v}=Z2n%u5= zWfS96IOVUg4w-Co9cTz?_w$sq@y@_OK2Cq*ndur9;u0W*cawGpWgpE%cf%^&cm`m+ z3l(^hvY6G5(j{q+f`wQ`OJd-B2IJ4~sdC7eNqVRViobY&(*NcNJ4v_+cMr3xYzi#& z3>T5S+B^C!6bpoG=82wqu|i3k20H})heMje9Nbx~NN5<_2bYvK7^}!F)$IDpe3LTLnBC@;;>`dhSCT6-#nYhe+O_ zB<>;oe5B=%vpGt{z-P{th%8=E=_sr<(TqfdK=&M$KS@ee8vzGp!B)K~kBZ#V82rcO zR)5KjBwhM(SH|EI=R$VLW8ye3j{ilnKjvUl~BnCtz)5#4<#HbYibu~=8@HCQC zq$c#ELW{Eh%P70VLr+PkqJ%$KnRYcw*RD7{h)_L{A$LTbP9YQF%7p6Rt4PmJW87VR zuB@6Wb?`}D(qC~;H1!6i*`2BEm+4q^%CdBvYikAkJI4+pNJ~pdD6zfIfcssr%9GJ) zUDpqPC5Le9B(z##U#GCNxJ;iErPE2V;3xR-#nn#ZTPC*%zbu!c1^w z`N(RdguM|7x*-yBKOhL#N$a_pwT-BOc{$tlO77W3@!Hf`y>4h~((I<+U@!##EWkBKWi#Ed!up+lO$I4Pzi{GzS+%ODnAOtCpG$Axgb{!Oi@Z%ryMz(; z1;Jv=E1DdZP$~wAtV#uf8sOGvo*-F@;pSgW>(6ZZmh4KiH@3Q1_`p2DAVKQP`2snv zPFb8zvwJqPZWL!XV1*#{3t~`Z6LPsR|Jk|2hY_s`Eb<&cfN4AJ1z*_xR~>zLykrZ1 z*IcQHs<)r=ga7m1s}5eQEI}|uNlK`susbR|>x_4QPH_{61KeGh3!#9oyrN6w>O11_-Jy&QZEp_% zIY7q0`@^qJ&6f5N@1Sq@@Z<2fzkfix&h+`!QI+tp%7^d?-1fzNOS6s6jx_VUo@{3J z$6A(ZTG;zNiE-f6HYxKo9h)HX2?YRPkb!!RmpqgOKfDb8mQ&pDx&e)uU`Tuk%M@Nt zf2aYGKnhnQ*moP*AsJ9;UF_CA48^PRPiw=4{Yx?1I+#Y}YWp}5)b(bL#oOD`K2RM3x(($Pe`t%oDp)C3i7^tU2HwGI_l zDIF8Iq+nTx#R#caPF}YJF=WPpX%M8Fe|x=+Nj18i=W&yc2YDN2((zsJ@>Pzsr4=}k zOZMCx&Rm^ARAwu3Y~4N1KP^U+aZH;lWm+B2jAi0}pp1IGA(wv`B>qG@EO}&5Cl!`k1ujr>n+mm?r>QwaM+7vwQ3j>1#7X+|O*R1%b}2#we|c}F zaf*&pWFd^ru9!wOw5?EhhUJYbP6nf!nN-3;hX81=0KYF;dcDXwQ zEze@qH$Erk4%cCWs?D>7_ziPMgYK^G2m39nPN73Dqvpnxtx);QWC=hcC*Jnn zS1;WPZ89P-_Szs!Iy60|F< z8!OoO0PGdeG$F@=qX1hqsreCD_DYir7+y~Snx*;R+j4Vgsw}r;NPY-B0`Yuw_7fk9 zAi5}Qq)lS=3!L8@Wk?h4YO0#O=mR9@6Dl*KFsHdowQIRo0)tNaf&a7aCQ^AnIzIEexRw^Xj`d4 zj(BxCJsK2T?xooSD&e%EJoW7}0z|_@U!C7SqnCg@2rl7}al?UpmRS+okARfr41*JW zLMj=QPezmJ@i~DEfASL;k#3x6Mb9!rPjmD<$7+|J*zfKLNB6=_ehbOJ&!X!6>Bk5?@B=1o;m;#Y+}9Cv|ie;Ggb8Ow=7#pV1(#-nq_ zX(OPfNp;hU#696tVCZ>~U8->kq|ScoVM(A?LQNkAv4Qv`$aqp*`(R}{+DPQ6vR5za zv5J%rp|ng%c4hSxIb}%%T_y3~0D{hanv~=>Uey1NOD8AeceUXXaaB-Ax#Tb}O?El{=1I5WtOsj6=(AP)q*5-QnkW#fSgeu^cejQ+ z$+@)|1KEp3sGh!*;Cm-i?Hvvdj)uwc(Wl4#ll{}d{sFD^C6v91Y!LPE;Ip9=Rg2Ug zPDXiIg+^;)yFm3h{y@D$^eSxM6aFK=J+{E=)}b|Fe?st535QWyx1d$D+m1_-(~LP3 zr8UhwE<*MYx%Su+etYR7fp+5GTtNJr|55RO+TZ(P8R;W_lkm|Pcu6yKpAr1j|E%tR zc5-~QlYtz-NzAQ8R_oEE*F9-1MXpnp*vq6vpONx%Q~McnP$a&}g`ctyH(CpbFq`@B} z3F2e%xc9Ku8%+i;c5JP{^KR5_hXr|g9nhK>CA(9~IT~QZ|@mzolsd)(v=BVlSvkelz!jSQIXoFvyVO-3eKP!R8Di)*zz* ze`UIOad}(sCrrfeEg=WGm`M-SII=k3qeGRcfINZvr>tW)*`0&e;@$L$@XucxcjvM@ zYIFCpipk7Cs+vnOe&5DyGRrmR#W<(Cxb++Ql}h+eH2})6q06A1f2A^^bD+NW8HXt|`<*rIY20ZL zkfyx`fr#7?kh3Dr{j~zNhqwCU%i&nHf5>T<7;g0*K-4|Aqz{}((Rp4-J`FNX1hd>A zmdrjCBLR)VARgs+Qu)qJe`YT5{Pmj;w%-|djJ}CvYGkXyieI>5QK-SbyZ=#4Ch6G} z@6Ju9!n-Rxu7D&gb+)HjN25=<(%2G5&>VSoq*Vit1jnFXlPV#tB2|>wYAgpQa3D$w=Tuse;23d9~(V{s*o_* z0Y_NkeeAi3x0Sj+eQLBeE9H0$JuQ*tYA1Owd5DT?^^~Y2o{qjN3_O~3DiQ|lTt6!p#;yv;-yW~d+%vqzGl)C-RMJb}>S_N!U zJ!Mnv0N`DjDcb>Ve@+`#Pk5|7?VOnxKGDQ<^tGubvwShSPM_sKp0h{Kw;t|1e0JtS z;pO`l`i|uMhRLFzRXUX>Dq5vq!BC7@-US{NM8!)`6M9msoU#xUZIR@>NNIbNGPXJO z&uV&CJ$smp#$#IryDDJ6d#+S@nuxc(wA(MNjNwXl46V(vf4CwCxmC<^WplFCCee3Y zHyDxX&RXTKR~Uj%AeG%3mRo@Zw-)D1?@o3WL#xXc%&cf_dG~Dzqt6Q3bCnCLN|rBU zX|-&mR;%R?9v3thcc0#t)AR}ltZ`Q2`?4m7-@M@}mppzNdx($U;KDaSQUX7k=)*qg zSf8z_XkL%79<)A9OL0}xpD>#R->`<5=%s4dMCBpDi?6JXX5e5k5oq+lBfXQ8Jly&i{+ zTc)*qe-aVd!rOE@PZ!j8#SOpIb5kNsdD*H|RzqTEb=!qgSjx~8*d$|SN194&@+2*< zQ=mz`^enq3ow1)IYI^&~P#UJcP0a&QQ~b^E6PfI!8C7JSp)hsc-|QW0QzJ$2GgkQ@ z#;8T2VTIFE3q?hNGkOOK_$pr&!bVp^mfB4`e^JlhZa-$W=e5ZO!b3$%$N3*<%yS|Vg?EI4tB1?Xo*z6dylV>!g1=-7-W!x5$i8bUnI(mu2G ze~EB-AF{L=Z&r7g!yq@b29zYUDi7jJ`l2-&6`IsoRzHrD4gwhO8G z&_tbRbx922$hE%8#sLz{O&hhHRa{`Po=TgXaI39aGrDESlus2~$Iz6>>rI8u$I0i$ z(|r5_pTzSFz<^RFv;a~F?D*)!qkN&&e+|bQ@a@uAlk9e;J48UH+8}}A4~0^S!l@5z zJnoMs7ce@5KFY(3e7Xu57@3neKZUk2u~5iuQ#AKNq(0+njEx=-!Y7!60H=?DrGfXS zBjW$EYnuE8Me@(+F;$1CZyCVzTY0cpE8M##4Vk6Efo==wt}k}GzJ#k1nx0G7f4Tm= ze6!E2SLR=#CO6KFUN(@`!bDAZn&Q>W>Vzb$!U-vHsIti@O_GFd$^7P#ae}nJF{Y3o z_cqWBf@&OwrX>$yYU?6=`&o+=l5v1SUWybHWu*G;X6ktV{#|HQNG1ef$QKmw${Yce z%I?s~qHRe{UZs6Ve)LF$b*Llwe+_eGh}9N#idyj$DNeM`+~YBIcj?Os*;^Z@SJqvP zM4;(##TVITK^zqcK4uB#ti~%acAn}zkUfX3`C8cBj9A^20A>~nHz;mrB9IsOXOU)?(COxle=W6-*FDoW zHlva5EI?)PqOoOJN`|*!u0z{eH*;1Cy`9MW9w%RI)z=K(j6~KqfA!e>shpm)A=KPU zt!}H;@jlsB{58Ilimq|cXb=ktP6ZM4US6c-p{gy_ZbsJzn#Yl9+oI!c;&hir&BsVE4upziMGvaw zWTXaen@j}qqxD55!Oeb&w0plxM8H(otIN_ife;1qM(|!RtgCaX8 zwLQg)2;>I0U(b^3U1aV&qs^W1JH&#E;Cgok*~6zvKO$@^bvzakRt|Gm9d?sR@4b5} zY+e8Es2XdX;m;LpmliEn%QC_O)i>99!4pL^p;TKv`@ zUGenXgGPtqa!l*zZu#Z4H6sXw%&ILgf{n}BSLHTle^{n55!!w8*HLd6c+nc_{L zL#1#=;wJ3$Cw&BV-Un3myn1xqQKvb;LSS;GAXhUEfDpJ@egqCI&vs?^GC|)6h#40Q zL@kCUluh7oc2gl*9{cYsGsmSr{0#549dEe{}>F8DW|G4J;CEvCU2PC%V2c zljKY{6s^5Y^vF_^gtP6FST}AGQm`x=9bgiF zB*YZCf0n1vlE{5j*fZ< z`_B?It~Em7=oo;y;e-j}e2lxP0+7y7n;w%cf80Mk%f?v=-`a`aI5#F|)6!T(UzjbT zI!*Cuby_%vy4)hC^rz_ZQSFWJ*$y;0De_UofcH>uI&h;IH|`D7H4d>X=B-!`dNFk@ zg%R7(P8cShl6fPjlw%%DIjt_HKRJ4YMZl5{Gxpiz!Ex^iR7Cs3XH;nK5a)FNqi?8a ze-%|)9qfNZ<+^Z0_u20DG5lWJ&~@-XY>&ax)N_mUQ^!DFU8SV2`Wf*B!r}%Cc-Wba z2Nx#A@JaO!)=soGiW?8@j3Y8j<$bT4YD{?S^gS4&pG`*aP?|=Wsrm|g-%f0=7q+td zdpej-(zYSft~}g;=|_Ok_cjfJ-&*kTf3SUK3-P)HxIYs)rRv`TMbXp5`r%=3cQ0no zP8swJPw17>i!2=q!7}ZwU@ghT6rwr$gg$FZTMsfUGqnx>L`3jwP6AjbqyaHmb2x!* zuvTZB1!$shjxYtS;Ce>S&Wl>4n(uk$UsgWN=Zh$#>6d#%dXnd(v_FmxQ3LvQf2h|T zKDhP5zI2*Ev4)iMHj%q^c{8sSfW*sCG8G|#1WUHdT1xmM9DpWF;*LOb=F-QD5?tKH z6P1m4mq53WoPg;4Xyoga*V&athR9UkF#3p6K9|G)4v(Yj66M6!C1|^txO{Hb7s-~@ zg}#N&o#eSpPDtDelSlAakO!8-e^l9!ekb@pGvS6j44dgSvmKV?NPiW}RY9O%(>ef} zvz?uRW(Hb}&{zO>mC(U`f;6#DPg7_Mk*rcX&6^pYni&yVxDun&{4{6Sz4jG&em2!u0n59ES|Lxm1?~W6TG%vUr)Be}e?HH{C$b!0 zW2Y-0a(2ONLy2Wl<;%H6m9%L;4Hjl0n)6rA!xX*Mk)~|hZ1zgy$Ep#&w7je}+S|%7aR?yf?yE z(VMCzY#qoE;b>PB*`Gi)jYScb6%O|>vOZa9{f@%3vPG5$gtT4NpO7jnwhed;e|R)0 zbV(E*e~=F`zkXL0>2Pi=2Z&wM0^!{HRBB^&I{wTC;+HW_glU*S9D@Tu#8XFIi6e_AkhW;v2`oR zgPMhqyh4hX0+i>dC*RHh|Gjwl^P8ZIt2a+WEIpUI z0*_Ory=&JX=A0HgOghN(0)F(vw_G;LH?K12h8wK$)~FD9%wL9rgQeD2DSKK*r@g=7 zCE+BHWJ#;(f3mU7K%5my;-JEfnA#rQmMwy|U!t7uhl$7juYR;{I1YcLlfOk{#cRKJu<^GP9Aq)ITAcSr=x6;pTku;noG3g z;C=V&e`5%S#TZDkbc%8kLXF2FY~%}V(ukTHx;q(9Nmbr^6Pp@li~&ZiA0jE#mdH%b^QD<+f0V6swXhH)(H1NMDTW0)x*1sGmSdZ)Gr*|5RZ zK$}3io1{~3Nw*ICW`X2^z29tHeY0VN(u_Hj=IRQt=^cZd+cAa|W`}UX-mzJx$$~Ju zXJGM7^`E3;p=#A}_fTu@CTh*uMM;oLP5ob{@CjCQ7|x{8(U7Uo?$m)o^T-(Z1>krK8s2|XPFzf&yRW-)m4-kqI`!O%8Tg03R6ygL>aWO<>&<^YGgCpEav@cU~_ujIrPDATqoyiUJag$fod+oP*suC71?! zSn@b6CxI@Bh3t!Ap-1ViH}_q4{JPdie|6&wrUx#1tBfMCaa31( zZ%aLhC~EIrQc-L5Q2eK7C5`Zmk;gXa=`AIk zi!q!A*D9t`AkaV=?5$acQpf~zwU#Q1UV_u$-mnRhH-EwQ#r`FXRU27(MC`U_sCD>Q zo}+~LTH%B5sX)DkDJxJB{2j(x!721ddhk*`jk9QAq0 zTd~4&3>g%krCxg$SAzcBfKGxP*3pcQvxzPKSeYi-8OhNXAAJNbe|VwR95W{aJ8sS- zi-sd1Y4>us<>O)-tQukzD4kX26V`@qZX0IHrv;{eZ@c$+cZaLZW$NZ<5Q{7jEjn!& zucBXwbgathU;x#IQ+(LniV8PXCn~utDQ;&xndE(9*w0|EXhhdQ@}s;z z0;uPslpFvBWfCm#Wm=qcJ@c0??$zl?A;rk;wi!)H{&DG0fA%M+tp*IA+^O*Sg6`o= zf{q^o%sv9BI{$+eexIUGODXi_1^a!{9;>?aS7qpg)Co3~AdGqro6BFz;4U1|MV9v( zzJfuOgPHlVMJ&-`2O}NJs5GRwbRNwqD{c?bHZ?4hl)JMaSFSaW(pMOc#C_J)&$0jH zOptj7wLV_{dEOJM7ueq)S3D*Y6tl>6!SUjV{^Uh&elSD5Cfqc zSXqdxtP`7+`3EvJo;F$^=lQQVl=bGbGFj5?xPIQM6}+vb$xuCjNn`}sCUs%ceYt%L z&JClc+8sUOP0Zti!1MJ%=S@3O*7p-BIZ*@rO8gD+ipuD5uzyx%c81}@@^V=k%ZxJT)aXASi9`$b$3Fwx zrl&F1G@*0H`BPSs_^pKzhzcJ>!^oib#OTI{e^KIp8r%^?gj@0;xl ze-y3Lmt+1fw;%U*wvTs{jo21Psffk8YqBnu2Fo?Px*gLiJ|J0^`PKCrU|qoki@Uje zGpwta5MAC7tKlKtrEeURit@b4To&6OrfVfSa>Jh0Y3k=ij@m?`b}+;^KDmnu3DMpc zwjQ{eaNsnN4`#U#qPu=8wyO}~wcD}Xf79x}fL2*&xx%GSLj@$5jYoNYsy@k25;bdH za6W?Dk}K@(FRe4Y9u76ZT>f>4KZBkoB8rGUG+D+BHrxLTvav&e@C*Rvz*mMjr#B{L z*xBjM)OkhSy&+OU)Q2PV&u;iQAJ!1oCAXp#WxWxltYwl`oWMd76B-M*oA!>gf0^qW z>MhvDE*(`Eo(msh;)Ub9;^Kw&}ua`k|kIl{6bu`I>`Vzs>X zdEWNnVeiZM)JT4Ga@d(m{q%5waDoKvbxo1J3~l6`kdW+;93wx$@D>~sQo9RMPD3X{ z5fg=om!Z{pr#kGZqT57U!C6_%e=zyR5b{ifl@bPw&B&rGNb<1`Yha+zGXyV&P0xf} zr;x^Gr(NG-#O_iw!Di+XkHD|rXGc5WQ~dDYo7y+MVL_H2JFxF4@(b$CQT7LvhISWm zhw6$S8{7;bMERvIoQ8%OA->o4Ksdf~ut1uDPosCjAYJf(asTw2pvgg0e?DTQa2ojL zY-njfb`c6?!)4+HM6cp&>{Bz;FD$^3+y(p(Mr8i{EXay{!yKqly%LqALyV+oiAhKK zVNP)#8xewyu$(_@f@I*ltYRw7?-d1W?*TAUV%NR<8-Rs!C!>@~n}-CG94euS0wxlL zYSiQZGAVxhEex4&RkjIqe=|g3#c}ep;V?xB!w<wSFin8X|YWw}Y{e_L@!s2CxRiS$D! zig(GD<42MoW}9RqkGUJVJby@ygKa7=CUDhzxt9Gh4ttAf@Yf)*58Ee9!oNn^MsL!C zK5wi${e5%Y?dn6flcv1%?)7!IUy_6f^Otl*z7cu)ayqac$GrjK59i_SqP-Dd{ZNp` z55`$O1?7z<7;h7&e;AzY7-+muGAQnX36%zrBybz4sw9tq(@#kZsI&erd4U?k+9XGr zP5k&;OF_D>U6MM5fgFF3? z@=;zShj?Rhta*N06`*2)21ZaG9q#V#3!Dct;XEqRbZkTV2@?<&qlCfe1=i~`VSPB7 zrZ%V(_^z<}f9m7ju?6XknUKEvIh#13o??Pvb#S=7|Hy*&a3-_^;LD$EaATEY5&|T6 zjNbhX11qj?RwM)WTGzXdR0X z&9M)jjzN7e3%Ne~A{vqacB`vZh`N$%nosk^$BLBce?*Fq;vD8h(hQpRF2_{&c7FoI zFD+oUQI7DLCyP2hAHm}h39-m&d-M>)PDLdVa}3C5hIM;m(0;~~tUp1KqsHk|Vp`(U zM1gVJbaV=-@E+fU^-L56fgJV+DT}?tj#fvtMX97uvlUTl?p{PfIYzgl&`!TZi9pkb za=Z_Re*_B7KBg$vrv%eJRQS9N8a0UX<9tZVjU7=@Tph`3Sv~j4b_qQDbmwM=uS&;N<4J3VV zzoFiZR05I?60zWmvcD|lOk5HX0V(mV58`_&e=d6tDNB1Z925a)@6V;6BvVN@il$}m zBqM54WarXy=dlxXm0U`kq34`}9IfK}VG0~Sw!4R?Mg5B;sLeJ?VS3=xi2KG zqEKtcjsQH_qm!l28&yePB$@P3EO}>{a8iUfkFa8vv=!?UO0I0-ji5qdR$};SAAf*> ze|ev2FjiL{v@QM+0NOV-S+L4wgZUK;aV~;XTeR9BHEA&(?%jrgsXELlT!A=)fBlW9 zSk5{Pz|}VHg1HdAkbtMoLYhuNwWd0&md8uGoANtJ1Q~?4N!x4(aXK$)n^HO~$xqad zhYZYASp7Jk^hfdP^6;r0RQoI~2I-jSf61-;a_1f8M?|suRt=or=N64fD~#JDwVh}4 zXv!U@K{@v}N9L890ZmdMd0KJ+I2|4hitNPrqtFE%D15B054u+7!{CC6Pw$AZP4K}f zjk*yI5Dx}$9Hog~4x@xtFUKoQn8h?8+|XKUS@(YRydX%};~0q6x#4K?BA$y=e^eLH zQxNIm_FKV8B2MdPhX=6hI64xkZ=IvH4BhF&|4r6}*aEtRfjT8nnN8a1q}1e0u9K*^ zLO~r66(+ipGnDONy!%69tWsr$YjDv!g~F}`$56(>s#69{Dz`mZzTAukUF0{(K__`B zimr9CQZ?!4uhz@wCS7I7HJ#N4rV8c~C?{3a1rjIb$YuIR9U4s!RVsq+fn52#-NtJYmpTg~w*&~N5wXGRRPrG%56ciDfx++=4sKFdG z%%qmGQ7N9mE$P6V3ao6>f3Bk5<=Z2d!t!C9$i!xjCnk3%^X`&|D9$$_T(ryxM42ZA z8pw|Mw~Hbl!r2?}4gcukaxSjQb-ONqK9zhfBe%o*($1*soV-=@%%Xv)L?vfa3ou^ppa8BebPwtE?pk052pV=odQqZL$c*lSzllYgMCFmhk zFqc9_Gq$OhkrvVVj5Wu5oZ#W6oFUs#8X;vVM7A!}HyI}ve{3ozfHjyi6OD~)LEFJz zCw%xJG+%Y2>$dHx9`no7%ry~2vp2lozBoJo)eYP^o9wyp7S>D}Dxdx(~6RboFl z@oR1QaEv0+u=bw;9?wMasHv|XRmexQsEi(#l`m5`5|@d`#~tgx=|%a>0g=L6PTdAW zQPo>lf6{Gb5D87N!B+y!BCI)DmSdkL#5ikUp;#f(#(^9(S!$e=eR95NAMR7=1__Dv~ZCZo{*_30M;o zYE+%GRms+drm-Z6N*uHp1%usy@8^gX{5?xzv4~@f;smW%6PhPCo$O*0m_)y^tI`FT z8Q)XJ)hUBauy2tzXd#COh+3Ip-Zb4!I%C(Vojb`5cLwp7rvQ^2e zc`J@34RK!N(?X~-QQzSAAYY>ZIV>JP?){dXrdU*rQBQ$~wa=e6UfZ$!7!juc_m1dV z`7}kh5jch8Q(X(+=nqoWhTLDze>wpMbZ;RSVlpUow_(&xr`VQLOH8O@MT0rjw>fSe{%E5W4~#f4UxE96{xy z!+B*|Ww3LuXx10|y<-&5@!TH|w|BM=kA7?_0|k+&APf|tCm@bmnqV-xy>tpFY8FMr1UylWD;*KM>RX<^_?>jD0!vthQ3&Ldd3wE?I8uf|$ z(VFAv=j@z*e3`=9HcCs&f2E`Ph*XKPmCQg1DX!Er|8k!d8>TN0+HqMMMu=A?3l={J+NQKYbrCMmzU#}%c7VUskyFR6Kqm$N+3~VFE zk?|E@TUt4*tZrb{q&r+Mi6L%~A4`r^(Z&>hk`$Gpkdjskub|;j7{!6XM1)XSM*;)Z z>l3CHTP{SMQ6{Y`e=ezkOVIk2w0g{aO>+COb`byth! zG~1AnQ8K&cUYY zk^IEz17=es1fjbRc$F)?kj2{5F^2leU>iz%5mtCDj#VHW`y(wqGrg%5CvWI|iU@&s zc|U3C%fXV#V6|Y&>lX~7J$2TByozQHzvp{;u{FsQwG7$7 z3qTnWQ=7lN0VI9c@r_xw0=bz2wN@knlbccL3ahjh`6iqwyv*#t$Ro0Fha zt8O!*RoT|ueTTpb7Bk6SZ11shL>bMtA5FFn0x;M;`0$$U1^Cc)rP>K_8S;kQ&&KdG zcvJAxfBoLzANG#5xse+7xy-_-?g>%RMpR3s z6*@LcWWIMJGI?EjBFf&2^rx>u-g!N;O6rUFhqpT1YGu;huS{*0^9+|SM}hJ(0W+#V z%C9h0cN99W_)I|ik+sc{yRCiZxAt;FlioJ!PJ(Ar{IGuM81)Bg&K)9&qRONKEqgcK#S78{ImwAQ_4ikX61eFAq2 zwT8qDDL49_1ZFU?`6xh_{y^fz_^G_|@^np)QCw?v4mE_$1W#-ZZ8Cht%|%ObVj)5CxF)S5HL*NDpQ^vNAr9ZDnAX*-=IwOGf4}JB z6(K+5WE^u&-5seMTmc=|mCwrySWr+PZ)F+_ppk%^y4lZpW^J0matVunu9TCbg6}80 zQu4f*;RM$Mm6VXw^S3)}Vm%PCvn3%rUFz~fvX3T3 zF~^S&bIgF`m8WEFJKc4*x)v#7e=WkJmczQa9FU#cw*M|m$g6hLzqX(s z*mrtGDcGxNjaI#b8(Y0Qe_QGw8T&?<1s+f@$vz?`Ue~+i&aWfl_&_VEotywi&fqA)a9@{@BtZBA3 zUdPq+wKJ#<=)&s>E#omiT zCdEu&O~Z8cpUW8RGB45Cvvb2=nUKvE*WB$*%w6u;DM*ySOXM@_O;7gtyC#sli21Lv z{}m3Pn9dk!OP1fWTJ?Bk$^Hp2wcR zS@??CcTNJcp=4p4wARcOu-AagDr(n$H*dK0jXviV=u4Vme-$Lv%r$SBmo*p2y!Ybt zhbrW)r2`~nh}Y;R&KlcK{*3#n8F4=;uWLWOH}Ld__Orb-BXNg*?vA-O203e8 zUbL9>z$;Qp@=q(yf^upPbfS+^e7dn4-_yh5sK{qJu*^vutyiRi@5`j%a4qs41QO7; zh*rWxZXtU_ob;VPb|`baP+IuUstWvYf;Mm4mk_(lf2(J#%wT5sHr+})V!N@1vpUP+ z#@FHuGe4?kq+a$d)Q#lJ{fGO=Y+S@nVcZ0KxAlYS4k3?gc_5bkB%X9Fxw~W3V-;8X z8drZ^jE5X&nl!oZ}S!rWHatDrP99*k;T++`(V7ytMu_QFf24V-q{W#nd7(gj7C0whFUQ?OJW)IB z0ROpC$-wQ#h(_X{qGFU6ch&`(LF6JX!XW{5cD2p0PjY!>joN0zaXh_P;XsknRB$6t za*Ar7UO|h4UL$<)`SCYtE8w`eo>Vs&7h4U1?3dKd7^tulFTNvE$byOqwT8)R-t$1{ ze|OT-r`e&Uk0GONk9$;%@q00CxAg5dJ!fNI+cBfk?(9b}j>uha=zlR`8rJr;VW1%I zhsjRBZJV5T_Lgc5Lwv_p)14Q!fgcQPp%Y%Q%glX&OPT^BGvGOOW$cn&S(3}fCb*6c zluJx*8_Nx2%j{x|=_ni7_d$2TybQ zY4vZnBt`xH*V>Yzp8jjCNgBV#Hz3RMHZ-LbUZ??zl$k@Zf+P$dHKjZ;PN|GAnHP%& z5)l-iPw9$dZ^v;<`Nh1LSu_A#mL3wAyj0b1tRFNU8N6;8h=cuTLg=6j_z8YEe+~}D zk&eX?pt%!3PR4RzNSu}yM|U>~HVdt{Sui{8+X&B5H>ft~qWwR66QjF%6^*@BYcIyF zN;_vCPCcC+k?dl0ajh&}EF@}GQFC2qYZyAxOordc6e^_8FSr9LL0@q1b|zrX?6@!Ck8_jajonxqUj+4?U;27@Xm&ZSx zSGNgq*uYgj(ZmF+XjY0_e<(M7)#{`I3b*r-wwZF?TgP|rNPYL*%~n}!RKs|;APc^2~uuZ2}lrX2ED7kHKI_=|-$ho9PD=V2*$fgy&Uz$<+IV(`Il z96$MKJ+z@8_>21Vv^K^3oTbyQ7WJZ9%!*53h+^g~8Bo^Z{}g_LG`M7r6L|*tpy9J# z^)v(6-1IYpj5Fk^f467}9TMkSCstU2h8E@F9lBIHqpmq^r(`??jBvOxN;;>&QUT*% z8*K4K6xo~%GaJlvFWRCRw_BS>_QNa0>yq?TB*yd4*~+~7Zg`8Y&7#epq|pxxgsnB? zN`F8{0F-H4=j}KpV6UB@yCebpL|oWEvZKTruhS0SGC7@Z$bG7CO z)L!x9iZVZf9zRaxo|ad|AzrM5%P;}dJwUc3Oobq$hkJVmqY?bx!k-`Q9)5m+JG%S$ zi(mDGUvE(Nv8&p7RbTvZ&%80j7&qoUPI{3i+UR|E8!FYdzbNK8YPwy{^)Rh9YGRx4 z;V`o*cNzvBe;2^QR@7iHvud1~1Gup#EJq4c`BPzQ;^YNs(<-gbiuscQ-|gjITYUrm zBB9B$C)T?J7_n>oXmF#8Q#UBbd;1rK%S=oYRDoR+u{s88lll-5p55Lj`AspalZXg^ zmKBivhPP*&Cr6l~_4Tf8p`JxkD$DIp0CJVj=*W9if1Fp-G5$c}^*$lQ z^kP;}9J{NW?W={bR@afTGonO zF{!4PxYV@K^M5?YQb@SEm{RWKMwsF%pm1hj-)KWVDIMi?YVJP_-o>J}i(#(d|oy~ypYK*U&dHW21 z`B~H$M1;QKzkQnM1vGq7JdxhoIlwYU5ZVziBe+Pp|9|lFgOd!_Uz^(p6@39;xt@K% zS5;lt1_J_Pu!rModv__H;7=_#=W_bqK{bV>iGBCLcNidO@W&UXE@_8bv3m!3Ioug_Ovrb92pY+q;RyIWQt( z&jUjnn#FWn%!_lNgQwjgi(9g>8;G=lxeQ65qkoLkH26Jr_wm^Dll2OyG6@t8t_o)>^RpkmP2IG2Y$NDj*|o39EKQFIl)#16#7WW1-+ zHZdB%x1V3n7yPCPWLC4wGS2|20X0`5$w4zS#{6-4^@2H=)=&Y54;RB5EXkwHJUS`t z6Mrf{6~(owA@?yL*icaxVHruR3Ompc!MhV1xge4xONGcAe2aIdgOH0qs}Kjs*4m*C6M7wyuKJ(l^>sNU#A}48br8U)y3D7O#U&07K4x*paiRI| zOB)pe&qkWsiJE(j=(_l%s>Y2D2Qv-M1}0>BGrK=m<=7o6UxG4R%x939`K+1VAb*GF zSYd3@X33^KRi#-mCH$Ak6 zaW(&8sC^GZ6?GUZj_MF*c7pAcp1=Ke=VqSrF+{uPk%Y;n@B`-9b#0@(sPxT*=?KVLkRUHAoO)&*Ut=tvfOuVY}= zAq(0CS57BEBW@Mj>^hOKsm@bq1mA(RYp$kgQe8nQv2|0J#o!f1mdlJ~Yar#tK$|_i;~9{UvR^QL%@5ZKhAOt6 zfdLg|>)y}=ExgX)Hg)wf)|+Iz8FMbu3tWxj*G*7w7ag8nir6KWTnP&}FVW;_E!KFM zT1LlKF<*d%diP^}+Y)VV#Bsau`vKY9l7s7+--Dq|4X&EpS*_94IDcJCZ&=&uL$&lQ zZwdQ^O<-9f#4N)YP9?=}dVeRZuHDg!8|`IwB9N~t#Nem^VTJwJuszWn?J8q@u-v1Qu4lbMtg%2~xqo1Y8BhFMNV9!eFV6aq z`ciM$>kXEz8a!)zOIMx2ww=|%^%9ISk@Gu5jWn27x?+Gu(9L6W5U>JhANGt!&gAt1 zsXoGl28UvrekDWO^Gg&M#qmz9t@rg+FJOMHPvF^3k)8V(%O z{sS;p9*P`dEq_0!lbHMZD0AJ6h?RkIYgEFTa?j2=Hi!_I9bxDw$;;-0F3AOczGios z$xY^*#L%Z48qjGv8HdPk1@q9sy7zE|h8HPiz6IKpy`f!Ko(|i~U7|-sr?Maa>=&eR z^e27EXj(^CTZ;{|NZNi#IWv&D+#_*~(OCYM` znDvo!+Xbug>Of)^7yS=!NU|!3jK1_WGhUNy%?-^oJL>?U`rNc;xscl_f=oWXac#^^ z6&sbt@q9YmckM2RH7+BEQ_QI?dd;f}m<1vg?sqhnELkD?Fbf7*;In0YT539smiKZ9 zQ|19oL4Pc-3bY+YfqdbZy3)=Gc(L9+Jf8L=Ug(TCUav6&ro(-OQ6_J6q45jkg97}NSVIRCIN2Tu&fHk~5< zK&ZTZ4})!g{_x;++t5Cj?wLWVHz&n7(HUy0&gl#U57TaHaNd`9kmvU47PvuE@?ip< zC3>jA+MFW8Ht@nvH2;bhUU)&UJvrE4ifn2M;l)6D6OI`QvY{ImNG;PDLmaF@Z%_(& zGJl>}FS$l!=ek=Iz+#1 zB}^S^#FgD&CS?Q)oanrtx_NZjg2kKqZq6&>iSoR>#*V6HBrM|Ta$HLmZx-|l%xW=w z;=|vhMA0*yq?&O+R(^DoJztvIsH_K15Px$+G>cHuV0lLG(#rwv# z`VpLyiE!QoZRg=9uWfzu$|uLCukpxG->s(n)c8&ZKsH8%KDD~&iF5h*TKKyb3IP?gnus% zhRGv2ncjxt4j3Q5(AH8CSaV(XMA|ztd6COwWS^D9(bit=&1ksFw(t^FbrR=yW zYC>0t3@(JzYEoUIFOJ9f1TSWLzPo4rUTJenZ^lQ=zQK|A^wv?2lv|XGhJUjR=Jkd) zgQTRFW1c#2M&tm9JMjqGURBLN^JjgYpCIy~CQBGK(Vzkah+i_faYNiNVDjx0<$o{h0q&78oXX_J3_`t8j+qJ}q7G zlBlJ*oQlkrSZ910>pLxn+6(?_FR*dp9tcX{VR4-fF}4){%)(mz({xTxq_;w*USMZME9fgL0MzaODa^(phd z*-2VdQ55`Uw2hR65nybx##Z-7xhdQ1wvaLds2fS!ggr6ODSEsVi6V|MVl zfz%V>i2ClsZkwX<TACCi1X#7j;u}j3=%57RDZ^ffZ;*-?mK$^tl4GR zAQp7rZd(Eu*jwHg7X=+y)tE{9!={>z5%)U&VG4qwqemCIVd&UV1(tT)D8g^KeJ6WD zYUXETF*r%}!4q(91N}1Cfs8Lqzt)0%cJTGV-osPy5nEcy-r`(ZhW)Cr2$JjvVC{54 zT8OdO5nTPY_kTx?Y4D(%qLi;!NAGh&b9wX)FIKJU_-aC>-QLt3fB5Oa-l?UeUd*gf zyI)LLwC#TWIWIX4lsb8bx~#PxUVhuG4c-d}D%(?Fm|x`>>qJACFXq)%POj~f8xBZo z&x^eYGFgBEU0N>S>(S#(FFr?|Ok8!=%uEslJn(c_#(xGDkrHz0SW}v(tTFY?H}7e>E&5h;)wi`X?xkPp^814As*AYV?~x2-BQ))G#y@TprJ=ZQ z4Kfmkhum1r1e7-KHrJJm5-+|w@kwH_`$^IX-#^=p5wOJ?*A!#ukKmZXg9i8s`6cj( zg#MFqo_~jR@Q{cM(#0gdl$f2MNCN%<1G?c|Ivui=fG3&tn#$2#B%>!&1dhI=&*zwI zT|m9cDlkORp-W2ZAf|qQ1>HKeF1Ds`J7fco16oao2AMvHA|7Pq!s4g|)Yr8CX8N=} z;l^o<{mX5sv8u^Xc-P;lLg)o{$k_QIA$c5-wtvLluz(bKJ*NwzT#aosrI0(z%t%iS zlzvb`NN3%)GYj9R3_B#+EX6YDSUPNs$L zQ{fUAt%MH!TDZk&4$(}%!sE*vZv*`#ha}ak1hcMA1}g0Uej^E(1Kw(>H?b74sz<}T zc7LfBKRCmGQC~bCydYaCoGc)hF;L`AJtnm*s!A#El~U~KJFwY)dDc7*wN@0@d)4&~ z+vs@Cs!>et79$=6kd|2b$pH-D*qFgrN;cvxN*L+l;V)tt`*!vdd0bL^sQ#HF0iYTq%w{4M#%*=afVjJTk@Ks*U z`CLPHnZW+y*Eu%MKQ5ZwNq?`lvww2qxT+^0AMVf>d-+jLY$Qg>tbl9%b-@RyGk`hc z4R=WOjONL!?(iXXDD}M^e>!PLQuEX4m*CXet(F<#5<597H#*Lk&D3-uh{-uXSTAAm zG2oB|VvvjTacO45yY#`dQul^lNj}a-wS&X%ko4?%B-rrE>yxwWFD<^1B!8-Iin$)m z4b^uVkNCoqJB80*dWAr_=L|M!untToH{!Y&HbboLeH{7uay^iOtL?c8>j()e)#i3!Rcb9`L@5FOIH+^ng2-@ zZCkw*8Eq@IRj-f)K|`js;D7cbb>+j3VRF%5acyPjjVYXPycOZ7o`{`x-Beg>$KU#? zU#^ZM(1TgrO-D*^A7br8vAwPOp<)$loS_b&vX*hP-#SZziR7W~Uw=SfkLSB_Jac=% z&0F{G1)6R|+_V%>seV!*Ns#NN*4=;u1B)5=TwIRYH_AF%3{2lRCwO&8;do!8I5Wzt zw(Dt8E?z=Q^xGaA61i^~Inu7`SGad@ZK5+c^1mU=*%M%`9BmfA7QsG-%`B3O#O<`( z9a4vbeY0j;hSpZc9DgB2k|$N|`FdUEvol<+&a24;ylSdhru{)f)CETPYk+k{kuE#Y zVn5Wns3CAzn8($mFqRCp9ExR`({!hH_(ZX#l4iEvMx-y2CGG`tQ&}a(wj?TwswX-G zfsM`!5qrHrSHp7@(rWIs1vA?;g~wOTN#Q+l3|8h4RhYW)3V-NEn~kPyJ{_izy2@`F zkF3WKI~m2`A)#Lv1h~d(rOHAwbIQiM7Mm%YW!j>uc@DABSGlo7yI;;?`bsXnupsc;+5?gK$GDnrYI>`-YLrJr&GBLqY=rl&mBmanawgQDw3oefO&X#94>Y_s4 zmbVDy>D}*8o0S7~b-YfhoBqeU$FscXpA_eF2?jw7(0_<)x80jdLaV{DInYvJqxF#T zJ6E0jLG9SBb@UW_X+FLp1u*2|3@|BZ=eYLn9$Ll}msU(+B{8$U8(QQEpFf_LlX5N* z|JXguu1>UW;N5}g*f)M>hFZ5M0S<}V3gU5%FFhT?7#KeywXN$-Vt!IbFR&}e#G*>) z*s5UB0)OnXgua=4?ump&4a*+PJ004muBXudGwhF;VeGhT>}_3MA0qFo7#g!j$GF4G zXR;5<<)Cg8n&vYvMt7dea4?*>St6C}CgZP~1^(jm|IGMPXT}9`LOd_{2eHXc3>nh9 z#^zo=M-)&vLsW`)nMtBA<$w56<5Inp_Yl%78sPe7u*AP;9p56^ zs3fCZ@vcP6v_D5-SYQ3~s6egvJx4d^iTK7F?$4kS6JRBs0%CR#;KiMJ#p`PVkej_y zAp6h=dB@c^0M#>k9-MBDHZ?-@Mt%FUdE%3DjF%&3SAWjzz;W+5JrcV)zN%2;DtK`8 z(0}l|Ypj&g;nUS(T5=%rn&?0=gvX*NMudiMY{!_#yV!E|oU=lSvh}RE8+4U%(UnP9@6Vax$hEe?e;w zO$QMQ=7VIjJZ^Ejo0M_4b_oQS-0!EGMt}ZI_82qn)-pn%9(z1Ul;lv2S2c%7`cLT3VvxE@%CmT0`9obQ?>214U;@rT7z-vGhv48#$F9_8YhLR^!gXXc0eoJzmyDlXRSPQHC~X+L5-(j($NJa;LUNus9T#V_(hI`J8%=$B)qmTpzG$&0 z-t#i}YLRy65ILR`s|$V#VyZ8>I&JI9&B)>L%r0_TZg6)C^;rGwWNdvpJ_22(phsZd z5;5y<#D#EC96|UWN0-l|n16s=RVK@BIpb$Tc7*F#GXG{a>9;vOD<@@LZVn~kv&B5e z1UOE>8!~n)Tg_akwo(8z0x9*iA_GrX)TS{a*FATe>XlYD83vo3+rFA-ertuvVJGy~ zrM7OLIo%{K-Sp#)I5ShrYf$8j-aDfq`HLoANjlj$Y+Z=`-j)|kiW#>7<$2{ z_@%6I!|*~U`6scIUw@=O4gGn{f>>jA*pu-wqvyx|kS9WAo@r!CsL$OXA(v%|N%hF~ zm@4(%)`t;1f7&cB%ae!r*eytGjFJmh7B_vntPhZCdS(nP=&6%EizwHktF}?2!$itf zoapMAQRK&QAqGGuiGw5-m-l2aT7#1%j6?DMoOC2ZyxW!1{C`NI^{jgl|9JZ6FkI7~ z&<4J5%Whb;;WqriM(E}2My`Y|grWN*X13);mDk*?m7JtJq_Bo@!d8@~45Yg+m&wcy z5dsArGm%r@Isl-Wc)Wis2Xki&eDu<6Wp8C~uup{t5T}cm5YLws9yYRwruorf#sB2R zL>;&btB@IVJb#a3$WA14dFzC=Oj>C6aH|k)H9hhgTiF9_`H%s7Q?QwKhD-L+k|>Df z@3hwmHWlop`A(f??Aq*T+~2ts^!$i5H`b>HhIoN9{vp25ZAS-90&d_+S}GwkdP~`N`qwGB~)n zdHKMS>o>A@vOD@D9;Z&=I}v98V0S-;zXpaQh<`g9jk?rVC{YY9_}AMBP%v}*sM$H; zK<$|7{Cpt~)DvzP43c!S%ZeSNbE8s`yuaA5CZBY(yEW@H;YO{dmS?4oyN+!{%b2n{ zY9-rz##YZ47Z>)HnS`S;;{}JPM+{K$&A^v?M!FF9k1w5t`;SPA=K<>t?H50&B0oG0 z9e?_4SM;8}Iv|R9&t|iJ`{;5OtL{AN6g&a7r2!t>jv=YMpi^4jU)$SxB}Rkr8zg`J zusv!?RgP2*-G+J<18iIv-Pg+hHHe?@qCptbI)jOW(JWof9i>!lgFhqwfH{r=tiu$i>wh|chP`+poy3b5JOkpcNkeM(%+xm}^->6* zwk5OLpFoL*YiI&nt952K{dB9Y?a3Vfl-~@Ob}-$up^On_b9o-gj3GZ7!O~-4>ip%r zcH?T(P_SJR>*~<(i7Luz{qA#8*c+O^`@Fc*8!$Xeywxe;EJ(B2whtLMa8Oys{lEGbpO zcU~~! z&T(}6lVWt8KbiIvlek-77UysHt3180jnOjoK-zX7syAo{dY?2F&JS|3Um!04mHm<~ zdXp&n>vFX2D_Utm03at|z(D?SQu_gvxbra}Dib?O*dj?s34R)MNAqGK^!f8YFSTxj(RMlAExoW8(dePU z>5~H8mYu=lg!H&2*^(y8;v(-*eR?%j|#j8zOB;vj%}(hP8*Az z73cY)F5vG8J~W$O6y`BD#|$veuX2pbLTiHGtnX~JZ2K};8Gldf*>$6uVsMxz`ArJ_ zyI~&(gVK-2Sr}{8*2O!Yp;fb-lOGC&z#vEDNd>=Y?e~{<)P*tzmtG-SWGEz|PjoaX zC8s}FRhQo3F+2P&P<~eT6J@erV28fE#LdbQzYbI^wBqre*$Sk9uBP5DN(-e++325J z@7y!*MVq!;PJbjmU84gxI1Hq#7}J}pYL=Gb&wkbb~>S_N5{C`Kwb5ow;7*o)H>@S%^7!p-^rAIoqIW4ZP zv3BnjIm{yh%Da;MmNT#uy(@H%vWFr0wf*>RGhn^3JWg_6O(~Kc(k_Azl)tgj(=k7c zal!bu6UXwVwgE{T5~_9>=qsuox2$>s+?Pr^t$!6OxtdV=_W$ZfkAn zXn*0muK8>nFax0=1d~adn@7Zj4`wi7e|gjZ&*|;RLL(e$2L$oV$eI03wSe*BCl};- z2%otb3Fd7+t>-t${MM<^5c4Uo837FY#E&nfQVYq+X!>v$P_1!W{d zqb(>k0cwELi7k@br z9hW96i8pz{vE+#!hZ=f4|doBO{?4s9#q0h`yS@ za6F@zxjts9IgQ6iaLU!KElfrmxT>UtE!S3U4L3LXz>9VaFh?^_*~5+lZq^|)IMyLa zmkRroYycd|pG#3=s8wBrdw&3c&jBDf7^UEW8Y~#*Mf;MSnL`E2;vtC#D-HqBqQcF% z37>LO0&IW-n>6M_C$ZtFH%dI#73d-$2O`!;8vJxoT;5cfo#BgVw6;k>U<_3wQu!z2 zB=Ybtedo<1`2GeWNsrmel3!dD=lITw@Yf~fcdCoZBv(~@qS)iEnSXhB+^p?8nKl6h zIXn=ZIF4s|(b~63tSVL2c0`9mSlJcqRuMNc6*wuHq?xOM{%q1=-qdP(;!zfjJ3ppe z%n*wjV=Cl;MN>fFD=e)6kw6EV2Z>j72u#I*{T#8o>S~2DJd{@iBxp@_a*WTNk9bd4 zuSD%awxMBy>}L}WFn@uOfdEw&>(FeXTY}a|k#4W5vKh2I%D!uw{7}@z=za|GKAcxws`I93wH=D^+(SR4YkK@1#_Zb&)UZF9;`#O zDalaWMeXVa*MDVQh@zJPjI)mqPjB0R@fyj(a+N_pL3bP1GdP zbbxBgmw(ozdYe`x&>9Gx#Hf)G-OHd25Z5su$U4T@_J0^KBNkMVvbyc%I3N1FOWm zhO;SRh|U+(Le*tAWETtKM8K~7dkxry7e$X-zL8K&eZZ|ERZgB-sSkS9CSkrr!cv4T zjeqaOrLEDuG$VQw*~=-E&>BoSQIOeS)mn|tJp`Xi$gpW;Qs0tH@=Q*{$IR5>a~j4 zv&)OXVj!n1EXG{~{=L4=ab{rp&aL#OGr_RwnKBfS14+8)eNlV?ru0mfxGS(~f|?~d z4yZ?L8etVK7;tTct-7HH-5lo^V}HjxT!$j5`P*a$WloZt)uxlO!X18?o+t_0`UqSV zrA)Xi$pe`iXQ`+pDU`PCKyKO6wDTz4=;eyC?)Ob9#uU~F(seT`fpE4@Lh>{27jC?#*uXQ ze5XjpSt}RaHl*(i(2B@{hZsn%dXkmZsG^fxu|ThbNj}PcB5s!KbX$p)bd~)Ck#erO z*xKM*f+ZpoT#N+UFBpMUQLu_*09-9=Ewn$$tu0Z^2I?Om*Q)-#+O%XqK}VmGMXR-& z_W&NFE2+?N_0qJeH@OHY0)I$F&K;T9%viHNX-4a#!GOqRHzFk&;^c5Hk`GRK=T$*B zM0)rkDBP{~q!AqRswyi~3T3C-(KE@U{6YmI)5AY;NRY`6>eH; zr}jo07wuo5?==^0ixj^BghX$;G<(x22xgwCeK?!9>xE4R>0U)^8^GbK#M|j5bw*^i z`D&v8zF)mjN08#Mfx{7hluGIL@sCh4{o|e%{jZSzuaN$)kp8cbu7bk<3h94OA)Oms z+x1*HiZ}@QzKa8cb$=aQo(lm1Uv9}w3H&Ml={zTrqqW`lDSDiZQD?>;U5^;(&ZXiI zlrfuXSybpNm^jc_FhA@-FU=4yN-%^zZRa_^3RRpZNt|4VL)RhLcm86M=6~lm)5aMp=Q}PTo8O-x zRn&6*Wf7Q^>T=0?Ix7X9$JoGL;MHYwW~g(9EA>)tI(os^>C9rYLd0UaMIzp`@v|N& z4E)vBhf3k)B`(d0(mYAltFm!7;dXT^eVyAU_2dGe$Odrfq;8xke$r$w1GymP{EP$l zm^1+9Dy}J)vVSP}nW=BCuTdid+>>YV3cHN4}_g4 zD)bbltGublGnos0-lP2^v1BPJoR=*i;YD#800=NM<$qYWopEuI^D4OOt;Y`SD?RgI zfc^KwBcXhbSMDHKX~Ds+?Lal?0!jknwCi?p;j$Xm(n?-h$MXyBr0Che3#$20EWho6 zN%Tx{7Ua$0q4+T5+P3a_fEJp)NXbxN!rC=tv4^6FwG_QBeJhjt!{U?JSk%GYZk3VQ zLwwQww|`zrtEG1rJmYfU0b+b5zZ%Y=$uY!KW5da?y$FHKa|DDhla&DJ1S<{b)Hq@A}7Zi_0ZGL zjf$IEhE>^L6GMpMpLl}_MyMP>`hSY_Sv&79%Bp}l%Ek^t7v2Xsle39# z>MH7^(HNg}{vkF<<4ANCvuJ$LAut13R_U4DEkGCqtLbB643xPq4a~~}0}LT`cFikT z=iN{G3jDJM+yhbwU!tvp72(H9Nnkm`qr|!C+kyf}%MY9-7P*yh33)|TaqJKx;z_zu>*nGL9mct;B>hhk&kuhD_S*-P$m z9bv|sosXfs-EObpN~y5xIn5XyZ3Mp;HL)n~x&r{@dE;7Y&kANi8h1Sndr4?XN6(P! zK}fD?-&ogv;!H3|*4RP%B&$`#EnC4<{@Q&>lCc2kyyT#RmEu zPJhhlBr3?(xhgDy(Nmvl#!vg$+xT8Cvrg$oWRG(h`ZphPGF^hgX#C{O2UUA@nty~~ z({(UjT9y;s^nS?5vhhC1-bRk@Q^yVAw_kF+?KjR&JQy3n zn;)O-go+<{Pw~d8^iBE=VVjTgi|NK7E@J_BnC!st@mc9fTHj^ZNgv{)z4rzYZV=r`Jb8YU(HB}G!4THscOYx&d18NO&>!?x=LQ`?sj z^4eZ($pGSqqADj>^2jw-FK=qr{3>~f<~=bmy&8iVS-S=nK^xK*^O3ws@2i?dl#-Xb z^a_C}MQVoh&iiFPAx6sl7bOz+Kp#8^EP_*uO`omTYN;RUMb3_zxqmN}I2N3~U6L+H zfAS98GLdYvzy`2rF_6oJ*d)=)P~TK+P0{_H)ECzhCjAcNu3KUomB|hVhS_lj{6`Ol z!0m$+B$}e(uubh;!l-8@{9^LAm|93S5Hk zzQ*mv;&mIEKtmF*JL&hPy;$z*TEq_#hJkgjc zX__%f7ZOdv3Pz8@vnuCIpnSyO+cJ6ArnkV-FsQDFe6~q6EhSVTz1E{@)bs{74EjJz zy@1Z}Rk|4zH|#O_a7?a({HmT2FA7PF>$hpA|CLw_yN%xAcTNBL|6&7qu>Hj5~p9 zN?Y&=ei7OW<4N>2Pz_t#)Fd80&R5_Pt%uSGYZbO=aer)zP7Bbzk=dJE0jk)uN`JUk${~4iLXsTk8z)3k29nG>P8$F3Hv=(uh(cxB}rDj`$LU z%i~-79e?Yu*E4TyVKmzUs683kq>kID1-_CxGLs8k&ta5-Gj{`*&I6Z3%gL~10LSu; z2PP-t(9Kkr3xg5Asd^CjBD$W3SJ^0!ma%w7i;FqK`y6k5{h}}8qR&~2jjJ~0ceva? zZM@`#R$mO7)hWjV!}?m_}#@!?MiAYUvCWQIW0YI6!k z>>58Dm($2*GjNb~{w&;}+~ErTJ_7GLy$xEv3;L2w(m?sa3%OQo`s*DfB z`}6K5-qiX+g>O{ri!LVTP2AW~Crn5CN`C}Bc1@aRbzXxnwG3KfsJc-!jvhWdIp}1o zAfj-TDs$?_*YqP$`_ZTLWDT2r7;-8;Dgt#nn>Sj_WsOCx}QYR(IQk6Wq<9^ zfHg(D4S;)vhg9@2<{bDOP0Nhv8Q6D|@<*^f51)UiKG z##Wm-qS1i}NC;4^ilF5~kA#_k()tR`xGilu4Q|CWAVIj0@qN^xMZ0(r2LXz^c2P(` zLc@ncVzQXqFUKW3Zn3W-mSp-rk$+)*vfPnxlZO?LnF$^~uH;5>pACQW;UM0S0)f?N zgn9y4+=N-jYOr8#N@W7+&~vmK8ne1G8bDu0A6-==?b@Ykh+R5ftd`!XU+TGCH@%y7 z+7+{ef_euPwQH}Dma2N{lA7wBb=9sY`!MGqFaN*8>RV>dpxcQbXU|_HR$(p1h&TH@i)K__CT55E`_| zNPKKfV<7BldqL-j>znD6@2}1J@w#b^)BmIIM8I#(>!Ix+wTAi2nln2=7E9lVz>L|r(8{_N$#;(v{}E1mVtu;hb0n7?zbe{7!$s{0_-+gb0rs|K3Rq!_!p z3*YnZ2eXQ$yaURiK@J*j@ou}`v+XgIf@Pk+UulsZ)ZQXXCg zZz_u@&QE|>8VTyw2g;(vVj!)y*yj{;j9FrekLh!pQx1N=04*P#Wv(Zdd;21-qM6~a z@x)Qo9T7pn2GjJadiRPeFoE-*hrP1(T-c#UNxs#_@UiOLE#18QO49=o_ci@JG~Sa? zf-pY6fkn)5YS{x{a(^0#JL^Z~kL*pnV+`T{yaDeSvk5nfub3AN+$x$~?A34e0k}v? zGpE%HZY#u18ofj4i+A1h$C97v)*7x~FV$o`p<_E95*9x0xrYZh>UsnN8_n1-G zdrueLAhG`Z@$w@uD>{VEB^fl`Sk@>R7a6~bMwoWpD84u1nmoLtk!7zs42UJA8z z=NMrkKSh2MR>3>PqLK?QWNDzc?$rW`Pnpva-mH(}lVcp-o)6)RkBl-MNt*5msBqYE zIQ&s!@C)%Qua`s9m^MTiR^aBdCn*o@%eKty19d%3FnUbF!)SJ3P2s0AC(Bl+sy$gp zLBW+tDo<;+&VT9aPw7SOMfHpKeD^(N83~!M#)#X%2GKFbgU(B+$uc_fIcCZ%q?1Bz zQD*mI37E;pFi#@;k!t_44uVeOZ8FVj>iZInbAaxr#$mspj<+mgD(%J)wRVaQ;<;l? zLE~3xHop6gS zH`!Drp6#NjB&rHJ+4$b)nuvK+ff!>=B30r$qxakil2QF*b;w7554srd;5#JB>2P0#03u!Crg3< z_~9vZvG@T#8zXxUZPcQ^-Zr>tNcE+sJ}k8I_Gjjzv@tg=K2^A&-tjSKJ`QTd@<#K$ z^qL7BxYICji8ffpzPlt?-rQN{NK;a>8- z(A#OZTNQ1524|hxy(LNAbp@Bb{NE+))M~uadyXKWURmsLvPPx$X@e!t(2y3u8DIVpVVSKgyO^9*V zX3;3LAzuf&OD{0%8t>aK`1a|y#26H&uI(76_YLAtEQX1SFol<52_=aVwE{2)jZvK3 zp7BXS8@lj;;^~b|eZ!3NR|3vg+)*?i-G3X-;VTt3{({^us`GLFNm;w@(IDCIO%1P# z30LVU_!p6WX1~=;h zZf5!mIn)u=f5ap)cxpg8xPDwo*8 zi$tK|E}JafuOx`WAr*$jqy{_gJXwuVR2W`*6IjOaB)$}KFY_5{Y~_wmAMb0m(&F^3qcwczrsQ`{M2X-yt)Xsu?SY^Ad@>*d0r%JR2A!0c zejO;?$qwEOi~eLz1x%vzX}Li4C4UeaLDtcJPv{Iow<5u*%n#V0iG7#`4jKQ>x;7p7 zC!G~;&V|?`at(Z_AAU@S|_PxK4D*Oj1!3)*kgiI#_u}n&9I{};T@@-$F zN+_6J`ZH?N+$z$kh0=?f#|?$xT~))MEVLCgN^Lg#voy9~KA?3+VlGy2Tz{ZIh^|d% zQPbJKL9h8!cignq&rRBlav$WTAE$jd41*WYcEqWV#X{z`;-KVp&W;8eIO(zs zBS>*w=jJco%7ceQHsvH!Xm~-A8bsD}^)t_Hy)+VOlNev$eKV$@`s(PSrRvI}Efj3r z#vjI-r=GtD%A7vL<7ewjM1XU73yf4XFzKG~6-3oyqqL}ubSJ>tFMrw1{jT+9qE%lU zNQaKc?FHJz2Vzg=jzSF^^+v83E0_aTGe2WBQ)HyA&L8n7wMeO*xLdx510b`hxIrmB zIx~Bc_XaK~wcd(!Qy+6_ulZ40r@y{*miUF5qb;80k1|&(b=0!LX-zwY=uF8Gl)GbU_fu0EHYKN<&F#NzG6QtF zO=vWSX`;|PrZse#Sr}HB-YN4QY8_MCI;a$=keENeo;K-HCZ&}ph4p_eQ3DyH679FF zx+9cTmC5$EUfgA?a12>?@l1DM-$*X4@_;L{$ZR{xQ|jRhaa??aPy>qUiV>I3Z8xN% zP@$7TwQDG&38wI$B&)fqSccEe@Bo_*cv9zCb^gR=M|)=T3Ih323Zjsq7$hbD5NXAg zg(1974lO?_#^m8!O89?c+4(y8OIXN=IsTblBlzgT$hVwbr~!A_db`h9L`?cfxRfRc zS=A!Z6Kw9vsRBm*BBcn4kAIe%csf}11KuLMPH32V5`kmL`IBDUc3{?@89u+c4ql-3 z&0`8lviZO}jCk<+`uNK&7YsZU@R(e(xQKzc@iErvBe>POweWw3u2o@wF4VUJ{NHvL z`(x!%%Ua~%bxlohXY2lZxSaU$@5tfKp|%r;51)Sq7@XPGZLDnTL3FF|s@RrQ zL43FRxw`|KUOG2q(O!R!_NQ}A{7_8bsgJ|Y?ZWC0pT#wA8s|+If$PFxB52yPyLwZF z2C`lnSLCYjOB#QMvRbrLyJ~FLU0{j*UZLrxuY9Iee0iwlfl!Q@Eml2M6Og-D=g{oA z{koDd{g_PTWh^Sy(im$9$zuzRsi7+k&LzNI*;XMnoZDgNbl=1Ko9DB-c_O&ZTOj-+ zvm5VwSR>r?QX)f+h7uB==hVwlbyFvd0RDlkk~cr5HGSwgn!MYD{57x^kzyqVWuyeAlV<+F zO=G}MNodYR7t_p7xSwMiFQ5%avXM76=aTP!@1uW@3<1jMDW$$61rXe%W6+z037@R>F^}IGODynL~yc!oUuVd>6 zrWnTJRzrOcheKXvQQ)RM>n2H`nwW9OpKtTItq0&|BmMRl0H1Mp zWNojb`C#YgTXo-DwpO(ZYzY_b)?=;KNp(HZnX)(PS zW#Lf_SeyN)md~d5?%3wk0s>PLdziKTKvjeL8L{@ ztq(1htH!T);4v-i54=x=_ZZ(55HqXDcFdFM^t#@8@x^>H{837WWp()?{(2Fc zB7Gl$1geUkp4l(2uHaW?i)()i^rsEz_b2o9d0CsUK@d(e(1K>>>$;fO-(TCBGh0)? zfPye{TYhbHV9>pcdDEl8^DGjfRZoQDsOL>w@FM*Mmq^kakeJ(Cu@KrC7mLnd(pYpJ zgeBb`2J?X}W~mj6qD~nSs3;^|5)Mi_WoGk&zyUt- zan-of-jKixp^r*c-{UnjZxvCKc?$_>w#}gqZ}5+%uRR5;>t48)0pFEz@1J#7WnQL~ zGVszmlHEyezG>&>)j_th_39w)ez(+lHE#Vv3sF02=U{i#w;-`WB7EBx$2~hQ0kh&9 zX)!QaZ8I_7)SP0o#`J%Z*_ac|)oITP!g_TV<^|z}gF=)9?BQ-d(4VPPm7|E@s@q%r zzL)BXBf0d^cIb`d&D~^e^{^L^X+&MHAhBA4~K!_SKrM+@QEJc>mvclSmr-7 zVe^L9-b6K$ZM3?Ak83*bdzX2Uz#b`!U+gCkZ*igN^!8XB%>#c|bEi_u7d^RP!|r75 zYI>9=sQD-#=TlCbF&qx{+6}h6yryD<2~vi`coj-Ah8|{volMoA$4h3q)$5x#wP^2g z4W(}Evk`DolYTH8u~lEgkzf>)sRq}uaz=t>!(`zfNqS&}K5kF|1T%(X9=kU(enY;c zot72yWmu-(tf7B<;sI9dpBoRp7jTn_x7lmS;{Yeu0Zf^3?J~ z;m5q@;L(2rDwd7leT^x52@*fAI0C(x;fF&ng9Gg-ylC@DeN)*;w#WGM2LWoM%;aCJrVXmpRRwGEMHLsa+{=)UHdPwBe(P_17`{Yuz16*M>x*SKO zz!1cG%e^jj;!n#m+?Zn<-vhTXi!94&Htzf%%V~c|qC2ozWLGh};XFF-5hD8Z*G^F% z`~;Nh^{M4#Xs3 zJY9c9WpYZKRT~lObJi^pbgEAb-~J_?0qmBZ1ae&cV6kh2Y+1J4>pM47UbzwzpD-pk zDiSmb3%o-nx<6)}`(5pr zzj(oihCfMbk=;y7jIf74XXf!t-YF$hxg3Au@!n5u{9{>tmshglWusN6(RywQs+39b zMEVR~YOU*+^}(`UoVIvXW1~8O0u??5tI`NMG=*f^%PKUAfYcJJ>o~udI;p76pMZ>z z!SEbkw>_jkPDU))f;9yb_-PJ5*_&a94*CmchDuQe#M5LUq;ntZN!0#d zhPWclz_J>oPh8BIb0a=6n8gH$$IO3HHCnf5I_3RE-mS94{iwL&$KjkXW|~d%@&*&l z{E*YTm-0d+q{N8E07oQttuaDRHpS8kc`K791D! zAfVVGoEVN9A_WT66K8oP*bUfF_t_!5+&Qmu6sZ_#vmkAZ70IlaV4o)cDL=oNvVo>T zM>EdUxc|wSp?wWEFZhn;{t;*jr3HOH&T1Rub1c)LnV5o!i3dPXTe^!Rfu$ z=v{VX(~VJ z$a8$rQfgETUbEK~X}7p2xXU9uEsxGl9(@Aad5LLGcN+{i^WQIKid_-?Qqqv3U^UlFFq26jx`&^l^gyecCXs5*Ge8drmF_{ zm|NK%w6ffrZms!$kx*A1n#0>_a9ZUR1R@LcNro#HG9aQLstbRR%J`W*)Q8%u(qz}A zP|*FpJes6+6|M#1M_!RE<0+{ZvLrGr8+c=LwhlAhjg0b1`6Ie<&$t)rK!s_B0ChA9 z{FmDZ`f+}N5fp0H!-*Um3mv39|3G&A$c#VRZU{0fK*C10#i1Eov(oH zKEt1>LF!5&1`Z@Qm)-u2JrfASAvleMQJvJTOyd(RifvL+GYw=N0@Y}pQK{PJv{!mi zs1giQm+5~mCx2PIGx3`vxg(XAgaw?Eli0d&amDbNMltDjb=f!ptOcU`t5lzGu#2gH z9|(rhJn1)}CrtiBZ2L-yak}h>HHvUr2*JI1-T_=DPC^k_u6qZljBvXUfJU@KVKZMC z5Iy(?8Y*yRQ9gzLokW5Tx~pJlTZg&~5oYIAc=vx*bU$lo@d~2L|0UKB8AcYbmHRUa z%d|R1VY7#P<3Zq$k}#Q7R4Ib*M41$`wAy{+xfz&H*NuHaxj@cKe8hBv_eIot%WMT# z9NcC3IC~6cg(*4^_o9x?^WZa%&YdrY09}^dz!pYf$z#2+3!XAzTR~o#%o`3C#T?AN zEBk-SShQs_yi5#QH!=C78<>=|Z(iE#!wR(?vl~8bW4ieqyrB(*LR!L=86z!xb2lQQ zVxfQ;cgdS3=WgvJ9y|kpg@1XOS2l+ohh5mWQ24kJkd9iaSvN+46wSLKfCF#uT-LlI z5z7>570Z)YV5BZ7_+cogEhmd)KBQhr2yjT-!s(|I6GMD8OwR^k&MqIslynjJR-RP9L_R z;K3{AR*EN0=}TMY7XBU}u=mSy1dsw?FNMHf2UuGntOro*We3&=FugIX?NNknf>M%`hQ`MszC*Yu&|9MS;Rl`kp)Zj=*l9%AoUr)hM4w0}Y(VFTXZ-~WUc z?YlIic`aY)_lSAn_yz`^O%NxrmrX(M%BW9@n#Rqu=`=h4jwwPVkB-kCfoy#waLq0i zH&)=|GXS^ws`>Ed@y0-ZN_Br*c67M;;8iy6O3@zmWZo~UVuO_?5tZ6OO!GS#cN5Uo z)S4T7Pn&c_Z_=uw^J`I{_^08HO1-U&zJC>z;MN%w>Go+iULZ-Z~Sleq4nx@ z_MMYJ2PlvF^jNJ{tKF5fT9INI!}1kbgW-qI=+y;lv5?o6J!`XmB<`bn>?Rd0)}k`3 z3zLgFuk1HPeg!B=N&A0^E-^#+E=RmXdP>PGUU?%U0mN%klW<3y$4kKQxgVqlMj%)v zr=aG0L6j(P7B8k4=x2z59cD6Iv_kev`ndG_sCN6%nPG80e`J6;S$-i#C+>#YeUR;A zkQ3_Ifo2W2@_9a=kZJV+H5m4{Pm?*K0u&}Cv}LMkDpOQZQ~rPM!5445*I1hs+REH7 zw|JA0lu`jgkIxcZWtmfDT^F7eXean98q?d(w(k)U4X4P-BTA$TQg=v2tO^5Rr-=h| zMi$r?Jb=<3GSS+DQ28zrV7;32Erq7X+p&F!bE(6Yj*!+sNt!9X!kBKDiXFnz;R zb=gZ*L~A`+WqE(Oahj-DTYEJbqLLRnK2^Pe*>P`-Fxs?M_Odl!!SnNiuEl{g=+sWqSlOv1}6(iB*b z;_q{Hi(o=ixbXXZ6DbL5CMm>L2@k5Zk>Gma)@0WUH;_W`XL;61g_w8uU>EEJ2;K`o zWN+QOm%V?wSHk%^OrY#OETUQ8(rLP7?eW6H>STU(H3b?MLtdh6(@GNR@V&Hpna%4i zyu!t?&@4DQO>-gYCar*m-w>y6yH^gSQ!kXm!NqJk-T@8w*b|$p z<7@M-J;*~`)^7)UlxyaiY!E=?qs+7|d;iD2p3JSKg~my4Pd=oNmepa#16Ax{eA>>P z&l>7I#7chB$Lz@2r-Z!b!L$~AG>=wF7!ojTB*q;J zjN|>iMscyJv}hwPy2^`9#Kok&w3w_G7Tske7*bW zI%%4%JXza0HsJsD00yqEEnjP^e}<8O_9Jg>v> zT=`5rt1I;9x5H2?fsS|g4v!3+&VPSZd#`MqyC7HbrNCRj0uf4YQX;n_% z_=?Z9A5_TP=u7q+FcJ>f*3N6M(I^)#;1LeZhzcX4VTJs>nrpQs%fWqBzwCd&ZTrC( zn1q^;vsC6^=|9e}F$VYw5vXAm3~ibb0+7>-yquCJ96IS#Q?H?u%j(Hy4PnI;bbL~i z@7Gfq_inw8<47L}pa)qXXKdM9ne3BlJTzBTT}GpOI|IBsTXGm^Zz@fcz*F=(>Txh| zk1NZ1Z&h@b{vL@$P1Rpg94@q*-eErR&%ft*fF zihO!5jj0#Yzm zs=1Zy-WJVQdAYn9m(fU(!SS~(0`D{Y`gd@rjl>IlRzFNE>w4#CX7-HJ)%2KECw$WnLhPFfeS$^VziacEz9D z=`{tY6c$lPFot#nPPy)DuMJWSvgu0GQTjsF#BQSg__mN_A)S9!K!_-J1Kk&o22?`i zkhGS|okwlfYY!`t4QQK$a)MUQv``7E1{)cWQiCXhPJgH1wD~xH`ef;{aYNLY6l|=j zkq*VlszjK$8z~5k$8+!qc8`k5O@+#$LuN%9K|Notv=1!tx!Y`QfQ9L>-qC){W`>1W zF%t)hF?)7E+=YMq5#P+{LB&3%#WIKQrON6klqzJC!2R|jZU3=ShB9>0>kDK$!ChB( zN~Pl3M_0w#x)qe6nmF;*lut@FdrbXcTC9Rt5XEQ|Revi{&@ZZPw9PPq^$p8urnRjB zQ~L3wM9$K&kJ^{3%l4k7EEw_J6gVf3N9O_M&tXbnqp*JmlkS@?peD%Qxm@)DEZ{4k z)K_)E)^v?$O!;U;!t&?*680SG74YX!?+QgCG{YWS1zRf?nhOSv=B1+q*xgkz|CNeN z3wysguo>AQt(X*-3o~-LVwxDlpsYOBKPr)^9@vA5%_BZKAPl*-wy|=Yqzhn_l8dudy z5AQW3?fIreIsaf!>uZ7&PCwGmQe7#;HX6jrlHbyOA^;%S%YvB70^%}H&L3a=TM!uOVYJ@ zrPifKyk^usHG1=biX_1XeDr4)4truI|G~L$n zIv93Q!z>Ib>|LYs=GTtO=HP->7yu6dpYbvSkeyz&fug3}IwEApl=S^kH=qS&C{SlbX__Mf@=Zq?|yuGc=YfL{yqH! zzD}hbYq3L!Mw&CyXjHx>4miVJLe+idF@`_!=zx#Ml}|{G@vh8J7KPa{$`$rWz|62Q zA*L+zi}4tcOLBF^Q&U|&(nRDiLC2T}N1uOw^bNg^!wFv;o}2(hAmu)#T+@I5nG5(> zUr=*)5`-I|Xvl-wa==jR#)lco3y_%Pmch}N`w!0^93Jm$`Djd`avP2q>|&44c0U5z zpV{8pKGsj@p-t|lbI(TRCJ-{ZEalAG)Qn{MCUS(((grfqm%GPsyA8o=1DcT#7v@X6 z%7SiUUgn0{8McPrA>OUVu?-DFjDz?Z71mDlE{?G@r=CYG8f0p zX-Iy5Bx@B48qo1RjE08&yW3<7 z6YzA8(aXYa1anTY{U(23kUrAKhkDyhWkrRaer@;Bdi|B<_HlO@H-~!`qFZSBngwGV zOe>A_%(Ud^D_*6GI@&8rebw|ZIj%n*<5sh++eZVE1@emkNnTur4d+*<=$RfH9A6K)4 z!wfnSF%$caLFRt~rgsi`Lu=H9XOp~v4Xzsblo=iN=+)l|&NADWWU|6iLsEW_9VKm> zaw1M7;SR#2DA*Aw-fnEq^2&hHyl2%&qCT`8NxQ=u)&V_zTQ8+*l~t5ZP6e~JY&)U9 zr8Ty)5T^H#`YJ?`FTT10YldkP;n`eN6rHxRzRveAtnNUyVm=G-fjE7-BC_^E<}ZRERerLyyOHjXr+ByNP21T#W6Ei?Z%V`g z92W-qB<`xPr+mR{ZKwkp&>nDVjz+^5|B^PcVd*e;Bk}MFqjV%kELe^tgLUeYb9F{t zPm{*N)HYRI|eRevX%F)tPOOM3a2bPnaf6I3gPLT0C@TyP8InADAA@ zSdHZf$%|svZ@_u!1(X5qIe9aMQj`Xa5y1vAG&CPnW7FVb0d0uWB|zi@$m9YRClR`n zKOj%>=3#HVOsOZ)0q&J zTn0{fMd>rZAR~Cu^AU~Rtg_e-(M`&R`rML$P`qajE6*99=z)9GmTt91s;=2e5~2t` zSulT)!5V*U@oUpsRW|7$!8NUTG{3D9l!=d^oMJpA6S?v&^`dtJCFL*;0RQ1u>+OnT=MIU_#SJ$rI0`m~@hqMoV*- zmXwQ-W~b~a%`}{O1PZEg^CvDY(^Lj8Dxee6{?ZcH^0U9z7~9Ys!&S;ZWsBXyI_-Z$ z?0-WnFvO}!0jU3Pk8NO&@pjbz_Sk>g9y>06md&`ww`iKVVE?z$+E{5aAKO}MQoet) z)g~3ydTUYW-)hA%a{rha*WQRjpH25hmA_xk1`pc7h$Ko~A9#Mg^( zw*rxaYN^c9`~b!p=fov>wXI}!OG-%F9nSp;eCo6xjf7@|4yHvhF2mnWY_}n+OdKERXe(SZm8P3Ef$|cx4;{$=iEvh!_8kPtu+bStV$4WnoL@ttzlrX>|hsQ zg=V{;8KYaV3~I(U-9QT*QvwtVx3Uay@+ul6KG*d57EFU>kMF9_Vj6!m_8HO89lpVI?N)4Z_zH&h=uBkoDQIt@^1l?0QTrR9-{bx24g#_9HGtc6=GmzjY>zc z$ly~-h)JQipD(nZ8n}N~qD8=G7(s#>VL;f9XP>k(qi%MF(rzSj41w5YAiRSVF6Blw z>|k*DH)*6_;r_iOUz;{ND-=b*f?T_~;udaeJorquc8?{!!5(j~YYh!*dMdZy+u;9j zlZBew6$};i;#St8DHT#_Jen+}b{#pI+^`?jq+>5mKnh(vP8EM?7Qd;W10DJ}8r`&$ zqtQRmOL{CS)2XO&MVon*3v4vkxa#V;CWug$hp!teLY~5jL-RAtvvf@)4Rddncxzxg zIB8jp!U?>HxcAlP`^VbfY+d8ftlP+K=w+*tVErHI01gV6j(?O-+z3bpos6)=xURxr zNbNLrGEQr(vS)t?hJ&T)nV}u=7Sb} z>hhy+l%IRr5rx+kwX^D zF&lrkSIMmuGKUsMoh;$#!!W~uC}z`cP;mqG%+Z;=R&GUA`%#}-c^*X7{6(cCT8v2_ z9#@sFER%4$=-mV@)^3V7SzSs#4O@!UiSLwT$$LpXEs3p#aV<4>u$&EAW__eVEvKO? zV|uvl>dmLPb;*muR|eJby>Rn^fZ{NBln8$j`>-bdd=;9=FTsL1Ecmj7m!e z?#M+~YPheuu{tf_q4029H3-`44-5q%d;t8yzT=Y4)M@yoHnJkw=p^AP!U_(zp!lWVWP>g8`HX_y;Qy^pDHw#kkmI;y7K)+{QC=&*xVS z;;h4!EeU$fMc3>+VUbqmVhjx;%VK{AdQq2-QJeJyy}s$Mjk~!;-K4#K=T;wx?d>2s zrRkG=-b^|NQPiFz0ZqwrZ8C0Ja6#HO z!cn)2f88!5V>FT zcTP0g2JneoSZrfOq~Rj4_2^E@v9&pFA{yZ)@$<*AT-Lqi9JlZ0{v9TrJlFBN*$NA? zdn>~f3h$V$ED6>#LH)z8Pl|DQQC$HrcLUht%g8d;kHMGo`Z2EAmiK?fe~*@P_I zKBz61vM@UOAc#xzz9(P0j0P8NwH_a&9%$0d2_@PM^b@;9vW9w26qJ-?)X>z9+s0IH z5B=}dP>Pr{D_6T&tbK0BnASTMK~bij(31B1VON)4jjh-PcQ$`5FP>n+BYCqFfK3Z> z1+Auf3MY4jWy%F_K^n6{Vn_*-)&rCsYXVJAO7Y9{N&z?M5giPFU=(x%cpds}P`_{( zW_!H_Vs7izSGT~7@IhR=pPJWT7~hiu{k5u-3z+U2lhcZd^2{Z_djOUn* za31c`L4r~$K8k-qNux5 z4?~QCQ{=hTja{@O=f^rSF4Ia=O3~QmWkYGh0N2VKE+)BYAnoLjExV~Q<8skr371K* zadHRpO2t)@9xVvkNQ5>5tR1;-K&+19Zgai%PjXr}4RC*}{Imc3Fi|_>QHaQ4T~DKM;81Zu{dVV8#UyO^dkt^=R_@rWdSppLNOAOlc?10Q0EHjjC)4t z(d#>{Y8sHW#nH~PW}7pfO@`?7xgDa@O@`?7rbBeP@erNf(GV>iFrP<Jn(896f(NNg+_jeu3%-)prd^sgY@2p(SoxNaEq6Nk#td+gi{JE0)Bw9K5}4Uld|Z zyOKfRhGymMt-!1&7c7LM9lO}C%f&pYAQ_ML8|&J7%NDmyo41_V5g3$>?|dz;*SvEr zkZIStg~Qo#@u;lrOR&WfR?BCPY2acvCV@$v4V{0i+s>fKZC5KIAzQJj!>C#*yydSM zN|;q%VsU@NE%=_{ga#L_F!y@(U9fQpv!agM(Ll<3Cf$6rH^gK6M)EM*n0KRbgG2MCQ3UkB`<5ttrZ zD<3Z&anVgmz3T%ZdjK?1rYsRscfd`9XaQ`XWtWB`z1dBNwUWVlAO)tE-3@dE$K zFCdfdRF<=v@p4+_(0elK)o6dY%~MX;8H8KmH-IRVb3Qf2q?$i^Y$hBH>T&+7o$@ff zrr;H202)OO!rc04c~zKkF`}|l6gq=JG@kS2fbQX3e=}f57+B6)B(k1y*0U(fT&G3G z#9YL}Sv#%6eE?ts$*8P{SOcoBf$E0;y=Pu`cu;wdi#-dAJ=4uP#c+QH)OiFNJ7=D+ z$&DAA%#38!Uc_0`PiZV*cFUy^U3jU_I5ji_e14YUMJftQpU|bUr^Ll|c`1XR z&y)jf?ks;&Xz)pzNw9xRpTc`wg*HRArX0iy;7YIh0lT2#Mb9K9X+bz4AtK_u0cp%H zgSSl|{&|x?g*J@M}_{d@fWPNM!uEBe+ zcx{QbImt+t(_dWGruRjOSGli>spSaY98qtn?^2q0ej2Y_Pa2WJl0`uhOk z9|!6R-+-Roq^f^4o;_~+c|{KQGVdEX=?ZjX-3vO}mkq(7rK9top{wQtulS&%)L?>o zHQcZ?UIq@Nm#|aT`@fYnY=A^rgK~Ig-iNa#{^M=4BuOG0E_kND^PrpzL!{Q#Wmbuj zT~?9P{H3@s%^(kJVU;YZqJM%aUzZetqjinX^BPyx?JIwL1~w*Ki|kgx%FOna5G{ya z(5d{_1<=!i}!kx(0mv% zZ>)jgn}913B-=12NyM*Hs^L?{+%vOj)wWa)0 zYEy|4P*Q)t4@T%afh^bCTq*7OeM(IKXhAsq*rBez=jd3R8vq)3er92j%|QOj5+r~p z$(zB1*b*T?OxqBethYjlk}gnnKVJvAeKR*4U^-rnM_517kB0_JjuRVrSPZ38ICkST zMT`n_y`HMpkkv~S%=En8*ZziLp@L%=buMlq>hw{ zXI6iTx%Oa(TvrxaAX;BY6Hz0&?(t6ZeZXs$P}0a+af484t&z@Bkshxv752&{8Li0H zm4!``;!!nS@S39qG6!BAK&ovEU@f+80m~}%7L;Vw5{qh+CQLGQFleL<-vI1wX_=^R zT&7QfGz16LJ~zT@>#NBVu%0FMZmNmNa6NxpgqB;|!H6u^+q8i1+6r!Az_z!9TL5co z4L4iF-K^qPBN&>=EvkWjXg&9qrXoLHatre?d{6$B!Tr&e8}W!IBpy&)(xsFqm$yCX zTB7jea{W|XPq`Zt3@`&&^L*SH8)tJ;pleb}-Sj&Hx z<>k-vl1>{r83VYEW_ybPuG1r2(-8kKF>jEIU#iG@?(b;fhT{1KkDCOx6z8%Xw-zO$ z+AXqQTLv`A4yOUe_t&`P4H?g}p6?u)rlHItYFDrkR6WB-sHDKtK%blkAS?@f8C2kKU@ylD;)>a=w zi3s-xzPU=dPS`z^=M?qPsTa4_Hxq0;Fjd<|KQ=21CKubfjoaLiI!9|$y7k*);T(b) zRw0lMOK1;Rw1|!Xcc}hB`?9*A*7jroH7OX#*j?H-nR3uJCUDr_Q%8MW{wjYgUg`b~ z`{9B_2dm$yv}kFNhsO8@+6LZj@jUUBl58vHklxC)#L{3`W-Dh`mcG)mA{M<~E^$x` z;>EW(%Qq%@n$IWsUrwuE%VA-|!=q_C%{ktrY&P<1aeT1<`%7OOo}3(hzJGeWd-!nw z_!@j>^17zX4;uc+i~5bV(UE_SBnP=LJguhVp}8b+iD=Xd;QLGa#9clvXz#MZryv%B zbIs55)3dYuN4)%h`hU8;^t#G`Px|$7#wC!r=Wl0v2@TolT#O{ zkNkcfK9);wV_eY~(lf?jaZ9XFLKFl6v#oj(Dco80G@lM@aeX6?)_Nd_FlShr(>AZr zWSj%`kBd43=ojNTwu~w)hrD5;LAqaA+geaosyPT}7TZ75jVA|{-S(c880#veeKQo7 z0yNin)aMs7?fL!$x5R(Vn>fSq7jOGjlTrC-KIQH2FD!&poGrzaUn`-UU!gM^CGsL)*Ff{qJ0EUJk#16}ry|CDhi~noz*n@u2g$xgs)LK-wDFqN#W`zzTVja!rJ0l5%PE*9o+axujh z-4O`?W~tr`%8Y-cGD%sWLt#DCn%dYaw2i&uR@%S@c2PVu@iOMMbTSUHrF{Zu(2LuE`w{C)7hTbzw*=Tj`G$Y65wKXv>5-W^&iesi_ibY_ z%?fMZO#m%!kEcdvhI7JG=0Cp3Us|)SyhH=3coX_CMo~cg>$+Iu4TCvUT)?6FdY1tN6j(dxV^jT-gdfw_wTBI_rv~){T`Ta$me9A z5tH#_+}4)*pv505_%S{Q2?znpKMlc?L#_Ig#|x|hEPStR!@9^o>ZFVA*yie$?agwW zVNA&UukMbpH?A7?86^J0QxVcTIG)x45~}z>w|0L}F;=t|CIkrGcCXum_O80uP7G9j zJ9ZqOlQ{1^-}RLV5Q1Lf*nW!@TFa{|Fkfy?wlZRREOX1bvgw-++wIW^hN0M+#24>m4{X@x6Hb1jotoqeoRg zAvQWsmta3>LV1gBRbO&6QD9a9L1!vqIdy*$w+sztQcELO#?S9ya7$6Fjoh2Se1>Js zX5}(lv9;^kkaGZK&|LTnrZ67i556BXz#tjNuBV1&;*3Hb)9ou41F_6?m#s&LHdvxo zm0TO9t+@k;1{t1a)h9c2Q&P?-G*ZyEqNp5EJTp*4tIn>`-q^b}Rd;&8H22+uPRf7k zW5)yhy~4Ygu1x$IfzR<`i5G*4*mXfwvuhafE4aOdmok0kbBbC!avr9-dIU{MnfWKG zW_|Iq$dxH-Rs$fdNJD&VQ;8t>aZfbshNgZ-1k_uh@cFn$1b=tyzsSQtZ7zki&O!C4S(`~ zaI7V6{P(E>aO%@w~9 zf@KcHB+Pds2<48QV0H(561>ahK!N{MxxK6P7;9Ywy)HjGaQ8T+g||eGc(sDJ6w^As z0i)A|5Py5k`um^h{Ut93P{d>ic2lz zP&s|(In&P)1i**bWehuo4cN5U`T7u2@)ysJpFTd=fuDY&-ic1DG(lM__?*9gpESN> z?m+C`?tkI8cP4Dv|c zZY!GvJu;`#QJt(Bl|49b8Hq=evO8d_#)k(xBQt3bByV9&tm;Fgkr-YhhMJFe`#CDoUwqyRV-=wXA4!aa&1iRcV6!+q{8%C-beq^9bUxZYUl5Fa z!tn6CvoiJ?pSKDb!DW|&hj++KJ(e(Q?YQ+p?)dCtrw#J!J$Odhdg!sFi|DMzN!-LL zUJpK+fIYqq#)a31-hlyse$(iP%SFoBhly|b**%j;_%IXkYb17o$cF(&pCa^TfW_T= zHXe8Hjn3rmJv*01N$!p>%3ZrG?;B-#e|%ZqSF+SM6q>VCebehiX}yHBci!_z1KA0K zbMLKlSi?_`LW24Q(AA{RG_!T=y(H~V44!0r7=-rjM`761tfIev)*rDMi;2G%2`=gZ}JJzK=yJ106o#~LI@Fj<7%=P)XIqKpZJ=PSCZTk)gclI~CdJ3QyG z?3|qJe?{jKq4)C%I;>H9*ol2~0DkK|r|_jbyw!sPML&#xWHIkki;w@^h>uNmB${7F z)sYBu850V1L|1jse$j8%5d}D`BZ>6mz>V9fPA}>^)TnKvb+%QQ@h6oCvuK5$RCHD6 zf*AeIDU5MaNhCU|hK!;TZzGNhLlsyB1xtewm7jRXbz`52ysu6=$o8>g7HVut3p=+WhRA_rK>ofwIM&(m-E?Gy_vH6pbTX}$t|m5QNM(B{|fNU!~!H&4D6T-K#noFGLZI|x#uI>(Y1PSgkC6?%cuI$-+N=dqm3$Sr_;JXnT zjG+yH=HJl)ioqRK4QTg%7n{Qj{!$UuDv<{m@Hr%!P<$fC-i4grO8nR*N`<6O_ZoNC% zCWeShMNMl;9$>%=8JB8(k!tfE(gSbS)gZ3Xa1E&qrGjWB7lhwH0@8LnRX~33V1W^| zC6Q3wo|b2w$pQoPj8VFAHy|jblQ?{`|KRa|;XzTNfzHADWF>;Ue_J+-77E()<<(@k zqd-Fa)F6o4ksC(U*XOPmu(_nafx<4y$ER}gI5pi*=zO7CKq@}P<3RhQKJoMZ?Xs>V z8^nzBxgU#2Axksy8|GjBSWMSwcNhR-4Fw zJO-PD*Sms2T}rntotTXJ6dIhvnw+zgEf@#5(B@2@ht%jAMq?z5%acLDqm|r(YLGmK z1tc`}4Viqy?6eD=?~)d}Nl`*$+S)nP*?%P1$!$c4trK*x3R5D-7QYTw(3Ab5ZSXqz zjIL+OC%pydBp**lH>smb<84j&8&?Hl z*l5*v7l__>myGbL5dH36$mPOONucRFR!)f{ndKU30dcHLa;>bJBuzWqPBKtuwM{*>7FS22$qGj! z$T7yBG<0A-TgxTa_` z0?Nizg{4(aVO5!KmQIe*Zw;Q)>Zr^>g;gXsfr4)PQ)Ytzdr{oXA-b8!M%;xi{@%8FY~a;>NrMHkZ? zy3|HE<@C7;Rm`HB;7l{<>Nan5n>Ryk{?u(a>2CMy7om*Rq&LOHIUjrq*>YWST>8k| z9$c`PG{8?+CLQpw{aWCEf!?Mb$lKLP!>J;FlPJ#tKl1*Ad-R*1_cke#d+gh!KJG1W zo6_85xqFI+`Jx3R?qPnI9v1Mq3G>yTQ&sebOd}eZ#{ZFfh8eo2b@mqo`Mi3#TzQ}} z;g(T1X9|&ea@t1xe(@oF;AJDrR8AfT^~+UV=db{V-OnL{TksHn0@3CCX!~GZ%n2#{ zNa^GUo}iSW*FE^+V9@ZX=KJ^~7$(yj)(cV-qQxm>=Rkw?IvKocV+jzj0ol*Xh|p6{mQ> zbyLzj=(o)D@~Ja_K8O)7SStEc%{EjluMWxXlDP6zm@WPp@fDH@0XX5jko=^K5i+gb z?LxnGrkcyloNp=?S^plR+gj69^H$lg<(8ny+hxPH8>wY-u_Jh`E`AbS%Q#=ETM1=d z5gz+c_MnBT1hr?8*jI}LsarFtL;#-_axEECfoAi%{d$q!%rfV?9=mNc$wX)Z@0IP zTEs6W(*i?n(k7FsbI3ZOidQuwCTrYSQFQFthhME4-oMK(KIKm4IsL$pY)V(|7FySu zGfmf*tSaSy+fGdH8OcY>6|i!H$&n_ytp`ni;7&A%Ju~xV-8wF7oGzjq}!x3Jck{fMKQ1GGp}cDi` zIOKBTn_@!8)v|?wi~E|U1-UNhA&?s2Vl>4UkY4Rrqi0S-=~qQ0P`peWH*y5Aew1Ah zk+Sc9gbaJ3q6pB2c;YwR$iLJLM)L{7$QxjhAlp=;+i-mZUt zCv->I<=tYZH^Odj#2w$ryT1R$&M*9!?zMxVwXq^GM`^v(WISgDWQ(-e`rL&HnCN)S zeKeH;_sJNR@6heKrx=_+GA%80lh-G=68^YO!VP5j|9t8$wqfH7u+A)#0KJyGTy=Iq zoU0)7D<_#KY` delta 102166 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 diff --git a/Moose Test Missions/Moose_Test_SPAWN_Repeat/MOOSE_Test_SPAWN_Repeat.miz b/Moose Test Missions/Moose_Test_SPAWN_Repeat/MOOSE_Test_SPAWN_Repeat.miz index 12db2587bf4d6726720be6565b50269035944e66..afbcef4e9549e3adcd506eafad19d2ee0c188043 100644 GIT binary patch delta 102152 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 GROUPSET:FilterStart()

    Starts the filtering.

    + + + + GROUPSET:FindGroup(GroupName) + +

    Finds a Group based on the Group Name.

    @@ -198,13 +204,7 @@ The following iterator methods are currently available within the GROUPSET:

    - GROUPSET:FindUnit(GroupName) - -

    Finds a Group based on the Group Name.

    - - - - GROUPSET:ForEachUnit(IteratorFunction, ...) + GROUPSET:ForEachGroup(IteratorFunction, ...)

    Interate the GROUPSET and call an interator function for each alive GROUP, providing the GROUP and optional parameters.

    @@ -219,12 +219,6 @@ The following iterator methods are currently available within the GROUPSET:

    GROUPSET:New()

    Creates a new GROUPSET object, building a set of groups belonging to a coalitions, categories, countries, types or with defined prefix names.

    - - - - GROUPSET.Units - - @@ -473,6 +467,32 @@ self

    + +GROUPSET:FindGroup(GroupName) + +
    +
    + +

    Finds a Group based on the Group Name.

    + +

    Parameter

    +
      +
    • + +

      #string GroupName :

      + +
    • +
    +

    Return value

    + +

    Group#GROUP: +The found Group.

    + +
    +
    +
    +
    + GROUPSET:FindInDatabase(Event) @@ -512,34 +532,8 @@ The GROUP

    - -GROUPSET:FindUnit(GroupName) - -
    -
    - -

    Finds a Group based on the Group Name.

    - -

    Parameter

    -
      -
    • - -

      #string GroupName :

      - -
    • -
    -

    Return value

    - -

    Group#GROUP: -The found Group.

    - -
    -
    -
    -
    - - -GROUPSET:ForEachUnit(IteratorFunction, ...) + +GROUPSET:ForEachGroup(IteratorFunction, ...)
    @@ -613,20 +607,6 @@ self

    -- Define a new GROUPSET Object. This DBObject will contain a reference to all alive GROUPS.
     DBObject = GROUPSET:New()
    -
    -
    -
    -
    - - - -GROUPSET.Units - -
    -
    - - -
    From 8b01579a425814eaa0f6b9e4d4f455961ccc03c7 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Thu, 2 Jun 2016 14:47:05 +0200 Subject: [PATCH 09/12] Added lots of new GROUP functions --- Moose Development/Moose/Airbase.lua | 290 +++ Moose Development/Moose/Group.lua | 1737 +++++++++++----- .../l10n/DEFAULT/Moose.lua | 1739 ++++++++++++----- Moose Mission Setup/Moose.lua | 1739 ++++++++++++----- .../Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz | Bin 199246 -> 202130 bytes .../Moose_Test_DATABASE.miz | Bin 138994 -> 141859 bytes .../Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz | Bin 134430 -> 137314 bytes .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz | Bin 160085 -> 162969 bytes .../Moose_Test_MISSILETRAINER.miz | Bin 219379 -> 222263 bytes .../Moose_Test_SEAD/MOOSE_Test_SEAD.miz | Bin 126683 -> 129567 bytes .../Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz | Bin 152100 -> 154984 bytes .../MOOSE_Test_SPAWN_Repeat.miz | Bin 126244 -> 129128 bytes .../MOOSE_Test_TASK_Pickup_and_Deploy.miz | Bin 132845 -> 135729 bytes .../Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz | Bin 141864 -> 144748 bytes Moose Training/Documentation/Airbase.html | 662 +++++++ Moose Training/Documentation/Base.html | 1 + Moose Training/Documentation/CARGO.html | 1 + Moose Training/Documentation/CleanUp.html | 1 + Moose Training/Documentation/Client.html | 1 + Moose Training/Documentation/DCSAirbase.html | 1 + .../Documentation/DCSCoalitionObject.html | 1 + Moose Training/Documentation/DCSCommand.html | 1 + .../Documentation/DCSController.html | 1 + Moose Training/Documentation/DCSGroup.html | 1 + Moose Training/Documentation/DCSObject.html | 1 + Moose Training/Documentation/DCSTask.html | 1 + Moose Training/Documentation/DCSTypes.html | 1 + Moose Training/Documentation/DCSUnit.html | 1 + Moose Training/Documentation/DCSWorld.html | 1 + Moose Training/Documentation/DCStimer.html | 1 + Moose Training/Documentation/DEPLOYTASK.html | 1 + .../Documentation/DESTROYBASETASK.html | 1 + .../Documentation/DESTROYGROUPSTASK.html | 1 + .../Documentation/DESTROYRADARSTASK.html | 1 + .../Documentation/DESTROYUNITTYPESTASK.html | 1 + Moose Training/Documentation/Database.html | 1 + Moose Training/Documentation/Escort.html | 1 + Moose Training/Documentation/Event.html | 1 + Moose Training/Documentation/GOHOMETASK.html | 1 + Moose Training/Documentation/Group.html | 952 ++++++++- Moose Training/Documentation/GroupSet.html | 1 + Moose Training/Documentation/MISSION.html | 1 + Moose Training/Documentation/MOVEMENT.html | 1 + Moose Training/Documentation/Menu.html | 1 + Moose Training/Documentation/Message.html | 1 + .../Documentation/MissileTrainer.html | 1 + Moose Training/Documentation/NOTASK.html | 1 + Moose Training/Documentation/PICKUPTASK.html | 1 + Moose Training/Documentation/ROUTETASK.html | 1 + Moose Training/Documentation/STAGE.html | 1 + Moose Training/Documentation/Scheduler.html | 1 + Moose Training/Documentation/Scoring.html | 1 + Moose Training/Documentation/Sead.html | 1 + Moose Training/Documentation/Set.html | 1 + Moose Training/Documentation/Spawn.html | 1 + .../Documentation/StaticObject.html | 1 + Moose Training/Documentation/TASK.html | 1 + Moose Training/Documentation/Unit.html | 1 + Moose Training/Documentation/UnitSet.html | 1 + Moose Training/Documentation/Zone.html | 1 + Moose Training/Documentation/env.html | 1 + Moose Training/Documentation/index.html | 14 + Moose Training/Documentation/land.html | 1 + Moose Training/Documentation/routines.html | 1 + 64 files changed, 5548 insertions(+), 1632 deletions(-) create mode 100644 Moose Development/Moose/Airbase.lua create mode 100644 Moose Training/Documentation/Airbase.html diff --git a/Moose Development/Moose/Airbase.lua b/Moose Development/Moose/Airbase.lua new file mode 100644 index 000000000..970e8ddfa --- /dev/null +++ b/Moose Development/Moose/Airbase.lua @@ -0,0 +1,290 @@ +--- AIRBASE Class +-- +-- @{AIRBASE} class +-- ============== +-- The @{AIRBASE} class is a wrapper class to handle the DCS Airbase objects: +-- +-- * Support all DCS Airbase APIs. +-- * Enhance with Airbase specific APIs not in the DCS Airbase API set. +-- +-- +-- AIRBASE reference methods +-- ====================== +-- For each DCS Airbase object alive within a running mission, a AIRBASE wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts). +-- +-- The AIRBASE class **does not contain a :New()** method, rather it provides **:Find()** methods to retrieve the object reference +-- using the DCS Airbase or the DCS AirbaseName. +-- +-- Another thing to know is that AIRBASE objects do not "contain" the DCS Airbase object. +-- The AIRBASE methods will reference the DCS Airbase object by name when it is needed during API execution. +-- If the DCS Airbase object does not exist or is nil, the AIRBASE methods will return nil and log an exception in the DCS.log file. +-- +-- The AIRBASE class provides the following functions to retrieve quickly the relevant AIRBASE instance: +-- +-- * @{#AIRBASE.Find}(): Find a AIRBASE instance from the _DATABASE object using a DCS Airbase object. +-- * @{#AIRBASE.FindByName}(): Find a AIRBASE instance from the _DATABASE object using a DCS Airbase name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these AIRBASE OBJECT REFERENCES! (make the AIRBASE object references nil). +-- +-- DCS AIRBASE APIs +-- ============= +-- The DCS Airbase APIs are used extensively within MOOSE. The AIRBASE class has for each DCS Airbase API a corresponding method. +-- To be able to distinguish easily in your code the difference between a AIRBASE API call and a DCS Airbase API call, +-- the first letter of the method is also capitalized. So, by example, the DCS Airbase method @{DCSAirbase#Airbase.getName}() +-- is implemented in the AIRBASE class as @{#AIRBASE.GetName}(). +-- +-- More functions will be added +-- ---------------------------- +-- During the MOOSE development, more functions will be added. +-- +-- @module Airbase +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + +--- The AIRBASE class +-- @type AIRBASE +-- @extends Base#BASE +AIRBASE = { + ClassName="AIRBASE", + CategoryName = { + [Airbase.Category.AIRDROME] = "Airdrome", + [Airbase.Category.HELIPAD] = "Helipad", + [Airbase.Category.SHIP] = "Ship", + }, + } + +-- Registration. + +--- Create a new AIRBASE from DCSAirbase. +-- @param #AIRBASE self +-- @param DCSAirbase#Airbase DCSAirbase +-- @param Database#DATABASE Database +-- @return Airbase#AIRBASE +function AIRBASE:Register( AirbaseName ) + + local self = BASE:Inherit( self, BASE:New() ) + self:F2( AirbaseName ) + self.AirbaseName = AirbaseName + return self +end + +-- Reference methods. + +--- Finds a AIRBASE from the _DATABASE using a DCSAirbase object. +-- @param #AIRBASE self +-- @param DCSAirbase#Airbase DCSAirbase An existing DCS Airbase object reference. +-- @return Airbase#AIRBASE self +function AIRBASE:Find( DCSAirbase ) + + local AirbaseName = DCSAirbase:getName() + local AirbaseFound = _DATABASE:FindAirbase( AirbaseName ) + return AirbaseFound +end + +--- Find a AIRBASE in the _DATABASE using the name of an existing DCS Airbase. +-- @param #AIRBASE self +-- @param #string AirbaseName The Airbase Name. +-- @return Airbase#AIRBASE self +function AIRBASE:FindByName( AirbaseName ) + + local AirbaseFound = _DATABASE:FindAirbase( AirbaseName ) + return AirbaseFound +end + +function AIRBASE:GetDCSAirbase() + local DCSAirbase = Airbase.getByName( self.AirbaseName ) + + if DCSAirbase then + return DCSAirbase + end + + return nil +end + +--- Returns coalition of the Airbase. +-- @param Airbase#AIRBASE self +-- @return DCSCoalitionObject#coalition.side The side of the coalition. +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:GetCoalition() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseCoalition = DCSAirbase:getCoalition() + self:T3( AirbaseCoalition ) + return AirbaseCoalition + end + + return nil +end + +--- Returns country of the Airbase. +-- @param Airbase#AIRBASE self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:GetCountry() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseCountry = DCSAirbase:getCountry() + self:T3( AirbaseCountry ) + return AirbaseCountry + end + + return nil +end + + +--- Returns DCS Airbase object name. +-- The function provides access to non-activated units too. +-- @param Airbase#AIRBASE self +-- @return #string The name of the DCS Airbase. +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:GetName() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseName = self.AirbaseName + return AirbaseName + end + + return nil +end + + +--- Returns if the airbase is alive. +-- @param Airbase#AIRBASE self +-- @return #boolean true if Airbase is alive. +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:IsAlive() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseIsAlive = DCSAirbase:isExist() + return AirbaseIsAlive + end + + return false +end + +--- Returns the unit's unique identifier. +-- @param Airbase#AIRBASE self +-- @return DCSAirbase#Airbase.ID Airbase ID +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:GetID() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseID = DCSAirbase:getID() + return AirbaseID + end + + return nil +end + +--- Returns the Airbase's callsign - the localized string. +-- @param Airbase#AIRBASE self +-- @return #string The Callsign of the Airbase. +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:GetCallSign() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseCallSign = DCSAirbase:getCallsign() + return AirbaseCallSign + end + + return nil +end + + + +--- Returns unit descriptor. Descriptor type depends on unit category. +-- @param Airbase#AIRBASE self +-- @return DCSAirbase#Airbase.Desc The Airbase descriptor. +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:GetDesc() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseDesc = DCSAirbase:getDesc() + return AirbaseDesc + end + + return nil +end + + +--- Returns the type name of the DCS Airbase. +-- @param Airbase#AIRBASE self +-- @return #string The type name of the DCS Airbase. +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:GetTypeName() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseTypeName = DCSAirbase:getTypeName() + self:T3( AirbaseTypeName ) + return AirbaseTypeName + end + + return nil +end + + +--- Returns the @{DCSTypes#Vec2} vector indicating the point in 2D of the DCS Airbase within the mission. +-- @param Airbase#AIRBASE self +-- @return DCSTypes#Vec2 The 2D point vector of the DCS Airbase. +-- @return #nil The DCS Airbase is not existing or alive. +function AIRBASE:GetPointVec2() + self:F2( self.AirbaseName ) + + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbasePointVec3 = DCSAirbase:getPosition().p + + local AirbasePointVec2 = {} + AirbasePointVec2.x = AirbasePointVec3.x + AirbasePointVec2.y = AirbasePointVec3.z + + self:T3( AirbasePointVec2 ) + return AirbasePointVec2 + end + + return nil +end + +--- Returns the DCS Airbase category name as defined within the DCS Airbase Descriptor. +-- @param Airbase#AIRBASE self +-- @return #string The DCS Airbase Category Name +function AIRBASE:GetCategoryName() + local DCSAirbase = self:GetDCSAirbase() + + if DCSAirbase then + local AirbaseCategoryName = self.CategoryName[ self:GetDesc().category ] + return AirbaseCategoryName + end + + return nil +end + diff --git a/Moose Development/Moose/Group.lua b/Moose Development/Moose/Group.lua index 27e972843..818d21eb9 100644 --- a/Moose Development/Moose/Group.lua +++ b/Moose Development/Moose/Group.lua @@ -1,32 +1,32 @@ ---- GROUP class. --- +--- GROUP class. +-- -- @{GROUP} class -- ============== -- The @{GROUP} class is a wrapper class to handle the DCS Group objects: --- +-- -- * Support all DCS Group APIs. -- * Enhance with Group specific APIs not in the DCS Group API set. -- * Handle local Group Controller. -- * Manage the "state" of the DCS Group. --- --- +-- +-- -- GROUP reference methods --- ======================= +-- ======================= -- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. -- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). --- +-- -- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference -- using the DCS Group or the DCS GroupName. --- --- Another thing to know is that GROUP objects do not "contain" the DCS Group object. +-- +-- Another thing to know is that GROUP objects do not "contain" the DCS Group object. -- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. -- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. --- +-- -- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: --- +-- -- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. -- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. --- +-- -- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). -- @module Group -- @author FlightControl @@ -42,14 +42,14 @@ Include.File( "Unit" ) -- @field DCSGroup#Group DCSGroup The DCS group class. -- @field #string GroupName The name of the group. GROUP = { - ClassName = "GROUP", - GroupName = "", - GroupID = 0, - Controller = nil, - DCSGroup = nil, - WayPointFunctions = {}, - } - + ClassName = "GROUP", + GroupName = "", + GroupID = 0, + Controller = nil, + DCSGroup = nil, + WayPointFunctions = {}, +} + --- A DCSGroup -- @type DCSGroup -- @field id_ The ID of the group in DCS @@ -59,10 +59,10 @@ GROUP = { -- @param DCSGroup#Group GroupName The DCS Group name -- @return #GROUP self function GROUP:Register( GroupName ) - local self = BASE:Inherit( self, BASE:New() ) - self:F2( GroupName ) - self.GroupName = GroupName - return self + local self = BASE:Inherit( self, BASE:New() ) + self:F2( GroupName ) + self.GroupName = GroupName + return self end -- Reference methods. @@ -95,11 +95,11 @@ end -- @return DCSGroup#Group The DCS Group. function GROUP:GetDCSGroup() local DCSGroup = Group.getByName( self.GroupName ) - + if DCSGroup then return DCSGroup end - + return nil end @@ -110,27 +110,27 @@ end -- @return #boolean true if the DCS Group is alive. function GROUP:IsAlive() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupIsAlive = DCSGroup:isExist() self:T3( GroupIsAlive ) return GroupIsAlive end - + return nil end ---- Destroys the DCS Group and all of its DCS Units. +--- Destroys the DCS Group and all of its DCS Units. -- Note that this destroy method also raises a destroy event at run-time. -- So all event listeners will catch the destroy event of this DCS Group. -- @param #GROUP self function GROUP:Destroy() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then for Index, UnitData in pairs( DCSGroup:getUnits() ) do self:CreateEventCrash( timer.getTime(), UnitData ) @@ -138,11 +138,11 @@ function GROUP:Destroy() DCSGroup:destroy() DCSGroup = nil end - + return nil end ---- Returns category of the DCS Group. +--- Returns category of the DCS Group. -- @param #GROUP self -- @return DCSGroup#Group.Category The category ID function GROUP:GetCategory() @@ -154,7 +154,7 @@ function GROUP:GetCategory() self:T3( GroupCategory ) return GroupCategory end - + return nil end @@ -170,14 +170,14 @@ function GROUP:GetCategoryName() [Group.Category.AIRPLANE] = "Airplane", [Group.Category.HELICOPTER] = "Helicopter", [Group.Category.GROUND] = "Ground Unit", - [Group.Category.SHIP] = "Ship", + [Group.Category.SHIP] = "Ship", } local GroupCategory = DCSGroup:getCategory() self:T3( GroupCategory ) - + return CategoryNames[GroupCategory] end - + return nil end @@ -194,14 +194,14 @@ function GROUP:GetCoalition() self:T3( GroupCoalition ) return GroupCoalition end - + return nil end --- Returns the country of the DCS Group. -- @param #GROUP self -- @return DCScountry#country.id The country identifier. --- @return #nil The DCS Group is not existing or alive. +-- @return #nil The DCS Group is not existing or alive. function GROUP:GetCountry() self:F2( self.GroupName ) @@ -211,7 +211,7 @@ function GROUP:GetCountry() self:T3( GroupCountry ) return GroupCountry end - + return nil end @@ -222,13 +222,13 @@ function GROUP:GetName() self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupName = DCSGroup:getName() self:T3( GroupName ) return GroupName end - + return nil end @@ -237,19 +237,19 @@ end -- @return #number The identifier of the DCS Group. function GROUP:GetID() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupID = DCSGroup:getID() self:T3( GroupID ) return GroupID end - + return nil end ---- Returns the UNIT wrapper class with number UnitNumber. +--- Returns the UNIT wrapper class with number UnitNumber. -- If the underlying DCS Unit does not exist, the method will return nil. . -- @param #GROUP self -- @param #number UnitNumber The number of the UNIT wrapper class to be returned. @@ -258,7 +258,7 @@ function GROUP:GetUnit( UnitNumber ) self:F2( { self.GroupName, UnitNumber } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) self:T3( UnitFound.UnitName ) @@ -269,7 +269,7 @@ function GROUP:GetUnit( UnitNumber ) return nil end ---- Returns the DCS Unit with number UnitNumber. +--- Returns the DCS Unit with number UnitNumber. -- If the underlying DCS Unit does not exist, the method will return nil. . -- @param #GROUP self -- @param #number UnitNumber The number of the DCS Unit to be returned. @@ -278,7 +278,7 @@ function GROUP:GetDCSUnit( UnitNumber ) self:F2( { self.GroupName, UnitNumber } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) self:T3( DCSUnitFound ) @@ -288,14 +288,14 @@ function GROUP:GetDCSUnit( UnitNumber ) return nil end ---- Returns current size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. +--- Returns current size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. -- @param #GROUP self -- @return #number The DCS Group size. function GROUP:GetSize() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupSize = DCSGroup:getSize() self:T3( GroupSize ) @@ -305,15 +305,15 @@ function GROUP:GetSize() return nil end ---- ---- Returns the initial size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. +--- +--- Returns the initial size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. -- @param #GROUP self -- @return #number The DCS Group initial size. function GROUP:GetInitialSize() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupInitialSize = DCSGroup:getInitialSize() self:T3( GroupInitialSize ) @@ -329,7 +329,7 @@ end function GROUP:GetUnits() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnits = DCSGroup:getUnits() local Units = {} @@ -350,7 +350,7 @@ end function GROUP:GetDCSUnits() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnits = DCSGroup:getUnits() self:T3( DCSUnits ) @@ -366,7 +366,7 @@ end function GROUP:_GetController() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupController = DCSGroup:getController() self:T3( GroupController ) @@ -386,7 +386,7 @@ end function GROUP:WayPointInitialize() self.WayPoints = self:GetTaskRoute() - + return self end @@ -399,7 +399,7 @@ end -- @return #GROUP function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) - + table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) return self @@ -409,7 +409,7 @@ end function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) local DCSTask - + local DCSScript = {} DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " @@ -417,16 +417,16 @@ function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionAr DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" else DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" - end - - DCSTask = self:TaskWrappedAction( + end + + DCSTask = self:TaskWrappedAction( self:CommandDoScript( table.concat( DCSScript ) ), WayPointIndex ) - + self:T3( DCSTask ) - + return DCSTask end @@ -445,14 +445,14 @@ function GROUP:WayPointExecute( WayPoint, WaitTime ) if not WayPoint then WayPoint = 1 end - + -- When starting the mission from a certain point, the TaskPoints need to be deleted before the given WayPoint. for TaskPointID = 1, WayPoint - 1 do table.remove( self.WayPoints, 1 ) end self:T3( self.WayPoints ) - + self:SetTask( self:TaskRoute( self.WayPoints ), WaitTime ) return self @@ -462,9 +462,9 @@ end --- Activates a GROUP. -- @param #GROUP self function GROUP:Activate() - self:F2( { self.GroupName } ) - trigger.action.activateGroup( self:GetDCSGroup() ) - return self:GetDCSGroup() + self:F2( { self.GroupName } ) + trigger.action.activateGroup( self:GetDCSGroup() ) + return self:GetDCSGroup() end @@ -475,13 +475,13 @@ function GROUP:GetTypeName() self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupTypeName = DCSGroup:getUnit(1):getTypeName() self:T3( GroupTypeName ) return( GroupTypeName ) end - + return nil end @@ -490,33 +490,33 @@ end -- @return #string The CallSign of the first DCS Unit of the DCS Group. function GROUP:GetCallsign() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCallSign = DCSGroup:getUnit(1):getCallsign() self:T3( GroupCallSign ) return GroupCallSign end - + return nil end --- Returns the current point (Vec2 vector) of the first DCS Unit in the DCS Group. -- @return DCSTypes#Vec2 Current Vec2 point of the first DCS Unit of the DCS Group. function GROUP:GetPointVec2() - self:F2( self.GroupName ) - - local GroupPointVec2 = self:GetUnit(1):GetPointVec2() - self:T3( GroupPointVec2 ) - return GroupPointVec2 + self:F2( self.GroupName ) + + local GroupPointVec2 = self:GetUnit(1):GetPointVec2() + self:T3( GroupPointVec2 ) + return GroupPointVec2 end --- Returns the current point (Vec3 vector) of the first DCS Unit in the DCS Group. -- @return DCSTypes#Vec3 Current Vec3 point of the first DCS Unit of the DCS Group. function GROUP:GetPointVec3() - self:F2( self.GroupName ) - + self:F2( self.GroupName ) + local GroupPointVec3 = self:GetUnit(1):GetPointVec3() self:T3( GroupPointVec3 ) return GroupPointVec3 @@ -531,16 +531,16 @@ end -- @param #GROUP self -- @return #boolean Air category evaluation result. function GROUP:IsAir() - self:F2( self.GroupName ) + self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER - self:T3( IsAirResult ) - return IsAirResult + local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER + self:T3( IsAirResult ) + return IsAirResult end - + return nil end @@ -549,15 +549,15 @@ end -- @return #boolean true if DCS Group contains Helicopters. function GROUP:IsHelicopter() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.HELICOPTER end - + return nil end @@ -566,15 +566,15 @@ end -- @return #boolean true if DCS Group contains AirPlanes. function GROUP:IsAirPlane() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.AIRPLANE end - + return nil end @@ -583,15 +583,15 @@ end -- @return #boolean true if DCS Group contains Ground troops. function GROUP:IsGround() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.GROUND end - + return nil end @@ -600,15 +600,15 @@ end -- @return #boolean true if DCS Group contains Ships. function GROUP:IsShip() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.SHIP end - + return nil end @@ -617,23 +617,23 @@ end -- @param #GROUP self -- @return #boolean All units on the ground result. function GROUP:AllOnGround() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local AllOnGroundResult = true - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - if UnitData:inAir() then - AllOnGroundResult = false - end - end - - self:T3( AllOnGroundResult ) - return AllOnGroundResult + local AllOnGroundResult = true + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + if UnitData:inAir() then + AllOnGroundResult = false + end + end + + self:T3( AllOnGroundResult ) + return AllOnGroundResult end - + return nil end @@ -642,26 +642,26 @@ end -- @param #GROUP self -- @return #number Maximum velocity found. function GROUP:GetMaxVelocity() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local MaxVelocity = 0 - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - - local Velocity = UnitData:getVelocity() - local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) - - if VelocityTotal < MaxVelocity then - MaxVelocity = VelocityTotal - end - end - - return MaxVelocity + local MaxVelocity = 0 + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + + local Velocity = UnitData:getVelocity() + local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) + + if VelocityTotal < MaxVelocity then + MaxVelocity = VelocityTotal + end + end + + return MaxVelocity end - + return nil end @@ -670,7 +670,7 @@ end -- @param #GROUP self -- @return #number Minimum height found. function GROUP:GetMinHeight() - self:F2() + self:F2() end @@ -679,7 +679,7 @@ end -- @param #GROUP self -- @return #number Maximum height found. function GROUP:GetMaxHeight() - self:F2() + self:F2() end @@ -689,16 +689,16 @@ end -- @param #GROUP self -- @return Group#GROUP self function GROUP:PopCurrentTask() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() Controller:popTask() return self end - + return nil end @@ -706,27 +706,27 @@ end -- @param #GROUP self -- @return Group#GROUP self function GROUP:PushTask( DCSTask, WaitTime ) - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() - + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. -- Therefore we schedule the functions to set the mission and options for the Group. -- Controller:pushTask( DCSTask ) - + if WaitTime then --routines.scheduleFunction( Controller.pushTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) SCHEDULER:New( Controller, Controller.pushTask, { DCSTask }, WaitTime ) else Controller:pushTask( DCSTask ) end - + return self end - + return nil end @@ -737,24 +737,24 @@ function GROUP:SetTask( DCSTask, WaitTime ) self:F2( { DCSTask } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - + local Controller = self:_GetController() - + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. -- Therefore we schedule the functions to set the mission and options for the Group. -- Controller.setTask( Controller, DCSTask ) - + if not WaitTime then WaitTime = 1 end --routines.scheduleFunction( Controller.setTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) SCHEDULER:New( Controller, Controller.setTask, { DCSTask }, WaitTime ) - + return self end - + return nil end @@ -762,15 +762,15 @@ end --- Return a condition section for a controlled task -- @param #GROUP self -- @param DCSTime#Time time --- @param #string userFlag --- @param #boolean userFlagValue +-- @param #string userFlag +-- @param #boolean userFlagValue -- @param #string condition --- @param DCSTime#Time duration --- @param #number lastWayPoint +-- @param DCSTime#Time duration +-- @param #number lastWayPoint -- return DCSTask#Task function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration, lastWayPoint ) - self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) - + self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) + local DCSStopCondition = {} DCSStopCondition.time = time DCSStopCondition.userFlag = userFlag @@ -778,9 +778,9 @@ function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration DCSStopCondition.condition = condition DCSStopCondition.duration = duration DCSStopCondition.lastWayPoint = lastWayPoint - + self:T3( { DCSStopCondition } ) - return DCSStopCondition + return DCSStopCondition end --- Return a Controlled Task taking a Task and a TaskCondition @@ -789,18 +789,18 @@ end -- @param #DCSStopCondition DCSStopCondition -- @return DCSTask#Task function GROUP:TaskControlled( DCSTask, DCSStopCondition ) - self:F2( { DCSTask, DCSStopCondition } ) + self:F2( { DCSTask, DCSStopCondition } ) local DCSTaskControlled - - DCSTaskControlled = { - id = 'ControlledTask', - params = { - task = DCSTask, - stopCondition = DCSStopCondition - } + + DCSTaskControlled = { + id = 'ControlledTask', + params = { + task = DCSTask, + stopCondition = DCSStopCondition + } } - + self:T3( { DCSTaskControlled } ) return DCSTaskControlled end @@ -813,19 +813,19 @@ function GROUP:TaskCombo( DCSTasks ) self:F2( { DCSTasks } ) local DCSTaskCombo - - DCSTaskCombo = { - id = 'ComboTask', - params = { + + DCSTaskCombo = { + id = 'ComboTask', + params = { tasks = DCSTasks - } + } } - + self:T3( { DCSTaskCombo } ) return DCSTaskCombo end ---- Return a WrappedAction Task taking a Command +--- Return a WrappedAction Task taking a Command -- @param #GROUP self -- @param DCSCommand#Command DCSCommand -- @return DCSTask#Task @@ -833,8 +833,8 @@ function GROUP:TaskWrappedAction( DCSCommand, Index ) self:F2( { DCSCommand } ) local DCSTaskWrappedAction - - DCSTaskWrappedAction = { + + DCSTaskWrappedAction = { id = "WrappedAction", enabled = true, number = Index, @@ -854,15 +854,15 @@ end -- @return #GROUP self function GROUP:SetCommand( DCSCommand ) self:F2( DCSCommand ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() Controller:setCommand( DCSCommand ) return self end - + return nil end @@ -873,117 +873,387 @@ end -- @return DCSTask#Task function GROUP:CommandSwitchWayPoint( FromWayPoint, ToWayPoint, Index ) self:F2( { FromWayPoint, ToWayPoint, Index } ) - + local CommandSwitchWayPoint = { - id = 'SwitchWaypoint', - params = { - fromWaypointIndex = FromWayPoint, - goToWaypointIndex = ToWayPoint, + id = 'SwitchWaypoint', + params = { + fromWaypointIndex = FromWayPoint, + goToWaypointIndex = ToWayPoint, }, } - + self:T3( { CommandSwitchWayPoint } ) return CommandSwitchWayPoint end - ---- Orbit at a specified position at a specified alititude during a specified duration with a specified speed. + +-- TASKS FOR AIR GROUPS + + +--- (AIR) Attack a Group. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param DCSTypes#Distance Altitude (optional) Desired attack start altitude. Group/aircraft will make its attacks from the altitude. If the altitude is too low or too high to use weapon aircraft/group will choose closest altitude to the desired attack start altitude. If the desired altitude is defined group/aircraft will not attack from safe altitude. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackGroup( AttackGroup, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit ) + self:F2( { self.GroupName, AttackGroup, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit } ) + + -- AttackGroup = { + -- id = 'AttackGroup', + -- params = { + -- groupId = Group.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend, + -- attackQty = number, + -- directionEnabled = boolean, + -- direction = Azimuth, + -- altitudeEnabled = boolean, + -- altitude = Distance, + -- attackQtyLimit = boolean, + -- } + -- } + + local DirectionEnabled = nil + if Direction then + DirectionEnabled = true + end + + local AltitudeEnabled = nil + if Altitude then + AltitudeEnabled = true + end + + local DCSTask + DCSTask = { id = 'AttackGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + directionEnabled = DirectionEnabled, + direction = Direction, + altitudeEnabled = AltitudeEnabled, + altitude = Altitude, + attackQtyLimit = AttackQtyLimit, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Attack the Unit. +-- @param #GROUP self +-- @param Unit#UNIT AttackUnit The unit. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackUnit( AttackUnit, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack ) + self:F2( { self.GroupName, AttackUnit, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack } ) + + -- AttackUnit = { + -- id = 'AttackUnit', + -- params = { + -- unitId = Unit.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend + -- attackQty = number, + -- direction = Azimuth, + -- attackQtyLimit = boolean, + -- groupAttack = boolean, + -- } + -- } + + local DCSTask + DCSTask = { id = 'AttackUnit', + params = { + unitId = AttackUnit:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + attackQtyLimit = AttackQtyLimit, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Delivering weapon at the point on the ground. +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the point to deliver weapon at. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) Desired quantity of passes. The parameter is not the same in AttackGroup and AttackUnit tasks. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskBombing( PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- Bombing = { +-- id = 'Bombing', +-- params = { +-- point = Vec2, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'Bombing', + params = { + point = PointVec2, + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + +--- (AIR) Orbit at a specified position at a specified alititude during a specified duration with a specified speed. -- @param #GROUP self -- @param DCSTypes#Vec2 Point The point to hold the position. -- @param #number Altitude The altitude to hold the position. -- @param #number Speed The speed flying when holding the position. -- @return #GROUP self function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed ) - self:F2( { self.GroupName, Point, Altitude, Speed } ) + self:F2( { self.GroupName, Point, Altitude, Speed } ) + + -- pattern = enum AI.Task.OribtPattern, + -- point = Vec2, + -- point2 = Vec2, + -- speed = Distance, + -- altitude = Distance --- pattern = enum AI.Task.OribtPattern, --- point = Vec2, --- point2 = Vec2, --- speed = Distance, --- altitude = Distance - local LandHeight = land.getHeight( Point ) - + self:T3( { LandHeight } ) - local DCSTask = { id = 'Orbit', - params = { pattern = AI.Task.OrbitPattern.CIRCLE, - point = Point, - speed = Speed, - altitude = Altitude + LandHeight - } - } + local DCSTask = { id = 'Orbit', + params = { pattern = AI.Task.OrbitPattern.CIRCLE, + point = Point, + speed = Speed, + altitude = Altitude + LandHeight + } + } + + + -- local AITask = { id = 'ControlledTask', + -- params = { task = { id = 'Orbit', + -- params = { pattern = AI.Task.OrbitPattern.CIRCLE, + -- point = Point, + -- speed = Speed, + -- altitude = Altitude + LandHeight + -- } + -- }, + -- stopCondition = { duration = Duration + -- } + -- } + -- } + -- ) - --- local AITask = { id = 'ControlledTask', --- params = { task = { id = 'Orbit', --- params = { pattern = AI.Task.OrbitPattern.CIRCLE, --- point = Point, --- speed = Speed, --- altitude = Altitude + LandHeight --- } --- }, --- stopCondition = { duration = Duration --- } --- } --- } --- ) - return DCSTask end ---- Orbit at the current position of the first unit of the group at a specified alititude +--- (AIR) Orbit at the current position of the first unit of the group at a specified alititude -- @param #GROUP self -- @param #number Altitude The altitude to hold the position. -- @param #number Speed The speed flying when holding the position. -- @return #GROUP self function GROUP:TaskOrbitCircle( Altitude, Speed ) - self:F2( { self.GroupName, Altitude, Speed } ) + self:F2( { self.GroupName, Altitude, Speed } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupPoint = self:GetPointVec2() return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) end - + return nil end ---- Hold position at the current position of the first unit of the group. +--- (AIR) Hold position at the current position of the first unit of the group. -- @param #GROUP self -- @param #number Duration The maximum duration in seconds to hold the position. -- @return #GROUP self function GROUP:TaskHoldPosition() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) return self:TaskOrbitCircle( 30, 10 ) end ---- Land the group at a Vec2Point. + + +--- (AIR) Attacking the map object (building, structure, e.t.c). +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the point the map object is closest to. The distance between the point and the map object must not be greater than 2000 meters. Object id is not used here because Mission Editor doesn't support map object identificators. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackMapObject( PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- AttackMapObject = { +-- id = 'AttackMapObject', +-- params = { +-- point = Vec2, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'AttackMapObject', + params = { + point = PointVec2, + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Delivering weapon on the runway. +-- @param #GROUP self +-- @param Airbase#AIRBASE Airbase Airbase to attack. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskBombingRunway( Airbase, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, Airbase, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- BombingRunway = { +-- id = 'BombingRunway', +-- params = { +-- runwayId = AirdromeId, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'BombingRunway', + params = { + point = Airbase:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Refueling from the nearest tanker. No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskRefueling() + self:F2( { self.GroupName } ) + +-- Refueling = { +-- id = 'Refueling', +-- params = {} +-- } + + local DCSTask + DCSTask = { id = 'Refueling', + params = { + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR HELICOPTER) Landing at the ground. For helicopters only. -- @param #GROUP self -- @param DCSTypes#Vec2 Point The point where to land. -- @param #number Duration The duration in seconds to stay on the ground. -- @return #GROUP self function GROUP:TaskLandAtVec2( Point, Duration ) - self:F2( { self.GroupName, Point, Duration } ) + self:F2( { self.GroupName, Point, Duration } ) +-- Land = { +-- id= 'Land', +-- params = { +-- point = Vec2, +-- durationFlag = boolean, +-- duration = Time +-- } +-- } + local DCSTask - - if Duration and Duration > 0 then - DCSTask = { id = 'Land', params = { point = Point, durationFlag = true, duration = Duration } } - else - DCSTask = { id = 'Land', params = { point = Point, durationFlag = false } } - end + if Duration and Duration > 0 then + DCSTask = { id = 'Land', + params = { + point = Point, + durationFlag = true, + duration = Duration, + }, + } + else + DCSTask = { id = 'Land', + params = { + point = Point, + durationFlag = false, + }, + } + end self:T3( DCSTask ) - return DCSTask + return DCSTask end ---- Land the group at a @{Zone#ZONE). +--- (AIR) Land the group at a @{Zone#ZONE). -- @param #GROUP self -- @param Zone#ZONE Zone The zone where to land. -- @param #number Duration The duration in seconds to stay on the ground. @@ -997,80 +1267,104 @@ function GROUP:TaskLandAtZone( Zone, Duration, RandomPoint ) else Point = Zone:GetPointVec2() end - + local DCSTask = self:TaskLandAtVec2( Point, Duration ) self:T3( DCSTask ) return DCSTask end - ---- Attack the Unit. +--- (AIR) Following another airborne group. +-- The unit / group will follow lead unit of another group, wingmens of both groups will continue following their leaders. +-- If another group is on land the unit / group will orbit around. -- @param #GROUP self --- @param Unit#UNIT The unit. +-- @param Group#GROUP FollowGroup The group to be followed. +-- @param DCSTypes#Vec3 PointVec3 Position of the unit / lead unit of the group relative lead unit of another group in frame reference oriented by course of lead unit of another group. If another group is on land the unit / group will orbit around. +-- @param #number LastWaypointIndex Detach waypoint of another group. Once reached the unit / group Follow task is finished. -- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackUnit( AttackUnit ) - self:F2( { self.GroupName, AttackUnit } ) +function GROUP:TaskFollow( FollowGroup, PointVec3, LastWaypointIndex ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex } ) --- AttackUnit = { --- id = 'AttackUnit', --- params = { --- unitId = Unit.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend --- attackQty = number, --- direction = Azimuth, --- attackQtyLimit = boolean, --- groupAttack = boolean, --- } +-- Follow = { +-- id = 'Follow', +-- params = { +-- groupId = Group.ID, +-- pos = Vec3, +-- lastWptIndexFlag = boolean, +-- lastWptIndex = number +-- } -- } + + local LastWaypointIndexFlag = nil + if LastWaypointIndex then + LastWaypointIndexFlag = true + end - local DCSTask - DCSTask = { id = 'AttackUnit', - params = { unitId = AttackUnit:GetID(), - expend = AI.Task.WeaponExpend.TWO, - groupAttack = true, - }, - }, - + local DCSTask + DCSTask = { id = 'Follow', + params = { + groupId = FollowGroup:GetID(), + pos = PointVec3, + lastWptIndexFlag = LastWaypointIndexFlag, + lastWptIndex = LastWaypointIndex, + }, + }, + self:T3( { DCSTask } ) return DCSTask end ---- Attack a Group. + +--- (AIR) Escort another airborne group. +-- The unit / group will follow lead unit of another group, wingmens of both groups will continue following their leaders. +-- The unit / group will also protect that group from threats of specified types. -- @param #GROUP self --- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param Group#GROUP EscortGroup The group to be escorted. +-- @param DCSTypes#Vec3 PointVec3 Position of the unit / lead unit of the group relative lead unit of another group in frame reference oriented by course of lead unit of another group. If another group is on land the unit / group will orbit around. +-- @param #number LastWaypointIndex Detach waypoint of another group. Once reached the unit / group Follow task is finished. +-- @param #number EngagementDistanceMax Maximal distance from escorted group to threat. If the threat is already engaged by escort escort will disengage if the distance becomes greater than 1.5 * engagementDistMax. +-- @param #list TargetTypes Array of AttributeName that is contains threat categories allowed to engage. -- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackGroup( AttackGroup ) - self:F2( { self.GroupName, AttackGroup } ) +function GROUP:TaskEscort( FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes } ) --- AttackGroup = { --- id = 'AttackGroup', --- params = { --- groupId = Group.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend, --- attackQty = number, --- directionEnabled = boolean, --- direction = Azimuth, --- altitudeEnabled = boolean, --- altitude = Distance, --- attackQtyLimit = boolean, --- } --- } +-- Escort = { +-- id = 'Escort', +-- params = { +-- groupId = Group.ID, +-- pos = Vec3, +-- lastWptIndexFlag = boolean, +-- lastWptIndex = number, +-- engagementDistMax = Distance, +-- targetTypes = array of AttributeName, +-- } +-- } - local DCSTask - DCSTask = { id = 'AttackGroup', - params = { groupId = AttackGroup:GetID(), - expend = AI.Task.WeaponExpend.TWO, - }, - }, + local LastWaypointIndexFlag = nil + if LastWaypointIndex then + LastWaypointIndexFlag = true + end + local DCSTask + DCSTask = { id = 'Follow', + params = { + groupId = FollowGroup:GetID(), + pos = PointVec3, + lastWptIndexFlag = LastWaypointIndexFlag, + lastWptIndex = LastWaypointIndex, + engagementDistMax = EngagementDistance, + targetTypes = TargetTypes, + }, + }, + self:T3( { DCSTask } ) return DCSTask end ---- Fires at a VEC2 point. + +-- GROUND TASKS + +--- (GROUND) Fire at a VEC2 point until ammunition is finished. -- @param #GROUP self -- @param DCSTypes#Vec2 The point to fire at. -- @param DCSTypes#Distance Radius The radius of the zone to deploy the fire at. @@ -1078,25 +1372,406 @@ end function GROUP:TaskFireAtPoint( PointVec2, Radius ) self:F2( { self.GroupName, PointVec2, Radius } ) --- FireAtPoint = { --- id = 'FireAtPoint', --- params = { --- point = Vec2, --- radius = Distance, --- } --- } - - local DCSTask - DCSTask = { id = 'FireAtPoint', - params = { point = PointVec2, - radius = Radius, - } - } - + -- FireAtPoint = { + -- id = 'FireAtPoint', + -- params = { + -- point = Vec2, + -- radius = Distance, + -- } + -- } + + local DCSTask + DCSTask = { id = 'FireAtPoint', + params = { + point = PointVec2, + radius = Radius, + } + } + self:T3( { DCSTask } ) return DCSTask end +--- (GROUND) Hold ground group from moving. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskHold() + self:F2( { self.GroupName } ) + +-- Hold = { +-- id = 'Hold', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'Hold', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +-- TASKS FOR AIRBORNE AND GROUND UNITS/GROUPS + +--- (AIR + GROUND) The task makes the group/unit a FAC and orders the FAC to control the target (enemy ground group) destruction. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup Target GROUP. +-- @param #number WeaponType Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.Designation Designation (optional) Designation type. +-- @param #boolean Datalink (optional) Allows to use datalink to send the target information to attack aircraft. Enabled by default. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskFAC_AttackGroup( AttackGroup, WeaponType, Designation, Datalink ) + self:F2( { self.GroupName, AttackGroup, WeaponType, Designation, Datalink } ) + +-- FAC_AttackGroup = { +-- id = 'FAC_AttackGroup', +-- params = { +-- groupId = Group.ID, +-- weaponType = number, +-- designation = enum AI.Task.Designation, +-- datalink = boolean +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC_AttackGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + designation = Designation, + datalink = Datalink, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +-- EN-ROUTE TASKS FOR AIRBORNE GROUPS + +--- (AIR) Engaging targets of defined types. +-- @param #GROUP self +-- @param DCSTypes#Distance Distance Maximal distance from the target to a route leg. If the target is on a greater distance it will be ignored. +-- @param #list<#DCSTypes#AttributeName> TargetTypes Array of target categories allowed to engage. +-- @param #number Priority All enroute tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageTargets( Distance, TargetTypes, Priority ) + self:F2( { self.GroupName, Distance, TargetTypes, Priority } ) + +-- EngageTargets ={ +-- id = 'EngageTargets', +-- params = { +-- maxDist = Distance, +-- targetTypes = array of AttributeName, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'EngageTargets', + params = { + maxDist = Distance, + targetTypes = TargetTypes, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Engaging a targets of defined types at circle-shaped zone. +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the zone. +-- @param DCSTypes#Distance Radius Radius of the zone. +-- @param #list<#DCSTypes#AttributeName> TargetTypes Array of target categories allowed to engage. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageTargets( PointVec2, Radius, TargetTypes, Priority ) + self:F2( { self.GroupName, PointVec2, Radius, TargetTypes, Priority } ) + +-- EngageTargetsInZone = { +-- id = 'EngageTargetsInZone', +-- params = { +-- point = Vec2, +-- zoneRadius = Distance, +-- targetTypes = array of AttributeName, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'EngageTargetsInZone', + params = { + point = PointVec2, + zoneRadius = Radius, + targetTypes = TargetTypes, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- (AIR) Engaging a group. The task does not assign the target group to the unit/group to attack now; it just allows the unit/group to engage the target group as well as other assigned targets. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param DCSTypes#Distance Altitude (optional) Desired attack start altitude. Group/aircraft will make its attacks from the altitude. If the altitude is too low or too high to use weapon aircraft/group will choose closest altitude to the desired attack start altitude. If the desired altitude is defined group/aircraft will not attack from safe altitude. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageGroup( AttackGroup, Priority, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit ) + self:F2( { self.GroupName, AttackGroup, Priority, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit } ) + + -- EngageGroup = { + -- id = 'EngageGroup ', + -- params = { + -- groupId = Group.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend, + -- attackQty = number, + -- directionEnabled = boolean, + -- direction = Azimuth, + -- altitudeEnabled = boolean, + -- altitude = Distance, + -- attackQtyLimit = boolean, + -- priority = number, + -- } + -- } + + local DirectionEnabled = nil + if Direction then + DirectionEnabled = true + end + + local AltitudeEnabled = nil + if Altitude then + AltitudeEnabled = true + end + + local DCSTask + DCSTask = { id = 'EngageGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + directionEnabled = DirectionEnabled, + direction = Direction, + altitudeEnabled = AltitudeEnabled, + altitude = Altitude, + attackQtyLimit = AttackQtyLimit, + priority = Priority, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Attack the Unit. +-- @param #GROUP self +-- @param Unit#UNIT AttackUnit The UNIT. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageUnit( AttackUnit, Priority, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack ) + self:F2( { self.GroupName, AttackUnit, Priority, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack } ) + + -- EngageUnit = { + -- id = 'EngageUnit', + -- params = { + -- unitId = Unit.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend + -- attackQty = number, + -- direction = Azimuth, + -- attackQtyLimit = boolean, + -- groupAttack = boolean, + -- priority = number, + -- } + -- } + + local DCSTask + DCSTask = { id = 'EngageUnit', + params = { + unitId = AttackUnit:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + attackQtyLimit = AttackQtyLimit, + groupAttack = GroupAttack, + priority = Priority, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Aircraft will act as an AWACS for friendly units (will provide them with information about contacts). No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskAWACS( ) + self:F2( { self.GroupName } ) + +-- AWACS = { +-- id = 'AWACS', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'AWACS', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Aircraft will act as a tanker for friendly units. No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskTanker( ) + self:F2( { self.GroupName } ) + +-- Tanker = { +-- id = 'Tanker', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'Tanker', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +-- En-route tasks for ground units/groups + +--- (GROUND) Ground unit (EW-radar) will act as an EWR for friendly units (will provide them with information about contacts). No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEWR( ) + self:F2( { self.GroupName } ) + +-- EWR = { +-- id = 'EWR', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'EWR', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +-- En-route tasks for airborne and ground units/groups + +--- (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose the target (enemy ground group) as well as other assigned targets. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup Target GROUP. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.Designation Designation (optional) Designation type. +-- @param #boolean Datalink (optional) Allows to use datalink to send the target information to attack aircraft. Enabled by default. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskFAC_EngageGroup( AttackGroup, Priority, WeaponType, Designation, Datalink ) + self:F2( { self.GroupName, AttackGroup, WeaponType, Priority, Designation, Datalink } ) + +-- FAC_EngageGroup = { +-- id = 'FAC_EngageGroup', +-- params = { +-- groupId = Group.ID, +-- weaponType = number, +-- designation = enum AI.Task.Designation, +-- datalink = boolean, +-- priority = number, +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC_EngageGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + designation = Designation, + datalink = Datalink, + priority = Priority, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose a targets (enemy ground group) around as well as other assigned targets. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param DCSTypes#Distance Radius The maximal distance from the FAC to a target. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskFAC( Radius, Priority ) + self:F2( { self.GroupName, Radius, Priority } ) + +-- FAC = { +-- id = 'FAC', +-- params = { +-- radius = Distance, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC', + params = { + radius = Radius, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + --- Move the group to a Vec2 Point, wait for a defined duration and embark a group. @@ -1106,22 +1781,22 @@ end -- @param #GROUP EmbarkingGroup The group to be embarked. -- @return DCSTask#Task The DCS task structure function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) - self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) + self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) - local DCSTask - DCSTask = { id = 'Embarking', - params = { x = Point.x, - y = Point.y, - duration = Duration, - groupsForEmbarking = { EmbarkingGroup.GroupID }, - durationFlag = true, - distributionFlag = false, - distribution = {}, - } - } - - self:T3( { DCSTask } ) - return DCSTask + local DCSTask + DCSTask = { id = 'Embarking', + params = { x = Point.x, + y = Point.y, + duration = Duration, + groupsForEmbarking = { EmbarkingGroup.GroupID }, + durationFlag = true, + distributionFlag = false, + distribution = {}, + } + } + + self:T3( { DCSTask } ) + return DCSTask end --- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. @@ -1130,30 +1805,30 @@ end -- @param #number Radius The radius of the embarking zone around the Point. -- @return DCSTask#Task The DCS task structure. function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) - self:F2( { self.GroupName, Point, Radius } ) + self:F2( { self.GroupName, Point, Radius } ) local DCSTask --DCSTask#Task - DCSTask = { id = 'EmbarkToTransport', - params = { x = Point.x, - y = Point.y, - zoneRadius = Radius, - } - } + DCSTask = { id = 'EmbarkToTransport', + params = { x = Point.x, + y = Point.y, + zoneRadius = Radius, + } + } self:T3( { DCSTask } ) - return DCSTask + return DCSTask end --- Return a Misson task from a mission template. -- @param #GROUP self -- @param #table TaskMission A table containing the mission task. --- @return DCSTask#Task +-- @return DCSTask#Task function GROUP:TaskMission( TaskMission ) - self:F2( Points ) - + self:F2( Points ) + local DCSTask DCSTask = { id = 'Mission', params = { TaskMission, }, } - + self:T3( { DCSTask } ) return DCSTask end @@ -1161,13 +1836,13 @@ end --- Return a Misson task to follow a given route defined by Points. -- @param #GROUP self -- @param #table Points A table of route points. --- @return DCSTask#Task +-- @return DCSTask#Task function GROUP:TaskRoute( Points ) self:F2( Points ) - + local DCSTask DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } - + self:T3( { DCSTask } ) return DCSTask end @@ -1181,22 +1856,22 @@ function GROUP:TaskRouteToVec2( Point, Speed ) self:F2( { Point, Speed } ) local GroupPoint = self:GetUnit( 1 ):GetPointVec2() - + local PointFrom = {} PointFrom.x = GroupPoint.x PointFrom.y = GroupPoint.y PointFrom.type = "Turning Point" PointFrom.action = "Turning Point" - PointFrom.speed = Speed + PointFrom.speed = Speed PointFrom.speed_locked = true PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local PointTo = {} PointTo.x = Point.x @@ -1206,18 +1881,18 @@ function GROUP:TaskRouteToVec2( Point, Speed ) PointTo.speed = Speed PointTo.speed_locked = true PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local Points = { PointFrom, PointTo } - + self:T3( Points ) - + self:Route( Points ) return self @@ -1232,7 +1907,7 @@ function GROUP:TaskRouteToVec3( Point, Speed ) self:F2( { Point, Speed } ) local GroupPoint = self:GetUnit( 1 ):GetPointVec3() - + local PointFrom = {} PointFrom.x = GroupPoint.x PointFrom.y = GroupPoint.z @@ -1240,39 +1915,39 @@ function GROUP:TaskRouteToVec3( Point, Speed ) PointFrom.alt_type = "BARO" PointFrom.type = "Turning Point" PointFrom.action = "Turning Point" - PointFrom.speed = Speed + PointFrom.speed = Speed PointFrom.speed_locked = true PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local PointTo = {} PointTo.x = Point.x PointTo.y = Point.z - PointTo.alt = Point.y + PointTo.alt = Point.y PointTo.alt_type = "BARO" PointTo.type = "Turning Point" PointTo.action = "Fly Over Point" PointTo.speed = Speed PointTo.speed_locked = true PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local Points = { PointFrom, PointTo } - + self:T3( Points ) - + self:Route( Points ) return self @@ -1283,22 +1958,22 @@ end --- Make the group to follow a given route. -- @param #GROUP self -- @param #table GoPoints A table of Route Points. --- @return #GROUP self +-- @return #GROUP self function GROUP:Route( GoPoints ) - self:F2( GoPoints ) + self:F2( GoPoints ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local Points = routines.utils.deepCopy( GoPoints ) - local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } - local Controller = self:_GetController() + local Points = routines.utils.deepCopy( GoPoints ) + local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } + local Controller = self:_GetController() --Controller.setTask( Controller, MissionTask ) - --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) + --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) - return self + return self end - + return nil end @@ -1314,56 +1989,56 @@ end -- @param #number Speed The speed. -- @param Base#FORMATION Formation The formation string. function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) - self:F2( Zone ) + self:F2( Zone ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - - local GroupPoint = self:GetPointVec2() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.y - PointFrom.type = "Turning Point" - PointFrom.action = "Cone" - PointFrom.speed = 20 / 1.6 - - - local PointTo = {} - local ZonePoint - - if Randomize then - ZonePoint = Zone:GetRandomPointVec2() - else - ZonePoint = Zone:GetPointVec2() - end - - PointTo.x = ZonePoint.x - PointTo.y = ZonePoint.y - PointTo.type = "Turning Point" - - if Formation then - PointTo.action = Formation - else - PointTo.action = "Cone" - end - - if Speed then - PointTo.speed = Speed - else - PointTo.speed = 20 / 1.6 - end - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self + + local GroupPoint = self:GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Cone" + PointFrom.speed = 20 / 1.6 + + + local PointTo = {} + local ZonePoint + + if Randomize then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + PointTo.x = ZonePoint.x + PointTo.y = ZonePoint.y + PointTo.type = "Turning Point" + + if Formation then + PointTo.action = Formation + else + PointTo.action = "Cone" + end + + if Speed then + PointTo.speed = Speed + else + PointTo.speed = 20 / 1.6 + end + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self end - + return nil end @@ -1410,48 +2085,48 @@ end -- @param #number Begin The route point from where the copy will start. The base route point is 0. -- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. -- @param #boolean Randomize Randomization of the route, when true. --- @param #number Radius When randomization is on, the randomization is within the radius. +-- @param #number Radius When randomization is on, the randomization is within the radius. function GROUP:CopyRoute( Begin, End, Randomize, Radius ) - self:F2( { Begin, End } ) + self:F2( { Begin, End } ) - local Points = {} - - -- Could be a Spawned Group - local GroupName = string.match( self:GetName(), ".*#" ) - if GroupName then - GroupName = GroupName:sub( 1, -2 ) - else - GroupName = self:GetName() - end - - self:T3( { GroupName } ) - - local Template = _DATABASE.Templates.Groups[GroupName].Template - - if Template then - if not Begin then - Begin = 0 - end - if not End then - End = 0 - end - - for TPointID = Begin + 1, #Template.route.points - End do - if Template.route.points[TPointID] then - Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) - if Randomize then - if not Radius then - Radius = 500 - end - Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) - Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) - end - end - end - return Points - end - - return nil + local Points = {} + + -- Could be a Spawned Group + local GroupName = string.match( self:GetName(), ".*#" ) + if GroupName then + GroupName = GroupName:sub( 1, -2 ) + else + GroupName = self:GetName() + end + + self:T3( { GroupName } ) + + local Template = _DATABASE.Templates.Groups[GroupName].Template + + if Template then + if not Begin then + Begin = 0 + end + if not End then + End = 0 + end + + for TPointID = Begin + 1, #Template.route.points - End do + if Template.route.points[TPointID] then + Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) + if Randomize then + if not Radius then + Radius = 500 + end + Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) + Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) + end + end + end + return Points + end + + return nil end @@ -1462,28 +2137,28 @@ function GROUP:GetDetectedTargets() if DCSGroup then return self:_GetController():getDetectedTargets() end - + return nil end function GROUP:IsTargetDetected( DCSObject ) self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then - + local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity - = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, - Controller.Detection.VISUAL, - Controller.Detection.OPTIC, - Controller.Detection.RADAR, - Controller.Detection.IRST, - Controller.Detection.RWR, - Controller.Detection.DLINK - ) + = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, + Controller.Detection.VISUAL, + Controller.Detection.OPTIC, + Controller.Detection.RADAR, + Controller.Detection.IRST, + Controller.Detection.RWR, + Controller.Detection.DLINK + ) return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity end - + return nil end @@ -1494,16 +2169,16 @@ end -- @return #boolean function GROUP:OptionROEHoldFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -1511,12 +2186,12 @@ end -- @param Group#GROUP self -- @return Group#GROUP self function GROUP:OptionROEHoldFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) elseif self:IsGround() then @@ -1524,10 +2199,10 @@ function GROUP:OptionROEHoldFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) end - + return self end - + return nil end @@ -1536,16 +2211,16 @@ end -- @return #boolean function GROUP:OptionROEReturnFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -1553,12 +2228,12 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEReturnFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) elseif self:IsGround() then @@ -1566,10 +2241,10 @@ function GROUP:OptionROEReturnFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) end - + return self end - + return nil end @@ -1584,10 +2259,10 @@ function GROUP:OptionROEOpenFirePossible() if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -1595,12 +2270,12 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEOpenFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) elseif self:IsGround() then @@ -1608,10 +2283,10 @@ function GROUP:OptionROEOpenFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) end - + return self end - + return nil end @@ -1620,16 +2295,16 @@ end -- @return #boolean function GROUP:OptionROEWeaponFreePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -1637,19 +2312,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEWeaponFree() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) end - + return self end - + return nil end @@ -1658,16 +2333,16 @@ end -- @return #boolean function GROUP:OptionROTNoReactionPossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -1676,19 +2351,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTNoReaction() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) end - + return self end - + return nil end @@ -1703,10 +2378,10 @@ function GROUP:OptionROTPassiveDefensePossible() if self:IsAir() then return true end - + return false end - + return nil end @@ -1714,19 +2389,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTPassiveDefense() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) end - + return self end - + return nil end @@ -1735,16 +2410,16 @@ end -- @return #boolean function GROUP:OptionROTEvadeFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -1753,19 +2428,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTEvadeFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) end - + return self end - + return nil end @@ -1774,16 +2449,16 @@ end -- @return #boolean function GROUP:OptionROTVerticalPossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -1792,19 +2467,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTVertical() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) end - + return self end - + return nil end @@ -1817,12 +2492,12 @@ end -- @return Message#MESSAGE function GROUP:Message( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then return MESSAGE:New( Message, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) end - + return nil end @@ -1833,12 +2508,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToAll( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToAll() end - + return nil end @@ -1849,12 +2524,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToRed( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToRed() end - + return nil end @@ -1865,12 +2540,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToBlue( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToBlue() end - + return nil end @@ -1882,11 +2557,11 @@ end -- @param Client#CLIENT Client The client object receiving the message. function GROUP:MessageToClient( Message, Duration, Client ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToClient( Client ) end - + return nil end diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index 9b72a9419..a68a325e3 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160527_1422' ) +env.info( 'Moose Generation Timestamp: 20160602_1446' ) local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) @@ -4071,35 +4071,35 @@ function MENU_COALITION_COMMAND:Remove() self.ParentMenu.Menus[self.MenuPath] = nil return nil end ---- GROUP class. --- +--- GROUP class. +-- -- @{GROUP} class -- ============== -- The @{GROUP} class is a wrapper class to handle the DCS Group objects: --- +-- -- * Support all DCS Group APIs. -- * Enhance with Group specific APIs not in the DCS Group API set. -- * Handle local Group Controller. -- * Manage the "state" of the DCS Group. --- --- +-- +-- -- GROUP reference methods --- ======================= +-- ======================= -- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. -- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). --- +-- -- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference -- using the DCS Group or the DCS GroupName. --- --- Another thing to know is that GROUP objects do not "contain" the DCS Group object. +-- +-- Another thing to know is that GROUP objects do not "contain" the DCS Group object. -- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. -- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. --- +-- -- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: --- +-- -- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. -- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. --- +-- -- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). -- @module Group -- @author FlightControl @@ -4115,14 +4115,14 @@ Include.File( "Unit" ) -- @field DCSGroup#Group DCSGroup The DCS group class. -- @field #string GroupName The name of the group. GROUP = { - ClassName = "GROUP", - GroupName = "", - GroupID = 0, - Controller = nil, - DCSGroup = nil, - WayPointFunctions = {}, - } - + ClassName = "GROUP", + GroupName = "", + GroupID = 0, + Controller = nil, + DCSGroup = nil, + WayPointFunctions = {}, +} + --- A DCSGroup -- @type DCSGroup -- @field id_ The ID of the group in DCS @@ -4132,10 +4132,10 @@ GROUP = { -- @param DCSGroup#Group GroupName The DCS Group name -- @return #GROUP self function GROUP:Register( GroupName ) - local self = BASE:Inherit( self, BASE:New() ) - self:F2( GroupName ) - self.GroupName = GroupName - return self + local self = BASE:Inherit( self, BASE:New() ) + self:F2( GroupName ) + self.GroupName = GroupName + return self end -- Reference methods. @@ -4168,11 +4168,11 @@ end -- @return DCSGroup#Group The DCS Group. function GROUP:GetDCSGroup() local DCSGroup = Group.getByName( self.GroupName ) - + if DCSGroup then return DCSGroup end - + return nil end @@ -4183,27 +4183,27 @@ end -- @return #boolean true if the DCS Group is alive. function GROUP:IsAlive() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupIsAlive = DCSGroup:isExist() self:T3( GroupIsAlive ) return GroupIsAlive end - + return nil end ---- Destroys the DCS Group and all of its DCS Units. +--- Destroys the DCS Group and all of its DCS Units. -- Note that this destroy method also raises a destroy event at run-time. -- So all event listeners will catch the destroy event of this DCS Group. -- @param #GROUP self function GROUP:Destroy() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then for Index, UnitData in pairs( DCSGroup:getUnits() ) do self:CreateEventCrash( timer.getTime(), UnitData ) @@ -4211,11 +4211,11 @@ function GROUP:Destroy() DCSGroup:destroy() DCSGroup = nil end - + return nil end ---- Returns category of the DCS Group. +--- Returns category of the DCS Group. -- @param #GROUP self -- @return DCSGroup#Group.Category The category ID function GROUP:GetCategory() @@ -4227,7 +4227,7 @@ function GROUP:GetCategory() self:T3( GroupCategory ) return GroupCategory end - + return nil end @@ -4243,14 +4243,14 @@ function GROUP:GetCategoryName() [Group.Category.AIRPLANE] = "Airplane", [Group.Category.HELICOPTER] = "Helicopter", [Group.Category.GROUND] = "Ground Unit", - [Group.Category.SHIP] = "Ship", + [Group.Category.SHIP] = "Ship", } local GroupCategory = DCSGroup:getCategory() self:T3( GroupCategory ) - + return CategoryNames[GroupCategory] end - + return nil end @@ -4267,14 +4267,14 @@ function GROUP:GetCoalition() self:T3( GroupCoalition ) return GroupCoalition end - + return nil end --- Returns the country of the DCS Group. -- @param #GROUP self -- @return DCScountry#country.id The country identifier. --- @return #nil The DCS Group is not existing or alive. +-- @return #nil The DCS Group is not existing or alive. function GROUP:GetCountry() self:F2( self.GroupName ) @@ -4284,7 +4284,7 @@ function GROUP:GetCountry() self:T3( GroupCountry ) return GroupCountry end - + return nil end @@ -4295,13 +4295,13 @@ function GROUP:GetName() self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupName = DCSGroup:getName() self:T3( GroupName ) return GroupName end - + return nil end @@ -4310,19 +4310,19 @@ end -- @return #number The identifier of the DCS Group. function GROUP:GetID() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupID = DCSGroup:getID() self:T3( GroupID ) return GroupID end - + return nil end ---- Returns the UNIT wrapper class with number UnitNumber. +--- Returns the UNIT wrapper class with number UnitNumber. -- If the underlying DCS Unit does not exist, the method will return nil. . -- @param #GROUP self -- @param #number UnitNumber The number of the UNIT wrapper class to be returned. @@ -4331,7 +4331,7 @@ function GROUP:GetUnit( UnitNumber ) self:F2( { self.GroupName, UnitNumber } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) self:T3( UnitFound.UnitName ) @@ -4342,7 +4342,7 @@ function GROUP:GetUnit( UnitNumber ) return nil end ---- Returns the DCS Unit with number UnitNumber. +--- Returns the DCS Unit with number UnitNumber. -- If the underlying DCS Unit does not exist, the method will return nil. . -- @param #GROUP self -- @param #number UnitNumber The number of the DCS Unit to be returned. @@ -4351,7 +4351,7 @@ function GROUP:GetDCSUnit( UnitNumber ) self:F2( { self.GroupName, UnitNumber } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) self:T3( DCSUnitFound ) @@ -4361,14 +4361,14 @@ function GROUP:GetDCSUnit( UnitNumber ) return nil end ---- Returns current size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. +--- Returns current size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. -- @param #GROUP self -- @return #number The DCS Group size. function GROUP:GetSize() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupSize = DCSGroup:getSize() self:T3( GroupSize ) @@ -4378,15 +4378,15 @@ function GROUP:GetSize() return nil end ---- ---- Returns the initial size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. +--- +--- Returns the initial size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. -- @param #GROUP self -- @return #number The DCS Group initial size. function GROUP:GetInitialSize() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupInitialSize = DCSGroup:getInitialSize() self:T3( GroupInitialSize ) @@ -4402,7 +4402,7 @@ end function GROUP:GetUnits() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnits = DCSGroup:getUnits() local Units = {} @@ -4423,7 +4423,7 @@ end function GROUP:GetDCSUnits() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnits = DCSGroup:getUnits() self:T3( DCSUnits ) @@ -4439,7 +4439,7 @@ end function GROUP:_GetController() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupController = DCSGroup:getController() self:T3( GroupController ) @@ -4459,7 +4459,7 @@ end function GROUP:WayPointInitialize() self.WayPoints = self:GetTaskRoute() - + return self end @@ -4472,7 +4472,7 @@ end -- @return #GROUP function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) - + table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) return self @@ -4482,7 +4482,7 @@ end function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) local DCSTask - + local DCSScript = {} DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " @@ -4490,16 +4490,16 @@ function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionAr DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" else DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" - end - - DCSTask = self:TaskWrappedAction( + end + + DCSTask = self:TaskWrappedAction( self:CommandDoScript( table.concat( DCSScript ) ), WayPointIndex ) - + self:T3( DCSTask ) - + return DCSTask end @@ -4518,14 +4518,14 @@ function GROUP:WayPointExecute( WayPoint, WaitTime ) if not WayPoint then WayPoint = 1 end - + -- When starting the mission from a certain point, the TaskPoints need to be deleted before the given WayPoint. for TaskPointID = 1, WayPoint - 1 do table.remove( self.WayPoints, 1 ) end self:T3( self.WayPoints ) - + self:SetTask( self:TaskRoute( self.WayPoints ), WaitTime ) return self @@ -4535,9 +4535,9 @@ end --- Activates a GROUP. -- @param #GROUP self function GROUP:Activate() - self:F2( { self.GroupName } ) - trigger.action.activateGroup( self:GetDCSGroup() ) - return self:GetDCSGroup() + self:F2( { self.GroupName } ) + trigger.action.activateGroup( self:GetDCSGroup() ) + return self:GetDCSGroup() end @@ -4548,13 +4548,13 @@ function GROUP:GetTypeName() self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupTypeName = DCSGroup:getUnit(1):getTypeName() self:T3( GroupTypeName ) return( GroupTypeName ) end - + return nil end @@ -4563,33 +4563,33 @@ end -- @return #string The CallSign of the first DCS Unit of the DCS Group. function GROUP:GetCallsign() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCallSign = DCSGroup:getUnit(1):getCallsign() self:T3( GroupCallSign ) return GroupCallSign end - + return nil end --- Returns the current point (Vec2 vector) of the first DCS Unit in the DCS Group. -- @return DCSTypes#Vec2 Current Vec2 point of the first DCS Unit of the DCS Group. function GROUP:GetPointVec2() - self:F2( self.GroupName ) - - local GroupPointVec2 = self:GetUnit(1):GetPointVec2() - self:T3( GroupPointVec2 ) - return GroupPointVec2 + self:F2( self.GroupName ) + + local GroupPointVec2 = self:GetUnit(1):GetPointVec2() + self:T3( GroupPointVec2 ) + return GroupPointVec2 end --- Returns the current point (Vec3 vector) of the first DCS Unit in the DCS Group. -- @return DCSTypes#Vec3 Current Vec3 point of the first DCS Unit of the DCS Group. function GROUP:GetPointVec3() - self:F2( self.GroupName ) - + self:F2( self.GroupName ) + local GroupPointVec3 = self:GetUnit(1):GetPointVec3() self:T3( GroupPointVec3 ) return GroupPointVec3 @@ -4604,16 +4604,16 @@ end -- @param #GROUP self -- @return #boolean Air category evaluation result. function GROUP:IsAir() - self:F2( self.GroupName ) + self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER - self:T3( IsAirResult ) - return IsAirResult + local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER + self:T3( IsAirResult ) + return IsAirResult end - + return nil end @@ -4622,15 +4622,15 @@ end -- @return #boolean true if DCS Group contains Helicopters. function GROUP:IsHelicopter() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.HELICOPTER end - + return nil end @@ -4639,15 +4639,15 @@ end -- @return #boolean true if DCS Group contains AirPlanes. function GROUP:IsAirPlane() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.AIRPLANE end - + return nil end @@ -4656,15 +4656,15 @@ end -- @return #boolean true if DCS Group contains Ground troops. function GROUP:IsGround() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.GROUND end - + return nil end @@ -4673,15 +4673,15 @@ end -- @return #boolean true if DCS Group contains Ships. function GROUP:IsShip() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.SHIP end - + return nil end @@ -4690,23 +4690,23 @@ end -- @param #GROUP self -- @return #boolean All units on the ground result. function GROUP:AllOnGround() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local AllOnGroundResult = true - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - if UnitData:inAir() then - AllOnGroundResult = false - end - end - - self:T3( AllOnGroundResult ) - return AllOnGroundResult + local AllOnGroundResult = true + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + if UnitData:inAir() then + AllOnGroundResult = false + end + end + + self:T3( AllOnGroundResult ) + return AllOnGroundResult end - + return nil end @@ -4715,26 +4715,26 @@ end -- @param #GROUP self -- @return #number Maximum velocity found. function GROUP:GetMaxVelocity() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local MaxVelocity = 0 - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - - local Velocity = UnitData:getVelocity() - local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) - - if VelocityTotal < MaxVelocity then - MaxVelocity = VelocityTotal - end - end - - return MaxVelocity + local MaxVelocity = 0 + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + + local Velocity = UnitData:getVelocity() + local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) + + if VelocityTotal < MaxVelocity then + MaxVelocity = VelocityTotal + end + end + + return MaxVelocity end - + return nil end @@ -4743,7 +4743,7 @@ end -- @param #GROUP self -- @return #number Minimum height found. function GROUP:GetMinHeight() - self:F2() + self:F2() end @@ -4752,7 +4752,7 @@ end -- @param #GROUP self -- @return #number Maximum height found. function GROUP:GetMaxHeight() - self:F2() + self:F2() end @@ -4762,16 +4762,16 @@ end -- @param #GROUP self -- @return Group#GROUP self function GROUP:PopCurrentTask() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() Controller:popTask() return self end - + return nil end @@ -4779,27 +4779,27 @@ end -- @param #GROUP self -- @return Group#GROUP self function GROUP:PushTask( DCSTask, WaitTime ) - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() - + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. -- Therefore we schedule the functions to set the mission and options for the Group. -- Controller:pushTask( DCSTask ) - + if WaitTime then --routines.scheduleFunction( Controller.pushTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) SCHEDULER:New( Controller, Controller.pushTask, { DCSTask }, WaitTime ) else Controller:pushTask( DCSTask ) end - + return self end - + return nil end @@ -4810,24 +4810,24 @@ function GROUP:SetTask( DCSTask, WaitTime ) self:F2( { DCSTask } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - + local Controller = self:_GetController() - + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. -- Therefore we schedule the functions to set the mission and options for the Group. -- Controller.setTask( Controller, DCSTask ) - + if not WaitTime then WaitTime = 1 end --routines.scheduleFunction( Controller.setTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) SCHEDULER:New( Controller, Controller.setTask, { DCSTask }, WaitTime ) - + return self end - + return nil end @@ -4835,15 +4835,15 @@ end --- Return a condition section for a controlled task -- @param #GROUP self -- @param DCSTime#Time time --- @param #string userFlag --- @param #boolean userFlagValue +-- @param #string userFlag +-- @param #boolean userFlagValue -- @param #string condition --- @param DCSTime#Time duration --- @param #number lastWayPoint +-- @param DCSTime#Time duration +-- @param #number lastWayPoint -- return DCSTask#Task function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration, lastWayPoint ) - self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) - + self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) + local DCSStopCondition = {} DCSStopCondition.time = time DCSStopCondition.userFlag = userFlag @@ -4851,9 +4851,9 @@ function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration DCSStopCondition.condition = condition DCSStopCondition.duration = duration DCSStopCondition.lastWayPoint = lastWayPoint - + self:T3( { DCSStopCondition } ) - return DCSStopCondition + return DCSStopCondition end --- Return a Controlled Task taking a Task and a TaskCondition @@ -4862,18 +4862,18 @@ end -- @param #DCSStopCondition DCSStopCondition -- @return DCSTask#Task function GROUP:TaskControlled( DCSTask, DCSStopCondition ) - self:F2( { DCSTask, DCSStopCondition } ) + self:F2( { DCSTask, DCSStopCondition } ) local DCSTaskControlled - - DCSTaskControlled = { - id = 'ControlledTask', - params = { - task = DCSTask, - stopCondition = DCSStopCondition - } + + DCSTaskControlled = { + id = 'ControlledTask', + params = { + task = DCSTask, + stopCondition = DCSStopCondition + } } - + self:T3( { DCSTaskControlled } ) return DCSTaskControlled end @@ -4886,19 +4886,19 @@ function GROUP:TaskCombo( DCSTasks ) self:F2( { DCSTasks } ) local DCSTaskCombo - - DCSTaskCombo = { - id = 'ComboTask', - params = { + + DCSTaskCombo = { + id = 'ComboTask', + params = { tasks = DCSTasks - } + } } - + self:T3( { DCSTaskCombo } ) return DCSTaskCombo end ---- Return a WrappedAction Task taking a Command +--- Return a WrappedAction Task taking a Command -- @param #GROUP self -- @param DCSCommand#Command DCSCommand -- @return DCSTask#Task @@ -4906,8 +4906,8 @@ function GROUP:TaskWrappedAction( DCSCommand, Index ) self:F2( { DCSCommand } ) local DCSTaskWrappedAction - - DCSTaskWrappedAction = { + + DCSTaskWrappedAction = { id = "WrappedAction", enabled = true, number = Index, @@ -4927,15 +4927,15 @@ end -- @return #GROUP self function GROUP:SetCommand( DCSCommand ) self:F2( DCSCommand ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() Controller:setCommand( DCSCommand ) return self end - + return nil end @@ -4946,117 +4946,387 @@ end -- @return DCSTask#Task function GROUP:CommandSwitchWayPoint( FromWayPoint, ToWayPoint, Index ) self:F2( { FromWayPoint, ToWayPoint, Index } ) - + local CommandSwitchWayPoint = { - id = 'SwitchWaypoint', - params = { - fromWaypointIndex = FromWayPoint, - goToWaypointIndex = ToWayPoint, + id = 'SwitchWaypoint', + params = { + fromWaypointIndex = FromWayPoint, + goToWaypointIndex = ToWayPoint, }, } - + self:T3( { CommandSwitchWayPoint } ) return CommandSwitchWayPoint end - ---- Orbit at a specified position at a specified alititude during a specified duration with a specified speed. + +-- TASKS FOR AIR GROUPS + + +--- (AIR) Attack a Group. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param DCSTypes#Distance Altitude (optional) Desired attack start altitude. Group/aircraft will make its attacks from the altitude. If the altitude is too low or too high to use weapon aircraft/group will choose closest altitude to the desired attack start altitude. If the desired altitude is defined group/aircraft will not attack from safe altitude. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackGroup( AttackGroup, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit ) + self:F2( { self.GroupName, AttackGroup, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit } ) + + -- AttackGroup = { + -- id = 'AttackGroup', + -- params = { + -- groupId = Group.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend, + -- attackQty = number, + -- directionEnabled = boolean, + -- direction = Azimuth, + -- altitudeEnabled = boolean, + -- altitude = Distance, + -- attackQtyLimit = boolean, + -- } + -- } + + local DirectionEnabled = nil + if Direction then + DirectionEnabled = true + end + + local AltitudeEnabled = nil + if Altitude then + AltitudeEnabled = true + end + + local DCSTask + DCSTask = { id = 'AttackGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + directionEnabled = DirectionEnabled, + direction = Direction, + altitudeEnabled = AltitudeEnabled, + altitude = Altitude, + attackQtyLimit = AttackQtyLimit, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Attack the Unit. +-- @param #GROUP self +-- @param Unit#UNIT AttackUnit The unit. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackUnit( AttackUnit, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack ) + self:F2( { self.GroupName, AttackUnit, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack } ) + + -- AttackUnit = { + -- id = 'AttackUnit', + -- params = { + -- unitId = Unit.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend + -- attackQty = number, + -- direction = Azimuth, + -- attackQtyLimit = boolean, + -- groupAttack = boolean, + -- } + -- } + + local DCSTask + DCSTask = { id = 'AttackUnit', + params = { + unitId = AttackUnit:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + attackQtyLimit = AttackQtyLimit, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Delivering weapon at the point on the ground. +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the point to deliver weapon at. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) Desired quantity of passes. The parameter is not the same in AttackGroup and AttackUnit tasks. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskBombing( PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- Bombing = { +-- id = 'Bombing', +-- params = { +-- point = Vec2, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'Bombing', + params = { + point = PointVec2, + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + +--- (AIR) Orbit at a specified position at a specified alititude during a specified duration with a specified speed. -- @param #GROUP self -- @param DCSTypes#Vec2 Point The point to hold the position. -- @param #number Altitude The altitude to hold the position. -- @param #number Speed The speed flying when holding the position. -- @return #GROUP self function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed ) - self:F2( { self.GroupName, Point, Altitude, Speed } ) + self:F2( { self.GroupName, Point, Altitude, Speed } ) + + -- pattern = enum AI.Task.OribtPattern, + -- point = Vec2, + -- point2 = Vec2, + -- speed = Distance, + -- altitude = Distance --- pattern = enum AI.Task.OribtPattern, --- point = Vec2, --- point2 = Vec2, --- speed = Distance, --- altitude = Distance - local LandHeight = land.getHeight( Point ) - + self:T3( { LandHeight } ) - local DCSTask = { id = 'Orbit', - params = { pattern = AI.Task.OrbitPattern.CIRCLE, - point = Point, - speed = Speed, - altitude = Altitude + LandHeight - } - } + local DCSTask = { id = 'Orbit', + params = { pattern = AI.Task.OrbitPattern.CIRCLE, + point = Point, + speed = Speed, + altitude = Altitude + LandHeight + } + } + + + -- local AITask = { id = 'ControlledTask', + -- params = { task = { id = 'Orbit', + -- params = { pattern = AI.Task.OrbitPattern.CIRCLE, + -- point = Point, + -- speed = Speed, + -- altitude = Altitude + LandHeight + -- } + -- }, + -- stopCondition = { duration = Duration + -- } + -- } + -- } + -- ) - --- local AITask = { id = 'ControlledTask', --- params = { task = { id = 'Orbit', --- params = { pattern = AI.Task.OrbitPattern.CIRCLE, --- point = Point, --- speed = Speed, --- altitude = Altitude + LandHeight --- } --- }, --- stopCondition = { duration = Duration --- } --- } --- } --- ) - return DCSTask end ---- Orbit at the current position of the first unit of the group at a specified alititude +--- (AIR) Orbit at the current position of the first unit of the group at a specified alititude -- @param #GROUP self -- @param #number Altitude The altitude to hold the position. -- @param #number Speed The speed flying when holding the position. -- @return #GROUP self function GROUP:TaskOrbitCircle( Altitude, Speed ) - self:F2( { self.GroupName, Altitude, Speed } ) + self:F2( { self.GroupName, Altitude, Speed } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupPoint = self:GetPointVec2() return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) end - + return nil end ---- Hold position at the current position of the first unit of the group. +--- (AIR) Hold position at the current position of the first unit of the group. -- @param #GROUP self -- @param #number Duration The maximum duration in seconds to hold the position. -- @return #GROUP self function GROUP:TaskHoldPosition() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) return self:TaskOrbitCircle( 30, 10 ) end ---- Land the group at a Vec2Point. + + +--- (AIR) Attacking the map object (building, structure, e.t.c). +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the point the map object is closest to. The distance between the point and the map object must not be greater than 2000 meters. Object id is not used here because Mission Editor doesn't support map object identificators. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackMapObject( PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- AttackMapObject = { +-- id = 'AttackMapObject', +-- params = { +-- point = Vec2, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'AttackMapObject', + params = { + point = PointVec2, + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Delivering weapon on the runway. +-- @param #GROUP self +-- @param Airbase#AIRBASE Airbase Airbase to attack. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskBombingRunway( Airbase, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, Airbase, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- BombingRunway = { +-- id = 'BombingRunway', +-- params = { +-- runwayId = AirdromeId, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'BombingRunway', + params = { + point = Airbase:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Refueling from the nearest tanker. No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskRefueling() + self:F2( { self.GroupName } ) + +-- Refueling = { +-- id = 'Refueling', +-- params = {} +-- } + + local DCSTask + DCSTask = { id = 'Refueling', + params = { + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR HELICOPTER) Landing at the ground. For helicopters only. -- @param #GROUP self -- @param DCSTypes#Vec2 Point The point where to land. -- @param #number Duration The duration in seconds to stay on the ground. -- @return #GROUP self function GROUP:TaskLandAtVec2( Point, Duration ) - self:F2( { self.GroupName, Point, Duration } ) + self:F2( { self.GroupName, Point, Duration } ) +-- Land = { +-- id= 'Land', +-- params = { +-- point = Vec2, +-- durationFlag = boolean, +-- duration = Time +-- } +-- } + local DCSTask - - if Duration and Duration > 0 then - DCSTask = { id = 'Land', params = { point = Point, durationFlag = true, duration = Duration } } - else - DCSTask = { id = 'Land', params = { point = Point, durationFlag = false } } - end + if Duration and Duration > 0 then + DCSTask = { id = 'Land', + params = { + point = Point, + durationFlag = true, + duration = Duration, + }, + } + else + DCSTask = { id = 'Land', + params = { + point = Point, + durationFlag = false, + }, + } + end self:T3( DCSTask ) - return DCSTask + return DCSTask end ---- Land the group at a @{Zone#ZONE). +--- (AIR) Land the group at a @{Zone#ZONE). -- @param #GROUP self -- @param Zone#ZONE Zone The zone where to land. -- @param #number Duration The duration in seconds to stay on the ground. @@ -5070,80 +5340,104 @@ function GROUP:TaskLandAtZone( Zone, Duration, RandomPoint ) else Point = Zone:GetPointVec2() end - + local DCSTask = self:TaskLandAtVec2( Point, Duration ) self:T3( DCSTask ) return DCSTask end - ---- Attack the Unit. +--- (AIR) Following another airborne group. +-- The unit / group will follow lead unit of another group, wingmens of both groups will continue following their leaders. +-- If another group is on land the unit / group will orbit around. -- @param #GROUP self --- @param Unit#UNIT The unit. +-- @param Group#GROUP FollowGroup The group to be followed. +-- @param DCSTypes#Vec3 PointVec3 Position of the unit / lead unit of the group relative lead unit of another group in frame reference oriented by course of lead unit of another group. If another group is on land the unit / group will orbit around. +-- @param #number LastWaypointIndex Detach waypoint of another group. Once reached the unit / group Follow task is finished. -- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackUnit( AttackUnit ) - self:F2( { self.GroupName, AttackUnit } ) +function GROUP:TaskFollow( FollowGroup, PointVec3, LastWaypointIndex ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex } ) --- AttackUnit = { --- id = 'AttackUnit', --- params = { --- unitId = Unit.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend --- attackQty = number, --- direction = Azimuth, --- attackQtyLimit = boolean, --- groupAttack = boolean, --- } +-- Follow = { +-- id = 'Follow', +-- params = { +-- groupId = Group.ID, +-- pos = Vec3, +-- lastWptIndexFlag = boolean, +-- lastWptIndex = number +-- } -- } + + local LastWaypointIndexFlag = nil + if LastWaypointIndex then + LastWaypointIndexFlag = true + end - local DCSTask - DCSTask = { id = 'AttackUnit', - params = { unitId = AttackUnit:GetID(), - expend = AI.Task.WeaponExpend.TWO, - groupAttack = true, - }, - }, - + local DCSTask + DCSTask = { id = 'Follow', + params = { + groupId = FollowGroup:GetID(), + pos = PointVec3, + lastWptIndexFlag = LastWaypointIndexFlag, + lastWptIndex = LastWaypointIndex, + }, + }, + self:T3( { DCSTask } ) return DCSTask end ---- Attack a Group. + +--- (AIR) Escort another airborne group. +-- The unit / group will follow lead unit of another group, wingmens of both groups will continue following their leaders. +-- The unit / group will also protect that group from threats of specified types. -- @param #GROUP self --- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param Group#GROUP EscortGroup The group to be escorted. +-- @param DCSTypes#Vec3 PointVec3 Position of the unit / lead unit of the group relative lead unit of another group in frame reference oriented by course of lead unit of another group. If another group is on land the unit / group will orbit around. +-- @param #number LastWaypointIndex Detach waypoint of another group. Once reached the unit / group Follow task is finished. +-- @param #number EngagementDistanceMax Maximal distance from escorted group to threat. If the threat is already engaged by escort escort will disengage if the distance becomes greater than 1.5 * engagementDistMax. +-- @param #list TargetTypes Array of AttributeName that is contains threat categories allowed to engage. -- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackGroup( AttackGroup ) - self:F2( { self.GroupName, AttackGroup } ) +function GROUP:TaskEscort( FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes } ) --- AttackGroup = { --- id = 'AttackGroup', --- params = { --- groupId = Group.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend, --- attackQty = number, --- directionEnabled = boolean, --- direction = Azimuth, --- altitudeEnabled = boolean, --- altitude = Distance, --- attackQtyLimit = boolean, --- } --- } +-- Escort = { +-- id = 'Escort', +-- params = { +-- groupId = Group.ID, +-- pos = Vec3, +-- lastWptIndexFlag = boolean, +-- lastWptIndex = number, +-- engagementDistMax = Distance, +-- targetTypes = array of AttributeName, +-- } +-- } - local DCSTask - DCSTask = { id = 'AttackGroup', - params = { groupId = AttackGroup:GetID(), - expend = AI.Task.WeaponExpend.TWO, - }, - }, + local LastWaypointIndexFlag = nil + if LastWaypointIndex then + LastWaypointIndexFlag = true + end + local DCSTask + DCSTask = { id = 'Follow', + params = { + groupId = FollowGroup:GetID(), + pos = PointVec3, + lastWptIndexFlag = LastWaypointIndexFlag, + lastWptIndex = LastWaypointIndex, + engagementDistMax = EngagementDistance, + targetTypes = TargetTypes, + }, + }, + self:T3( { DCSTask } ) return DCSTask end ---- Fires at a VEC2 point. + +-- GROUND TASKS + +--- (GROUND) Fire at a VEC2 point until ammunition is finished. -- @param #GROUP self -- @param DCSTypes#Vec2 The point to fire at. -- @param DCSTypes#Distance Radius The radius of the zone to deploy the fire at. @@ -5151,25 +5445,406 @@ end function GROUP:TaskFireAtPoint( PointVec2, Radius ) self:F2( { self.GroupName, PointVec2, Radius } ) --- FireAtPoint = { --- id = 'FireAtPoint', --- params = { --- point = Vec2, --- radius = Distance, --- } --- } - - local DCSTask - DCSTask = { id = 'FireAtPoint', - params = { point = PointVec2, - radius = Radius, - } - } - + -- FireAtPoint = { + -- id = 'FireAtPoint', + -- params = { + -- point = Vec2, + -- radius = Distance, + -- } + -- } + + local DCSTask + DCSTask = { id = 'FireAtPoint', + params = { + point = PointVec2, + radius = Radius, + } + } + self:T3( { DCSTask } ) return DCSTask end +--- (GROUND) Hold ground group from moving. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskHold() + self:F2( { self.GroupName } ) + +-- Hold = { +-- id = 'Hold', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'Hold', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +-- TASKS FOR AIRBORNE AND GROUND UNITS/GROUPS + +--- (AIR + GROUND) The task makes the group/unit a FAC and orders the FAC to control the target (enemy ground group) destruction. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup Target GROUP. +-- @param #number WeaponType Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.Designation Designation (optional) Designation type. +-- @param #boolean Datalink (optional) Allows to use datalink to send the target information to attack aircraft. Enabled by default. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskFAC_AttackGroup( AttackGroup, WeaponType, Designation, Datalink ) + self:F2( { self.GroupName, AttackGroup, WeaponType, Designation, Datalink } ) + +-- FAC_AttackGroup = { +-- id = 'FAC_AttackGroup', +-- params = { +-- groupId = Group.ID, +-- weaponType = number, +-- designation = enum AI.Task.Designation, +-- datalink = boolean +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC_AttackGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + designation = Designation, + datalink = Datalink, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +-- EN-ROUTE TASKS FOR AIRBORNE GROUPS + +--- (AIR) Engaging targets of defined types. +-- @param #GROUP self +-- @param DCSTypes#Distance Distance Maximal distance from the target to a route leg. If the target is on a greater distance it will be ignored. +-- @param #list<#DCSTypes#AttributeName> TargetTypes Array of target categories allowed to engage. +-- @param #number Priority All enroute tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageTargets( Distance, TargetTypes, Priority ) + self:F2( { self.GroupName, Distance, TargetTypes, Priority } ) + +-- EngageTargets ={ +-- id = 'EngageTargets', +-- params = { +-- maxDist = Distance, +-- targetTypes = array of AttributeName, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'EngageTargets', + params = { + maxDist = Distance, + targetTypes = TargetTypes, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Engaging a targets of defined types at circle-shaped zone. +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the zone. +-- @param DCSTypes#Distance Radius Radius of the zone. +-- @param #list<#DCSTypes#AttributeName> TargetTypes Array of target categories allowed to engage. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageTargets( PointVec2, Radius, TargetTypes, Priority ) + self:F2( { self.GroupName, PointVec2, Radius, TargetTypes, Priority } ) + +-- EngageTargetsInZone = { +-- id = 'EngageTargetsInZone', +-- params = { +-- point = Vec2, +-- zoneRadius = Distance, +-- targetTypes = array of AttributeName, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'EngageTargetsInZone', + params = { + point = PointVec2, + zoneRadius = Radius, + targetTypes = TargetTypes, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- (AIR) Engaging a group. The task does not assign the target group to the unit/group to attack now; it just allows the unit/group to engage the target group as well as other assigned targets. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param DCSTypes#Distance Altitude (optional) Desired attack start altitude. Group/aircraft will make its attacks from the altitude. If the altitude is too low or too high to use weapon aircraft/group will choose closest altitude to the desired attack start altitude. If the desired altitude is defined group/aircraft will not attack from safe altitude. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageGroup( AttackGroup, Priority, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit ) + self:F2( { self.GroupName, AttackGroup, Priority, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit } ) + + -- EngageGroup = { + -- id = 'EngageGroup ', + -- params = { + -- groupId = Group.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend, + -- attackQty = number, + -- directionEnabled = boolean, + -- direction = Azimuth, + -- altitudeEnabled = boolean, + -- altitude = Distance, + -- attackQtyLimit = boolean, + -- priority = number, + -- } + -- } + + local DirectionEnabled = nil + if Direction then + DirectionEnabled = true + end + + local AltitudeEnabled = nil + if Altitude then + AltitudeEnabled = true + end + + local DCSTask + DCSTask = { id = 'EngageGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + directionEnabled = DirectionEnabled, + direction = Direction, + altitudeEnabled = AltitudeEnabled, + altitude = Altitude, + attackQtyLimit = AttackQtyLimit, + priority = Priority, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Attack the Unit. +-- @param #GROUP self +-- @param Unit#UNIT AttackUnit The UNIT. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageUnit( AttackUnit, Priority, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack ) + self:F2( { self.GroupName, AttackUnit, Priority, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack } ) + + -- EngageUnit = { + -- id = 'EngageUnit', + -- params = { + -- unitId = Unit.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend + -- attackQty = number, + -- direction = Azimuth, + -- attackQtyLimit = boolean, + -- groupAttack = boolean, + -- priority = number, + -- } + -- } + + local DCSTask + DCSTask = { id = 'EngageUnit', + params = { + unitId = AttackUnit:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + attackQtyLimit = AttackQtyLimit, + groupAttack = GroupAttack, + priority = Priority, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Aircraft will act as an AWACS for friendly units (will provide them with information about contacts). No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskAWACS( ) + self:F2( { self.GroupName } ) + +-- AWACS = { +-- id = 'AWACS', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'AWACS', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Aircraft will act as a tanker for friendly units. No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskTanker( ) + self:F2( { self.GroupName } ) + +-- Tanker = { +-- id = 'Tanker', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'Tanker', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +-- En-route tasks for ground units/groups + +--- (GROUND) Ground unit (EW-radar) will act as an EWR for friendly units (will provide them with information about contacts). No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEWR( ) + self:F2( { self.GroupName } ) + +-- EWR = { +-- id = 'EWR', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'EWR', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +-- En-route tasks for airborne and ground units/groups + +--- (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose the target (enemy ground group) as well as other assigned targets. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup Target GROUP. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.Designation Designation (optional) Designation type. +-- @param #boolean Datalink (optional) Allows to use datalink to send the target information to attack aircraft. Enabled by default. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskFAC_EngageGroup( AttackGroup, Priority, WeaponType, Designation, Datalink ) + self:F2( { self.GroupName, AttackGroup, WeaponType, Priority, Designation, Datalink } ) + +-- FAC_EngageGroup = { +-- id = 'FAC_EngageGroup', +-- params = { +-- groupId = Group.ID, +-- weaponType = number, +-- designation = enum AI.Task.Designation, +-- datalink = boolean, +-- priority = number, +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC_EngageGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + designation = Designation, + datalink = Datalink, + priority = Priority, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose a targets (enemy ground group) around as well as other assigned targets. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param DCSTypes#Distance Radius The maximal distance from the FAC to a target. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskFAC( Radius, Priority ) + self:F2( { self.GroupName, Radius, Priority } ) + +-- FAC = { +-- id = 'FAC', +-- params = { +-- radius = Distance, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC', + params = { + radius = Radius, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + --- Move the group to a Vec2 Point, wait for a defined duration and embark a group. @@ -5179,22 +5854,22 @@ end -- @param #GROUP EmbarkingGroup The group to be embarked. -- @return DCSTask#Task The DCS task structure function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) - self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) + self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) - local DCSTask - DCSTask = { id = 'Embarking', - params = { x = Point.x, - y = Point.y, - duration = Duration, - groupsForEmbarking = { EmbarkingGroup.GroupID }, - durationFlag = true, - distributionFlag = false, - distribution = {}, - } - } - - self:T3( { DCSTask } ) - return DCSTask + local DCSTask + DCSTask = { id = 'Embarking', + params = { x = Point.x, + y = Point.y, + duration = Duration, + groupsForEmbarking = { EmbarkingGroup.GroupID }, + durationFlag = true, + distributionFlag = false, + distribution = {}, + } + } + + self:T3( { DCSTask } ) + return DCSTask end --- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. @@ -5203,30 +5878,30 @@ end -- @param #number Radius The radius of the embarking zone around the Point. -- @return DCSTask#Task The DCS task structure. function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) - self:F2( { self.GroupName, Point, Radius } ) + self:F2( { self.GroupName, Point, Radius } ) local DCSTask --DCSTask#Task - DCSTask = { id = 'EmbarkToTransport', - params = { x = Point.x, - y = Point.y, - zoneRadius = Radius, - } - } + DCSTask = { id = 'EmbarkToTransport', + params = { x = Point.x, + y = Point.y, + zoneRadius = Radius, + } + } self:T3( { DCSTask } ) - return DCSTask + return DCSTask end --- Return a Misson task from a mission template. -- @param #GROUP self -- @param #table TaskMission A table containing the mission task. --- @return DCSTask#Task +-- @return DCSTask#Task function GROUP:TaskMission( TaskMission ) - self:F2( Points ) - + self:F2( Points ) + local DCSTask DCSTask = { id = 'Mission', params = { TaskMission, }, } - + self:T3( { DCSTask } ) return DCSTask end @@ -5234,13 +5909,13 @@ end --- Return a Misson task to follow a given route defined by Points. -- @param #GROUP self -- @param #table Points A table of route points. --- @return DCSTask#Task +-- @return DCSTask#Task function GROUP:TaskRoute( Points ) self:F2( Points ) - + local DCSTask DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } - + self:T3( { DCSTask } ) return DCSTask end @@ -5254,22 +5929,22 @@ function GROUP:TaskRouteToVec2( Point, Speed ) self:F2( { Point, Speed } ) local GroupPoint = self:GetUnit( 1 ):GetPointVec2() - + local PointFrom = {} PointFrom.x = GroupPoint.x PointFrom.y = GroupPoint.y PointFrom.type = "Turning Point" PointFrom.action = "Turning Point" - PointFrom.speed = Speed + PointFrom.speed = Speed PointFrom.speed_locked = true PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local PointTo = {} PointTo.x = Point.x @@ -5279,18 +5954,18 @@ function GROUP:TaskRouteToVec2( Point, Speed ) PointTo.speed = Speed PointTo.speed_locked = true PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local Points = { PointFrom, PointTo } - + self:T3( Points ) - + self:Route( Points ) return self @@ -5305,7 +5980,7 @@ function GROUP:TaskRouteToVec3( Point, Speed ) self:F2( { Point, Speed } ) local GroupPoint = self:GetUnit( 1 ):GetPointVec3() - + local PointFrom = {} PointFrom.x = GroupPoint.x PointFrom.y = GroupPoint.z @@ -5313,39 +5988,39 @@ function GROUP:TaskRouteToVec3( Point, Speed ) PointFrom.alt_type = "BARO" PointFrom.type = "Turning Point" PointFrom.action = "Turning Point" - PointFrom.speed = Speed + PointFrom.speed = Speed PointFrom.speed_locked = true PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local PointTo = {} PointTo.x = Point.x PointTo.y = Point.z - PointTo.alt = Point.y + PointTo.alt = Point.y PointTo.alt_type = "BARO" PointTo.type = "Turning Point" PointTo.action = "Fly Over Point" PointTo.speed = Speed PointTo.speed_locked = true PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local Points = { PointFrom, PointTo } - + self:T3( Points ) - + self:Route( Points ) return self @@ -5356,22 +6031,22 @@ end --- Make the group to follow a given route. -- @param #GROUP self -- @param #table GoPoints A table of Route Points. --- @return #GROUP self +-- @return #GROUP self function GROUP:Route( GoPoints ) - self:F2( GoPoints ) + self:F2( GoPoints ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local Points = routines.utils.deepCopy( GoPoints ) - local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } - local Controller = self:_GetController() + local Points = routines.utils.deepCopy( GoPoints ) + local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } + local Controller = self:_GetController() --Controller.setTask( Controller, MissionTask ) - --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) + --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) - return self + return self end - + return nil end @@ -5387,56 +6062,56 @@ end -- @param #number Speed The speed. -- @param Base#FORMATION Formation The formation string. function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) - self:F2( Zone ) + self:F2( Zone ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - - local GroupPoint = self:GetPointVec2() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.y - PointFrom.type = "Turning Point" - PointFrom.action = "Cone" - PointFrom.speed = 20 / 1.6 - - - local PointTo = {} - local ZonePoint - - if Randomize then - ZonePoint = Zone:GetRandomPointVec2() - else - ZonePoint = Zone:GetPointVec2() - end - - PointTo.x = ZonePoint.x - PointTo.y = ZonePoint.y - PointTo.type = "Turning Point" - - if Formation then - PointTo.action = Formation - else - PointTo.action = "Cone" - end - - if Speed then - PointTo.speed = Speed - else - PointTo.speed = 20 / 1.6 - end - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self + + local GroupPoint = self:GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Cone" + PointFrom.speed = 20 / 1.6 + + + local PointTo = {} + local ZonePoint + + if Randomize then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + PointTo.x = ZonePoint.x + PointTo.y = ZonePoint.y + PointTo.type = "Turning Point" + + if Formation then + PointTo.action = Formation + else + PointTo.action = "Cone" + end + + if Speed then + PointTo.speed = Speed + else + PointTo.speed = 20 / 1.6 + end + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self end - + return nil end @@ -5483,48 +6158,48 @@ end -- @param #number Begin The route point from where the copy will start. The base route point is 0. -- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. -- @param #boolean Randomize Randomization of the route, when true. --- @param #number Radius When randomization is on, the randomization is within the radius. +-- @param #number Radius When randomization is on, the randomization is within the radius. function GROUP:CopyRoute( Begin, End, Randomize, Radius ) - self:F2( { Begin, End } ) + self:F2( { Begin, End } ) - local Points = {} - - -- Could be a Spawned Group - local GroupName = string.match( self:GetName(), ".*#" ) - if GroupName then - GroupName = GroupName:sub( 1, -2 ) - else - GroupName = self:GetName() - end - - self:T3( { GroupName } ) - - local Template = _DATABASE.Templates.Groups[GroupName].Template - - if Template then - if not Begin then - Begin = 0 - end - if not End then - End = 0 - end - - for TPointID = Begin + 1, #Template.route.points - End do - if Template.route.points[TPointID] then - Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) - if Randomize then - if not Radius then - Radius = 500 - end - Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) - Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) - end - end - end - return Points - end - - return nil + local Points = {} + + -- Could be a Spawned Group + local GroupName = string.match( self:GetName(), ".*#" ) + if GroupName then + GroupName = GroupName:sub( 1, -2 ) + else + GroupName = self:GetName() + end + + self:T3( { GroupName } ) + + local Template = _DATABASE.Templates.Groups[GroupName].Template + + if Template then + if not Begin then + Begin = 0 + end + if not End then + End = 0 + end + + for TPointID = Begin + 1, #Template.route.points - End do + if Template.route.points[TPointID] then + Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) + if Randomize then + if not Radius then + Radius = 500 + end + Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) + Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) + end + end + end + return Points + end + + return nil end @@ -5535,28 +6210,28 @@ function GROUP:GetDetectedTargets() if DCSGroup then return self:_GetController():getDetectedTargets() end - + return nil end function GROUP:IsTargetDetected( DCSObject ) self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then - + local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity - = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, - Controller.Detection.VISUAL, - Controller.Detection.OPTIC, - Controller.Detection.RADAR, - Controller.Detection.IRST, - Controller.Detection.RWR, - Controller.Detection.DLINK - ) + = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, + Controller.Detection.VISUAL, + Controller.Detection.OPTIC, + Controller.Detection.RADAR, + Controller.Detection.IRST, + Controller.Detection.RWR, + Controller.Detection.DLINK + ) return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity end - + return nil end @@ -5567,16 +6242,16 @@ end -- @return #boolean function GROUP:OptionROEHoldFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -5584,12 +6259,12 @@ end -- @param Group#GROUP self -- @return Group#GROUP self function GROUP:OptionROEHoldFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) elseif self:IsGround() then @@ -5597,10 +6272,10 @@ function GROUP:OptionROEHoldFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) end - + return self end - + return nil end @@ -5609,16 +6284,16 @@ end -- @return #boolean function GROUP:OptionROEReturnFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -5626,12 +6301,12 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEReturnFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) elseif self:IsGround() then @@ -5639,10 +6314,10 @@ function GROUP:OptionROEReturnFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) end - + return self end - + return nil end @@ -5657,10 +6332,10 @@ function GROUP:OptionROEOpenFirePossible() if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -5668,12 +6343,12 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEOpenFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) elseif self:IsGround() then @@ -5681,10 +6356,10 @@ function GROUP:OptionROEOpenFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) end - + return self end - + return nil end @@ -5693,16 +6368,16 @@ end -- @return #boolean function GROUP:OptionROEWeaponFreePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -5710,19 +6385,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEWeaponFree() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) end - + return self end - + return nil end @@ -5731,16 +6406,16 @@ end -- @return #boolean function GROUP:OptionROTNoReactionPossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -5749,19 +6424,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTNoReaction() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) end - + return self end - + return nil end @@ -5776,10 +6451,10 @@ function GROUP:OptionROTPassiveDefensePossible() if self:IsAir() then return true end - + return false end - + return nil end @@ -5787,19 +6462,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTPassiveDefense() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) end - + return self end - + return nil end @@ -5808,16 +6483,16 @@ end -- @return #boolean function GROUP:OptionROTEvadeFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -5826,19 +6501,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTEvadeFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) end - + return self end - + return nil end @@ -5847,16 +6522,16 @@ end -- @return #boolean function GROUP:OptionROTVerticalPossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -5865,19 +6540,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTVertical() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) end - + return self end - + return nil end @@ -5890,12 +6565,12 @@ end -- @return Message#MESSAGE function GROUP:Message( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then return MESSAGE:New( Message, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) end - + return nil end @@ -5906,12 +6581,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToAll( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToAll() end - + return nil end @@ -5922,12 +6597,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToRed( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToRed() end - + return nil end @@ -5938,12 +6613,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToBlue( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToBlue() end - + return nil end @@ -5955,12 +6630,12 @@ end -- @param Client#CLIENT Client The client object receiving the message. function GROUP:MessageToClient( Message, Duration, Client ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToClient( Client ) end - + return nil end --- UNIT Class diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 9b72a9419..a68a325e3 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160527_1422' ) +env.info( 'Moose Generation Timestamp: 20160602_1446' ) local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) @@ -4071,35 +4071,35 @@ function MENU_COALITION_COMMAND:Remove() self.ParentMenu.Menus[self.MenuPath] = nil return nil end ---- GROUP class. --- +--- GROUP class. +-- -- @{GROUP} class -- ============== -- The @{GROUP} class is a wrapper class to handle the DCS Group objects: --- +-- -- * Support all DCS Group APIs. -- * Enhance with Group specific APIs not in the DCS Group API set. -- * Handle local Group Controller. -- * Manage the "state" of the DCS Group. --- --- +-- +-- -- GROUP reference methods --- ======================= +-- ======================= -- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. -- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). --- +-- -- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference -- using the DCS Group or the DCS GroupName. --- --- Another thing to know is that GROUP objects do not "contain" the DCS Group object. +-- +-- Another thing to know is that GROUP objects do not "contain" the DCS Group object. -- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. -- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. --- +-- -- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: --- +-- -- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. -- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. --- +-- -- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). -- @module Group -- @author FlightControl @@ -4115,14 +4115,14 @@ Include.File( "Unit" ) -- @field DCSGroup#Group DCSGroup The DCS group class. -- @field #string GroupName The name of the group. GROUP = { - ClassName = "GROUP", - GroupName = "", - GroupID = 0, - Controller = nil, - DCSGroup = nil, - WayPointFunctions = {}, - } - + ClassName = "GROUP", + GroupName = "", + GroupID = 0, + Controller = nil, + DCSGroup = nil, + WayPointFunctions = {}, +} + --- A DCSGroup -- @type DCSGroup -- @field id_ The ID of the group in DCS @@ -4132,10 +4132,10 @@ GROUP = { -- @param DCSGroup#Group GroupName The DCS Group name -- @return #GROUP self function GROUP:Register( GroupName ) - local self = BASE:Inherit( self, BASE:New() ) - self:F2( GroupName ) - self.GroupName = GroupName - return self + local self = BASE:Inherit( self, BASE:New() ) + self:F2( GroupName ) + self.GroupName = GroupName + return self end -- Reference methods. @@ -4168,11 +4168,11 @@ end -- @return DCSGroup#Group The DCS Group. function GROUP:GetDCSGroup() local DCSGroup = Group.getByName( self.GroupName ) - + if DCSGroup then return DCSGroup end - + return nil end @@ -4183,27 +4183,27 @@ end -- @return #boolean true if the DCS Group is alive. function GROUP:IsAlive() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupIsAlive = DCSGroup:isExist() self:T3( GroupIsAlive ) return GroupIsAlive end - + return nil end ---- Destroys the DCS Group and all of its DCS Units. +--- Destroys the DCS Group and all of its DCS Units. -- Note that this destroy method also raises a destroy event at run-time. -- So all event listeners will catch the destroy event of this DCS Group. -- @param #GROUP self function GROUP:Destroy() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then for Index, UnitData in pairs( DCSGroup:getUnits() ) do self:CreateEventCrash( timer.getTime(), UnitData ) @@ -4211,11 +4211,11 @@ function GROUP:Destroy() DCSGroup:destroy() DCSGroup = nil end - + return nil end ---- Returns category of the DCS Group. +--- Returns category of the DCS Group. -- @param #GROUP self -- @return DCSGroup#Group.Category The category ID function GROUP:GetCategory() @@ -4227,7 +4227,7 @@ function GROUP:GetCategory() self:T3( GroupCategory ) return GroupCategory end - + return nil end @@ -4243,14 +4243,14 @@ function GROUP:GetCategoryName() [Group.Category.AIRPLANE] = "Airplane", [Group.Category.HELICOPTER] = "Helicopter", [Group.Category.GROUND] = "Ground Unit", - [Group.Category.SHIP] = "Ship", + [Group.Category.SHIP] = "Ship", } local GroupCategory = DCSGroup:getCategory() self:T3( GroupCategory ) - + return CategoryNames[GroupCategory] end - + return nil end @@ -4267,14 +4267,14 @@ function GROUP:GetCoalition() self:T3( GroupCoalition ) return GroupCoalition end - + return nil end --- Returns the country of the DCS Group. -- @param #GROUP self -- @return DCScountry#country.id The country identifier. --- @return #nil The DCS Group is not existing or alive. +-- @return #nil The DCS Group is not existing or alive. function GROUP:GetCountry() self:F2( self.GroupName ) @@ -4284,7 +4284,7 @@ function GROUP:GetCountry() self:T3( GroupCountry ) return GroupCountry end - + return nil end @@ -4295,13 +4295,13 @@ function GROUP:GetName() self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupName = DCSGroup:getName() self:T3( GroupName ) return GroupName end - + return nil end @@ -4310,19 +4310,19 @@ end -- @return #number The identifier of the DCS Group. function GROUP:GetID() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupID = DCSGroup:getID() self:T3( GroupID ) return GroupID end - + return nil end ---- Returns the UNIT wrapper class with number UnitNumber. +--- Returns the UNIT wrapper class with number UnitNumber. -- If the underlying DCS Unit does not exist, the method will return nil. . -- @param #GROUP self -- @param #number UnitNumber The number of the UNIT wrapper class to be returned. @@ -4331,7 +4331,7 @@ function GROUP:GetUnit( UnitNumber ) self:F2( { self.GroupName, UnitNumber } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) self:T3( UnitFound.UnitName ) @@ -4342,7 +4342,7 @@ function GROUP:GetUnit( UnitNumber ) return nil end ---- Returns the DCS Unit with number UnitNumber. +--- Returns the DCS Unit with number UnitNumber. -- If the underlying DCS Unit does not exist, the method will return nil. . -- @param #GROUP self -- @param #number UnitNumber The number of the DCS Unit to be returned. @@ -4351,7 +4351,7 @@ function GROUP:GetDCSUnit( UnitNumber ) self:F2( { self.GroupName, UnitNumber } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) self:T3( DCSUnitFound ) @@ -4361,14 +4361,14 @@ function GROUP:GetDCSUnit( UnitNumber ) return nil end ---- Returns current size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. +--- Returns current size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. -- @param #GROUP self -- @return #number The DCS Group size. function GROUP:GetSize() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupSize = DCSGroup:getSize() self:T3( GroupSize ) @@ -4378,15 +4378,15 @@ function GROUP:GetSize() return nil end ---- ---- Returns the initial size of the DCS Group. --- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. +--- +--- Returns the initial size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. -- @param #GROUP self -- @return #number The DCS Group initial size. function GROUP:GetInitialSize() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupInitialSize = DCSGroup:getInitialSize() self:T3( GroupInitialSize ) @@ -4402,7 +4402,7 @@ end function GROUP:GetUnits() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnits = DCSGroup:getUnits() local Units = {} @@ -4423,7 +4423,7 @@ end function GROUP:GetDCSUnits() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local DCSUnits = DCSGroup:getUnits() self:T3( DCSUnits ) @@ -4439,7 +4439,7 @@ end function GROUP:_GetController() self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupController = DCSGroup:getController() self:T3( GroupController ) @@ -4459,7 +4459,7 @@ end function GROUP:WayPointInitialize() self.WayPoints = self:GetTaskRoute() - + return self end @@ -4472,7 +4472,7 @@ end -- @return #GROUP function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) - + table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) return self @@ -4482,7 +4482,7 @@ end function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) local DCSTask - + local DCSScript = {} DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " @@ -4490,16 +4490,16 @@ function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionAr DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" else DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" - end - - DCSTask = self:TaskWrappedAction( + end + + DCSTask = self:TaskWrappedAction( self:CommandDoScript( table.concat( DCSScript ) ), WayPointIndex ) - + self:T3( DCSTask ) - + return DCSTask end @@ -4518,14 +4518,14 @@ function GROUP:WayPointExecute( WayPoint, WaitTime ) if not WayPoint then WayPoint = 1 end - + -- When starting the mission from a certain point, the TaskPoints need to be deleted before the given WayPoint. for TaskPointID = 1, WayPoint - 1 do table.remove( self.WayPoints, 1 ) end self:T3( self.WayPoints ) - + self:SetTask( self:TaskRoute( self.WayPoints ), WaitTime ) return self @@ -4535,9 +4535,9 @@ end --- Activates a GROUP. -- @param #GROUP self function GROUP:Activate() - self:F2( { self.GroupName } ) - trigger.action.activateGroup( self:GetDCSGroup() ) - return self:GetDCSGroup() + self:F2( { self.GroupName } ) + trigger.action.activateGroup( self:GetDCSGroup() ) + return self:GetDCSGroup() end @@ -4548,13 +4548,13 @@ function GROUP:GetTypeName() self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupTypeName = DCSGroup:getUnit(1):getTypeName() self:T3( GroupTypeName ) return( GroupTypeName ) end - + return nil end @@ -4563,33 +4563,33 @@ end -- @return #string The CallSign of the first DCS Unit of the DCS Group. function GROUP:GetCallsign() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCallSign = DCSGroup:getUnit(1):getCallsign() self:T3( GroupCallSign ) return GroupCallSign end - + return nil end --- Returns the current point (Vec2 vector) of the first DCS Unit in the DCS Group. -- @return DCSTypes#Vec2 Current Vec2 point of the first DCS Unit of the DCS Group. function GROUP:GetPointVec2() - self:F2( self.GroupName ) - - local GroupPointVec2 = self:GetUnit(1):GetPointVec2() - self:T3( GroupPointVec2 ) - return GroupPointVec2 + self:F2( self.GroupName ) + + local GroupPointVec2 = self:GetUnit(1):GetPointVec2() + self:T3( GroupPointVec2 ) + return GroupPointVec2 end --- Returns the current point (Vec3 vector) of the first DCS Unit in the DCS Group. -- @return DCSTypes#Vec3 Current Vec3 point of the first DCS Unit of the DCS Group. function GROUP:GetPointVec3() - self:F2( self.GroupName ) - + self:F2( self.GroupName ) + local GroupPointVec3 = self:GetUnit(1):GetPointVec3() self:T3( GroupPointVec3 ) return GroupPointVec3 @@ -4604,16 +4604,16 @@ end -- @param #GROUP self -- @return #boolean Air category evaluation result. function GROUP:IsAir() - self:F2( self.GroupName ) + self:F2( self.GroupName ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER - self:T3( IsAirResult ) - return IsAirResult + local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER + self:T3( IsAirResult ) + return IsAirResult end - + return nil end @@ -4622,15 +4622,15 @@ end -- @return #boolean true if DCS Group contains Helicopters. function GROUP:IsHelicopter() self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.HELICOPTER end - + return nil end @@ -4639,15 +4639,15 @@ end -- @return #boolean true if DCS Group contains AirPlanes. function GROUP:IsAirPlane() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.AIRPLANE end - + return nil end @@ -4656,15 +4656,15 @@ end -- @return #boolean true if DCS Group contains Ground troops. function GROUP:IsGround() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.GROUND end - + return nil end @@ -4673,15 +4673,15 @@ end -- @return #boolean true if DCS Group contains Ships. function GROUP:IsShip() self:F2() - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupCategory = DCSGroup:getCategory() self:T2( GroupCategory ) return GroupCategory == Group.Category.SHIP end - + return nil end @@ -4690,23 +4690,23 @@ end -- @param #GROUP self -- @return #boolean All units on the ground result. function GROUP:AllOnGround() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local AllOnGroundResult = true - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - if UnitData:inAir() then - AllOnGroundResult = false - end - end - - self:T3( AllOnGroundResult ) - return AllOnGroundResult + local AllOnGroundResult = true + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + if UnitData:inAir() then + AllOnGroundResult = false + end + end + + self:T3( AllOnGroundResult ) + return AllOnGroundResult end - + return nil end @@ -4715,26 +4715,26 @@ end -- @param #GROUP self -- @return #number Maximum velocity found. function GROUP:GetMaxVelocity() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local MaxVelocity = 0 - - for Index, UnitData in pairs( DCSGroup:getUnits() ) do - - local Velocity = UnitData:getVelocity() - local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) - - if VelocityTotal < MaxVelocity then - MaxVelocity = VelocityTotal - end - end - - return MaxVelocity + local MaxVelocity = 0 + + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + + local Velocity = UnitData:getVelocity() + local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z ) + + if VelocityTotal < MaxVelocity then + MaxVelocity = VelocityTotal + end + end + + return MaxVelocity end - + return nil end @@ -4743,7 +4743,7 @@ end -- @param #GROUP self -- @return #number Minimum height found. function GROUP:GetMinHeight() - self:F2() + self:F2() end @@ -4752,7 +4752,7 @@ end -- @param #GROUP self -- @return #number Maximum height found. function GROUP:GetMaxHeight() - self:F2() + self:F2() end @@ -4762,16 +4762,16 @@ end -- @param #GROUP self -- @return Group#GROUP self function GROUP:PopCurrentTask() - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() Controller:popTask() return self end - + return nil end @@ -4779,27 +4779,27 @@ end -- @param #GROUP self -- @return Group#GROUP self function GROUP:PushTask( DCSTask, WaitTime ) - self:F2() + self:F2() local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() - + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. -- Therefore we schedule the functions to set the mission and options for the Group. -- Controller:pushTask( DCSTask ) - + if WaitTime then --routines.scheduleFunction( Controller.pushTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) SCHEDULER:New( Controller, Controller.pushTask, { DCSTask }, WaitTime ) else Controller:pushTask( DCSTask ) end - + return self end - + return nil end @@ -4810,24 +4810,24 @@ function GROUP:SetTask( DCSTask, WaitTime ) self:F2( { DCSTask } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - + local Controller = self:_GetController() - + -- When a group SPAWNs, it takes about a second to get the group in the simulator. Setting tasks to unspawned groups provides unexpected results. -- Therefore we schedule the functions to set the mission and options for the Group. -- Controller.setTask( Controller, DCSTask ) - + if not WaitTime then WaitTime = 1 end --routines.scheduleFunction( Controller.setTask, { Controller, DCSTask }, timer.getTime() + WaitTime ) SCHEDULER:New( Controller, Controller.setTask, { DCSTask }, WaitTime ) - + return self end - + return nil end @@ -4835,15 +4835,15 @@ end --- Return a condition section for a controlled task -- @param #GROUP self -- @param DCSTime#Time time --- @param #string userFlag --- @param #boolean userFlagValue +-- @param #string userFlag +-- @param #boolean userFlagValue -- @param #string condition --- @param DCSTime#Time duration --- @param #number lastWayPoint +-- @param DCSTime#Time duration +-- @param #number lastWayPoint -- return DCSTask#Task function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration, lastWayPoint ) - self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) - + self:F2( { time, userFlag, userFlagValue, condition, duration, lastWayPoint } ) + local DCSStopCondition = {} DCSStopCondition.time = time DCSStopCondition.userFlag = userFlag @@ -4851,9 +4851,9 @@ function GROUP:TaskCondition( time, userFlag, userFlagValue, condition, duration DCSStopCondition.condition = condition DCSStopCondition.duration = duration DCSStopCondition.lastWayPoint = lastWayPoint - + self:T3( { DCSStopCondition } ) - return DCSStopCondition + return DCSStopCondition end --- Return a Controlled Task taking a Task and a TaskCondition @@ -4862,18 +4862,18 @@ end -- @param #DCSStopCondition DCSStopCondition -- @return DCSTask#Task function GROUP:TaskControlled( DCSTask, DCSStopCondition ) - self:F2( { DCSTask, DCSStopCondition } ) + self:F2( { DCSTask, DCSStopCondition } ) local DCSTaskControlled - - DCSTaskControlled = { - id = 'ControlledTask', - params = { - task = DCSTask, - stopCondition = DCSStopCondition - } + + DCSTaskControlled = { + id = 'ControlledTask', + params = { + task = DCSTask, + stopCondition = DCSStopCondition + } } - + self:T3( { DCSTaskControlled } ) return DCSTaskControlled end @@ -4886,19 +4886,19 @@ function GROUP:TaskCombo( DCSTasks ) self:F2( { DCSTasks } ) local DCSTaskCombo - - DCSTaskCombo = { - id = 'ComboTask', - params = { + + DCSTaskCombo = { + id = 'ComboTask', + params = { tasks = DCSTasks - } + } } - + self:T3( { DCSTaskCombo } ) return DCSTaskCombo end ---- Return a WrappedAction Task taking a Command +--- Return a WrappedAction Task taking a Command -- @param #GROUP self -- @param DCSCommand#Command DCSCommand -- @return DCSTask#Task @@ -4906,8 +4906,8 @@ function GROUP:TaskWrappedAction( DCSCommand, Index ) self:F2( { DCSCommand } ) local DCSTaskWrappedAction - - DCSTaskWrappedAction = { + + DCSTaskWrappedAction = { id = "WrappedAction", enabled = true, number = Index, @@ -4927,15 +4927,15 @@ end -- @return #GROUP self function GROUP:SetCommand( DCSCommand ) self:F2( DCSCommand ) - + local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local Controller = self:_GetController() Controller:setCommand( DCSCommand ) return self end - + return nil end @@ -4946,117 +4946,387 @@ end -- @return DCSTask#Task function GROUP:CommandSwitchWayPoint( FromWayPoint, ToWayPoint, Index ) self:F2( { FromWayPoint, ToWayPoint, Index } ) - + local CommandSwitchWayPoint = { - id = 'SwitchWaypoint', - params = { - fromWaypointIndex = FromWayPoint, - goToWaypointIndex = ToWayPoint, + id = 'SwitchWaypoint', + params = { + fromWaypointIndex = FromWayPoint, + goToWaypointIndex = ToWayPoint, }, } - + self:T3( { CommandSwitchWayPoint } ) return CommandSwitchWayPoint end - ---- Orbit at a specified position at a specified alititude during a specified duration with a specified speed. + +-- TASKS FOR AIR GROUPS + + +--- (AIR) Attack a Group. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param DCSTypes#Distance Altitude (optional) Desired attack start altitude. Group/aircraft will make its attacks from the altitude. If the altitude is too low or too high to use weapon aircraft/group will choose closest altitude to the desired attack start altitude. If the desired altitude is defined group/aircraft will not attack from safe altitude. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackGroup( AttackGroup, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit ) + self:F2( { self.GroupName, AttackGroup, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit } ) + + -- AttackGroup = { + -- id = 'AttackGroup', + -- params = { + -- groupId = Group.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend, + -- attackQty = number, + -- directionEnabled = boolean, + -- direction = Azimuth, + -- altitudeEnabled = boolean, + -- altitude = Distance, + -- attackQtyLimit = boolean, + -- } + -- } + + local DirectionEnabled = nil + if Direction then + DirectionEnabled = true + end + + local AltitudeEnabled = nil + if Altitude then + AltitudeEnabled = true + end + + local DCSTask + DCSTask = { id = 'AttackGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + directionEnabled = DirectionEnabled, + direction = Direction, + altitudeEnabled = AltitudeEnabled, + altitude = Altitude, + attackQtyLimit = AttackQtyLimit, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Attack the Unit. +-- @param #GROUP self +-- @param Unit#UNIT AttackUnit The unit. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackUnit( AttackUnit, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack ) + self:F2( { self.GroupName, AttackUnit, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack } ) + + -- AttackUnit = { + -- id = 'AttackUnit', + -- params = { + -- unitId = Unit.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend + -- attackQty = number, + -- direction = Azimuth, + -- attackQtyLimit = boolean, + -- groupAttack = boolean, + -- } + -- } + + local DCSTask + DCSTask = { id = 'AttackUnit', + params = { + unitId = AttackUnit:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + attackQtyLimit = AttackQtyLimit, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Delivering weapon at the point on the ground. +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the point to deliver weapon at. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) Desired quantity of passes. The parameter is not the same in AttackGroup and AttackUnit tasks. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskBombing( PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- Bombing = { +-- id = 'Bombing', +-- params = { +-- point = Vec2, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'Bombing', + params = { + point = PointVec2, + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + +--- (AIR) Orbit at a specified position at a specified alititude during a specified duration with a specified speed. -- @param #GROUP self -- @param DCSTypes#Vec2 Point The point to hold the position. -- @param #number Altitude The altitude to hold the position. -- @param #number Speed The speed flying when holding the position. -- @return #GROUP self function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed ) - self:F2( { self.GroupName, Point, Altitude, Speed } ) + self:F2( { self.GroupName, Point, Altitude, Speed } ) + + -- pattern = enum AI.Task.OribtPattern, + -- point = Vec2, + -- point2 = Vec2, + -- speed = Distance, + -- altitude = Distance --- pattern = enum AI.Task.OribtPattern, --- point = Vec2, --- point2 = Vec2, --- speed = Distance, --- altitude = Distance - local LandHeight = land.getHeight( Point ) - + self:T3( { LandHeight } ) - local DCSTask = { id = 'Orbit', - params = { pattern = AI.Task.OrbitPattern.CIRCLE, - point = Point, - speed = Speed, - altitude = Altitude + LandHeight - } - } + local DCSTask = { id = 'Orbit', + params = { pattern = AI.Task.OrbitPattern.CIRCLE, + point = Point, + speed = Speed, + altitude = Altitude + LandHeight + } + } + + + -- local AITask = { id = 'ControlledTask', + -- params = { task = { id = 'Orbit', + -- params = { pattern = AI.Task.OrbitPattern.CIRCLE, + -- point = Point, + -- speed = Speed, + -- altitude = Altitude + LandHeight + -- } + -- }, + -- stopCondition = { duration = Duration + -- } + -- } + -- } + -- ) - --- local AITask = { id = 'ControlledTask', --- params = { task = { id = 'Orbit', --- params = { pattern = AI.Task.OrbitPattern.CIRCLE, --- point = Point, --- speed = Speed, --- altitude = Altitude + LandHeight --- } --- }, --- stopCondition = { duration = Duration --- } --- } --- } --- ) - return DCSTask end ---- Orbit at the current position of the first unit of the group at a specified alititude +--- (AIR) Orbit at the current position of the first unit of the group at a specified alititude -- @param #GROUP self -- @param #number Altitude The altitude to hold the position. -- @param #number Speed The speed flying when holding the position. -- @return #GROUP self function GROUP:TaskOrbitCircle( Altitude, Speed ) - self:F2( { self.GroupName, Altitude, Speed } ) + self:F2( { self.GroupName, Altitude, Speed } ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then local GroupPoint = self:GetPointVec2() return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) end - + return nil end ---- Hold position at the current position of the first unit of the group. +--- (AIR) Hold position at the current position of the first unit of the group. -- @param #GROUP self -- @param #number Duration The maximum duration in seconds to hold the position. -- @return #GROUP self function GROUP:TaskHoldPosition() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) return self:TaskOrbitCircle( 30, 10 ) end ---- Land the group at a Vec2Point. + + +--- (AIR) Attacking the map object (building, structure, e.t.c). +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the point the map object is closest to. The distance between the point and the map object must not be greater than 2000 meters. Object id is not used here because Mission Editor doesn't support map object identificators. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskAttackMapObject( PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- AttackMapObject = { +-- id = 'AttackMapObject', +-- params = { +-- point = Vec2, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'AttackMapObject', + params = { + point = PointVec2, + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Delivering weapon on the runway. +-- @param #GROUP self +-- @param Airbase#AIRBASE Airbase Airbase to attack. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskBombingRunway( Airbase, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack ) + self:F2( { self.GroupName, Airbase, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack } ) + +-- BombingRunway = { +-- id = 'BombingRunway', +-- params = { +-- runwayId = AirdromeId, +-- weaponType = number, +-- expend = enum AI.Task.WeaponExpend, +-- attackQty = number, +-- direction = Azimuth, +-- groupAttack = boolean, +-- } +-- } + + local DCSTask + DCSTask = { id = 'BombingRunway', + params = { + point = Airbase:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + groupAttack = GroupAttack, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Refueling from the nearest tanker. No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskRefueling() + self:F2( { self.GroupName } ) + +-- Refueling = { +-- id = 'Refueling', +-- params = {} +-- } + + local DCSTask + DCSTask = { id = 'Refueling', + params = { + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR HELICOPTER) Landing at the ground. For helicopters only. -- @param #GROUP self -- @param DCSTypes#Vec2 Point The point where to land. -- @param #number Duration The duration in seconds to stay on the ground. -- @return #GROUP self function GROUP:TaskLandAtVec2( Point, Duration ) - self:F2( { self.GroupName, Point, Duration } ) + self:F2( { self.GroupName, Point, Duration } ) +-- Land = { +-- id= 'Land', +-- params = { +-- point = Vec2, +-- durationFlag = boolean, +-- duration = Time +-- } +-- } + local DCSTask - - if Duration and Duration > 0 then - DCSTask = { id = 'Land', params = { point = Point, durationFlag = true, duration = Duration } } - else - DCSTask = { id = 'Land', params = { point = Point, durationFlag = false } } - end + if Duration and Duration > 0 then + DCSTask = { id = 'Land', + params = { + point = Point, + durationFlag = true, + duration = Duration, + }, + } + else + DCSTask = { id = 'Land', + params = { + point = Point, + durationFlag = false, + }, + } + end self:T3( DCSTask ) - return DCSTask + return DCSTask end ---- Land the group at a @{Zone#ZONE). +--- (AIR) Land the group at a @{Zone#ZONE). -- @param #GROUP self -- @param Zone#ZONE Zone The zone where to land. -- @param #number Duration The duration in seconds to stay on the ground. @@ -5070,80 +5340,104 @@ function GROUP:TaskLandAtZone( Zone, Duration, RandomPoint ) else Point = Zone:GetPointVec2() end - + local DCSTask = self:TaskLandAtVec2( Point, Duration ) self:T3( DCSTask ) return DCSTask end - ---- Attack the Unit. +--- (AIR) Following another airborne group. +-- The unit / group will follow lead unit of another group, wingmens of both groups will continue following their leaders. +-- If another group is on land the unit / group will orbit around. -- @param #GROUP self --- @param Unit#UNIT The unit. +-- @param Group#GROUP FollowGroup The group to be followed. +-- @param DCSTypes#Vec3 PointVec3 Position of the unit / lead unit of the group relative lead unit of another group in frame reference oriented by course of lead unit of another group. If another group is on land the unit / group will orbit around. +-- @param #number LastWaypointIndex Detach waypoint of another group. Once reached the unit / group Follow task is finished. -- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackUnit( AttackUnit ) - self:F2( { self.GroupName, AttackUnit } ) +function GROUP:TaskFollow( FollowGroup, PointVec3, LastWaypointIndex ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex } ) --- AttackUnit = { --- id = 'AttackUnit', --- params = { --- unitId = Unit.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend --- attackQty = number, --- direction = Azimuth, --- attackQtyLimit = boolean, --- groupAttack = boolean, --- } +-- Follow = { +-- id = 'Follow', +-- params = { +-- groupId = Group.ID, +-- pos = Vec3, +-- lastWptIndexFlag = boolean, +-- lastWptIndex = number +-- } -- } + + local LastWaypointIndexFlag = nil + if LastWaypointIndex then + LastWaypointIndexFlag = true + end - local DCSTask - DCSTask = { id = 'AttackUnit', - params = { unitId = AttackUnit:GetID(), - expend = AI.Task.WeaponExpend.TWO, - groupAttack = true, - }, - }, - + local DCSTask + DCSTask = { id = 'Follow', + params = { + groupId = FollowGroup:GetID(), + pos = PointVec3, + lastWptIndexFlag = LastWaypointIndexFlag, + lastWptIndex = LastWaypointIndex, + }, + }, + self:T3( { DCSTask } ) return DCSTask end ---- Attack a Group. + +--- (AIR) Escort another airborne group. +-- The unit / group will follow lead unit of another group, wingmens of both groups will continue following their leaders. +-- The unit / group will also protect that group from threats of specified types. -- @param #GROUP self --- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param Group#GROUP EscortGroup The group to be escorted. +-- @param DCSTypes#Vec3 PointVec3 Position of the unit / lead unit of the group relative lead unit of another group in frame reference oriented by course of lead unit of another group. If another group is on land the unit / group will orbit around. +-- @param #number LastWaypointIndex Detach waypoint of another group. Once reached the unit / group Follow task is finished. +-- @param #number EngagementDistanceMax Maximal distance from escorted group to threat. If the threat is already engaged by escort escort will disengage if the distance becomes greater than 1.5 * engagementDistMax. +-- @param #list TargetTypes Array of AttributeName that is contains threat categories allowed to engage. -- @return DCSTask#Task The DCS task structure. -function GROUP:TaskAttackGroup( AttackGroup ) - self:F2( { self.GroupName, AttackGroup } ) +function GROUP:TaskEscort( FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes } ) --- AttackGroup = { --- id = 'AttackGroup', --- params = { --- groupId = Group.ID, --- weaponType = number, --- expend = enum AI.Task.WeaponExpend, --- attackQty = number, --- directionEnabled = boolean, --- direction = Azimuth, --- altitudeEnabled = boolean, --- altitude = Distance, --- attackQtyLimit = boolean, --- } --- } +-- Escort = { +-- id = 'Escort', +-- params = { +-- groupId = Group.ID, +-- pos = Vec3, +-- lastWptIndexFlag = boolean, +-- lastWptIndex = number, +-- engagementDistMax = Distance, +-- targetTypes = array of AttributeName, +-- } +-- } - local DCSTask - DCSTask = { id = 'AttackGroup', - params = { groupId = AttackGroup:GetID(), - expend = AI.Task.WeaponExpend.TWO, - }, - }, + local LastWaypointIndexFlag = nil + if LastWaypointIndex then + LastWaypointIndexFlag = true + end + local DCSTask + DCSTask = { id = 'Follow', + params = { + groupId = FollowGroup:GetID(), + pos = PointVec3, + lastWptIndexFlag = LastWaypointIndexFlag, + lastWptIndex = LastWaypointIndex, + engagementDistMax = EngagementDistance, + targetTypes = TargetTypes, + }, + }, + self:T3( { DCSTask } ) return DCSTask end ---- Fires at a VEC2 point. + +-- GROUND TASKS + +--- (GROUND) Fire at a VEC2 point until ammunition is finished. -- @param #GROUP self -- @param DCSTypes#Vec2 The point to fire at. -- @param DCSTypes#Distance Radius The radius of the zone to deploy the fire at. @@ -5151,25 +5445,406 @@ end function GROUP:TaskFireAtPoint( PointVec2, Radius ) self:F2( { self.GroupName, PointVec2, Radius } ) --- FireAtPoint = { --- id = 'FireAtPoint', --- params = { --- point = Vec2, --- radius = Distance, --- } --- } - - local DCSTask - DCSTask = { id = 'FireAtPoint', - params = { point = PointVec2, - radius = Radius, - } - } - + -- FireAtPoint = { + -- id = 'FireAtPoint', + -- params = { + -- point = Vec2, + -- radius = Distance, + -- } + -- } + + local DCSTask + DCSTask = { id = 'FireAtPoint', + params = { + point = PointVec2, + radius = Radius, + } + } + self:T3( { DCSTask } ) return DCSTask end +--- (GROUND) Hold ground group from moving. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskHold() + self:F2( { self.GroupName } ) + +-- Hold = { +-- id = 'Hold', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'Hold', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +-- TASKS FOR AIRBORNE AND GROUND UNITS/GROUPS + +--- (AIR + GROUND) The task makes the group/unit a FAC and orders the FAC to control the target (enemy ground group) destruction. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup Target GROUP. +-- @param #number WeaponType Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.Designation Designation (optional) Designation type. +-- @param #boolean Datalink (optional) Allows to use datalink to send the target information to attack aircraft. Enabled by default. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskFAC_AttackGroup( AttackGroup, WeaponType, Designation, Datalink ) + self:F2( { self.GroupName, AttackGroup, WeaponType, Designation, Datalink } ) + +-- FAC_AttackGroup = { +-- id = 'FAC_AttackGroup', +-- params = { +-- groupId = Group.ID, +-- weaponType = number, +-- designation = enum AI.Task.Designation, +-- datalink = boolean +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC_AttackGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + designation = Designation, + datalink = Datalink, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +-- EN-ROUTE TASKS FOR AIRBORNE GROUPS + +--- (AIR) Engaging targets of defined types. +-- @param #GROUP self +-- @param DCSTypes#Distance Distance Maximal distance from the target to a route leg. If the target is on a greater distance it will be ignored. +-- @param #list<#DCSTypes#AttributeName> TargetTypes Array of target categories allowed to engage. +-- @param #number Priority All enroute tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageTargets( Distance, TargetTypes, Priority ) + self:F2( { self.GroupName, Distance, TargetTypes, Priority } ) + +-- EngageTargets ={ +-- id = 'EngageTargets', +-- params = { +-- maxDist = Distance, +-- targetTypes = array of AttributeName, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'EngageTargets', + params = { + maxDist = Distance, + targetTypes = TargetTypes, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Engaging a targets of defined types at circle-shaped zone. +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 2D-coordinates of the zone. +-- @param DCSTypes#Distance Radius Radius of the zone. +-- @param #list<#DCSTypes#AttributeName> TargetTypes Array of target categories allowed to engage. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageTargets( PointVec2, Radius, TargetTypes, Priority ) + self:F2( { self.GroupName, PointVec2, Radius, TargetTypes, Priority } ) + +-- EngageTargetsInZone = { +-- id = 'EngageTargetsInZone', +-- params = { +-- point = Vec2, +-- zoneRadius = Distance, +-- targetTypes = array of AttributeName, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'EngageTargetsInZone', + params = { + point = PointVec2, + zoneRadius = Radius, + targetTypes = TargetTypes, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- (AIR) Engaging a group. The task does not assign the target group to the unit/group to attack now; it just allows the unit/group to engage the target group as well as other assigned targets. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup The Group to be attacked. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param DCSTypes#Distance Altitude (optional) Desired attack start altitude. Group/aircraft will make its attacks from the altitude. If the altitude is too low or too high to use weapon aircraft/group will choose closest altitude to the desired attack start altitude. If the desired altitude is defined group/aircraft will not attack from safe altitude. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageGroup( AttackGroup, Priority, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit ) + self:F2( { self.GroupName, AttackGroup, Priority, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit } ) + + -- EngageGroup = { + -- id = 'EngageGroup ', + -- params = { + -- groupId = Group.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend, + -- attackQty = number, + -- directionEnabled = boolean, + -- direction = Azimuth, + -- altitudeEnabled = boolean, + -- altitude = Distance, + -- attackQtyLimit = boolean, + -- priority = number, + -- } + -- } + + local DirectionEnabled = nil + if Direction then + DirectionEnabled = true + end + + local AltitudeEnabled = nil + if Altitude then + AltitudeEnabled = true + end + + local DCSTask + DCSTask = { id = 'EngageGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + directionEnabled = DirectionEnabled, + direction = Direction, + altitudeEnabled = AltitudeEnabled, + altitude = Altitude, + attackQtyLimit = AttackQtyLimit, + priority = Priority, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Attack the Unit. +-- @param #GROUP self +-- @param Unit#UNIT AttackUnit The UNIT. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType (optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.WeaponExpend WeaponExpend (optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion. +-- @param #number AttackQty (optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo. +-- @param DCSTypes#Azimuth Direction (optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction. +-- @param #boolean AttackQtyLimit (optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks. +-- @param #boolean GroupAttack (optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEngageUnit( AttackUnit, Priority, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack ) + self:F2( { self.GroupName, AttackUnit, Priority, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack } ) + + -- EngageUnit = { + -- id = 'EngageUnit', + -- params = { + -- unitId = Unit.ID, + -- weaponType = number, + -- expend = enum AI.Task.WeaponExpend + -- attackQty = number, + -- direction = Azimuth, + -- attackQtyLimit = boolean, + -- groupAttack = boolean, + -- priority = number, + -- } + -- } + + local DCSTask + DCSTask = { id = 'EngageUnit', + params = { + unitId = AttackUnit:GetID(), + weaponType = WeaponType, + expend = WeaponExpend, + attackQty = AttackQty, + direction = Direction, + attackQtyLimit = AttackQtyLimit, + groupAttack = GroupAttack, + priority = Priority, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Aircraft will act as an AWACS for friendly units (will provide them with information about contacts). No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskAWACS( ) + self:F2( { self.GroupName } ) + +-- AWACS = { +-- id = 'AWACS', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'AWACS', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR) Aircraft will act as a tanker for friendly units. No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskTanker( ) + self:F2( { self.GroupName } ) + +-- Tanker = { +-- id = 'Tanker', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'Tanker', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +-- En-route tasks for ground units/groups + +--- (GROUND) Ground unit (EW-radar) will act as an EWR for friendly units (will provide them with information about contacts). No parameters. +-- @param #GROUP self +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskEWR( ) + self:F2( { self.GroupName } ) + +-- EWR = { +-- id = 'EWR', +-- params = { +-- } +-- } + + local DCSTask + DCSTask = { id = 'EWR', + params = { + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +-- En-route tasks for airborne and ground units/groups + +--- (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose the target (enemy ground group) as well as other assigned targets. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param Group#GROUP AttackGroup Target GROUP. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @param #number WeaponType Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage. +-- @param DCSTypes#AI.Task.Designation Designation (optional) Designation type. +-- @param #boolean Datalink (optional) Allows to use datalink to send the target information to attack aircraft. Enabled by default. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskFAC_EngageGroup( AttackGroup, Priority, WeaponType, Designation, Datalink ) + self:F2( { self.GroupName, AttackGroup, WeaponType, Priority, Designation, Datalink } ) + +-- FAC_EngageGroup = { +-- id = 'FAC_EngageGroup', +-- params = { +-- groupId = Group.ID, +-- weaponType = number, +-- designation = enum AI.Task.Designation, +-- datalink = boolean, +-- priority = number, +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC_EngageGroup', + params = { + groupId = AttackGroup:GetID(), + weaponType = WeaponType, + designation = Designation, + datalink = Datalink, + priority = Priority, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose a targets (enemy ground group) around as well as other assigned targets. +-- The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +-- If the task is assigned to the group lead unit will be a FAC. +-- @param #GROUP self +-- @param DCSTypes#Distance Radius The maximal distance from the FAC to a target. +-- @param #number Priority All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. +-- @return DCSTask#Task The DCS task structure. +function GROUP:EnRouteTaskFAC( Radius, Priority ) + self:F2( { self.GroupName, Radius, Priority } ) + +-- FAC = { +-- id = 'FAC', +-- params = { +-- radius = Distance, +-- priority = number +-- } +-- } + + local DCSTask + DCSTask = { id = 'FAC', + params = { + radius = Radius, + priority = Priority + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + + --- Move the group to a Vec2 Point, wait for a defined duration and embark a group. @@ -5179,22 +5854,22 @@ end -- @param #GROUP EmbarkingGroup The group to be embarked. -- @return DCSTask#Task The DCS task structure function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) - self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) + self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) - local DCSTask - DCSTask = { id = 'Embarking', - params = { x = Point.x, - y = Point.y, - duration = Duration, - groupsForEmbarking = { EmbarkingGroup.GroupID }, - durationFlag = true, - distributionFlag = false, - distribution = {}, - } - } - - self:T3( { DCSTask } ) - return DCSTask + local DCSTask + DCSTask = { id = 'Embarking', + params = { x = Point.x, + y = Point.y, + duration = Duration, + groupsForEmbarking = { EmbarkingGroup.GroupID }, + durationFlag = true, + distributionFlag = false, + distribution = {}, + } + } + + self:T3( { DCSTask } ) + return DCSTask end --- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. @@ -5203,30 +5878,30 @@ end -- @param #number Radius The radius of the embarking zone around the Point. -- @return DCSTask#Task The DCS task structure. function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) - self:F2( { self.GroupName, Point, Radius } ) + self:F2( { self.GroupName, Point, Radius } ) local DCSTask --DCSTask#Task - DCSTask = { id = 'EmbarkToTransport', - params = { x = Point.x, - y = Point.y, - zoneRadius = Radius, - } - } + DCSTask = { id = 'EmbarkToTransport', + params = { x = Point.x, + y = Point.y, + zoneRadius = Radius, + } + } self:T3( { DCSTask } ) - return DCSTask + return DCSTask end --- Return a Misson task from a mission template. -- @param #GROUP self -- @param #table TaskMission A table containing the mission task. --- @return DCSTask#Task +-- @return DCSTask#Task function GROUP:TaskMission( TaskMission ) - self:F2( Points ) - + self:F2( Points ) + local DCSTask DCSTask = { id = 'Mission', params = { TaskMission, }, } - + self:T3( { DCSTask } ) return DCSTask end @@ -5234,13 +5909,13 @@ end --- Return a Misson task to follow a given route defined by Points. -- @param #GROUP self -- @param #table Points A table of route points. --- @return DCSTask#Task +-- @return DCSTask#Task function GROUP:TaskRoute( Points ) self:F2( Points ) - + local DCSTask DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } - + self:T3( { DCSTask } ) return DCSTask end @@ -5254,22 +5929,22 @@ function GROUP:TaskRouteToVec2( Point, Speed ) self:F2( { Point, Speed } ) local GroupPoint = self:GetUnit( 1 ):GetPointVec2() - + local PointFrom = {} PointFrom.x = GroupPoint.x PointFrom.y = GroupPoint.y PointFrom.type = "Turning Point" PointFrom.action = "Turning Point" - PointFrom.speed = Speed + PointFrom.speed = Speed PointFrom.speed_locked = true PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local PointTo = {} PointTo.x = Point.x @@ -5279,18 +5954,18 @@ function GROUP:TaskRouteToVec2( Point, Speed ) PointTo.speed = Speed PointTo.speed_locked = true PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local Points = { PointFrom, PointTo } - + self:T3( Points ) - + self:Route( Points ) return self @@ -5305,7 +5980,7 @@ function GROUP:TaskRouteToVec3( Point, Speed ) self:F2( { Point, Speed } ) local GroupPoint = self:GetUnit( 1 ):GetPointVec3() - + local PointFrom = {} PointFrom.x = GroupPoint.x PointFrom.y = GroupPoint.z @@ -5313,39 +5988,39 @@ function GROUP:TaskRouteToVec3( Point, Speed ) PointFrom.alt_type = "BARO" PointFrom.type = "Turning Point" PointFrom.action = "Turning Point" - PointFrom.speed = Speed + PointFrom.speed = Speed PointFrom.speed_locked = true PointFrom.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local PointTo = {} PointTo.x = Point.x PointTo.y = Point.z - PointTo.alt = Point.y + PointTo.alt = Point.y PointTo.alt_type = "BARO" PointTo.type = "Turning Point" PointTo.action = "Fly Over Point" PointTo.speed = Speed PointTo.speed_locked = true PointTo.properties = { - ["vnav"] = 1, - ["scale"] = 0, - ["angle"] = 0, - ["vangle"] = 0, - ["steer"] = 2, + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, } - + local Points = { PointFrom, PointTo } - + self:T3( Points ) - + self:Route( Points ) return self @@ -5356,22 +6031,22 @@ end --- Make the group to follow a given route. -- @param #GROUP self -- @param #table GoPoints A table of Route Points. --- @return #GROUP self +-- @return #GROUP self function GROUP:Route( GoPoints ) - self:F2( GoPoints ) + self:F2( GoPoints ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - local Points = routines.utils.deepCopy( GoPoints ) - local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } - local Controller = self:_GetController() + local Points = routines.utils.deepCopy( GoPoints ) + local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } + local Controller = self:_GetController() --Controller.setTask( Controller, MissionTask ) - --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) + --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) - return self + return self end - + return nil end @@ -5387,56 +6062,56 @@ end -- @param #number Speed The speed. -- @param Base#FORMATION Formation The formation string. function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) - self:F2( Zone ) + self:F2( Zone ) local DCSGroup = self:GetDCSGroup() - + if DCSGroup then - - local GroupPoint = self:GetPointVec2() - - local PointFrom = {} - PointFrom.x = GroupPoint.x - PointFrom.y = GroupPoint.y - PointFrom.type = "Turning Point" - PointFrom.action = "Cone" - PointFrom.speed = 20 / 1.6 - - - local PointTo = {} - local ZonePoint - - if Randomize then - ZonePoint = Zone:GetRandomPointVec2() - else - ZonePoint = Zone:GetPointVec2() - end - - PointTo.x = ZonePoint.x - PointTo.y = ZonePoint.y - PointTo.type = "Turning Point" - - if Formation then - PointTo.action = Formation - else - PointTo.action = "Cone" - end - - if Speed then - PointTo.speed = Speed - else - PointTo.speed = 20 / 1.6 - end - - local Points = { PointFrom, PointTo } - - self:T3( Points ) - - self:Route( Points ) - - return self + + local GroupPoint = self:GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Cone" + PointFrom.speed = 20 / 1.6 + + + local PointTo = {} + local ZonePoint + + if Randomize then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + PointTo.x = ZonePoint.x + PointTo.y = ZonePoint.y + PointTo.type = "Turning Point" + + if Formation then + PointTo.action = Formation + else + PointTo.action = "Cone" + end + + if Speed then + PointTo.speed = Speed + else + PointTo.speed = 20 / 1.6 + end + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self end - + return nil end @@ -5483,48 +6158,48 @@ end -- @param #number Begin The route point from where the copy will start. The base route point is 0. -- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. -- @param #boolean Randomize Randomization of the route, when true. --- @param #number Radius When randomization is on, the randomization is within the radius. +-- @param #number Radius When randomization is on, the randomization is within the radius. function GROUP:CopyRoute( Begin, End, Randomize, Radius ) - self:F2( { Begin, End } ) + self:F2( { Begin, End } ) - local Points = {} - - -- Could be a Spawned Group - local GroupName = string.match( self:GetName(), ".*#" ) - if GroupName then - GroupName = GroupName:sub( 1, -2 ) - else - GroupName = self:GetName() - end - - self:T3( { GroupName } ) - - local Template = _DATABASE.Templates.Groups[GroupName].Template - - if Template then - if not Begin then - Begin = 0 - end - if not End then - End = 0 - end - - for TPointID = Begin + 1, #Template.route.points - End do - if Template.route.points[TPointID] then - Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) - if Randomize then - if not Radius then - Radius = 500 - end - Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) - Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) - end - end - end - return Points - end - - return nil + local Points = {} + + -- Could be a Spawned Group + local GroupName = string.match( self:GetName(), ".*#" ) + if GroupName then + GroupName = GroupName:sub( 1, -2 ) + else + GroupName = self:GetName() + end + + self:T3( { GroupName } ) + + local Template = _DATABASE.Templates.Groups[GroupName].Template + + if Template then + if not Begin then + Begin = 0 + end + if not End then + End = 0 + end + + for TPointID = Begin + 1, #Template.route.points - End do + if Template.route.points[TPointID] then + Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) + if Randomize then + if not Radius then + Radius = 500 + end + Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) + Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) + end + end + end + return Points + end + + return nil end @@ -5535,28 +6210,28 @@ function GROUP:GetDetectedTargets() if DCSGroup then return self:_GetController():getDetectedTargets() end - + return nil end function GROUP:IsTargetDetected( DCSObject ) self:F2( self.GroupName ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then - + local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity - = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, - Controller.Detection.VISUAL, - Controller.Detection.OPTIC, - Controller.Detection.RADAR, - Controller.Detection.IRST, - Controller.Detection.RWR, - Controller.Detection.DLINK - ) + = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, + Controller.Detection.VISUAL, + Controller.Detection.OPTIC, + Controller.Detection.RADAR, + Controller.Detection.IRST, + Controller.Detection.RWR, + Controller.Detection.DLINK + ) return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity end - + return nil end @@ -5567,16 +6242,16 @@ end -- @return #boolean function GROUP:OptionROEHoldFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -5584,12 +6259,12 @@ end -- @param Group#GROUP self -- @return Group#GROUP self function GROUP:OptionROEHoldFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) elseif self:IsGround() then @@ -5597,10 +6272,10 @@ function GROUP:OptionROEHoldFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) end - + return self end - + return nil end @@ -5609,16 +6284,16 @@ end -- @return #boolean function GROUP:OptionROEReturnFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -5626,12 +6301,12 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEReturnFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) elseif self:IsGround() then @@ -5639,10 +6314,10 @@ function GROUP:OptionROEReturnFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) end - + return self end - + return nil end @@ -5657,10 +6332,10 @@ function GROUP:OptionROEOpenFirePossible() if self:IsAir() or self:IsGround() or self:IsShip() then return true end - + return false end - + return nil end @@ -5668,12 +6343,12 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEOpenFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) elseif self:IsGround() then @@ -5681,10 +6356,10 @@ function GROUP:OptionROEOpenFire() elseif self:IsShip() then Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) end - + return self end - + return nil end @@ -5693,16 +6368,16 @@ end -- @return #boolean function GROUP:OptionROEWeaponFreePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -5710,19 +6385,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROEWeaponFree() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) end - + return self end - + return nil end @@ -5731,16 +6406,16 @@ end -- @return #boolean function GROUP:OptionROTNoReactionPossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -5749,19 +6424,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTNoReaction() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) end - + return self end - + return nil end @@ -5776,10 +6451,10 @@ function GROUP:OptionROTPassiveDefensePossible() if self:IsAir() then return true end - + return false end - + return nil end @@ -5787,19 +6462,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTPassiveDefense() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) end - + return self end - + return nil end @@ -5808,16 +6483,16 @@ end -- @return #boolean function GROUP:OptionROTEvadeFirePossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -5826,19 +6501,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTEvadeFire() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) end - + return self end - + return nil end @@ -5847,16 +6522,16 @@ end -- @return #boolean function GROUP:OptionROTVerticalPossible() self:F2( { self.GroupName } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then if self:IsAir() then return true end - + return false end - + return nil end @@ -5865,19 +6540,19 @@ end -- @param #GROUP self -- @return #GROUP self function GROUP:OptionROTVertical() - self:F2( { self.GroupName } ) + self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSGroup() if DCSGroup then local Controller = self:_GetController() - + if self:IsAir() then Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) end - + return self end - + return nil end @@ -5890,12 +6565,12 @@ end -- @return Message#MESSAGE function GROUP:Message( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then return MESSAGE:New( Message, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) end - + return nil end @@ -5906,12 +6581,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToAll( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToAll() end - + return nil end @@ -5922,12 +6597,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToRed( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToRed() end - + return nil end @@ -5938,12 +6613,12 @@ end -- @param #Duration Duration The duration of the message. function GROUP:MessageToBlue( Message, Duration ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToBlue() end - + return nil end @@ -5955,12 +6630,12 @@ end -- @param Client#CLIENT Client The client object receiving the message. function GROUP:MessageToClient( Message, Duration, Client ) self:F2( { Message, Duration } ) - + local DCSGroup = self:GetDCSGroup() if DCSGroup then self:Message( Message, Duration ):ToClient( Client ) end - + return nil end --- UNIT Class diff --git a/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz b/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz index c30a01530d09674af9a3517586e45b382cce20ff..f06ca8a06771d7a98bb4ecbde7664e69d228e545 100644 GIT binary patch delta 105487 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 T1GWbPmn{kd8wOGe0{{R3mMRm{ delta 102673 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
    e)!P0~1&MQmjEP{-h& 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 delta 115139 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�UTu03-ka0000003ZMW0BubG zm!T*E6PHXV0uU8!#?5FFxX}SHa1O~2xX}SHa1O~2mvJZpEdtrum!K#DPy#UBm+~kA zGXpvN0hcH#0$Kwg{{feUDFQMBeFXxS%Mbz^m(?i(DgyNvmjNmQ90uwd0ssI2tzIR< diff --git a/Moose Test Missions/Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz b/Moose Test Missions/Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz index 084815a4da52940885082db23e4def6655723b28..11a3758892e064cb8b91984f2ae11b89228ee2c2 100644 GIT binary patch delta 105319 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
    e)!P0~1&MQmjEP{-h& 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 C9cKRk diff --git a/Moose Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz b/Moose Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz index 169744bae643d7b66e37963fa337bbc0d3d1350e..77bf18f65260e37616b247b55a0c4a6377e3b18e 100644 GIT binary patch delta 105383 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

    ckcVOfyh?dCryNeDgtQ`XfcezrnL; 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�ZywcLFsPY{t!K61dR;FmMjZ54h0* zFmMjZ50}b!0xbg&`vI461_C3O9e4sN1L^$%mr8g7K?BhK0hcif0vMO3cmgT|xc>o{ z(|7_h0`)FkOqZZ}0v(q; zdIA~)PE7)ruUG;Ymo<9=5SM{^0vZFpP6C%7S^^uFxq1RB0ybfn<$3}<2c=>H08~d% zm+E=~9hZr20uT%U000010000005@ZoVS55X12AL)myvG*8kfL(0xALuWtZ%G0!0Vm zWdZWoU18b7gZ-O9ci10000U03HAj2mk;uX#xNM E0Kh7WjsO4v diff --git a/Moose Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.miz b/Moose Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.miz index a6a4cb6c749845e6cec2aede49950a47840e6a44..30f659d40c87e8173c898aa8548d09cd0fbc8bde 100644 GIT binary patch delta 105201 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

    jgOWZonI^A|!>W=k6?t=P}<%XrGiv7rC? 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%0Dr*?5}t$$ebR{@9(8NpE&r2aADFM<~LT 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
    e)!P0~1& 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

    ckcVOfyh?dCryNeDgtQ`XfcezrnL; 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 delta 102288 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

    e)!P0~1&MQmjEP{-h& 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 diff --git a/Moose Test Missions/Moose_Test_TASK_Pickup_and_Deploy/MOOSE_Test_TASK_Pickup_and_Deploy.miz b/Moose Test Missions/Moose_Test_TASK_Pickup_and_Deploy/MOOSE_Test_TASK_Pickup_and_Deploy.miz index 555e364361f3b61a6d102b4a5e93e0790e69ea1c..37a4638146887fb2e16234f0173ad45e55974d72 100644 GIT binary patch delta 105246 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 delta 102374 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
    e)!P0~1&MQmjEP{-h& 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 a0003100000H2(pY5E23#2JQg@00001^kAw0 diff --git a/Moose Test Missions/Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz b/Moose Test Missions/Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz index b49e9ecc193176bcdeca6d7b66ae1fdd86ff93b5..238babf36d7983f7bd94e1376c23d6ee7a1add86 100644 GIT binary patch delta 105215 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
    e)!P0~1&MQmjEP{-h& zl<#Vee2WoI=gImbPYBHcp_^tuuM)YLEUGjN^0qFlZ=XbVuCJFEOEl6aIW}Hb#}=06 zU5xZgfNSJ0GzR4;@0spxlU8@#oEHRN*9LJ4oVb6IyfIBj1=D(}6wDn+%6h<-fqeja zSyr>dcSRhlkBz!vxO-f?lAy2x#b(LW?M}0KS=)Ks{zuf?1dU$bx#&n9aARteARusP z_d*T<_E*zG@K}i;U?03E?qEk~cr5HGSwgn!MYD{57x^kzyqV zWu$)urjus=z)fSoPf2LbMHkb|Pq?3B8!w;@N3xMOHRqD=e($4?3<1jMDW$$61rXe% zW6+z037@8#e-z>xl)t&*R&8!!%o8# zA)Wv!pO%Fv@+Sf)U()bGW&4+a_P36%?SJx?uvIu}xws3K^1UpdHXD0quNqa0x@bNt zFS1Zlr&P3#3q1-LBJCIXk3?-R=>R>F^}IGODynL~yc!oUu+ku`^y-1cDyA65;#Na_4~Ii*l}blm6%<87T@BL@4n8{EfB4Di!Lcc;rCaYE9)I%D z-p2XvQQ)RM>n2H`nwW9OpKtTItq0&|BmMRl0HW#Lf_SeyN)md~d5?%3wk0s>PLdziK zTKvjeL8L{@tq(1htH!T);4v-i54=x=_ZZ(55HqXDcFdFM^tylEdGW=3GW=0W zhh=s7BK~?2n<9N5fds0GpPtz-udd)%Ws7SI^rsEz_b2o9d0CsUK@d(e(1K>>>$;fO z-(TCBGh0)?fPye{TYhbHV9>pcdDEl8^DGjfRZoQDsOL>w@FM*Mmq^kakeJ(Cu@KrC z7mLnd(pYpJgeBb`2J?S`EoP||i=s{$5~wI7T@nsTI%Q__g1`Yj^G2vtquMAcME9mg z+i1I-an-of-jKixp^r*c-{UnjZxvCKc?$_>w#}gqZ}5+%uRR5;>t48)0pFEz z@1J#7WnQL~GVszmlHEyezG>&>)j_th_39w)ez(+lHE#Vv3sHYNYUf~g)VCn9K_YzH z7RNn1F9EaS9BDByS#2{h-_)F9v&Qt2*_ac|)oITP!g_TV<^|z}gF=)9?BQ-d(4VPP zm7|E@s@q%rzL)BXBf0d^cIb`d&D~^e^{^L^X+&MHAhBA4~K!_SKrM+@QEJc z>mvclSmr-7Ve@~6*WN@ml5MoQf{$xD?|YYdk-#1)i(l*~5N~mz>Gbwk9L)n)bEi_u z7d^RP!|r75YI>9=sQD-#=TlCbF&qx{+6}h6yryD<2~vi`coj-Ah8|{volMoA$4h3q z)$5x#wP^2g4W(}Evk`DolYTH8u~lEgkzf>)sRq}uaz=lGWy56QA4z&(gg$Oi00c9J zV;;LVGJZq8rJa@)@?}`2-mIZ};sI9dpBoRp7jTn_x7M2LWoM%;aCJrVXmpRRwGEMHLsa+{=)UHdPwBe(P_17`{Yuz z16+S$HM$%}q`(lwdds~ob>dIUGTfMB8{Y%BF^eqAX*TZsAIoV-qC2ozWLGh};XFF- z5hD8Z*G^F%`~;Nh^{M4#u1htZS|y_;dQnMbz)D2hTR|h1Iaq zYWqR`#AZ_(**slEWpYZKRT~lObJi^pbgEAb-~J_?0qmBZ1ae&cV6kh2Y+1J4>pM47 zUbzwzpD-pkDiSmb3%q|r zCb~ano%>zwn7??zhlW2%YmwbdON_9GKWFCgOx`IaQ@I@C@!n5u{9{>tmshglWusN6 z(RywQs+39bMEVR~YOU*+^}(`UoVIvXW1~8O0u??5tI`NMG=*f^%PKUAfYcJJ>o~ud zI;p76pMZ>z!SEbFTVSA0+qGjp0E_O+D z3IwGteXR&;FAYlI)j!VN59~Akw>_jkPDU))f;9yb_-PJ5*_&a94*CmchDv`?2E@~3 zA*6F3>q*r9Uxv6M&A_r6q)%MTnR6pPF_^^!h{w!QHCnf5I_3RE-mS94{iwL&$KjkX zW|~d%@&*&l{E*YTm-0d+q{N8E07oQttuaDRH4Azp zC>obI791D!AfVVGoEVN9A_WT66K8oP*bUfF_t_!5+&Qmu6sZ_#vmkAZ70IlaV4o)c zDL=oNvVo>TM>EdUxc|wSp?wWEFZhn;{t;*jr3HOH&T1Rub1c)LnV5fqiHQe5c$5>N zxo%sgcg|TVpj*5mo57GK;Ly^yI;Wkkqlcd!96@$l6l{l-3@abL2jZ;9WXLAI#d1J}x9G-Dixglsi_0V&@?o+vT$%}x` z>XTe^!Rfu$=v{VX(~VJ$a8$rQfgETUbEK~X}7p2xXU9uEsxGl9(@Aad5M2%PIns&IP>2xX5;L{ zoMw~njICon0(E3#5SJenqtQ4|eL02{kkVxTgUy#;dl#Gn%JRD2FqlD*k|wIA;$z_P z!@!*reN9TT8c?Uix`z`GC&g5f7GfCz>id_-?Qqqv3U^UlFFq26jx`&^l^gyecCXs5 z*Ge8drmF_{m|K6@9<;LDn{KW7f00mE9h$@2YH(WR6$By+^ht&*7BV2BAgT+H%J`W* z)Q8%u(qz}AP|*FpJes6+6|M#1M_!RE<0+{ZvLrGr8+c=LwhlAhjg0b1`6Ie<&$t)r zK!s_B0ChA9{FmDZ`f+}N5fp0H!-*Umt4Wre!nkhk@=jQRGc z9wohB!)3`Fx;Gk;xxa@;qVZ_RC-f7B_~@O(L6f}Ey~eD^6;n#42(RHT%jtYtLLUJs1I(_cH}dTA zvECEcWc8vmH7|!B^Gbbs6gltdbPdt7$0OkN^Af|?Jg(^~b%>G&A$c#VRZU{0fK*C1 z0#i1Eov(oHKEt1>LF!5&1`Z@Qm)-u2JrfASAvk}Hgi)Q;u1w<-EsAYYQ8Nu>9Rk&8 zol&XU=d@RPP^c0NQHHvUr2*JI1-T_=DPC^k_u6qZljBvXU zfJT3`Lt!&t7!W=91{x}GW>G$c|D8mF4!WygXj_N63=wAMRe1MRbU$lo@d~2L|0UKB z8AcYbmHRUa%d|R1VY7#P<3Zq$k}#Q7R4Ib*M41$`wAy{+xfz&H*NuHaxj@cKe8hBv z_eIot%WMT#9NcC3IC~6cg(*4^_o9x?^Wc9oj?SGgh5%ib-M|(`Vaa2?unV3tVOv37 znampw7R4OQy(|05ShQs_yi5#QH!=C78<>=|Z(iE#!wR(?vl~8bW4ieqyrB(*LR!L= z86z!xb2lQQVxfQ;cgdS3=WgvJ9y|kpg@1XOS2l+ohh5mWQ24kJkd9iaSvN+46wQCT zA%FvK?_AcrA`#0JX%)+pSYV_sDfnS1r!6OoWIm~Z@iFFMhN%K7($jz^Nf$fWJ2G`K z&F33B)oOME0-g)98`!t1ApEP?NnnlKTzU0+=Vjl#H%8NiwH}$?Q8_9u3VRorPpSez z5F(A(%8+gP^KEp|HxkRK5AS4ko+^L0Lrs0!9~UjaPP6(uC|7w6)H&FDH?R(JA^!x^ zH_T9N5RGSWD}VYa{Ft&DVmTPPq4+ebKo*>Qhr2yjT-!s(|I6GMD8OwR^k&MqIslyn zjJR-RP9L_R;K3{AR*EN0=}TMY7XBU}u=mSy1dsw?FNMHf2UuGntOro*We0!O2Qa-c ztnF6Nknf>M%`hQ`MszC*Yu&|9MS;Rl_5R< z1-AV>F3`Tk=Qrt#AkdF)2Iz?HOwYg;Eg#{}G7?q{>`kp)Zj=*l9%AoUr)hM4w0}Y( zVFTXZ-~WUc?YlIic`aY)_lSAn_yz`^O%NxrmrX(M%BW9@n#Rqu=`?>k|Bfj_C6A8J z9)WCqByi0x6*pGk<1+xa`KtNw=JCcre@b;*c67M;;8iy6O3@zmWZo~UVuO_?5tZ6O zO!GS#cN5Uo)S4T7Pn&c_Z_=uw^J`I{_^08HO1-U&zJC>z;MN%w>Go+iULZ- zZ~Sleq4nx@_MMYJ2PlvF^jNJ{tKF5fT9INI!}1kbgW-qI=+%D(Yq5~mmOX2;ekAUr zdh8|@E!LtktP7KiIPGUU?%U0mN%klW<3y$4kKQ zxgVqlMj%)vr=aG0L6j(P7B8k4=x2z59cD6Iv_kev`ndG_sCN6%nPG80e`J6;S$-i# zC+>#YeUR;AkQ0CE*nwsZxAJ*DpO9(w0W}!*w@;Hfq5>2qCA4L#X)04xQB(fz!5445 z*I1hs+REH7w|JA0lu`jgkIxcZWtmfDT^F7eXean98q?d(w(k)U4X4P-BTA$TQg=v2 ztO^5Rr-=h|Mi$r?Jb=<3GSS+DQ28zrV7;32Erq7Z*aInC{-s?f5+sl$E~jKM%L zP$Kr5!7zQpRCU=)RYYq&S!H>-ahj-DTYEJbqLLRnK2a=Xk!Gn84?^Pe*>P`-Fxs?M_Odl!!SnNiuEl{g=+sWqSl zOv1}6(iB*b;_q{Hi(o=ixbXXZ6DbL5CMm>L2@ij&wUOX@;nrl=3pbEL@Mn3}Nrjkq z_h1+71PI;>KxA*-yO+JXSHk%^OrY#OETUQ8(rLP7?eW6H>STU(H3b?MLtdh6(@GNR z@V&Hpna%4iyu!t?&@4DQO>-gYCar*m-w>y6yH^gSQ!kXm!NqJk-T@8w*b|$p<7@M-J;*~`)^7)UlxyaiY!E=?qs+7|d;iD2p3JSKg~my4Pd=oNmepa# z16Ax{eA>>P&l>7I#7chB$Lz@2r-Z!b!L$~AG>=wF z7!ojTB*q;JjN|>iMscyJv}hwPy2^`9#Kok&w3w_G7Tskra={jketvp%VIX2+`^#BI0t}S0{rZe#o2uV}a;2}MO4EB&7(QycGvhYsJ z?=S72e0+3#dhMJdd=UJRN3o*P>qyC7HbrNCRj0 zuf4YQX;n_%_=?Z9A5_TP=u3b08!!?M*w)T#uhA$MF5nRk&4>ykqhW>oyqasZCCkBm zRln@OZTrC(n1q^;vsC6^=|9e}F$VYw5vXAm3~ibb0+7>-yquCJ96IS#Q?H?u%j(Hy z4PnI;bbL~i@7Gfq_inw8<47L}pa)qXXKdM9ne3BlJTzBTT}GpOI|F~bJ6m!XXm2V_ zl)zK;I_hySaE~k4Nx-8_9#Z1Z&h@b{vL@$P1Rpg94@q*-e zErR&%ft*fFihO!5jj4YZ)4+f!RpTnlPv~ z)Cu6~X(@>ms=1Zy-WJVQdAYn9m(fU(!SS~(0`D{Y`gd@rjl>IlRzFNE>w4#CX7-HJ)%2KECw$WnLhPFfeS$ z^VziacEz9D={0`^s1z1aNHB(W1Wvi`Yp)Gb4YKJ<(^2|D)x>V1{`j_#WFehZK!_-J z1Kk&o22?`ikhGS|okwlfYY!`t4QQK$a)MUQv``7E1{)cWQiCXhPJgH1wD~xH`ef;{ zaYNLY6l|=jkq*VlszjK$8z~5k$8+!qc8`k5O@+#$LuP+P8bLi@uCxy<@wwY0 z>kDK$!ChB(N~Pl3M_0w#x)qe6nmF;*lut@FdrbXcTC9Rt5XEQ|Revi{&@ZZPw9PPq z^$p8urnP^q0aN<%q(sirv5(r9tIPJDr7Rfn+!Qz`k4NVL<AQt(X*-3o~-LVwxDlpsas9);}tds2udy5IreIsaf!>uZ7&PCwGmQe7#;HX6jrlHbyOA^;%S%YvB70^%}H&K6@ ztLIRiw@cEsd8O8+N4#d#J~e{X;qC-C9&?e5=MYY#E*1?v!RY?T>1=biX_1XeDr4)4 ztruI|G~L$nIv93Q!z>Ib>|IC1K5J!iOS0S2iJnZG*o!gK{dLWhY zT{S738xPJM2c}fREeB49B@zf7Po3D#a++Jp(L}ZkrMN}p4O`A;pHR(R4&Bk-zAXZm zO$yQ{KLYs=GTtO=HP->7yu6dpYbvSkeyz&fug3}IwEApTkH=qS&C{SlbX__Mf@=Zq?|yuG zc=YfL{yqH!zD}hbYq3L!Mw&CyXjHx>4miVJLe+idF@`_!=zx#Ml}|{G@vh8J7KPa{ z$`$rWz|62QA*L+zi}4tcOLBj8#ZyyVKGH8FG9G;v2MIhxq zrCihhnG5(>Ur=*)5`-I|Xvl-wa==jR#)lco3y_%Pmch}N`w!0^93Jm$`Djd`avP2q z>|&44c0U5zpV{8pKGsj@p-t|lbI(TRCJ-{ZEalAG)Qn{MCUS(((guGr)0ex)aJvn` zY6F^)5Etf4yvl-ZVqWH+?5R<T?k}|4zs&E@0!E`vhTH=+dE@vJpOkap0wi z7c-SBMb9=i3s`fiCLW1Cwus}2snD7PF@j>0{8McPrA>OUVu?-DFjDz?Z71mDlE{?G z@r=CYG8f0pX-Iy5Bx`>a3L4PyK8%Kj{k>hQ`mzmql?1ZJ`-DDw1E-ZdN#uM%6?b&B zf-Cv-L-Tz?d=OAZ@!dHU;w~fqEyeBbWC)Mk_oaKh*XLnJyV_t$hV0-!9OGr4IrVFO zHfC)}k}mSVOZyhS=Z`R~Vf%&~01!Sm0pO2$#0IwjnzA_%(Ud^D_*6GI@&8rebw|ZIj%n*<5sh++eZVE1@emkNnTur4d+*< zMS}~HQx3OVc|(7N+;4Co*a2hv9{oM%Y`Xy@Yp2&u3gI6nY>pW?rpp3r-^f747vc0O zoCF1=4cr`J^YI=~vm%U@N31u#KoE97HQ1AUxm!RziG+~MyT2mutrdB1bDri#yDHc& zUSST)r8knGwXm^xCrFEFLD_e4XtCT(iD=@Pn?1x$YsG(C4*^J+A#RGU;+@pU+V3?o zNXR0(4j)&ugu@Iv5-}6|jzQ)Ergsi`Lu=H9XOp~v4Xzsblo=iN=+)l|&NADWWU|6i zLsEW_9VKm>aw1M7;SR#2DA*Aw-fnEq^2&hHyl2%&qCT`8NxQ=u)&V_zTQ8+*l~t5Z zP6e~JY&(CUzoj*{vJj^Ckoqb_kuScw0&9k86XDrhR1}@IvcAsuFRjjhefvkh_h%m; zeeuQa!@Wi-q&?(V6w7#K>nNUyVm=G-fjE7-BC_^E<}ZRERerLyyOHjXr+ByNP21T# zW6Ei?Z%V`g92W-qB<`xPr+mR{ZKwkp&>nDVjz)jO7yptrvSH~kcO&ue38Qo*M=V&5 zB!hM8lXG=OUFAlCG}ZLHl>Pm{*N)HYRI|eRevX%F)tPOOM3a2bPnaf6I3gPLT0C@T zyP8InADAA@SdHZf$%|svZ@_u!1(X5qIe9aMQj`Xa5y1vAG&CPnW7FVb0d0uWB|zi@ z$mD+l7AFz9lRqF&@#bNIV5+rx!?3+Xr)1Oz`ehg-w#RH zVOsOZ)0q&JTn0{fMd>rZAR~Cu^AU~Rtg?UD57AA^hWgx+fKa?=4lB)=1u>+OnT=MIU_#SJ$rI0` zm~@hqMoV*-mXwQ-W~b~a%`}{O1PZEg^CvDY(^Lj8Dxee6{?ZcH^0U9z7~9Ys!&S;Z zWsBXyI_-Z$?0-WnFvO}!0jU3Pk8OWokMVZY|Mu8_+8#SDewNL+$G2#jxnTdd(%M*Q zG9TMoYf`?m)g~3ydTUYW-)hA%a{rha*WQRjpH25hmA_xk1`pk;-kcwvp*ggXozl%#kt-rj)D1OD zI4DLNVc7h$ zKo~A9#Mg^(w*rxaYN^c9`~ZK(8t23%d9|%%c1ub~+a1pR34H3bAB}`&gbt=fF)>|T z7LJQ?k=HO$sP>2mnWY_}n+OdKERXe(SZm8P3Ef$|cx4;{$=iEvh!_8kPtu+bStV$4WnoL@t ztzlrX>|hsQg=V{;8KZw&u?%X)Hr+rA98&@m3%9ZiaPle|BtF;l`4&urWsmQw&te)h z_8HO89lpVI?N)4Z_zH&h=uBkoDQIt@^1l?0QP_AJ07C=fd*qcsvM!s z?-gQTWsOQlvB=<4N{C6JxSubypBlJVqD8=G7(s#>VL;f9XP>k(qi%MF(rzSj41w5Y zAiRSVF6Blw>|k*DH)*6_;r_iOUz;{ND-=b*f?T_~;udaeJorquc8?{!!5(j~YYh!* zdMdZy+u;9jlZAhp+Z7BI_2O36qA3+pX*`-NrFI=Tn%uA-)udxDPCyD>JWds97Qd;W z10DJ}8r`&$qtQRmOL{CS)2XO&MVon*3v4vkxa#V;CWug$hp!teLY~5jL-RAtvvf@) z4RddncxzxgIB8jp!U?>HxcAlP`^VbfY+d8ftlP+K=w*Mal3@KG=>QH2n2vvxPuvJd z2Azzs#JH})U`XvWbuvzCtg>eahJ&T)nV}u=7Sb}>hhy+l%IRr5 zrx+>kEL=~k~T%b{~PHm zsJA9BFUjM$`!O50SIMmuGKUsMoh;$#!!W~uC}z`cP;mqG%+Z;=R&GUA`%#}-c^*X7 z{6(cCT8v2_9#@sFER%4$=-mV@)^3V7SzSs#4O@!UiSLwT$$LpXEs3p#aV<4>u$+Gl zT4sHuK`p1DD`R@N?dr{^xOK^k!dC{>@x5^Kfq>#Lca#Vb`>-bdd=;9=FTs zL1Ecmj7m!e?#M+~YPheuu{tf_q4029H3-`44-5q%d;t8yzT=Y4p9Y2qoY}bUy>5=yGgejPN`7#>yBxs2iMq zb^P$~;lbILM~4qj{c8Dm=C`+q^3MX$yW?3ogYe@7`lH?BqlnEcwUlXG0^RTR1EQZ+ zLL~Vn5-}(tk>)M@yoHnJkw=p^AP!U_(zp!lWVWP>g8`HX_y;Qy^pDHw#khaiW#Twp z%iP8@bI<2j4dSfBl`RQ+%|+MjJYkVm=3)#DBFkb2dQq2-QJeJyy}s$Mjk~!;-K4#K z=T;wx?d>2srRkG=-b^|NQPiFz0ZqwrZ8C0Ja6#HO!cn)2f88!5V>ExDooFCXg2Vh)Rh)zVv=$KyX9Mj+M#x>v)OL~nmL)$v z-KIzc@_nG+Z@l3k-{}mKt3-#FO4`O_%)vWM9H-@$N0)J%Zfgu1{@ZRNl{j_*iY1*M z@D)aKTcTP0g2JneoSZrfOq~Rj4_2^E@v9&pFA{yZ)@$<*AT-Lqi9JlZ0{v9Tr zJlFBN*$NA?dn>~f3h#fItt<)FGeP~suTP3`c~M;fFn0skKBz61vM@UOAc#xzz9(P0j0P8NwH_a&9%$0d2_@PM^b@;9vW9w26qJ-? z)X>z9+s0IH5B-1d)KH3;Gb>lSS*(3-$C%bT7C}*_p3su^`(am?UX88T1$Qn+ zBYCqFfK3Z>1+Auf3MY4jWy%F_K^n6{Vn_*-)&rCsYXVJAO7Y9{N&z?M5giPFU=(x% zcpds}P`_{(W_!H_Vs7izSGT~7@IhR=pPJWT7~hiu{k4CplM9&c8kFg?A$4v{8;3GU z^$9cxjEv`)jc^|B(m{e!Dn5!qNux54?~QCQ{=hTja{@O=f^rSF4Ia=O3~QmWkYGh0N2VKE+)BYAnoLjExV~Q z<8skr373CKuyJw+@=C>3k{&Gx+DL>p0<0amZa}P#;%;-j_D^zJHw|#B{Imc3Fi|_>QHaQ4T~DKM;81Zu{dVV8#UyO^dkt^=R_@rWdSppLNOAOlc?10 zQ0EHjjC)4t(d#>{Y8sHW#nH~PW}7pfO@`?7xgCF^(@lox^rk~}y73U5-q8>(9Wb9q zhemlfIBwhKZ0Ztdq8vRwNg+_jeu3%-)prd^sgY@2p(SoxNaEq6Nk#td+gi{JE0)Bw z9K5}4Uld|ZyOKfRhGymMt-!1&7c7LM9lO}C%f&pYAQ_ML8|&J7%NDmyo41_V5g3$> z?|gqPuGhSCEs$x~x`o5paq+0E?Mtx55?0G+k7?jyHzt8eoeiC=+s>fKZC5KIAzQJj z!>C#*yydSMN|;q%VsU@NE%=_{ga#L_F!y@(U9fQpv!agP74kd)}gf{IxZu3GNX5`E) zY|_FeEi&^Al7ueI!q*MWAAABB!vAy?SLc_@7hCe0s(YAFX+=d)h?~A%(PIdLH!e&y z!fwqfN&;c}xSHT~;4#M(@mtNuSC4ameF@h?2RW#U`#AK2XGm$FhELvy_{M)>VJ_S@ zIks4hB%VC7BsS;8>}gRCewUa&g(!+p)f~644g(ENC4Y|qBgmz3T%ZdjK?1rYsRscfd`9XaQ`XWtWB`AVVR^ylrDV89 zwAGkKqwxa&$}b?3?o^hun(=a4<eXnu%~MX;8H8KmH-IRVb3Qf2q?$i^Y$hBH z>T&+7o$@ffrr;H202)OO!rc04c~zKkF`}|l6gq=JG@kS2fbQX3e=}f57+B6)B(k1y z*0U(fT&G3G#9YL}Sv!BN!+ii?1IehYhgbuuuYu}@|Gj5kcX&{FkBdDEi#^lLI>m4X z)OiFNJ7=D+$&DAA%#38!Uc_0`PiZV*cFUy^U3jU_I5mGX1AKm#;YBJ6OP|oC zvZutwb$Ka+pU;#7Z0;<7QfTl=nn|!spTc`wg*HRArX0iy;7YIh0lT2#Mb9K9X+bz4 zAtK_u0cp%HgSSl|{&|x?g*J@sX)j9covg%_spSaYoHQcZ?UIq@Nm#|aT`@fYnY=A^rgK~Ig-iNa#{^M=4BuOG0E_kND^Prpz zL!{Q#WmbQQl3iAj)BL5lFwGzjYhjfvs-k~_DqoirfunVe&+{5r)$J>M1~w*Ki|kgx z%FOna5G{ya(5d{_1<=! zi}!kx(0mv%Z>)jgn}913B-=1QgV4@T%afh^bCTq*7OeM(IKXhAsq*rBez=jd3R8vq)3er92j z%|QOj5+r~p$(zB1*b*T?OxqBethYjlk}gnnKVJvAeKR*4U^-rnM_517kB0_JjuRVr zSPXxqQ#f|xHARdHbG@Fb){xap70mR!-sG7%H+?bD^MTG2bFLq9fFC1Q3_IYa;dtr5 zm$!%J=lq0&tWTMxDNT|XlsLnC2d)URO;q$9Zt`S)js?VMCYD$m$ypg;ZPe$u85vyd zJ$3_g4=2OoH$E4CDcJ#`-LR6X9{IT`0)>B6Uj^d(WqUu;NC>#rl|E=&(h{JzY(qUz z8|R-#V5E+eiDy=dx%Oa(TvrxaAX;BY6Hz0&?(t6ZeZXs$P}0a+af484t&z@Bkshxv z752&{8Li0Hm4!``;!!nS@S39qG6!BAK&ovEU@f+80m~}%7L;Vw5{qh+CQLGQFlc|I z4Br6kZE2aPZ(OENfiwgM)jl`EYU``X6R@5o_HL?)$#6YegqB;|!H6u^+q8i1+6r!A zz_z!9TL5co4L4iF-K^qPBN&>=EvkWjXg&9qrXoLHatre?d{6$B!Tr&e8}W!IBpy&) z(xsFqm$yCXTB7jea{W|XPq`Zt3^0EKSo3_`85?JFQlM*6O5d0+;Z?Ef+HM7<+F5dO zrQ~Hk-vl1>{r83VYEW_ybPuG1r2(-8kKF>jEIU#iG@?(b;fhT{1KkDCOx z6z8%Xw-zO$+AXqQTLv`A4yOUe_t&`P4H?g}p6?u)rlHGB7fzGz)1gZ}VKVyV#5tG#dcQZFl(6WB-sHDKtK%blkAS?@f8C2kKU z@ylD;)>a=wi3s-xzPU=dPS`z^=M?qPsTa4_Hxq0;Fjd<|KQ=21CKubfjoaLiI!9|$ zy7k*);T(b)Rw0lMOK1;Rw1|I>0C%YVLHn}0pw{+e05vHX$k<)lHkoqJHYRY`-&03@ zUH&R8Ug`b~`{9B_2dm$yv}kFNhsO8@+6LZj@jUUBl58vHklxC)#L{3`W-Dh`mcG)m zA{M<~E^$x`;>EW(%Qq%@n$IWsUrwuE%VA-|!=q_C%{ktrY&P<1aeRNU|NBc{9G;vU ze!hQtynFa?|M(hwX7akG%nus=$cy@owb7A|BnP=LJguhVp}8b+iD=Xd;QLGa#9clv zXz#MZryv%BbIs55)3dYuAZrWSj%`kBd43=ojNTwu~w)hrD5;LAqaA+geaosyTlMXBOK((~TzwmEHE9 zlo;zOqS^n>fSq7jOGjlTrC-KIQH2FD!&poGrzaUn`-U zU!gM^CG ze`_h9>8pA#(F7VB3{UobTJv;c;NA;b>Lmc6jpj*I_m@YsVGNw2-O zL(P%Prw|CpJ+>2g$xgs)LK=TGCoq+)t@|t49*tX*>jAkC zPA(SaaB?xl7u^vE|7NM)49bk8GD%sWLt#DCn%dYaw2i&uR@%S@c2PVu@iOMMfcp{aOBY?yp|=FsL-~fV5wKXv>5-W^ z&iesi_ibY_%?fMZO#m%!kEcdvhI7JG=0Cp3Us|)SyhH=3coX_CMo~cg>$+Iu4TCvU zT)?6FdY1tN6j(dxV^jT-gdfw_wTBI_rv~) z{T`Ta$me9A5tH#_+}4)*pv505_%S{Q2?znpKMlc?L#_Ig#|x|hEPStR!@9^o>ZFVA z*yexgmF>-PoMBAJ{IBkgus5z6_8BDp!&4E`J2;-!0TQbCK(}^KF;=t|CIkrGcCXum z_O80uP7G9jJ9ZqOlQ{1^-}RLV5Q1Lf*nWvO&cKz_!Z@7%<(GsRzo z{9*|Rm#b)xg!hKr0WOHJtvi`(pk)Jlxj$#yb+zy8{k+79z2~*t@XVVtmu2$m{EfSE zHZPX+<=1YBTb^|>!@TFa{|Fkfy?wlZRREOX1bvgw-++wIW^hN0M+#24>m4{X@x6a| z`~=6z@uNpoKOr_cPnTdnX+n96ZdG4$G*Mty0YPUfVL5dYw+sztQcELO#?S9ya7$6F zjoh2Se1>JsX5}(lv9;^kkaGZK&|LTnrZ67i556BXz#tjNuBV1&;*3Hb)9ou41F_6? zm#s&LHdvxom0TO9t+@k;1{t1a)hB;DbW>8!C^S;gwxXyUQ9LtHM61rO(caj*HC1q$dxH-Rs$fdNJD&VQ;8t>aZfbshNgZ-1k_uhYv!7zRp zU9k@lnGfLFi9vS2F?qv$@M26WZL{#pf!xV`1#8zi^q86$sDqw$80s_0i-U!2eFgn` zMwbc6$rMdD6(C}pTl}CizAniYc+i3uELqm$i(&CMbDA2dUtC{2uUFz=kFNLu1P=T0 z%JpNiC+MT=xn7V6{P z(E>aO%@w~9f@KcHB+Pds2<48QV0H(561>ahK!N{MxxK6P7;9Ywy)HjGaQ8TWrG>Xd zj(D|#w-nPlz5%1tgyi3|<3FS5tzQp+fODdQqm%FUPhm(r-8){up4tlt;zVDAf@8sy z#2BG|fJpaG_eF|(FsA^+oO@p&Y5IY$=Yq5Py5k`um^h{Ut9 z3P{d>ic2lzP&s|(In&P)1i*)X*kuemg$>xW*!lVpQt}tij-Nh0*nyvZqTY#4t29Ab zEBKthpESN>?m+C`?t zkI8cP4Dv|cZY!GvJu;`#QJt(Bl|49b8Hq=evO8d_#)k(xBQt3bByV9&tm;Fgkr-Yh zhMJFe`#Cm7)FrYG>*O(zbAeJ&+%(^NvBV@xEs;;~=% z(N$rbL;Shi2&@4n+hU1;*6D+f|3>DoUwqyRV-=wXA4!aa&1iRcV6!+q{8%C-beq^9 zbUxZYUl5Fa!tn6CvoiJ?pSKDb!DW|&hj++KJ(e(Q?YQ+p?)dC~Vy6xA>pgfz*?Q=) zq>JdR#!1}7Dqashnt(mN4aSAnhu(n!e$(iP%SFoBhly|b**%j;_%IXkYb17o$cF(& zpCa^TfW_T=HXe8Hjn3rmJv*01N$!p>%3ZrG?;B-#e|%ZqSF+SM6q>VCebehiX}yHB zci!_z1KA0KbMLKxb6CSqk3xd_1<=)`&or}j?7bxIPYj-9dl-cF?nhzR)U2Yv)*rDM zi0>RME)m6KRgFH$EZmz!{f&IUKKD;D7Gnf8*5ru1%1X zzc|XqB2;2G%2`=gZ}JJzK=yJ106o#~LI@Fj<7%=P)XIqKpZJ=PSCZTk)gc zlI~CdJ3QxquuNmB${7F)sYBu850V1L|1jse$j8%5d}D`BZ>6mz>V9fPA}>^)TnKvb+%QQ@h6oC zvuK5$RCHD6f*AeIDU5MaNhCU|hK!;TZzGNhLlszm1qDlk5tW~K$aQ0%iM?L;NFink zYM9#ofwIM&(m-E?Gy_vH6pbTX}$t|m5 zQNM(B{|fNU!~!H&4D6T-K#noFGLZI|x#uI>(Y1PSgkC6?%cuI$-+N=dqm z3$Sr_;JXnTjG+yH=HJl)ioqRK4QTg%7n{R>4E|CP)hdw(81OkHrCL3t+PZ=CeM^mQ zw~vfa-Q{+2+hFQVRVVc6jITI?wu~q#ZOK*-xSpai(G%UkrX>!P<$fC-i4grO8nR*N z`<6O_ZoNC%CWeShMNMl;9$>%=8JB8(k!tfE(gSbS)gZ3Xa1E&qrGjWB7lhwH0@8MW zJ5@k_?qGotv?Y;H-JX_boyh_N^o&uuaW^0+rIR>(vj5=m;XzTNfzHADWF>;Ue_J+- z77E()<<(@kqd-Fa)F6o4ksC(U*XOPmu(_nafx<4y$ER}gI5pi*=zO7CKq@}P<3RhQ zKJoMZ?Xs>V8^nzBxgU#2Axksy8|G<$YG-CI7Bfx9p@C-pJGpkV?_6(g4RpneFpO=8 zK3PINQdXPDJO-PD*Sms2T}rntotTXJ6dIhvnw+zgEf@#5(B@2@ht%jAMq?z5%acLD zqm|r(YLGmK1tc`}4Viqy?6eD=?~)d}Nl`*$+S)nP*?%P1$!$c4trK*x3R5C~#}>a1 zR?w6EqHXXx`HZe-`@7x?`1h)DcL<&RCfC=F7W4|`i&OC%pydBp**lH>smb z<84j&8&?Hl*l5*v7l__>myGbL5dH36$mPOONucRFR!)f{ndKU30dcHLa;>bJBuzVi+)gr3XSGc| zwH8-LqR9$JBgiqvpEPt}K3mMKPLVjUNfLaA6C=YEI%Op1zjN1bKY&S4V2fA=`b~u# ztmwB?PI%tk`*nXlcT1GSnMLgqP`{vb0#AMXGP#yu;`Z~lh&k(#j-#DeW-`@FSegcs zM7fp>xTa_`0?Nizg{4)0PGMD4)PQ)Ytzdr{oXA-b8!M%;xi{@%8FY~ za;>NrMHkZ?y3|HE<@C7;Rm`HB;7l{<>Nan5n>Ryk{?u(a>2CLb>ldMn)ucDY#5o^) z3fXd9a$Nez+#X!8m^8poS0)|su>D%#f!?Mb$lKLP!>J;FlPJ#tKl1*Ad-R*1_cke# zd+gh!KJG1Wo6_85xqFI+`Jx3R?qPnI9v1Mq3G>yTQ&sebOd}eZ#{ZFfh8eo2b@mqo z`Mi3#TzQ}};g(ThTYF0f?Mzq0@3CC zX!~GZ%n2#{Na^GUo}iSW*FE^+V9@ZX=KJ^~7$(yj)(cV-qQVo0uQsKDR(kd7Sx#62Ea? zpV#TxLKUZYz;#p7Jm|N~^zx}QK8O)7SStEc%{EjluMWxXlDP6zm@WPp@fDH@0XX5j zko=^K5i+gb?LxnGrkcyloNp=?S^plR+gj69^H$lg<(8ny+hxPH8>wY-u_Jh`E`AbS z%Q#=ETM1=gz+c_MnBT1hr?8*jI}LsarFtL;#-_axEECfoAi%{d$q!%rfV?9=mN zc$wX)Z@0IPTEs6W(*i?n(k7FsbI3ZOidQuwCTrY(SW$HB*@s`P8s5LlE<~jYq zkZej6|i!H$&n_ytp`ni;7&A%Ju~xV-8wF7oGzjq}!x3 zJck{Bokt}GwkWkp=ew^Ypn@M`V8MI|zZ-tt1L4y^9!UtuF+VONp}cDi`IOKBTn_@!8)v|?wi~E|U1-UMN=pm3A;9@kz7m!}=;+i-mZUtCv->I<=tYZH^Odj#2w$ryT1R$&M*9!?zMxVwXq^GM`^v(WISgDWQ(+a z*!tXs37F`3%zZSK0r$xmmhaH*x~CYNKQb*XbCcI6w-Wxiyx#kH!LwCrdTfNZr?RR7 z!DkOArR^5yltb-y_zMTjGW(TTQ&&OLq@Qd(1?|#qT82vlcbKWmdPsEDy!GxXN*BU0 zya6r{ssP}LRfh-Pz3qOzHeIcq$3*OZIGJ&=G-nm5Yo=tcUBV4y`2T$BF1BIg3$V^C zlK{PzyIgg4 + + + + + +
    +
    + +
    +
    +
    +
    + +
    +

    Module Airbase

    + +

    AIRBASE Class

    + +

    AIRBASE class

    +

    The AIRBASE class is a wrapper class to handle the DCS Airbase objects:

    + +
      +
    • Support all DCS Airbase APIs.
    • +
    + + +
      +
    • Enhance with Airbase specific APIs not in the DCS Airbase API set.
    • +
    + + +

    AIRBASE reference methods

    +

    For each DCS Airbase object alive within a running mission, a AIRBASE wrapper object (instance) will be created within the _DATABASE object. +This is done at the beginning of the mission (when the mission starts).

    + +

    The AIRBASE class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +using the DCS Airbase or the DCS AirbaseName.

    + +

    Another thing to know is that AIRBASE objects do not "contain" the DCS Airbase object. +The AIRBASE methods will reference the DCS Airbase object by name when it is needed during API execution. +If the DCS Airbase object does not exist or is nil, the AIRBASE methods will return nil and log an exception in the DCS.log file.

    + +

    The AIRBASE class provides the following functions to retrieve quickly the relevant AIRBASE instance:

    + +
      +
    • AIRBASE.Find(): Find a AIRBASE instance from the _DATABASE object using a DCS Airbase object.
    • +
    • AIRBASE.FindByName(): Find a AIRBASE instance from the _DATABASE object using a DCS Airbase name.
    • +
    + +

    IMPORTANT: ONE SHOULD NEVER SANATIZE these AIRBASE OBJECT REFERENCES! (make the AIRBASE object references nil).

    + +

    DCS AIRBASE APIs

    +

    The DCS Airbase APIs are used extensively within MOOSE. The AIRBASE class has for each DCS Airbase API a corresponding method. +To be able to distinguish easily in your code the difference between a AIRBASE API call and a DCS Airbase API call, +the first letter of the method is also capitalized. So, by example, the DCS Airbase method DCSAirbase#Airbase.getName() +is implemented in the AIRBASE class as AIRBASE.GetName().

    + +

    More functions will be added

    +

    During the MOOSE development, more functions will be added.

    + + +

    Global(s)

    + + + + + +
    AIRBASE + +
    +

    Type AIRBASE

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AIRBASE.CategoryName + +
    AIRBASE.ClassName + +
    AIRBASE:Find(DCSAirbase) +

    Finds a AIRBASE from the _DATABASE using a DCSAirbase object.

    +
    AIRBASE:FindByName(AirbaseName) +

    Find a AIRBASE in the _DATABASE using the name of an existing DCS Airbase.

    +
    AIRBASE:GetCallSign() +

    Returns the Airbase's callsign - the localized string.

    +
    AIRBASE:GetCategoryName() +

    Returns the DCS Airbase category name as defined within the DCS Airbase Descriptor.

    +
    AIRBASE:GetCoalition() +

    Returns coalition of the Airbase.

    +
    AIRBASE:GetCountry() +

    Returns country of the Airbase.

    +
    AIRBASE:GetDCSAirbase() + +
    AIRBASE:GetDesc() +

    Returns unit descriptor.

    +
    AIRBASE:GetID() +

    Returns the unit's unique identifier.

    +
    AIRBASE:GetName() +

    Returns DCS Airbase object name.

    +
    AIRBASE:GetPointVec2() +

    Returns the DCSTypes#Vec2 vector indicating the point in 2D of the DCS Airbase within the mission.

    +
    AIRBASE:GetTypeName() +

    Returns the type name of the DCS Airbase.

    +
    AIRBASE:IsAlive() +

    Returns if the airbase is alive.

    +
    AIRBASE:Register(DCSAirbase, Database, AirbaseName) +

    Create a new AIRBASE from DCSAirbase.

    +
    + +

    Global(s)

    +
    +
    + + #AIRBASE + +AIRBASE + +
    +
    + + + +
    +
    +

    Type Airbase

    + +

    Type AIRBASE

    + +

    The AIRBASE class

    + +

    Field(s)

    +
    +
    + + + +AIRBASE.CategoryName + +
    +
    + + + +
    +
    +
    +
    + + #string + +AIRBASE.ClassName + +
    +
    + + + +
    +
    +
    +
    + + +AIRBASE:Find(DCSAirbase) + +
    +
    + +

    Finds a AIRBASE from the _DATABASE using a DCSAirbase object.

    + +

    Parameter

    + +

    Return value

    + +

    Airbase#AIRBASE: +self

    + +
    +
    +
    +
    + + +AIRBASE:FindByName(AirbaseName) + +
    +
    + +

    Find a AIRBASE in the _DATABASE using the name of an existing DCS Airbase.

    + +

    Parameter

    +
      +
    • + +

      #string AirbaseName : +The Airbase Name.

      + +
    • +
    +

    Return value

    + +

    Airbase#AIRBASE: +self

    + +
    +
    +
    +
    + + +AIRBASE:GetCallSign() + +
    +
    + +

    Returns the Airbase's callsign - the localized string.

    + +

    Return values

    +
      +
    1. + +

      #string: +The Callsign of the Airbase.

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:GetCategoryName() + +
    +
    + +

    Returns the DCS Airbase category name as defined within the DCS Airbase Descriptor.

    + +

    Return value

    + +

    #string: +The DCS Airbase Category Name

    + +
    +
    +
    +
    + + +AIRBASE:GetCoalition() + +
    +
    + +

    Returns coalition of the Airbase.

    + +

    Return values

    +
      +
    1. + +

      DCSCoalitionObject#coalition.side: +The side of the coalition.

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:GetCountry() + +
    +
    + +

    Returns country of the Airbase.

    + +

    Return values

    +
      +
    1. + +

      DCScountry#country.id: +The country identifier.

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:GetDCSAirbase() + +
    +
    + + + +
    +
    +
    +
    + + +AIRBASE:GetDesc() + +
    +
    + +

    Returns unit descriptor.

    + + +

    Descriptor type depends on unit category.

    + +

    Return values

    +
      +
    1. + +

      DCSAirbase#Airbase.Desc: +The Airbase descriptor.

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:GetID() + +
    +
    + +

    Returns the unit's unique identifier.

    + +

    Return values

    +
      +
    1. + +

      DCSAirbase#Airbase.ID: +Airbase ID

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:GetName() + +
    +
    + +

    Returns DCS Airbase object name.

    + + +

    The function provides access to non-activated units too.

    + +

    Return values

    +
      +
    1. + +

      #string: +The name of the DCS Airbase.

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:GetPointVec2() + +
    +
    + +

    Returns the DCSTypes#Vec2 vector indicating the point in 2D of the DCS Airbase within the mission.

    + +

    Return values

    +
      +
    1. + +

      DCSTypes#Vec2: +The 2D point vector of the DCS Airbase.

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:GetTypeName() + +
    +
    + +

    Returns the type name of the DCS Airbase.

    + +

    Return values

    +
      +
    1. + +

      #string: +The type name of the DCS Airbase.

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:IsAlive() + +
    +
    + +

    Returns if the airbase is alive.

    + +

    Return values

    +
      +
    1. + +

      #boolean: +true if Airbase is alive.

      + +
    2. +
    3. + +

      #nil: +The DCS Airbase is not existing or alive.

      + +
    4. +
    +
    +
    +
    +
    + + +AIRBASE:Register(DCSAirbase, Database, AirbaseName) + +
    +
    + +

    Create a new AIRBASE from DCSAirbase.

    + +

    Parameters

    + +

    Return value

    + +

    Airbase#AIRBASE:

    + + +
    +
    + +
    + +
    + + diff --git a/Moose Training/Documentation/Base.html b/Moose Training/Documentation/Base.html index c35a7adac..b6d89a410 100644 --- a/Moose Training/Documentation/Base.html +++ b/Moose Training/Documentation/Base.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/CARGO.html b/Moose Training/Documentation/CARGO.html index f7ca9c91e..887fddee7 100644 --- a/Moose Training/Documentation/CARGO.html +++ b/Moose Training/Documentation/CARGO.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/CleanUp.html b/Moose Training/Documentation/CleanUp.html index c22bc448d..09d6b19f7 100644 --- a/Moose Training/Documentation/CleanUp.html +++ b/Moose Training/Documentation/CleanUp.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/Client.html b/Moose Training/Documentation/Client.html index 7ad2cd35e..25c6e929e 100644 --- a/Moose Training/Documentation/Client.html +++ b/Moose Training/Documentation/Client.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSAirbase.html b/Moose Training/Documentation/DCSAirbase.html index c5ad209a8..2d2c35185 100644 --- a/Moose Training/Documentation/DCSAirbase.html +++ b/Moose Training/Documentation/DCSAirbase.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSCoalitionObject.html b/Moose Training/Documentation/DCSCoalitionObject.html index d7a968f25..1394b09b8 100644 --- a/Moose Training/Documentation/DCSCoalitionObject.html +++ b/Moose Training/Documentation/DCSCoalitionObject.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSCommand.html b/Moose Training/Documentation/DCSCommand.html index 5f433a2f3..ffb46f8cb 100644 --- a/Moose Training/Documentation/DCSCommand.html +++ b/Moose Training/Documentation/DCSCommand.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSController.html b/Moose Training/Documentation/DCSController.html index 228983cdf..89cb04d28 100644 --- a/Moose Training/Documentation/DCSController.html +++ b/Moose Training/Documentation/DCSController.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSGroup.html b/Moose Training/Documentation/DCSGroup.html index d5df1b04a..c46f4755e 100644 --- a/Moose Training/Documentation/DCSGroup.html +++ b/Moose Training/Documentation/DCSGroup.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSObject.html b/Moose Training/Documentation/DCSObject.html index d536b3e22..08f490b23 100644 --- a/Moose Training/Documentation/DCSObject.html +++ b/Moose Training/Documentation/DCSObject.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSTask.html b/Moose Training/Documentation/DCSTask.html index adf8812c1..3950afc35 100644 --- a/Moose Training/Documentation/DCSTask.html +++ b/Moose Training/Documentation/DCSTask.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSTypes.html b/Moose Training/Documentation/DCSTypes.html index 56ccd79ff..8f4ec29be 100644 --- a/Moose Training/Documentation/DCSTypes.html +++ b/Moose Training/Documentation/DCSTypes.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSUnit.html b/Moose Training/Documentation/DCSUnit.html index e40060e37..c55ecc3e4 100644 --- a/Moose Training/Documentation/DCSUnit.html +++ b/Moose Training/Documentation/DCSUnit.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSWorld.html b/Moose Training/Documentation/DCSWorld.html index 13b3fe634..8e993da85 100644 --- a/Moose Training/Documentation/DCSWorld.html +++ b/Moose Training/Documentation/DCSWorld.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCStimer.html b/Moose Training/Documentation/DCStimer.html index b05ff053c..00f626d06 100644 --- a/Moose Training/Documentation/DCStimer.html +++ b/Moose Training/Documentation/DCStimer.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DEPLOYTASK.html b/Moose Training/Documentation/DEPLOYTASK.html index 53467e608..1fa64e415 100644 --- a/Moose Training/Documentation/DEPLOYTASK.html +++ b/Moose Training/Documentation/DEPLOYTASK.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DESTROYBASETASK.html b/Moose Training/Documentation/DESTROYBASETASK.html index aa3bef726..8de686c17 100644 --- a/Moose Training/Documentation/DESTROYBASETASK.html +++ b/Moose Training/Documentation/DESTROYBASETASK.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DESTROYGROUPSTASK.html b/Moose Training/Documentation/DESTROYGROUPSTASK.html index baa779ad1..0c9455cf6 100644 --- a/Moose Training/Documentation/DESTROYGROUPSTASK.html +++ b/Moose Training/Documentation/DESTROYGROUPSTASK.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DESTROYRADARSTASK.html b/Moose Training/Documentation/DESTROYRADARSTASK.html index cab844e6f..c88de6600 100644 --- a/Moose Training/Documentation/DESTROYRADARSTASK.html +++ b/Moose Training/Documentation/DESTROYRADARSTASK.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DESTROYUNITTYPESTASK.html b/Moose Training/Documentation/DESTROYUNITTYPESTASK.html index f5ce3a192..17f188b27 100644 --- a/Moose Training/Documentation/DESTROYUNITTYPESTASK.html +++ b/Moose Training/Documentation/DESTROYUNITTYPESTASK.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/Database.html b/Moose Training/Documentation/Database.html index 211aacd2c..d73e87dd4 100644 --- a/Moose Training/Documentation/Database.html +++ b/Moose Training/Documentation/Database.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/Escort.html b/Moose Training/Documentation/Escort.html index 040d46ca3..1b3f58c93 100644 --- a/Moose Training/Documentation/Escort.html +++ b/Moose Training/Documentation/Escort.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/Event.html b/Moose Training/Documentation/Event.html index 1591464a5..8d0022235 100644 --- a/Moose Training/Documentation/Event.html +++ b/Moose Training/Documentation/Event.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/GOHOMETASK.html b/Moose Training/Documentation/GOHOMETASK.html index be69f3990..8290602af 100644 --- a/Moose Training/Documentation/GOHOMETASK.html +++ b/Moose Training/Documentation/GOHOMETASK.html @@ -17,6 +17,7 @@ index
      +
    • Airbase
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/Group.html b/Moose Training/Documentation/Group.html index 4e957bb03..a18b037f6 100644 --- a/Moose Training/Documentation/Group.html +++ b/Moose Training/Documentation/Group.html @@ -17,6 +17,7 @@ index
    @@ -950,6 +1047,346 @@ So all event listeners will catch the destroy event of this DCS Group.

    + +GROUP:EnRouteTaskAWACS() + +
    +
    + +

    (AIR) Aircraft will act as an AWACS for friendly units (will provide them with information about contacts).

    + + +

    No parameters.

    + +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:EnRouteTaskEWR() + +
    +
    + +

    (GROUND) Ground unit (EW-radar) will act as an EWR for friendly units (will provide them with information about contacts).

    + + +

    No parameters.

    + +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:EnRouteTaskEngageGroup(AttackGroup, Priority, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit) + +
    +
    + +

    (AIR) Engaging a group.

    + + +

    The task does not assign the target group to the unit/group to attack now; it just allows the unit/group to engage the target group as well as other assigned targets.

    + +

    Parameters

    +
      +
    • + +

      Group#GROUP AttackGroup : +The Group to be attacked.

      + +
    • +
    • + +

      #number Priority : +All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first.

      + +
    • +
    • + +

      #number WeaponType : +(optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.WeaponExpend WeaponExpend : +(optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion.

      + +
    • +
    • + +

      #number AttackQty : +(optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo.

      + +
    • +
    • + +

      DCSTypes#Azimuth Direction : +(optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction.

      + +
    • +
    • + +

      DCSTypes#Distance Altitude : +(optional) Desired attack start altitude. Group/aircraft will make its attacks from the altitude. If the altitude is too low or too high to use weapon aircraft/group will choose closest altitude to the desired attack start altitude. If the desired altitude is defined group/aircraft will not attack from safe altitude.

      + +
    • +
    • + +

      #boolean AttackQtyLimit : +(optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks.

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:EnRouteTaskEngageTargets(Distance, <, Priority, TargetTypes) + +
    +
    + +

    (AIR) Engaging targets of defined types.

    + +

    Parameters

    +
      +
    • + +

      DCSTypes#Distance Distance : +Maximal distance from the target to a route leg. If the target is on a greater distance it will be ignored.

      + +
    • +
    • + +

      #list < : +DCSTypes#AttributeName> TargetTypes Array of target categories allowed to engage.

      + +
    • +
    • + +

      #number Priority : +All enroute tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first.

      + +
    • +
    • + +

      TargetTypes :

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:EnRouteTaskEngageUnit(AttackUnit, Priority, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack) + +
    +
    + +

    (AIR) Attack the Unit.

    + +

    Parameters

    +
      +
    • + +

      Unit#UNIT AttackUnit : +The UNIT.

      + +
    • +
    • + +

      #number Priority : +All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first.

      + +
    • +
    • + +

      #number WeaponType : +(optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.WeaponExpend WeaponExpend : +(optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion.

      + +
    • +
    • + +

      #number AttackQty : +(optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo.

      + +
    • +
    • + +

      DCSTypes#Azimuth Direction : +(optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction.

      + +
    • +
    • + +

      #boolean AttackQtyLimit : +(optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks.

      + +
    • +
    • + +

      #boolean GroupAttack : +(optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft.

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:EnRouteTaskFAC(Radius, Priority) + +
    +
    + +

    (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose a targets (enemy ground group) around as well as other assigned targets.

    + + +

    The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +If the task is assigned to the group lead unit will be a FAC.

    + +

    Parameters

    +
      +
    • + +

      DCSTypes#Distance Radius : + The maximal distance from the FAC to a target.

      + +
    • +
    • + +

      #number Priority : +All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first.

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:EnRouteTaskFAC_EngageGroup(AttackGroup, Priority, WeaponType, Designation, Datalink) + +
    +
    + +

    (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose the target (enemy ground group) as well as other assigned targets.

    + + +

    The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +If the task is assigned to the group lead unit will be a FAC.

    + +

    Parameters

    +
      +
    • + +

      Group#GROUP AttackGroup : +Target GROUP.

      + +
    • +
    • + +

      #number Priority : +All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first.

      + +
    • +
    • + +

      #number WeaponType : +Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.Designation Designation : +(optional) Designation type.

      + +
    • +
    • + +

      #boolean Datalink : +(optional) Allows to use datalink to send the target information to attack aircraft. Enabled by default.

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:EnRouteTaskTanker() + +
    +
    + +

    (AIR) Aircraft will act as a tanker for friendly units.

    + + +

    No parameters.

    + +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + GROUP:Find(DCSGroup) @@ -1028,7 +1465,7 @@ The CallSign of the first DCS Unit of the DCS Group.

    -

    Returns category of the DCS Group.

    +

    Returns category of the DCS Group.

    Return value

    @@ -1095,7 +1532,7 @@ The country identifier.

  • #nil: -The DCS Group is not existing or alive.

    +The DCS Group is not existing or alive.

  • @@ -1212,7 +1649,7 @@ The identifier of the DCS Group.

    -

    If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged.

    +

    If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged.

    Return value

    @@ -1350,7 +1787,7 @@ Current Vec3 point of the first DCS Unit of the DCS Group.

    Returns current size of the DCS Group.

    -

    If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed.

    +

    If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed.

    Return value

    @@ -2174,7 +2611,7 @@ A table of Route Points.

    Return value

    #GROUP: -self

    +self

    @@ -2239,20 +2676,113 @@ self

    -GROUP:TaskAttackGroup(AttackGroup) +GROUP:TaskAttackGroup(AttackGroup, WeaponType, WeaponExpend, AttackQty, Direction, Altitude, AttackQtyLimit)
    -

    Attack a Group.

    +

    (AIR) Attack a Group.

    -

    Parameter

    +

    Parameters

    • Group#GROUP AttackGroup : The Group to be attacked.

      +
    • +
    • + +

      #number WeaponType : +(optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.WeaponExpend WeaponExpend : +(optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion.

      + +
    • +
    • + +

      #number AttackQty : +(optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo.

      + +
    • +
    • + +

      DCSTypes#Azimuth Direction : +(optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction.

      + +
    • +
    • + +

      DCSTypes#Distance Altitude : +(optional) Desired attack start altitude. Group/aircraft will make its attacks from the altitude. If the altitude is too low or too high to use weapon aircraft/group will choose closest altitude to the desired attack start altitude. If the desired altitude is defined group/aircraft will not attack from safe altitude.

      + +
    • +
    • + +

      #boolean AttackQtyLimit : +(optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks.

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +

    e)!P0~1& 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 delta 102294 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
    +
    +
    + + +GROUP:TaskAttackMapObject(PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack) + +
    +
    + +

    (AIR) Attacking the map object (building, structure, e.t.c).

    + +

    Parameters

    +
      +
    • + +

      DCSTypes#Vec2 PointVec2 : +2D-coordinates of the point the map object is closest to. The distance between the point and the map object must not be greater than 2000 meters. Object id is not used here because Mission Editor doesn't support map object identificators.

      + +
    • +
    • + +

      #number WeaponType : +(optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.WeaponExpend WeaponExpend : +(optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion.

      + +
    • +
    • + +

      #number AttackQty : +(optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo.

      + +
    • +
    • + +

      DCSTypes#Azimuth Direction : +(optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction.

      + +
    • +
    • + +

      #boolean GroupAttack : +(optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft.

      +

    Return value

    @@ -2266,24 +2796,169 @@ The DCS task structure.

    -GROUP:TaskAttackUnit(The, AttackUnit) +GROUP:TaskAttackUnit(AttackUnit, WeaponType, WeaponExpend, AttackQty, Direction, AttackQtyLimit, GroupAttack)
    -

    Attack the Unit.

    +

    (AIR) Attack the Unit.

    Parameters

    • -

      Unit#UNIT The : -unit.

      +

      Unit#UNIT AttackUnit : +The unit.

    • -

      AttackUnit :

      +

      #number WeaponType : +(optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.WeaponExpend WeaponExpend : +(optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion.

      + +
    • +
    • + +

      #number AttackQty : +(optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo.

      + +
    • +
    • + +

      DCSTypes#Azimuth Direction : +(optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction.

      + +
    • +
    • + +

      #boolean AttackQtyLimit : +(optional) The flag determines how to interpret attackQty parameter. If the flag is true then attackQty is a limit on maximal attack quantity for "AttackGroup" and "AttackUnit" tasks. If the flag is false then attackQty is a desired attack quantity for "Bombing" and "BombingRunway" tasks.

      + +
    • +
    • + +

      #boolean GroupAttack : +(optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft.

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:TaskBombing(PointVec2, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack) + +
    +
    + +

    (AIR) Delivering weapon at the point on the ground.

    + +

    Parameters

    +
      +
    • + +

      DCSTypes#Vec2 PointVec2 : +2D-coordinates of the point to deliver weapon at.

      + +
    • +
    • + +

      #number WeaponType : +(optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.WeaponExpend WeaponExpend : +(optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion.

      + +
    • +
    • + +

      #number AttackQty : +(optional) Desired quantity of passes. The parameter is not the same in AttackGroup and AttackUnit tasks.

      + +
    • +
    • + +

      DCSTypes#Azimuth Direction : +(optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction.

      + +
    • +
    • + +

      #boolean GroupAttack : +(optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft.

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:TaskBombingRunway(Airbase, WeaponType, WeaponExpend, AttackQty, Direction, GroupAttack) + +
    +
    + +

    (AIR) Delivering weapon on the runway.

    + +

    Parameters

    +
      +
    • + +

      Airbase#AIRBASE Airbase : +Airbase to attack.

      + +
    • +
    • + +

      #number WeaponType : +(optional) Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.WeaponExpend WeaponExpend : +(optional) Determines how much weapon will be released at each attack. If parameter is not defined the unit / group will choose expend on its own discretion.

      + +
    • +
    • + +

      #number AttackQty : +(optional) This parameter limits maximal quantity of attack. The aicraft/group will not make more attack than allowed even if the target group not destroyed and the aicraft/group still have ammo. If not defined the aircraft/group will attack target until it will be destroyed or until the aircraft/group will run out of ammo.

      + +
    • +
    • + +

      DCSTypes#Azimuth Direction : +(optional) Desired ingress direction from the target to the attacking aircraft. Group/aircraft will make its attacks from the direction. Of course if there is no way to attack from the direction due the terrain group/aircraft will choose another direction.

      + +
    • +
    • + +

      #boolean GroupAttack : +(optional) Flag indicates that the target must be engaged by all aircrafts of the group. Has effect only if the task is assigned to a group, not to a single aircraft.

    @@ -2366,9 +3041,8 @@ CSTask#Task> DCSTasks

  • -

    #number lastWayPoint :

    - -

    return DCSTask#Task

    +

    #number lastWayPoint : +return DCSTask#Task

  • @@ -2480,13 +3154,132 @@ The DCS task structure

    + +GROUP:TaskEscort(EscortGroup, PointVec3, LastWaypointIndex, EngagementDistanceMax, <, FollowGroup, EngagementDistance, TargetTypes) + +
    +
    + +

    (AIR) Escort another airborne group.

    + + +

    The unit / group will follow lead unit of another group, wingmens of both groups will continue following their leaders. +The unit / group will also protect that group from threats of specified types.

    + +

    Parameters

    +
      +
    • + +

      Group#GROUP EscortGroup : +The group to be escorted.

      + +
    • +
    • + +

      DCSTypes#Vec3 PointVec3 : +Position of the unit / lead unit of the group relative lead unit of another group in frame reference oriented by course of lead unit of another group. If another group is on land the unit / group will orbit around.

      + +
    • +
    • + +

      #number LastWaypointIndex : +Detach waypoint of another group. Once reached the unit / group Follow task is finished.

      + +
    • +
    • + +

      #number EngagementDistanceMax : +Maximal distance from escorted group to threat. If the threat is already engaged by escort escort will disengage if the distance becomes greater than 1.5 * engagementDistMax.

      + +
    • +
    • + +

      #list < : +CSTypes#AttributeName> TargetTypes Array of AttributeName that is contains threat categories allowed to engage.

      + +
    • +
    • + +

      FollowGroup :

      + +
    • +
    • + +

      EngagementDistance :

      + +
    • +
    • + +

      TargetTypes :

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + + +GROUP:TaskFAC_AttackGroup(AttackGroup, WeaponType, Designation, Datalink) + +
    +
    + +

    (AIR + GROUND) The task makes the group/unit a FAC and orders the FAC to control the target (enemy ground group) destruction.

    + + +

    The killer is player-controlled allied CAS-aircraft that is in contact with the FAC. +If the task is assigned to the group lead unit will be a FAC.

    + +

    Parameters

    +
      +
    • + +

      Group#GROUP AttackGroup : +Target GROUP.

      + +
    • +
    • + +

      #number WeaponType : +Bitmask of weapon types those allowed to use. If parameter is not defined that means no limits on weapon usage.

      + +
    • +
    • + +

      DCSTypes#AI.Task.Designation Designation : +(optional) Designation type.

      + +
    • +
    • + +

      #boolean Datalink : +(optional) Allows to use datalink to send the target information to attack aircraft. Enabled by default.

      + +
    • +
    +

    Return value

    + +

    DCSTask#Task: +The DCS task structure.

    + +
    +
    +
    +
    + GROUP:TaskFireAtPoint(The, Radius, PointVec2)
    -

    Fires at a VEC2 point.

    +

    (GROUND) Fire at a VEC2 point until ammunition is finished.

    Parameters

      @@ -2518,6 +3311,49 @@ The DCS task structure.

      + +GROUP:TaskFollow(FollowGroup, PointVec3, LastWaypointIndex) + +
      +
      + +

      (AIR) Following another airborne group.

      + + +

      The unit / group will follow lead unit of another group, wingmens of both groups will continue following their leaders. +If another group is on land the unit / group will orbit around.

      + +

      Parameters

      +
        +
      • + +

        Group#GROUP FollowGroup : +The group to be followed.

        + +
      • +
      • + +

        DCSTypes#Vec3 PointVec3 : +Position of the unit / lead unit of the group relative lead unit of another group in frame reference oriented by course of lead unit of another group. If another group is on land the unit / group will orbit around.

        + +
      • +
      • + +

        #number LastWaypointIndex : +Detach waypoint of another group. Once reached the unit / group Follow task is finished.

        + +
      • +
      +

      Return value

      + +

      DCSTask#Task: +The DCS task structure.

      + +
      +
      +
      +
      + GROUP:TaskFunction(WayPoint, WayPointIndex, FunctionString, FunctionArguments) @@ -2554,13 +3390,31 @@ The DCS task structure.

      + +GROUP:TaskHold() + +
      +
      + +

      (GROUND) Hold ground group from moving.

      + +

      Return value

      + +

      DCSTask#Task: +The DCS task structure.

      + +
      +
      +
      +
      + GROUP:TaskHoldPosition(Duration)
      -

      Hold position at the current position of the first unit of the group.

      +

      (AIR) Hold position at the current position of the first unit of the group.

      Parameter

        @@ -2587,7 +3441,10 @@ self

      -

      Land the group at a Vec2Point.

      +

      (AIR HELICOPTER) Landing at the ground.

      + + +

      For helicopters only.

      Parameters

        @@ -2620,7 +3477,7 @@ self

    -

    Land the group at a @{Zone#ZONE).

    +

    (AIR) Land the group at a @{Zone#ZONE).

    Parameters