From f2407e357a8ececce925b90e790d2bcdb40d9354 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Wed, 15 Jun 2016 06:42:22 +0200 Subject: [PATCH] Updated documentation + small bugfix SCHEDULER. --- Moose Development/Moose/Scheduler.lua | 26 +- .../l10n/DEFAULT/Moose.lua | 20222 +++++++++++++++- Moose Mission Setup/Moose.lua | 20222 +++++++++++++++- .../Moose_Test_AIBALANCER.miz | Bin 20646 -> 139080 bytes .../Moose_Test_AIRBASEPOLICE.miz | Bin 43177 -> 161646 bytes .../Moose_Test_AIRBLANCER_with_Moose.miz | Bin 138928 -> 139099 bytes .../Moose_Test_AIRBLANCER_without_Moose.miz | Bin 138193 -> 138364 bytes .../Moose_Test_BASE/Moose_Test_BASE.miz | Bin 136047 -> 137730 bytes .../Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz | Bin 99743 -> 218177 bytes .../Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz | Bin 35120 -> 153554 bytes .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz | Bin 59150 -> 177589 bytes .../Moose_Test_MISSILETRAINER.miz | Bin 126372 -> 244808 bytes .../Moose_Test_SEAD/MOOSE_Test_SEAD.miz | Bin 25732 -> 144166 bytes .../Moose_Test_SET_CLIENT.miz | Bin 19585 -> 138019 bytes .../Moose_Test_SET_GROUP.miz | Bin 41243 -> 159677 bytes .../Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz | Bin 54982 -> 173416 bytes .../MOOSE_Test_SPAWN_Repeat.miz | Bin 25293 -> 143727 bytes .../MOOSE_Test_TASK_Pickup_and_Deploy.miz | Bin 31894 -> 150328 bytes .../Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz | Bin 40913 -> 159347 bytes .../Moose_Test_ZONE/Moose_Test_ZONE.miz | Bin 20874 -> 139308 bytes .../Moose_Test_ZONE_POLYGON.miz | Bin 21568 -> 140037 bytes .../Moose_Test_ZONE_RADIUS.miz | Bin 21026 -> 139460 bytes .../Moose_Test_ZONE_UNIT.miz | Bin 20900 -> 139334 bytes Moose Training/Documentation/AIBalancer.html | 1 + Moose Training/Documentation/Airbase.html | 1 + .../Documentation/AirbasePolice.html | 246 + Moose Training/Documentation/Base.html | 170 +- Moose Training/Documentation/CARGO.html | 1 + Moose Training/Documentation/CleanUp.html | 1 + Moose Training/Documentation/Client.html | 29 +- 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 | 132 +- Moose Training/Documentation/Escort.html | 58 +- Moose Training/Documentation/Event.html | 1 + Moose Training/Documentation/GOHOMETASK.html | 1 + Moose Training/Documentation/Group.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/Point.html | 1 + Moose Training/Documentation/ROUTETASK.html | 1 + Moose Training/Documentation/STAGE.html | 1 + Moose Training/Documentation/Scheduler.html | 41 +- Moose Training/Documentation/Scoring.html | 1 + Moose Training/Documentation/Sead.html | 1 + Moose Training/Documentation/Set.html | 7 +- Moose Training/Documentation/Spawn.html | 1 + Moose Training/Documentation/Static.html | 1 + .../Documentation/StaticObject.html | 1 + Moose Training/Documentation/TASK.html | 1 + Moose Training/Documentation/Unit.html | 35 + Moose Training/Documentation/Zone.html | 236 +- Moose Training/Documentation/env.html | 1 + Moose Training/Documentation/index.html | 11 +- Moose Training/Documentation/land.html | 34 + Moose Training/Documentation/routines.html | 1 + 75 files changed, 41228 insertions(+), 282 deletions(-) create mode 100644 Moose Training/Documentation/AirbasePolice.html diff --git a/Moose Development/Moose/Scheduler.lua b/Moose Development/Moose/Scheduler.lua index 9c9b232a2..0f164a942 100644 --- a/Moose Development/Moose/Scheduler.lua +++ b/Moose Development/Moose/Scheduler.lua @@ -1,21 +1,21 @@ ---- Models time events calling event handing functions. +--- This module contains the SCHEDULER class. -- --- @{SCHEDULER} class --- =================== --- The @{SCHEDULER} class models time events calling given event handling functions. +-- 1) @{Scheduler#SCHEDULER} class, extends @{Base#BASE} +-- ===================================================== +-- The @{Scheduler#SCHEDULER} class models time events calling given event handling functions. -- --- SCHEDULER constructor --- ===================== +-- 1.1) SCHEDULER constructor +-- -------------------------- -- The SCHEDULER class is quite easy to use: -- --- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. +-- * @{Scheduler#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. -- --- SCHEDULER timer methods --- ======================= +-- SCHEDULER timer stop and start +-- ------------------------------ -- The SCHEDULER can be stopped and restarted with the following methods: -- --- * @{#SCHEDULER.Start}: (Re-)Start the scheduler. --- * @{#SCHEDULER.Start}: Stop the scheduler. +-- * @{Scheduler#SCHEDULER.Start}: (Re-)Start the scheduler. +-- * @{Scheduler#SCHEDULER.Stop}: Stop the scheduler. -- -- @module Scheduler -- @author FlightControl @@ -93,7 +93,9 @@ function SCHEDULER:Stop() self:F2( self.TimeEventObject ) self.Repeat = false - timer.removeFunction( self.ScheduleID ) + if self.ScheduleID then + timer.removeFunction( self.ScheduleID ) + end self.ScheduleID = nil return self 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 a76c94ee8..9c8bf3739 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,43 +1,20211 @@ -env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160614_1700' ) - +env.info( '*** MOOSE STATIC INCLUDE START *** ' ) +env.info( 'Moose Generation Timestamp: 20160615_0641' ) local base = _G Include = {} - -Include.Path = function() - local str = debug.getinfo(2, "S").source - return str:match("(.*/)"):sub(1,-2):gsub("\\","/") +Include.Files = {} +Include.File = function( IncludeFile ) 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() +--- Various routines +-- @module routines +-- @author Flightcontrol + +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 - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath ) - return f() + 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 -Include.ProgramPath = "Scripts/Moose/" -Include.MissionPath = Include.Path() -env.info( "Include.ProgramPath = " .. Include.ProgramPath) -env.info( "Include.MissionPath = " .. Include.MissionPath) +routines.utils.toDegree = function(angle) + return angle*180/math.pi +end -Include.Files = {} +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, MsgTime, "Message" ):ToCoalition( coalition.side.RED ):ToCoalition( coalition.side.BLUE ) +end + +function MessageToRed( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, MsgTime, "To Red Coalition" ):ToCoalition( coalition.side.RED ) +end + +function MessageToBlue( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, MsgTime, "To Blue Coalition" ):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' )) + +--- This module contains the BASE class. +-- +-- 1) @{#BASE} class +-- ================= +-- The @{#BASE} class is the super class for all 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 the **"Saved Games\DCS\Logs"** folder. +-- +-- Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes. +-- +-- 1.1) BASE constructor +-- --------------------- +-- Any class derived from BASE, must use the @{Base#BASE.New) constructor within the @{Base#BASE.Inherit) method. +-- See an example at the @{Base#BASE.New} method how this is done. +-- +-- 1.2) 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. +-- +-- 1.2.1) Tracing functions +-- ------------------------ +-- There are basically 3 types of tracing methods available within BASE: +-- +-- * @{#BASE.F}: Trace the beginning of a function and its given parameters. An F is indicated at column 44 in the DCS.log file. +-- * @{#BASE.T}: Trace further logic within a function giving optional variables or parameters. A T is indicated at column 44 in the DCS.log file. +-- * @{#BASE.E}: Trace an exception within a function giving optional variables or parameters. An E is indicated at column 44 in the DCS.log file. An exception will always be traced. +-- +-- 1.2.2) 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. +-- +-- 1.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 + + + +local _TraceOnOff = true +local _TraceLevel = 1 +local _TraceAll = false +local _TraceClass = {} +local _TraceClassMethod = {} + +local _ClassID = 0 + +--- The BASE Class +-- @type BASE +-- @field ClassName The name of the class. +-- @field ClassID The ID number of the class. +-- @field ClassNameAndID The name of the class concatenated with the ID number of the class. +BASE = { + ClassName = "BASE", + ClassID = 0, + Events = {}, + States = {} +} + +--- 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 +-- -- This declares the constructor of the class TASK, inheriting from BASE. +-- --- TASK constructor +-- -- @param #TASK self +-- -- @param Parameter The parameter of the New constructor. +-- -- @return #TASK self +-- function TASK:New( Parameter ) +-- +-- local self = BASE:Inherit( self, BASE:New() ) +-- +-- self.Variable = Parameter +-- +-- return self +-- end +-- @todo need to investigate if the deepCopy is really needed... Don't think so. +function BASE:New() + local self = routines.utils.deepCopy( self ) -- Create a new self instance + local MetaTable = {} + setmetatable( self, MetaTable ) + self.__index = self + _ClassID = _ClassID + 1 + self.ClassID = _ClassID + self.ClassNameAndID = string.format( '%s#%09d', self.ClassName, self.ClassID ) + return self +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 ) + --local Parent = 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 self.ClassNameAndID +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 + +function BASE:SetState( Object, StateName, State ) + + local ClassNameAndID = Object:GetClassNameAndID() + + if not self.States[ClassNameAndID] then + self.States[ClassNameAndID] = {} + end + self.States[ClassNameAndID][StateName] = State + self:F2( { ClassNameAndID, StateName, State } ) + + return self.States[ClassNameAndID][StateName] +end + +function BASE:GetState( Object, StateName ) + + local ClassNameAndID = Object:GetClassNameAndID() + + if self.States[ClassNameAndID] then + local State = self.States[ClassNameAndID][StateName] + self:F2( { ClassNameAndID, StateName, State } ) + return State + end + + return nil +end + +function BASE:ClearState( Object, StateName ) + + local ClassNameAndID = Object:GetClassNameAndID() + if self.States[ClassNameAndID] then + self.States[ClassNameAndID][StateName] = nil + end +end + +-- Trace section + +-- Log a trace (only shown when trace is on) +-- TODO: Make trace function using variable parameters. + +--- Set trace on or off +-- Note that when trace is off, no debug statement is performed, increasing performance! +-- When Moose is loaded statically, (as one file), tracing is switched off by default. +-- So tracing must be switched on manually in your mission if you are using Moose statically. +-- When moose is loading dynamically (for moose class development), tracing is switched on by default. +-- @param BASE self +-- @param #boolean TraceOnOff Switch the tracing on or off. +-- @usage +-- -- Switch the tracing On +-- BASE:TraceOn( true ) +-- +-- -- Switch the tracing Off +-- BASE:TraceOn( false ) +function BASE:TraceOnOff( TraceOnOff ) + _TraceOnOff = TraceOnOff +end + +--- Set trace level +-- @param #BASE self +-- @param #number Level +function BASE:TraceLevel( Level ) + _TraceLevel = Level + self:E( "Tracing level " .. Level ) +end + +--- Trace all methods in MOOSE +-- @param #BASE self +-- @param #boolean TraceAll true = trace all methods in MOOSE. +function BASE:TraceAll( TraceAll ) + + _TraceAll = TraceAll + + if _TraceAll then + self:E( "Tracing all methods in MOOSE " ) + else + self:E( "Switched off tracing all methods in MOOSE" ) + end +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. This function is private. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:_F( Arguments, DebugInfoCurrentParam, DebugInfoFromParam ) + + if ( _TraceAll == true ) or ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = DebugInfoCurrentParam and DebugInfoCurrentParam or debug.getinfo( 2, "nl" ) + local DebugInfoFrom = DebugInfoFromParam and DebugInfoFromParam or debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceAll == true or _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = 0 + if DebugInfoCurrent.currentline then + LineCurrent = DebugInfoCurrent.currentline + end + 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. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F( Arguments ) + + if _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 1 then + self:_F( Arguments, DebugInfoCurrent, DebugInfoFrom ) + 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 _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 2 then + self:_F( Arguments, DebugInfoCurrent, DebugInfoFrom ) + end + 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 _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 3 then + self:_F( Arguments, DebugInfoCurrent, DebugInfoFrom ) + end + end +end + +--- Trace a function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:_T( Arguments, DebugInfoCurrentParam, DebugInfoFromParam ) + + if ( _TraceAll == true ) or ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = DebugInfoCurrentParam and DebugInfoCurrentParam or debug.getinfo( 2, "nl" ) + local DebugInfoFrom = DebugInfoFromParam and DebugInfoFromParam or debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceAll == true or _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = 0 + if DebugInfoCurrent.currentline then + LineCurrent = DebugInfoCurrent.currentline + end + 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 1. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T( Arguments ) + + if _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 1 then + self:_T( Arguments, DebugInfoCurrent, DebugInfoFrom ) + 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 _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 2 then + self:_T( Arguments, DebugInfoCurrent, DebugInfoFrom ) + end + 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 _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 3 then + self:_T( Arguments, DebugInfoCurrent, DebugInfoFrom ) + end + 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 + + + +--- This module contains the SCHEDULER class. +-- +-- 1) @{Scheduler#SCHEDULER} class, extends @{Base#BASE} +-- ===================================================== +-- The @{Scheduler#SCHEDULER} class models time events calling given event handling functions. +-- +-- 1.1) SCHEDULER constructor +-- -------------------------- +-- The SCHEDULER class is quite easy to use: +-- +-- * @{Scheduler#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. +-- +-- SCHEDULER timer stop and start +-- ------------------------------ +-- The SCHEDULER can be stopped and restarted with the following methods: +-- +-- * @{Scheduler#SCHEDULER.Start}: (Re-)Start the scheduler. +-- * @{Scheduler#SCHEDULER.Stop}: Stop the scheduler. +-- +-- @module Scheduler +-- @author FlightControl + +--- The SCHEDULER class +-- @type SCHEDULER +-- @field #number ScheduleID the ID of the scheduler. +-- @extends Base#BASE +SCHEDULER = { + ClassName = "SCHEDULER", +} + +--- 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 + self.Repeat = false + + 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.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 ) + + if self.RepeatSecondsInterval ~= 0 then + self.Repeat = true + end + self.ScheduleID = 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 + if self.ScheduleID then + timer.removeFunction( self.ScheduleID ) + end + self.ScheduleID = nil + + return self +end + +-- Private Functions + +--- @param #SCHEDULER self +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( { self.TimeEventFunctionArguments, Status, Result, self.StartTime, self.RepeatSecondsInterval, self.RandomizationFactor, self.StopSeconds } ) + + if Status and ( ( Result == nil ) or ( Result and Result ~= false ) ) then + if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then + local ScheduleTime = + timer.getTime() + + self.RepeatSecondsInterval + + math.random( + - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), + ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) + ) + + 0.01 + self:T( { self.TimeEventFunctionArguments, "Repeat:", timer.getTime(), ScheduleTime } ) + return ScheduleTime -- returns the next time the function needs to be called. + else + timer.removeFunction( self.ScheduleID ) + self.ScheduleID = nil + end + else + timer.removeFunction( self.ScheduleID ) + self.ScheduleID = nil + end + + return nil +end + + + + + + + + + + + + + + + + +--- The EVENT class models an efficient event handling process between other classes and its units, weapons. +-- @module Event +-- @author FlightControl + +--- 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:E( { "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:E( { "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 + +--- 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 +--- This module contains the GROUP class. +-- +-- 1) @{Group#GROUP} class, extends @{Base#BASE} +-- ============================================= +-- The @{Group#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. +-- +-- **IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil).** +-- +-- 1.1) 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. +-- +-- 1.2) GROUP task methods +-- ----------------------- +-- Several group task methods are available that help you to prepare tasks. +-- These methods return a string consisting of the task description, which can then be given to either a @{Group#GROUP.PushTask} or @{Group#SetTask} method to assign the task to the GROUP. +-- Tasks are specific for the category of the GROUP, more specific, for AIR, GROUND or AIR and GROUND. +-- Each task description where applicable indicates for which group category the task is valid. +-- There are 2 main subdivisions of tasks: Assigned tasks and EnRoute tasks. +-- +-- ### 1.2.1) Assigned task methods +-- +-- Assigned task methods make the group execute the task where the location of the (possible) targets of the task are known before being detected. +-- This is different from the EnRoute tasks, where the targets of the task need to be detected before the task can be executed. +-- +-- Find below a list of the **assigned task** methods: +-- +-- * @{#GROUP.TaskAttackGroup}: (AIR) Attack a Group. +-- * @{#GROUP.TaskAttackMapObject}: (AIR) Attacking the map object (building, structure, e.t.c). +-- * @{#GROUP.TaskAttackUnit}: (AIR) Attack the Unit. +-- * @{#GROUP.TaskBombing}: (AIR) Delivering weapon at the point on the ground. +-- * @{#GROUP.TaskBombingRunway}: (AIR) Delivering weapon on the runway. +-- * @{#GROUP.TaskEmbarking}: (AIR) Move the group to a Vec2 Point, wait for a defined duration and embark a group. +-- * @{#GROUP.TaskEmbarkToTransport}: (GROUND) Embark to a Transport landed at a location. +-- * @{#GROUP.TaskEscort}: (AIR) Escort another airborne group. +-- * @{#GROUP.TaskFAC_AttackGroup}: (AIR + GROUND) The task makes the group/unit a FAC and orders the FAC to control the target (enemy ground group) destruction. +-- * @{#GROUP.TaskFireAtPoint}: (GROUND) Fire at a VEC2 point until ammunition is finished. +-- * @{#GROUP.TaskFollow}: (AIR) Following another airborne group. +-- * @{#GROUP.TaskHold}: (GROUND) Hold ground group from moving. +-- * @{#GROUP.TaskHoldPosition}: (AIR) Hold position at the current position of the first unit of the group. +-- * @{#GROUP.TaskLand}: (AIR HELICOPTER) Landing at the ground. For helicopters only. +-- * @{#GROUP.TaskLandAtZone}: (AIR) Land the group at a @{Zone#ZONE_RADIUS). +-- * @{#GROUP.TaskOrbitCircle}: (AIR) Orbit at the current position of the first unit of the group at a specified alititude. +-- * @{#GROUP.TaskOrbitCircleAtVec2}: (AIR) Orbit at a specified position at a specified alititude during a specified duration with a specified speed. +-- * @{#GROUP.TaskRefueling}: (AIR) Refueling from the nearest tanker. No parameters. +-- * @{#GROUP.TaskRoute}: (AIR + GROUND) Return a Misson task to follow a given route defined by Points. +-- * @{#GROUP.TaskRouteToVec2}: (AIR + GROUND) Make the Group move to a given point. +-- * @{#GROUP.TaskRouteToVec3}: (AIR + GROUND) Make the Group move to a given point. +-- * @{#GROUP.TaskRouteToZone}: (AIR + GROUND) Route the group to a given zone. +-- +-- ### 1.2.2) EnRoute task methods +-- +-- EnRoute tasks require the targets of the task need to be detected by the group (using its sensors) before the task can be executed: +-- +-- * @{#GROUP.EnRouteTaskAWACS}: (AIR) Aircraft will act as an AWACS for friendly units (will provide them with information about contacts). No parameters. +-- * @{#GROUP.EnRouteTaskEngageGroup}: (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. +-- * @{#GROUP.EnRouteTaskEngageTargets}: (AIR) Engaging targets of defined types. +-- * @{#GROUP.EnRouteTaskEWR}: (AIR) Attack the Unit. +-- * @{#GROUP.EnRouteTaskFAC}: (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. +-- * @{#GROUP.EnRouteTaskFAC_EngageGroup}: (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. +-- * @{#GROUP.EnRouteTaskTanker}: (AIR) Aircraft will act as a tanker for friendly units. No parameters. +-- +-- ### 1.2.3) Preparation task methods +-- +-- There are certain task methods that allow to tailor the task behaviour: +-- +-- * @{#GROUP.TaskWrappedAction}: Return a WrappedAction Task taking a Command. +-- * @{#GROUP.TaskCombo}: Return a Combo Task taking an array of Tasks. +-- * @{#GROUP.TaskCondition}: Return a condition section for a controlled task. +-- * @{#GROUP.TaskControlled}: Return a Controlled Task taking a Task and a TaskCondition. +-- +-- ### 1.2.4) Obtain the mission from group templates +-- +-- Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another: +-- +-- * @{#GROUP.TaskMission}: (AIR + GROUND) Return a mission task from a mission template. +-- +-- 1.3) GROUP Command methods +-- -------------------------- +-- Group **command methods** prepare the execution of commands using the @{#GROUP.SetCommand} method: +-- +-- * @{#GROUP.CommandDoScript}: Do Script command. +-- * @{#GROUP.CommandSwitchWayPoint}: Perform a switch waypoint command. +-- +-- 1.4) GROUP Option methods +-- ------------------------- +-- Group **Option methods** change the behaviour of the Group while being alive. +-- +-- ### 1.4.1) Rule of Engagement: +-- +-- * @{#GROUP.OptionROEWeaponFree} +-- * @{#GROUP.OptionROEOpenFire} +-- * @{#GROUP.OptionROEReturnFire} +-- * @{#GROUP.OptionROEEvadeFire} +-- +-- To check whether an ROE option is valid for a specific group, use: +-- +-- * @{#GROUP.OptionROEWeaponFreePossible} +-- * @{#GROUP.OptionROEOpenFirePossible} +-- * @{#GROUP.OptionROEReturnFirePossible} +-- * @{#GROUP.OptionROEEvadeFirePossible} +-- +-- ### 1.4.2) Rule on thread: +-- +-- * @{#GROUP.OptionROTNoReaction} +-- * @{#GROUP.OptionROTPassiveDefense} +-- * @{#GROUP.OptionROTEvadeFire} +-- * @{#GROUP.OptionROTVertical} +-- +-- To test whether an ROT option is valid for a specific group, use: +-- +-- * @{#GROUP.OptionROTNoReactionPossible} +-- * @{#GROUP.OptionROTPassiveDefensePossible} +-- * @{#GROUP.OptionROTEvadeFirePossible} +-- * @{#GROUP.OptionROTVerticalPossible} +-- +-- 1.5) GROUP Zone validation methods +-- ---------------------------------- +-- The group can be validated whether it is completely, partly or not within a @{Zone}. +-- Use the following Zone validation methods on the group: +-- +-- * @{#GROUP.IsCompletelyInZone}: Returns true if all units of the group are within a @{Zone}. +-- * @{#GROUP.IsPartlyInZone}: Returns true if some units of the group are within a @{Zone}. +-- * @{#GROUP.IsNotInZone}: Returns true if none of the group units of the group are within a @{Zone}. +-- +-- The zone can be of any @{Zone} class derived from @{Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on. +-- +-- @module Group +-- @author FlightControl + +--- 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 ) + GroupFound:E( { GroupName, GroupFound:GetClassNameAndID() } ) + 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 ) + self:F2( { WayPoint, WayPointIndex, FunctionString, FunctionArguments } ) + + local DCSTask + + local DCSScript = {} + DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " + + if FunctionArguments and #FunctionArguments > 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 #number 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 Zone Functions + +--- Returns true if all units of the group are within a @{Zone}. +-- @param #GROUP self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the Group is completely within the @{Zone#ZONE_BASE} +function GROUP:IsCompletelyInZone( Zone ) + self:F2( { self.GroupName, Zone } ) + + for UnitID, UnitData in pairs( self:GetUnits() ) do + local Unit = UnitData -- Unit#UNIT + if Zone:IsPointVec3InZone( Unit:GetPointVec3() ) then + else + return false + end + end + + return true +end + +--- Returns true if some units of the group are within a @{Zone}. +-- @param #GROUP self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the Group is completely within the @{Zone#ZONE_BASE} +function GROUP:IsPartlyInZone( Zone ) + self:F2( { self.GroupName, Zone } ) + + for UnitID, UnitData in pairs( self:GetUnits() ) do + local Unit = UnitData -- Unit#UNIT + if Zone:IsPointVec3InZone( Unit:GetPointVec3() ) then + return true + end + end + + return false +end + +--- Returns true if none of the group units of the group are within a @{Zone}. +-- @param #GROUP self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the Group is completely within the @{Zone#ZONE_BASE} +function GROUP:IsNotInZone( Zone ) + self:F2( { self.GroupName, Zone } ) + + for UnitID, UnitData in pairs( self:GetUnits() ) do + local Unit = UnitData -- Unit#UNIT + if Zone:IsPointVec3InZone( Unit:GetPointVec3() ) then + return false + end + end + + return true +end + +--- 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 DCSTask#TaskArray DCSTasks Array of @{DCSTask#Task} +-- @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 + + +-- 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 } ) + + -- 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 + +--- (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 } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupPoint = self:GetPointVec2() + return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) + end + + return nil +end + + + +--- (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 } ) + + return self:TaskOrbitCircle( 30, 10 ) +end + + + + +--- (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 } ) + +-- 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 + + self:T3( DCSTask ) + return DCSTask +end + +--- (AIR) Land the group at a @{Zone#ZONE_RADIUS). +-- @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 + + + +--- (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 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:TaskFollow( FollowGroup, PointVec3, LastWaypointIndex ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex } ) + +-- 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 = 'Follow', + params = { + groupId = FollowGroup:GetID(), + pos = PointVec3, + lastWptIndexFlag = LastWaypointIndexFlag, + lastWptIndex = LastWaypointIndex, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (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 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 DCSTypes#AttributeNameArray TargetTypes Array of AttributeName that is contains threat categories allowed to engage. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskEscort( FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes } ) + +-- Escort = { +-- id = 'Escort', +-- params = { +-- groupId = Group.ID, +-- pos = Vec3, +-- lastWptIndexFlag = boolean, +-- lastWptIndex = number, +-- engagementDistMax = Distance, +-- targetTypes = array of AttributeName, +-- } +-- } + + 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 + + +-- GROUND TASKS + +--- (GROUND) Fire at a VEC2 point until ammunition is finished. +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 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 + +--- (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 DCSTypes#AttributeNameArray 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 DCSTypes#AttributeNameArray 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 + + + + +--- (AIR) 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:TaskEmbarking( 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 + +--- (GROUND) Embark to a Transport landed at a location. + +--- 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:TaskEmbarkToTransport( 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 + + + +--- (AIR + GROUND) Return a mission 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 + +--- (AIR + GROUND) Make the Group move to fly to a given point. +-- @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 + +--- (AIR + GROUND) Make the Group move to a given point. +-- @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 + + + +--- (AIR + GROUND) 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 DCSTypes#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, Duration, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")" ) + 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 DCSTypes#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 DCSTYpes#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 DCSTypes#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 DCSTypes#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 +--- This module contains the UNIT class. +-- +-- 1) @{Unit#UNIT} class, extends @{Base#BASE} +-- =========================================== +-- The @{Unit#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. +-- +-- +-- 1.1) 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). +-- +-- 1.2) 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}(). +-- +-- 1.3) 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. +-- +-- 1.4) Location 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 **point** in 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. +-- +-- 1.5) Test if alive +-- ------------------ +-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active. +-- +-- 1.6) Test for proximity +-- ----------------------- +-- The UNIT class contains methods to test the location or proximity against zones or other objects. +-- +-- ### 1.6.1) Zones +-- To test whether the Unit is within a **zone**, use the @{#UNIT.IsInZone}() or the @{#UNIT.IsNotInZone}() methods. Any zone can be tested on, but the zone must be derived from @{Zone#ZONE_BASE}. +-- +-- ### 1.6.2) Units +-- Test if another DCS Unit is within a given radius of the current DCS Unit, use the @{#UNIT.OtherUnitInRadius}() method. +-- +-- @module Unit +-- @author FlightControl + + + + + +--- 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 if the unit is located above a runway. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is above a runway. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsAboveRunway() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local PointVec2 = self:GetPointVec2() + local SurfaceType = land.getSurfaceType( PointVec2 ) + local IsAboveRunway = SurfaceType == land.SurfaceType.RUNWAY + + self:T2( IsAboveRunway ) + return IsAboveRunway + 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 = GROUP:Find( 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() + self:T2( UnitDesc ) + return UnitDesc + end + + self:E( "Unit " .. self.UnitName .. "not found!" ) + 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:T2( 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 + +-- Is functions + +--- Returns true if the unit is within a @{Zone}. +-- @param #UNIT self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the unit is within the @{Zone#ZONE_BASE} +function UNIT:IsInZone( Zone ) + self:F2( { self.UnitName, Zone } ) + + if self:IsAlive() then + local IsInZone = Zone:IsPointVec3InZone( self:GetPointVec3() ) + + self:T( { IsInZone } ) + return IsInZone + else + return false + end +end + +--- Returns true if the unit is not within a @{Zone}. +-- @param #UNIT self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the unit is not within the @{Zone#ZONE_BASE} +function UNIT:IsNotInZone( Zone ) + self:F2( { self.UnitName, Zone } ) + + if self:IsAlive() then + local IsInZone = not Zone:IsPointVec3InZone( self:GetPointVec3() ) + + self:T( { IsInZone } ) + return IsInZone + else + return false + end +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 + +--- This module contains the ZONE classes, inherited from @{Zone#ZONE_BASE}. +-- There are essentially two core functions that zones accomodate: +-- +-- * Test if an object is within the zone boundaries. +-- * Provide the zone behaviour. Some zones are static, while others are moveable. +-- +-- The object classes are using the zone classes to test the zone boundaries, which can take various forms: +-- +-- * Test if completely within the zone. +-- * Test if partly within the zone (for @{Group#GROUP} objects). +-- * Test if not in the zone. +-- * Distance to the nearest intersecting point of the zone. +-- * Distance to the center of the zone. +-- * ... +-- +-- Each of these ZONE classes have a zone name, and specific parameters defining the zone type: +-- +-- * @{Zone#ZONE_BASE}: The ZONE_BASE class defining the base for all other zone classes. +-- * @{Zone#ZONE_RADIUS}: The ZONE_RADIUS class defined by a zone name, a location and a radius. +-- * @{Zone#ZONE}: The ZONE class, defined by the zone name as defined within the Mission Editor. +-- * @{Zone#ZONE_UNIT}: The ZONE_UNIT class defined by a zone around a @{Unit#UNIT} with a radius. +-- * @{Zone#ZONE_POLYGON}: The ZONE_POLYGON class defined by a sequence of @{Group#GROUP} waypoints within the Mission Editor, forming a polygon. +-- +-- Each zone implements two polymorphic functions defined in @{Zone#ZONE_BASE}: +-- +-- * @{#ZONE_BASE.IsPointVec2InZone}: Returns if a location is within the zone. +-- * @{#ZONE_BASE.IsPointVec3InZone}: Returns if a point is within the zone. +-- +-- === +-- +-- 1) @{Zone#ZONE_BASE} class, extends @{Base#BASE} +-- ================================================ +-- The ZONE_BASE class defining the base for all other zone classes. +-- +-- === +-- +-- 2) @{Zone#ZONE_RADIUS} class, extends @{Zone#ZONE_BASE} +-- ======================================================= +-- The ZONE_RADIUS class defined by a zone name, a location and a radius. +-- +-- === +-- +-- 3) @{Zone#ZONE} class, extends @{Zone#ZONE_RADIUS} +-- ========================================== +-- The ZONE class, defined by the zone name as defined within the Mission Editor. +-- +-- === +-- +-- 4) @{Zone#ZONE_UNIT} class, extends @{Zone#ZONE_RADIUS} +-- ======================================================= +-- The ZONE_UNIT class defined by a zone around a @{Unit#UNIT} with a radius. +-- +-- === +-- +-- 5) @{Zone#ZONE_POLYGON} class, extends @{Zone#ZONE_BASE} +-- ======================================================== +-- The ZONE_POLYGON class defined by a sequence of @{Group#GROUP} waypoints within the Mission Editor, forming a polygon. +-- +-- === +-- +-- @module Zone +-- @author FlightControl + + + + + + + + + +--- The ZONE_BASE class +-- @type ZONE_BASE +-- @field #string ZoneName Name of the zone. +-- @extends Base#BASE +ZONE_BASE = { + ClassName = "ZONE_BASE", + } + +--- ZONE_BASE constructor +-- @param #ZONE_BASE self +-- @param #string ZoneName Name of the zone. +-- @return #ZONE_BASE self +function ZONE_BASE:New( ZoneName ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( ZoneName ) + + self.ZoneName = ZoneName + + return self +end + +--- Returns if a location is within the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec2 PointVec2 The location to test. +-- @return #boolean true if the location is within the zone. +function ZONE_BASE:IsPointVec2InZone( PointVec2 ) + self:F2( PointVec2 ) + + return false +end + +--- Returns if a point is within the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec3 PointVec3 The point to test. +-- @return #boolean true if the point is within the zone. +function ZONE_BASE:IsPointVec3InZone( PointVec3 ) + self:F2( PointVec3 ) + + local InZone = self:IsPointVec2InZone( { x = PointVec3.x, y = PointVec3.z } ) + + return InZone +end + +--- Smokes the zone boundaries in a color. +-- @param #ZONE_BASE self +-- @param SmokeColor The smoke color. +function ZONE_BASE:SmokeZone( SmokeColor ) + self:F2( SmokeColor ) + +end + + +--- The ZONE_RADIUS class, defined by a zone name, a location and a radius. +-- @type ZONE_RADIUS +-- @field DCSTypes#Vec2 PointVec2 The current location of the zone. +-- @field DCSTypes#Distance Radius The radius of the zone. +-- @extends Zone#ZONE_BASE +ZONE_RADIUS = { + ClassName="ZONE_RADIUS", + } + +--- Constructor of ZONE_RADIUS, taking the zone name, the zone location and a radius. +-- @param #ZONE_RADIUS self +-- @param #string ZoneName Name of the zone. +-- @param DCSTypes#Vec2 PointVec2 The location of the zone. +-- @param DCSTypes#Distance Radius The radius of the zone. +-- @return #ZONE_RADIUS self +function ZONE_RADIUS:New( ZoneName, PointVec2, Radius ) + local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) + self:F( { ZoneName, PointVec2, Radius } ) + + self.Radius = Radius + self.PointVec2 = PointVec2 + + return self +end + +--- Smokes the zone boundaries in a color. +-- @param #ZONE_RADIUS self +-- @param #POINT_VEC3.SmokeColor SmokeColor The smoke color. +-- @param #number Points (optional) The amount of points in the circle. +-- @return #ZONE_RADIUS self +function ZONE_RADIUS:SmokeZone( SmokeColor, Points ) + self:F2( SmokeColor ) + + local Point = {} + local PointVec2 = self:GetPointVec2() + + Points = Points and Points or 360 + + local Angle + local RadialBase = math.pi*2 + + for Angle = 0, 360, 360 / Points do + local Radial = Angle * RadialBase / 360 + Point.x = PointVec2.x + math.cos( Radial ) * self:GetRadius() + Point.y = PointVec2.y + math.sin( Radial ) * self:GetRadius() + POINT_VEC2:New( Point.x, Point.y ):Smoke( SmokeColor ) + end + + return self +end + + +--- Flares the zone boundaries in a color. +-- @param #ZONE_RADIUS self +-- @param #POINT_VEC3.FlareColor FlareColor The flare color. +-- @param #number Points (optional) The amount of points in the circle. +-- @param DCSTypes#Azimuth Azimuth (optional) Azimuth The azimuth of the flare. +-- @return #ZONE_RADIUS self +function ZONE_RADIUS:FlareZone( FlareColor, Points, Azimuth ) + self:F2( { FlareColor, Azimuth } ) + + local Point = {} + local PointVec2 = self:GetPointVec2() + + Points = Points and Points or 360 + + local Angle + local RadialBase = math.pi*2 + + for Angle = 0, 360, 360 / Points do + local Radial = Angle * RadialBase / 360 + Point.x = PointVec2.x + math.cos( Radial ) * self:GetRadius() + Point.y = PointVec2.y + math.sin( Radial ) * self:GetRadius() + POINT_VEC2:New( Point.x, Point.y ):Flare( FlareColor, Azimuth ) + end + + return self +end + +--- Returns the radius of the zone. +-- @param #ZONE_RADIUS self +-- @return DCSTypes#Distance The radius of the zone. +function ZONE_RADIUS:GetRadius() + self:F2( self.ZoneName ) + + self:T2( { self.Radius } ) + + return self.Radius +end + +--- Sets the radius of the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Distance Radius The radius of the zone. +-- @return DCSTypes#Distance The radius of the zone. +function ZONE_RADIUS:SetRadius( Radius ) + self:F2( self.ZoneName ) + + self.Radius = Radius + self:T2( { self.Radius } ) + + return self.Radius +end + +--- Returns the location of the zone. +-- @param #ZONE_RADIUS self +-- @return DCSTypes#Vec2 The location of the zone. +function ZONE_RADIUS:GetPointVec2() + self:F2( self.ZoneName ) + + self:T2( { self.PointVec2 } ) + + return self.PointVec2 +end + +--- Sets the location of the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec2 PointVec2 The new location of the zone. +-- @return DCSTypes#Vec2 The new location of the zone. +function ZONE_RADIUS:SetPointVec2( PointVec2 ) + self:F2( self.ZoneName ) + + self.PointVec2 = PointVec2 + + self:T2( { self.PointVec2 } ) + + return self.PointVec2 +end + +--- Returns the point of the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Distance Height The height to add to the land height where the center of the zone is located. +-- @return DCSTypes#Vec3 The point of the zone. +function ZONE_RADIUS:GetPointVec3( Height ) + self:F2( self.ZoneName ) + + local PointVec2 = self:GetPointVec2() + + local PointVec3 = { x = PointVec2.x, y = land.getHeight( self:GetPointVec2() ) + Height, z = PointVec2.y } + + self:T2( { PointVec3 } ) + + return PointVec3 +end + + +--- Returns if a location is within the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec2 PointVec2 The location to test. +-- @return #boolean true if the location is within the zone. +function ZONE_RADIUS:IsPointVec2InZone( PointVec2 ) + self:F2( PointVec2 ) + + local ZonePointVec2 = self:GetPointVec2() + + if (( PointVec2.x - ZonePointVec2.x )^2 + ( PointVec2.y - ZonePointVec2.y ) ^2 ) ^ 0.5 <= self:GetRadius() then + return true + end + + return false +end + +--- Returns if a point is within the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec3 PointVec3 The point to test. +-- @return #boolean true if the point is within the zone. +function ZONE_RADIUS:IsPointVec3InZone( PointVec3 ) + self:F2( PointVec3 ) + + local InZone = self:IsPointVec2InZone( { x = PointVec3.x, y = PointVec3.z } ) + + return InZone +end + +--- Returns a random location within the zone. +-- @param #ZONE_RADIUS self +-- @return DCSTypes#Vec2 The random location within the zone. +function ZONE_RADIUS:GetRandomPointVec2() + self:F( self.ZoneName ) + + local Point = {} + local PointVec2 = self:GetPointVec2() + + local angle = math.random() * math.pi*2; + Point.x = PointVec2.x + math.cos( angle ) * math.random() * self:GetRadius(); + Point.y = PointVec2.y + math.sin( angle ) * math.random() * self:GetRadius(); + + self:T( { Point } ) + + return Point +end + + + +--- The ZONE class, defined by the zone name as defined within the Mission Editor. The location and the radius are automatically collected from the mission settings. +-- @type ZONE +-- @extends Zone#ZONE_RADIUS +ZONE = { + ClassName="ZONE", + } + + +--- Constructor of ZONE, taking the zone name. +-- @param #ZONE self +-- @param #string ZoneName The name of the zone as defined within the mission editor. +-- @return #ZONE +function ZONE:New( ZoneName ) + + local Zone = trigger.misc.getZone( ZoneName ) + + if not Zone then + error( "Zone " .. ZoneName .. " does not exist." ) + return nil + end + + local self = BASE:Inherit( self, ZONE_RADIUS:New( ZoneName, { x = Zone.point.x, y = Zone.point.z }, Zone.radius ) ) + self:F( ZoneName ) + + self.Zone = Zone + + return self +end + + +--- The ZONE_UNIT class defined by a zone around a @{Unit#UNIT} with a radius. +-- @type ZONE_UNIT +-- @field Unit#UNIT ZoneUNIT +-- @extends Zone#ZONE_RADIUS +ZONE_UNIT = { + ClassName="ZONE_UNIT", + } + +--- Constructor to create a ZONE_UNIT instance, taking the zone name, a zone unit and a radius. +-- @param #ZONE_UNIT self +-- @param #string ZoneName Name of the zone. +-- @param Unit#UNIT ZoneUNIT The unit as the center of the zone. +-- @param DCSTypes#Distance Radius The radius of the zone. +-- @return #ZONE_UNIT self +function ZONE_UNIT:New( ZoneName, ZoneUNIT, Radius ) + local self = BASE:Inherit( self, ZONE_RADIUS:New( ZoneName, ZoneUNIT:GetPointVec2(), Radius ) ) + self:F( { ZoneName, ZoneUNIT:GetPointVec2(), Radius } ) + + self.ZoneUNIT = ZoneUNIT + + return self +end + + +--- Returns the current location of the @{Unit#UNIT}. +-- @param #ZONE_UNIT self +-- @return DCSTypes#Vec2 The location of the zone based on the @{Unit#UNIT}location. +function ZONE_UNIT:GetPointVec2() + self:F( self.ZoneName ) + + local ZonePointVec2 = self.ZoneUNIT:GetPointVec2() + + self:T( { ZonePointVec2 } ) + + return ZonePointVec2 +end + +-- Polygons + +--- The ZONE_POLYGON_BASE class defined by an array of @{DCSTypes#Vec2}, forming a polygon. +-- @type ZONE_POLYGON_BASE +-- @field #ZONE_POLYGON_BASE.ListVec2 Polygon The polygon defined by an array of @{DCSTypes#Vec2}. +-- @extends Zone#ZONE_BASE +ZONE_POLYGON_BASE = { + ClassName="ZONE_POLYGON_BASE", + } + +--- A points array. +-- @type ZONE_POLYGON_BASE.ListVec2 +-- @list + +--- Constructor to create a ZONE_POLYGON_BASE instance, taking the zone name and an array of @{DCSTypes#Vec2}, forming a polygon. +-- The @{Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected. +-- @param #ZONE_POLYGON_BASE self +-- @param #string ZoneName Name of the zone. +-- @param #ZONE_POLYGON_BASE.ListVec2 PointsArray An array of @{DCSTypes#Vec2}, forming a polygon.. +-- @return #ZONE_POLYGON_BASE self +function ZONE_POLYGON_BASE:New( ZoneName, PointsArray ) + local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) + self:F( { ZoneName, PointsArray } ) + + local i = 0 + + self.Polygon = {} + + for i = 1, #PointsArray do + self.Polygon[i] = {} + self.Polygon[i].x = PointsArray[i].x + self.Polygon[i].y = PointsArray[i].y + end + + return self +end + +--- Flush polygon coordinates as a table in DCS.log. +-- @param #ZONE_POLYGON_BASE self +-- @return #ZONE_POLYGON_BASE self +function ZONE_POLYGON_BASE:Flush() + self:F2() + + self:E( { Polygon = self.ZoneName, Coordinates = self.Polygon } ) + + return self +end + + +--- Smokes the zone boundaries in a color. +-- @param #ZONE_POLYGON_BASE self +-- @param #POINT_VEC3.SmokeColor SmokeColor The smoke color. +-- @return #ZONE_POLYGON_BASE self +function ZONE_POLYGON_BASE:SmokeZone( SmokeColor ) + self:F2( SmokeColor ) + + local i + local j + local Segments = 10 + + i = 1 + j = #self.Polygon + + while i <= #self.Polygon do + self:T( { i, j, self.Polygon[i], self.Polygon[j] } ) + + local DeltaX = self.Polygon[j].x - self.Polygon[i].x + local DeltaY = self.Polygon[j].y - self.Polygon[i].y + + for Segment = 0, Segments do -- We divide each line in 5 segments and smoke a point on the line. + local PointX = self.Polygon[i].x + ( Segment * DeltaX / Segments ) + local PointY = self.Polygon[i].y + ( Segment * DeltaY / Segments ) + POINT_VEC2:New( PointX, PointY ):Smoke( SmokeColor ) + end + j = i + i = i + 1 + end + + return self +end + + + + +--- Returns if a location is within the zone. +-- @param #ZONE_POLYGON_BASE self +-- @param DCSTypes#Vec2 PointVec2 The location to test. +-- @return #boolean true if the location is within the zone. +function ZONE_POLYGON_BASE:IsPointVec2InZone( PointVec2 ) + self:F2( PointVec2 ) + + local i + local j + local c = false + + i = 1 + j = #self.Polygon + + while i < #self.Polygon do + j = i + i = i + 1 + self:T( { i, j, self.Polygon[i], self.Polygon[j] } ) + if ( ( ( self.Polygon[i].y > PointVec2.y ) ~= ( self.Polygon[j].y > PointVec2.y ) ) and + ( PointVec2.x < ( self.Polygon[j].x - self.Polygon[i].x ) * ( PointVec2.y - self.Polygon[i].y ) / ( self.Polygon[j].y - self.Polygon[i].y ) + self.Polygon[i].x ) + ) then + c = not c + end + self:T2( { "c = ", c } ) + end + + self:T( { "c = ", c } ) + return c +end + + + + +--- The ZONE_POLYGON class defined by a sequence of @{Group#GROUP} waypoints within the Mission Editor, forming a polygon. +-- @type ZONE_POLYGON +-- @extends Zone#ZONE_POLYGON_BASE +ZONE_POLYGON = { + ClassName="ZONE_POLYGON", + } + +--- Constructor to create a ZONE_POLYGON instance, taking the zone name and the name of the @{Group#GROUP} defined within the Mission Editor. +-- The @{Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected by ZONE_POLYGON. +-- @param #ZONE_POLYGON self +-- @param #string ZoneName Name of the zone. +-- @param Group#GROUP ZoneGroup The GROUP waypoints as defined within the Mission Editor define the polygon shape. +-- @return #ZONE_POLYGON self +function ZONE_POLYGON:New( ZoneName, ZoneGroup ) + + local GroupPoints = ZoneGroup:GetTaskRoute() + + local self = BASE:Inherit( self, ZONE_POLYGON_BASE:New( ZoneName, GroupPoints ) ) + self:F( { ZoneName, ZoneGroup, self.Polygon } ) + + return self +end + +--- This module contains the CLIENT class. +-- +-- 1) @{Client#CLIENT} class, extends @{Unit#UNIT} +-- =============================================== +-- 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#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. +-- +-- 1.1) 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 + +--- 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, { "Client Alive " .. ClientName }, 1, 5 ) + + self:E( self ) + 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, "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, "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( CallBackFunction, ... ) + self:F() + + self.ClientCallBack = CallBackFunction + self.ClientParameters = arg + + return self +end + +--- @param #CLIENT self +function CLIENT:_AliveCheckScheduler( SchedulerName ) + self:E( SchedulerName ) + self:F( { SchedulerName, self.ClientName, self.ClientAlive2, self.ClientBriefingShown, self.ClientCallBack } ) + + if self:IsAlive() then + 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, "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 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. +-- @param #string MessageID is the identifier of the message when displayed with intervals. +function CLIENT:Message( Message, MessageDuration, MessageCategory, MessageInterval, MessageID ) + self:F( { Message, MessageDuration, 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 MessageID ~= nil then + 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, MessageDuration, MessageCategory ):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, MessageDuration , MessageCategory):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, MessageDuration, MessageCategory ):ToClient( self ) + self.Messages[MessageID].MessageTime = timer.getTime() + end + end + end + else + MESSAGE:New( Message, MessageDuration, MessageCategory ):ToClient( self ) + end + end +end +--- This module contains the STATIC class. +-- +-- 1) @{Static#STATIC} class, extends @{Unit#UNIT} +-- =============================================== +-- Statics are **Static Units** defined within the Mission Editor. +-- Note that Statics are almost the same as Units, but they don't have a controller. +-- The @{Static#STATIC} class is a wrapper class to handle the DCS Static objects: +-- +-- * Wraps the DCS Static objects. +-- * Support all DCS Static APIs. +-- * Enhance with Static specific APIs not in the DCS API set. +-- +-- 1.1) STATIC reference methods +-- ----------------------------- +-- For each DCS Static will have a STATIC wrapper object (instance) within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts). +-- +-- The STATIC class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the Static Name. +-- +-- Another thing to know is that STATIC objects do not "contain" the DCS Static object. +-- The STATIc methods will reference the DCS Static object by name when it is needed during API execution. +-- If the DCS Static object does not exist or is nil, the STATIC methods will return nil and log an exception in the DCS.log file. +-- +-- The STATIc class provides the following functions to retrieve quickly the relevant STATIC instance: +-- +-- * @{#STATIC.FindByName}(): Find a STATIC instance from the _DATABASE object using a DCS Static name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these STATIC OBJECT REFERENCES! (make the STATIC object references nil). +-- +-- @module Static +-- @author FlightControl + + + + + + +--- The STATIC class +-- @type STATIC +-- @extends Unit#UNIT +STATIC = { + ClassName = "STATIC", +} + + +--- Finds a STATIC from the _DATABASE using the relevant Static Name. +-- As an optional parameter, a briefing text can be given also. +-- @param #STATIC self +-- @param #string StaticName Name of the DCS **Static** as defined within the Mission Editor. +-- @return #STATIC +function STATIC:FindByName( StaticName ) + local StaticFound = _DATABASE:FindStatic( StaticName ) + + if StaticFound then + StaticFound:F( { StaticName } ) + + return StaticFound + end + + error( "STATIC not found for: " .. StaticName ) +end + +function STATIC:Register( StaticName ) + local self = BASE:Inherit( self, UNIT:Register( StaticName ) ) + + self:F( StaticName ) + + return self +end + + +function STATIC:GetDCSUnit() + local DCSStatic = StaticObject.getByName( self.UnitName ) + + if DCSStatic then + return DCSStatic + end + + return nil +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 + + + + + + + + + + + + +--- DATABASE class +-- @type DATABASE +-- @extends Base#BASE +DATABASE = { + ClassName = "DATABASE", + Templates = { + Units = {}, + Groups = {}, + ClientsByName = {}, + ClientsByID = {}, + }, + UNITS = {}, + STATICS = {}, + GROUPS = {}, + PLAYERS = {}, + PLAYERSALIVE = {}, + CLIENTS = {}, + CLIENTSALIVE = {}, + NavPoints = {}, +} + +local _DATABASECoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _DATABASECategory = + { + ["plane"] = Unit.Category.AIRPLANE, + ["helicopter"] = Unit.Category.HELICOPTER, + ["vehicle"] = Unit.Category.GROUND_UNIT, + ["ship"] = Unit.Category.SHIP, + ["static"] = Unit.Category.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:_RegisterGroupsAndUnits() + self:_RegisterClients() + self:_RegisterStatics() + 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( DCSUnitName ) + + if not self.UNITS[DCSUnitName] then + self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) + end + + return self.UNITS[DCSUnitName] +end + + +--- Deletes a Unit from the DATABASE based on the Unit Name. +-- @param #DATABASE self +function DATABASE:DeleteUnit( DCSUnitName ) + + --self.UNITS[DCSUnitName] = nil +end + +--- Adds a Static based on the Static Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddStatic( DCSStaticName ) + + if not self.STATICS[DCSStaticName] then + self.STATICS[DCSStaticName] = STATIC:Register( DCSStaticName ) + end +end + + +--- Deletes a Static from the DATABASE based on the Static Name. +-- @param #DATABASE self +function DATABASE:DeleteStatic( DCSStaticName ) + + --self.STATICS[DCSStaticName] = nil +end + +--- Finds a STATIC based on the StaticName. +-- @param #DATABASE self +-- @param #string StaticName +-- @return Static#STATIC The found STATIC. +function DATABASE:FindStatic( StaticName ) + + local StaticFound = self.STATICS[StaticName] + return StaticFound +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 ) + + if not self.CLIENTS[ClientName] then + self.CLIENTS[ClientName] = CLIENT:Register( ClientName ) + end + + return self.CLIENTS[ClientName] +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( GroupName ) + + if not self.GROUPS[GroupName] then + self.GROUPS[GroupName] = GROUP:Register( GroupName ) + end + + return self.GROUPS[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, SpawnCoalitionID, SpawnCategoryID, SpawnCountryID ) + + self:T3( SpawnTemplate ) + coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) + + -- Restore + SpawnTemplate.SpawnCoalitionID = SpawnCoalitionID + SpawnTemplate.SpawnCountryID = SpawnCountryID + SpawnTemplate.SpawnCategoryID = SpawnCategoryID + + local SpawnGroup = self:AddGroup( 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, CoalitionID, CategoryID, CountryID ) + + local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) + + local TraceTable = {} + + 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.Templates.Groups[GroupTemplateName].CategoryID = CategoryID + self.Templates.Groups[GroupTemplateName].CoalitionID = CoalitionID + self.Templates.Groups[GroupTemplateName].CountryID = CountryID + + + TraceTable[#TraceTable+1] = "Group" + TraceTable[#TraceTable+1] = self.Templates.Groups[GroupTemplateName].GroupName + + TraceTable[#TraceTable+1] = "Coalition" + TraceTable[#TraceTable+1] = self.Templates.Groups[GroupTemplateName].CoalitionID + TraceTable[#TraceTable+1] = "Category" + TraceTable[#TraceTable+1] = self.Templates.Groups[GroupTemplateName].CategoryID + TraceTable[#TraceTable+1] = "Country" + TraceTable[#TraceTable+1] = self.Templates.Groups[GroupTemplateName].CountryID + + TraceTable[#TraceTable+1] = "Units" + + 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.Templates.Units[UnitTemplateName].CategoryID = CategoryID + self.Templates.Units[UnitTemplateName].CoalitionID = CoalitionID + self.Templates.Units[UnitTemplateName].CountryID = CountryID + + if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then + self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate + self.Templates.ClientsByName[UnitTemplateName].CategoryID = CategoryID + self.Templates.ClientsByName[UnitTemplateName].CoalitionID = CoalitionID + self.Templates.ClientsByName[UnitTemplateName].CountryID = CountryID + self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate + end + + TraceTable[#TraceTable+1] = self.Templates.Units[UnitTemplateName].UnitName + end + + self:E( TraceTable ) +end + +function DATABASE:GetCoalitionFromClientTemplate( ClientName ) + return self.Templates.ClientsByName[ClientName].CoalitionID +end + +function DATABASE:GetCategoryFromClientTemplate( ClientName ) + return self.Templates.ClientsByName[ClientName].CategoryID +end + +function DATABASE:GetCountryFromClientTemplate( ClientName ) + return self.Templates.ClientsByName[ClientName].CountryID +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 Groups and Units within in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterGroupsAndUnits() + + 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:", DCSGroupName } ) + self:AddGroup( DCSGroupName ) + + for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do + + local DCSUnitName = DCSUnit:getName() + self:E( { "Register Unit:", DCSUnitName } ) + self:AddUnit( DCSUnitName ) + end + else + self:E( { "Group does not exist: ", DCSGroup } ) + end + + end + end + + return self +end + +--- Private method that registers all Units of skill Client or Player within in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterClients() + + for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do + self:E( { "Register Client:", ClientName } ) + self:AddClient( ClientName ) + end + + return self +end + +function DATABASE:_RegisterStatics() + + local CoalitionsData = { GroupsRed = coalition.getStaticObjects( coalition.side.RED ), GroupsBlue = coalition.getStaticObjects( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for DCSStaticId, DCSStatic in pairs( CoalitionData ) do + + if DCSStatic:isExist() then + local DCSStaticName = DCSStatic:getName() + + self:E( { "Register Static:", DCSStaticName } ) + self:AddStatic( DCSStaticName ) + else + self:E( { "Static does not exist: ", DCSStatic } ) + end + end + 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.IniDCSUnitName ) + self:AddGroup( 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.UNITS[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 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 CoalitionName, coa_data in pairs(env.mission.coalition) do + + if (CoalitionName == 'red' or CoalitionName == 'blue') and type(coa_data) == 'table' then + --self.Units[coa_name] = {} + + ---------------------------------------------- + -- build nav points DB + self.Navpoints[CoalitionName] = {} + 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[CoalitionName][nav_ind] = routines.utils.deepCopy(nav_data) + + self.Navpoints[CoalitionName][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. + self.Navpoints[CoalitionName][nav_ind]['point'] = {} -- point is used by SSE, support it. + self.Navpoints[CoalitionName][nav_ind]['point']['x'] = nav_data.x + self.Navpoints[CoalitionName][nav_ind]['point']['y'] = 0 + self.Navpoints[CoalitionName][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.upper(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 CategoryName = 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, + coalition.side[string.upper(CoalitionName)], + _DATABASECategory[string.lower(CategoryName)], + country.id[string.upper(CountryName)] + ) + 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 + + + + +--- This module contains the SET classes. +-- +-- === +-- +-- 1) @{Set#SET_BASE} class, extends @{Base#BASE} +-- ================================================ +-- The @{Set#SET_BASE} class defines the core functions that define a collection of objects. +-- A SET provides iterators to iterate the SET, but will **temporarily** yield the ForEach interator loop at defined **"intervals"** to the mail simulator loop. +-- In this way, large loops can be done while not blocking the simulator main processing loop. +-- The default **"yield interval"** is after 10 objects processed. +-- The default **"time interval"** is after 0.001 seconds. +-- +-- 1.1) Add or remove objects from the SET +-- --------------------------------------- +-- Some key core functions are @{Set#SET_BASE.Add} and @{Set#SET_BASE.Remove} to add or remove objects from the SET in your logic. +-- +-- 1.2) Define the SET iterator **"yield interval"** and the **"time interval"**. +-- ------------------------------------------------------------------------------------- +-- Modify the iterator intervals with the @{Set#SET_BASE.SetInteratorIntervals} method. +-- You can set the **"yield interval"**, and the **"time interval"**. (See above). +-- +-- === +-- +-- 2) @{Set#SET_GROUP} class, extends @{Set#SET_BASE} +-- ==================================================== +-- Mission designers can use the @{Set#SET_GROUP} class to build sets of groups belonging to certain: +-- +-- * Coalitions +-- * Categories +-- * Countries +-- * Starting with certain prefix strings. +-- +-- 2.1) SET_GROUP construction method: +-- ----------------------------------- +-- Create a new SET_GROUP object with the @{#SET_GROUP.New} method: +-- +-- * @{#SET_GROUP.New}: Creates a new SET_GROUP object. +-- +-- 2.2) Add or Remove GROUP(s) from SET_GROUP: +-- ------------------------------------------- +-- GROUPS can be added and removed using the @{Set#SET_GROUP.AddGroupsByName} and @{Set#SET_GROUP.RemoveGroupsByName} respectively. +-- These methods take a single GROUP name or an array of GROUP names to be added or removed from SET_GROUP. +-- +-- 2.3) SET_GROUP filter criteria: +-- ------------------------------- +-- You can set filter criteria to define the set of groups within the SET_GROUP. +-- Filter criteria are defined by: +-- +-- * @{#SET_GROUP.FilterCoalitions}: Builds the SET_GROUP with the groups belonging to the coalition(s). +-- * @{#SET_GROUP.FilterCategories}: Builds the SET_GROUP with the groups belonging to the category(ies). +-- * @{#SET_GROUP.FilterCountries}: Builds the SET_GROUP with the gruops belonging to the country(ies). +-- * @{#SET_GROUP.FilterPrefixes}: Builds the SET_GROUP with the groups starting with the same prefix string(s). +-- +-- Once the filter criteria have been set for the SET_GROUP, you can start filtering using: +-- +-- * @{#SET_GROUP.FilterStart}: Starts the filtering of the groups within the SET_GROUP and add or remove GROUP objects **dynamically**. +-- +-- Planned filter criteria within development are (so these are not yet available): +-- +-- * @{#SET_GROUP.FilterZones}: Builds the SET_GROUP with the groups within a @{Zone#ZONE}. +-- +-- 2.4) SET_GROUP iterators: +-- ------------------------- +-- Once the filters have been defined and the SET_GROUP has been built, you can iterate the SET_GROUP with the available iterator methods. +-- The iterator methods will walk the SET_GROUP set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the SET_GROUP: +-- +-- * @{#SET_GROUP.ForEachGroup}: Calls a function for each alive group it finds within the SET_GROUP. +-- * @{#SET_GROUP.ForEachGroupCompletelyInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence completely in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- * @{#SET_GROUP.ForEachGroupPartlyInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence partly in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- * @{#SET_GROUP.ForEachGroupNotInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence not in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- +-- ==== +-- +-- 3) @{Set#SET_UNIT} class, extends @{Set#SET_BASE} +-- =================================================== +-- Mission designers can use the @{Set#SET_UNIT} class to build sets of units belonging to certain: +-- +-- * Coalitions +-- * Categories +-- * Countries +-- * Unit types +-- * Starting with certain prefix strings. +-- +-- 3.1) SET_UNIT construction method: +-- ---------------------------------- +-- Create a new SET_UNIT object with the @{#SET_UNIT.New} method: +-- +-- * @{#SET_UNIT.New}: Creates a new SET_UNIT object. +-- +-- 3.2) Add or Remove UNIT(s) from SET_UNIT: +-- ----------------------------------------- +-- UNITs can be added and removed using the @{Set#SET_UNIT.AddUnitsByName} and @{Set#SET_UNIT.RemoveUnitsByName} respectively. +-- These methods take a single UNIT name or an array of UNIT names to be added or removed from SET_UNIT. +-- +-- 3.3) SET_UNIT filter criteria: +-- ------------------------------ +-- You can set filter criteria to define the set of units within the SET_UNIT. +-- Filter criteria are defined by: +-- +-- * @{#SET_UNIT.FilterCoalitions}: Builds the SET_UNIT with the units belonging to the coalition(s). +-- * @{#SET_UNIT.FilterCategories}: Builds the SET_UNIT with the units belonging to the category(ies). +-- * @{#SET_UNIT.FilterTypes}: Builds the SET_UNIT with the units belonging to the unit type(s). +-- * @{#SET_UNIT.FilterCountries}: Builds the SET_UNIT with the units belonging to the country(ies). +-- * @{#SET_UNIT.FilterPrefixes}: Builds the SET_UNIT with the units starting with the same prefix string(s). +-- +-- Once the filter criteria have been set for the SET_UNIT, you can start filtering using: +-- +-- * @{#SET_UNIT.FilterStart}: Starts the filtering of the units within the SET_UNIT. +-- +-- Planned filter criteria within development are (so these are not yet available): +-- +-- * @{#SET_UNIT.FilterZones}: Builds the SET_UNIT with the units within a @{Zone#ZONE}. +-- +-- 3.4) SET_UNIT iterators: +-- ------------------------ +-- Once the filters have been defined and the SET_UNIT has been built, you can iterate the SET_UNIT with the available iterator methods. +-- The iterator methods will walk the SET_UNIT set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the SET_UNIT: +-- +-- * @{#SET_UNIT.ForEachUnit}: Calls a function for each alive unit it finds within the SET_UNIT. +-- * @{#SET_GROUP.ForEachGroupCompletelyInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence completely in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- * @{#SET_GROUP.ForEachGroupNotInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence not in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- +-- Planned iterators methods in development are (so these are not yet available): +-- +-- * @{#SET_UNIT.ForEachUnitInUnit}: Calls a function for each unit contained within the SET_UNIT. +-- * @{#SET_UNIT.ForEachUnitCompletelyInZone}: Iterate and call an iterator function for each **alive** UNIT presence completely in a @{Zone}, providing the UNIT and optional parameters to the called function. +-- * @{#SET_UNIT.ForEachUnitNotInZone}: Iterate and call an iterator function for each **alive** UNIT presence not in a @{Zone}, providing the UNIT and optional parameters to the called function. +-- +-- 4) @{Set#SET_CLIENT} class, extends @{Set#SET_BASE} +-- =================================================== +-- Mission designers can use the @{Set#SET_CLIENT} class to build sets of units belonging to certain: +-- +-- * Coalitions +-- * Categories +-- * Countries +-- * Client types +-- * Starting with certain prefix strings. +-- +-- 4.1) SET_CLIENT construction method: +-- ---------------------------------- +-- Create a new SET_CLIENT object with the @{#SET_CLIENT.New} method: +-- +-- * @{#SET_CLIENT.New}: Creates a new SET_CLIENT object. +-- +-- 4.2) Add or Remove CLIENT(s) from SET_CLIENT: +-- ----------------------------------------- +-- CLIENTs can be added and removed using the @{Set#SET_CLIENT.AddClientsByName} and @{Set#SET_CLIENT.RemoveClientsByName} respectively. +-- These methods take a single CLIENT name or an array of CLIENT names to be added or removed from SET_CLIENT. +-- +-- 4.3) SET_CLIENT filter criteria: +-- ------------------------------ +-- You can set filter criteria to define the set of clients within the SET_CLIENT. +-- Filter criteria are defined by: +-- +-- * @{#SET_CLIENT.FilterCoalitions}: Builds the SET_CLIENT with the clients belonging to the coalition(s). +-- * @{#SET_CLIENT.FilterCategories}: Builds the SET_CLIENT with the clients belonging to the category(ies). +-- * @{#SET_CLIENT.FilterTypes}: Builds the SET_CLIENT with the clients belonging to the client type(s). +-- * @{#SET_CLIENT.FilterCountries}: Builds the SET_CLIENT with the clients belonging to the country(ies). +-- * @{#SET_CLIENT.FilterPrefixes}: Builds the SET_CLIENT with the clients starting with the same prefix string(s). +-- +-- Once the filter criteria have been set for the SET_CLIENT, you can start filtering using: +-- +-- * @{#SET_CLIENT.FilterStart}: Starts the filtering of the clients within the SET_CLIENT. +-- +-- Planned filter criteria within development are (so these are not yet available): +-- +-- * @{#SET_CLIENT.FilterZones}: Builds the SET_CLIENT with the clients within a @{Zone#ZONE}. +-- +-- 4.4) SET_CLIENT iterators: +-- ------------------------ +-- Once the filters have been defined and the SET_CLIENT has been built, you can iterate the SET_CLIENT with the available iterator methods. +-- The iterator methods will walk the SET_CLIENT set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the SET_CLIENT: +-- +-- * @{#SET_CLIENT.ForEachClient}: Calls a function for each alive client it finds within the SET_CLIENT. +-- +-- ==== +-- +-- @module Set +-- @author FlightControl + +--- SET_BASE class +-- @type SET_BASE +-- @extends Base#BASE +SET_BASE = { + ClassName = "SET_BASE", + Set = {}, +} + +--- Creates a new SET_BASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #SET_BASE self +-- @return #SET_BASE +-- @usage +-- -- Define a new SET_BASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. +-- DBObject = SET_BASE:New() +function SET_BASE:New( Database ) + + env.info( tostring( Database ) ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + self.Database = Database + + self.YieldInterval = 10 + self.TimeInterval = 0.001 + + return self +end + +--- Finds an @{Base#BASE} object based on the object Name. +-- @param #SET_BASE self +-- @param #string ObjectName +-- @return Base#BASE The Object found. +function SET_BASE:_Find( ObjectName ) + + local ObjectFound = self.Set[ObjectName] + return ObjectFound +end + + +--- Adds a @{Base#BASE} object in the @{Set#SET_BASE}, using the Object Name as the index. +-- @param #SET_BASE self +-- @param #string ObjectName +-- @param Base#BASE Object +-- @return Base#BASE The added BASE Object. +function SET_BASE:Add( ObjectName, Object ) + + self.Set[ObjectName] = Object +end + +--- Removes a @{Base#BASE} object from the @{Set#SET_BASE} and derived classes, based on the Object Name. +-- @param #SET_BASE self +-- @param #string ObjectName +function SET_BASE:Remove( ObjectName ) + + self.Set[ObjectName] = nil +end + +--- Define the SET iterator **"yield interval"** and the **"time interval"**. +-- @param #SET_BASE self +-- @param #number YieldInterval Sets the frequency when the iterator loop will yield after the number of objects processed. The default frequency is 10 objects processed. +-- @param #number TimeInterval Sets the time in seconds when the main logic will resume the iterator loop. The default time is 0.001 seconds. +-- @return #SET_BASE self +function SET_BASE:SetIteratorIntervals( YieldInterval, TimeInterval ) + + self.YieldInterval = YieldInterval + self.TimeInterval = TimeInterval + + return self +end + + + +--- Starts the filtering for the defined collection. +-- @param #SET_BASE self +-- @return #SET_BASE self +function SET_BASE:_FilterStart() + + for ObjectName, Object in pairs( self.Database ) do + + if self:IsIncludeObject( Object ) then + self:E( { "Adding Object:", ObjectName } ) + self:Add( ObjectName, Object ) + 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_BASE self +---- @return #SET_BASE self +--function SET_BASE:_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_BASE self +-- @param Event#EVENTDATA Event +function SET_BASE:_EventOnBirth( 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 ) + end + end +end + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #SET_BASE self +-- @param Event#EVENTDATA Event +function SET_BASE:_EventOnDeadOrCrash( Event ) + self:F3( { Event } ) + + if Event.IniDCSUnit then + local ObjectName, Object = self:FindInDatabase( Event ) + if ObjectName and Object then + self:Remove( ObjectName ) + end + end +end + +----- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +---- @param #SET_BASE self +---- @param Event#EVENTDATA Event +--function SET_BASE:_EventOnPlayerEnterUnit( Event ) +-- self:F3( { 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_BASE self +---- @param Event#EVENTDATA Event +--function SET_BASE:_EventOnPlayerLeaveUnit( Event ) +-- self:F3( { 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 + +--- Iterate the SET_BASE and derived classes and call an iterator function for the given SET_BASE, providing the Object for each element within the set and optional parameters. +-- @param #SET_BASE self +-- @param #function IteratorFunction The function that will be called. +-- @return #SET_BASE self +function SET_BASE:ForEach( IteratorFunction, arg, Set, Function, FunctionArguments ) + self:F3( arg ) + + local function CoRoutine() + local Count = 0 + for ObjectID, Object in pairs( Set ) do + self:T2( Object ) + if Function then + if Function( unpack( FunctionArguments ), Object ) == true then + IteratorFunction( Object, unpack( arg ) ) + end + else + IteratorFunction( Object, unpack( arg ) ) + end + Count = Count + 1 + if Count % self.YieldInterval == 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:T3( { 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, {}, self.TimeInterval, self.TimeInterval, 0 ) + + return self +end + + +----- Interate the SET_BASE and call an interator function for each **alive** unit, providing the Unit and optional parameters. +---- @param #SET_BASE self +---- @param #function IteratorFunction The function that will be called when there is an alive unit in the SET_BASE. The function needs to accept a UNIT parameter. +---- @return #SET_BASE self +--function SET_BASE:ForEachDCSUnitAlive( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.DCSUnitsAlive ) +-- +-- return self +--end +-- +----- Interate the SET_BASE and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. +---- @param #SET_BASE self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_BASE. The function needs to accept a UNIT parameter. +---- @return #SET_BASE self +--function SET_BASE:ForEachPlayer( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the SET_BASE and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #SET_BASE self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_BASE. The function needs to accept a CLIENT parameter. +---- @return #SET_BASE self +--function SET_BASE:ForEachClient( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end + + +--- Decides whether to include the Object +-- @param #SET_BASE self +-- @param #table Object +-- @return #SET_BASE self +function SET_BASE:IsIncludeObject( Object ) + self:F3( Object ) + + return true +end + +--- Flushes the current SET_BASE contents in the log ... (for debug reasons). +-- @param #SET_BASE self +-- @return #string A string with the names of the objects. +function SET_BASE:Flush() + self:F3() + + local ObjectNames = "" + for ObjectName, Object in pairs( self.Set ) do + ObjectNames = ObjectNames .. ObjectName .. ", " + end + self:T( { "Objects in Set:", ObjectNames } ) + + return ObjectNames +end + +-- SET_GROUP + +--- SET_GROUP class +-- @type SET_GROUP +-- @extends Set#SET_BASE +SET_GROUP = { + ClassName = "SET_GROUP", + 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 SET_GROUP object, building a set of groups belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #SET_GROUP self +-- @return #SET_GROUP +-- @usage +-- -- Define a new SET_GROUP Object. This DBObject will contain a reference to all alive GROUPS. +-- DBObject = SET_GROUP:New() +function SET_GROUP:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, SET_BASE:New( _DATABASE.GROUPS ) ) + + return self +end + +--- Add GROUP(s) to SET_GROUP. +-- @param Set#SET_GROUP self +-- @param #string AddGroupNames A single name or an array of GROUP names. +-- @return self +function SET_GROUP:AddGroupsByName( AddGroupNames ) + + local AddGroupNamesArray = ( type( AddGroupNames ) == "table" ) and AddGroupNames or { AddGroupNames } + + for AddGroupID, AddGroupName in pairs( AddGroupNamesArray ) do + self:Add( AddGroupName, GROUP:FindByName( AddGroupName ) ) + end + + return self +end + +--- Remove GROUP(s) from SET_GROUP. +-- @param Set#SET_GROUP self +-- @param Group#GROUP RemoveGroupNames A single name or an array of GROUP names. +-- @return self +function SET_GROUP:RemoveGroupsByName( RemoveGroupNames ) + + local RemoveGroupNamesArray = ( type( RemoveGroupNames ) == "table" ) and RemoveGroupNames or { RemoveGroupNames } + + for RemoveGroupID, RemoveGroupName in pairs( RemoveGroupNamesArray ) do + self:Remove( RemoveGroupName.GroupName ) + end + + return self +end + + + + +--- Finds a Group based on the Group Name. +-- @param #SET_GROUP self +-- @param #string GroupName +-- @return Group#GROUP The found Group. +function SET_GROUP:FindGroup( 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 #SET_GROUP self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #SET_GROUP self +function SET_GROUP: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 #SET_GROUP self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #SET_GROUP self +function SET_GROUP: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 #SET_GROUP self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #SET_GROUP self +function SET_GROUP: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 GROUP prefixes. +-- All the groups starting with the given prefixes will be included within the set. +-- @param #SET_GROUP self +-- @param #string Prefixes The prefix of which the group name starts with. +-- @return #SET_GROUP self +function SET_GROUP: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 #SET_GROUP self +-- @return #SET_GROUP self +function SET_GROUP: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_BASE birth event! +-- @param #SET_GROUP self +-- @param Event#EVENTDATA Event +-- @return #string The name of the GROUP +-- @return #table The GROUP +function SET_GROUP: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_BASE event or vise versa! +-- @param #SET_GROUP self +-- @param Event#EVENTDATA Event +-- @return #string The name of the GROUP +-- @return #table The GROUP +function SET_GROUP:FindInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSGroupName, self.Database[Event.IniDCSGroupName] +end + +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP, providing the GROUP and optional parameters. +-- @param #SET_GROUP self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroup( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set ) + + return self +end + +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence completely in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- @param #SET_GROUP self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroupCompletelyInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Group#GROUP GroupObject + function( ZoneObject, GroupObject ) + if GroupObject:IsCompletelyInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence partly in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- @param #SET_GROUP self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroupPartlyInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Group#GROUP GroupObject + function( ZoneObject, GroupObject ) + if GroupObject:IsPartlyInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence not in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- @param #SET_GROUP self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroupNotInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Group#GROUP GroupObject + function( ZoneObject, GroupObject ) + if GroupObject:IsNotInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + + +----- Interate the SET_GROUP and call an interator function for each **alive** player, providing the Group of the player and optional parameters. +---- @param #SET_GROUP self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_GROUP. The function needs to accept a GROUP parameter. +---- @return #SET_GROUP self +--function SET_GROUP:ForEachPlayer( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the SET_GROUP and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #SET_GROUP self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_GROUP. The function needs to accept a CLIENT parameter. +---- @return #SET_GROUP self +--function SET_GROUP:ForEachClient( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end + + +--- +-- @param #SET_GROUP self +-- @param Group#GROUP MooseGroup +-- @return #SET_GROUP self +function SET_GROUP: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 + +--- SET_UNIT class +-- @type SET_UNIT +-- @extends Set#SET_BASE +SET_UNIT = { + ClassName = "SET_UNIT", + 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, + }, + }, +} + + +--- Creates a new SET_UNIT object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #SET_UNIT self +-- @return #SET_UNIT +-- @usage +-- -- Define a new SET_UNIT Object. This DBObject will contain a reference to all alive Units. +-- DBObject = SET_UNIT:New() +function SET_UNIT:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, SET_BASE:New( _DATABASE.UNITS ) ) + + return self +end + +--- Add UNIT(s) to SET_UNIT. +-- @param Set#SET_UNIT self +-- @param #string AddUnitNames A single name or an array of UNIT names. +-- @return self +function SET_UNIT:AddUnitsByName( AddUnitNames ) + + local AddUnitNamesArray = ( type( AddUnitNames ) == "table" ) and AddUnitNames or { AddUnitNames } + + for AddUnitID, AddUnitName in pairs( AddUnitNamesArray ) do + self:Add( AddUnitName, UNIT:FindByName( AddUnitName ) ) + end + + return self +end + +--- Remove UNIT(s) from SET_UNIT. +-- @param Set#SET_UNIT self +-- @param Unit#UNIT RemoveUnitNames A single name or an array of UNIT names. +-- @return self +function SET_UNIT:RemoveUnitsByName( RemoveUnitNames ) + + local RemoveUnitNamesArray = ( type( RemoveUnitNames ) == "table" ) and RemoveUnitNames or { RemoveUnitNames } + + for RemoveUnitID, RemoveUnitName in pairs( RemoveUnitNamesArray ) do + self:Remove( RemoveUnitName.UnitName ) + end + + return self +end + + +--- Finds a Unit based on the Unit Name. +-- @param #SET_UNIT self +-- @param #string UnitName +-- @return Unit#UNIT The found Unit. +function SET_UNIT:FindUnit( UnitName ) + + local UnitFound = self.Set[UnitName] + return UnitFound +end + + + +--- Builds a set of units of coalitions. +-- Possible current coalitions are red, blue and neutral. +-- @param #SET_UNIT self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #SET_UNIT self +function SET_UNIT: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_UNIT self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #SET_UNIT self +function SET_UNIT: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_UNIT self +-- @param #string Types Can take those type strings known within DCS world. +-- @return #SET_UNIT self +function SET_UNIT: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_UNIT self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #SET_UNIT self +function SET_UNIT: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_UNIT self +-- @param #string Prefixes The prefix of which the unit name starts with. +-- @return #SET_UNIT self +function SET_UNIT: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 + + + + +--- Starts the filtering. +-- @param #SET_UNIT self +-- @return #SET_UNIT self +function SET_UNIT: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_BASE birth event! +-- @param #SET_UNIT self +-- @param Event#EVENTDATA Event +-- @return #string The name of the UNIT +-- @return #table The UNIT +function SET_UNIT:AddInDatabase( Event ) + self:F3( { Event } ) + + 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 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_BASE event or vise versa! +-- @param #SET_UNIT self +-- @param Event#EVENTDATA Event +-- @return #string The name of the UNIT +-- @return #table The UNIT +function SET_UNIT:FindInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] +end + +--- Interate the SET_UNIT and call an interator function for each **alive** UNIT, providing the UNIT and optional parameters. +-- @param #SET_UNIT self +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the SET_UNIT. The function needs to accept a UNIT parameter. +-- @return #SET_UNIT self +function SET_UNIT:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set ) + + return self +end + +--- Iterate the SET_UNIT and call an iterator function for each **alive** UNIT presence completely in a @{Zone}, providing the UNIT and optional parameters to the called function. +-- @param #SET_UNIT self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the SET_UNIT. The function needs to accept a UNIT parameter. +-- @return #SET_UNIT self +function SET_UNIT:ForEachUnitCompletelyInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Unit#UNIT UnitObject + function( ZoneObject, UnitObject ) + if UnitObject:IsCompletelyInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- Iterate the SET_UNIT and call an iterator function for each **alive** UNIT presence not in a @{Zone}, providing the UNIT and optional parameters to the called function. +-- @param #SET_UNIT self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the SET_UNIT. The function needs to accept a UNIT parameter. +-- @return #SET_UNIT self +function SET_UNIT:ForEachUnitNotInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Unit#UNIT UnitObject + function( ZoneObject, UnitObject ) + if UnitObject:IsNotInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + + + +----- Interate the SET_UNIT and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. +---- @param #SET_UNIT self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_UNIT. The function needs to accept a UNIT parameter. +---- @return #SET_UNIT self +--function SET_UNIT:ForEachPlayer( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the SET_UNIT and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #SET_UNIT self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_UNIT. The function needs to accept a CLIENT parameter. +---- @return #SET_UNIT self +--function SET_UNIT:ForEachClient( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end + + +--- +-- @param #SET_UNIT self +-- @param Unit#UNIT MUnit +-- @return #SET_UNIT self +function SET_UNIT:IsIncludeObject( 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: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 + end + MUnitInclude = MUnitInclude and MUnitCoalition + end + + if self.Filter.Categories then + local MUnitCategory = false + for CategoryID, CategoryName in pairs( self.Filter.Categories ) do + 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 + end + MUnitInclude = MUnitInclude and MUnitCategory + end + + if self.Filter.Types then + local MUnitType = false + for TypeID, TypeName in pairs( self.Filter.Types ) do + self:T3( { "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:T3( { "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:T3( { "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:T2( MUnitInclude ) + return MUnitInclude +end + + +--- SET_CLIENT + +--- SET_CLIENT class +-- @type SET_CLIENT +-- @extends Set#SET_BASE +SET_CLIENT = { + ClassName = "SET_CLIENT", + Clients = {}, + Filter = { + Coalitions = nil, + Categories = nil, + Types = nil, + Countries = nil, + ClientPrefixes = 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, + }, + }, +} + + +--- Creates a new SET_CLIENT object, building a set of clients belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #SET_CLIENT self +-- @return #SET_CLIENT +-- @usage +-- -- Define a new SET_CLIENT Object. This DBObject will contain a reference to all Clients. +-- DBObject = SET_CLIENT:New() +function SET_CLIENT:New() + -- Inherits from BASE + local self = BASE:Inherit( self, SET_BASE:New( _DATABASE.CLIENTS ) ) + + return self +end + +--- Add CLIENT(s) to SET_CLIENT. +-- @param Set#SET_CLIENT self +-- @param #string AddClientNames A single name or an array of CLIENT names. +-- @return self +function SET_CLIENT:AddClientsByName( AddClientNames ) + + local AddClientNamesArray = ( type( AddClientNames ) == "table" ) and AddClientNames or { AddClientNames } + + for AddClientID, AddClientName in pairs( AddClientNamesArray ) do + self:Add( AddClientName, CLIENT:FindByName( AddClientName ) ) + end + + return self +end + +--- Remove CLIENT(s) from SET_CLIENT. +-- @param Set#SET_CLIENT self +-- @param Client#CLIENT RemoveClientNames A single name or an array of CLIENT names. +-- @return self +function SET_CLIENT:RemoveClientsByName( RemoveClientNames ) + + local RemoveClientNamesArray = ( type( RemoveClientNames ) == "table" ) and RemoveClientNames or { RemoveClientNames } + + for RemoveClientID, RemoveClientName in pairs( RemoveClientNamesArray ) do + self:Remove( RemoveClientName.ClientName ) + end + + return self +end + + +--- Finds a Client based on the Client Name. +-- @param #SET_CLIENT self +-- @param #string ClientName +-- @return Client#CLIENT The found Client. +function SET_CLIENT:FindClient( ClientName ) + + local ClientFound = self.Set[ClientName] + return ClientFound +end + + + +--- Builds a set of clients of coalitions. +-- Possible current coalitions are red, blue and neutral. +-- @param #SET_CLIENT self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #SET_CLIENT self +function SET_CLIENT: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 clients out of categories. +-- Possible current categories are plane, helicopter, ground, ship. +-- @param #SET_CLIENT self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #SET_CLIENT self +function SET_CLIENT: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 clients of defined client types. +-- Possible current types are those types known within DCS world. +-- @param #SET_CLIENT self +-- @param #string Types Can take those type strings known within DCS world. +-- @return #SET_CLIENT self +function SET_CLIENT: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 clients of defined countries. +-- Possible current countries are those known within DCS world. +-- @param #SET_CLIENT self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #SET_CLIENT self +function SET_CLIENT: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 clients of defined client prefixes. +-- All the clients starting with the given prefixes will be included within the set. +-- @param #SET_CLIENT self +-- @param #string Prefixes The prefix of which the client name starts with. +-- @return #SET_CLIENT self +function SET_CLIENT:FilterPrefixes( Prefixes ) + if not self.Filter.ClientPrefixes then + self.Filter.ClientPrefixes = {} + end + if type( Prefixes ) ~= "table" then + Prefixes = { Prefixes } + end + for PrefixID, Prefix in pairs( Prefixes ) do + self.Filter.ClientPrefixes[Prefix] = Prefix + end + return self +end + + + + +--- Starts the filtering. +-- @param #SET_CLIENT self +-- @return #SET_CLIENT self +function SET_CLIENT: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_BASE birth event! +-- @param #SET_CLIENT self +-- @param Event#EVENTDATA Event +-- @return #string The name of the CLIENT +-- @return #table The CLIENT +function SET_CLIENT:AddInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] +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_BASE event or vise versa! +-- @param #SET_CLIENT self +-- @param Event#EVENTDATA Event +-- @return #string The name of the CLIENT +-- @return #table The CLIENT +function SET_CLIENT:FindInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] +end + +--- Interate the SET_CLIENT and call an interator function for each **alive** CLIENT, providing the CLIENT and optional parameters. +-- @param #SET_CLIENT self +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter. +-- @return #SET_CLIENT self +function SET_CLIENT:ForEachClient( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set ) + + return self +end + +--- Iterate the SET_CLIENT and call an iterator function for each **alive** CLIENT presence completely in a @{Zone}, providing the CLIENT and optional parameters to the called function. +-- @param #SET_CLIENT self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter. +-- @return #SET_CLIENT self +function SET_CLIENT:ForEachClientInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Client#CLIENT ClientObject + function( ZoneObject, ClientObject ) + if ClientObject:IsInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- Iterate the SET_CLIENT and call an iterator function for each **alive** CLIENT presence not in a @{Zone}, providing the CLIENT and optional parameters to the called function. +-- @param #SET_CLIENT self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter. +-- @return #SET_CLIENT self +function SET_CLIENT:ForEachClientNotInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Client#CLIENT ClientObject + function( ZoneObject, ClientObject ) + if ClientObject:IsNotInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- +-- @param #SET_CLIENT self +-- @param Client#CLIENT MClient +-- @return #SET_CLIENT self +function SET_CLIENT:IsIncludeObject( MClient ) + self:F2( MClient ) + + local MClientInclude = true + + if MClient then + local MClientName = MClient.UnitName + + if self.Filter.Coalitions then + local MClientCoalition = false + for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do + local ClientCoalitionID = _DATABASE:GetCoalitionFromClientTemplate( MClientName ) + self:T3( { "Coalition:", ClientCoalitionID, self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) + if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == ClientCoalitionID then + MClientCoalition = true + end + end + self:T( { "Evaluated Coalition", MClientCoalition } ) + MClientInclude = MClientInclude and MClientCoalition + end + + if self.Filter.Categories then + local MClientCategory = false + for CategoryID, CategoryName in pairs( self.Filter.Categories ) do + local ClientCategoryID = _DATABASE:GetCategoryFromClientTemplate( MClientName ) + self:T3( { "Category:", ClientCategoryID, self.FilterMeta.Categories[CategoryName], CategoryName } ) + if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == ClientCategoryID then + MClientCategory = true + end + end + self:T( { "Evaluated Category", MClientCategory } ) + MClientInclude = MClientInclude and MClientCategory + end + + if self.Filter.Types then + local MClientType = false + for TypeID, TypeName in pairs( self.Filter.Types ) do + self:T3( { "Type:", MClient:GetTypeName(), TypeName } ) + if TypeName == MClient:GetTypeName() then + MClientType = true + end + end + self:T( { "Evaluated Type", MClientType } ) + MClientInclude = MClientInclude and MClientType + end + + if self.Filter.Countries then + local MClientCountry = false + for CountryID, CountryName in pairs( self.Filter.Countries ) do + local ClientCountryID = _DATABASE:GetCountryFromClientTemplate(MClientName) + self:T3( { "Country:", ClientCountryID, country.id[CountryName], CountryName } ) + if country.id[CountryName] and country.id[CountryName] == ClientCountryID then + MClientCountry = true + end + end + self:T( { "Evaluated Country", MClientCountry } ) + MClientInclude = MClientInclude and MClientCountry + end + + if self.Filter.ClientPrefixes then + local MClientPrefix = false + for ClientPrefixId, ClientPrefix in pairs( self.Filter.ClientPrefixes ) do + self:T3( { "Prefix:", string.find( MClient.UnitName, ClientPrefix, 1 ), ClientPrefix } ) + if string.find( MClient.UnitName, ClientPrefix, 1 ) then + MClientPrefix = true + end + end + self:T( { "Evaluated Prefix", MClientPrefix } ) + MClientInclude = MClientInclude and MClientPrefix + end + end + + self:T2( MClientInclude ) + return MClientInclude +end + +--- This module contains the POINT classes. +-- +-- 1) @{Point#POINT_VEC3} class, extends @{Base#BASE} +-- =============================================== +-- The @{Point#POINT_VEC3} class defines a 3D point in the simulator. +-- +-- 1.1) POINT_VEC3 constructor +-- --------------------------- +-- +-- A new POINT instance can be created with: +-- +-- * @{#POINT_VEC3.New}(): a 3D point. +-- +-- 2) @{Point#POINT_VEC2} class, extends @{Point#POINT_VEC3} +-- ========================================================= +-- The @{Point#POINT_VEC2} class defines a 2D point in the simulator. The height coordinate (if needed) will be the land height + an optional added height specified. +-- +-- 2.1) POINT_VEC2 constructor +-- --------------------------- +-- +-- A new POINT instance can be created with: +-- +-- * @{#POINT_VEC2.New}(): a 2D point. +-- +-- @module Point +-- @author FlightControl + +--- The POINT_VEC3 class +-- @type POINT_VEC3 +-- @extends Base#BASE +-- @field #POINT_VEC3.SmokeColor SmokeColor +-- @field #POINT_VEC3.FlareColor FlareColor +POINT_VEC3 = { + ClassName = "POINT_VEC3", + SmokeColor = { + Green = trigger.smokeColor.Green, + Red = trigger.smokeColor.Red, + White = trigger.smokeColor.White, + Orange = trigger.smokeColor.Orange, + Blue = trigger.smokeColor.Blue + }, + FlareColor = { + Green = trigger.flareColor.Green, + Red = trigger.flareColor.Red, + White = trigger.flareColor.White, + Yellow = trigger.flareColor.Yellow + }, + } + +--- SmokeColor +-- @type POINT_VEC3.SmokeColor +-- @field Green +-- @field Red +-- @field White +-- @field Orange +-- @field Blue + +--- FlareColor +-- @type POINT_VEC3.FlareColor +-- @field Green +-- @field Red +-- @field White +-- @field Yellow + +-- Constructor. + +--- Create a new POINT_VEC3 object. +-- @param #POINT_VEC3 self +-- @param DCSTypes#Distance x The x coordinate of the Vec3 point, pointing to the North. +-- @param DCSTypes#Distance y The y coordinate of the Vec3 point, pointing Upwards. +-- @param DCSTypes#Distance z The z coordinate of the Vec3 point, pointing to the Right. +-- @return Point#POINT_VEC3 +function POINT_VEC3:New( x, y, z ) + + local self = BASE:Inherit( self, BASE:New() ) + self:F2( { x, y, z } ) + self.PointVec3 = { x = x, y = y, z = z } + return self +end + +--- Smokes the point in a color. +-- @param #POINT_VEC3 self +-- @param Point#POINT_VEC3.SmokeColor SmokeColor +function POINT_VEC3:Smoke( SmokeColor ) + self:F2( { SmokeColor, self.PointVec3 } ) + trigger.action.smoke( self.PointVec3, SmokeColor ) +end + +--- Smoke the POINT_VEC3 Green. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeGreen() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.Green ) +end + +--- Smoke the POINT_VEC3 Red. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeRed() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.Red ) +end + +--- Smoke the POINT_VEC3 White. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeWhite() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.White ) +end + +--- Smoke the POINT_VEC3 Orange. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeOrange() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.Orange ) +end + +--- Smoke the POINT_VEC3 Blue. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeBlue() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.Blue ) +end + +--- Flares the point in a color. +-- @param #POINT_VEC3 self +-- @param Point#POINT_VEC3.FlareColor +-- @param DCSTypes#Azimuth (optional) Azimuth The azimuth of the flare direction. The default azimuth is 0. +function POINT_VEC3:Flare( FlareColor, Azimuth ) + self:F2( { FlareColor, self.PointVec3 } ) + trigger.action.signalFlare( self.PointVec3, FlareColor, Azimuth and Azimuth or 0 ) +end + +--- Flare the POINT_VEC3 White. +-- @param #POINT_VEC3 self +-- @param DCSTypes#Azimuth (optional) Azimuth The azimuth of the flare direction. The default azimuth is 0. +function POINT_VEC3:FlareWhite( Azimuth ) + self:F2( Azimuth ) + self:Flare( POINT_VEC3.FlareColor.White, Azimuth ) +end + +--- Flare the POINT_VEC3 Yellow. +-- @param #POINT_VEC3 self +-- @param DCSTypes#Azimuth (optional) Azimuth The azimuth of the flare direction. The default azimuth is 0. +function POINT_VEC3:FlareYellow( Azimuth ) + self:F2( Azimuth ) + self:Flare( POINT_VEC3.FlareColor.Yellow, Azimuth ) +end + +--- Flare the POINT_VEC3 Green. +-- @param #POINT_VEC3 self +-- @param DCSTypes#Azimuth (optional) Azimuth The azimuth of the flare direction. The default azimuth is 0. +function POINT_VEC3:FlareGreen( Azimuth ) + self:F2( Azimuth ) + self:Flare( POINT_VEC3.FlareColor.Green, Azimuth ) +end + +--- Flare the POINT_VEC3 Red. +-- @param #POINT_VEC3 self +function POINT_VEC3:FlareRed( Azimuth ) + self:F2( Azimuth ) + self:Flare( POINT_VEC3.FlareColor.Red, Azimuth ) +end + + +--- The POINT_VEC2 class +-- @type POINT_VEC2 +-- @extends Point#POINT_VEC3 +POINT_VEC2 = { + ClassName = "POINT_VEC2", + } + +--- Create a new POINT_VEC2 object. +-- @param #POINT_VEC2 self +-- @param DCSTypes#Distance x The x coordinate of the Vec3 point, pointing to the North. +-- @param DCSTypes#Distance y The y coordinate of the Vec3 point, pointing to the Right. +-- @param DCSTypes#Distance LandHeightAdd (optional) The default height if required to be evaluated will be the land height of the x, y coordinate. You can specify an extra height to be added to the land height. +-- @return Point#POINT_VEC2 +function POINT_VEC2:New( x, y, LandHeightAdd ) + + local LandHeight = land.getHeight( { ["x"] = x, ["y"] = y } ) + if LandHeightAdd then + LandHeight = LandHeight + LandHeightAdd + end + + local self = BASE:Inherit( self, POINT_VEC3:New( x, LandHeight, y ) ) + self:F2( { x, y, LandHeightAdd } ) + + return self +end + + +--- The main include file for the MOOSE system. + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Scheduler" ) +Include.File( "Event" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Unit" ) +Include.File( "Zone" ) +Include.File( "Client" ) +Include.File( "Static" ) +Include.File( "Database" ) +Include.File( "Set" ) +Include.File( "Point" ) Include.File( "Moose" ) +Include.File( "Scoring" ) +Include.File( "Cargo" ) +Include.File( "Message" ) +Include.File( "Stage" ) +Include.File( "Task" ) +Include.File( "GoHomeTask" ) +Include.File( "DestroyBaseTask" ) +Include.File( "DestroyGroupsTask" ) +Include.File( "DestroyRadarsTask" ) +Include.File( "DestroyUnitTypesTask" ) +Include.File( "PickupTask" ) +Include.File( "DeployTask" ) +Include.File( "NoTask" ) +Include.File( "RouteTask" ) +Include.File( "Mission" ) +Include.File( "CleanUp" ) +Include.File( "Spawn" ) +Include.File( "Movement" ) +Include.File( "Sead" ) +Include.File( "Escort" ) +Include.File( "MissileTrainer" ) +Include.File( "AIBalancer" ) +Include.File( "AirbasePolice" ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-- 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 + + +--- 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 ):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 ):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 + ):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 + ):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 + ):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 ):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 ):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 + ):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 + ):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, 30, "Player Scores" ):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, 30, "Player Scores" ):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 + + + + + + + +--- 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, 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 +--- This module contains the MESSAGE class. +-- +-- 1) @{Message#MESSAGE} class, extends @{Base#BASE} +-- ================================================= +-- Message System to display Messages to Clients, Coalitions or All. +-- Messages are shown on the display panel for an amount of seconds, and will then disappear. +-- Messages can contain a category which is indicating the category of the message. +-- +-- 1.1) MESSAGE construction methods +-- --------------------------------- +-- Messages are created with @{Message#MESSAGE.New}. Note that when the MESSAGE object is created, no message is sent yet. +-- To send messages, you need to use the To functions. +-- +-- 1.2) Send messages with MESSAGE To methods +-- ------------------------------------------ +-- Messages are sent to: +-- +-- * Clients with @{Message#MESSAGE.ToClient}. +-- * Coalitions with @{Message#MESSAGE.ToCoalition}. +-- * All Players with @{Message#MESSAGE.ToAll}. +-- +-- @module Message +-- @author FlightControl + +--- The MESSAGE class +-- @type MESSAGE +-- @extends Base#BASE +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 #number MessageDuration is a number in seconds of how long the MESSAGE should be shown on the display panel. +-- @param #string MessageCategory (optional) is a string expressing the "category" of the Message. The category will be shown as the first text in the message followed by a ": ". +-- @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!", 25, "End of Mission" ) +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", 25, "Penalty" ) +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", 25, "Score") +function MESSAGE:New( MessageText, MessageDuration, MessageCategory ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MessageText, MessageDuration, MessageCategory } ) + + -- 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.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 + + + + + + + +--- 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, "Command" ) + else + Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, "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, "Co-Pilot", 20, "Route" ) + else + Client:Message( RouteMessage, self.MSG.TIME, "Command", 20, "Route" ) + 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, "Co-Pilot" ) + else + Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, "Command" ) + 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, Host ) + + 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, 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] .. '.', + "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] .. '.', + "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, "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, "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, "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, "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, "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, "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, 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, 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, Host ) + 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, 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, 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, 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, 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, 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, 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, "Co-Pilot" ) + else + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, "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 + + + + + + + +--- 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, "Mission Command: Task Status", 30, "Task status" ) + 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 + +--- 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 + + + +--- 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 + + + +--- 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 + + + +--- 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 + + + +--- 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 + +--- 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 + + + +--- 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 + +--- 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 + +--- 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, "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$",""), 10, "Mission Command: Mission Report" ):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, self.TimeShow, "Mission time" ):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 + + + + + + + +--- 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 + 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 + 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. + -- 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 ) + + 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 + 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 + +--- This module contains the SPAWN class. +-- +-- 1) @{Spawn#SPAWN} class, extends @{Base#BASE} +-- ============================================= +-- 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. +-- +-- 1.1) 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. +-- +-- 1.2) 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}. +-- +-- 1.3) 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. +-- +-- 1.4) 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 + +--- 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 self +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 + SpawnTemplate.lateActivation = false -- TODO BUGFIX + + if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then + self:T( "For ground units, visible needs to be false..." ) + SpawnTemplate.visible = false -- TODO BUGFIX + 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, self.SpawnRandomizeTemplate } ) + + 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 + +--- 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) + +--- 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. +-- +-- +-- @usage +-- -- Declare a new EscortPlanes object as follows: +-- +-- -- First find the GROUP object and the CLIENT object. +-- local EscortClient = CLIENT:FindByName( "Unit Name" ) -- The Unit Name is the name of the unit flagged with the skill Client in the mission editor. +-- local EscortGroup = GROUP:FindByName( "Group Name" ) -- The Group Name is the name of the group that will escort the Escort Client. +-- +-- -- Now use these 2 objects to construct the new EscortPlanes object. +-- EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the mission. You are escorted by a plane with code name 'Desert', which can be instructed through the F10 radio menu." ) +-- +-- +-- +-- @module Escort +-- @author FlightControl + +--- ESCORT class +-- @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 Scheduler#SCHEDULER FollowScheduler The instance of the SCHEDULER class. +-- @field #number FollowDistance The current follow distance. +-- @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 = 1, + 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, + SmokeDirectionVector = false, + 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 +-- @usage +-- -- Declare a new EscortPlanes object as follows: +-- +-- -- First find the GROUP object and the CLIENT object. +-- local EscortClient = CLIENT:FindByName( "Unit Name" ) -- The Unit Name is the name of the unit flagged with the skill Client in the mission editor. +-- local EscortGroup = GROUP:FindByName( "Group Name" ) -- The Group Name is the name of the group that will escort the Escort Client. +-- +-- -- Now use these 2 objects to construct the new EscortPlanes object. +-- EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the mission. You are escorted by a plane with code name 'Desert', which can be instructed through the F10 radio menu." ) +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 + + -- 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 = {} + 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 + ) + + self.FollowDistance = 100 + self.CT1 = 0 + self.GT1 = 0 + self.FollowScheduler = SCHEDULER:New( self, self._FollowScheduler, {}, 1, .5, .01 ) + self.EscortMode = ESCORT.MODE.MISSION + self.FollowScheduler:Stop() + + return self +end + +--- This function is for test, it will put on the frequency of the FollowScheduler a red smoke at the direction vector calculated for the escort to fly to. +-- This allows to visualize where the escort is flying to. +-- @param #ESCORT self +-- @param #boolean SmokeDirection If true, then the direction vector will be smoked. +function ESCORT:TestSmokeDirectionVector( SmokeDirection ) + self.SmokeDirectionVector = ( SmokeDirection == true ) and true or false +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 + + self.FollowScheduler:Stop() + + 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 } ) + + self.FollowScheduler:Stop() + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + self.EscortMode = ESCORT.MODE.FOLLOW + + self.CT1 = 0 + self.GT1 = 0 + self.FollowScheduler:Start() + + 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 + + self.FollowScheduler:Stop() + + 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:Start() + end + +end + +--- @param Group#GROUP EscortGroup +function _Resume( EscortGroup ) + env.info( '_Resume' ) + + local Escort = EscortGroup:GetState( EscortGroup, "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 + + self.FollowScheduler:Stop() + + self:T( AttackUnit ) + + if EscortGroup:IsAir() then + EscortGroup:OptionROEOpenFire() + EscortGroup:OptionROTPassiveDefense() + EscortGroup:SetState( EscortGroup, "Escort", self ) +-- 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 + + self.FollowScheduler:Stop() + + 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 + + self.FollowScheduler:Stop() + + 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() + self:F( { self.FollowDistance } ) + + self:T( {self.EscortClient.UnitName, self.EscortGroup.GroupName } ) + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + + local ClientUnit = self.EscortClient:GetClientGroupUnit() + local GroupUnit = self.EscortGroup:GetUnit( 1 ) + local FollowDistance = self.FollowDistance + + self:T( {ClientUnit.UnitName, GroupUnit.UnitName } ) + + if self.CT1 == 0 and self.GT1 == 0 then + self.CV1 = ClientUnit:GetPointVec3() + self:T( { "self.CV1", self.CV1 } ) + 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 } + + if self.SmokeDirectionVector == true then + trigger.action.smoke( GDV, trigger.smokeColor.Red ) + end + + 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, FollowDistance, Time:", CS, GS, Speed, FollowDistance, 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 + + +--- The MISSILETRAINER class +-- @type MISSILETRAINER +-- @field Set#SET_CLIENT DBClients +-- @extends Base#BASE +MISSILETRAINER = { + ClassName = "MISSILETRAINER", + TrackingMissiles = {}, +} + +function MISSILETRAINER._Alive( Client, self ) + + if self.Briefing then + Client:Message( self.Briefing, 15, "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, "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 + +--- 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.DBClients = SET_CLIENT:New():FilterStart() + + +-- for ClientID, Client in pairs( self.DBClients.Database ) do +-- self:E( "ForEach:" .. Client.UnitName ) +-- Client:Alive( self._Alive, self ) +-- end +-- + self.DBClients:ForEachClient( + function( Client ) + self:E( "ForEach:" .. Client.UnitName ) + Client:Alive( self._Alive, self ) + 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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Messages OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Missile tracking to all players OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Missile tracking OFF", 15, "Menu" ):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.", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Alerts to all players OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Alerts Hits OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Alerts Launches OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Range display OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Bearing display OFF", 15, "Menu" ):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)", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Menus are DISABLED", 15, "Menu" ):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", 15, "Menu" ):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:FindClient( 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 ), 5, "Launch Alert" ) + + if self.AlertsToAll then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + + local ClientID = Client:GetID() + self:T( ClientID ) + 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() + ), 15, "Hit Alert" ) + + 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() + ), 5, "Tracking" ) + + 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, 1, "Tracking" ):ToClient( Client ) + end + end + end + + return true +end +--- This module contains the AIBALANCER class. +-- +-- === +-- +-- 1) @{AIBalancer#AIBALANCER} class, extends @{Base#BASE} +-- ================================================ +-- The @{AIBalancer#AIBALANCER} class controls the dynamic spawning of AI GROUPS depending on a SET_CLIENT. +-- There will be as many AI GROUPS spawned as there at CLIENTS in SET_CLIENT not spawned. +-- +-- 1.1) AIBALANCER construction method: +-- ------------------------------------ +-- Create a new AIBALANCER object with the @{#AIBALANCER.New} method: +-- +-- * @{#AIBALANCER.New}: Creates a new AIBALANCER object. +-- +-- +-- === +-- @module AIBalancer +-- @author FlightControl + +--- AIBALANCER class +-- @type AIBALANCER +-- @field Set#SET_CLIENT SetClient +-- @field Spawn#SPAWN SpawnAI +-- @extends Base#BASE +AIBALANCER = { + ClassName = "AIBALANCER", +} + +--- Creates a new AIBALANCER object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #AIBALANCER self +-- @param SetClient A SET_CLIENT object that will contain the CLIENT objects to be monitored if they are alive or not (joined by a player). +-- @param SpawnAI A SPAWN object that will spawn the AI units required, balancing the SetClient. +-- @return #AIBALANCER self +function AIBALANCER:New( SetClient, SpawnAI ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + self.SetClient = SetClient + self.SpawnAI = SpawnAI + + self.AIMonitorSchedule = SCHEDULER:New( self, self._ClientAliveMonitorScheduler, {}, 1, 10, 0 ) + + return self +end + +--- @param #AIBALANCER self +function AIBALANCER:_ClientAliveMonitorScheduler() + + self.SetClient:ForEachClient( + --- @param Client#CLIENT Client + function( Client ) + local ClientAIAliveState = Client:GetState( self, 'AIAlive' ) + self:T( ClientAIAliveState ) + if Client:IsAlive() then + if ClientAIAliveState == true then + Client:SetState( self, 'AIAlive', false ) + local AIGroup = Client:GetState( self, 'AIGroup' ) -- Group#GROUP + AIGroup:Destroy() + end + else + if not ClientAIAliveState or ClientAIAliveState == false then + Client:SetState( self, 'AIAlive', true ) + Client:SetState( self, 'AIGroup', self.SpawnAI:Spawn() ) + end + end + end + ) + return true +end + + + + +BASE:TraceOnOff( false ) env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index a76c94ee8..9c8bf3739 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,43 +1,20211 @@ -env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160614_1700' ) - +env.info( '*** MOOSE STATIC INCLUDE START *** ' ) +env.info( 'Moose Generation Timestamp: 20160615_0641' ) local base = _G Include = {} - -Include.Path = function() - local str = debug.getinfo(2, "S").source - return str:match("(.*/)"):sub(1,-2):gsub("\\","/") +Include.Files = {} +Include.File = function( IncludeFile ) 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() +--- Various routines +-- @module routines +-- @author Flightcontrol + +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 - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath ) - return f() + 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 -Include.ProgramPath = "Scripts/Moose/" -Include.MissionPath = Include.Path() -env.info( "Include.ProgramPath = " .. Include.ProgramPath) -env.info( "Include.MissionPath = " .. Include.MissionPath) +routines.utils.toDegree = function(angle) + return angle*180/math.pi +end -Include.Files = {} +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, MsgTime, "Message" ):ToCoalition( coalition.side.RED ):ToCoalition( coalition.side.BLUE ) +end + +function MessageToRed( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, MsgTime, "To Red Coalition" ):ToCoalition( coalition.side.RED ) +end + +function MessageToBlue( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, MsgTime, "To Blue Coalition" ):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' )) + +--- This module contains the BASE class. +-- +-- 1) @{#BASE} class +-- ================= +-- The @{#BASE} class is the super class for all 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 the **"Saved Games\DCS\Logs"** folder. +-- +-- Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes. +-- +-- 1.1) BASE constructor +-- --------------------- +-- Any class derived from BASE, must use the @{Base#BASE.New) constructor within the @{Base#BASE.Inherit) method. +-- See an example at the @{Base#BASE.New} method how this is done. +-- +-- 1.2) 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. +-- +-- 1.2.1) Tracing functions +-- ------------------------ +-- There are basically 3 types of tracing methods available within BASE: +-- +-- * @{#BASE.F}: Trace the beginning of a function and its given parameters. An F is indicated at column 44 in the DCS.log file. +-- * @{#BASE.T}: Trace further logic within a function giving optional variables or parameters. A T is indicated at column 44 in the DCS.log file. +-- * @{#BASE.E}: Trace an exception within a function giving optional variables or parameters. An E is indicated at column 44 in the DCS.log file. An exception will always be traced. +-- +-- 1.2.2) 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. +-- +-- 1.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 + + + +local _TraceOnOff = true +local _TraceLevel = 1 +local _TraceAll = false +local _TraceClass = {} +local _TraceClassMethod = {} + +local _ClassID = 0 + +--- The BASE Class +-- @type BASE +-- @field ClassName The name of the class. +-- @field ClassID The ID number of the class. +-- @field ClassNameAndID The name of the class concatenated with the ID number of the class. +BASE = { + ClassName = "BASE", + ClassID = 0, + Events = {}, + States = {} +} + +--- 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 +-- -- This declares the constructor of the class TASK, inheriting from BASE. +-- --- TASK constructor +-- -- @param #TASK self +-- -- @param Parameter The parameter of the New constructor. +-- -- @return #TASK self +-- function TASK:New( Parameter ) +-- +-- local self = BASE:Inherit( self, BASE:New() ) +-- +-- self.Variable = Parameter +-- +-- return self +-- end +-- @todo need to investigate if the deepCopy is really needed... Don't think so. +function BASE:New() + local self = routines.utils.deepCopy( self ) -- Create a new self instance + local MetaTable = {} + setmetatable( self, MetaTable ) + self.__index = self + _ClassID = _ClassID + 1 + self.ClassID = _ClassID + self.ClassNameAndID = string.format( '%s#%09d', self.ClassName, self.ClassID ) + return self +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 ) + --local Parent = 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 self.ClassNameAndID +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 + +function BASE:SetState( Object, StateName, State ) + + local ClassNameAndID = Object:GetClassNameAndID() + + if not self.States[ClassNameAndID] then + self.States[ClassNameAndID] = {} + end + self.States[ClassNameAndID][StateName] = State + self:F2( { ClassNameAndID, StateName, State } ) + + return self.States[ClassNameAndID][StateName] +end + +function BASE:GetState( Object, StateName ) + + local ClassNameAndID = Object:GetClassNameAndID() + + if self.States[ClassNameAndID] then + local State = self.States[ClassNameAndID][StateName] + self:F2( { ClassNameAndID, StateName, State } ) + return State + end + + return nil +end + +function BASE:ClearState( Object, StateName ) + + local ClassNameAndID = Object:GetClassNameAndID() + if self.States[ClassNameAndID] then + self.States[ClassNameAndID][StateName] = nil + end +end + +-- Trace section + +-- Log a trace (only shown when trace is on) +-- TODO: Make trace function using variable parameters. + +--- Set trace on or off +-- Note that when trace is off, no debug statement is performed, increasing performance! +-- When Moose is loaded statically, (as one file), tracing is switched off by default. +-- So tracing must be switched on manually in your mission if you are using Moose statically. +-- When moose is loading dynamically (for moose class development), tracing is switched on by default. +-- @param BASE self +-- @param #boolean TraceOnOff Switch the tracing on or off. +-- @usage +-- -- Switch the tracing On +-- BASE:TraceOn( true ) +-- +-- -- Switch the tracing Off +-- BASE:TraceOn( false ) +function BASE:TraceOnOff( TraceOnOff ) + _TraceOnOff = TraceOnOff +end + +--- Set trace level +-- @param #BASE self +-- @param #number Level +function BASE:TraceLevel( Level ) + _TraceLevel = Level + self:E( "Tracing level " .. Level ) +end + +--- Trace all methods in MOOSE +-- @param #BASE self +-- @param #boolean TraceAll true = trace all methods in MOOSE. +function BASE:TraceAll( TraceAll ) + + _TraceAll = TraceAll + + if _TraceAll then + self:E( "Tracing all methods in MOOSE " ) + else + self:E( "Switched off tracing all methods in MOOSE" ) + end +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. This function is private. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:_F( Arguments, DebugInfoCurrentParam, DebugInfoFromParam ) + + if ( _TraceAll == true ) or ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = DebugInfoCurrentParam and DebugInfoCurrentParam or debug.getinfo( 2, "nl" ) + local DebugInfoFrom = DebugInfoFromParam and DebugInfoFromParam or debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceAll == true or _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = 0 + if DebugInfoCurrent.currentline then + LineCurrent = DebugInfoCurrent.currentline + end + 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. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F( Arguments ) + + if _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 1 then + self:_F( Arguments, DebugInfoCurrent, DebugInfoFrom ) + 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 _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 2 then + self:_F( Arguments, DebugInfoCurrent, DebugInfoFrom ) + end + 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 _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 3 then + self:_F( Arguments, DebugInfoCurrent, DebugInfoFrom ) + end + end +end + +--- Trace a function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:_T( Arguments, DebugInfoCurrentParam, DebugInfoFromParam ) + + if ( _TraceAll == true ) or ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = DebugInfoCurrentParam and DebugInfoCurrentParam or debug.getinfo( 2, "nl" ) + local DebugInfoFrom = DebugInfoFromParam and DebugInfoFromParam or debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceAll == true or _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = 0 + if DebugInfoCurrent.currentline then + LineCurrent = DebugInfoCurrent.currentline + end + 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 1. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T( Arguments ) + + if _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 1 then + self:_T( Arguments, DebugInfoCurrent, DebugInfoFrom ) + 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 _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 2 then + self:_T( Arguments, DebugInfoCurrent, DebugInfoFrom ) + end + 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 _TraceOnOff then + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + if _TraceLevel >= 3 then + self:_T( Arguments, DebugInfoCurrent, DebugInfoFrom ) + end + 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 + + + +--- This module contains the SCHEDULER class. +-- +-- 1) @{Scheduler#SCHEDULER} class, extends @{Base#BASE} +-- ===================================================== +-- The @{Scheduler#SCHEDULER} class models time events calling given event handling functions. +-- +-- 1.1) SCHEDULER constructor +-- -------------------------- +-- The SCHEDULER class is quite easy to use: +-- +-- * @{Scheduler#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. +-- +-- SCHEDULER timer stop and start +-- ------------------------------ +-- The SCHEDULER can be stopped and restarted with the following methods: +-- +-- * @{Scheduler#SCHEDULER.Start}: (Re-)Start the scheduler. +-- * @{Scheduler#SCHEDULER.Stop}: Stop the scheduler. +-- +-- @module Scheduler +-- @author FlightControl + +--- The SCHEDULER class +-- @type SCHEDULER +-- @field #number ScheduleID the ID of the scheduler. +-- @extends Base#BASE +SCHEDULER = { + ClassName = "SCHEDULER", +} + +--- 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 + self.Repeat = false + + 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.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 ) + + if self.RepeatSecondsInterval ~= 0 then + self.Repeat = true + end + self.ScheduleID = 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 + if self.ScheduleID then + timer.removeFunction( self.ScheduleID ) + end + self.ScheduleID = nil + + return self +end + +-- Private Functions + +--- @param #SCHEDULER self +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( { self.TimeEventFunctionArguments, Status, Result, self.StartTime, self.RepeatSecondsInterval, self.RandomizationFactor, self.StopSeconds } ) + + if Status and ( ( Result == nil ) or ( Result and Result ~= false ) ) then + if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then + local ScheduleTime = + timer.getTime() + + self.RepeatSecondsInterval + + math.random( + - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), + ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) + ) + + 0.01 + self:T( { self.TimeEventFunctionArguments, "Repeat:", timer.getTime(), ScheduleTime } ) + return ScheduleTime -- returns the next time the function needs to be called. + else + timer.removeFunction( self.ScheduleID ) + self.ScheduleID = nil + end + else + timer.removeFunction( self.ScheduleID ) + self.ScheduleID = nil + end + + return nil +end + + + + + + + + + + + + + + + + +--- The EVENT class models an efficient event handling process between other classes and its units, weapons. +-- @module Event +-- @author FlightControl + +--- 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:E( { "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:E( { "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 + +--- 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 +--- This module contains the GROUP class. +-- +-- 1) @{Group#GROUP} class, extends @{Base#BASE} +-- ============================================= +-- The @{Group#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. +-- +-- **IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil).** +-- +-- 1.1) 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. +-- +-- 1.2) GROUP task methods +-- ----------------------- +-- Several group task methods are available that help you to prepare tasks. +-- These methods return a string consisting of the task description, which can then be given to either a @{Group#GROUP.PushTask} or @{Group#SetTask} method to assign the task to the GROUP. +-- Tasks are specific for the category of the GROUP, more specific, for AIR, GROUND or AIR and GROUND. +-- Each task description where applicable indicates for which group category the task is valid. +-- There are 2 main subdivisions of tasks: Assigned tasks and EnRoute tasks. +-- +-- ### 1.2.1) Assigned task methods +-- +-- Assigned task methods make the group execute the task where the location of the (possible) targets of the task are known before being detected. +-- This is different from the EnRoute tasks, where the targets of the task need to be detected before the task can be executed. +-- +-- Find below a list of the **assigned task** methods: +-- +-- * @{#GROUP.TaskAttackGroup}: (AIR) Attack a Group. +-- * @{#GROUP.TaskAttackMapObject}: (AIR) Attacking the map object (building, structure, e.t.c). +-- * @{#GROUP.TaskAttackUnit}: (AIR) Attack the Unit. +-- * @{#GROUP.TaskBombing}: (AIR) Delivering weapon at the point on the ground. +-- * @{#GROUP.TaskBombingRunway}: (AIR) Delivering weapon on the runway. +-- * @{#GROUP.TaskEmbarking}: (AIR) Move the group to a Vec2 Point, wait for a defined duration and embark a group. +-- * @{#GROUP.TaskEmbarkToTransport}: (GROUND) Embark to a Transport landed at a location. +-- * @{#GROUP.TaskEscort}: (AIR) Escort another airborne group. +-- * @{#GROUP.TaskFAC_AttackGroup}: (AIR + GROUND) The task makes the group/unit a FAC and orders the FAC to control the target (enemy ground group) destruction. +-- * @{#GROUP.TaskFireAtPoint}: (GROUND) Fire at a VEC2 point until ammunition is finished. +-- * @{#GROUP.TaskFollow}: (AIR) Following another airborne group. +-- * @{#GROUP.TaskHold}: (GROUND) Hold ground group from moving. +-- * @{#GROUP.TaskHoldPosition}: (AIR) Hold position at the current position of the first unit of the group. +-- * @{#GROUP.TaskLand}: (AIR HELICOPTER) Landing at the ground. For helicopters only. +-- * @{#GROUP.TaskLandAtZone}: (AIR) Land the group at a @{Zone#ZONE_RADIUS). +-- * @{#GROUP.TaskOrbitCircle}: (AIR) Orbit at the current position of the first unit of the group at a specified alititude. +-- * @{#GROUP.TaskOrbitCircleAtVec2}: (AIR) Orbit at a specified position at a specified alititude during a specified duration with a specified speed. +-- * @{#GROUP.TaskRefueling}: (AIR) Refueling from the nearest tanker. No parameters. +-- * @{#GROUP.TaskRoute}: (AIR + GROUND) Return a Misson task to follow a given route defined by Points. +-- * @{#GROUP.TaskRouteToVec2}: (AIR + GROUND) Make the Group move to a given point. +-- * @{#GROUP.TaskRouteToVec3}: (AIR + GROUND) Make the Group move to a given point. +-- * @{#GROUP.TaskRouteToZone}: (AIR + GROUND) Route the group to a given zone. +-- +-- ### 1.2.2) EnRoute task methods +-- +-- EnRoute tasks require the targets of the task need to be detected by the group (using its sensors) before the task can be executed: +-- +-- * @{#GROUP.EnRouteTaskAWACS}: (AIR) Aircraft will act as an AWACS for friendly units (will provide them with information about contacts). No parameters. +-- * @{#GROUP.EnRouteTaskEngageGroup}: (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. +-- * @{#GROUP.EnRouteTaskEngageTargets}: (AIR) Engaging targets of defined types. +-- * @{#GROUP.EnRouteTaskEWR}: (AIR) Attack the Unit. +-- * @{#GROUP.EnRouteTaskFAC}: (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. +-- * @{#GROUP.EnRouteTaskFAC_EngageGroup}: (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. +-- * @{#GROUP.EnRouteTaskTanker}: (AIR) Aircraft will act as a tanker for friendly units. No parameters. +-- +-- ### 1.2.3) Preparation task methods +-- +-- There are certain task methods that allow to tailor the task behaviour: +-- +-- * @{#GROUP.TaskWrappedAction}: Return a WrappedAction Task taking a Command. +-- * @{#GROUP.TaskCombo}: Return a Combo Task taking an array of Tasks. +-- * @{#GROUP.TaskCondition}: Return a condition section for a controlled task. +-- * @{#GROUP.TaskControlled}: Return a Controlled Task taking a Task and a TaskCondition. +-- +-- ### 1.2.4) Obtain the mission from group templates +-- +-- Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another: +-- +-- * @{#GROUP.TaskMission}: (AIR + GROUND) Return a mission task from a mission template. +-- +-- 1.3) GROUP Command methods +-- -------------------------- +-- Group **command methods** prepare the execution of commands using the @{#GROUP.SetCommand} method: +-- +-- * @{#GROUP.CommandDoScript}: Do Script command. +-- * @{#GROUP.CommandSwitchWayPoint}: Perform a switch waypoint command. +-- +-- 1.4) GROUP Option methods +-- ------------------------- +-- Group **Option methods** change the behaviour of the Group while being alive. +-- +-- ### 1.4.1) Rule of Engagement: +-- +-- * @{#GROUP.OptionROEWeaponFree} +-- * @{#GROUP.OptionROEOpenFire} +-- * @{#GROUP.OptionROEReturnFire} +-- * @{#GROUP.OptionROEEvadeFire} +-- +-- To check whether an ROE option is valid for a specific group, use: +-- +-- * @{#GROUP.OptionROEWeaponFreePossible} +-- * @{#GROUP.OptionROEOpenFirePossible} +-- * @{#GROUP.OptionROEReturnFirePossible} +-- * @{#GROUP.OptionROEEvadeFirePossible} +-- +-- ### 1.4.2) Rule on thread: +-- +-- * @{#GROUP.OptionROTNoReaction} +-- * @{#GROUP.OptionROTPassiveDefense} +-- * @{#GROUP.OptionROTEvadeFire} +-- * @{#GROUP.OptionROTVertical} +-- +-- To test whether an ROT option is valid for a specific group, use: +-- +-- * @{#GROUP.OptionROTNoReactionPossible} +-- * @{#GROUP.OptionROTPassiveDefensePossible} +-- * @{#GROUP.OptionROTEvadeFirePossible} +-- * @{#GROUP.OptionROTVerticalPossible} +-- +-- 1.5) GROUP Zone validation methods +-- ---------------------------------- +-- The group can be validated whether it is completely, partly or not within a @{Zone}. +-- Use the following Zone validation methods on the group: +-- +-- * @{#GROUP.IsCompletelyInZone}: Returns true if all units of the group are within a @{Zone}. +-- * @{#GROUP.IsPartlyInZone}: Returns true if some units of the group are within a @{Zone}. +-- * @{#GROUP.IsNotInZone}: Returns true if none of the group units of the group are within a @{Zone}. +-- +-- The zone can be of any @{Zone} class derived from @{Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on. +-- +-- @module Group +-- @author FlightControl + +--- 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 ) + GroupFound:E( { GroupName, GroupFound:GetClassNameAndID() } ) + 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 ) + self:F2( { WayPoint, WayPointIndex, FunctionString, FunctionArguments } ) + + local DCSTask + + local DCSScript = {} + DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " + + if FunctionArguments and #FunctionArguments > 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 #number 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 Zone Functions + +--- Returns true if all units of the group are within a @{Zone}. +-- @param #GROUP self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the Group is completely within the @{Zone#ZONE_BASE} +function GROUP:IsCompletelyInZone( Zone ) + self:F2( { self.GroupName, Zone } ) + + for UnitID, UnitData in pairs( self:GetUnits() ) do + local Unit = UnitData -- Unit#UNIT + if Zone:IsPointVec3InZone( Unit:GetPointVec3() ) then + else + return false + end + end + + return true +end + +--- Returns true if some units of the group are within a @{Zone}. +-- @param #GROUP self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the Group is completely within the @{Zone#ZONE_BASE} +function GROUP:IsPartlyInZone( Zone ) + self:F2( { self.GroupName, Zone } ) + + for UnitID, UnitData in pairs( self:GetUnits() ) do + local Unit = UnitData -- Unit#UNIT + if Zone:IsPointVec3InZone( Unit:GetPointVec3() ) then + return true + end + end + + return false +end + +--- Returns true if none of the group units of the group are within a @{Zone}. +-- @param #GROUP self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the Group is completely within the @{Zone#ZONE_BASE} +function GROUP:IsNotInZone( Zone ) + self:F2( { self.GroupName, Zone } ) + + for UnitID, UnitData in pairs( self:GetUnits() ) do + local Unit = UnitData -- Unit#UNIT + if Zone:IsPointVec3InZone( Unit:GetPointVec3() ) then + return false + end + end + + return true +end + +--- 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 DCSTask#TaskArray DCSTasks Array of @{DCSTask#Task} +-- @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 + + +-- 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 } ) + + -- 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 + +--- (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 } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupPoint = self:GetPointVec2() + return self:TaskOrbitCircleAtVec2( GroupPoint, Altitude, Speed ) + end + + return nil +end + + + +--- (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 } ) + + return self:TaskOrbitCircle( 30, 10 ) +end + + + + +--- (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 } ) + +-- 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 + + self:T3( DCSTask ) + return DCSTask +end + +--- (AIR) Land the group at a @{Zone#ZONE_RADIUS). +-- @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 + + + +--- (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 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:TaskFollow( FollowGroup, PointVec3, LastWaypointIndex ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex } ) + +-- 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 = 'Follow', + params = { + groupId = FollowGroup:GetID(), + pos = PointVec3, + lastWptIndexFlag = LastWaypointIndexFlag, + lastWptIndex = LastWaypointIndex, + }, + }, + + self:T3( { DCSTask } ) + return DCSTask +end + + +--- (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 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 DCSTypes#AttributeNameArray TargetTypes Array of AttributeName that is contains threat categories allowed to engage. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskEscort( FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes ) + self:F2( { self.GroupName, FollowGroup, PointVec3, LastWaypointIndex, EngagementDistance, TargetTypes } ) + +-- Escort = { +-- id = 'Escort', +-- params = { +-- groupId = Group.ID, +-- pos = Vec3, +-- lastWptIndexFlag = boolean, +-- lastWptIndex = number, +-- engagementDistMax = Distance, +-- targetTypes = array of AttributeName, +-- } +-- } + + 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 + + +-- GROUND TASKS + +--- (GROUND) Fire at a VEC2 point until ammunition is finished. +-- @param #GROUP self +-- @param DCSTypes#Vec2 PointVec2 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 + +--- (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 DCSTypes#AttributeNameArray 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 DCSTypes#AttributeNameArray 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 + + + + +--- (AIR) 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:TaskEmbarking( 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 + +--- (GROUND) Embark to a Transport landed at a location. + +--- 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:TaskEmbarkToTransport( 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 + + + +--- (AIR + GROUND) Return a mission 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 + +--- (AIR + GROUND) Make the Group move to fly to a given point. +-- @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 + +--- (AIR + GROUND) Make the Group move to a given point. +-- @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 + + + +--- (AIR + GROUND) 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 DCSTypes#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, Duration, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")" ) + 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 DCSTypes#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 DCSTYpes#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 DCSTypes#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 DCSTypes#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 +--- This module contains the UNIT class. +-- +-- 1) @{Unit#UNIT} class, extends @{Base#BASE} +-- =========================================== +-- The @{Unit#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. +-- +-- +-- 1.1) 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). +-- +-- 1.2) 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}(). +-- +-- 1.3) 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. +-- +-- 1.4) Location 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 **point** in 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. +-- +-- 1.5) Test if alive +-- ------------------ +-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active. +-- +-- 1.6) Test for proximity +-- ----------------------- +-- The UNIT class contains methods to test the location or proximity against zones or other objects. +-- +-- ### 1.6.1) Zones +-- To test whether the Unit is within a **zone**, use the @{#UNIT.IsInZone}() or the @{#UNIT.IsNotInZone}() methods. Any zone can be tested on, but the zone must be derived from @{Zone#ZONE_BASE}. +-- +-- ### 1.6.2) Units +-- Test if another DCS Unit is within a given radius of the current DCS Unit, use the @{#UNIT.OtherUnitInRadius}() method. +-- +-- @module Unit +-- @author FlightControl + + + + + +--- 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 if the unit is located above a runway. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is above a runway. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsAboveRunway() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local PointVec2 = self:GetPointVec2() + local SurfaceType = land.getSurfaceType( PointVec2 ) + local IsAboveRunway = SurfaceType == land.SurfaceType.RUNWAY + + self:T2( IsAboveRunway ) + return IsAboveRunway + 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 = GROUP:Find( 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() + self:T2( UnitDesc ) + return UnitDesc + end + + self:E( "Unit " .. self.UnitName .. "not found!" ) + 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:T2( 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 + +-- Is functions + +--- Returns true if the unit is within a @{Zone}. +-- @param #UNIT self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the unit is within the @{Zone#ZONE_BASE} +function UNIT:IsInZone( Zone ) + self:F2( { self.UnitName, Zone } ) + + if self:IsAlive() then + local IsInZone = Zone:IsPointVec3InZone( self:GetPointVec3() ) + + self:T( { IsInZone } ) + return IsInZone + else + return false + end +end + +--- Returns true if the unit is not within a @{Zone}. +-- @param #UNIT self +-- @param Zone#ZONE_BASE Zone The zone to test. +-- @return #boolean Returns true if the unit is not within the @{Zone#ZONE_BASE} +function UNIT:IsNotInZone( Zone ) + self:F2( { self.UnitName, Zone } ) + + if self:IsAlive() then + local IsInZone = not Zone:IsPointVec3InZone( self:GetPointVec3() ) + + self:T( { IsInZone } ) + return IsInZone + else + return false + end +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 + +--- This module contains the ZONE classes, inherited from @{Zone#ZONE_BASE}. +-- There are essentially two core functions that zones accomodate: +-- +-- * Test if an object is within the zone boundaries. +-- * Provide the zone behaviour. Some zones are static, while others are moveable. +-- +-- The object classes are using the zone classes to test the zone boundaries, which can take various forms: +-- +-- * Test if completely within the zone. +-- * Test if partly within the zone (for @{Group#GROUP} objects). +-- * Test if not in the zone. +-- * Distance to the nearest intersecting point of the zone. +-- * Distance to the center of the zone. +-- * ... +-- +-- Each of these ZONE classes have a zone name, and specific parameters defining the zone type: +-- +-- * @{Zone#ZONE_BASE}: The ZONE_BASE class defining the base for all other zone classes. +-- * @{Zone#ZONE_RADIUS}: The ZONE_RADIUS class defined by a zone name, a location and a radius. +-- * @{Zone#ZONE}: The ZONE class, defined by the zone name as defined within the Mission Editor. +-- * @{Zone#ZONE_UNIT}: The ZONE_UNIT class defined by a zone around a @{Unit#UNIT} with a radius. +-- * @{Zone#ZONE_POLYGON}: The ZONE_POLYGON class defined by a sequence of @{Group#GROUP} waypoints within the Mission Editor, forming a polygon. +-- +-- Each zone implements two polymorphic functions defined in @{Zone#ZONE_BASE}: +-- +-- * @{#ZONE_BASE.IsPointVec2InZone}: Returns if a location is within the zone. +-- * @{#ZONE_BASE.IsPointVec3InZone}: Returns if a point is within the zone. +-- +-- === +-- +-- 1) @{Zone#ZONE_BASE} class, extends @{Base#BASE} +-- ================================================ +-- The ZONE_BASE class defining the base for all other zone classes. +-- +-- === +-- +-- 2) @{Zone#ZONE_RADIUS} class, extends @{Zone#ZONE_BASE} +-- ======================================================= +-- The ZONE_RADIUS class defined by a zone name, a location and a radius. +-- +-- === +-- +-- 3) @{Zone#ZONE} class, extends @{Zone#ZONE_RADIUS} +-- ========================================== +-- The ZONE class, defined by the zone name as defined within the Mission Editor. +-- +-- === +-- +-- 4) @{Zone#ZONE_UNIT} class, extends @{Zone#ZONE_RADIUS} +-- ======================================================= +-- The ZONE_UNIT class defined by a zone around a @{Unit#UNIT} with a radius. +-- +-- === +-- +-- 5) @{Zone#ZONE_POLYGON} class, extends @{Zone#ZONE_BASE} +-- ======================================================== +-- The ZONE_POLYGON class defined by a sequence of @{Group#GROUP} waypoints within the Mission Editor, forming a polygon. +-- +-- === +-- +-- @module Zone +-- @author FlightControl + + + + + + + + + +--- The ZONE_BASE class +-- @type ZONE_BASE +-- @field #string ZoneName Name of the zone. +-- @extends Base#BASE +ZONE_BASE = { + ClassName = "ZONE_BASE", + } + +--- ZONE_BASE constructor +-- @param #ZONE_BASE self +-- @param #string ZoneName Name of the zone. +-- @return #ZONE_BASE self +function ZONE_BASE:New( ZoneName ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( ZoneName ) + + self.ZoneName = ZoneName + + return self +end + +--- Returns if a location is within the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec2 PointVec2 The location to test. +-- @return #boolean true if the location is within the zone. +function ZONE_BASE:IsPointVec2InZone( PointVec2 ) + self:F2( PointVec2 ) + + return false +end + +--- Returns if a point is within the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec3 PointVec3 The point to test. +-- @return #boolean true if the point is within the zone. +function ZONE_BASE:IsPointVec3InZone( PointVec3 ) + self:F2( PointVec3 ) + + local InZone = self:IsPointVec2InZone( { x = PointVec3.x, y = PointVec3.z } ) + + return InZone +end + +--- Smokes the zone boundaries in a color. +-- @param #ZONE_BASE self +-- @param SmokeColor The smoke color. +function ZONE_BASE:SmokeZone( SmokeColor ) + self:F2( SmokeColor ) + +end + + +--- The ZONE_RADIUS class, defined by a zone name, a location and a radius. +-- @type ZONE_RADIUS +-- @field DCSTypes#Vec2 PointVec2 The current location of the zone. +-- @field DCSTypes#Distance Radius The radius of the zone. +-- @extends Zone#ZONE_BASE +ZONE_RADIUS = { + ClassName="ZONE_RADIUS", + } + +--- Constructor of ZONE_RADIUS, taking the zone name, the zone location and a radius. +-- @param #ZONE_RADIUS self +-- @param #string ZoneName Name of the zone. +-- @param DCSTypes#Vec2 PointVec2 The location of the zone. +-- @param DCSTypes#Distance Radius The radius of the zone. +-- @return #ZONE_RADIUS self +function ZONE_RADIUS:New( ZoneName, PointVec2, Radius ) + local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) + self:F( { ZoneName, PointVec2, Radius } ) + + self.Radius = Radius + self.PointVec2 = PointVec2 + + return self +end + +--- Smokes the zone boundaries in a color. +-- @param #ZONE_RADIUS self +-- @param #POINT_VEC3.SmokeColor SmokeColor The smoke color. +-- @param #number Points (optional) The amount of points in the circle. +-- @return #ZONE_RADIUS self +function ZONE_RADIUS:SmokeZone( SmokeColor, Points ) + self:F2( SmokeColor ) + + local Point = {} + local PointVec2 = self:GetPointVec2() + + Points = Points and Points or 360 + + local Angle + local RadialBase = math.pi*2 + + for Angle = 0, 360, 360 / Points do + local Radial = Angle * RadialBase / 360 + Point.x = PointVec2.x + math.cos( Radial ) * self:GetRadius() + Point.y = PointVec2.y + math.sin( Radial ) * self:GetRadius() + POINT_VEC2:New( Point.x, Point.y ):Smoke( SmokeColor ) + end + + return self +end + + +--- Flares the zone boundaries in a color. +-- @param #ZONE_RADIUS self +-- @param #POINT_VEC3.FlareColor FlareColor The flare color. +-- @param #number Points (optional) The amount of points in the circle. +-- @param DCSTypes#Azimuth Azimuth (optional) Azimuth The azimuth of the flare. +-- @return #ZONE_RADIUS self +function ZONE_RADIUS:FlareZone( FlareColor, Points, Azimuth ) + self:F2( { FlareColor, Azimuth } ) + + local Point = {} + local PointVec2 = self:GetPointVec2() + + Points = Points and Points or 360 + + local Angle + local RadialBase = math.pi*2 + + for Angle = 0, 360, 360 / Points do + local Radial = Angle * RadialBase / 360 + Point.x = PointVec2.x + math.cos( Radial ) * self:GetRadius() + Point.y = PointVec2.y + math.sin( Radial ) * self:GetRadius() + POINT_VEC2:New( Point.x, Point.y ):Flare( FlareColor, Azimuth ) + end + + return self +end + +--- Returns the radius of the zone. +-- @param #ZONE_RADIUS self +-- @return DCSTypes#Distance The radius of the zone. +function ZONE_RADIUS:GetRadius() + self:F2( self.ZoneName ) + + self:T2( { self.Radius } ) + + return self.Radius +end + +--- Sets the radius of the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Distance Radius The radius of the zone. +-- @return DCSTypes#Distance The radius of the zone. +function ZONE_RADIUS:SetRadius( Radius ) + self:F2( self.ZoneName ) + + self.Radius = Radius + self:T2( { self.Radius } ) + + return self.Radius +end + +--- Returns the location of the zone. +-- @param #ZONE_RADIUS self +-- @return DCSTypes#Vec2 The location of the zone. +function ZONE_RADIUS:GetPointVec2() + self:F2( self.ZoneName ) + + self:T2( { self.PointVec2 } ) + + return self.PointVec2 +end + +--- Sets the location of the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec2 PointVec2 The new location of the zone. +-- @return DCSTypes#Vec2 The new location of the zone. +function ZONE_RADIUS:SetPointVec2( PointVec2 ) + self:F2( self.ZoneName ) + + self.PointVec2 = PointVec2 + + self:T2( { self.PointVec2 } ) + + return self.PointVec2 +end + +--- Returns the point of the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Distance Height The height to add to the land height where the center of the zone is located. +-- @return DCSTypes#Vec3 The point of the zone. +function ZONE_RADIUS:GetPointVec3( Height ) + self:F2( self.ZoneName ) + + local PointVec2 = self:GetPointVec2() + + local PointVec3 = { x = PointVec2.x, y = land.getHeight( self:GetPointVec2() ) + Height, z = PointVec2.y } + + self:T2( { PointVec3 } ) + + return PointVec3 +end + + +--- Returns if a location is within the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec2 PointVec2 The location to test. +-- @return #boolean true if the location is within the zone. +function ZONE_RADIUS:IsPointVec2InZone( PointVec2 ) + self:F2( PointVec2 ) + + local ZonePointVec2 = self:GetPointVec2() + + if (( PointVec2.x - ZonePointVec2.x )^2 + ( PointVec2.y - ZonePointVec2.y ) ^2 ) ^ 0.5 <= self:GetRadius() then + return true + end + + return false +end + +--- Returns if a point is within the zone. +-- @param #ZONE_RADIUS self +-- @param DCSTypes#Vec3 PointVec3 The point to test. +-- @return #boolean true if the point is within the zone. +function ZONE_RADIUS:IsPointVec3InZone( PointVec3 ) + self:F2( PointVec3 ) + + local InZone = self:IsPointVec2InZone( { x = PointVec3.x, y = PointVec3.z } ) + + return InZone +end + +--- Returns a random location within the zone. +-- @param #ZONE_RADIUS self +-- @return DCSTypes#Vec2 The random location within the zone. +function ZONE_RADIUS:GetRandomPointVec2() + self:F( self.ZoneName ) + + local Point = {} + local PointVec2 = self:GetPointVec2() + + local angle = math.random() * math.pi*2; + Point.x = PointVec2.x + math.cos( angle ) * math.random() * self:GetRadius(); + Point.y = PointVec2.y + math.sin( angle ) * math.random() * self:GetRadius(); + + self:T( { Point } ) + + return Point +end + + + +--- The ZONE class, defined by the zone name as defined within the Mission Editor. The location and the radius are automatically collected from the mission settings. +-- @type ZONE +-- @extends Zone#ZONE_RADIUS +ZONE = { + ClassName="ZONE", + } + + +--- Constructor of ZONE, taking the zone name. +-- @param #ZONE self +-- @param #string ZoneName The name of the zone as defined within the mission editor. +-- @return #ZONE +function ZONE:New( ZoneName ) + + local Zone = trigger.misc.getZone( ZoneName ) + + if not Zone then + error( "Zone " .. ZoneName .. " does not exist." ) + return nil + end + + local self = BASE:Inherit( self, ZONE_RADIUS:New( ZoneName, { x = Zone.point.x, y = Zone.point.z }, Zone.radius ) ) + self:F( ZoneName ) + + self.Zone = Zone + + return self +end + + +--- The ZONE_UNIT class defined by a zone around a @{Unit#UNIT} with a radius. +-- @type ZONE_UNIT +-- @field Unit#UNIT ZoneUNIT +-- @extends Zone#ZONE_RADIUS +ZONE_UNIT = { + ClassName="ZONE_UNIT", + } + +--- Constructor to create a ZONE_UNIT instance, taking the zone name, a zone unit and a radius. +-- @param #ZONE_UNIT self +-- @param #string ZoneName Name of the zone. +-- @param Unit#UNIT ZoneUNIT The unit as the center of the zone. +-- @param DCSTypes#Distance Radius The radius of the zone. +-- @return #ZONE_UNIT self +function ZONE_UNIT:New( ZoneName, ZoneUNIT, Radius ) + local self = BASE:Inherit( self, ZONE_RADIUS:New( ZoneName, ZoneUNIT:GetPointVec2(), Radius ) ) + self:F( { ZoneName, ZoneUNIT:GetPointVec2(), Radius } ) + + self.ZoneUNIT = ZoneUNIT + + return self +end + + +--- Returns the current location of the @{Unit#UNIT}. +-- @param #ZONE_UNIT self +-- @return DCSTypes#Vec2 The location of the zone based on the @{Unit#UNIT}location. +function ZONE_UNIT:GetPointVec2() + self:F( self.ZoneName ) + + local ZonePointVec2 = self.ZoneUNIT:GetPointVec2() + + self:T( { ZonePointVec2 } ) + + return ZonePointVec2 +end + +-- Polygons + +--- The ZONE_POLYGON_BASE class defined by an array of @{DCSTypes#Vec2}, forming a polygon. +-- @type ZONE_POLYGON_BASE +-- @field #ZONE_POLYGON_BASE.ListVec2 Polygon The polygon defined by an array of @{DCSTypes#Vec2}. +-- @extends Zone#ZONE_BASE +ZONE_POLYGON_BASE = { + ClassName="ZONE_POLYGON_BASE", + } + +--- A points array. +-- @type ZONE_POLYGON_BASE.ListVec2 +-- @list + +--- Constructor to create a ZONE_POLYGON_BASE instance, taking the zone name and an array of @{DCSTypes#Vec2}, forming a polygon. +-- The @{Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected. +-- @param #ZONE_POLYGON_BASE self +-- @param #string ZoneName Name of the zone. +-- @param #ZONE_POLYGON_BASE.ListVec2 PointsArray An array of @{DCSTypes#Vec2}, forming a polygon.. +-- @return #ZONE_POLYGON_BASE self +function ZONE_POLYGON_BASE:New( ZoneName, PointsArray ) + local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) + self:F( { ZoneName, PointsArray } ) + + local i = 0 + + self.Polygon = {} + + for i = 1, #PointsArray do + self.Polygon[i] = {} + self.Polygon[i].x = PointsArray[i].x + self.Polygon[i].y = PointsArray[i].y + end + + return self +end + +--- Flush polygon coordinates as a table in DCS.log. +-- @param #ZONE_POLYGON_BASE self +-- @return #ZONE_POLYGON_BASE self +function ZONE_POLYGON_BASE:Flush() + self:F2() + + self:E( { Polygon = self.ZoneName, Coordinates = self.Polygon } ) + + return self +end + + +--- Smokes the zone boundaries in a color. +-- @param #ZONE_POLYGON_BASE self +-- @param #POINT_VEC3.SmokeColor SmokeColor The smoke color. +-- @return #ZONE_POLYGON_BASE self +function ZONE_POLYGON_BASE:SmokeZone( SmokeColor ) + self:F2( SmokeColor ) + + local i + local j + local Segments = 10 + + i = 1 + j = #self.Polygon + + while i <= #self.Polygon do + self:T( { i, j, self.Polygon[i], self.Polygon[j] } ) + + local DeltaX = self.Polygon[j].x - self.Polygon[i].x + local DeltaY = self.Polygon[j].y - self.Polygon[i].y + + for Segment = 0, Segments do -- We divide each line in 5 segments and smoke a point on the line. + local PointX = self.Polygon[i].x + ( Segment * DeltaX / Segments ) + local PointY = self.Polygon[i].y + ( Segment * DeltaY / Segments ) + POINT_VEC2:New( PointX, PointY ):Smoke( SmokeColor ) + end + j = i + i = i + 1 + end + + return self +end + + + + +--- Returns if a location is within the zone. +-- @param #ZONE_POLYGON_BASE self +-- @param DCSTypes#Vec2 PointVec2 The location to test. +-- @return #boolean true if the location is within the zone. +function ZONE_POLYGON_BASE:IsPointVec2InZone( PointVec2 ) + self:F2( PointVec2 ) + + local i + local j + local c = false + + i = 1 + j = #self.Polygon + + while i < #self.Polygon do + j = i + i = i + 1 + self:T( { i, j, self.Polygon[i], self.Polygon[j] } ) + if ( ( ( self.Polygon[i].y > PointVec2.y ) ~= ( self.Polygon[j].y > PointVec2.y ) ) and + ( PointVec2.x < ( self.Polygon[j].x - self.Polygon[i].x ) * ( PointVec2.y - self.Polygon[i].y ) / ( self.Polygon[j].y - self.Polygon[i].y ) + self.Polygon[i].x ) + ) then + c = not c + end + self:T2( { "c = ", c } ) + end + + self:T( { "c = ", c } ) + return c +end + + + + +--- The ZONE_POLYGON class defined by a sequence of @{Group#GROUP} waypoints within the Mission Editor, forming a polygon. +-- @type ZONE_POLYGON +-- @extends Zone#ZONE_POLYGON_BASE +ZONE_POLYGON = { + ClassName="ZONE_POLYGON", + } + +--- Constructor to create a ZONE_POLYGON instance, taking the zone name and the name of the @{Group#GROUP} defined within the Mission Editor. +-- The @{Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected by ZONE_POLYGON. +-- @param #ZONE_POLYGON self +-- @param #string ZoneName Name of the zone. +-- @param Group#GROUP ZoneGroup The GROUP waypoints as defined within the Mission Editor define the polygon shape. +-- @return #ZONE_POLYGON self +function ZONE_POLYGON:New( ZoneName, ZoneGroup ) + + local GroupPoints = ZoneGroup:GetTaskRoute() + + local self = BASE:Inherit( self, ZONE_POLYGON_BASE:New( ZoneName, GroupPoints ) ) + self:F( { ZoneName, ZoneGroup, self.Polygon } ) + + return self +end + +--- This module contains the CLIENT class. +-- +-- 1) @{Client#CLIENT} class, extends @{Unit#UNIT} +-- =============================================== +-- 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#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. +-- +-- 1.1) 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 + +--- 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, { "Client Alive " .. ClientName }, 1, 5 ) + + self:E( self ) + 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, "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, "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( CallBackFunction, ... ) + self:F() + + self.ClientCallBack = CallBackFunction + self.ClientParameters = arg + + return self +end + +--- @param #CLIENT self +function CLIENT:_AliveCheckScheduler( SchedulerName ) + self:E( SchedulerName ) + self:F( { SchedulerName, self.ClientName, self.ClientAlive2, self.ClientBriefingShown, self.ClientCallBack } ) + + if self:IsAlive() then + 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, "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 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. +-- @param #string MessageID is the identifier of the message when displayed with intervals. +function CLIENT:Message( Message, MessageDuration, MessageCategory, MessageInterval, MessageID ) + self:F( { Message, MessageDuration, 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 MessageID ~= nil then + 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, MessageDuration, MessageCategory ):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, MessageDuration , MessageCategory):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, MessageDuration, MessageCategory ):ToClient( self ) + self.Messages[MessageID].MessageTime = timer.getTime() + end + end + end + else + MESSAGE:New( Message, MessageDuration, MessageCategory ):ToClient( self ) + end + end +end +--- This module contains the STATIC class. +-- +-- 1) @{Static#STATIC} class, extends @{Unit#UNIT} +-- =============================================== +-- Statics are **Static Units** defined within the Mission Editor. +-- Note that Statics are almost the same as Units, but they don't have a controller. +-- The @{Static#STATIC} class is a wrapper class to handle the DCS Static objects: +-- +-- * Wraps the DCS Static objects. +-- * Support all DCS Static APIs. +-- * Enhance with Static specific APIs not in the DCS API set. +-- +-- 1.1) STATIC reference methods +-- ----------------------------- +-- For each DCS Static will have a STATIC wrapper object (instance) within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts). +-- +-- The STATIC class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the Static Name. +-- +-- Another thing to know is that STATIC objects do not "contain" the DCS Static object. +-- The STATIc methods will reference the DCS Static object by name when it is needed during API execution. +-- If the DCS Static object does not exist or is nil, the STATIC methods will return nil and log an exception in the DCS.log file. +-- +-- The STATIc class provides the following functions to retrieve quickly the relevant STATIC instance: +-- +-- * @{#STATIC.FindByName}(): Find a STATIC instance from the _DATABASE object using a DCS Static name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these STATIC OBJECT REFERENCES! (make the STATIC object references nil). +-- +-- @module Static +-- @author FlightControl + + + + + + +--- The STATIC class +-- @type STATIC +-- @extends Unit#UNIT +STATIC = { + ClassName = "STATIC", +} + + +--- Finds a STATIC from the _DATABASE using the relevant Static Name. +-- As an optional parameter, a briefing text can be given also. +-- @param #STATIC self +-- @param #string StaticName Name of the DCS **Static** as defined within the Mission Editor. +-- @return #STATIC +function STATIC:FindByName( StaticName ) + local StaticFound = _DATABASE:FindStatic( StaticName ) + + if StaticFound then + StaticFound:F( { StaticName } ) + + return StaticFound + end + + error( "STATIC not found for: " .. StaticName ) +end + +function STATIC:Register( StaticName ) + local self = BASE:Inherit( self, UNIT:Register( StaticName ) ) + + self:F( StaticName ) + + return self +end + + +function STATIC:GetDCSUnit() + local DCSStatic = StaticObject.getByName( self.UnitName ) + + if DCSStatic then + return DCSStatic + end + + return nil +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 + + + + + + + + + + + + +--- DATABASE class +-- @type DATABASE +-- @extends Base#BASE +DATABASE = { + ClassName = "DATABASE", + Templates = { + Units = {}, + Groups = {}, + ClientsByName = {}, + ClientsByID = {}, + }, + UNITS = {}, + STATICS = {}, + GROUPS = {}, + PLAYERS = {}, + PLAYERSALIVE = {}, + CLIENTS = {}, + CLIENTSALIVE = {}, + NavPoints = {}, +} + +local _DATABASECoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _DATABASECategory = + { + ["plane"] = Unit.Category.AIRPLANE, + ["helicopter"] = Unit.Category.HELICOPTER, + ["vehicle"] = Unit.Category.GROUND_UNIT, + ["ship"] = Unit.Category.SHIP, + ["static"] = Unit.Category.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:_RegisterGroupsAndUnits() + self:_RegisterClients() + self:_RegisterStatics() + 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( DCSUnitName ) + + if not self.UNITS[DCSUnitName] then + self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) + end + + return self.UNITS[DCSUnitName] +end + + +--- Deletes a Unit from the DATABASE based on the Unit Name. +-- @param #DATABASE self +function DATABASE:DeleteUnit( DCSUnitName ) + + --self.UNITS[DCSUnitName] = nil +end + +--- Adds a Static based on the Static Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddStatic( DCSStaticName ) + + if not self.STATICS[DCSStaticName] then + self.STATICS[DCSStaticName] = STATIC:Register( DCSStaticName ) + end +end + + +--- Deletes a Static from the DATABASE based on the Static Name. +-- @param #DATABASE self +function DATABASE:DeleteStatic( DCSStaticName ) + + --self.STATICS[DCSStaticName] = nil +end + +--- Finds a STATIC based on the StaticName. +-- @param #DATABASE self +-- @param #string StaticName +-- @return Static#STATIC The found STATIC. +function DATABASE:FindStatic( StaticName ) + + local StaticFound = self.STATICS[StaticName] + return StaticFound +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 ) + + if not self.CLIENTS[ClientName] then + self.CLIENTS[ClientName] = CLIENT:Register( ClientName ) + end + + return self.CLIENTS[ClientName] +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( GroupName ) + + if not self.GROUPS[GroupName] then + self.GROUPS[GroupName] = GROUP:Register( GroupName ) + end + + return self.GROUPS[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, SpawnCoalitionID, SpawnCategoryID, SpawnCountryID ) + + self:T3( SpawnTemplate ) + coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) + + -- Restore + SpawnTemplate.SpawnCoalitionID = SpawnCoalitionID + SpawnTemplate.SpawnCountryID = SpawnCountryID + SpawnTemplate.SpawnCategoryID = SpawnCategoryID + + local SpawnGroup = self:AddGroup( 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, CoalitionID, CategoryID, CountryID ) + + local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) + + local TraceTable = {} + + 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.Templates.Groups[GroupTemplateName].CategoryID = CategoryID + self.Templates.Groups[GroupTemplateName].CoalitionID = CoalitionID + self.Templates.Groups[GroupTemplateName].CountryID = CountryID + + + TraceTable[#TraceTable+1] = "Group" + TraceTable[#TraceTable+1] = self.Templates.Groups[GroupTemplateName].GroupName + + TraceTable[#TraceTable+1] = "Coalition" + TraceTable[#TraceTable+1] = self.Templates.Groups[GroupTemplateName].CoalitionID + TraceTable[#TraceTable+1] = "Category" + TraceTable[#TraceTable+1] = self.Templates.Groups[GroupTemplateName].CategoryID + TraceTable[#TraceTable+1] = "Country" + TraceTable[#TraceTable+1] = self.Templates.Groups[GroupTemplateName].CountryID + + TraceTable[#TraceTable+1] = "Units" + + 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.Templates.Units[UnitTemplateName].CategoryID = CategoryID + self.Templates.Units[UnitTemplateName].CoalitionID = CoalitionID + self.Templates.Units[UnitTemplateName].CountryID = CountryID + + if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then + self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate + self.Templates.ClientsByName[UnitTemplateName].CategoryID = CategoryID + self.Templates.ClientsByName[UnitTemplateName].CoalitionID = CoalitionID + self.Templates.ClientsByName[UnitTemplateName].CountryID = CountryID + self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate + end + + TraceTable[#TraceTable+1] = self.Templates.Units[UnitTemplateName].UnitName + end + + self:E( TraceTable ) +end + +function DATABASE:GetCoalitionFromClientTemplate( ClientName ) + return self.Templates.ClientsByName[ClientName].CoalitionID +end + +function DATABASE:GetCategoryFromClientTemplate( ClientName ) + return self.Templates.ClientsByName[ClientName].CategoryID +end + +function DATABASE:GetCountryFromClientTemplate( ClientName ) + return self.Templates.ClientsByName[ClientName].CountryID +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 Groups and Units within in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterGroupsAndUnits() + + 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:", DCSGroupName } ) + self:AddGroup( DCSGroupName ) + + for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do + + local DCSUnitName = DCSUnit:getName() + self:E( { "Register Unit:", DCSUnitName } ) + self:AddUnit( DCSUnitName ) + end + else + self:E( { "Group does not exist: ", DCSGroup } ) + end + + end + end + + return self +end + +--- Private method that registers all Units of skill Client or Player within in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterClients() + + for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do + self:E( { "Register Client:", ClientName } ) + self:AddClient( ClientName ) + end + + return self +end + +function DATABASE:_RegisterStatics() + + local CoalitionsData = { GroupsRed = coalition.getStaticObjects( coalition.side.RED ), GroupsBlue = coalition.getStaticObjects( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for DCSStaticId, DCSStatic in pairs( CoalitionData ) do + + if DCSStatic:isExist() then + local DCSStaticName = DCSStatic:getName() + + self:E( { "Register Static:", DCSStaticName } ) + self:AddStatic( DCSStaticName ) + else + self:E( { "Static does not exist: ", DCSStatic } ) + end + end + 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.IniDCSUnitName ) + self:AddGroup( 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.UNITS[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 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 CoalitionName, coa_data in pairs(env.mission.coalition) do + + if (CoalitionName == 'red' or CoalitionName == 'blue') and type(coa_data) == 'table' then + --self.Units[coa_name] = {} + + ---------------------------------------------- + -- build nav points DB + self.Navpoints[CoalitionName] = {} + 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[CoalitionName][nav_ind] = routines.utils.deepCopy(nav_data) + + self.Navpoints[CoalitionName][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. + self.Navpoints[CoalitionName][nav_ind]['point'] = {} -- point is used by SSE, support it. + self.Navpoints[CoalitionName][nav_ind]['point']['x'] = nav_data.x + self.Navpoints[CoalitionName][nav_ind]['point']['y'] = 0 + self.Navpoints[CoalitionName][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.upper(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 CategoryName = 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, + coalition.side[string.upper(CoalitionName)], + _DATABASECategory[string.lower(CategoryName)], + country.id[string.upper(CountryName)] + ) + 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 + + + + +--- This module contains the SET classes. +-- +-- === +-- +-- 1) @{Set#SET_BASE} class, extends @{Base#BASE} +-- ================================================ +-- The @{Set#SET_BASE} class defines the core functions that define a collection of objects. +-- A SET provides iterators to iterate the SET, but will **temporarily** yield the ForEach interator loop at defined **"intervals"** to the mail simulator loop. +-- In this way, large loops can be done while not blocking the simulator main processing loop. +-- The default **"yield interval"** is after 10 objects processed. +-- The default **"time interval"** is after 0.001 seconds. +-- +-- 1.1) Add or remove objects from the SET +-- --------------------------------------- +-- Some key core functions are @{Set#SET_BASE.Add} and @{Set#SET_BASE.Remove} to add or remove objects from the SET in your logic. +-- +-- 1.2) Define the SET iterator **"yield interval"** and the **"time interval"**. +-- ------------------------------------------------------------------------------------- +-- Modify the iterator intervals with the @{Set#SET_BASE.SetInteratorIntervals} method. +-- You can set the **"yield interval"**, and the **"time interval"**. (See above). +-- +-- === +-- +-- 2) @{Set#SET_GROUP} class, extends @{Set#SET_BASE} +-- ==================================================== +-- Mission designers can use the @{Set#SET_GROUP} class to build sets of groups belonging to certain: +-- +-- * Coalitions +-- * Categories +-- * Countries +-- * Starting with certain prefix strings. +-- +-- 2.1) SET_GROUP construction method: +-- ----------------------------------- +-- Create a new SET_GROUP object with the @{#SET_GROUP.New} method: +-- +-- * @{#SET_GROUP.New}: Creates a new SET_GROUP object. +-- +-- 2.2) Add or Remove GROUP(s) from SET_GROUP: +-- ------------------------------------------- +-- GROUPS can be added and removed using the @{Set#SET_GROUP.AddGroupsByName} and @{Set#SET_GROUP.RemoveGroupsByName} respectively. +-- These methods take a single GROUP name or an array of GROUP names to be added or removed from SET_GROUP. +-- +-- 2.3) SET_GROUP filter criteria: +-- ------------------------------- +-- You can set filter criteria to define the set of groups within the SET_GROUP. +-- Filter criteria are defined by: +-- +-- * @{#SET_GROUP.FilterCoalitions}: Builds the SET_GROUP with the groups belonging to the coalition(s). +-- * @{#SET_GROUP.FilterCategories}: Builds the SET_GROUP with the groups belonging to the category(ies). +-- * @{#SET_GROUP.FilterCountries}: Builds the SET_GROUP with the gruops belonging to the country(ies). +-- * @{#SET_GROUP.FilterPrefixes}: Builds the SET_GROUP with the groups starting with the same prefix string(s). +-- +-- Once the filter criteria have been set for the SET_GROUP, you can start filtering using: +-- +-- * @{#SET_GROUP.FilterStart}: Starts the filtering of the groups within the SET_GROUP and add or remove GROUP objects **dynamically**. +-- +-- Planned filter criteria within development are (so these are not yet available): +-- +-- * @{#SET_GROUP.FilterZones}: Builds the SET_GROUP with the groups within a @{Zone#ZONE}. +-- +-- 2.4) SET_GROUP iterators: +-- ------------------------- +-- Once the filters have been defined and the SET_GROUP has been built, you can iterate the SET_GROUP with the available iterator methods. +-- The iterator methods will walk the SET_GROUP set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the SET_GROUP: +-- +-- * @{#SET_GROUP.ForEachGroup}: Calls a function for each alive group it finds within the SET_GROUP. +-- * @{#SET_GROUP.ForEachGroupCompletelyInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence completely in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- * @{#SET_GROUP.ForEachGroupPartlyInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence partly in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- * @{#SET_GROUP.ForEachGroupNotInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence not in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- +-- ==== +-- +-- 3) @{Set#SET_UNIT} class, extends @{Set#SET_BASE} +-- =================================================== +-- Mission designers can use the @{Set#SET_UNIT} class to build sets of units belonging to certain: +-- +-- * Coalitions +-- * Categories +-- * Countries +-- * Unit types +-- * Starting with certain prefix strings. +-- +-- 3.1) SET_UNIT construction method: +-- ---------------------------------- +-- Create a new SET_UNIT object with the @{#SET_UNIT.New} method: +-- +-- * @{#SET_UNIT.New}: Creates a new SET_UNIT object. +-- +-- 3.2) Add or Remove UNIT(s) from SET_UNIT: +-- ----------------------------------------- +-- UNITs can be added and removed using the @{Set#SET_UNIT.AddUnitsByName} and @{Set#SET_UNIT.RemoveUnitsByName} respectively. +-- These methods take a single UNIT name or an array of UNIT names to be added or removed from SET_UNIT. +-- +-- 3.3) SET_UNIT filter criteria: +-- ------------------------------ +-- You can set filter criteria to define the set of units within the SET_UNIT. +-- Filter criteria are defined by: +-- +-- * @{#SET_UNIT.FilterCoalitions}: Builds the SET_UNIT with the units belonging to the coalition(s). +-- * @{#SET_UNIT.FilterCategories}: Builds the SET_UNIT with the units belonging to the category(ies). +-- * @{#SET_UNIT.FilterTypes}: Builds the SET_UNIT with the units belonging to the unit type(s). +-- * @{#SET_UNIT.FilterCountries}: Builds the SET_UNIT with the units belonging to the country(ies). +-- * @{#SET_UNIT.FilterPrefixes}: Builds the SET_UNIT with the units starting with the same prefix string(s). +-- +-- Once the filter criteria have been set for the SET_UNIT, you can start filtering using: +-- +-- * @{#SET_UNIT.FilterStart}: Starts the filtering of the units within the SET_UNIT. +-- +-- Planned filter criteria within development are (so these are not yet available): +-- +-- * @{#SET_UNIT.FilterZones}: Builds the SET_UNIT with the units within a @{Zone#ZONE}. +-- +-- 3.4) SET_UNIT iterators: +-- ------------------------ +-- Once the filters have been defined and the SET_UNIT has been built, you can iterate the SET_UNIT with the available iterator methods. +-- The iterator methods will walk the SET_UNIT set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the SET_UNIT: +-- +-- * @{#SET_UNIT.ForEachUnit}: Calls a function for each alive unit it finds within the SET_UNIT. +-- * @{#SET_GROUP.ForEachGroupCompletelyInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence completely in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- * @{#SET_GROUP.ForEachGroupNotInZone}: Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence not in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- +-- Planned iterators methods in development are (so these are not yet available): +-- +-- * @{#SET_UNIT.ForEachUnitInUnit}: Calls a function for each unit contained within the SET_UNIT. +-- * @{#SET_UNIT.ForEachUnitCompletelyInZone}: Iterate and call an iterator function for each **alive** UNIT presence completely in a @{Zone}, providing the UNIT and optional parameters to the called function. +-- * @{#SET_UNIT.ForEachUnitNotInZone}: Iterate and call an iterator function for each **alive** UNIT presence not in a @{Zone}, providing the UNIT and optional parameters to the called function. +-- +-- 4) @{Set#SET_CLIENT} class, extends @{Set#SET_BASE} +-- =================================================== +-- Mission designers can use the @{Set#SET_CLIENT} class to build sets of units belonging to certain: +-- +-- * Coalitions +-- * Categories +-- * Countries +-- * Client types +-- * Starting with certain prefix strings. +-- +-- 4.1) SET_CLIENT construction method: +-- ---------------------------------- +-- Create a new SET_CLIENT object with the @{#SET_CLIENT.New} method: +-- +-- * @{#SET_CLIENT.New}: Creates a new SET_CLIENT object. +-- +-- 4.2) Add or Remove CLIENT(s) from SET_CLIENT: +-- ----------------------------------------- +-- CLIENTs can be added and removed using the @{Set#SET_CLIENT.AddClientsByName} and @{Set#SET_CLIENT.RemoveClientsByName} respectively. +-- These methods take a single CLIENT name or an array of CLIENT names to be added or removed from SET_CLIENT. +-- +-- 4.3) SET_CLIENT filter criteria: +-- ------------------------------ +-- You can set filter criteria to define the set of clients within the SET_CLIENT. +-- Filter criteria are defined by: +-- +-- * @{#SET_CLIENT.FilterCoalitions}: Builds the SET_CLIENT with the clients belonging to the coalition(s). +-- * @{#SET_CLIENT.FilterCategories}: Builds the SET_CLIENT with the clients belonging to the category(ies). +-- * @{#SET_CLIENT.FilterTypes}: Builds the SET_CLIENT with the clients belonging to the client type(s). +-- * @{#SET_CLIENT.FilterCountries}: Builds the SET_CLIENT with the clients belonging to the country(ies). +-- * @{#SET_CLIENT.FilterPrefixes}: Builds the SET_CLIENT with the clients starting with the same prefix string(s). +-- +-- Once the filter criteria have been set for the SET_CLIENT, you can start filtering using: +-- +-- * @{#SET_CLIENT.FilterStart}: Starts the filtering of the clients within the SET_CLIENT. +-- +-- Planned filter criteria within development are (so these are not yet available): +-- +-- * @{#SET_CLIENT.FilterZones}: Builds the SET_CLIENT with the clients within a @{Zone#ZONE}. +-- +-- 4.4) SET_CLIENT iterators: +-- ------------------------ +-- Once the filters have been defined and the SET_CLIENT has been built, you can iterate the SET_CLIENT with the available iterator methods. +-- The iterator methods will walk the SET_CLIENT set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the SET_CLIENT: +-- +-- * @{#SET_CLIENT.ForEachClient}: Calls a function for each alive client it finds within the SET_CLIENT. +-- +-- ==== +-- +-- @module Set +-- @author FlightControl + +--- SET_BASE class +-- @type SET_BASE +-- @extends Base#BASE +SET_BASE = { + ClassName = "SET_BASE", + Set = {}, +} + +--- Creates a new SET_BASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #SET_BASE self +-- @return #SET_BASE +-- @usage +-- -- Define a new SET_BASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. +-- DBObject = SET_BASE:New() +function SET_BASE:New( Database ) + + env.info( tostring( Database ) ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + self.Database = Database + + self.YieldInterval = 10 + self.TimeInterval = 0.001 + + return self +end + +--- Finds an @{Base#BASE} object based on the object Name. +-- @param #SET_BASE self +-- @param #string ObjectName +-- @return Base#BASE The Object found. +function SET_BASE:_Find( ObjectName ) + + local ObjectFound = self.Set[ObjectName] + return ObjectFound +end + + +--- Adds a @{Base#BASE} object in the @{Set#SET_BASE}, using the Object Name as the index. +-- @param #SET_BASE self +-- @param #string ObjectName +-- @param Base#BASE Object +-- @return Base#BASE The added BASE Object. +function SET_BASE:Add( ObjectName, Object ) + + self.Set[ObjectName] = Object +end + +--- Removes a @{Base#BASE} object from the @{Set#SET_BASE} and derived classes, based on the Object Name. +-- @param #SET_BASE self +-- @param #string ObjectName +function SET_BASE:Remove( ObjectName ) + + self.Set[ObjectName] = nil +end + +--- Define the SET iterator **"yield interval"** and the **"time interval"**. +-- @param #SET_BASE self +-- @param #number YieldInterval Sets the frequency when the iterator loop will yield after the number of objects processed. The default frequency is 10 objects processed. +-- @param #number TimeInterval Sets the time in seconds when the main logic will resume the iterator loop. The default time is 0.001 seconds. +-- @return #SET_BASE self +function SET_BASE:SetIteratorIntervals( YieldInterval, TimeInterval ) + + self.YieldInterval = YieldInterval + self.TimeInterval = TimeInterval + + return self +end + + + +--- Starts the filtering for the defined collection. +-- @param #SET_BASE self +-- @return #SET_BASE self +function SET_BASE:_FilterStart() + + for ObjectName, Object in pairs( self.Database ) do + + if self:IsIncludeObject( Object ) then + self:E( { "Adding Object:", ObjectName } ) + self:Add( ObjectName, Object ) + 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_BASE self +---- @return #SET_BASE self +--function SET_BASE:_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_BASE self +-- @param Event#EVENTDATA Event +function SET_BASE:_EventOnBirth( 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 ) + end + end +end + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #SET_BASE self +-- @param Event#EVENTDATA Event +function SET_BASE:_EventOnDeadOrCrash( Event ) + self:F3( { Event } ) + + if Event.IniDCSUnit then + local ObjectName, Object = self:FindInDatabase( Event ) + if ObjectName and Object then + self:Remove( ObjectName ) + end + end +end + +----- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +---- @param #SET_BASE self +---- @param Event#EVENTDATA Event +--function SET_BASE:_EventOnPlayerEnterUnit( Event ) +-- self:F3( { 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_BASE self +---- @param Event#EVENTDATA Event +--function SET_BASE:_EventOnPlayerLeaveUnit( Event ) +-- self:F3( { 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 + +--- Iterate the SET_BASE and derived classes and call an iterator function for the given SET_BASE, providing the Object for each element within the set and optional parameters. +-- @param #SET_BASE self +-- @param #function IteratorFunction The function that will be called. +-- @return #SET_BASE self +function SET_BASE:ForEach( IteratorFunction, arg, Set, Function, FunctionArguments ) + self:F3( arg ) + + local function CoRoutine() + local Count = 0 + for ObjectID, Object in pairs( Set ) do + self:T2( Object ) + if Function then + if Function( unpack( FunctionArguments ), Object ) == true then + IteratorFunction( Object, unpack( arg ) ) + end + else + IteratorFunction( Object, unpack( arg ) ) + end + Count = Count + 1 + if Count % self.YieldInterval == 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:T3( { 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, {}, self.TimeInterval, self.TimeInterval, 0 ) + + return self +end + + +----- Interate the SET_BASE and call an interator function for each **alive** unit, providing the Unit and optional parameters. +---- @param #SET_BASE self +---- @param #function IteratorFunction The function that will be called when there is an alive unit in the SET_BASE. The function needs to accept a UNIT parameter. +---- @return #SET_BASE self +--function SET_BASE:ForEachDCSUnitAlive( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.DCSUnitsAlive ) +-- +-- return self +--end +-- +----- Interate the SET_BASE and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. +---- @param #SET_BASE self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_BASE. The function needs to accept a UNIT parameter. +---- @return #SET_BASE self +--function SET_BASE:ForEachPlayer( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the SET_BASE and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #SET_BASE self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_BASE. The function needs to accept a CLIENT parameter. +---- @return #SET_BASE self +--function SET_BASE:ForEachClient( IteratorFunction, ... ) +-- self:F3( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end + + +--- Decides whether to include the Object +-- @param #SET_BASE self +-- @param #table Object +-- @return #SET_BASE self +function SET_BASE:IsIncludeObject( Object ) + self:F3( Object ) + + return true +end + +--- Flushes the current SET_BASE contents in the log ... (for debug reasons). +-- @param #SET_BASE self +-- @return #string A string with the names of the objects. +function SET_BASE:Flush() + self:F3() + + local ObjectNames = "" + for ObjectName, Object in pairs( self.Set ) do + ObjectNames = ObjectNames .. ObjectName .. ", " + end + self:T( { "Objects in Set:", ObjectNames } ) + + return ObjectNames +end + +-- SET_GROUP + +--- SET_GROUP class +-- @type SET_GROUP +-- @extends Set#SET_BASE +SET_GROUP = { + ClassName = "SET_GROUP", + 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 SET_GROUP object, building a set of groups belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #SET_GROUP self +-- @return #SET_GROUP +-- @usage +-- -- Define a new SET_GROUP Object. This DBObject will contain a reference to all alive GROUPS. +-- DBObject = SET_GROUP:New() +function SET_GROUP:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, SET_BASE:New( _DATABASE.GROUPS ) ) + + return self +end + +--- Add GROUP(s) to SET_GROUP. +-- @param Set#SET_GROUP self +-- @param #string AddGroupNames A single name or an array of GROUP names. +-- @return self +function SET_GROUP:AddGroupsByName( AddGroupNames ) + + local AddGroupNamesArray = ( type( AddGroupNames ) == "table" ) and AddGroupNames or { AddGroupNames } + + for AddGroupID, AddGroupName in pairs( AddGroupNamesArray ) do + self:Add( AddGroupName, GROUP:FindByName( AddGroupName ) ) + end + + return self +end + +--- Remove GROUP(s) from SET_GROUP. +-- @param Set#SET_GROUP self +-- @param Group#GROUP RemoveGroupNames A single name or an array of GROUP names. +-- @return self +function SET_GROUP:RemoveGroupsByName( RemoveGroupNames ) + + local RemoveGroupNamesArray = ( type( RemoveGroupNames ) == "table" ) and RemoveGroupNames or { RemoveGroupNames } + + for RemoveGroupID, RemoveGroupName in pairs( RemoveGroupNamesArray ) do + self:Remove( RemoveGroupName.GroupName ) + end + + return self +end + + + + +--- Finds a Group based on the Group Name. +-- @param #SET_GROUP self +-- @param #string GroupName +-- @return Group#GROUP The found Group. +function SET_GROUP:FindGroup( 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 #SET_GROUP self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #SET_GROUP self +function SET_GROUP: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 #SET_GROUP self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #SET_GROUP self +function SET_GROUP: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 #SET_GROUP self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #SET_GROUP self +function SET_GROUP: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 GROUP prefixes. +-- All the groups starting with the given prefixes will be included within the set. +-- @param #SET_GROUP self +-- @param #string Prefixes The prefix of which the group name starts with. +-- @return #SET_GROUP self +function SET_GROUP: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 #SET_GROUP self +-- @return #SET_GROUP self +function SET_GROUP: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_BASE birth event! +-- @param #SET_GROUP self +-- @param Event#EVENTDATA Event +-- @return #string The name of the GROUP +-- @return #table The GROUP +function SET_GROUP: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_BASE event or vise versa! +-- @param #SET_GROUP self +-- @param Event#EVENTDATA Event +-- @return #string The name of the GROUP +-- @return #table The GROUP +function SET_GROUP:FindInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSGroupName, self.Database[Event.IniDCSGroupName] +end + +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP, providing the GROUP and optional parameters. +-- @param #SET_GROUP self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroup( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set ) + + return self +end + +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence completely in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- @param #SET_GROUP self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroupCompletelyInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Group#GROUP GroupObject + function( ZoneObject, GroupObject ) + if GroupObject:IsCompletelyInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence partly in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- @param #SET_GROUP self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroupPartlyInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Group#GROUP GroupObject + function( ZoneObject, GroupObject ) + if GroupObject:IsPartlyInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence not in a @{Zone}, providing the GROUP and optional parameters to the called function. +-- @param #SET_GROUP self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroupNotInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Group#GROUP GroupObject + function( ZoneObject, GroupObject ) + if GroupObject:IsNotInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + + +----- Interate the SET_GROUP and call an interator function for each **alive** player, providing the Group of the player and optional parameters. +---- @param #SET_GROUP self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_GROUP. The function needs to accept a GROUP parameter. +---- @return #SET_GROUP self +--function SET_GROUP:ForEachPlayer( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the SET_GROUP and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #SET_GROUP self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_GROUP. The function needs to accept a CLIENT parameter. +---- @return #SET_GROUP self +--function SET_GROUP:ForEachClient( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end + + +--- +-- @param #SET_GROUP self +-- @param Group#GROUP MooseGroup +-- @return #SET_GROUP self +function SET_GROUP: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 + +--- SET_UNIT class +-- @type SET_UNIT +-- @extends Set#SET_BASE +SET_UNIT = { + ClassName = "SET_UNIT", + 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, + }, + }, +} + + +--- Creates a new SET_UNIT object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #SET_UNIT self +-- @return #SET_UNIT +-- @usage +-- -- Define a new SET_UNIT Object. This DBObject will contain a reference to all alive Units. +-- DBObject = SET_UNIT:New() +function SET_UNIT:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, SET_BASE:New( _DATABASE.UNITS ) ) + + return self +end + +--- Add UNIT(s) to SET_UNIT. +-- @param Set#SET_UNIT self +-- @param #string AddUnitNames A single name or an array of UNIT names. +-- @return self +function SET_UNIT:AddUnitsByName( AddUnitNames ) + + local AddUnitNamesArray = ( type( AddUnitNames ) == "table" ) and AddUnitNames or { AddUnitNames } + + for AddUnitID, AddUnitName in pairs( AddUnitNamesArray ) do + self:Add( AddUnitName, UNIT:FindByName( AddUnitName ) ) + end + + return self +end + +--- Remove UNIT(s) from SET_UNIT. +-- @param Set#SET_UNIT self +-- @param Unit#UNIT RemoveUnitNames A single name or an array of UNIT names. +-- @return self +function SET_UNIT:RemoveUnitsByName( RemoveUnitNames ) + + local RemoveUnitNamesArray = ( type( RemoveUnitNames ) == "table" ) and RemoveUnitNames or { RemoveUnitNames } + + for RemoveUnitID, RemoveUnitName in pairs( RemoveUnitNamesArray ) do + self:Remove( RemoveUnitName.UnitName ) + end + + return self +end + + +--- Finds a Unit based on the Unit Name. +-- @param #SET_UNIT self +-- @param #string UnitName +-- @return Unit#UNIT The found Unit. +function SET_UNIT:FindUnit( UnitName ) + + local UnitFound = self.Set[UnitName] + return UnitFound +end + + + +--- Builds a set of units of coalitions. +-- Possible current coalitions are red, blue and neutral. +-- @param #SET_UNIT self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #SET_UNIT self +function SET_UNIT: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_UNIT self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #SET_UNIT self +function SET_UNIT: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_UNIT self +-- @param #string Types Can take those type strings known within DCS world. +-- @return #SET_UNIT self +function SET_UNIT: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_UNIT self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #SET_UNIT self +function SET_UNIT: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_UNIT self +-- @param #string Prefixes The prefix of which the unit name starts with. +-- @return #SET_UNIT self +function SET_UNIT: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 + + + + +--- Starts the filtering. +-- @param #SET_UNIT self +-- @return #SET_UNIT self +function SET_UNIT: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_BASE birth event! +-- @param #SET_UNIT self +-- @param Event#EVENTDATA Event +-- @return #string The name of the UNIT +-- @return #table The UNIT +function SET_UNIT:AddInDatabase( Event ) + self:F3( { Event } ) + + 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 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_BASE event or vise versa! +-- @param #SET_UNIT self +-- @param Event#EVENTDATA Event +-- @return #string The name of the UNIT +-- @return #table The UNIT +function SET_UNIT:FindInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] +end + +--- Interate the SET_UNIT and call an interator function for each **alive** UNIT, providing the UNIT and optional parameters. +-- @param #SET_UNIT self +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the SET_UNIT. The function needs to accept a UNIT parameter. +-- @return #SET_UNIT self +function SET_UNIT:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set ) + + return self +end + +--- Iterate the SET_UNIT and call an iterator function for each **alive** UNIT presence completely in a @{Zone}, providing the UNIT and optional parameters to the called function. +-- @param #SET_UNIT self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the SET_UNIT. The function needs to accept a UNIT parameter. +-- @return #SET_UNIT self +function SET_UNIT:ForEachUnitCompletelyInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Unit#UNIT UnitObject + function( ZoneObject, UnitObject ) + if UnitObject:IsCompletelyInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- Iterate the SET_UNIT and call an iterator function for each **alive** UNIT presence not in a @{Zone}, providing the UNIT and optional parameters to the called function. +-- @param #SET_UNIT self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the SET_UNIT. The function needs to accept a UNIT parameter. +-- @return #SET_UNIT self +function SET_UNIT:ForEachUnitNotInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Unit#UNIT UnitObject + function( ZoneObject, UnitObject ) + if UnitObject:IsNotInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + + + +----- Interate the SET_UNIT and call an interator function for each **alive** player, providing the Unit of the player and optional parameters. +---- @param #SET_UNIT self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_UNIT. The function needs to accept a UNIT parameter. +---- @return #SET_UNIT self +--function SET_UNIT:ForEachPlayer( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.PlayersAlive ) +-- +-- return self +--end +-- +-- +----- Interate the SET_UNIT and call an interator function for each client, providing the Client to the function and optional parameters. +---- @param #SET_UNIT self +---- @param #function IteratorFunction The function that will be called when there is an alive player in the SET_UNIT. The function needs to accept a CLIENT parameter. +---- @return #SET_UNIT self +--function SET_UNIT:ForEachClient( IteratorFunction, ... ) +-- self:F2( arg ) +-- +-- self:ForEach( IteratorFunction, arg, self.Clients ) +-- +-- return self +--end + + +--- +-- @param #SET_UNIT self +-- @param Unit#UNIT MUnit +-- @return #SET_UNIT self +function SET_UNIT:IsIncludeObject( 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: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 + end + MUnitInclude = MUnitInclude and MUnitCoalition + end + + if self.Filter.Categories then + local MUnitCategory = false + for CategoryID, CategoryName in pairs( self.Filter.Categories ) do + 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 + end + MUnitInclude = MUnitInclude and MUnitCategory + end + + if self.Filter.Types then + local MUnitType = false + for TypeID, TypeName in pairs( self.Filter.Types ) do + self:T3( { "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:T3( { "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:T3( { "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:T2( MUnitInclude ) + return MUnitInclude +end + + +--- SET_CLIENT + +--- SET_CLIENT class +-- @type SET_CLIENT +-- @extends Set#SET_BASE +SET_CLIENT = { + ClassName = "SET_CLIENT", + Clients = {}, + Filter = { + Coalitions = nil, + Categories = nil, + Types = nil, + Countries = nil, + ClientPrefixes = 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, + }, + }, +} + + +--- Creates a new SET_CLIENT object, building a set of clients belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #SET_CLIENT self +-- @return #SET_CLIENT +-- @usage +-- -- Define a new SET_CLIENT Object. This DBObject will contain a reference to all Clients. +-- DBObject = SET_CLIENT:New() +function SET_CLIENT:New() + -- Inherits from BASE + local self = BASE:Inherit( self, SET_BASE:New( _DATABASE.CLIENTS ) ) + + return self +end + +--- Add CLIENT(s) to SET_CLIENT. +-- @param Set#SET_CLIENT self +-- @param #string AddClientNames A single name or an array of CLIENT names. +-- @return self +function SET_CLIENT:AddClientsByName( AddClientNames ) + + local AddClientNamesArray = ( type( AddClientNames ) == "table" ) and AddClientNames or { AddClientNames } + + for AddClientID, AddClientName in pairs( AddClientNamesArray ) do + self:Add( AddClientName, CLIENT:FindByName( AddClientName ) ) + end + + return self +end + +--- Remove CLIENT(s) from SET_CLIENT. +-- @param Set#SET_CLIENT self +-- @param Client#CLIENT RemoveClientNames A single name or an array of CLIENT names. +-- @return self +function SET_CLIENT:RemoveClientsByName( RemoveClientNames ) + + local RemoveClientNamesArray = ( type( RemoveClientNames ) == "table" ) and RemoveClientNames or { RemoveClientNames } + + for RemoveClientID, RemoveClientName in pairs( RemoveClientNamesArray ) do + self:Remove( RemoveClientName.ClientName ) + end + + return self +end + + +--- Finds a Client based on the Client Name. +-- @param #SET_CLIENT self +-- @param #string ClientName +-- @return Client#CLIENT The found Client. +function SET_CLIENT:FindClient( ClientName ) + + local ClientFound = self.Set[ClientName] + return ClientFound +end + + + +--- Builds a set of clients of coalitions. +-- Possible current coalitions are red, blue and neutral. +-- @param #SET_CLIENT self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #SET_CLIENT self +function SET_CLIENT: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 clients out of categories. +-- Possible current categories are plane, helicopter, ground, ship. +-- @param #SET_CLIENT self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #SET_CLIENT self +function SET_CLIENT: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 clients of defined client types. +-- Possible current types are those types known within DCS world. +-- @param #SET_CLIENT self +-- @param #string Types Can take those type strings known within DCS world. +-- @return #SET_CLIENT self +function SET_CLIENT: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 clients of defined countries. +-- Possible current countries are those known within DCS world. +-- @param #SET_CLIENT self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #SET_CLIENT self +function SET_CLIENT: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 clients of defined client prefixes. +-- All the clients starting with the given prefixes will be included within the set. +-- @param #SET_CLIENT self +-- @param #string Prefixes The prefix of which the client name starts with. +-- @return #SET_CLIENT self +function SET_CLIENT:FilterPrefixes( Prefixes ) + if not self.Filter.ClientPrefixes then + self.Filter.ClientPrefixes = {} + end + if type( Prefixes ) ~= "table" then + Prefixes = { Prefixes } + end + for PrefixID, Prefix in pairs( Prefixes ) do + self.Filter.ClientPrefixes[Prefix] = Prefix + end + return self +end + + + + +--- Starts the filtering. +-- @param #SET_CLIENT self +-- @return #SET_CLIENT self +function SET_CLIENT: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_BASE birth event! +-- @param #SET_CLIENT self +-- @param Event#EVENTDATA Event +-- @return #string The name of the CLIENT +-- @return #table The CLIENT +function SET_CLIENT:AddInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] +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_BASE event or vise versa! +-- @param #SET_CLIENT self +-- @param Event#EVENTDATA Event +-- @return #string The name of the CLIENT +-- @return #table The CLIENT +function SET_CLIENT:FindInDatabase( Event ) + self:F3( { Event } ) + + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] +end + +--- Interate the SET_CLIENT and call an interator function for each **alive** CLIENT, providing the CLIENT and optional parameters. +-- @param #SET_CLIENT self +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter. +-- @return #SET_CLIENT self +function SET_CLIENT:ForEachClient( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set ) + + return self +end + +--- Iterate the SET_CLIENT and call an iterator function for each **alive** CLIENT presence completely in a @{Zone}, providing the CLIENT and optional parameters to the called function. +-- @param #SET_CLIENT self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter. +-- @return #SET_CLIENT self +function SET_CLIENT:ForEachClientInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Client#CLIENT ClientObject + function( ZoneObject, ClientObject ) + if ClientObject:IsInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- Iterate the SET_CLIENT and call an iterator function for each **alive** CLIENT presence not in a @{Zone}, providing the CLIENT and optional parameters to the called function. +-- @param #SET_CLIENT self +-- @param Zone#ZONE ZoneObject The Zone to be tested for. +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter. +-- @return #SET_CLIENT self +function SET_CLIENT:ForEachClientNotInZone( ZoneObject, IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.Set, + --- @param Zone#ZONE_BASE ZoneObject + -- @param Client#CLIENT ClientObject + function( ZoneObject, ClientObject ) + if ClientObject:IsNotInZone( ZoneObject ) then + return true + else + return false + end + end, { ZoneObject } ) + + return self +end + +--- +-- @param #SET_CLIENT self +-- @param Client#CLIENT MClient +-- @return #SET_CLIENT self +function SET_CLIENT:IsIncludeObject( MClient ) + self:F2( MClient ) + + local MClientInclude = true + + if MClient then + local MClientName = MClient.UnitName + + if self.Filter.Coalitions then + local MClientCoalition = false + for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do + local ClientCoalitionID = _DATABASE:GetCoalitionFromClientTemplate( MClientName ) + self:T3( { "Coalition:", ClientCoalitionID, self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) + if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == ClientCoalitionID then + MClientCoalition = true + end + end + self:T( { "Evaluated Coalition", MClientCoalition } ) + MClientInclude = MClientInclude and MClientCoalition + end + + if self.Filter.Categories then + local MClientCategory = false + for CategoryID, CategoryName in pairs( self.Filter.Categories ) do + local ClientCategoryID = _DATABASE:GetCategoryFromClientTemplate( MClientName ) + self:T3( { "Category:", ClientCategoryID, self.FilterMeta.Categories[CategoryName], CategoryName } ) + if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == ClientCategoryID then + MClientCategory = true + end + end + self:T( { "Evaluated Category", MClientCategory } ) + MClientInclude = MClientInclude and MClientCategory + end + + if self.Filter.Types then + local MClientType = false + for TypeID, TypeName in pairs( self.Filter.Types ) do + self:T3( { "Type:", MClient:GetTypeName(), TypeName } ) + if TypeName == MClient:GetTypeName() then + MClientType = true + end + end + self:T( { "Evaluated Type", MClientType } ) + MClientInclude = MClientInclude and MClientType + end + + if self.Filter.Countries then + local MClientCountry = false + for CountryID, CountryName in pairs( self.Filter.Countries ) do + local ClientCountryID = _DATABASE:GetCountryFromClientTemplate(MClientName) + self:T3( { "Country:", ClientCountryID, country.id[CountryName], CountryName } ) + if country.id[CountryName] and country.id[CountryName] == ClientCountryID then + MClientCountry = true + end + end + self:T( { "Evaluated Country", MClientCountry } ) + MClientInclude = MClientInclude and MClientCountry + end + + if self.Filter.ClientPrefixes then + local MClientPrefix = false + for ClientPrefixId, ClientPrefix in pairs( self.Filter.ClientPrefixes ) do + self:T3( { "Prefix:", string.find( MClient.UnitName, ClientPrefix, 1 ), ClientPrefix } ) + if string.find( MClient.UnitName, ClientPrefix, 1 ) then + MClientPrefix = true + end + end + self:T( { "Evaluated Prefix", MClientPrefix } ) + MClientInclude = MClientInclude and MClientPrefix + end + end + + self:T2( MClientInclude ) + return MClientInclude +end + +--- This module contains the POINT classes. +-- +-- 1) @{Point#POINT_VEC3} class, extends @{Base#BASE} +-- =============================================== +-- The @{Point#POINT_VEC3} class defines a 3D point in the simulator. +-- +-- 1.1) POINT_VEC3 constructor +-- --------------------------- +-- +-- A new POINT instance can be created with: +-- +-- * @{#POINT_VEC3.New}(): a 3D point. +-- +-- 2) @{Point#POINT_VEC2} class, extends @{Point#POINT_VEC3} +-- ========================================================= +-- The @{Point#POINT_VEC2} class defines a 2D point in the simulator. The height coordinate (if needed) will be the land height + an optional added height specified. +-- +-- 2.1) POINT_VEC2 constructor +-- --------------------------- +-- +-- A new POINT instance can be created with: +-- +-- * @{#POINT_VEC2.New}(): a 2D point. +-- +-- @module Point +-- @author FlightControl + +--- The POINT_VEC3 class +-- @type POINT_VEC3 +-- @extends Base#BASE +-- @field #POINT_VEC3.SmokeColor SmokeColor +-- @field #POINT_VEC3.FlareColor FlareColor +POINT_VEC3 = { + ClassName = "POINT_VEC3", + SmokeColor = { + Green = trigger.smokeColor.Green, + Red = trigger.smokeColor.Red, + White = trigger.smokeColor.White, + Orange = trigger.smokeColor.Orange, + Blue = trigger.smokeColor.Blue + }, + FlareColor = { + Green = trigger.flareColor.Green, + Red = trigger.flareColor.Red, + White = trigger.flareColor.White, + Yellow = trigger.flareColor.Yellow + }, + } + +--- SmokeColor +-- @type POINT_VEC3.SmokeColor +-- @field Green +-- @field Red +-- @field White +-- @field Orange +-- @field Blue + +--- FlareColor +-- @type POINT_VEC3.FlareColor +-- @field Green +-- @field Red +-- @field White +-- @field Yellow + +-- Constructor. + +--- Create a new POINT_VEC3 object. +-- @param #POINT_VEC3 self +-- @param DCSTypes#Distance x The x coordinate of the Vec3 point, pointing to the North. +-- @param DCSTypes#Distance y The y coordinate of the Vec3 point, pointing Upwards. +-- @param DCSTypes#Distance z The z coordinate of the Vec3 point, pointing to the Right. +-- @return Point#POINT_VEC3 +function POINT_VEC3:New( x, y, z ) + + local self = BASE:Inherit( self, BASE:New() ) + self:F2( { x, y, z } ) + self.PointVec3 = { x = x, y = y, z = z } + return self +end + +--- Smokes the point in a color. +-- @param #POINT_VEC3 self +-- @param Point#POINT_VEC3.SmokeColor SmokeColor +function POINT_VEC3:Smoke( SmokeColor ) + self:F2( { SmokeColor, self.PointVec3 } ) + trigger.action.smoke( self.PointVec3, SmokeColor ) +end + +--- Smoke the POINT_VEC3 Green. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeGreen() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.Green ) +end + +--- Smoke the POINT_VEC3 Red. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeRed() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.Red ) +end + +--- Smoke the POINT_VEC3 White. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeWhite() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.White ) +end + +--- Smoke the POINT_VEC3 Orange. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeOrange() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.Orange ) +end + +--- Smoke the POINT_VEC3 Blue. +-- @param #POINT_VEC3 self +function POINT_VEC3:SmokeBlue() + self:F2() + self:Smoke( POINT_VEC3.SmokeColor.Blue ) +end + +--- Flares the point in a color. +-- @param #POINT_VEC3 self +-- @param Point#POINT_VEC3.FlareColor +-- @param DCSTypes#Azimuth (optional) Azimuth The azimuth of the flare direction. The default azimuth is 0. +function POINT_VEC3:Flare( FlareColor, Azimuth ) + self:F2( { FlareColor, self.PointVec3 } ) + trigger.action.signalFlare( self.PointVec3, FlareColor, Azimuth and Azimuth or 0 ) +end + +--- Flare the POINT_VEC3 White. +-- @param #POINT_VEC3 self +-- @param DCSTypes#Azimuth (optional) Azimuth The azimuth of the flare direction. The default azimuth is 0. +function POINT_VEC3:FlareWhite( Azimuth ) + self:F2( Azimuth ) + self:Flare( POINT_VEC3.FlareColor.White, Azimuth ) +end + +--- Flare the POINT_VEC3 Yellow. +-- @param #POINT_VEC3 self +-- @param DCSTypes#Azimuth (optional) Azimuth The azimuth of the flare direction. The default azimuth is 0. +function POINT_VEC3:FlareYellow( Azimuth ) + self:F2( Azimuth ) + self:Flare( POINT_VEC3.FlareColor.Yellow, Azimuth ) +end + +--- Flare the POINT_VEC3 Green. +-- @param #POINT_VEC3 self +-- @param DCSTypes#Azimuth (optional) Azimuth The azimuth of the flare direction. The default azimuth is 0. +function POINT_VEC3:FlareGreen( Azimuth ) + self:F2( Azimuth ) + self:Flare( POINT_VEC3.FlareColor.Green, Azimuth ) +end + +--- Flare the POINT_VEC3 Red. +-- @param #POINT_VEC3 self +function POINT_VEC3:FlareRed( Azimuth ) + self:F2( Azimuth ) + self:Flare( POINT_VEC3.FlareColor.Red, Azimuth ) +end + + +--- The POINT_VEC2 class +-- @type POINT_VEC2 +-- @extends Point#POINT_VEC3 +POINT_VEC2 = { + ClassName = "POINT_VEC2", + } + +--- Create a new POINT_VEC2 object. +-- @param #POINT_VEC2 self +-- @param DCSTypes#Distance x The x coordinate of the Vec3 point, pointing to the North. +-- @param DCSTypes#Distance y The y coordinate of the Vec3 point, pointing to the Right. +-- @param DCSTypes#Distance LandHeightAdd (optional) The default height if required to be evaluated will be the land height of the x, y coordinate. You can specify an extra height to be added to the land height. +-- @return Point#POINT_VEC2 +function POINT_VEC2:New( x, y, LandHeightAdd ) + + local LandHeight = land.getHeight( { ["x"] = x, ["y"] = y } ) + if LandHeightAdd then + LandHeight = LandHeight + LandHeightAdd + end + + local self = BASE:Inherit( self, POINT_VEC3:New( x, LandHeight, y ) ) + self:F2( { x, y, LandHeightAdd } ) + + return self +end + + +--- The main include file for the MOOSE system. + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Scheduler" ) +Include.File( "Event" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Unit" ) +Include.File( "Zone" ) +Include.File( "Client" ) +Include.File( "Static" ) +Include.File( "Database" ) +Include.File( "Set" ) +Include.File( "Point" ) Include.File( "Moose" ) +Include.File( "Scoring" ) +Include.File( "Cargo" ) +Include.File( "Message" ) +Include.File( "Stage" ) +Include.File( "Task" ) +Include.File( "GoHomeTask" ) +Include.File( "DestroyBaseTask" ) +Include.File( "DestroyGroupsTask" ) +Include.File( "DestroyRadarsTask" ) +Include.File( "DestroyUnitTypesTask" ) +Include.File( "PickupTask" ) +Include.File( "DeployTask" ) +Include.File( "NoTask" ) +Include.File( "RouteTask" ) +Include.File( "Mission" ) +Include.File( "CleanUp" ) +Include.File( "Spawn" ) +Include.File( "Movement" ) +Include.File( "Sead" ) +Include.File( "Escort" ) +Include.File( "MissileTrainer" ) +Include.File( "AIBalancer" ) +Include.File( "AirbasePolice" ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-- 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 + + +--- 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 ):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 ):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 + ):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 + ):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 + ):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 ):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 ):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 + ):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 + ):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, 30, "Player Scores" ):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, 30, "Player Scores" ):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 + + + + + + + +--- 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, 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 +--- This module contains the MESSAGE class. +-- +-- 1) @{Message#MESSAGE} class, extends @{Base#BASE} +-- ================================================= +-- Message System to display Messages to Clients, Coalitions or All. +-- Messages are shown on the display panel for an amount of seconds, and will then disappear. +-- Messages can contain a category which is indicating the category of the message. +-- +-- 1.1) MESSAGE construction methods +-- --------------------------------- +-- Messages are created with @{Message#MESSAGE.New}. Note that when the MESSAGE object is created, no message is sent yet. +-- To send messages, you need to use the To functions. +-- +-- 1.2) Send messages with MESSAGE To methods +-- ------------------------------------------ +-- Messages are sent to: +-- +-- * Clients with @{Message#MESSAGE.ToClient}. +-- * Coalitions with @{Message#MESSAGE.ToCoalition}. +-- * All Players with @{Message#MESSAGE.ToAll}. +-- +-- @module Message +-- @author FlightControl + +--- The MESSAGE class +-- @type MESSAGE +-- @extends Base#BASE +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 #number MessageDuration is a number in seconds of how long the MESSAGE should be shown on the display panel. +-- @param #string MessageCategory (optional) is a string expressing the "category" of the Message. The category will be shown as the first text in the message followed by a ": ". +-- @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!", 25, "End of Mission" ) +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", 25, "Penalty" ) +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", 25, "Score") +function MESSAGE:New( MessageText, MessageDuration, MessageCategory ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MessageText, MessageDuration, MessageCategory } ) + + -- 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.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 + + + + + + + +--- 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, "Command" ) + else + Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, "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, "Co-Pilot", 20, "Route" ) + else + Client:Message( RouteMessage, self.MSG.TIME, "Command", 20, "Route" ) + 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, "Co-Pilot" ) + else + Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, "Command" ) + 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, Host ) + + 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, 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] .. '.', + "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] .. '.', + "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, "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, "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, "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, "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, "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, "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, 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, 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, Host ) + 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, 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, 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, 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, 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, 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, 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, "Co-Pilot" ) + else + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, "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 + + + + + + + +--- 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, "Mission Command: Task Status", 30, "Task status" ) + 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 + +--- 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 + + + +--- 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 + + + +--- 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 + + + +--- 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 + + + +--- 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 + +--- 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 + + + +--- 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 + +--- 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 + +--- 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, "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$",""), 10, "Mission Command: Mission Report" ):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, self.TimeShow, "Mission time" ):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 + + + + + + + +--- 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 + 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 + 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. + -- 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 ) + + 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 + 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 + +--- This module contains the SPAWN class. +-- +-- 1) @{Spawn#SPAWN} class, extends @{Base#BASE} +-- ============================================= +-- 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. +-- +-- 1.1) 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. +-- +-- 1.2) 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}. +-- +-- 1.3) 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. +-- +-- 1.4) 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 + +--- 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 self +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 + SpawnTemplate.lateActivation = false -- TODO BUGFIX + + if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then + self:T( "For ground units, visible needs to be false..." ) + SpawnTemplate.visible = false -- TODO BUGFIX + 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, self.SpawnRandomizeTemplate } ) + + 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 + +--- 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) + +--- 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. +-- +-- +-- @usage +-- -- Declare a new EscortPlanes object as follows: +-- +-- -- First find the GROUP object and the CLIENT object. +-- local EscortClient = CLIENT:FindByName( "Unit Name" ) -- The Unit Name is the name of the unit flagged with the skill Client in the mission editor. +-- local EscortGroup = GROUP:FindByName( "Group Name" ) -- The Group Name is the name of the group that will escort the Escort Client. +-- +-- -- Now use these 2 objects to construct the new EscortPlanes object. +-- EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the mission. You are escorted by a plane with code name 'Desert', which can be instructed through the F10 radio menu." ) +-- +-- +-- +-- @module Escort +-- @author FlightControl + +--- ESCORT class +-- @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 Scheduler#SCHEDULER FollowScheduler The instance of the SCHEDULER class. +-- @field #number FollowDistance The current follow distance. +-- @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 = 1, + 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, + SmokeDirectionVector = false, + 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 +-- @usage +-- -- Declare a new EscortPlanes object as follows: +-- +-- -- First find the GROUP object and the CLIENT object. +-- local EscortClient = CLIENT:FindByName( "Unit Name" ) -- The Unit Name is the name of the unit flagged with the skill Client in the mission editor. +-- local EscortGroup = GROUP:FindByName( "Group Name" ) -- The Group Name is the name of the group that will escort the Escort Client. +-- +-- -- Now use these 2 objects to construct the new EscortPlanes object. +-- EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the mission. You are escorted by a plane with code name 'Desert', which can be instructed through the F10 radio menu." ) +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 + + -- 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 = {} + 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 + ) + + self.FollowDistance = 100 + self.CT1 = 0 + self.GT1 = 0 + self.FollowScheduler = SCHEDULER:New( self, self._FollowScheduler, {}, 1, .5, .01 ) + self.EscortMode = ESCORT.MODE.MISSION + self.FollowScheduler:Stop() + + return self +end + +--- This function is for test, it will put on the frequency of the FollowScheduler a red smoke at the direction vector calculated for the escort to fly to. +-- This allows to visualize where the escort is flying to. +-- @param #ESCORT self +-- @param #boolean SmokeDirection If true, then the direction vector will be smoked. +function ESCORT:TestSmokeDirectionVector( SmokeDirection ) + self.SmokeDirectionVector = ( SmokeDirection == true ) and true or false +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 + + self.FollowScheduler:Stop() + + 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 } ) + + self.FollowScheduler:Stop() + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + self.EscortMode = ESCORT.MODE.FOLLOW + + self.CT1 = 0 + self.GT1 = 0 + self.FollowScheduler:Start() + + 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 + + self.FollowScheduler:Stop() + + 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:Start() + end + +end + +--- @param Group#GROUP EscortGroup +function _Resume( EscortGroup ) + env.info( '_Resume' ) + + local Escort = EscortGroup:GetState( EscortGroup, "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 + + self.FollowScheduler:Stop() + + self:T( AttackUnit ) + + if EscortGroup:IsAir() then + EscortGroup:OptionROEOpenFire() + EscortGroup:OptionROTPassiveDefense() + EscortGroup:SetState( EscortGroup, "Escort", self ) +-- 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 + + self.FollowScheduler:Stop() + + 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 + + self.FollowScheduler:Stop() + + 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() + self:F( { self.FollowDistance } ) + + self:T( {self.EscortClient.UnitName, self.EscortGroup.GroupName } ) + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + + local ClientUnit = self.EscortClient:GetClientGroupUnit() + local GroupUnit = self.EscortGroup:GetUnit( 1 ) + local FollowDistance = self.FollowDistance + + self:T( {ClientUnit.UnitName, GroupUnit.UnitName } ) + + if self.CT1 == 0 and self.GT1 == 0 then + self.CV1 = ClientUnit:GetPointVec3() + self:T( { "self.CV1", self.CV1 } ) + 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 } + + if self.SmokeDirectionVector == true then + trigger.action.smoke( GDV, trigger.smokeColor.Red ) + end + + 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, FollowDistance, Time:", CS, GS, Speed, FollowDistance, 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 + + +--- The MISSILETRAINER class +-- @type MISSILETRAINER +-- @field Set#SET_CLIENT DBClients +-- @extends Base#BASE +MISSILETRAINER = { + ClassName = "MISSILETRAINER", + TrackingMissiles = {}, +} + +function MISSILETRAINER._Alive( Client, self ) + + if self.Briefing then + Client:Message( self.Briefing, 15, "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, "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 + +--- 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.DBClients = SET_CLIENT:New():FilterStart() + + +-- for ClientID, Client in pairs( self.DBClients.Database ) do +-- self:E( "ForEach:" .. Client.UnitName ) +-- Client:Alive( self._Alive, self ) +-- end +-- + self.DBClients:ForEachClient( + function( Client ) + self:E( "ForEach:" .. Client.UnitName ) + Client:Alive( self._Alive, self ) + 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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Messages OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Missile tracking to all players OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Missile tracking OFF", 15, "Menu" ):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.", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Alerts to all players OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Alerts Hits OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Alerts Launches OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Range display OFF", 15, "Menu" ):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", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Bearing display OFF", 15, "Menu" ):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)", 15, "Menu" ):ToAll() + else + MESSAGE:New( "Menus are DISABLED", 15, "Menu" ):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", 15, "Menu" ):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:FindClient( 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 ), 5, "Launch Alert" ) + + if self.AlertsToAll then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + + local ClientID = Client:GetID() + self:T( ClientID ) + 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() + ), 15, "Hit Alert" ) + + 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() + ), 5, "Tracking" ) + + 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, 1, "Tracking" ):ToClient( Client ) + end + end + end + + return true +end +--- This module contains the AIBALANCER class. +-- +-- === +-- +-- 1) @{AIBalancer#AIBALANCER} class, extends @{Base#BASE} +-- ================================================ +-- The @{AIBalancer#AIBALANCER} class controls the dynamic spawning of AI GROUPS depending on a SET_CLIENT. +-- There will be as many AI GROUPS spawned as there at CLIENTS in SET_CLIENT not spawned. +-- +-- 1.1) AIBALANCER construction method: +-- ------------------------------------ +-- Create a new AIBALANCER object with the @{#AIBALANCER.New} method: +-- +-- * @{#AIBALANCER.New}: Creates a new AIBALANCER object. +-- +-- +-- === +-- @module AIBalancer +-- @author FlightControl + +--- AIBALANCER class +-- @type AIBALANCER +-- @field Set#SET_CLIENT SetClient +-- @field Spawn#SPAWN SpawnAI +-- @extends Base#BASE +AIBALANCER = { + ClassName = "AIBALANCER", +} + +--- Creates a new AIBALANCER object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #AIBALANCER self +-- @param SetClient A SET_CLIENT object that will contain the CLIENT objects to be monitored if they are alive or not (joined by a player). +-- @param SpawnAI A SPAWN object that will spawn the AI units required, balancing the SetClient. +-- @return #AIBALANCER self +function AIBALANCER:New( SetClient, SpawnAI ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + self.SetClient = SetClient + self.SpawnAI = SpawnAI + + self.AIMonitorSchedule = SCHEDULER:New( self, self._ClientAliveMonitorScheduler, {}, 1, 10, 0 ) + + return self +end + +--- @param #AIBALANCER self +function AIBALANCER:_ClientAliveMonitorScheduler() + + self.SetClient:ForEachClient( + --- @param Client#CLIENT Client + function( Client ) + local ClientAIAliveState = Client:GetState( self, 'AIAlive' ) + self:T( ClientAIAliveState ) + if Client:IsAlive() then + if ClientAIAliveState == true then + Client:SetState( self, 'AIAlive', false ) + local AIGroup = Client:GetState( self, 'AIGroup' ) -- Group#GROUP + AIGroup:Destroy() + end + else + if not ClientAIAliveState or ClientAIAliveState == false then + Client:SetState( self, 'AIAlive', true ) + Client:SetState( self, 'AIGroup', self.SpawnAI:Spawn() ) + end + end + end + ) + return true +end + + + + +BASE:TraceOnOff( false ) env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.miz b/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.miz index 1f3ef48f2e5207d9762662e5aa61528ac52d25b8..23fb906eb8d8a15f52c10e42ae48617ae574898f 100644 GIT binary patch delta 120038 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

cFi5a0 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 z zFN~ifwYJmpwQ{1K9|jN_+)n}kz(bEayUFf#==t>h5J$TX_(O}-i$SzPkIle+^&%m~ zsmH%Cs@!OQ*HfSY@-T`+j+p|;<<4ZZp!+3Vha4ggl=XbvY&j^6$Fg*A91Ldw2PMuU=wueZ5Kv~BR)PG|2POco z;epR*VCp(y*TRu3zlYx)&1SSysq3m~*Qy%!m1yO0hU+$Shpk2f<#4Ah*#^oLcFB@& zkhq#U-9|Ui1W|7;byV{leMC9Y$!43DU(6&P zY@pL~IRvRi7W-B_iYlWvq^)35N+p_Y3o8Y+wJ_TOZGD?t-{!Wj&F{XA#K4UwqiFKj zt%GBXV)Oj#5WJRR)p94hPUi}LB}oFp3YH`Tq3&iW2$lX#Inb=qt%hTV{;nlFE|E4T z?@kgVO68p-K9uP@O=#{qsrw8S_hk)0DD6Hh56f4FZQ>`tkKL!=bQ$r$Jp7j^FER{I zP5K!)>HPR!wF;Gn?O_>-=HLLiWYB5IU(H_R4qlbIeRc8UxcFgJ6kSk%0K&nW@J>YG zFaRsdezrY7%VrF8Fm`ylC!T`TsTZGo)@`$yIr&xm(U^A>Cs5Qdb*7D|Xrh{VpYoTY zZV%4ed_7j_?&(<966%vuV~i|tVLhK_pB{a7j$gvpkE`lx?N7*|y}}d^(L)Ljsw{Vr z*vDD1DB8CR6NIM@>9}uys#Cg4E#|k+WFJZH3Rr|J`Dy5C zqG?u;`0tAHwV?$lxHg_3Hfv|DxvtEIkbknK6z`L#PY`j%TSR~e2bSKNI2JvhsMA}I!TSITx(%yv`G zx)T&cGuv9Ton<^NZXb&KO!K>CeR$EO2fVFM;Bg0(?nGw;j=Vm|%!qAsQtv;n!zD5N zWJKoZ9%I7~orm|`j{ByCO=Qd)47YKKqk^p!2aPz}!J$+qF!|$-@%{Ou`j7PHU~fL^ z66aI>=y`NSPhMkx+s)W*EnQO7-FB3eSx7sriJ*sDtc$$H?L1#Ld*_(>8;F@zMNL!| zNCCjRy{uMXF+WBY5ZxH|HaxI4FRRIuj7b*nArAFU9tw&uJFl>rJs?aRCQh%ycWkPn#@FMks)jj>r7w>Qo%Oi*u-jVRf<>R^+f7uA}+(o+B1dOBHb0n$nTw4 zv&DH%U~M?jZ9dg0-o2dd?s2}`!x?Xn=e#|i_5K&S8q>^vA&n!ox%5e1UeY)gx_p#|_6>2%`@5)`8UTw#b>`b4>PN z%q}=aJa=SvyUZ`ki>$uNf2Cx6)f_sPeel_T+2@~5L9f38+UPSnPHQlmi6C2PM5i2B z1?PEf&OnP9mRwWS{5s?IQ&jB~99jgV_N2kR$-&65+NYA?^dc`O{PCG&1afy487*}g zWY*DNUUU^*{uqx%I%ow(gZ#_j^#%BcJ}Gb?)?bU_A^q_uPZ3iG2jUR~KKk+r|NZEH zG#c?=utcK$YcXmycS3d#hcE?IxgfdALku!Xbi;XwmOn_W1rUgQK^AD3M;8F`hiX+8 z`1k5&dCh-CUf?rZ9@`nlp(kWkv<9#cYS=mujc9~|1kw$YtRtgd% zQzsn$CCLuZQPS=HEoYuw@S}4!;^EtW1U6X7gN2bHGz<)oLIdTf;OP_=tH3?HtK=lH z-;;!es9oBziFpCyc%j#@T0#rALKv?J8?A3ELu|2{t$QdpJH;T=;9!Cb8ma(Gso;NG zWmg{}o_@ltm!LqKV*)W`IvupytvEu^0sQ-zq5~0i@mD-DY>7PGgc%Kdo)s>C$`!0m z{V}d$vAVqF;^>r!nO?&zGq+asMcDR2sP=*aQ9GUkGjeK1$5~8kH~=xlSb$Aq)Qv+} z*O5B}!yr()?@e9g8ZU6}3;O#b+V2{`1kB;FTuG&y?|nZ-#d5u;ZtT*1;@T*!4fl3z zCf6bTe>h4s!;ZQ&Ecu5fI_hsP^7cVS2de!tK^q>V^?mWh7qd^!&ZZ~X>67<9{`~j^ z-gX^l`1J*veSZT`O9KRx&rTY%=Ng7H4>UE;Nd3xac!SUZ04Kc)lYCA!77ec0G{DBu z0Yp}p0J_G}0Yp}p0J_GL$4)E*Yv}=#(HIkx2~R!)UFrdoN>4HaB>n-De@`+4fdm4R z{52Sp%ugx<@dW~tY&RQ|6i_MyX&3^NK~O;?^cVsFcVTj6Xm53MWphwV1qJ{B000dD P4FHY<005*L0ssI2^=#$V delta 680 zcmV;Z0$2UWz6hqF0kFOp4|6ljNb`GR5a9s;0AmFJlg$_#f2CAWZ`v>reg=vEaPmuI z#0=ztNs)M{fK^C?PJ=y6YgL)Vfk=*B+0I_3{rA~U2Bu9bP+y{)@4NfHJNu4_-=q+^ zjNqo<@5Ac;ezSo2&-LwUIfLbT_Vven0h{gZ_boX84PfYXgP@g^n!z0tOi@!v0o$Tv z+R*Yjfp|2Ye~c#M_-QnWKi84HE|)3gu%k9=3Qu?LXem-&WzPQdH?YY!Y7X`=uSDun zN4VDofI5LT%DOVPtM+8ij8_v60BsN^T2?A$9;}$DlyK;zq$WK?C?fqKMmW*cE*cL$ z#W>l!U-a;R255+|t1b&wd?`2!RY2qL=N8^6auCu$e~8z=&QOnF4op~R=NuGZ9xX*+ zI_#;-sPQBS2nk`%M35_4f_EJ|r{rGI(l-#hTy@iOOG33~%0&JK2$wX=ZJwwtvW<)I ziXy;1sV&@PoPsF${{laxdR1s`JA71qh3qEuBH3-aop7b3f(XrI#WR1Sj;5K2++{-V zq^@h{XxiP}HC=EVEW4-~o#rv;QEmHoT9aPa`I_^RXLCl`F#7LlNM1)y?G&b}cs6?I zx5E%MxKmXPE*x~n5N;OKn)*$>_+{*Cx;Ojlna?KEucDWyHm|S8-*(&HJnqZIdLC@c ze^5&U1eb9g0vfl8=>di_4|6ljNb`GR5a9s;0AmFJmmVDgH5PDQ_P%1o(E;K~81B2n z(E;K~81B2nmuVdWECR_Ilh7Cxm#ZBDJ_EZO0GI3?0x|=FF94Sz9s)7~-!+$=1OgeC zZXN>X=U8_DrAsk;9#!IhF^FKYp@lX8wru)$|4JRHF1N{B-(+7)apX_eg-Ai2nIPe10l z4?O^5l9=C&h!hq_a`n3jwyaMm!$+=j$^i#eK-* zUbZ5j_AXfqp4c4)VuWCSPegggw^V{qrFhKUO_RR3$n)W==g)hiU}cm64L?cGpI^nF z8J+I*X&m(8NpzYa zWUXW*$spQ=*CU00XB$g?)@um?gcTKXq3A^d!Kx2>AoT!VGvEvFJs{A-t zYz&H`vV+vUvA9ao&zV4*Agt`yNP()qXsSR?+v#jWjK?SV-ea|Ud*WxMvk*mEdt9QDEsGAiLPuOpmMBBYQKmj|Q% zS(NJbjX#jaa`A(a>!dLQBTu;2iTo^TpEigbI}j*Mf0X6oECQ2bB0t)Ctd4QwJqusw-JQlYxPuZr{(qk-eb%_UYPrD*8Gh6Lgw z7!D&C6{I-G`{UH2FqKD98p3y~4^V&?xs20O>M|XFpRux1$J^k~Mun;r*e&e<>3HxN ze`f;zk@7sTBmRj#A_&7M1dj*wQ~{`QPF3w`!KTXScb8;7^{XmdD3euZ(jQH!J=GPe z3Y=9zy6apPzVABmnVD~+D6TOeia&Zv*BH?Z2l$(QjfZknJkbE*W_Sy&h8EyLh9Ku5 zAv_j;3)U(NAj0TubnfGXDmn`~pPMZldKh)9{(pMsebcZ8yly2*)Rr1GTZmdXL^6X< z`MY);sf&);rjI1CycNU92b2ZXOm;7MUMeM=*8MBN^hempNCf4UvK~R_jT0v_l}c2LbPdr z?eAH1_V=Dnlcx)ERM9}VMFn4>fLdhW?dkf8(={x1zk)al5(7&HtYs~P*8`7S*f|8>@oYqrMv*i~OkE?47Y1vHzc#UX`fWMz9vP5tn23Z$xP((HqO*ifm_K%{i zbm`DoQ~fZt;^8PKcnmUAR6glqz68*QvC@*%A0if22Cxjo?m%crb)^u0T*A z36&PGnrnav@jMJ&!?<~>rq;H$fF_q`RqAUE3&s$!QRhTt7LB?#3w6!(ECvx24`}Dy zvY8^7;R-+MX5NN|ZPF(yotpk_b+kUej@Dfr-L*6_VQdn{^OR4P@$K~Wg`>DX>_vyk z2r?l$BtuI)hfwe(Xe1neQus8*WSlbu*ap!G!>AMYp@C4)7mJw1n4^H*1#P;hCBI6@ zwo8R6fQO8sAVP2}?2mdlN?dLKqX`Mr(NHR@lbdH3qOB=r7Ec-fnP~ejTH-mqky7fz z=%F0*m!wk(?kvYdt6_B~g~khV1|ehWNl>@g^X2IXG}Udk${iVhE$0y}$Mvzm>s#U% za$``?K|CDw0uH6yR;1UH9McLyN3#H0CD+BaX!=luq2WEl2R1te95awjP5~zhIJqH7 zON_J8*+Pt0su-_SF**3ikf>Q%upE{jq$X$oC1oPvv(i4YWp- zQm$|~Q#-7frwGM=ijg|u_py4P@cX1%w$5xWUj%8v(3ToDw8v601|+M?h&PeCG9X!b zhU&FZU(xp!WVD29QtkX>jZ5o~_0!}ZYps7kSd0PDwW; z!*fWr41`{dec-F8DPWqwnjlSe3c{>;=pOQ*#E|vHqkv9-k~JAiHwI3CPDY0&ipNVWOaO0lzZz)z1ewoPq~mVBZdg4Elo! z&2K&I3|`pF>neP+_w(VAt#f?$kO8}Ae8SOiyXd76&;M||hr?fvA2#3*gYnl^e4Ylw z3+clb&uEf=N+F{*LQycn2_b+~)mJu&;w z=_eJZI0LRMbaSj3;CGhLFYySG0AnU?^95~Pa^r^y9c6V(%f!@`F?tDPD z;-QpKPVG4$^sk+|a$}JVatb!5mYWs; zi%o)|x=CpF$qzM6tAdV#nx@5c_@Sz4arqZ*TCB3$H7&^dFii^>eVe9b7#EvYU5mL( zV=>%{4W`fr%3~@BbNp)rA4VpWi>XHrBH zWA%B$F$Wkv(?Ts+#yAO6z479AqHfiU>%?bbSS2Qs4(dw0kE$ob}_C7 z(OaML4^yx)jGaN<_IiMF6^tRyhOwp~g{5cN;3>!c9*70m{mS9m>qBQPbK((yV-LA{ zEF3laU{crOYnEGq6b)rtg;`o9YAvRuOkFm& zs&(e}I+|ZFk){W5Hb0~yi-M|A(($Oz^-h<#M;prVSJZdVaFhU4x$LQp`fDJdTDBDR;}d1gxbZ0Q};i}o!!_dXeA8= zRd^dR$JhWV0$teqtELr@)PWIU=~!E%0w@yfUgUVN;5l^j*w(Eh1F=&tRKbXvLU8ON!ov`6RhpB@gJ7m72otON7#^A} zTpXcFO(T_CbYUwj`I=6EzN|~z?rC`lS*<+S4|7Akp@~4)m6igteALAabJPrtTEgU1 z6(Bs-M>U$VxubUB4;IFM(g_o}qw;`+s&KAewLv)CANAR0smf_d0H)MYh`Se|FSr1& z+>27XZlR3ZnD&m7oIMjQC_@~={x98Y{92D=BrUUNRxzi)YV0GCe4rvzY-ks`*??p~ zvN%EdsMqyaeBOkE0KeOm5VH~wd&GNTu{cdhS-W7n=xNkXE~C1C(#K&-9YpvXjXhOf zvvZpnMppJro=PC+Y!w}z?AHxcg|(Tlg3t-D{3K}a72-Hc4`$;U{VA?Klm;H;DAAnN zE+KM#*fXO~{G+n~X58{2Nb(-t%g*3UoOXHJ-}J5LweC}k3*qi!>oSt z-xP=?{ieo4B7o(8q={$lJ9%|2P5WbTBY6avtog_1%5`Kglp8M9C;H!1*Khi3NelzBLRlr(;EFrYG3j0uuMcyxBn zokQXf7AHX}EBGI0$3gZPxw8MkdB+ycjS6K>!3Ie{tK?Og)0{l08gb=)eYzrDo^H6|S zFoH)_G^I*^T7|_*%WMo)Uu9BMJYljs9>pD9e8{5is0V|@q#t+82}Rzr(Z>-yEzCxt z@7AhXAO3PHW zuZF7Ix*GbH$;#I1v{Zl~mSxM*^h*ijLala5hzyy3yMz%$y#l%gS4xYeMBA`474`x- zS)GlyRdfutp;SPr+bh^yYqQN3N`ggH1#y(G`4h&5g)SMJG$&u#Ya)_enm|nx8ep?g zqd?9~ta`~6G#!MgeNUVY8DXE>X$lMd4d?_Ns354~R$zAk>4%uE=1mUCK^4Wpbb^C= zde94hes+oBk-gL44CmP81W}hD;ne~h0+UMa9nh?ix~%oeOc2cICxhD3ZgFyD*2}1t z-7ir!x2OXy0<_+Xx>W2^il|NL)$!Wq^xdfp@hC(M$NHpn2FpXuvPR)Jo1g|kOL*8n z!o&ob6g9Arg8pQ#9RUS=2z85`6?&4m1 zH`)ZPFid#KpjjYiW~tKg8HmVnqC!z;EEJY}1w=Q>_EbmeiaB{PO^e||6*9LBg+njE zV#YMmcx_yn#3@jw+Y}RmH7_`1!%5nP6fSV1poVEtCdCbbn(Bcf%I<+Uxn(qeEVR-J z2-ca(g6mc}ezIbo_2k5g!72%9!f1C1#42*~Fc+8Fm}z#D2Wehlu^R=zBGa)cz~|il zb=|6`4iK7>HIK z)Kog~?D!0jP&I0diS3L!{3a=Xofq9C0eETAPG*@jv6Ch(xwTpRB|)faRk8M>N)?oF z<5se2atqlD7r`O4n87JqEgRfYG3H$ebn9NMrVHZ^438)s!J?QGFduGz!BR5ss8D=m zi!uTjr%>$=Bo%|%g=1Z~D_S`f_3o>VjrbM&n04GvftxB?b{1+hX2l?*^#Tu{%%P}^ z*A1%sZKR^hsmNBBbq-b9RI3y@sV8pM10;6!f&izLRs>Wg+c@v%s3*3sX{T4IyPcTo zo16HFUAy3io)GmTl%e5(GB+~>0|;wPLbU6bLyrvx&sb2cns-H+1Rl}(qU zn0URJz84H$V9`9v_^KHQYIZ)WW%mv&E9E<(#}8QDdhwmlhaZj7E^Kr}X4cBPJFk*N zP!=blAStkOQZ>t28O<_2sThXq8K|ads|iY=q$sT2%T`*iJfc~lJA&7%j>v)L=&z$V zhlfaE5p_ROlmQlYYb@Oj3?PgXzaDZ5NE8_|#69emi`!ac#~NdlI4Hp;@kDWHnzFqZdHvBT3R*O%Z%w0XZyIlSUsT)u5 z+5`}mPg&Jn4l*mA-or75yx;(Y9*(e8l~3~NQ+z@kV6(o8v#A+qE0D1Uql{_< zB~fXA@OW1fnX>WQ*ugYg0<7|B)GCvqir^l`wuykIHDnd4n$xHY7&z`<7w{~*el`zU z7r=`w(D-O-pmrJlQRe1zBzzSgh{RE^P`2Ci%QbV1_sG$$h5Si1gM#xzA&`1kksuOB@0)`2cP&5GRBQ${G)@mWt!*m*JrFBlP~a>xmo!H2{T@W+~u@?LKh zaT-Anuhe|X3IG|lCr`|?T7p4HY2s9#x7j&=vX4+>SJF>X`HKtDrNtaR7{=#+)I9h@ zlSoFHZpzld@8FsZVa1xm7L#EnijpYg6+Rh0O5qPNF@(YDKnw_KoQ)ONKUhRIkg}-~ zyUbiKiZ9=66w0fOYA!u$*4_JRsA4VZs8dVLyqnL1|Gs2~)lzDqC?dBUxQ^64i0L7{*X{dwl*@UIPy?Cr)SoUy@? zecz;nGm$vDxcq?4voa>Tqw1#y~EXQnS z$6bc^5p{;L2sMxK5(7GPqu~AQ{B1&)2y~Kv0RJ>#!))UQ*K$V# z5GTqA_~A1yT1O4oN%nIDS02X!;844RRaS|!xw6`R)3~|eNb@w&GwNt&x8~aghUQ-# z(OLt1_@gHgtXn`Rst)k*`UALl2_P{0PEx39OOKciA0w0tFU11iY7Xl9Yz>xmtxKR2 z+=?z1K%?n;x1@J}FUYA`)cT@irN17_hre&^+xw4MB(pmKXKYOr6fEdBzsVYAagII? zNCxs7ngYn&#T$BL=8Pj+y#D}c*r5;#aJe;TE<(cxPkujXIK-PlBrZJqE@NaxH&0o! z?y81I2iav!$lM-++&Zw{C{?ST9{_YSv$1E;o!)nQ5zW7UM%klZw|c-fy1Tnb3+2cv zoG%^3fY5`EXh&ZAl}7lkuKfTYXY`q{sfW#$FzpeJdZZyF0@J zcq}OX{_YI!;tZra_`ZN*M$2VK0149_!JMuB_2IW}_3r3dZzsiy;Y(;?5t6y=N2D5P-AW(d^t9ys@O_kVe~#tr{UCMx`XM(FsSfy*#R~0v#)j)Q zKp(XL>sL7H>3ycjCEdq_nCB5)$%-)JrTm9*jBFUd6t~d9cQgOz9N(x1#yYOr|54gj ztn|WrA3-H%qpC`>Tlv;&;J`OQ;l5G-OtJzzniRW#)z4gIE1J$3>*1EHF>4L)hu^iJ z$RN#P2U`f<<3RaVWy;gzp3jJw@#fm@vUejFhosrmZIQ0erwr*$A7yi&Pc z!1wTf()|tm$cfG2WOjG&7uS>EK9E5{avMHi8+taGm?e`SyN?c;9`=J9HyaOKF|R|yV&8z1`m@GJVz zLU_;)9h!jRcc*$6r%G&`uiIzxh&FyS5)WE`(kFE2Yf5;tb%zR%m-c6zK&r=gK3mK{ zy4T-2?v2Mq3FqVq{(gr0i2;F_Yx;4QIck4FkqvaXaN{*@#EtPckjyd}Gn8&08VCyz zfJ5*!y+kcSlJb#CL3YhiMi7Mj;ZyL4-$Y!``i_ow){-~q271ORz1M0H&<4=X68d3@YhRG-L@e|`| zdG$ltXtb5?WbfgIpo1=*joumjEdgLtyb03tgg~Cy4d}Dilp=8&B_iXd-L%bbbOy@UCUq;oi@etvPb`aDG6UR00JX;n^wR8v_-Ow0NWQA|FJGWcYI{)k5f21E^irzOiY z(+IoJ->!g7WeIpsePcq5%{N1rosEW=SDqJ01t4_fSH>wl#E&(>)&|P#p2wk2Pw>_T zKFddj>}tuiWjBqBVnEdgG4w?SuD&U@zD#atSuvqjV531huwO9-t6M{np58!j^f~1y zX^E^cXeYmI&=vLgMUNhwL|=`6C9X>;=0h3PNwmALoMgVJA*F=t=?Vs|j<6NQ)OXgE zuqRd6<{G;nH%h6pU^-S#Kb0-Otwu&QKEXJJvUlK)>NXWgt@sgD)MKiq>PlKIxn+{N z0@;vKZZd8fABq0b$@FR&MvRqo^e5;RAO-nly; zK|goxe}w#5*mZFqWC+ysLqh*N3Lj_0c`#RJH=T-E!(4rlok8|U20#tH{9+#2vD~tr zslh+G8hi}3SJOci)o&huru0)P(|o?azN<17z8FQjzbZ&QtTT*LJdbL=Bi&O`@AEq- z#-Gnc%`ui`H3 z7Qd7W0Z_%%z#09^JA!G&4dLI!MOx8KGCY2)8j2fiQ&_++l^ihfnF~oq@KS=2zA8ysly0h~h*R3D##yw@npRuUZVS^mYR0o$vuV%eR>e!l zO~}D5!&6T*Zc>e^+<-|NH10Eb<(QAxZcVHKQ8f->IB^Jny5|l%r5f4vMR+)MaioKH z0QPZZ@hrmTj%)Nl5Jg$+2UawdrA)(n>Y2Ig}C*xyt}fQT$p4W(yiw zno}W53tCTqdAPlZLhO9sP$>^Q3yr(8XDvMOEb3%#tsn_jjiG6@gC9oVmK5O?a!NZT z{pfjF-E?fevSh`A+_4;4eIbfvm~SF;2m9X!PZaU>jrBeOkz_-dHJnu$O#$SPkBIDq zOw9cn1A(M@m3vH`!R|L*W;}+TXNUl#-K_OKzM-doezvY=yY@@Orsn83Y}EU9^>tN? zCQL?XeROIkjPUezj^F?1Fk1$KSI2@H7rRekv5FNLQABL}gCS{z+emWp(J+0ue)4XD6xM?9_GP z$Adetrx?d#MfyD2zKDl4Nq9d;RFifYUBn&LDK62~pgmGj7V+1UAk=;-_b6v9pOlkp ztw}YZ=oYF&)s~aY#zSzKxtv-i(R@;YhL@VQ*n_SEL096BfcMhlC7^F{_R@M7Fw2E2`RZ(DTe5ON=`^H6(=6$!l9 z6^li^hVO7>?^!JYb~H)=`KjPK)bgjLYpDi3T`GK@f_7?udRhZ&GsJ0_LVRt<$YDTr znb4;VgV5wrkoqi+P*Vhw8k?%XxJ#pe=_ZC4iVD5Vs6aOU6Wv^JceSPlsP$QY?H4t4 zWojy=oJ)Uc$xcT@o$95~`4?fjlO-6u(I=J-QJ{G*4wOkfrk;ajGopQ)-nW`4tq zs*&+-BMhc-hanCVxaHtVXP$GsH_vbn=rY+^gV4$WsGdI*KWqzMr%jU{%^j+aPT@au z;-^1Uh+l5(&wiJo@*{8Rcn`mS-Sfv)muwNt6i5`lKkg)ICJwYHCiR=OSPoDLWB2^; z)8sM^BR%UY2$b4_U`n-wOP0RtW_wP~Ryo{Z>c+6fggHMUuJmmPoy_^EX$xQWOD@cO zf7;QQp4rQCSd~n-h#dmbQRP?a8zIa>VYRlQ@rQVusKVnH`+Ms6b-=fO)~EL^P&K_| zP|7l>%dx~&UMQP12Oh}k+SNnX+tiEv-_*|&UFCCs7ThYi=W4lC`0jua+WqVRf~8_K z#!0MdzJN%S3z%v^XC}376>S*pT0O-aY{85)!NDwgP7OB>1_ECjMLJFQtEOef?A0hl z6R^h@^JY;w=FV_RIa<|!N-^cZBytL69HVBZp!iFBYsV;angdGmk4iJQ4YSs;~v$e%9xOrIvsXuijv zOc5X71DwvJ6R;N$tlTYkj$tmbF2@Dt(Cm8}awxC{$bQjCH#jw#uWU>XrDi?LG{a(r1GhpN1Zet<_(WwCJ(*i7s2~|YzrH* za)`8`A7bSDw5_?VJLFus0-nIJU2lc^HqPlolO6Lzp1N=?;=xs)?e?}=3f5f zaA~kv{A7N~l1c;65{7N!<)L8d)5iQ(0;_=u{Z&AxyQ9*7)qU+4{!Ov$(ie)StQ`Ez z`*hw#@%cp#TRrfj;|OpTee7+@n4p!7nDXn@CM)QQfz6hUs5k1Uufs4GzL%XJMxm7q z02F1}#@Ouj2qT9B{dW4%Ft{2V@lBdcmwE0*gAsVfivkEy+J&7tn6{bc(Bp#QdcVLe z2hhOvl8|M6eIUSxr>e3n8ylm{h*L3bv=*C825`rJ*k*cB%DD^$%=t#AHZ{D!%!pCJ za{0rNKm;K%p0wMmB(2NV&!YTb$cwRViYGRAd`|K={Wuzw2wj^DxCaTUulmcRYW=GL|mA?}ux^lxWHy(r{xlwDvC(kzJh zg?lxBu6fcj^oCYXs23xO{Lm5YY&BaR-rXKykB0?87XHU57$$>l0{ff0yKtofk^f6R z-i`aQy3X=s z58GrQ-4m;AxJCr%F>CZRt}TObHSOvnd|}Riw5Z})#AO%po3^7Ph$^BGt2NCC(*+`M zBdW>0Hc#%g|Hme%_4_a_P_w(=23Rc3+QXJ+?S4x$!=0?%(VfJDOTG;WBlem4$i)?u z8b)fpo=1Ycl1%S3$*^g1zNx70?qKc>tDs|4zMJ*cDo1ZS)9*yxQOS+o#9y`_BRd zhR&-X#`(WKPZke=#)u3zyS23+L$LXv+nsIi67jpm-`V0{|MmUm(b4JV{?_UC(VNZp z+w&OE?{8&5SZOOzYqvI!cS$dtZ5xR7-7vn5VZ6ANVL**hzlnYNUEIgv@$1=t<^f2{ zbCl%etx9qzFV;-NpVJ^4Bw>)=x-?r6a7@P0944<(=PB9mZdEePg37bLV0ozFZT8~J zLYpfW$6yxQ@G(d*vkkjhw(+1%riOy@z_ZXAma#P~TdkoY$MTFo?y}x}Q6_pb~B&5~&SKkOZUYf~dd@H78n zjAdP-ON2Y$C6)+5QIM0wSD|I?k%ikbWHGx@(Zb(uKjzgtv&jZ>;wzR%GSjc=?&;~B zoyQB2Xu;#rGJ)P$qd=>qv5Td8bB$8@LtqQmZ>^DaWXxK|{_Qogw*$*ErthqgsY^vW z(E~~!q|pr6H1szfv%KMdz0uVn_t-Ftor>_~HSTTvNFxO!&qi#Z2~vhAPsnrL6nQ}` z6*!)k`T1#9W>r^ROfFTx-)zrK3BC`2UzXYIV3J;T-+eOylnBwMxcqz;yzcJx&s2D~frAr{+6<(UR@0u(9;#XS-*= zp6WPfh^WB4Zf|($7hC#ZQRG-l`CboW z-S!h*(;0rb2{uZ9r&Yd*qbxW+t`8|Y1^~q1Zz7y*G_-70$r=Ug9FQEUBm69hC38BaW+Y67gw||MEPcu5oiz3!4@`*v6%4<7D76&?i3SiN8%re{)dRS#wq8*VI zG|@JK1b63ds*`7BG0CdTt_0;-3{92FAVTMNwvl(~Fe$ zXm!;nn~(yZ&a#XASGsFAv4zL!ueFoAX}Mdc7mS{gE=-x2Wq%R+d$>UiSA|FFq8LDT zoc)Rc81&SCpMjQ(t1j-qXe182mx|cPhaa~a>nS5>X3f~m^^EQ`Z1_o~d$TvT;sEgN zE~=pRs3@*^afPeX?P+X^0h9nF(IXPzm*@E;lPq}YzCdVTaYj78*ZoK=lsuE*wl^(@ zJbOgdq{~O&t4+17-WRHKiNz{(c2?pFE8CfcG!1KizxD_dwO;s~wM<@GN4gwL3d)mM z4RXr65Cnu%qVz5nzW#8?UiN;o%R7@8hvdJkMn|lfoqX0?(y5 zN6(w*tSiXvUbAhBc0=1>YG`9`TDdzd?IlL67N9G1s1;pr6=>}W&93U)WO1irlWFJ{ zae(@NRSUR=j@2wK%hAxcmU%mWS=zm*$`EYqUyfcgPb=^$eeCgC`k2dfB4eJI1b-Cm ziL7(0g&3w3r+F@8C711ad172#*D9gS#!Mub@eeC{y=BDsUCX1Mzw0F=WRps2QZ_dD z?AR`0q>UANKZoin{Vlvqj#U)SUr8_Wh*64vxEMlk(<%{VZY$DKQl6-qQYbwU3Eq4= z{*twP`|S`N-R2X{1J=D5_S3>{-x8&K(5)?UC!4F+M274`=)=-qRhy7DhZVh$$4!*S zZ};K>Txx1{%ZTjaAjA}FgY3CFQo_V8`N7#n9eQ0M4!T=r5zu1i$bg~prV$6_IrJ5O zlg@8>y@6|*`UBUpMa{3Hw5+~PZ)l^IDH}{LVeP$SM(GUP1UJK# z%eoUI_#J8~%>BBQBqrKxh;dn@Lm4(4-x`=Ya82l#AFin%)G3L&W<(C^`Zv!d*Q9JF z9HKS|ZfARa_HLgKc$*+DcL4E(i1a#t@0S_J1!Y!aZ5%@^IqJU5B?>OzO@sw{0mc55 zNd{~}NV7(jnh;h`(#pJlfS)GI2;gYH>@dS?ZL_g>xh^bej#PhHBG0kdoX9Yz6B&F2 zlUYZQ&gS3ur>m+@y|VRqEOnRw+ui~u^u^bb4ljWs#3^cL+jb+d35gw;TY6T1V3fr9 zEw$pu1k%+pe_tI1KPdg3_}zmien4|~<$6!feAp^xAWg*kGL->_8|7R zySR`4;bShauicZ--FFVF zv+(olI*I)T#MVLUmhRxkQ~fT~SqHS=`Tl-HB|!=!_o6B2ZQqfQ6bgsGJIS<;wuPb~ z1?Xx#yTwZd$77l5Br@m2q^9XU*dY|y#VXGCO4`{^{-b_~6 z*vg<7Uv;o;wv^J-j)IJ_P^sb~eos4}W&KB-m|Ea)p^76U=efB&GzzEWSW7dHcG}bw z^efO3lxls6s&QUkPtqHIR3Ag&Hvs{wv*2YZ66IT#@EZcwZ%~3R>KXJ_Nf9`yHwI!= z+v8oXSkd^Jx$BzIt50b2_idI-I8qIiaen8MhC+?L(v;P4xKBt8Ut?qsX z^Wm*$Bw3f07V8a;XX&n{tmDCOxcl+oz0b2>VwfFGx}$pUjSBaF8efI)@s~h+boAvQ zw)W3oL%3$yM}-2S%F5KL5ep>zXfn^%FCtRCw~Wx`#BoD%w7A3IgE5@^6ev%-7E*Th zo?J99r;iZErTLLK;iK@vTAChoIKkOb0Y-R)6qk!rq-5D|>eeG8lvW45VUBH%l&XuP zh5hT!m9i&i%i2wUkEDBH?V#VKPq5-gRyQXM?G6iD-vMDQt?MY%47=({VT|=)hlQ40-H^J|jY5&+#?aREZFy$Ri$EVpvf`1W*zKrsCEcBHo z$h@b?7+vr$P{L9q=sxR%RnZ=c z6=HPJ9*;Gml>vC}bZP;vy}(BNSfzhlW_kWR8_y@1sq3=;40Z7g_sQKRbeh}@`yDdx z_E51~3H-m{QH2>7Pa!4q{g8h1v^18%V+05SF1~c#yGO6lA?1r42G!H@yt~XRLMAjP z@5&CxzZwC58O+ia|Ef-;rjOA`ZuS|h`vxiDyh(DFw z%{>WqiFf7~Skjc#`QrqPB(bu$6wgc zlg||Pp&=b;sx|Gd)Iq_ZQ@K@0EG+8=lw;=_mh#a^X{oZS>*}VjXkf(YhO|=rj$g3f zV9w!M+^9YYORhhn&|ru(;c+N14GSYVyWTB^aE{IR9yZ)7RG*)Q9_a$gW*0 zwS5UyqT&&3hjq9QDAJ|cGGyDaZ?wZOg9M|0nP2U2^`X)vXJmOJ{b`z1l2M&i+iDA; zKz#3!%$lh3WL}Ad4$?u-9#I1xeXobFh2xa**@ZGFmOe~;>|#Qhan;w;`m!4*-l~j3HLpO zFhM5DycwpQ*CQG3e#B)dJi0q0FjF@LVHt;ELO#&>TgOXXIOfB;C19s1aySqQ9WO3A zI6ms@bVA2b49RoZ>tX5en!B6^h$jvfA3wDxx$ES%9n-Uy}Rmsl9pv3 zAr<|z-BTa_{xVkGavhcK)IU&)lrsrz?;I`X*V#-Lp)J$N1k1T3E7dr=fSHPaG2LXG zgEya?3I(Ctcok5lBlbB zsRbqv_$Vzi@`66RaOwF>oE9bAA)BnHuCnTRG48XR!z@!N+918U#s}qpDn|cSaWTzAgCFY#kHF$?zbd}dxe*O-R=`Nw!u1@Y$TGmMLKj@mipv>T%d|L+xKwcg z#pl@!326uH8^>_hyOx>cfwnh3o{jN7?<_rk&h|IGZdze2x(2CX=lyOy{$V+WRbp@JYSoiM|)Q zxG=If#r&M+6O8{_=_I|37$!dT4{qNhiMUnIU|xDU)uA9o5p6i3W?h0_ro2!v1J#y& z=nv{Zp|e2`JSP>Vpv_`3znZEy-Y}c&b)29m(GO%885!&$M*y3DpBw3&9LS%9yJoLd zKl4rYsD_yoOO5U;)xb!_eeXOYruPzRss<}crFJE67%$SvFX>IGp6Tu|u6fvF=V6oV z=WN36)yB8LqXeQHg_JVjWflMe2|IRG1vp@lLyw$Ke)RnlYEbISY?{qd-DM|5ReHk? zw?%YQ(#ZjN;K+D?IA4aIj>oyL@@eHdAxown6W$XA5$GD|=TLS-9U<%okMGqHNLNlR z%)B3Rd9rpcPa^&4@wz)y%jS)q{1uF!2#c{iLcPqG~}v6Z)GTLQ zNY~nWs-lU1wJmyH@Dm@Z#M%!T~(BF`pcuE(bsLYd;1;zHWa!7?9$gg?BNzY*M# z-kpvCJW5~jHGbKYVl4NcMbuGzzJ5W||i?BvC`u+cP!^}}VAUqUxg zIk(*0&WbKM%P^%U=xp5Y_tkzeeN-uQzaLe9S@himmy;S~7L9Da{*~){sMbAt%%L#< z3l&?Za#P}2m5TMKWma85S%qaH-{E+h|7XpD&FNT`0yherL!&*}#gIu^F z5RQL_qXFKggOyhi#z*Cv{S+iACsHF{Snn2UxQlk{UMrYVJm*jZVh`f5RC!=g&Rj;oxOO7)RWx!I84D?-4c2 zUWSI_FzXh>Iknnxm{c3J5VWmH?@sMpC-nYt#vRAOzh=@IF$mf~$n77+QBVpFL-h1s zx>(d#ZN_uGYh<*dKvMnCBpD)kEYLh6A#|}q0nEMOVzcy;4ACC ze^Kc*Z4a|bkG7M%tZ?Q7{l{_grLA{uoC%^mmM>Gjt>|CTIwKobnPrX3JMiv!Oc-58 zOeDS?)89ML09c~S`czP!z3lyXZJSqMECBhQ{{k5OT@LB3-xR->V-9%Fw|f+9P6Nc_ zc18l?#u~afe%8W|h~LYDuLhrw>MEuxfAkU0OMW28{lnqY-O=7BgHtPt|M0@%JBh60 zl*V&f3=NBn&kR^)UEkEcF15vxBNZI(YbWtuG1?B2S&jR7`GWPx9708MV1S=2KA$`qYr(zs3yG2~e~bG* z>$h1`G-%V@459B8Z2gL?51T+mZ5+dJJI zeo`+Sd^(^je(L3?gM%*zM~9z(T(8(4>;{yd9v+>X*m6a0%w_;SmTK=;!l~ z4?iEUh+jT!s{Q24(f-NTp9gw5+WmHL`U8B0f4}_vaMS>BG}!%WumAuWdwdK(saE>P z$q3p?;x*RBRCv7m4Hn%(DR#PIs)wfEVN=#lU0r97zu)=&tW(aP!D4~)f2{NU&YKBr zsm`zP>lS>?r+Jm9RWa)jU_Slgs;lm7hzvC}+>PH5% za5}P4TuO9hmGh~1@W&L{f3`q5%3{j-NQPP=HLF%;)Fjz{l*8OGl^eKU=uQuS`kKB_ zDNp0+IRp2amXNt+Egnv627}FFEd0ic4)9A^!8>iB?BaC4hJQkDhF<1B>d>eJNf-su ziv+4~q-0Y*&#ZM4bNEWrsXij>)hj@yQdxaGAU$y$B_(xTdlM&jf8tA!F!jXJ6sgzm zcOh`=-!bKT;Kl~JpYM5n(YF!=VJCEasnBynCkEB{%G~kgqFUpT_?Jtplsi^nECyGz z!=>&1^v7*34P6m_rR6`z6&sxeo6+DbE!^Qw2FKy|P6lsjDK$FTKfz-YaJ@>E)gNTs zkq9dOantx$5Lj7-f4uU^UpUe4>q&j9+Vk`p$(A^s&se2<-Mm8D7km6-dUZP*B~YcF z<8lU*iPae!As>IAFfnVp{DPRPqK9n>=mZd!V1D6o-w8>1`Y`IRf5Q!ZlL(rwgMd%g%ffw0 z{9!N=GV7>r6Per>Bf0bNkE}((V!orx%JCI=3z=$f9<}yngBB>FfpQYXxn!(+^J~*ygzboEPzw88u3m!TMd5>g844Vmi4| zC9E}_(lQcVoR_MY_Pi9}7?+W7omJ7igwSml{P-*6fBacfMgnkpTYVwdgG!!QpFlTN z-bVPQadaqzRugP*D^bEIKD#pTR1yErz# zu*;iSe_bq_lc?{+zVgLJ*zpZK#W0xaLOU74EL+CKGsQLPr>PxN*9@5h$6r7_D+=)U zsq$9s42hP%P}W&8vREMoe?pI;+@Cb%uHF?u6$?;7f)H0<4biLjRVQ`VYXL_Axe&?y zs88|xYYvy^l`rdcI7bK`6^ClN4B$(`1v^|}f5(JDS9QdaPrAj-U<+A^3TDT4VVGIK z)k17%XI^YY*1(zEMxw!Ek3sEPB6gti7jfBIQ_T&^Sf_jVRtg$vpo$nUo?Phm;PQw)GLm{#4QCs<3G+$ zp&7I?*$xbj-#Vb(Wfmgd{*qb@__Zfu8Ubf?VP}g6-rd>d{ED6^ch$=k4bJq4bE9Z= zUeKF=IOsZ@MD63~dkBwk=A0rV>J=Z%e~K$AQ!e%E`rUp<$9Lq~75*+?3V#m(q3#19 z^Bm-*kAaM8CoVQVT{YAcGtM(`Yb8IhK2B6;I>8v>ILT%+8~5Atki|_5o&WXJp4E?!dZ7$%2E!kR?O~gG1F~~P_Fa31|Q|q%-L=We=D0B zd(M9+fFTGeNn{}+;jjimInZQHLQq}EHRcRU_}Ph(`Z~DID{qav@PF_1SGLRdUU|G# zzOwb^xc^GoeWmPmRN^-?vE0Fx4myih&L!3@lKQ$XNP&^iFq`G+B>ye*0)Xn_f1bn8 zpEe=uSZBs*73_+@0t?QY30^=TfAiy*3r>FeN2XjHNbVFB8auk{Ya;jiz@2cY>^jwD zfw&ffLn9$G`nAwdX5Yu(!C;U7NfvwjLM^t;UQhlG_ImP9ve%Qp-d- zpP{Xsp>1s7{|mA+tZvH9+|2#*#7s|)|JPG8*0oH?xICJUaaH?dY{O%;e|jdiC<_}c z&BE@Hdu=RDy(r@7Az~X(e4Ww=F};DQ)tTAc_t%ULqkq!i5KF&C_Z=LTCt$w09zU?T z{_)AzJ?+)LV?B9bOa0^1u60@p-d~BM9C%v{9jf3?Q_#mNJgnUYf!Q|hV4RH=EdzaBfpr&`%FyI!_%w+xu*vz1E!u%TPt<$srt*;=)TDYYP*l)Na97jecG#kC`}{0OIL11ZuGsq1V^)MgpdbLR)d z&d6xd`XLg5_IFRS%^v;WCK}NGGW6mau<=g>PaH2{(HEaFu^BdA9!ubAykiN>8(Yie zaG&JiU1L%*Ml;=pe>x3s9cs^G0bqOBxoA-UdTw7G;(FVk(+NIQUf_}uez8>ioR4v3Md}n_hEv8Q_kpkmPG!i? zvI`hagN=Ho6FYeiY>C~%V}N+iDn*5C%xghXmRSQ9=Mdn_e|`kjZF)`5ArIi@x}N5B zzdRy~jllg-(+i;0i8q*O8g-?<&z3ID}Z z0GG(#_G60=s5cHX@T+lYeS$}e^s1OoSq!RYS*>AzN%_3B4E!haz2B@O;mDCtAgKZa zAP5^SD%WXtf1Ra9utPk*4cx9KV6KbdixH8WfGVXY603+5ao%)rdj1>VU!G!T^Ejt! z=GUtW26&cLzhuCBi`u&l#<6guop_5HY*JjeHAzEzT_Bemxx+wV?O`kESc!VPNJ6(x z7I=Ch94m=8K8a~M@tRLb@5)Db_zV61Ce5JLghsM{e?1iM)TIm|y@Wa_v(U}$0JP>x zi!Wlqj^A_#!y0fK3;9Vhu9*5V#5mAS9N8?@X@S3GpYm9mm_6#U#6Wgph(?a3xOFLf z2dH!Rt9E=qkA^f0nlE-py>)kjG9^v>oLvG|ilEUVnOGryuqdJ@MjhYHL@cuJAE4T} zC)xEhe{wao%g&6#!W(}W@&|Y24;4i2{0Vyol=Zi^)nZMPO<$~zi|Z9s9PPWTd8sm| zY1RerTXu>I;CqYIk166JJ*lU>C`lRmC6!w>wNiz%qEyJzpePn#4`#Ds=JuRl*al~_ z*;RSTz;Yc%hj3Kx31jizqxD)2S7P$q3(Yh=e@oAQbh3;G~WiD#hnY!dARO#qkE8dpwh&>=*FSXMCj~hFkO5c|ofcIf ze*)1BN)aK5obT_{N3YjHL@9=Ganql9%rkW=49>2qS;HQbxE9HkDg^^$^T__{BI2*B z$EufjwC+raNjXZQd0Q~z@UNBpvcs(2>jVQ^B9(m0oL&5p)tj5Tm`AiJOluH9`X!&J z#UptiiMlSn;-I2b(}?0`_nG+0<5e?Ze^Tq7pCs6_8AWgaj( zQ(<)KifUr#g!<>H642hs{$Tk3@gn~pFY++Qi`d@4PTkxa_IF3Sevin<{x7>*f7dVM zt+aj#_gJq4x6;Fwa@>U*FU1ZO*3kVa4aIc~*yO8e#Y^Mx%t016ao__&!jd?g;~Z$e zY*4=oJ+TRRy?ff$Dm5~c-_jXYfCZS!Gy<(LvE z2c&j-Njw_9fu2C-6IG2sxD}g%oHa`e?()vCy0%Yy2_^m#Y%^L8TVugGT8bu2?T+%D zs*~w{mX7`OBAe+wTbI~}TbP;OU>LW$x}E^(7AFl-cW!K#mwlTE7g)n6(mmdq|Q&q7fGf+^|pfB z^FAQBxh^2CWv-*62KnR<^13=}4o@B-;@2#@>ct(h&0&_{f@ZM&##m%J&aMFyzME5& zQDBA8dSvXkamyF&cJ}@3e_9<-_uduU?PFACe%@{NEkm^aqQjQoMg|mpPJ#@u9@W?> z1H^zqmYl>X!T7isM?3CFE4xw~FY(77m+Abq0qpPMNf5ZO{oOzt$;!S}r?6HB)8p#E zKNQCeqOx2Ln6=8Yx|lq^wt#Ev-i-wA;`sisO~=IDYuu(B{pF8Oe^0)A$^uZqU+Vbl zarY&@&8oV~pxk;4Mv(iB{*=HuQPEA9`~AjLdXi^-C3L2JR zo`L_$5&mEDo@|*{9HrA2H@>fRbVo_oIM)V?iT;lmt$btEZv2qJ0<8Lfn0NuMFiL;S z;0TGkbl|@}QfOh<_9&p2BmN&PTDr)pUHKschOzDcF=OoxF_>QBp%%~Q)qe5I^e#R6 zuMZtk<~61pf3-!m|HqQmTxZqJ{*WQ1X6ki%4=>pM-+9_N4{l2O^7;-|{X6&$8+skC zgIg|EaF~CaGYp>>)e6&}YnuE-rLWg`T!Z>-XUG3y#|K;Ar6)dQe_xlQd~*0-?&P23 z575UyIeY-i{TI9SC;46a+e7y1HMvG@r`<}9@^5p3f2Wi5CYueWRR%VCi0)o9##${* zTP6RuFk1L1OMlKD)WT$p78Z_d{gd}33ps-=ZSG1{2EMHwm4oYl{f%Pv-;RPjGsr)xrwrG3j5T0M^#P*nb_Y%Kh9U2O;FvdvhgFkJBt6ht| z8k)Cni&^{Utu$$sbvG@lke7AO`>M*QB2Y$SbHfI;>tgle-3Qb2^tzl+QlyV52sB#J zf97>{oK5GdyeX^f3LP_r)>Q}rCry0GZOG)&Dum&kS-_C;tY9u|Jnt7Pqvxey1szgB zOrECIb3TN|7U^REIzG@0^x{C>aTYGyAZh4a14|^SBlA)6An@*NmQF7-Jjz+09$VTY z+4r93lX0uF699#P`?4X*mAlrMueL5|f0rx(IGtZ1I9u8`2%ZxHul1vLadpx>#NuTx z)-a7$^6K^3HpSHybRQ&PoS2(iuQlf|`KEGKvUEdZapUoK662P{m@G4?v1)@GZR8go zTlEJO+td6590zJmZcfi{wU323!@RT}zy$6Ne_jsC z5ZWGe;Am+B%)l^=o48j)Y6si7qcHvN?1#QKk`ucP#~qXb>PV~AYIn6-Nh=BO?xM5?7|QT;ojm=vtR2}a#!w0Nzdiz|^-P}tm&5ljoVn7uL|$tL^I)Q#%*)4) zCIdujUhm-+=IDdOBSV7KoP83~F5@L~IE9*|KVc`FdBhwXMHYsQ8gsb@K8S#L5$fJv zhomwK`pM98-NtM9>P4+yf0pZ;Om(tNg9DOYZ*P>kmBGR0+|k~=!RtKWMQ?7ryeixi z_MTTZ%;#zM(SZQNYZpYWyWDEC-^Fk--_7PZvIQ?OUzD%4c-(~#qMQB{Z;H2e)eU^* zdI)z%g){S=5Ut$*+Rjj(bte}8PYs!(X$e!1W*`|l{CQP3oC2`We?xjnoa=DX8}aY& zz#of?dF)6sAA+C3Xveo^9)VGUeGXp1Veze1rX*U8xJQ>%zuP$5zvk94IYt)LEokX2 zWl`FROqv{M)2dae9p8hjp9E4vqvhWlZMz4jBrkoz`10KP5V&fe!#ir%y!M{gzWEgv zJ}}w0GU!Z)7GUk)f4@DD{PM53!nC6U7MxrlVtDU9D}vFr44huQ!o29f156A!_nKKp zAT)0Es8p+&l4FY3hOJ?-OouOn=c!1EGT&!gO&|4Q$+D z4dL1y*D9UmrJ6D)U#bV&!*ku}vJzNy8E0%4HF?&P*TL>6fBEjeW!L=fRaV#X=9TD@ z!niOGH(9c6MbeFC0fr(8tWF5h&9&~g5OTW(rHy|0?dJX4aKm4BxB9gjA$oXLclDop zsP%u<(^jgRudToP*M0YORi(PQ<)$UQR$#F}uLW56ck|GV2@D%L;_K~kcW>~u>CpEs z-#_5;9gn|0f5O)Y0&h=dw>o+fEb8M)kaqWOTBh?H_1UdZib;~h6T2dO-(c9axJGq8 z%ZOl`Nv*d4ug1!yY?bTTGMAhT*_d@pm`b&|PfD$Eo|IbSJt@_78B=$OPIuvV^`M+7 z`>PWhg-PkJbXcbAFwnY1E!)IFe}oNd7qTQ>|HcB8QrlXAGJR;& z&8FO{d%ljVQ7?}#9rzJlnc6s{u2t|m52HN?($?h@3D$81#ejEML@}V-Tu0fBqkbu4 zZ;vr|<6!#=ueq#eu_Z1J)!8BFH&a^gI=s&A!>i;AbQ|=0NUo22puaa;&n?Zpk*vOx zYNh(lf2vWyeSC~A4o2E)FP$OlXEV3b^E;2J|KiXY893iFkx4qh6(-$Hn(K!h>B>?b zIN3g_rCroz#^2Y89lJ zqI;>FD(SF8{TLAvQuU5HTP_x5)hHNJJjn6Me^EU$AcqBDn`RtS#Q8Npx<4gATAj&h zD3T~Jde~y&=fK!hY7qVW;ykM?)YG&`pE2D#bptNJ4tRqS^T?9_&O1j>PmWI~W7u0% z$KM<(I1l{Y*9Ynwh{!)xXX9_ilcOIGv2<-jcl=$}t?h^Ny|e!RWz|fh`n`L6_x>{i*k&|8QZ@X_Y}}TObz&O8uO< zOrh7+vOwR%bdN-(T&EGXDK;>t$%arCqr^l}tb<*U>sIO2|bJDp{)Eit+{Umz+1DVb~68#g1;qPPDs@eGo zSyt2yj7x;SPJ6>LWN0_e9Ms}$$&%Y6FV{2E~)ah^R- z3&VQTS9}`?ipM5(ger0~7(Q0`f1%QqGW0+fcP7)740Bjd(olHODn7qPo!L@Fg;2i- zqld;cHEI1@XRCCEfv@SDCs?8=_15%xn$OX{W;MRd<_mRQE`jSf;lSw(m8nNc1ga7O zqX?p?FI*o;cUtA78;L##J5BjG7}~UFU>pmqFw3cfrE)kNf1NDr%L(AQ z0oAlwXIaB(ObZqVZOWe&wpvJX3e4id64Y!v%-I>zRG$+B!d7Fe>=(p}GPK zgX=A`{CQqemnkn;XphyHe|VD3_%|OMD^AO0!&rS^XLolOl?+BeS;|P;LdLU|9c;M; zY(A7GaX^Nzn7S0?GvC|_s*f5pS;dYH1e;k_BXWBdO7`8oj zg@rXiRUJ1C#G;eF-#k_W(6piAG?iM9slDLSbis#UR|?x@kJJtUgY#uRpFu|A9!gDA zHfl!G;o3Uj;M^*D!j0)I1wSvZ&Y>n->L5e!i0lWS|1`eJqRcTirm#v?%+{kkT^29W z>vqHjS4D6wxDKz*f79wWpTMW(b5F6!(x~sV=|gpb1cE}Pxw(dDmR;lp55lD3)ZsG1 zXx6yaRy!#tuAh zO<;>QJ{j--5^AJ+R~afNx_^)*s2#`Nr*osJ0tCd5vYP3af4eY=4utS@!RwT2kQLe0 zwH7<$83KD*JKG!jB(Jh@gMtwZ#AIgF_lNrrwPr1g20fUoE1-}4mRf=M@)};oZ$nT1 ziRI%H>#oFE*@ETEaz68^!{4H%Y`b8t45-)OI4Nr)+|a{_7L@9`5v;zGJ>+y}buaP? z>=U+~Q`Xare|H`mk$(wquJ0e8Ob($+OeY33emBLr5c(4Nv|KbO?6R0&ufaTSek_ZO z@oS`xA`%>wL6F@akKr1))A7O4cV}&u>9{)2oBh0+&K*WdyCp}ce&YmShnqvGW;x3? z*FSF1P)I5yIw7xkHO8fPna;q_L{Q|wSF8G-W*5tBf9~5ho8pGcB1`e~lmdtKH<-Vx zZ%Re0OBo8X1u+eA}_#5#)`X}(B_J(*V)2W(|^G_&1D1~?Sa47tlz&R7S=%K@usjs_p?Fcfn z_#DdBe_2tNRXyC~54E{8nlf@8ei-kcIllq=N|jzTJiAPB!314ZMNl-dUQ~Goi%i#w z-+UerAkQ3$jw|j5c>%yzdgMKa%4lQ(g!OQ<9(&}$O_{J(B^@tH16J5^+>Uo{0?j_2 z$80NAdzH}pPR{Htfn)nI&ftGt)_?%}MI8aoe~6+Gb6SIMgG{Rx4?xzD;v=@VpiVKHHtT4 zqhEAK@+V~JH*`lm9z?ohv}*~Y^=PP0Xfc7iW@xzNly;g`O_~chUS;F{fsBFtd09CV ze{`N*rqA=%4 z9GKBhr7RHRHMvX@muA?9hGEB~1Ks!~*d+=gx2CYq#lxqw6xt8sLb&)g*DFiBT@z^i zhqy9!x&$aF$krZre%m<6G@KqE@`Y1Rsw}%%2X?&33Y@0itbrjN+z55}Je_3>QIraaA39y!)PouoBJx*cQ};45eAAPtpkfxd@<5I5bVAi;PxQjU}D$GnQfU8nZ=J~VBM!RBu zL?e?Vt5)B2V z9KI+_+*ip-?l9p8^xH*=$YlP$ASQ zFA!YDt8%z1^Ibc62o%0%Ob}sEs+5CdtK8ugaajhP48x+t$EW(1q=AQS*eOQQU0Elu z-j#?redNi`<+lf`sngXsnGt93W|-Scm61$#M?4mYG3w7@sp%4tWUlLFqkzQ}NMdn` zy)Xib5E>)*a@>-UY;yM*|5z^u;H#){Bq@c)+*g3GFp2Bp`(H0$2Dk zgO+Kva{!JSe}@IJ)MkvsNDl;5sw&OtvO1H=H{|*vHy7|>J)CQA{pWBpjCJ9g@g)*- zSg1>9Tam18?aPoXPPC4SS@uUloRb$ni-Cd|I~a;lCKM?B9rq15JjyBI>e?B^h89fcVMX7b@jiypDs0&&| zmz0HMpOkrhST5qv&?med@69;8FHr5NFYP{jf@}M*Kv`&KqL`6pCF<-lU#yb}uzrhn za=l#qI?3BNo#iK~QzKZPJ%M+P4>9I{$24pwX#;mr3sk^yrM(ER{Svsxu6FpdFON)bZ`6va<|h#|1=&4pRJzBn}|vywZg%MC;3c#7=s+-+DUhr+fReE$wJ%%or5w3h z!_hUGY4i*SeTrixbaVIo8dTLxBUVqABnT(wevX)t>a@}zNU$QLR2E;Hd=7Bp+OnCj ze{O_pm�{g=0#;%ksuE} z5UFG?y|0=XEqSe!%hbM3r4Wd;iU22GskX(QS4W*7!_%k@Y9y6Nlr@=-Be&8M6RBJ0 zf3^*uN4z7oDxf+5m#+k1oV)c+xe%hr!fA2o{ zS$F`^CBtyguOp**{buh~gY5~`Vrm;JUrCX!j)8SJ{&nIk@)gKK8f=Uw$K1M&)J`15 zbr@TI*L?;|{ROIX*)Nl?l7t?t*c&F&u6lp zLq4i8glhPnhcJ$mj{?0gP2!fwZ6UsWK;twc4Ga|SCMzDFpE3#&b%8Lahi8-V>E!U> ztu89f>45@=)erouh)j0vX{kMx!;mtxK`Mp`x~NrZ87;5vqREDT{DryVe;UeH`N03U z4;zB|Oi4@`w2+Pr&K!wtx{SqXf$Wi2XfDddp?dJvx|(PtqWxS_L%yzLIdAgC+%-XJ zBvj?HDArJ7BVEfhk#H<2)6Zn5jA9gj#Cx@82o}U1^xh}{Q+U*d3XW*F$F=-}4Sm$n z&^vG}k?cr*PZ+ z04mv0Ln=Q6a{1lfJ6Em{mmBU4zl|aWXMhHtW3h7JL1!u15=WeII)*D+0jVr=;S(|$ zVzBX*fe3bEjvkzAJ6uRlg3OjxemdHgS}

5*iZl&E;tD)Y8uVx0!6es7saAODR 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

!JEWg~ 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

b?vL z^M!};2GdTPQ@a=rAa!S^X*iP1JdL0PD+RS^&>e$EJ6|IU=+!Eo2%wCn7_5Z)l(2$% zn!xvjhXv9sIDgBZ2-Q;JErev)l#_&ARmkrvvzeNCzLdall@oNUxFNWzkl^vtd>G$1uPUi!ltS~b6GslUSvQpWiOny(>mOH0Jb6-mGuy7K=ln+y5ZM{Fol!{mG`*VGgFM2 zPyko&jDM0p>yB{V*Nn;i5Esl|6rBJ$FJOsJc#;(435z(!^Q^+eDy_Y&TDR)Kguyir z{)krUOYC!r{iYIt2b4f`+~W8sO^WGQ8Be6NJZ>s6r>`p_FabZ*udZc$MU^0yd5c#n zRT_v}ICW-HpK)qcm9TR{SOf_x)8dG3E&WO}p?}D(gn^QYa#6^gBu`U~WJt3SEEr>W z+$q&&sMeSxA^}|KRnM{j;=BcE%ya#BqaOVCHi4?@MFIedzG;9e zUxqRtyLV}%?uOwi%L^qvm&=RMLB8=HH>(j>R*X^gT3AfkOJ_RY%q>gDNiMPtqmr{+ z6MuQF$yPqf2Gv_?j&oFoiJ<~+K;L)z??-r>60gUwYCr;)h5n=KBI-WM@PhDlIu5Mi z<7cz&fo6NnO;?VaS9Vl)K^~*IwZYvZZZ=eS=U;EHsN1g7?zv01$L`A3psdNo)Sz*H z0S3OFkfXlVPKbIIN+AGmSu$K z=wmof;~!&BswIh7me3L5qlejO;E-BUms!Onmsth>Q!wSTP7iXw5LStO75%YQzJJar zvP0_{UnT`^(%V<~0#sJGfVWzOAT`@pLbTvk{7U7&PJxEmWVWcz{W>YZAcWX{)D@fq zZI_$>hwl!CkJr@YGgX2n;A-e*oiiQPLbEVDZ!CdfwZVl5lA7q-6s=JqN6P@s>H*DG z2K1~J5bLHTFruagV-=2z=lkZ>F@Ihl4)q4DEu~tOECNdEk3k=O&&hJRE>*XBepe@^ ze~=|#e^#ig?*x{V&ouz`%g%9*Q0syGg(XM@o+Pgalj0ayfS9%>w6OJZ5G7rp>hXXM za{Fd(IlypD#f`B4;vc27yN{y~&{hq1Ty@f}Gxn9qn3&`r$6^zwKA%9BZ=rrny zik|d!o#WrxhVpLR9^(* zyLo#*&`1cl)|KwJEg1;VoqxA6-|jWfKSN-ojxVDppgwO04DPzK&;o9MAx*eObl+oq z9xUJ`TPSH{sklL?xYuaNQjzZWmkN8~mW*~}%gTbiB)!PTGv0HwKxWU>0i@ct0NP^f z7O<>BZ$U|3TD+)^>IqYu+V3|~hHw0JJ6gu|jmz{XQib54tIw^l>VJGSdJ5XJ#B_B{ zkYHKP7FEry?O-^~^)5Bw=dA^|P+;3@!YzQc)rOlj;?=a`RwGzdlUr1S^`Z6Lo2!ca zD8?Pk!|FTbulKjkJLT9qJR$MCN!JpEr&r6T;&RH}nqYt#z?vq*m9Z%q zCk47D)vY(tDq%aZ>VML1RZ6wf7B|0O7F(5tQG8dYbSr#u{J1{YX`Y8{93KRq2-bmOeCYe11>Aidt{Dv8Gv_PVSfCX3GiWKg3^=rPG)#6J>E`PH1LE}>PoW)!Q(*fU){(%2bKK*e=ae)mE(OBiWyv-Z9M8X7uVYJ zlVy&_yjO6Jv0|fPWGooa1aMR-6ZeN`8S3RX24og;US~fz1E?5~*0- zP=Dkq?vo_p0oZneWF<|G+1N@CIS^NjfoVswAPCfF^c~lp7qXY%$zC`kIT^lx@OZ=@ z0@;CT2o@z2X8EcBfrcT(4vW!VMC`Ch|BH}DK-8ocUpypq~wjt!d&49g#XT~dK^?X zm&UZp0w0Rtr53|+Tqus?VlOxl!4WPGF;|LGn?sUJ3}7S7LT=TS;)zjL$^0NX0AAhkpew1th=5-x{7Q+(5%yxK_Wp2EBsUlvP>(3@Qw3 zcmUJ9Iq=E^tVSrhrWTMsuWUDoVVCTWKAU7_5Z-vqPc>)+xW{&R6Qm04x&ihX3Ffj0 z%R1y;f*l-IzI=f-1g;(OgU1hqjsbgo57oVc?*6^{Q2l$g-9ORaTk0FiIq7F4WSoEI zIp|VvC;Xv`?_r`rAP7YM*EV=^sa2nHf54i+(f2MO){WCUO z6u%S;c@@Bx#=)nwa17|s$iOcv09b#m>=~*4v7#$nU}0TEi7TOH31_+A^WBCz4E9ks z$C~BY8noUBi_&B8(d}(NvLKE2eew05A?#Jd;JA_0Vlmky4n5!Rv}D za*T1FfDyI2bcqhi-o3HX{egerJfh@5PU{oH1N?o3k2~p`+BF(B$IA+z24&WC!A1Ga z^^d^$_ZRreGsHTVXG&~ywA8V&kK2+9k}c+fd08xG$f`%vlk;Fp&W_*Z%_B61e8UC4 zvwIh&=A(CyrYFxlZ9$>4Fj`&TLxjOwYhbGk##lk-f9PIKUdB*zXEJ|dw3z%IdzfX- zOit}5QSYwGVh(`yQYKWF%c!BPHwHBdY~q2x1C4iNpz6@Ni#Z1$li5;nx?w64%ak#n zk?{No6QbMpR>K+(9e|^7Yi}4$1|7X>(mMGBz9U)wZd|!LXdxU>ID3A0hixAb;8vSKG%@aWDGfQjRBq#8o1gz4t&CKzzW`xsh+?hq;_voX})7b_WDnjXQI4Vza4u9LPTgt}rXPaG$?xEPE* ztn}W8`UI?Zj9Pz$rViEmHe~;#wxr%e4@clco`%}{;wpkmQ7~-vRJMlddt+>Xmox+7 zKE+BOoS}_nm>f*fCPZlU#^WSLi2Wa7dm!m-&`trw5T@^L19=CJ)95>RymtZ*9;Z>5 z$iajCv+y8|hp#5`@YVhE@Kwh{b>l7PPD~r#t?e@7@5z5=6Sbb$7%!(7k#Zfo7Jiy2 z)>;X^+H|08OVQU-weje=w>6R{bfX&th z#UZD{$rq#SOXv~V`4J%)MUBIX&?3?Ku%ukc4c!ESe=UI+a&V*Do9_j|)y?V(D5@u! z4f1Un6g7|X!m(Z$l<<*@l8>g_!_y@gBg<<^PK$rv2*k)Fg;&0-q1D@1TejD?*Hz4V zK$X@(uh{16ztc+bxX~i4Yo~ID11ng&Od`YhXuJ(LjU`b2YF;&dck%_S!^fx7Pmj*u z`w$p>=y0> z*9L#Q_auLI0-)~$PKID9s8%O%JIqfzTH(tZ*<@r1CQG{XjDDEBf;eXU7vIIhfJ)wU zumEV327SD-C5g!d>RyAtl%r1tLR%Du!c2q82PBVpn8Giq=6lj~1LZ#x=s`}kYW#b% zD1cE8KGhVIE|YSjxYKm#N=;)e^p>618lZo@F+_{(q1qMugQBOrbx840;zt8<)z_Pr zICuP|QAc@VB5tZKuqgjFzOBIjJjVapECtl2u_0%to$dx83VIVay{98V>JIsRRV|8q zY3~Gxc?gbW$nGc}V0>F~E)qkF$ZQv`C@T84X4qMLMStH0O7nDj^Z{>H%{!GRa_xVG zG6Z*Cha~Jn)o?eoMy79SzMO3mhL`_YSB`Dv!mKKLl?wxTXb~B?a7EEI&(;*Va25OI zqQ!mdk+G||Yy|osQnah<&8|YS|HZ>VR!Q)ShcAk4eYR$okR&c1EspL&78Ad$AscOqG8Qlqx!rVMN}Ga$W|~OYRd1m2`^JCtWM%H7Z;b zsbG=UO?qywW^f4JPQb(Y(dkF}ObQN(Kfo^j3lRrLu#*0c?wd$=Bf2#8A}?$&kWN1U zlWb43W=-$VcfrjbU%W{_j1|1(L76G$8oY&ylTNZILaZh;U=zUf`D#QJ4;FtBi2Sxy zB>p~=bNUdjfT^-9i#4m{``^zSaEAto5j0Z}J7Q=p-Nm(1+8)kz_p);{sDF09R=3Ri zZqDly+5_nJE!abc%#OV;jGrU5w$t*pa-yCe1`rzDPXYkILytSV$?kRN`Skq|N4pOA zLyOdlL9{}T&A@&2A|b`8$G?9ts@!PTQ=kFzFo(fieVn%ym!=(N|H7hRhX#|Akj~;B zbCLO`vf&$~Nd{FFzV9X%2E+qP#g<;^JIV!`-yYqbS*gO>MP*Av`w%@xAz50J6+3Vg809NH_ z4ku5J-u?LGI2)ppEw_TK?*YGms>)>zAL>PQJ=$TQ6%X7K5u#nknK+M)G~&#Lw-5G) zU$bEIQ33Ytf6~^k&A5P?B*Hg$X!K zKOL0q`nf)iCg9a`e?Nb;KK!iTY~Zpx{B=V}l@1rir>@5}_ zh0cZ^2Hd|iH}+hPn^eFo-Laf+I7M3ODX~eY_-ReU&15yT{t>F;@|OYTm2Y@Ts5=F(!<9) zv!}=#uxWL(x+oxC8HeoTy7>4pe2O=ai+*^UcR9c1boum| zJ((gP3{w5{6o7x?ZCQYDjt_N8Q*)yn3}*lbCC(%0WEQ^=P-dA{hfu^7h9lc8`WOLb z8HszWf1V#BkpMxH_9 zU*|ka%H>SlN;W}i_$k`V`Cjx~nloE$_|(ZM2O!F51krzYiw!<{skROq9aDpAH`hn0 zllgFs5_yhX{GP7|CIGMDfzM}P>N;W9!jUY$hu#Awjsv7o{XytK+>o#+T ztwsaoaHlQV2Few7$&zp5)%r>zbSZ&n6TDix{aUqgm%nG${5t89VfW29YcHPWx3AtM z=;m7j7Lk7%zrZymst1TJurvdjnStQE27^4@#)o#?M5GyHcuXRYxSBfMMmNv|QEx7F zRP!8tL^;vPW}B8@%p@Lcpwn|X1gS+9`&K-PDx)@}tzc40C7NvuD+RT+FxvrbeVbd~ z=C-fR@4k)1z>O!PX!6*tgJX zP}DGWrj4j*qMCW1@|U7+56;_sJyz-N=~&ki>XTAqj4W_rJ)dTu9({I>U&7aqtLkd) zPspLY!W0kDLkbS6EO(LE$62u`+P4c6gr|QF>9}vIQ@Tqn=C{vgLNTZ0E0hWU)vY%C zS(5657nScEM3Y3ORAX;zTuw^J<{4Qdd7RBq?s?q()wfd2{)^3!?K#@{wL3TZmRm1Z8IC4b+SxtX5z#KSn)-eSkR~??X-|lkxy^4)x9{nH}5Drd9(n zW{Jl1pO_csXW|68_w?Y&5m)3Aa#Gv-DXUhiJST~J{2>9#_8B@C%qsX@N`ik4u5TT9 z^!2g$`q1-dO)d?mn)g0Bee!`S_EPeG@PLO9-5B;ZJg_z|tI3m$Nfz%R4)snR3W_j0 zudtatAWR%4POrjv>U$w#NcKFU_@ELz&Me{Ti`X~D*W;_IhB=F;nX(4HE;$!R0rf1H z>@5hJc;>+irA_WnGQ&^|T3~-05kf5A%h`ufrJsKiPCx)s!8YO8#A<9+idWW)?r>q**KQy^>`}|oAGanA6*jfwlr~b>&JL5= z!fP3@q#@gYB3AOR4_7uM$BzDEZ-%ups60xQ;oju4n^MTy-J0wqs>kVyi(k96BKJ^~ z^|dQ_Hw^!ujp>0JHokuZ?JQ*x;FPu1DmsvVHl#1*B)54E$IyVS!Jep+ukhXN1I;r{ z49WR(IQBY5ZpY|G?0kK6`tH%kM^E09aO&)%C8;j-$H54~!$akKfp)FcBW-ub4aZps zqYm}ffzRE;vR!cVu?E%rDD}tiH;BrDS~796EoOeel`Y=buhNufGD? z=rcM_YcQLMAX{lfryN)X=Xq_;K#LicTvOHjI^*_JRP7WTS_Gu_q`|$(!N{=Mr;_3H zA}=TW@tI@`9dXaz=t{LA3=1^9Qs`tpAX|NZDR8u4GSM56s`F={n;LUs>_Fa=e)Ai2v!3^Gb|!+D67KS-5a_v&VO&3{E+;4@nu+Zo28DrT_g!C!vMmOy6f4TTWneJhn& z*-=w=nP!TSMsq<{3KAq!CmjAI$qvv_((V2&XP#W}qjP^Y;^Er_Hdx7ng^?jN3=EJ$ z1LdgT=@b^Lz&*UH&^hq1UilLJPM-7_SK%t#2zsY_XcHdnh+M z#URt*V1f)9ssKx=;D1|XS05ste!{Gmpg@~r0x@Jd9kkl5I6}|?{QH=q0}*xcS3ELo zi9Fqe84Z7Yo)s?26|7GEF|J~>rYG6yllMOU{P+akb{%K<^#z)Je*=@`EYP#{HZWy>;w9wSItBm$;}`${2LJ#7 zZ*X*JZ*FtVSW9ynM-aa2SEx9flt4j7ha3Y5z`M_`r`rToibyBDrRP^Ku1pbERLlz(1HwXNelD!1Bi`<4d%K8 zdAh}l8ejU)2{TVjTi}biQ&j>1CpITdVM1nTCoN)s0WJ+IPBv^*5HRV69TMkv{AN%I z;3;};l{!J+fRXCMtE`3RRfJG%I3vW%jD{s{309+83P=vYY%mB`K+}oQDCT#n5lo~e zQx6;gvvHNfr&L)*7$4&&JM}D{a<++#8{!>8LL%J60)QpqW%V7X5$AG;ftz`QVMx&C zb|?gYLdhKb`SI?u+r2~)T*|Ok&_#_W99~d;g1sjn8Rw{q<0M@{5>dLk8^C9hW%YuE zEnfPP%e>4x*Zpb{DdZ9Y>I2N?!rxyHhl5IzBA7d#AMaOE$wz@jY$AfVB6tUsUd=OG zrrCNy8CAGBtDiFpk&2(V7-vPp>kqE3Dm?;!vMkPMy zQ&*ytU!t*jiFbNFC53_ttBxR$yA@&OEUVCRzVwMI-1!hN4Qq}gRMO2b`8;iQW}i!c zTXgISbRh?`${k#0b~$+VrBtFfnjs#_^tOuLjs+&~@x7ZWMVI6as(_b}u4e6v@SXY} zQ0Na?4dD;X!4mPW}W&&XfPG|CX6ljS~v8em579h-_9Em-QS2u;sl%C2s@S8T zJ-hO@D%TnrgJG^%)o@BZFIRH6PwirS8jaOt?75;lKEarYhF5(kXx|R)6&=uMlCW zWvXJf`yL@E8n)6oDn?gEXDmSy$^E{6g&Klmx^9l__jihJ z<>_PuN^U7q9n zRUua%?7(-sJeE>j1x$cJZ^CrC{maYk0nFutq^42XKKMQh=qd;9g~0e>vC&vH(0uKq z7a|60YCs-}bj=eu4M_JOk)lHQPHyJcdy7yV$(@%yD!jD}UTV^6p{fPv;zx;EtR61@ z0khL6egTsTrVz7v7HATam!=StVJdo)Yp4*jlcIM6lXj;X0$Uc7lBYug2OpDeHX1BY zO928u02BZK00;myHP1->%4m3l&;bA^y$S#p03-ka0000003ZMW0GuC^Efgp&Y;|D@ z03ZMW0000102lxbuGlod#?b*pR+j*}#?b*pR+j*}#?b+j52q>vQ}6+k0WB(%W~UI7 z^)?U<000000RR91000&70h1o67$xE*m~0083{000L7000000003100000MOFd; zZ*X*JZ*FswLZ&JMq+9}%@F*CQho%sd3Z@zZ6kY<8C#EZtm!=v6jBo;zU@8}r%cc;M rYp5C|7I6XqcVTj6Xm53MWphwV1qJ{B000dD4FHh?0075x0ssI2YGyXZ delta 2452 zcmZvec{J2}AIE2YqCvM&8iQ_@!nMp;vrNbq#mo@K60YJRV{Bt=QN~i)v-`!hMJT%= zVh9y!BEyiSEYsK`v{+Mm^xSivKkj+H|9#H)bKdWNKIgn%tE;>Z2Z1`G5O_Zr5NK9) z20V{8)0_Z*D46RHBv8o)V%!`k1o9U*1R?~1K)h9yeU;7`n;6*O2ugTAKZ?7ecaTdd z0Z-y63+QU6{#0JHQgF+Hn;{QjGNsT_cn6K~XEd~N{oHd2ta17l?IX2TD*U)~(3rkb z&rn;=mWPQN?z_ybUiU+G?auIQID8q?7g6I2Cd#2~S$oG!}-RwS1XhT&h%*Av|LI3e7u`D<`;n zSU{1O{Z@-yd6gf@Mi@6`oPB_QXOb5wyB!`~NVRN7H8vs6K6v63y!cITe5LhNStdcC z+5{dn*;PlzB@7QNW>{GF^ZU`_i8@R{lbOspS;awNhUva zMbeoR*K%c>?#e-~juSkKk^Bw0`dW*3B;TPHaf@nULS>#c1+rfOQPwxVU z{#*aV=6uHu%;o-QpB*01`V*81Rt5qB4cCOwyx`{`;8?TTXQ+fbwM1kw7{ddB%nL&x z2lwy9&p(jp=S%6g$5JLP2t3)fd#n|UzG>ttz8TqdxB4!guZ}V{VWn=x-ye3mBv-^B zuloCzj|#9Z?9xV$^*5SirPPY6O{%Kn_-^bh&vj2D!S&q|L7J?qK~Fz+Vc>iC-pCM2 zmyxa@DbHQqAcq39Z zxO8;(1CN3iAfi*=r=yY&EgZU8RfV7IVo#>IltibRYJN;T)4|b< zF@p>YQYwe#czBWsA+{2!X1DIvGC%sgOpji*R=e@c-_E>W2h(E`)0vM^n|k zYMBT|%?@Q>Td25^V-zLZbT^++o_m>UI9}|r-Mp=%tejj70Ng*x(<6< zj)!7}qWA*68wjbfmFm1)1tI~#JkveLC<0L%D`j3PWZ5gOrqa0&b-j77SH_vi{xOy$ zD(Ll4`K@u@_6^6$mzzPCRwm^NSzI(bly zSv6OXWM%B~jO$e}=IUj-j&9zAan2t%xwOi5)!)^)(B&xh&OxC|&3amex*^n`$wPV$ zn-U&@E^LuE(;cRJBO^I!Z@V8}hj(r6B#&FtJxP33o$0rgCZjaZR!5&P+?n{oSb5YP zr{VM^A^)mN-0PfT50Z;ROQLy%Gij?Si;gRhpF*?B(N6@2>+9QDsKf2dIh+Z6#?7tv zb+8EKzQ#)n*&HTzhMwWP=1M(Z&iJh?{D(`x1pe?zC#E%7c+XhFqDHT=X{&*2oj$y+ zZZgXs^Wd(%lIO{p&_wdtcK4;s^dK3N%|Sx=^I_~znC+LK(L32cLs(PT>RF4eu%_!v z9qFIm^^I*<4QgRweaz=Wn5d8L&TzSE>mK(b@dvu&pG!tK0@~cGW_8rO)5JketVIY? z_r$J+UAcQ-Y;9?#PNDeL(Ld{@CT728pwlA4Wm7`mBn%&~a#k2>L+VJxmHtk<`8qV_ zE30|Mfr#%il>S>x9AArcXP;}4?FerFdun@r!Tav{WiuH)bNbYJV|xlqO;ELY9$TImahcjB)SFrN?ZBkL+Q^iDO?crIrncZ1&(Z#T zi~jAWgwX>OVfzH=KGrnVd%&W=SC3lrluI{{OO|i&oievZkj9sebt2w&e9N?p>wVy% zk5l`jK>Z-xmfoh+hQ2T{sU#VVxzoxRfAiM**bw0q)RWn}Ny?{Q-I2!C&OP=V?6v`^V9%JmNU z`wP#6faX`H88S(?B z;$+G7#d4NZz$EHFIT(*XJPiq8Ij^A&gHX+TtCs9qw{5EoTYej~7E;e_*mcAIGrU=d z3}kWr5)@G`Ms0V3dB5Fh}4{Pk}n4*_{YfIpP~EiU^^g6wr=%L4b_@f(8WQ zL!?mlId>5Y1t5@P`{A(vmi(KBziR&}N9O&Hji5vbAkP(43<2>W0Fuv#3j&cT{k8cY DImv7v diff --git a/Moose Test Missions/Moose_Test_BASE/Moose_Test_AIRBLANCER_with_Moose.miz b/Moose Test Missions/Moose_Test_BASE/Moose_Test_AIRBLANCER_with_Moose.miz index 82fd381930395288934629aee619f2d0a4d7dc13..10f31785370b214e82ca466d7d9eedc0772194c2 100644 GIT binary patch delta 117463 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 delta 117354 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�C?L}dWDQ(yQ+}R9`8jTsD~;MEryoX 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%0AU{x>f^!g?!GQ!(0lxN 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 zᶀ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 diff --git a/Moose Test Missions/Moose_Test_BASE/Moose_Test_BASE.miz b/Moose Test Missions/Moose_Test_BASE/Moose_Test_BASE.miz index 6a60ded8ec2c10de2fe64eadf85d4b637cbb46a2..e451bf44aece7238aa49998ad9612dbe392a7346 100644 GIT binary patch delta 123961 zcmV((K;XacrU-(x2(W1ue_3SMAQu4u08<1202crN0BkWZZZAYdMnP3fR4-&{V{~b6 zZeenHjg-Ml!!Q)a@BJ$t-PJ*p)wvx!OhgaD5UF|)38i_%U~Nj8p+o%N?beZu*4Nlu zlHdCt?|UDWs<28|x!J)bMBfp#-%EVm-rnI(JXXrC^A8l9$FD6Af8VQ8TbLxtEI#Y8 z&vl0~)}aI7*63~BA!&!K@e@|c)MZ{F9G*#4o)D^yHddiXiDy?oBLFudJMWFiNU;T> zC9x@ts`rLom0Qg6=3P*IPuK^P2b2e9xCl#S_+>?S0ZZ@y6TYdUr0n-4M|W;adw>iZ zJL2SVSNjW?3~ltHK%5N1-x)iJ&|<8TULBhUOlFkJ4hXG@Q!Ttf%U;y@m`7}E(qX0R zGXMX^ct86oJ-!e04@{?kl?1&3>HZ_pFOwY?V-7Sm&q)2sXn2Fr0RShxla3c2e``}4 z$?-F(y8kf2m6BvHYXPy7a*j)|!DlKw9Kh#Fh(j&f6>KbNmE9E}xyWx%Kjyg)Jpf~p znDfDIPfvGGPfyQG&ts#(r5_KvNmDeQK7A_o4i1jC#nJKR@y;8uv;SuI!xp_B9t%uv zh?e-_S5}_AB*`N2b2Nz3Adi!Qe>jf&QI-e&;VZG$UVYhqx%%R?{qnb~oU@m7f}S`F zAkT(4{rQJq{qU=uL8mtg@%_toXVt^=1X_SxBfnXGbL|~7Q(dKu;sh^6uDv>aq8qkuIe{T?7xneI>(%vwL zh|>i#j|X9N?TO2vH;Ujz41+k$bZNqbMA5lUxcro1;#gTE!b^}-A?D&a7%Bb-qpq>vJq2c!O3l};q%i{{Pq@~J{48ppHi#TM5GYN5l;z?q0+VARKipNCLVJL|KkjJLT2Mr; zb)#9Rk+No+e@)UYq_KgrZW}ED)mTV6OOjp`3>vMLt$9dhLFl2ZSIR#Fx8ae@_4dUr z!iO%a6XZ=<I^{1mYqX4kH*9 zq&Ud?vQo#}f8ftXg{lp2X9E6_ z@;tF4{)s*!2*W4@j|cQr0jP0KRqbiPrpoAdmt;Qmt14S4lT~NZA5Ez})fK7=oK-=( z>s%JT?>h0BnQx;gt}!5rKYB{n7|{#|_?v!>hjLUr(E#CQcnhtD7T`jLAmS|2L8@tc1& zJV6x9)WNAxT_Gj?=E+uco<@#l0~~%^RZH(rSAXAr4%{yMVXVlNi5&)E91La?lZ2iF z(K=!lVhkwj{!jF#o8=NZ=)!mhgREPZ~yl9b=3Cvj*~q?v}x_{S#|m!&_1V*PoLH5odn^ZKNP=9zagO2~Qj>2b@ z0!lS>L_w%cgx*Ox&rzmYVjxM076L6&`1;%yNcSnlvIU=`U!u-h6Mn5rr-6_Dr06of zTmwH!f+_u2Jx^|=6PbxQzM&azoQta452Ja#qEfA-cc!soFi)y1t%SA9Mf3oNs zU_mJbT}&X7a-5(x>;`~PP=|?Gskxx+G6=yLO@n{}f&MUw2f5Y`Wc5*4ljL73_}GPy z6@22tCzfU)S*oijNV)sM6rcpq^YbW$Xl~X)75)vtoJ*QCKC4W%0@q4hE3z$fbq@*V z4Dw{+0!$esUx_d#4k4&Ch2ag1e<;Hk9>{(vmP(|-@)H>2TtWii!XLlh%z^k;oHhZ; z|xL~tJlSr>0mL^c#nH|`SlkD{$~>CjkH z{V=uS;V36~3^G$xKIvk<1ki@D(vs94A{JE!unffRKxjyHr4U@nuc8RXe>qnPl@_p? zYk&yxJPcjKxOu9k*0#2QCYNVb>T3-P#t^Yl=R{-{jk-1qbze>oqONA+b zhm4^hLU1eWk9s&tTy6iO2?^BEP%5jFn`alIttn;}PZ|H2X!|c(;yJyMQtHF#p&av< zq*Dp*EXPEvVRa{k#tU)=A!F)EP`B9g<>?4C)or%Q9T_d>5iQ5{f3d*pTjCdTV^GjR zJRJ1`4yD^xq}P)i(+WaIvjAEp*TuGI`cQa|f{ z(f1W(w1jI??fhenOY4vI)8rp(t$#q{uB3_n_roC0p~)0Tn`X;wi;^HtNjD_Jb4axe zgkFt(;H#)9V4A?1AWd}&!mN4d9`c~XkoCo*fKHM%8A~??e@=kqIGLctGMP-8Zn{Nk zEbP}_8lSl`ue+$A(^)}v;KK+4Z)5CXqM&mDzcTdI&j&c1f(Kt<-wuWh`hyA0Z$0b` zUf9d)Dtxo|^Wl-LbA0!Z0lQ~>!qITM=%o?Q|8TsA!(WacHsB9~@z+*-o(97U>BAS# zXp%}Hqc%cOe=x!cA%IlXS2l^_wp2_LJH;0(ST3-Ic8dnW5!J&$_kuN_G4^Ho+=|jUuBQc)*?-#5k%z$s!1ohKRyLie$i}2&^WB4S4k0L+gO0 z>GMI{jXS{r$I9n%4gwq{@awm0{`#6A>%ts3&;RtPBf?U4cWpa?-qnNdd_cD1p_EWg z?KvRzUDS^W10Tqi5GsDMlQ|+Oe}N5!*Fs^oBJ_l203|aTguNIkAXu!(46Uax+lC5C zUZf%!83aiM#aY33NktYOl}rVvIZsHz&&*TS;?b1Z*o9nt#f=8LQa&jtrty<24Z%nt zQ?4WI9;&UrX(+Eq$|$UI9ckVmxwA;{{G2KJK1+%c8YEi~jSL4arW4ymt zVj2-WX&H>YjJV2gF&`lsrk9w)Ga1Y$TQXQgwq)SSW?ZRsbB-5K)vo&v)5z;u52tct zkqvSRHm8=G766M)f}y%eX!pqvHBGC6j)Iz|#dP?gs%dfg7j0Usf3n*(Ey(*YO$!)( zo2F$L7n@gIi@8f;t^vHxq2)dHTz&v*WzoITY(e}YvrIslG3dfnbc9lwCAhsHuTVID!QZc%qfLg zS|w^Nrld?=Hn*yE=Jq<8UoerT2XHn&q#}!gs!`=IB`Yjnf2+L`l)GAF(r{a^iZ7IR z%K9(TCCwM2|GIhW)-WZ&u57}@+R+(de3x8d#~==(2)3c1qS$(AYH3!j9^}dHZqr?FU|~*a>SHi>0rLR6 zHS8LQiisN7e`^y~W)l;}@Qj^strM>|R$5N}nQlgWc% zrY8s!tNIuonk`%$p-N37m0NUSD=hh%PJq6wOWW>ge|ZR5tvuKdb3?tMi9pzumIAYU z)Wr>R)C`SU!sJvHAUxGaHJY-yqjupB7RJ&E6S<@EfP|`Wu3oi4INTrg*=DKAX-NR4 z)KQ4L7ojh>0I%GOQoC-UjN6#@j+2}{6D=r19K!xD-D~_>k7Fb)vu9Q@r@w0KBawWd zB2#Q=e;2vgfMh_jI6?ZT*Y#L@-h_hyzuS}$vl0(`#Cu_}I88}eyI{NMY1B_Hqq@?^ zVM`rE_#BNrRbI1mn;Aw{_Dr5iAm?lq9iHsh4OE4-nXiJ-39$SmXzvx`I7<&^;~M=b zu0E6o9^@#|oYgKNa(&n{qfh*!vjAq?@*zm_e;(b-&fra)c6t$eIFCjxqs#+6z*((B zdeLr=L!n~BtbX#}6o@7Lrp7}efaRo#XYM#x)*2siN9sF-}ieZ2_?c zocA9$WI1fYa*xwn9PdmQ%kto9;uHz8wBj_xQco`I^qCBs{DdN zf4$GEyQXr12jLs+TZoBd?u4Hd0??p^l0pFasgnE|vrsEHDga%FX7=rrc{r3besM6M zGF6NTl0$fOcFmnb;t&=mK`JZwA7{rw_8Gad|G|03UYz0JwBeEdf;8x73V|Aaq~4@< zF}3D6R+HFygnR>k;@qW-(Sqg&+0=~gP1wXz5{5O1r z5WInG3mQxFP=Hr3f=5*}rAk_b#Y)R;3{_ucQdB%)vO6Bd9bJ6LqVA{%gT$mCcgzVz z-m=lh5j-u-MxpQ4s#+iZa$`Ze@pTk_1jQ8-E}~w{urd)ojQH_=X{ZQ`2$#@0e`7ex z38QNBb~FSJXa`KMhN|1T8v2&W%GT<%RDd9sWy{j^O9|sbt#(O>44J!x5k$QLx&>EC zi={-{urn3*0y$Zojki^F47Q{#)gG18JjdGU)gIS zl3kiWO%obmvr(f!&P=R&$rUsme}t)hPn-@JVV~P+3Jd)W=mZ_8AgJP2V0QrNhnTMB zO%BOH6~)1Hf`fW`&{5!TP3hI~+UE4#sSNQbL=DIKf24E<%R|kw zM&US{pawxpc-TMV+@UbhW`BmB0rMS$14mpM#Q}Ze)vtzn22tgUr})>8?~%H6Y80xW zU&jD^K>ws5(DGYYdMuYc;@svm0eCbQ*P_$<9o@) zq?Nt6VKZ-!^P=5uRd-VKx6Fd&sO&0Ajls~xT;<9|sHt0i<3lRFF?Ls2F$J)wfu9mw ziB**AEo3|Z1S1$p<}%G$c+xL%D5r^OiKmpPWtgd(N=H=0Tgdm=f1ZcX3q!sCE0^=) zyT^Hy9%t>l$9WKsGq1z>Y95DXyvNBQMVc^!yU8?2t%#PI#{*PmgrV4>T&&YrR9uBc zFBso0V9EH5LgP2u1g$Vkc*&qyAZKQ&((xIH$Z?`VQD-a^mV5<7H_G-@N9u|>c`;3k z;X)NMw+w|tFTi5Pe>Bo~ZCsheDNv@{6cd6qFF0hwN!o@KE^wouhG|hI#SMX)>VYE4 z?twVDWi%|b(h3OHnaYCeRylsMVxINn#EQWx32DM;cL~HQa`G@2m)e+Vc9aKcUSP2s z1;8THu_?gk-2Qdls;3SRnvyk@lGfnB_EYHP#4}wcj0Uc^e+=E)HC+{-)O4Rsr#qH( zv4&5c;BR$wyC!JVR66kN_zaLxHEN8B?TkA7CMlg4-6R2cY0*w*nKZGJCM~(OS^OmH z2_%R86v{LfkoU_;t3v;3*!z9k0>3%qL>pf zA8x@?GViERd}WI=0vM-I?GGdsgV}{+UAQY+ITiKptB#HM75kWV+)ja;Dq40HYBXlW zAfxpH51-7TsEpSQs{3uEqRXksR+n`SRoYam6gjCUe{R+TBzE8!1XL#5IPd4E zC$_I?r&p=FotWyIoA`-cyWoeO5cN-P2@2!ynS*aaDD9M?;eawXGXw(&YfVD60ovtJ zX>zcHe-x-R#E}4*?vDE?sb2ulzI_yYt zPR5yAe};?na?OxxHNvBF>ZUZh0}eKL4CzhfBb$(8E~047i|HL_z$(RE)S#?yco$8? z%Q=q8+LDz`m!p_?y_voj3|?T-Jj(d083<~2KC5N-4lFC>JE6x9SlxQ@ozI6KjnXb` zbVO#>%DX$Sl0;AzC!ruIuyay1%UK!CGCrvoe}?NBsHSPF2}+=(D6HMfR$8w-qFJFk zg4e5#$bshQucJ7Jhg8}fw7r13r6h}~nu?*7ypWbrza@3^Zz}I4wyhnyVv?VoBD3$c>DYE=*~2ALu+V$htGPrt-t@_R~3V<(zb`z?EMDl8dy^U7*Nc=`@l@Y z2jEuh%?BS4&~(lifq1w9vwDf&znHqLpEqB;5?W8j-S2e+Z#7fQCKLdxkDX=k_hJ9tmaIF1|_UX70NC z(U7tHiA5T*80eI>#)lwT#-m;r6$btG_BGxY!0?vV2naopxse<1fD_PvCt+(z+^1O>$EetM8KTWD+^bO zxRs32$gY!su}XkPIx=d~F3;bWW-^-yR0ctnCh>}=MJtb;HqE|W^=dZ!GM!e7Pn^tM zJ-fSH{s*ZWPw?6V5SC9_)m;uUe=DBe!!d@u-~fakj<8jgPx9$gd_o*xv%ZS6sTpW1 zkg*1%i+i<&b)5z!QEBjaR}-1C@!QzJG+P3!@@dp6lc9>>9>%tbfTlHM6{?!ks0$c4 z?q3)1EW3U-4_X(%i!9LiXlkH#8U9h`=5r)`6(5MiQLj+8+z?C;5aJx3f3Pw$+g{b7 z5tI2G8oGP;%I7}(&T@Id$o`&RuKCx8T=O`ZsIUEL6H#F_r8A%=rd&p&6o*F?$SqTC zQO66P3bmkXX2BNg~TTK8iOki4_!{f*@|nm{TYy z;-*YEg<~Z4HAhpfMZyd%e}m5FTIw$cGTd~|;xUvZcu{hV%UhBwPW?1N$jY-mCM0Nm z7^2QjIQjR(x|9`-=m}bA8CQN^1Y9$o!x_PH;q!JI}K7poyMr4577{r z)2v3wSohEj3l|rOL!v@jqx$0>FdhWZx2sDW0xgFI>!K4V(3*W!$YR1&Hi$H1kmzy(r#?oRg7EjGA(qTsNs%j zWMxrr)y%5baHlROlaVuE<{D?s4YSRP+|^S?DA(~>Pfpl*G6pXg5vFp;37El$#1HVt znve2iGXA8D8sBjme?bqg)O^Yc02#I?Pt3Dgf2)>!RkN^2x^>- z71uvlL^hDJsS>-)TrY|*-)t1htBqH{`+3c3t$6LDc#cX#ih z(o{g@K`IY~;)}3~K^qQCH#?KOG8h!uF`4_chILLX$82WDU557&beYSO=rS&UvnQOl zH!PlyD)}_LJdvC_ldPN%4$G6lVR#!))UQ*K$V#5GTqA_~A1y zT1O4oN%nIDS02X!;844RRaS|Av$?X`e$%+Q;Yjl|(KG63X1C_s1%~Ed9no3?eE6d$ z5v*H4D5?(d@cIL|cnKgd`%Y4*YD0P9yc z>gj!^$tB&#gqY_MUCD|t*1EHF>4L)hu^iJ$RN#P22z`FWoUhww@`yHmG!hS5(kFE2Yf5;tb%zR%m-c6zK&r=gK3mK{y4T-2?v2Mq z3FqVq{(gpk`-uU8m}~lRmpN*GL6Hq~xNze&Zp4l8H;~LS88eh_9~uY?5P(DQG`&PE zLXz^4Nq271ORz1M0H&<4=Wuq8d^P0fxyZ^6?YnX?gWS*=V$t z?qu)bhMRS!mvJEkJqY@{4kbcNunIqTgn-d0eXUj7$#$aty_EBep3WYFl$YD3`;ul1Ig6+nB z+u9m`TquaGDa`7s2q8rc>CMUxC42Mn8FYM~XI;x+6rDE3^0G(&e<={X5$1Y&H_23b zx!TKxIfmoc8D3P6&}mgpf>cvkMoi244N*)!j57FSg8qm{1qMV7rzOiY(+IoJ->!g7 zWeIpsePcq5%{N1rosEW=SDqJ01t4_fSH>xSJ;aYS!PW-K?4HM=PfzgH20qJ2hU{v| zwPiPri()|42Ql;=0h3PNwmALoMgVJA*F=t=?Vs|j<6NQ)OXgEuqRd6<{GQx~VBWbqA3;BN?SF*) zS=e=PA7lvB^g}}bJPIFY#Cb4RXE&XSS;Jg?k)1*INCrR+z5HSx*|FTRo~gkCp?d8z9ZdJQSb9RD8`@9Ma?mm zUSP&EGYCQr{uWh8t?|*+(Icy&n!aSd*i%Jjj6ltH-#~O$Ad31vH>`H37Qd7W0Z_%% zz#09^JA!G&4dLI!MOx8KGCY2NtQv|NY*SdkFO?iI5m#Ch(NiX5kd^V6^of)18q1+& z8%__)N;IF3(9v&I$&5hNI#*EHsat~GSLI5G;Y&5jn_9G1+{?VD^u&yeeeVKJS;@IiyJqgS5_uyISJa%^ zVkzd<7IV0NZOx%CYTS#fYss-=nziX+n9@o$uQ`+w5V^|$PEq_?24)KyS(;NJOAA_0 zdAPlZLhO9sP$>^Q3yr(8XDvMOEb3%#tsn_jjiG6@gC9oVmK5QC6>>^DCH?4mS>1GO zzOrP+g50qjS$!djWteXwa|iq122T|6^^NsD0g+@wm^GYL8BGD?kdKJ$giOr+8Uul( zd6j!iox$!mU1mIno@a;vq}{CbKE9!+ezvY=yY@@Orsn83Y}EU9^>tN?CQL?XeROIk zjPUezj^F?1Fk1$Hg5#-cg-l;F$Y?)fD(?d|AF`*NXvhSM1=--%rE{7E@Zs%59-O2A z0c|IOFJ! zL)Dg(%*I1-nYo-=CeeISfrgiww&XTaRi_QCQcC@`7FJaY!%xwL^JAetDp+8}Fcnj1 zlhw3WlZ6`62DemYZG2J{{=qxriz{f}X+%3;p_QV4Uy)48TzvFrw70SZ^toav?MY3d zzWUW>V1Lh5e~QNZ@QcwLBa-I$(I~BktF-76N5a8Ati)8ECS?Xp#>j1cGzI(f*L66B zZ(N%n8urxYq8vIW{YDFm^F{_R@M7Fw2E2`RZ(DTe5ON=`^H6(=6$!l96^li^hVO7> z?^!K>0d_P>0QsrlI@I!~rE94MJzXk%o`QC2e|lO2YBR)Xm_mGQ$H-wob(zqo4TI3+ zQIPs9j!;tsk{X+;z_?4JfaxZN7>WwL%&0&%{uA9?aCfz)2B`H}?H4t4Wojy=oJ)Uc z$xcT@o$95~`4?fjlO-6u(I=J-QJ{G*4wOlMJ*J+6WHX|Do8GsYD6J3a`KpoeZX*n) zafcxe6S(EzN@t#Pyf@Eq59l)4S%c8Z0jQoo6hCYWU#Crz9?c!9j!xk}bK<8zRES@0 z?9YCeq4Fbd>Ua;o-Sfv)muwNt6i5`lKkg)ICJwYHCiR=OSPoDLWB2^;)8sM^BR%VX zD+rX@f?!IugiDsb>t=gS&Q>|xVd}=P#)LUPA+Gdo2%XINsc8#e_De3ze1F=}n4a0o za#)p2w}>4A(oyAC>Kh@%dx~& zUMQP12Oh}k+SNnX+tiEv-_*|&UFCCse-_*-x#w!RRrv0J5!(Ii0D`4rG{#A+YQBI- zlna<@KxZbkZWV19?OHv>9BjdiG{M0vdQJ^D4h8~W8$~)z_p7F5#_ZK7L=&*b7xQLO zIp)rAN;z89N-^cZBytL69HVBZp!iFBYsV;Ls=k|$e%9xOrIvsXuijvOc5X71DwvJ z6R;N$tlTYkj$tmbF2@Dt(CmAE8geMG2FQNVNaQ5yK>NFeG*~;|{@%vqPJ&Mv8hEtQMsYRN?xn;=1D<8?kPbb0gUWT@uK^1~f9b~Z~68MH#jw#uWU>XrDi?LG{a(r1GhpN1Zet<_(WwCJ(*i7s2~|YzrHIvT}&DnVH={ zKKV!fhANWgQ(-7_=BNwdd^|Tn9P?FwyPZt`fWN7$iti#*d)8m?*XCaSC?viRsySm3H?<-r@N!l)qU+4{!Ov$(ie)StQ`Ez`*hw#@%cp# zTRrfj;|OpTee7+@n4pz^jhOQ5)g~+Gih<3Rji@*3sIS8?P;XCk025){g^|xe85=oh zrA?uzFM6voIlQIxD=T`-4XpaW-W9l*K4tt@E-_lqF%aHRV=@?|0GzL%YUA4Z{-3;+~m*~ZxH z^#~(}1O0aT(J;6g9Pv$>OqY4?MS~G|#)|?7QQC!_IheMY=g{MV;(EWpEeFuR^^%Zf zeSILnho`EtEE^l6%!pGlZL}7fOa^er*k*cB%DD^$%=t#AHZ{D!%!pCJa{0rNKm;K% zp0wMmB(2NV&!YT)V91NHZi**1cYIFrH{;ZgL;vt#y9kA~M+Ex^@3;3)-|if4i@WmJ z-h6YsbFhC3|Bm0m+i?}kGM2yn%jVX$5h3oDl=N?BMZGBGaFktO57I1%_=S5lu6fcj z^oCYXs23xO{Lm5YY&BaR-rXKykB0?87XHU57$$>l0{fePySs3u0+IhqKHiP{vAWLj z=EnGY)24iGFelokKFJNpdwgHUaRM!?S-8`q@f+B^*YJ#mLz|a{qJ@zTyARuBAl(zI zZMa4R=rL>bG_Ea!a5e4fBYa`bw5Z})#AO%po3^7Ph$^BGt2NCC(*+`MBdW>0Hc#%g z|Hme%_4_bMEl{(&-v(GL&Dz73X6=4UGsB&%-O-)IgG;^*2_yEI`pCrWX`9nE>1Iwrh={E`~{>Gsi^&G*~$7|`!;Wk6VID^P2)GZ3NXv7SOvInlAR8oMklwm9TM=+f#?c%muTkeI z+3#*uGR=a@v%X+?sNrq);>$vtD;LLL7TfSKNHDVvyIHpJpiQQRg7V~)p{B>N4zfvq z6=wuA>pt+e>ez;V&CNNMV<%MC@=mq|n>w1sQ#LiDL0DD4jH4@7d$US^Wi(5VeHq0! zzK*Zl)T;$;ol;hv*;`JBgxtJl_gT^UEJpH7r}Lp(4kB@{B<4vfh1BCCJ)W5k#K% zuM7gsl4$)u>>X=UBSr8t|6+_~U7|~bJKrUi2tiShlf+k{W$lrL+cIP^yHU}?-)=wV z)jPAv26EynmPazvuj%gT>7AX&3z2BS6j|3{7)NJ0O!J$VakqX@WQ6)X*Y-rhWO9ttaD7Qr|)B1VlzXP7-7* zig|^n<~z}n?X9q}^yg>0XTP56IA@5cz`Sm6cZ^@Y5Qv&1e}-@B~aQ9VPFG*jas$REB5zzZB~g_E)3_- z5CB|%anCH{@0ulCrl4Qu;|!kN_7h#x8GgA5HcF>ezKNqOI6kfqDLV!L#NcltoNP3- zY*on`1?wD;9I7MyEQu%siby#68)2@$uf&{FkXUL)dTDOItqoV6=qd~Q0_6_Uw^gOa z_m>YPFQs>@3QUv#e}%-Db>Uijs&xsW$O7Ac3y-t6e~F?`GdjwPBGxMMi9wypYdc03 z2RaI1(RR!-+!K0OWmlpdkrp)3Hi86q=WeQ#XJs+Ts?4qgEMt03^{P65yBT`6QDpcDEr&dNMAf8!%SYdN`V^sHFrnR@%cy3o9C=6$n9RUZHsn8+hA&FV{clyJ1y-cMywWppeuB! z6Gq0PojB$)9JD|)?U z#Q0syqn^L(B_w2%N@`LzHu&s+*e+qDjTL%7hw3W*Exb&QRTR!&NiXtS5FOp-6V3zHy%_e>!fxLZrF_t>EpjKDtJg$^ z>_h0o(qC1ZkT!=Ey^zOEl*e!P;sIQ0YIVzq?BXEA6l;U*xjIt9#4h=N!P!O~dR-w7 zx?5%u&|>GvfT8lH5eMZt^c9oNZ+X3eYnu84*Rn;;ucNfAzD{pwqn0TfOfO;b_zEV} z_w%w!r{~#mY7s{14BP}a!R%2}( zLo7M!zRV>GF5gXr1$qI+{**}uY(hx0MwOZnR!`E(ynle7Cd&xmXus?*!)tA`v3R*I zENPBZe_0~WvDlo*FsBn4d<2tON083u-}k4hs!zSL^>{3Gm;l><-U24{#n+M!FM%S& zDQaiib|bL~i5-|*dRAbR#Q80?;>QHi)iHlx9R)uq{hj#TgC~AKb9d!>PtJVUDrV&7 z5#SDX@;~XkDs+#yFDdpQ_P4vZkN@FgF0ilNlhECLa*Yxv#nFpb!Io=z{b z@o_qx{8WlFH&Jot{FgN^$YgPD5ewEP|Bp9~K9kF82 z!xQ~#Gi&ORDCL*O?70jsm%WhoNnTbA$} z0@iO(f-dSA^j1j`IH@-VVpZGYU9MQs_?o%vn$fFIbp{48Zd_(ldc}%XSS}jPcy4|` z&_*Zjl|r-s0Wm(Og$S+geg^a5t!E@zmz5Ul4UT7j>8_@%o^J zqk8X+3ildch41l~KzwxcZSH&(<#@QoXl~(B;H& zLvpmZ!{CE4oct6hPrDXUcJ`iJG%u%*5XPnXkvQR_@WNV}9&|Xt*--&Tc!U&}i&Laz z*>CE9)*~a7RtLRdj%|*Vs*9tA{p-$^vL|QD+D(t7dtvRM-=$Bm;zw3DCk*Wl3tQg- zVJ)reDAWwQ>PcaY^w{I%9*Y%XbkQDCG-7|e)F_6mce5L2m&s?bltmu zN3YQ#<%=8!)zk94yUZ&>CNwAS$_~fB8Uf`+r?$*q9ulzN_Z+r>L#Asiaa-IXNz1fM zmQo9O@OQLvjF(_;z^8H^+XLySlm&AHsnFuL5}8n>yx}`Krl#?!y6zKHD4jwqc;`#v z#6pbaZbGk2fqk=wN@0jUmE6re33Z8ocjgyZ(v;Ns;{=Q(vA8DA9{0()y{~d%6_MCW zr*w39m!Vy<*WK>boz=%**wB;D6!xJZ9cZdG?XJ{8!Jt#QRY)u>>jso#=Ngvs(MV~j zva9RrrmtvV#Oa2#Qv8lzu-{%KcdiJh&17GC@>8RBRS*ip~8%R6{5|~ ztK}ss?kj(5VG1iOJ01T7jkG|u%A{h#Z*C3!;zS8`L?jpmd5X6Mj(fPXid+UB$GQ6j zsL3(`m~uD?=lbs>^k`^RoA&5ka0IhS@GW`?%20QAQYG2D4F%ULf~4=vBUaz8M4u%X zoXj}?X@S$%*B8`>`*z5#T`RSJeF;^f;t_0zb+`{G(xuumWZSWCw8Joi1f!W>?Qr#> z(j;eOc_aO4npBceomJav3!y-K?~%-!sPbf9iG>c*LC+ph10H>^hp&a>l=0bxGANcl zOnmHOLYZ;Z*VFp48z+9!8W)sTqx{| z>j+W-1Nd@>@ylY6Cm~q#Wx6716zhAJ7{Whp$mJ0mbtHw9rChhaiK(D_@( zOIeDiz`8(qeRQ(vHB4?&MB=+eFHyee_U zE|i$v)hhcnJD(F}7LBBS_0@moE9bAA)BnHuCnTRG48XR!z@!N+918U#s}ppM*mjhsOQBm_MY2uG0jAS zAL|B>z~XMdD!$XX5e;uvz)0G{^&FzeGQh7w7hKPZ%Nbb9v^b5pRB-{t=h+MiX$R~Z z$8guXmYL*%wl_YWjq!gz?<_rk&h|IGZdze2x(2Cw`xK+Vpv_`3znZEy-Y}c&b)29m(GO%885!&$M*y3j8|j@K$e)C}X0KI0^G)`shM5#g zjqWSez(~b??>r->_Y!KV1}jRXb|r5ZFVe{`=}oDg>FzMDdDvs;VUz6VY{Kr<#<#$u z1fm>;lrrFD765+&2|IRG1vp@lLyw$Ke)RnlYEbISY?{qd-DM|5ReHk?w?%YQ(#ZjN z;K+D5UxuEJ$GNZaY2`X0OQs$Z-V+58=o;wfP^v_qHen4{%tDOzK)h8cg!r1(XI&{^h%(W)>c{iLcP zqG~}v6Z)GTLQ$dlBlDWdrL2D2o~!gmJ)ItP(viVoZ{ z+x5)FP&|Kw@dLTg$rO%1(~qCB<_O&YC#q#JEH^TNY~nWs-lUt zEqY$?6CbMMw!jd~h5Yj(&n9E8$EO%Vnc|n?LfX#3G9QA3KfIQ|5!{j9osI!KN?-9c ze%X{_Ecc&9)KPrCeos02P|(2&-kjiRgMJSnELDH3QT$D(W7;?Rx4y#YpfYrvKx+pl zr^mZ^qOWKl?$6xC7C@&os34;S)`B7+$%ubDN;CBtKLdaBGwwc==Jq+PDz5Q=)&VL6 zoSc7T4NLN4nkn<)N0)bL5hMKRuMup+ST2mu~T(|&3K)k;p5RQL_ zqXFK3#f^UwK2bhp5>1%L9oZy;0ZtQ`p^~k|j-rQcF%CEOT35P9^DIo8e=sUN$Qs%) zLQk0wW13$M)uWgDiA6sQ84TvUM*2V3CYpoWY0Kq{9EkyV3o@fHjYT+)i&6m=f8kkG zCN9?q2_s2C^!Y_A!`!vtaHPRd38-c@V&6(Ivz$}DEr>CsH zF{Snn2UxQlk{UMrYVJm*jZVh`!x=Z{&pqPd;AKS^N8G8wk+QMx5jD$RhKA!X>lVW~ zwc2r*R2#Jrw5>_+PVHPL^!{f3SkzZ-#&f-Y zYh<*dKvMnCBpD)kEYLh6A#|}q0nEMOVzcy;4ACCQRy{p53@>- zwv)W9aOMO3$8qwdt#@sl38FogFH^p)=wHz~BO6zlWsS=_@a}j_7+pq8B)%Qf-#gF% zSfb1NR8XG1?EQFcn^#~g0QsK(0vP?XcUWZsIDfzV{BYC&a5UKcYOnwR8hd;UKdDyw z$jJ!WO5!!v##DH``wbS|LMe8-VycIx-(geMPF-DRkCPNyD1U6f_0BtQyz$OfatjdG zjOc3L+=9;=ScxSFjx=EnfmvY=MR*nJ!RGdxdmoP zidG(whjrBYdaJRm)B93>@n zU3(KJcj8NsF!jXJ6sgzmcOh`=-!bKT;Kl~JpYM5n(SNrR1Ysw1e5ufLLnj8+_{!Yz z<)T{Sk@%NOtdu)eU@Qh#v%{tB{`ALfE)87~ex>C<#}yl$1)I^}EG^vOP6o%}_f7_H zX(=^2*+0Q!6L7ssmDL|)+>r<>{&CazR}ffPg}m~~UpUe4>q&j9+Vk`p$(A^s&se2< z-Mm8D7k_*FVtREu8YNJrp5t-`lZn+C8zCQmpD;0NyZnNf+gYzLEhL{?mK-7-2Q5>= z_%0{)NH;+7Y_7xRB-5@yEjWC3>i{@+-b~aqI3Qyx7NUo33Frh6mSBG2ao-6^dHOKw zufq*}lL(rwgMd%g%ffw0{9!N=GV7>r6Per>BY(N`@Q?-D!DEf)*(O;2;dsPy=TVS-Tjm%;j7mFneH-C{bqQ6;Q3ozgNAU7VMynD)FB;24*YaGh1ryoAtg7yS4ukY6PcS*oZ@|nD1VLg zj*FrsdJ|ePPK0>1Wum$%HZ7x7dA-D}NJ8N9mmKE{$0!9ZX&Yx3>3pJ-$6;YWd2#Tw z%!8k*D|4h_KE>tCGrKr8zp%@jSzRoflc?{+zVgLJ*zpZK#W0xaLOU74EL+CKGk?W3 z>Zhq4Q`Zcc1IJ%LJu3?E_o?z$?F@;Qzfjg$GO}1927f}2q1>M|<*wcpKotv6L4puh zUk%Z#_f;o#*J}Ys0l5&#{isjz`)dxD=anz(bvQ=|9um`uBDg zU4;wU9LVptF;8Jh$x{rIB~8N>wE0DTu9bt&w|8uASiv$kD}w8_IuZ@8dVelKYgB;s zmKHi{2I=!JnZzvxKjS~nPN5mJGT9Ccj^8?<-DMUc-u{wW4EVJtVj2NwbYW+U2j1P; z<@}1CD0kJ%6%Eexh;yT8bzab$e>mtmoJ8&8=z9o{aORvMBK3z4`6f@284Y~cS3vNNo1%FW!&{qn?2PmcfBQ!>`IOvt!AnvQW*`($jxW3+lEwkQi5EzQF2 zk$Y_{O}!}M=pkYoPkf!y2r<2Zsnwa;-1pav4x@k4;1El{M)w_m9F`|wzPTPhu(|&6 z$=5yY)xKjrd03a>cq2P6IFHh5FhK;L?lH!|H}fL}J%GFUpu-)E{t%f0kOt0C+**#Giq zaO$mna;I9^GrL}Yws5x$nCP>WO8>B-Ti)e=myg+6wTLOTAe)rDD32F$(c>)GgAT-K zTo1ct1nR{F z1p#1t*tuwbQ2=^wUmfCl+n>`3K2%=dk`aEfRQ#Neab-p76kvu^#w7QFum(1}gK~k1k0~Y5H;LCml)oprB&mj-s=DMEdb-z3! zi;ckjP}2*b)rmRgCN)L8jD@?N4r^(Ng5bhor%q~rg2OTg3J9cBG5_DW9oq^2#Z&;7 z$lms2iw~$b4m0qpacO;mM~n2Tm`_;@s%KfPVSh>aytNGcC-c4EtRvybkx(G10s|lj z8!jr>X?C5ZMzBLXzYW~3CSb0M;foQGoPa8&ClafO6mi~kaC-h5-(Q|$XY)9xYUbCg z3kG<9mQ}xGznzLwj8ymm9gmKw<4+E9h8>db~(Nw@wy# zdLkSvi8nrpX*%(mPf72}M|k)P{r)D+pw)y%vVJ`j@6@FXA-#k;D6`Pb?EtjqN{cUI z!H(Z_2g4e08w>eKGOn2VGQ>F0P8``R)oFo$zh$5DSelqU>axT@c4CM|j-|MDDSQX0 zbN8!ud_a$eGz*$9c1XQ-cY-n{P5Yc(0#=Hk(IS~xA%3tZq9;Zj-_1lUvhN?D+PEj# z^)zxdwad3(b;p&93TNol%dY_p-JSVa(S*bl)chIRB6VSQDKVRUiV< z4N4Iqh@9{5)JLz^LPRNsadFe1dCW6)Dh$r9s#(Jxl(-hjl_~`TWAn)V>LTKQudBzZ zmw2@9Oo>T3N}_pNFyip9mHe{9tlsMc16v}Me9N3&{E^k0o4S}sv?)w$5JCDSpQyzn zc^`?oF23TRqEyp};%4`m_{!r|Ghrs%u)C-EKYvn*_ST9yOnTjLagm?rV3*poB~G85 zXJu(0APZ3H%$!nhjsWJnn-jf%L%-~cNiQ;gy9qCn&27AO6JA^+CcCIa?=58>FgjCV zbn1#~V&{bV=cy9V-pT%8`2X=D{~s^%FvpA7-oQ@X+#B|HN4tKH$jAOKyIa>U+|mU7&M8!yEU71q%GDGkMS4A|tWX~j$9@XSFLH*w$tLc)@NIGp1gXuoVw zzY9IF33$DG+TU@>I5Z1%zeywegZZ~UhAMo3)`u{q!Q6={;MQ*oRw~ncrX-x4OEX0O=Md4N`Y*ekp@W5iewn`%zZoPm3^FJa7R? z%9DxZ$&Bu$l_Q>)(RWFx86j@OB?DhHD8x zAh@|MAg*PuqoW4-HnZWIE2S0TaHPQ#FOY}HUe?hlOSjs5D!0Gvz=O*qG8nH(**H& z1(Ql>9~3ml|6_V9pFmapLt;9M%5JrE1;CSiXtn|fiIX*HB?6%qlU!*p0ZNmMX^JuT zBnvr%Ep6^fRR+GT9hHOYfBlVO_1}(yJmp~!xwdu?-aWgQR@r4SyXp4Sj=71llSgVJ z69(HxerB_J$DK|e0-;*M(%@cQlYMGhC0w`aSg{xhQy&9UgZ;M&` z=dCnpm322Qs*sm;&-<#%s3K5CV{^j>wd-Q_Q}rCry0GZOG)&Dum&kS-_C;tY9u|Jnt7PqvwC6Ue)pI_C z#un*g06IR<4D{ka-EkH!+aPJ^TmwrasU!1I@*wc;Y?e+hGd#*!pB`J#NuTx)-a7$^6K^3 zHpSHybRQ&PoS1)`Tdy_eF!`o(RR!lZ{ANWcW{4qgt*5ZWGe;Am+B z%)l^=o48j)Y6si7qcHvN?1#QKk`ucP#~qXb>PV~AYIlFNT1hJj@8i(l?b!P9QP&w4 zbR<=j2!$U>-K5lK-+dlcXijfeX3mc*vd-ICRYXW%uY{_TwfHaU)!FhK0oGw_mn6T! zKs38I?jdDa^UdAUbb84bs9gch+Mecw++{JN8^CgR!}wEznU%%cjhX?a=^{%jnzS1@ zdLw?8)lGj@Ua#KXZ{DECp}V@K3VE?X7gqQnKETo2^yUqe-{5y$@}1v{s(c31etzf# zZ%of;P>ddypOslnz69gIny6KEdS#l{yvV0O+mco%b8|IKDxOYZ&9AwL9*e0>?xM5? z7|QT;ojm=vtR2}a#!w0Nzdiz|^-P}tm&5ljoVk;dZ7P31VJDn<#2g$&7KV))bGZgS zh=6zz>fT<5q%sTo$zhn!t4Vj{82~&_}AQ?LRc~v)@0eNHQOSpTTIyw`LxJQG$IAUcq7UtyQKZT8+3zmsG#oINQJG)-gFo z7St_h=`CeZ+KEh>9B9+3RjD1{gRGwfQbVKV-y45zy9cKvFMYxI^4$6mxN4unJ8IXw z_MX?i`4tvEFxj^<=uC$eVC~<(J&^qJueidrqXQP4Tp(h2?>;Mn(X|YmUcJJ+=)eO^ z3^@0iSw|o=ZuO{CtC^Bxir0p%V58w)v~hcuE|8?+q|H5=X$tQXZgEV1(MtoNgBrqg zaa4Z|Y}{cD;o2S7DxKw}nldL}st4P{bKU5&5?FK@XKWWWdDfHH!R{#e?!RT%{O(m& z*Yf6-=#s*?Fb_9bvTa4ujb;IcA_=Tc2-3~9?za$fy9K3!M)>+NxO zZ}7G0(DyFiKj88mkH0>`*9Zb{PiD6|dJ-(^<4KTq_ikFI^Bncrtx$?dlEf3cB7EOq z*tNJubw108V4F#;w*ark%B5_T>)A4woDA8RbxW8^wYg79t#O`|TH`$_)pZ$DcZq*a zcj0&SpqwfDs}mdKVy4uBJ&EDvcu?_$N$Ib2Sf=YR(7Ht}+r&YH4Qm&&Bwhc;0+dqQ zT7fcsXw=Q7+^T!Nj;m2Gk1rkg5nY+uIHays@H-EqJqOa(0yx-!qX(I=~es-A$V7 zhaKt4QXV+jNYeiv4Ap0Ud3T!LFhrvCs0q0?-t~q`?DhG_#QsDpQ8_BWizd#Ri%>99ln7!eXu^^Q7QE*53gC>T;a$nnWhJu)DN1z?+I98<*kH9xvP zB|uu8$!RE(C@^~1V&Uh&*i>o|{ruuQt1Q&hv`C*Z-8*#yF2N3XgA((|lK;*-M^8_V zPbXv8TU5v294a^u{N2|F>KlKE$UjwQ<8Q{3qaP2kbZta;{5d{usNhM!!_&iW_7BhA zQiChFddEpua|smVBC9fJca6$19KG|7t@pv`!H|J16pcZb<&6EQ_oDxBVbE!nL1-@|l|M5SD(5wIm9<+Fdk@U=ctL0xj> zqVRGGoy%0(ATXeKmUHFId_#j8pwA&vD1fdW@`DSr>mt3%rxf;vkm$?>?c|`fdXc^; zfW*PFCI^eu`|M==!#7&7hfdBD+4F2f9rsOQ7ROp^AtYcB>5b5w0`s2dGk|~mBrj$b z1Um`#{VLC%lkfwvQ_X*tIKLH@Oh6~s(K;?l$VCt;S*qWP@&)jhoHwCi*bZvNj&8}vYe#Lgs5-w^1yIMb$kBJCH)yk&jy0rCn*9M&FX#3hT|{v?re}CU2)U3` z&q!1gr_EVb)D4VFguhUFnk}$4&ti-)?;@XPts=K#WIq*bM)`jN=(irL6zA{DeEQq` z8et)Eo;^aUg$0l`zDsnRzK34dl(v>pwKo@r=)0GT!SWnVWc+o08zeb(e zQbmPOzXzj-#xyl){aa_NbcTVi>6|B6qA2y&^m&@k(Z6OjzRczebzLrj>p0=S=?s;r zM@j^$5(1+Lsp5aNO6;{YsE{)+TpvhxTIHl0i9QEAP5C$&+O%h291E;4%c+B%#{ z@zH5Q+2AknPwEAnqS?5uzdO#D2b63anFa;$&YJ0Z++vgEkdP{8jzpXrt` zD){fAx&jM>>n*eVd0tbODKA)PkJXrXlFj%x9~>)A%Von@eP3sHcNdimMnGB0NZUfj zvy~lexdm)|GTQ)ZJ^o}*0U2U=Jy?{05g0PmkI2?SeV~!l zM&ceyO;k2&M$_TiI^f{kDtf|==`966FR#v_CR=~%AVcqn><6F!G``BB%rQ2muu4_T z)}uUK7BAB4cEko(MQ|;+4zJGB>NlUjr{!}`vB}b?@3ZMcb%F$fLZ!L6hG>>u@@$6ON^O^F!(LCJgl!T3RH^o8 z(!77d*RwKBV2d_B8SnoRYNUEs87e2be~=}p9mn3MbEByO1jLWBn(3FjFo_O?@N~iJ zlxmO_+10fcJL4Gwds#c%8~P-#vT=ig5e&p+X4LnG`wz8dEsF*{n5!$GkNuWff%x(o zUdC@jPyUJJ;}h$y#97&b<;!wD^Qpt%qNRUqyI`&isMp{)DQhC!(8GupltiF>y zJPp-N0A1~h&*#kmmr68W@TG$`z{m|w5K zJZ^q0i;VGWq>dsI9F#$j-5-zP8o1N(!O?eTZIcA+LBf#-(?e&cM(_P~^Z@tNNa17t3t!+culxhRY&L@${4e zhxIp@zpHObMXO603bF+;4X~j_I5qy^)4ZY2r{$y9Lm*MQI}Oc+~g0nxip$Gavpvd@1Hrp0s2anUNk(rOmV>kT~$R;G_qb) zc?OG2*NWeK9uOeU9EpxA?gx1Rz*l0apol;}1YhPHWFS_I$%QZ$PhTzW$@dGHVU~E| zFQjCRMdL4-fNq_YpaJ<+R@1W7i=;%`&KsI}A?493&TAJS_x4?D>!9GKBhr7RHRHMvX@muA?9 zlVEuyEr+-=cDe*8D9F|xcYfPA$TXZDAM%A$PpT}tSqFB!$O@dM-mHNk9oz_Y_&k%b zc{V4Zkt7(VxoeaaG#K))lmZX7)ZrCYC(SKc8C$HX> zh&X-Z$t&;W#S}9RVL$v5QsA~zTCVLhB{Z~fdvOl-oB1D&tX0~h#5T%yG5yW=#8dQF{le#M3 zWS^9IeONBy&(J5l9q-LJyf0AgsW0t5e1dEHus~U8XQG&qW`8B>>@r`hlL@eXi*|Co zT>Lu8+c%x%C#h2-Sf4$Cca0A*=6}aDY$s_0cTo#ez;UI$2(SGTxW}$`__HsMP6!(L zX~1r_uXIA~1iyX~us^@qYjkh?19G?1LH{%!2cNB;$(x8uFo|l~=o4AAFG~+8)z&Ix zC8?3ZlEq>s!aSYz>T4rF1)DoqW?g<){~hHsHSy5W#kLqkQmuIFK+}p#pSyr@j`ppj zlO-jG_+PeN*KOJhhTy@2A%2rPep`Qiien{obNBojRMku)R!^2B2q)%#j+l|^w9+6* zup*>X7GIov4shbyvYD`Mglm_|OrnKjO2CH1BO`dyN-9O-gWhaaMG&!G1R>&i4NK@t zNUU1XABSaR9$Aqf4?Pg6WG=n0ni(y5t(42uzD}hOh_s3TCtj(x#hzD3ogi1k)2Iz< zB$Y^%HJOehx6%_6saxlNwhf<0yd$+LpgI7TuLNM8Kr5UZju)8q9!x9}LLC+N8DtFB z%NJ$3HHlIxRw~44=#V0Gz*2rTy~_|C^mOy?!9SC1e^Gzhr9baJ_*r-W(Ivxh(61w- zdHrVZRfFvb)naNJD_=>Gu8x6qIR16wEboJLr-f~7m#wQ_SI=j%oh6;{oxW~2pgAIMu(a<|^ERpO;f~F;E zG#Y=cPW`$UcQZl0Q#dc`tZD`;-QXwl_49~M4p8%I`mR^1AX0i1|4Eeo*>pJUZMWhE z99>bv_Ud24{cPlC*rRen0!mRc}pt`Zs&@X!oK!IC*{O7kwF=d8$c$5V?bHr7+IuqyMmV`6`u z2C5|RhJ*uP#!VQAZaWg19~7Wz?)50mKIG5L9a40ygE{J| zU-JjG^Rf0C5VTaKX<`E8b@&#*^+=brryd9u*Fjgra7&&%3}uhgkqlTysCjJAiP~}`nNg`B>-oy5tjW$0*daWZ~YnYFYCvJ zWjy9?^zqObJm))VS!SK%jC9Ga>pft%o;?GPjXfUt!=(vs5Sc@X(J#ziX$Itx$)F>; zGIqQBMBHsQwxbEBx@hMCfChvcgu&Wxk zTplq}xfT9UT!^F2pKURcqLa7`>Fwfjgh_G9@={zPuYX8|-eBPIX+YQdJkO?0Sq-Bc z4zI%uwti4?>RrOLud(9~uHr6YBin|kddQ8EZ9ywN%k>biW4bIWjFHUh!QDq&_?2v368Wh;kL2T*W%2dYh%7uKj=Sl(t zY)k>eZP;7;&2_{IPB~*bkpKe}cw1Xq#?V7%P|HqG}_j~0Q4)K4zZpwkD82`hH zAw(V52B9%R9kzY!@^#Yri*Sz9{QL`QE7p6 zVqFmS{5po7tvSPrHQQ2;^8&pp>5i&c{l0gqb;N#1uO%!k717V{@4@)1R9ERA`PK3Y zR;Yk&d2=n-z3sjJBwsz_aQUz(i$g3Lri7j zdxot(U9Io}Srb5A^8(QCHPk<+eO@Ji;e)#>9hP>;9cGIKi^x`m;FGd}Uwa^&=5myt z*8`g~`UC2DHk*P)&*b zOy26nM|>b`F>T6fq|UO2LnKgbvB0v>ZJgKr? z9&XjdE8fH_tF;&EDB_6Ag^iYUOPLn4(4-zMidW`UAkoQfj*VQfgW;_@**>`G zmGQL*<+s?yP&}+4ob{4AA=KEZ4?2JDZRNb*eV6RtB}X;ON~n6YcNS$6?V&c2qPUzM z_vySq#GU(Yx1P&2wRhZG^grr>x4hhZ<86RQ)h_;zI1sy^Zdqs5lX?0~<8Smk)K*R|9~~fyLS;>pCu4E>7tpB@iekZk8n^*b2J|3D8RUh%8?;w|Hn| zqi8hruKw#K^%H_T582?qm)ajM?pyX!Euh%zT?k?Y*o@5W*NGOFJU2CKVu6M zjDFLLm04dMC-;_%Dx01j=^zE;#65u-pc~r5{7GqYyLZCqlPLpHRpKFT>6RPeSNdwS z)>YGKa+zPP_LC;Y28w@c+mrMdz-J{ACIKC(>$_r{WZ4(vFk6 z?;RjBFQjEm2GoI#!ndMlc|8TSXgmDHQu?;J_DJVPq#XgwB3`FY=dcWv77gzU8iM)g zSWeHSz3-?(y6JzZH-0~yfsy}(5g1)@42Cm!(GQEd`)zoyAgH5muo8I3D8uJ#OXQni z6_=<2vX~IA&%A$|yA$lL+Op!@R!r5hP~{RgLYRWM+WZMCJd8WYo zsWNFy&BT zL;`I!l_l=Uf$Z^F5x3FXK!x*X*%@Ks2tPA|O1 z#nyLRfB%0PJGJcenYzHWhM6>6O$oXQDT^wj+PJtg4@|u&oO6&e`9BUClT)@MV4JKZ z;e2aQXx(ea8#i{a-*=PZRu9J9(nE0WwfIqV zdf~Nc;17(6H`pa&BuSj45@$FP+c%OGNp6hY{%3z`wf+=v$*%(aB2Kn$l$ZN z65xt;{b**Nc!2nFFZYEd9sqb4^Rjse#IhOWso0S1K|6Jc;c^!1(9XbgM~Xs0wzl=6 z3eCI#M+^vZjU5!(g6%OBH~Q;FOj-i^%{BP>h0Ao4l}G{V&SHi^sI5vwFxxzb*d}en ztNVYLytm-5799!{NNSGP{($*XjRMVCQ5)AKC^xP)0b@g09|&{fy0gm2 z0MY}&ytwwrUMy!EN!#o{KH-!1f2Pi_v4dI#t7Sl-`ZBFmc5#tS zk!AC1tvf^(HqE`xUYcNv1p6ibuAw1w*PFKLiSr%K?)w%Vu^d5tes*-lw_mSt#$6@S zxn@VoSpE8_`rllFE%w;T{8Yozx81 z_a58rJ+}X=v!UIwfipJ!2mC&c#g;az(S8Jufw~1W)?teCAau^#38V|}!GThu-ccp0 zFuC1rfKuJP2F4}FE{Uq$XTa>W-hczRp_2=aN`Jnxu7N|Vo`9P8WBz41=P`>Zj1NO@ znRDW8A$2c)hU8M&n!YaRVIR6+lrX>#iKKI&3(9~Pz7O_no{dS*v=#Ce^O=HfRwXDV zXB!L9!K^A)d+c$QpEoC*moRK-6lC(lFrC>GE{w;Q&Hax0HH_tafC~WT@B;(FIYF~S z4U^Q48Un8mlkkpCf1h0t-GWpN(lH%+XTQ-$+{VauRbC-VvlQW3whm5RMw-`cs2KDf z9aiACaxP1$@McL5fpwiC2Ta?>K8GkEdGpP-QklL4hFebGQmOjrj_Gk~;tor@9+?;J zvTjzVJ7@wn?L?RCbeZ$Y#mu2PJ^CO~4?a*s!OL)~&|cY{e=bx>?&O^03BcdO+dNkU%RfS#u0RfL%dQaaC?7g<(#g~5(X1U!YMN#;4qJ%b7>-qw2f z!3Q5G{hWq6*0s&d%ES_vS8&P><)-Pfc2CC~f>ACjdh@Y(yHWLWu_&v?tJ1#XI!ytv zzF(_)CD*F%e>YC=H%{-D;a=7<95?xCx?n^58ZXDKv?Q`Dw*qm$JSS%CA%pIh={9b= znWxhzsGy7IHO{MZ7q%L8471eC!v09oYRx##DQ!|64Zr;G3MVwq_~dT%JN2qTW@T=|j2 z%J1_OsG4oF_gOGY+BvJRC3(+7!Y^+i3#~Fh|FixK~3O7u&fKnES>23HC!@TiK1%Iw^2vfX32lCGD4!hb17+J>B7JMY(Dopwe6LQ@M|;uM>5 z!L5*HK@E^yD!GM@QWb`&?4(2QE((VbPNCM7miLC0YG?;D?V4N~X2{^uup^-3Bc)f< zu)6t`1*(ACzfLhI##vtei`98`ilzPU${|ZKVP{s zb$_ardqR2l%KeU&yR3ac`+XpDrSbcOSpDi--lMi&8YCu`fsU&zIQ9-Ef6@lv6n;$> z{&pgl)_;&Tgq{F++f;gmjA6T~kj@_OMIWe#DiJM)me$=VDNFF0otO0LHiwuT(OxHI zyP%T-4l1G!xc8N~Pv$MaG%5T;5^hVR+JBigdGM?-ZT2eI*YkVX-n_cJDsSTDj)W60 zr~i8Jp#9e%uBADQ8a*L+5kozvDgzJGzgA;(@&mY-G8gP zljLHWEhvdGwsmfUlcq^UsN4-U{S5u2}!hi-8 zE--fb$J^!%*xFs`j7_gGKYV2xQ6Pl zJ8_K_2mVrmTmj2$XKUYFgMVT-HyDsk_EmN-=$v6(J9DWT>~Di)js{hFJyhdewrF8; z)#C__GS&{O?9YV8p8XN7^FwE;SOJ+!+*)}->dNKn&5ziu(j6L4`2uybJek~bkxmsh zTZK!-e3+*IUoKEt0U&jSLs5{!8(%vi7!k;deD^qPlt$Ef;`~I<$)*m~mSZ?%Qua{6*!Zxz;+)C8x|I|w;l`FsYJTBJpN(!dk zFQD!hQ1=U{`+o)0e|!OTZ`w!aUn5H3-!zV~vg1wu<&@m5`6wWF?^mmR)r=I31l$%lvx>2}y-r8R{7}Xj4u${+~IPYE^#e*M? z{=;J!TEB{50Cr59Sss8nsozp>F9NK21vD8_w&GrLN)2kH24Ahw=Z{ zcG8CTkbmxd-kT^#^s8R=WT|B*cvDG3cX)9c6e?;5@*nVrhs^pl(9LHSq`?NyENou6rYMpKQ)r`vf0*;!NjQ^iGuRUelVN$N*0~-{O3bR^A zF42qOmDTH1)vYvDsGVxBs@7|aRuqO@_I{gbVSjVpp2|6=_h64cE!nQNcFDw#%9or! zk8_yIo4-NRFz_N)eB*F%TsUmY09%Xa8Z}{ADEkJnpDOR$*~)@wYP~BBSt|TX%17q0 zBV_(kskCBgk%Ypj{xJT}kqb1iuxU7VEf0vu3$DE^w-pg;*>>*caF_PzYGW|EytH6< zaeo;Bu^NElo3=5{iroZmKM$2r4(2(&mqT%H_>?s!;`134m(`;zbAw2XF*lC9(+qxz zE6(%uC4l4fm(E;yRu+wXrf)mmYQrHUhL7YGuk8ZNp-S2~baA6-lvzsa(X?7r1Pfg~ zKw#_LG_YQa2Q9h9u%UYd?Z+snF$j+sI)7H@{N@u8o(vX0Ejb74tZa0T=|PDLHidPY zXQcXy(oD1<9g<7bST7MF=N;ybs77#`$yzkfd4`7?&D%YXX+HiQsG%EEA1LogjR*~; z%S;CBjqI^BSRyEV0gEq(X)%V zTFJrSpRN|KmW}C5#A>a4Tv299?N|L2A|GtOr@AtRY#6(C5A+Aku#oOjB2jXOTn{}0x02g@%E1)t>JUjj8t(UX- z<<>Jud9P=Z3ZO+oX^(7LJbMwOy{t+s$|T7t?Qu`*{D8!x%n_KsBX5TBlf6mCPp&4Y z58=qU2jk=5Ws-+LlA1Cjq@~OL7g3TL;CS3KO$_voP?#B1@gw!FdVeqa(9BMi_JK<$+EN~aBi$TlJT0pTve7ds{7}ku#exD>9|*&R z;3ZL=`NElwqRY(@+dn5~u79De;=n|wB&=kL=nPlJvMnmAw0COj2stY&S;+vYH9_i( zkd?JJXpNoh{2b)M`UdW1>Uf-|7odDOr-80~z{&*5a#3k|z<Q?O`B6k8nEo$liEKNO8lh|By>6&p8xNFLA_>l)6%G6ntWgL6|_tXB}%{ zVJ7&2sjcYYgDq}Pdg{u#X;R>_zn>QK=N(wktL?{1yvQcuWo^}u^Zn&YTo6|H~NFl|Mw)Nt{Weh9maalg5A zT^&wpc&U9{CKDa4uhG=jXayFozeI~G_d}k(sBTbwufjeJ3oPmIko|S={8#u;YwetG zigOc&g=s|3rhK0kDHtIp0UjE`O&9z9^(?!DqX+S=-Q`4?!>sT>zfYiE>$9fn_M4(K zAWkJ*&(VLZ=LFF~L{y%fZoVHLf7kzJ85F!KJlt6Z1n-;nkCp)qkB&#ZWr%)Qie~ql z;r`beM($AEDeso7s}ATofL&JY#B3I@sdko4C;Tv*_O32IZDbT{3nv&zT-njV0AHHG z7eb)j)c=O>VccRUv7Tq}VbM=PBvqE1Z@yqAl8%4RQb1-)TW+#3CZDSggo7`y2<*G8^ zTR(pq7DX2%j_w!GBT6kP23~W%-l~CVKvZqE2hl_sFw)mm9UKit-yQ9r>Jw?w4?y|3g=#)+_4H+*YKwP0epX+v^c^o(KbY^f7ck-*6-fYpmmAox1U-! zct`u$Q4&+m|4+)9j{BKPUdDJd=2i^+5_Pk{Doy0xBjaYscNcO$=j&|uQFydA=H`+qNm zZaNkQ-}iS1YgsiU9xu(T@e-ZvkvQP~lqK_*d218L_ZstSF*0hY*`keQ2)Y?U{+EW# z=Re{EastnppA3$7`iHk3IqKV_!0>-ys(&~vrbb5DP9PBt(ZThCNB3-sgx6}2!JO}R$env`LRt=IZ7t~c2R*Q z-bPfOPv^;ND=V$4mCvX1JDq>Fng|QF@ut#ZtcrUXSuP_E#SYQz!Ol0s!Tv~pQQJ*cefzUBX%aDzP)Ibxo@mKoUO=k$9d><}Mmhp-TOrm4B~*{`X!N z?jP7UuwHR~PXRXpVF7t`(U9&W5d0_2|FOazR=^<~FLRXqoRe^zoPmGbLaR$19}7wu zE*DQ-lff_dcuwbKXxUjvGWH__F_;0eaY6%yvx|#loSvp*f+LS*9&iEy@T9ajzNF?b zj~T+Pge=gv@ytBby9S$v+NK3gb)oF$im7@$^Eg}&<0 z@$b+aANGIP*W%UnNj?&yuO2=$uYmLDAZpP{rTg%q=0Z>9G2MUSO-mE`9t%F*OJ@@g zjAS-XKq)31MN+rYag`dtt&~EYi*H=zcw@3pk2xU-70lFc;J2z$ep871!WALmsV7^y zD_d1#Cz5n9jVFe?rdE~2drC8C8}lPAu?@2%nQ#8wcynUcg@{JWgmo!5h30=AEX~q@L@Ri&TbVGGOz~93eUR`#c^0 zHeKlTz!dh~W}56~vf0dn017DE~qkT~F575>i`C@ihi z0-O~j8-9Cua5U=gkDe;L5P$sT!FS*Wxj*=RaHNj=`*45J{HFn;E;MBiKL2X4Gg3#e z>3@XV{>N{r4u)K|3=M_@F}&-~KGEYYHi*DcnCkSO=BZTHtPSQxGU53O&uFF#qqx33 zIDk7sR|J7>m7Pi*%E)LZD9@APB4gu-rBUlSepdfEPEHxc*aV1qTATr%B857kzC||A z0R=yj0Wg23y3K4@NA|B8H1SNly+#E(o#&DKs79|1iRYmM5wewKwPiwbC1B-SO0IUAK0x6wTx$@G(Q1z*!F$0t(CgcLdz;-Sff2PB6Yt4&>6e8f~rI?h^h_^IVwiDaZj znD~FgSz0Dx@{b8>UPz}#3x&`7@Y(69ikZWPdU2Z5kZwXsU6jpBAmTRSE6%c#23uO% zH}z8Tx&oRkFgq{pf<(yj`(5>oj%BM3HU0JdeNUoqDc9L^GD0M;(-}^Y^-K>qB3Y_L@+Sr*q~W)&c};et+REflG+gO9sz%5!qW7CkXq zcF;uzbHSzEsI&#b&L1E`%o@)4hN|nQNA}NnBY<#lLOchM942RYD#4rty2$td6UYUZ zgRLY^p^pLLcTj;L*`{J8%zyI>EpuWcZed za^i^WLZi@}P4W5C7cY`LI<1dJRgMVmyO)5y^gpTDegczJ zS4ZTmt`2irsE)`XQn=@s0)=0|BxTL0H?$86Z6~Q1w{xg1q)Sn;g)e{fV|K9X?5|hM zho2t=Pq8WD^xSSix}9Na&Qor7l6MFsxOh(O0j?wFr^6X2-L&jbVvo{z>qzVwOH7;` z*`!ZwZhahGb#!%KFtQ?*qT1!PWW{RVU*@~LgqzYC=1XgO*tsZJ)<+?sT@8}jyoF}a zOF}yenf#|OOu!HcwTFKS)(-_jXfa2S-jdf95(hPM1Eq?Nlr}?b8BXGo77gWBpPIOa zjf|B8Un|p&_kXT-vvu;wiupW)5D1RxM5xMaCYa_)kr(0rFg0))F&RzH*Nh{NbKGI0 zDPV{oXZYUejw#P^6&|>w+#;PYoA8Ih?y{xt7c@`qOr_pFC$E28*r<<`svs=4BJ{kM z6s#sYLrd-`RYz(kA+Ay})!5Z3wQH%ddcVkFjLU}9ux2L|r)Gi0c z2noH4jUf4ebtCQY!E!)Er{tIM;`V<`5$M|G45B_lylbCteD>JA zE1xsy2V9+OWjW%xB5npuzwO+QhK(gnPk4u1Cvvzwp#oMi-c3w& zKEGY9!j69lT7!rL@Fz%IaV0^Z+S;m&!RLUMUJ3DdZW;J?fq#CVC!QVIlz-xkb-2qc z8t%5r!{P3_c_(!BuHYGbSE=Y-Gfl2aX&sL>ojE5)XIk1^E>gtjCds0pbNv)=9_V7j zQk};Oq$l|_o#DO}d#%Wq`3yKN?-zthGy>|R2Md4lY=Lp-O52!1Wp-Piit#C?sBnep zo{_q(0sf9us}i$MNH-}pT%(j6PLtB(0pD<_61T89DU*Xwe34+pqRX^sZ25X2;*i?> zt!IHXEH?=KCYfSfRjG%(A?NsG+asq@SMbfHQ)o4ZoTu`(IZtH26&;qiDR=y}pt(P^ zKIVU54aez=&2G-5=v}7mh&MZ_?AXTQDALs6N3KN|7wFfUC1Z(<_BPX*|_*y9MDjqBS$%(WW`@ zC}hDS$pZ(v8WZwl8q*pxKF3`$)GMd+WU7BUbkOoBdZfw>2SYb7Jkk>Xlu15=hL-W{ zw<6M>usLAE|0WaMAcbr~$uOADY(Z;JYDGFGhkOWGR zf?xqxlLI#xfrjVv8F8*DD}?diKR?e}r7|MiB$cr~L1jvjRJMStQ`y`{Dzdz|5rKb? zxooR6);KpwW?iMAv`Li2_Q9LbTkZ23r>KDxt0Ql(KFKxp(N}=Li6u`#t(n?AGLHaA zM+H}u46a8pr}mG#0e>$uR&G~r@9dFZGpjwYKGShrvM*eW-p(=PWi#G(aVAQR6?KX( zKg_WyfBze7eTEA?$=FN^LWfIx*W5w@fnrf zF;v4_^wX1jeN@SR)M%rDr;!TRQ&4t&{Ot zGX4#^z`S6#)7tg&EFGU2_9o>xx-z_&Uz4Pu_o~njde{D@i=U8p0j)rU3_E{jm$JtD z-9pbIa<(l+wJjg5VlA7L4XjVf0k=SIFgs8oA2wOa0v8)})D~5XF)d^#FkuUca*93| zZ*8e=D1gVpBo@+iKi}(2b`SMv-OQO`D*GEytS!SC+0R&@>pb9K0|98 zoF34r0eDHJe^gUh^+h&aS^$3r8fDI@&y&-P=Ipm0yuFPZ0K^=Nq%gN3$)8xVkK=M2+^DuHf0NH-s=VE}ehF#&@+O{^*Yis6_xpkJ1yQofbtAA#5_MiM(AeZBLd; z+mm%k+Y^$TCwC!jPg;MHHl^AVH=|}`p?c;&(adMZnFc!o9^*~r!2JvQ>27;f%0czT zu=PoYX`ho2*~oQE3D>p>LGf%WTW_79NZU#jk+zkeb%VnTOSYH#y)GvEDu?uPkY7dA zD!25bVr%!}@i=Ac42HGMso<6@COH;lH{qHZ7H-KKFfyMf&TW52-i*^1?p`%;vX>Y0 z$sHPfUekQ8423w^bQGxwH$5JX6taSZdydB#(|^Mwr9X|U@@)&bHgSY0h+ zkh2H3!e=ow#o>A-x$82-JFZp1Rf)Y#cnKrqU&K#n&5AsQ?XwNB7238sYww1+o(gog z^c(Blz>U(PXmfuvX*lbr8{KB43Vl~rZh+LU4pMT*r7zQ{Dx3)8X_=Pu$&L4f>_lkZ z##E!_Sli$c9%t!VB&S+tO|@-H$$$i|$O}_I@I|hH7T0q}T{CEOREingXV38S;lscb zjjJz#+m-Ih{Jomfzl_roKZ#@1jEbmW5-(pa#{#Bx(9(Z%3}L|2qiB(hcmmDNrKn-==R|aF@R0Naa5O{YI_gcknjN7JSu)rV%T(0t<&zf`jAcSYY>A zQG!ZAjjGe>=n}9;u+3#`Lid-)>K$bP{uBV1007-z9z`FZyAXH0>l*J?jaw)Nuz$tL zo@h`4PfLHY0M1N72~1>2JsRmxvjrweh<_fUwxYx zLE=9wLFm#WUET{|!$OR8; zxQR)(XDGIx^h!CBV58)k<1fv#lEcnX^d^6xhT|RPwmuOw7VXJ_zxYAcqU2W7*2I25 zSdyW883#WrGmJ2o>U|=$*-#Ug!<&%S{;Ksmai;HYOQoDeHc0BjT#0lM%?cMGk{}}a zl$rz7^kY@Q<-15_2?ky3QqWU_w1}1l#0Y1YAl*n=LyU9W%45HWtQsUahwF*QZ)1PI z2Ir%lL9y99#}L%$ya=eJx7PKDBHeLlg97Rw%|$5S^Bk*8c>a^n{s(_{MpwZ9Y1yz`J|eg`H%yinnt>1Crf$Z;R>O z(_*$Hjno()=b8Mp3G}8YZ()CoJB{b*f||5!F;?GRpO^Y0jMq#M&b`182<1R)$FvFM z>-8v!F;RT>@rv-}3)QBrK7Zlfz}V6l)Gc^zr*2T{Hh7Tr8xpiUGg5)f(O4 zuI)ka`%o>qDR1m3U2_lZQH|TSHq#AzbEi(d-LK?P^?$qm1UhtZU2K14yWqO^zg?{r zWTairQE_#7M;R+*S7rQ5*dWp1ybhlYwCaNDLPF2wazt4dztp8uY;6iVTa;oQv>Jr~``Ir|E)VbSnS`%#J@vayrU0vNoiUQ** zXz+mu&K(=AKkz|caYqPgkO{2CBqF)yf5o`LuYiO)1fE(a~-P)R-Y3{S0ckKsbTTS0Vy)_o@#AqHQx)DNjU6!0?2A)LW z3eY(5M5nF5lK{s0%8GcHGjwXw?D4uy4jleH2H|auU|UfQvHm|fK6-q9`NikN(BMJ_mD!>oT_+;W(N9V+ER7_i~yJWTR(JYBPYYn78>f7PI*M1VYV#iDi4JOt%h zY+qG4*32WJ(J)LImlRADhMXL_V-;Czh>23b-HDjTm-AV;8^OXUh;=huY zE&fS?U=kU?a+!xA_Ls3B0drZpG!kARd5NnZ7ggUP+5vwQw$;XqW+y~(Cs5p36jeTJ zgThMKYc!fHRRf26Cw5v$VjnZ$e3brs8V^)SD0Vbmqb|Ksi+$DMG*5xv)901Dr%a0>6V zCW!m7)}w!n$gOX^5KXx>lxJ7o6_86R!#v27Q*bulq{UmXhBoEand6qNwI$b<4Vf)) z(}_?U8?vPkDWkLvQd6`8Q|P?>pWnV@TK+v7n3m_Gq=eyK+&E!ghwrf|ss-+-tw<&7ru+KYUN2#u zX{{R#0M>+P^t_@vh_n- zsZxRD&>SaE>&3jdf!s0qgN-qc|JeGHg<*dKppkQQA5y!`HM_iG6B<7Jah%-Y_2+Q$ z-QC)4T|F3DoXp8^I*d#+QM5T@ChGkGIbLec?8Gb)zNZMN$2h684$+1LyLVAWpv<$f zEXsb;!(@uJc~QBk+W#Ug|l|iGGqO(WiiU_CZOHEuXOk9XsgY zMzd3K{D{NhYaTEw4>&Yms8hK1DzMq_^OU2`8{B0q39h5lo;$QWT9-pXW7M&exB@Nq zzjY}3yBZrTQLbR~7;!7O_!*xV7|nlj(rNPm{k`bXX;qPhR#rzm4wW`H+8E<$J(tDa zmhF}m>tvZ9UIaK{*O`hxwc`#SGi&uU1JzWH@IgQoZ!F@O!#YZ0*Pb&fH~lQHh-ynJ zl4$X^C8^Cpu4u53W?8 z+>U!^G5eFb?-BIHpJip0^5F?a5Oy{jFmujasUkH)$QHm^h zk$-2)>KtANc?^_P4|%5{?^=HyV0<`TRM&x^7Ud+LQLN_?u3qPOB_qjcc1Wki)AoY6 zL9Y`{>PC|L9AbYt#xpB?_Z|2q*h~ZKds8!GQ}2S1{;l~KY{0^Ge3-nH``_OOzt6I# zm^8H|0wwDsV|IU9-bPI4=h#k>za~xH6`zS%{0<2SLpoIvuIKz(1TxQ$t0(nQ5oJ{nC3GYOK&EX zfx~HlJKk;0v1LWDDc2(QmZ62ZHMqs-2zh8(@vfa%EHXL&%<(5w{%U`t(%Q-fb~sl4N!!?luFZW}SC3=}8_xU0Ym8zwh~s^^>F~x4 zcKT0?>HCS?KmX%B1e1s~82mRP;j@3l_C2(%-%fkrcA+R+t0@5L<)q(EtKf-GZ9R@y zJ_K-|V-t04EXI^L7V05PZvddb3vUJsq+$G!8!wNyzxV!vUNnEi7B6xU6(%*TU(C{_ z%Oa!A`eH7(CzqJgVypM>S#Usail)YO=!R>LpiNYQzKLu~^UZ9vFUwmWt+1$8 z8B=O&$WkcvEG1bdEe}Kw2#l&9PKyObh3K+LyJ{8WYirz#BG5qxD|qDv^@GojhL6p@ zY`SzA@nD*Reeiz*gXr5-exGQqi&RvGtKjpE`E^lc5RMMfRu3PxkPN&4Pq&sSv-%;Q z!u&V41yQ;#FS&-x%cLmbi=W`VyyT`nF6J2{83%McK0arB=IDm#8DP?#%ZCw_Rn@4> zr*|C1&5h{@-za#5i)+V8^8$#UO{STM>}7A0Z_qmVywQJ`P-#_L1+kVfC)4bw3}u*( zdKnQS*f@I`+;}jv&BzJcW-&Gsq$edKkJO>(vJ` zR08@WLmhv(s92S<=6`f_c6Ma%8d7yv1qOq%wUUl5v!{7w9+}9?q*{!}nZHPDMqCPG zjztFGud))STpPTEAa+;%A&3u)l2#?QAtXLPbJ)eIZwJZ9)+@s?oc!nXg|-H za!g*rw$c9iK3%930UJr@rfD<#iXIy_=iSxVu&(P%}1*$H6Oa+5cDlC7P z<{uT|yLE1yt2hYTsFZdvuxs? zpr(Hj$fFB*??c~cRPq3mxR6);&eS|Ynm^ja(SRcs{)OV>j2yoMb&z7-6|72D^}6dx zD#gPMn_y>q*`q%$^6?K-8m^ECLtr#>?6>kQ^d(;N=lm1}<@f&1UV=Z8(Q+|=@_uPY zfMpVk%SiQMeH|ZA;KD7{1pO@7cl7Aw`1F5#|MB@=f`{*CA0L1I*PKO^3Plt~WhG)+w{TmFi;yYLk5)y%(R9{ABCA0cE@~-S< zdH2{R%hiFkJs_F0&CRsq#~&Q;pB|na9S%*(GmoL!w3UM&pAA1m&{yf>^ys6H@#}vz z`ubr1;8XZ`ojyK1JtmxQ;FUH^5%-h1${wb3`#1x6;L|9^wq2F`3Ni0HQfYgWdWs!{^ zM+dBUEFVKMR^7vgtt|eu4!Pt|at?ojz^as=etTln!4m|~^9w7!k(vBZ1<{*?1;H@t zrR78@bPHrJ{X~lZr$BZk=7Kzp+f@KJ1$)n!24@E!4-Y^8Y>2*N2wrg{Z1C5kq{@HiYz<*# zwV$v7Y>O1OniOkcq8=nW)FRuKJs|v}Vl?e1huQ74xI5c_i;2ZVhE?#)n!b^`J+I}k z>7N5{cHe$<{>5t#KR!O+WvrF~uR`^EuDR$qyEgLE{YNKD*k9isc1`+g+e2PM`WqU% zU*R%7`FehMp2qd+C+MhZ1^0g;dE>n2bp#@|v^!kV8A=p&`&wb@-iM;BaC{2kgcGdy zs508eJyeJrOMC2MC9y);4b>mx!W>*(Vb4s3l&yLcD4}|# zD+g1#)8H5EG%?R(yfNbE5e~QO!BYRTN-9_&!6aKgZJJo+ETjd`;S~Ohp+l!$w6O%l z_u7N;hqvV_VI36S6yd2x4Dsan*cIMu9Gn0N8K zRAvApWrBj!YvIP=R|u@k7t8QYq7vZ(R^Zqmk7<_G$spPqR@?pxK@`x>3ULrGk5*X* z9Pah(se2uQ0DTga@;}qGu9!HTjuz}CCnc!PC5o|D7tES8az}t7Q+J5Vc$HBJ~Lvyp$(%05}| zmMXd{r~%Sc@Ym?<&otPNTZ%US;qt?hG^N^b^KM_4H2r^KI?s12I#3}qrlo>fa!3+* zYFczuJwkvp%CB+LmrY$ZYlE`rKt*jf4lEZSDQIi=zDpq0ehggh=O6FB`Y~iuE`RvU zlifF8{lI4ON8;|;w0oN+*p_RcO# z0>{-g2hM-yAQR3h%wxgmvVpSUI|uM0MZXe;~$)GrtOR) zX1ptIOAj!hxKKy*dujf5mAQxZ(f{Hr)y}Uf*g>d7U-ePux!y_RwOLSyI)? z%z>Kc^->@{^$+S;)bv1SA}4XV=rER%kW#{-O%;EEL{K0~J72OMWD2>z*uVFAb4`Gr*ha>#b%3OTr8Ew;Bnk`7B7N`(MWo zL?nNe>EUQT0=^J9t}b~aL{AjFDU)9X#Ylbm&%L}F;`y)3xOvxw!obL~p>DzUnY?yhg4*!X_OJ0mWC_p*WRBpKP8!v)+>$5t|CXhC^ zK#0}k^n=tYpJeIj@G#jKh|>5{P21uheD;4iK5l~d^I`7rbRA6w{sU=5>A4-{fMS{W z9rEe*uNdOOUKHKyE#u-V@K_^p4JxC5WA%t?L_J)JtKi=rJBkpeu>jc*Ek0h~?Cu(+ zz0`SuN^*iJpR9yGp-hmJyJe_75OG6=3m_^FEpP>ILJEYmOQJ-JF=~{)rIG=jlqG*& zB#cO7!Xih900ru=293=YZ4j+^434^^DSK4G_|q`$M{XkjaJhiiqeI}6rd`%4i(q}a z5T=S^LSGP=%Vg!iAEZHi4mkt(x_v*v zJsst)M>APQ!6tp#7?ME@4a03FA3?kO$b=NYWA!L|)|rc;|(rBvg^ zQm=lOilQESyccC<=~K!jW=A`79g^(MY-g#&-h0AavpstQ(9A(AvW)^n@`D=43XuPL z#%_gkIiUjtU4E0?RqHWJxeRoj--!*&5A-g8MQKbKi`xEUpQUAILBM6*EUkYBEacT| z&yK1yqBqx5ni5%^K5U`KI!KG{nW!}Q4)b=SjU=Oo2pK0j3)#k*T(s`-ZZ;;550CeF z`RFe)u?jglWTW(>jC#s60xD&FV|umS#)3j!YfXx_Ne6h*p@d(WpA73|x`tOfkewXj z`ryVs^dnGsHtE9hfC0;in;L(PJ?rqs>`^sw1m$TRo=C%3;@f~HSUeUgkanDa743IB zxf1Vr*Tf726fq}-b&YV?h%T17VpND@hgFwIM3YLUD8o|DnFyi|aWS!$qGx=>OkbQc zm{~zGE8l2u81mNX5I1fSK~tvyaDBfd$=V&m%dItdFD|zUQ0W{b^Q?cqmBW3=k78!E zTdi|*eAjlgi!D}#LGQ4ho7|AEk%8$z)!{^Ct`r>Lx#kN8`==ir|85=I<+eB1YmX{; z0_VH^eD6WrMiJ<8K0BRRrze6i=K(J~8lIi)e*|9qlN{CElLa-hx~t~d4Pb1$`G#$w zN+mP=*r&`#l|P{3l`Vg#)0P_l4Az-M{+U}~nq41Q=`bX8!Dqz?+}V$2#N}{!KjW+O zHK!^6PPtBJ2H-&2BU2>I$5hV$k^*?5YlFnV=>+rbtS9X)ZeV^Dv>O}l2n^W)R`C3; zCko0V8w(5v?{5xp5x;wqPYa-kId(Q5%@-9IhOfWkA2IP(MACnUOD0FjqI?QGn%)JA zou6{rL(HqxhI!$>a-9nwQ+M%&RzhDE<#dwZNr;gV#8k1LL~(WH?%?PVld?C3X%uwt zNqKWlQ7KSj?8n8c-zo14m-pItzHLU-Z(y9*N|Q+mn=PeXgxPxa-WG-&7zsO zZ&XL1Rwmx#!j?hZu$V$8XO=B^q7*05KBa5x7~5~2#aw6fsU7)zn(eG2`3ODlK#f~; zx&8Je18MW0GrB2cX>_$|MaC``axyR~6x7P9mK_~BA|`(@RB-FITxt~|cYI>~>`1N= zdOwEEkHKJmC5;Hb94lNFWMx@r{=DqB?=JvfJtKfh!q zgnma4EC_hz$+C30*5n?~B!3c}!Cp}Auo46R0m$g4U4znVc)KnJ^ z_B&A_FQQ|hbb#IfliHsXfOg3(3!Ue<&9v+-*Rrr3LRha%Aq31KIhIu0TU6uAg8RiQ z!7k7m2$oV1gV5uqj&aSV37NX$G}zab@zu4`73E1kYOpRg1|PK z-V}e;ye_c9lLaN;;YINW)@jS$$Czd!T#8^pr_c&q(%!g^MM%()(a;AB77u=409J-S zkbw_;8~|?LcH#gq8GI9)d27(eulxUv*ZY~Yzwvs%VOOWy{7iK7ZGItH=~AP|vHSe8 z^pqzthjH-rAjhrZRq~pYwks_w6~e>wSA>;wCrlx!%<`?ir^2jeDl5 z?E~Pua^T6k_cl3t_nx!)roFr(&pEw8?Ok-vY9m?${Hs{5!f!RKJz+_(3*Hlx7s}{FZ@iak_5zzMx=3^YF`pg6hsuL4mT0IBk zvjS#wIj?)YMd_j%`6<@9qNIsa5~v9MbnXXxy*cQl7!-5<6r<14h+0%!k45BcE>=$P zLnvSBn=|vlA>iznjgn+P*&SLYnmvD$GXWzKxuRnX;CV~o26-C}b;G0MW1w#|fs<2^ z46~ZKU6i*)l~n`V3TT7}f|@Daond`cE{fY^ZX8tF1+5Fz@}mOkqDfN*=Ckn!!F=-b zPI09<>u*?t+Ic!Ho{XlTc6d4nJZOAn+zr?vK074!3iajBMfn4-9V+1G^p1b+@VjCG zT}-;t_h$V>$Oy4SX(f)%-pUN7=Q5iFEO140;O+?6W9;wPD&%XX!hmPOugYKK82vQL zr+66P&{`A48mKyl`{C!&^asIbw800?0YAC2_H#C6HzChFg!KOTm^31;Sp&vZ?Tr{s z#He)dJWTI=J4`i#vT!7^9pisG9IX5y5Q%d7JD&f@n***9P=;Sq$w4dQ{99K|x~c}+ zrD>>whV=$@@F~m6N?0vyS_OIGuBwL>%*M6RPC!$~kQUpdYq*xSZR%E`Fe(qt@M~*U zN)ywo0A*m>3~6HG>%%W_G6VRxDuk73Gda?$b0V~`32AW?DTxzEm_>gI^RVK{x;EqJ z&?nR1Jf-X6w@E{UrL+@58<@2s1Mg-Z92PN9MDB$x%f z&ZhYoEcUFdf&O^-+0lQ&@yYq{)WQFhUFYLz9ctw4<3oCY#z9xt`E3p8*~dpG9)@hG zI;iv0&kxQ&KOL$k&dQAEdx}xAH2vXpnNKIY7OXOI++k1OC)u=^J++s;y)%C`u;-(B zhQIOQbpDCs0AKy4!RTy@+Y)~KLW@gz;mauj<+$RrYT~UN65fC1))-@zcXJLu;7^(* z{icgwb5fJ0COEG1S9jyC-Y^;>pj|ngp0j@Ob-m|^;k_Mic#910KA0HO-vn<#fL2Qc zkI9?hm%}e$d>tO0o$Q}OY=qOj0N=&!i0)`A($VVK$nGVw`kb9+ac1 zsW8E`D{cSBa~rJB70?iZT2E-dhOzP%Pyxz+7Ynp%IIX!9Y?1>J`I2{!?igKLEh zj}X#spybWmIK+E$V?fnXbK@_DOE3o2DTXevydhO2*szX_Xzp+=nn6w(#v0D&&`h)J zN*)Z7JWktEcQP`fS8TPYh!@6cx)6Y}SL0Cc=}jXCA$m93Zw%Yia}2e9-zjd${);wI z_o3cEt)qXmkb5w*BlW{#UY8{ zs+SdBnF;Q&HM@qSm~v83#OoJcOz1l*B~+&G5!Qb^MIl6lmzNg|F9pOyYx!toz~<5+ zTB2n`Q!gbW2Jjw}9f$>G3aLmEIgv+j)lQ0RJWH;yX}G0Hk&$^rZD7z#9tDYlC+-d) zU?N)CwV76&e6Lz!bq6?}r)I<9f&na7{g(jsdlPNodGOW2Q@+rHNU5Hl<>c%;q-k>I z%GQ6MoK3H+*B1wLMT806>ov1p@W)T^?HFkQwLNo0M+fuV#!@9g_xpNs)y>O%-iC(F z|66ib7=E>XaQ@lX-Zh6GNm`WTq%-oLa#c_J<>YfvC9h$iyWE_|(hIk4D}Xn!&u&LQ z&kktI19sB}{LNc1n4oCOEAh?-EI7a9x2b=cw?a$~y>iL*n1!WK(=9}V%JwA+`9_<} zOJ`1g#G73bNO3~uO1}6*Sh{6?%iO3Ci0&(38{OUVxur3m(eI)hm3Pp4MM?f^v&D3p zU)^!Hl^LdIb?DN-RKpy%kBGaVid+fcipmbx1x2@skUnC_$WFm4hn$wYK+aBCHd^s=IjIF>WkMSs z>rR*QB5v1O8zeF~y>;M=%A0s}zE{ybD&D~*7_a;MS;!!PBmx@K-RyB$ROr6K@w_TN zefedCK@MvzKd6fDYb_g1gM`ziwh4a{ZE_Gcf%Sf1=cESwJyTA!@}s}5l^?}gxw3Wn zRbvB{%S2-d!x9@oN|f#O>I{;TlB0a{v_z-9?lq^%&$o%IRB%vkvUi)g2=AIRmsUd( z-5?PfC{zk=V2UM(EN;%pve{4Q0*SE8dM zyw1pw)tllGGoJtGhC|HF?yG+@7C%`B^R$&9KYlM>@V{T;b7ex;YXECcO0dJygww|} z+g|k{2OFz5UAD#A4aPQ=V>fNJZrkrI7*8XhM}Tfq;u3E5^0tJ<>o4=y4HdfC&nUvf zt5!1(0_q7z2|STWXJ0Mng-8KPXMz-so$%N%iKiQmMlIb9)3T~wpQeAfs_ujAg*w!uvX%!awkSSP#8EA`ra)(+gsyXkvxyQk`rI z>U(1Yd`tb(hPIlM4_a{q%&IH5IeVv?T;=S zTo4er-wh+oj~iE_VW?OzmVfsthl?pBrP=mJ!UcMsNG-r}Q&CADKpKfTxiK6o0RP=Zy_pidfYOM9i@RMmj(!G? z4S$m>$A9~AZ)0=fIIv$IQ(z9hWNBRM`7Fsr>toxQH->+ztnI-G)$#(ls3Q!2*9pJy z>hCk$(qYtZoGM;sp_KG!mK#;;`(3JH1!y}$O-B-xk`!#jE#DN?ZZw+5e3JmxDBm*( zxcygg+FxbZ4!b+H}%V2XiN3?N=}t@~{}s!!;$J6ZXx0SnfpxM$G|% zU0{ls?A%v}E)lzxPStB71+CXca$OYnwet1oC5@^^FK^c9NxJnSdvc5(W3jGm>wUUr zUlBR~h`#FBPr_5LU8j&=oV{u;6J+E9f90EQn{$5&aeWrSIerM=5$9{(Hbx2CEzS4E zp%xvkq_r!XrN_1DLz961#qugT-`snWnQ*->0BXr$tY`9aGn44!M0B*5%^l>vqHBQ9 zxDC*iMoJkbC(<3jlYda0@}tNsDmLF9)V|_vIOaNfEATIGy-}6k;1lu188)z-6xkNW zJzRgr^ae#NHT*9|4HUaGocbch5_}IRRvR)fk8l&yJM@w4n|PmcxuzCY>eWH@#?`n0 zl00$_EYbHIjq%*RY$uFS24UBr0Xhl_-0;1C(F`e!RCqcDg}lY+#y#iOzgWi+WU!zZ z)?AX3buq~poV1y^WQL)C<~jTALVJqa+MR!V`B0#c|A^Kb?$O1wQ--*a_U|?o#>=qzrS(LGxdLR zcXKMm2KXm+I+NA0zh!&YHA2`fyw~nFChK3P+3Wj0d?tn={z)Q0w67-!ThjGGn4iBw z95^&fWB7ngB!aI62{}-Yz}Qm%8Cjs_Z7vP8Q+~g5KT&$$vpF+9+cVSK?3-7&J#EqdO)uPP&A~zt#XHQ zX?yH}Sov|}1mj|b(6hjq(*bq*<4bXDCoo5TN(_S!Kd`xyV;7<+T)#gpa-4rl0o5g! zpjJQ~GmAo=KqFv2n+)iOWO@y#cz#1&36jca@8$Fws)ENlDG2Q{ge3~Us@_BMolo{2roBe`O$Z#y)rR$ME z`471Bs76W%@1UNY4Pk7X0PuhLe6xBk9{eI3{L6;u?g-s08)ErY5_K1%BZXD>bG?xU zf9eLwm|gAc2=UWLVsl82<$xJu#$`Sk@GmuHByKfe!d=GFMgZja4k`3EEGazN(7Ak- z7P>H%d6m$y%tg<99Ze`;T|h!UsUPnSM2~o^^7}?J#;! z*)z-MLz=rurG4IQd76J+5+tsNZh*)e08WVN8z-envQ#3{m*WDHhPYRgSvxL*A(4!p zj`G;4r6j6$=a?ET5!we_}A1L1dnB>qDvFDaxE zv^-Th5~bWKaZ@QEI6^2i+jAm9a>%woLFKnI7u(~>th?ULZkj?t(5yW>9^0S29(!h7 z&2*QBGszF1R+I8o_AnQBm|8M8>J zYWJvVRww0u>#nH!=z>FkvG};OK9>9Xbydann?U;$PCga4RfQ1Gt!}G&7F`Nu3-Zxt zSm4X$O12mH${v?b{RJBqlmnZp`qHNptZKNKChX4uhouTl4^$LApEp6?ddml2nayuu z$A*r2iOy{vK;Jk{bT&B%(oEsqy>Nr*9=wYiI()P3d{EAQy_tu9w^+in1%Iyom_S^Y zIqX0blv%oqPxx-8KVHt}1zE`a3@e&n+@6u}L-q@-CN78|m-+klMcF1d^J|oitKuaD z0SWR~@CZlVzU@4xVp_=q&t)rF@X@Ki=ym-@EOcO4uDtyf7sVd;z6+2;* z@=I~Mj*rP|9aLj~DE$sc<$C%#iE~GrRkZ>R+-(VLSEed>xbMO9$R>B8ydJ997@0Q|a084}>vkSno zsj@47W?I0+uzZDfs|5XFx#Y_U;fa@xx5c$wQna5@*B_RP{BCq&On?!-_vR09XX2fj zIo^wA4q1iQd}FG*yOeJBBOKdR3kWnNk@@wi&ucHcFcke!`AewZ)>HYls zqUbc30Z@4rk+7^U=yZvp=dR)7cD6tOLBVH#RXvq|)~+n=a6T#N?vu+<&>+I=T_aOG zo)!Huc_=-jnqR@R(R&p^(Cde(9$XsTbKPJj>#1TvLy)JVSk1r#`M$J_MoNYVVs#91 zAL>oTVE2*RSM8OKBUU=N5}W88M&$@x6B-BQWhfj-X7vrrUoA+Etipk$O5ebQycM#4 zt|f6Qo9P-<3FpbEH4RO|vLaPmJp#WHN5 zVBqT+`UTZgxd1lSE|5ira*g=ywIvDvtt%l|sOTWM-BG81fgG_0!Y}74AZ_#yVlk=s|_-7JTgHal$>p9gqPePYF77hY@!tsgB-n(2?MBEpys+EvB}X6^UD(rv9>_a z5jQJKW}%GQ;T*PU<&Z~S-B@FPY*N~mv_>kvo!&^VHqjh2hRGJSMr^vv6`8DkM%)Jq0 zp(JGG4-a>)V6(PidbhF}5zc5yJ;ANn-lrkFYtf?a^<@ay8=ymZGz&2i-|joE>Y|@e)FIP<*^8fDy1oXxxPDH_ z=F(?QO<(F;*%}BpYac!Gi+-sC2{++y9LQY!xnX;8ZV<@jC)?65=_A_820fXo<{Y`- zu30Oa5L%X>6oy!5Ni-Xe3EOb2|4d;#fX?CV-$xp9Uv>gHTXPoJU@2Yc#cUqexMSnu z`dWei&Cjq-(%uPsSH*8PFnivHFad*^vWTbImIPzda3XO$msb^r=E}%i*w4z8 zUAmPOry?t=YXEPR9t0+vc{b!`X*u+mt&0|o*_FoBT}Fm!Rf`6+rCv9s9_qFp>FVsK zXJh?dVq#X@(veQWtW>?`XC*_FT=Bf9g;jRj{1oXPQTT3uHEo!nf%+S!!x&KJ@mYDc zxSZci3x0R#d5BwCH=_3@rBR7Y>-H`4Q3>h6S}IQZuo+=_ewf$7eVeJEqDi3)E# zqBP=V-{Zi%?ll{$x9(-4$$Q%^JU*tSyS^KR<{Mr<^J3N(W#Y}MLQSqOIKfRtL^a$@ zZd{EF>}Lgky05()=Dy(&4G5d5hD7p;7*;HI_?no5gG~dz9~`v2D(2vz$z?GI2Mw=_ zIXGx^VGNU-D97A@)XvX!$ZLG1-4!sY3uvgKnrm8y^hGwpgC{k5)DQAge&GMrfWrjH zZ5vx2zMi$8o4i2F_+nN(`JFcX>Q74R&sxn#3TOB1aP=l; zbEi@3yX#N+mTjk3L19dFE3uY0X^P=T+f`ays1KFB#Ypt`byICet$o}wRg>+ymTGY*$c)b^*PxE7A_2@M1pnDCNG}2Lb@9c9b$q zUBZn7fl;5=5?~o!hlgys5yKVKqyItYv|9-oI*_5nE%DZ)ej=vI< zu}r*+93w;gj#WhGPEM>1RuLOat|s=bvUy&pO4ml-U5m)wV*AO>-TXzZ4ZaJ^%{=XQ z0h)y1<>K6TotdOI67Wyg$mk?;`-35cWqUZR)W-7f3MKKXQFx?b(j8QIzuScIrqo7% zVZ0w3NXQVT8<^CFcJB%%PDiMlM&z*d661wo!(p>gv@q7aqQ!aU8XL7w|4PF}b7FH( zt%Y?W{HGQ}%I;!*Q@$iMI#^hRqR23YT8Pnr=c3dHL&W>E`1$4q@ST*)MY&(AT(AJ) zVEkkNKa|lU+XC}68pUg~4L~9fRdua@1qSMPvwC>dJ&niFBR+xByB8Ki zesM>7GSP7h0(W&{$jd$5L2+)>PvVtB&vAmW77IDbTntN(jHUun%4Cdl*=CH-UOnX? zI+tM`nurGCKA@6$xo=X*u!?PERnA>h;^)QnBvGnM!)BYpqdl$~d4iwaIh8$skqRV> z;^ulanOmwaKKkb3{Nyu7cxUPv3qrv)A%QA3b~Lx+le2TUP~;0KOagdX;!i*N?CkW* zuP#1159BXaXdGlov3tJwkeqA+Er$NIlwW^(_EjKZM+=OKYw0e|zd615=KLd7U1unm zHWg$PSzAFBrfFNof+UQcbR;i-$6SyITiOdo*JFKc%>M#&WB;dfHa6%}=7h2h8!om= zUS1)_XA&OmdMVhPpImn5VN&uuN#Z zA;QeQM?r7t8@)H65WboK1^-(o@m=QbQxmda7fF#t9~>*r`c3jcp~*&n+(LAoR8?W_ zSf#Ni`?xX+UaO9#;@{*vX4+qWGk@LXoR;WyoohSZzHR&7&`|fQREq%4^&kk376+VD z0|h2B#N+TQv*Y1kZEwrHr>z}13Axr!uzIWqapK-o0AV}-8y^OIeSIhRrtG0`RK3c{ z#>SS3wTW#+YOLAV1;l)Rs^FJ=p129VT9)PP=XqEnGeHO|i>r_ktuzoXem&8&^`ZsN z>14sabl1u+;`a#@Q63NWpgdf1Vu|?I6}UG}eD%@;YR%zH8Qox$>$6U#9t(+VD<%lY z*C0SMTx+3=8T=z7P8ez?@ng(T8xwsvl7~t|B0aFIz|n;&ct8|?9zuzBT-D?02A^b^ zlfaY^5T7YPL{pyxS|^Nrav)GhRd%mlF*6Q7(Ti z@GzDOmugXeIj&GJpeg-sK6)jtuz0m^ujt>XZT=cdC$our;kIr4t}XG?l)TY>A(^%- zwbg6BMP?X(?p1B)Bg%k4A&>l-Q?tE&JxOE<*H7~Em?xlDNj=J9*%Yz2j0S?LhiQSP z>}6LN%||Cw!d&(H4EX(CtjfvGq7<~!<}mHJd%FyO)YT{)SN+u8+kqq(v>rgZ_CS)T zqy{a%|532CUau9#Q>O-ZOmEunje~);kJDCiv0f}w#e;SO7-oltZjl||75u%7b z4MQA;&=9*e2E~N3ejsjOZcFXZ-rkmkc_>@T_9G@eW-!-|nifX4hZ|W_c4~Cn3^9FK z-97@SWZB*3Vx@uQ?PgeMW_g?Wv5cqM&zH-8vY>>Fay~5paqo>h#gKHZf5Jnxk+V6eEzJwW>&Q{7G>gvWEMvC&f~;@(`W2u+}BJ zi$81mY;fc@pnmo&Exi6pCYqW$&3+R3M^!i5G!$8Jx8?*4iuxmO0}3X(RhUSgP+LTQ z*wWI7@LVh)d`=}E>`AwSgMZ9HgJlxHkWXx|;Ij=BYy4D8vm z1%WLojRD8QLVz-`C8ZqOt(TlLo=u-Kk?t7FE!{6f(O0*q({n##XPxq@ehDPDTcS(| zUKBr?uCWECyN3y|clgv}jNxjBs&RdP@F7*`Xz=bpr|6z*!!Fr%Ow&uxF>BRv!8hB! zyDut?%~g8};qn~oX2BUXUKT`?aI)Y`^06QvLN*BKz~utst7kc3V4?p-9}KKlt_udz z=6PTsWtIa55@z^cAlb(57g+v|L~2G+j4g*`<+xrT-A0}lG>nYng=cO2E__CRzit;; zLZ;URl15G!_-IV=ZChKH3v7oB3w&ggX@F17q%V*h`jV{Oz2sP%d;ONRw^#XOYwuI6 zoxRV2RZbvMs~n$N?`GktM${_W$%1p+`dGvlf41mWEc#8#VSYXJtuSA6tw{8+%1k*{ z+}qDWV%#bcy)BvIRAKu(%E)zpsqnO8{L#pvB6g;LmvyjmPCV$2TcZ~8u-ts-KYQpL$dSUGbm(x=b2^>G@%Dt zb3E|a|ZF7?>H01(7?+W9;pu4`of=c9Y!sqz2;Wx!t*%K4>$xvx@Xw3;5n$;tV2eqh20Uo0Ji1` zgbr-xk-f4hx_A8m$&og@(H=CdOY7!KC8pCOyk4Rr0r_VQr&D06?OL- zzUiLDT-B?d+i;&b+b#;p)T;J9+n`*7ZWPp%4GyDAXalvyz+_35ra zeYzEgg-l#MIW6Quqer&|>XB_aE@Xn^$$6m*=Y`ZflW<_*%wAj=sB<@PVj#(~+!!(e z*1(m2LGP9cC@j(LyEBlOTXSg0*b}Pls3*6EP23u&DZ8{DCx!|8amlsa+0MP8Qxo!x zzJ7GR0Xx*cJLn@olI2@LiNPGdXzZadwSlJq(Qn09z?C#x=&HB0e`-2UXWBn?Vm>-( zXst{#wy;;G_nP|-&}*BUE)$zwH(uTy&^;=DD`vId%1;@#%uHvknK?u3nRm^Yxz8~P z3-zbLxO0Q?v3V8rJ05q?zW^F37vs8ZKIg|40I>$b%u4ltNY%$koR}~a_PNrY`YkrR z@lPQjn8#S2t+D1=ZExJQ#j!p_i?~9eL7PwpydT4vF;ia@zrI4Pf*MpGLDrZvo6@>} zv1RVtn%Opz9$tfru9LwggUS5lhN5=*2oGGKQKwSPy^-ZBwYI?330O_@KE10Ciu0_a zHAX8fq`S3|_66$l3_e3nTX>53wJE9#v+I5huTA3^TxyDqVCi@uDmB-(pmeY2U{ama z7&sa$?v3rZ6PDamT9z%hvF5IPH_=~zM6pR<;rk*lKDF#4d^M+k>=B8bGOTfUhvwmW zx?mbRTX06@WD(63uA$Oa=j)}6QikP~w&=Ci=-B>gOLbF4iy>*??Uqt>d9FJKOUy$tE3t&m8tf znq$ju=a*HlyFbdpJ}|I0_Bu=H{>vDQCFTCY0Z;5~P<(ap#_s5X*zjyaRo&Rb% z1GR%le){&K)1x~k91Wb+J&=4bDT_C8+PI_Fo;CZ&?cNvZviQW5EUu3}9K1pzuU(h3 zUvK89jK*S*L2zM$btQ{$pkiBp=k!037w8GuL37j0fWd^e9w!UZ|H%TJk6MqV;K5r^ zhe-S}m>%B^_m3mFNlYR>tZ3Xr)3~-xTD5UbYaiOyK1{YYv3Oa`Uc5x3hvf=3dT?85 zIJ=^Kjbgg*H%sWnIbhtAzYTy7n?Q747qZG%#pUd3R!pPbJXF1T_+Y(%c^Gue=gYZ_#X><;dAP(`+QTJ`G){)5nokEY;=cZM`Ac!S zoI|ln5?E{4b#7f>0h}_ow(;Xf9bvG^^a1t)hLPVc?0XO+Yyur zi zV-l`vBFY~|WTw)8k~LbdF}FjQ8YaYjTrx{dJ5oj1CZHA&xp)-Tv_P^x^zu+uBs};U zo92>9G)KOF**n(eHfrGKGQ)p3%rLQuV?ud+2o%O7q4ki)8ONnSVHh{QB&LZk_!1z@ zz;9X>RuU+MWw`^?rFa8>yegcLep;3{LSBkH!mPp{ z>FlK$B<$rlB-BbQ!X&aZgMhmndw?j+$pp4?<)CIgtE;=e!x|fc$eMnI+)7*$>FyE# z_G+6}1IZZTop|gc46fftS7(<6ELeS;o$@9lW}3lF-S(v!J%ljz^w8u4*he(0jmk!4>ML_;W zuqfQY(d862}_*;&oMPXEBtGEQNC z;V>I`^CRO)elfZ{0xW%z z1f31>tCJu3q)6}ZpgY`tvO7o~alUhj0bxE%Vv6x=rzm14b?jhq>P$nO`fN2+k z=U-lnN)2}ZiXZ?e+W(Z&y@q+)XL&|{oK|qU85K5D4o>If3_@kmnVTcrO>!1Cm^3+= zfUjVF&pFSFLUL2fh8rp}+mWbxIdKA!lsA@K}*^(9E0b#nTZ4MgNpx>+=Ct zyfG!ZujNWCU1+_|nykuzG$5D!Zo=JWT{f{zW zj>wTHk#gbWNls%@1|&k^kR)DsEvZ-Zw(R(=Xhns%#>JxaoRvlL7;=-Z@od1g(nxao z8JERN=tckzQ<#_%3QX#L>u1#GcUIVvkOD|e1?QBDj7J3w=1MetI-6xPoQHD|y#VH3g#V?Ly1MQinwa)O9EHtYFcu38EM&n7AoC9_z*`|OB zI?$5m#oRj}h>g#ZFW=u>FzzFx(u@q@SlR|Zu~D9V@pO0p88^wA8-Z&<8^R3>gq}Nu z?f%oJ-Tj?8q?B%A=t8l-q<(5yYfDM(q8A4#t_KMRP(o?K=CbtHz##!qcW$O6JRlrU zDJ9J;2=(}uCU<>*jtZ-ohoPi2xOglNE{Q--&0y%4Y5kr4R~go?;`&uT0AL)gN9HCu12zmY*n2};6R`I{{4 z^CC3U?WygQNCZV29u=Nl9S& z+TZyc@=y4GEQ{n9#f?(DNUoR9Xm-(esV2ZLR3Y%H}Gx=sdFaf%9+1oNfCxQLAY?=a_)qco@n`y7XQ}DRy|iFx)#TUfb-J6aKoHtS766avl%)) zuHgsT=oc616tAv^&6l;aGdeB}?kv2B<=4@5M~A?p&krwEImIQ#37~_|CY+Gnsa}ME z%MoXP6TGw}*T)iIFoZ)+cR%UfSg*>J^LK}Iv`5yw?hZn=W^~^MBKb=VgwT$eqk$v zX;qRmKXNO8xNrUBGI2i2-I4tfu8 z1tY=m>smnmS%^VPJ$)RdUYRdMulVvSm#%P;lO=IGWVzsK{8j`I>NZ3UQt)?QUax?J zaH4uf_062(d1NN*cxMQwWr^#_!;fysfAVN4tQC}uaLbjBaKOR)>hRX?;bHf&yV}2h z!9-qj3DSjRz%Hk6 zB^yY88Ip#rMkh&l;0?3O(b?8KVb0qq5wW%+gifNZVFo^pW=k?cml60?n`(j5_^P+J z_v69tes^#9Z37P8wUdqaAAZy>o1ChD%s<5p7Fl^|B9bU%=GS*p6Y*o3?(}-gB%vHG ztwV@H%`vc|QkNKggtw}(Hw8VJp5M>Nql%buN2yy$?LkL)|GXiGtHoU!a3CuG(BU>6 z$IjOpmyh^&;LsF*=7=BgvCf$aUM6y#7WDH z7AsYf7#`Ry%GP}$q+yXt9-(59-@}KNaLbVw^YF)Qm>)qH0Wba?XLS81e4R~>Q`*1x zn|XY>7hsX70SFri9U1yjW@N>G90x+1r5Yfrq-u~ZX2AiAwN~|}8Eta%+bTlk#;Uv! z@?8Hacv!O=5K$8>tTUADlB=~5z@vOsgf8rtg^*62*MTiWz7Ep!(QJx(k5R+`5yLP} z0xPb~kcFihMPXbgvWy}Qs*?JXX<2rvHAC`fG01xI(Pnju1t%3q3oNaFjh0y%aiq~$ zwvKo&pMb6Ns9K}`;8r+UjEsQ}*BFhaCx)iwpM3%j#~ zC0%l4&Q4n8E3t)oK~@5P^s@p+RFhP}m8DJiSpkzh#%ftnVM$S_k#x9qdDgzLoTjlWRQ2km0F|E4 z;)a6@(Kv;$KYy?J`!F<+R&k7CyZ>we_epjK!(Ml9cZaAz0L;^W-r*s9p;n?rlwTLU zm3%*?0ESDnbdn3#N|Su6n%+>-{lVtKp$@^~v;a5M-7rk|oU%iBgxdbBE)_#O2J90s}C^kKIWVI2|6pk!obL7s2e_sm% z{x2t>G*nIk?ERf|4xLove~lJ@sRq(O0YBGJ(KD{*KhT|&)N zmI_d_84)CDc8{s@BT-@|HpAxW;Invah6PwaScjd}iQrotrpI`~S=<#MSwKC#QiEcwg|ugQ;5|mJRvQI(8sPdmqIIc=*5x;j^>FclRiU)~Ik)9U@rWb8L43&p ziat7jG0AC}N4-dBAvx>EZxWcE~K`uQWundPBtHHMy#{(uK z$jLV83TZlb>x!uorvSKOvW{6HtmVM3fP;2_S~gtNuv%erGy;ZW^9~vzS*#o?le!xY z0d$2-0%+xJU@XQuL?)N3k4{}>?c(vOD=S8EZ{z6}m&MQ~qJ&1X%p4KrA8I2Z2v z&y04(AdQLx$tkHSKr0@el}fHo2)J7{b1TvuL~BKQkw;(Ju0eW60L<&l2rOs2;f+6{QA zD|!UL*wU8(uo&=VbMwwqW?JQ`{mTXm1()8q?Jm#Xat4za<|5qq5>}Tui+Qu7B0LOv z%fpPCl#KSB-cnHYQ)@0T+P=Xe~bm?DpAnb zt;k_Z6R0buMchiUSwN*cSDGrGX^};oF)!!M-xTBQsf}25Sm6#R5S$J!*W>esHt_8! z{}lCis|cbeyQ~^k8bp373{F!>(oX(Yh~knIhH5+mD)hDfjtL`CDIQQm1#}62jsH%* z_0AZkQjx@P(|e;}wN=t}hP(o@1HmSBI`e7vyp!JdR$JZ{c>chnw6yybI|sJ0QIX$x z1L_>roHXmV;0h*tGRC@&Y_Wf$4$;F_0clpsw$+gYF))#$!~*$i7Qf9T$cK>m_d0~0^?F>G#Co{ z%5)f(prFb|fk`uJjO+H#&}1>D??abixyvdu!ewn{Xx3F{#S(U#PCjsZPEyfuMzxsJ z4_J#$U5TniR01pMoMZ#~rV0PK^BOJaCd*;_Ca$r^DodFmv$%sJ)mgTG&xP-T5=%g} zLhA{IM8t^<2$avZ=7J5fWp%G&2>nM~={o?e>*tHsv3Ma-6{aWn0dw-(Vsg4dv+Yur zN^Kko;`=1gO+y2;dn>ebIz3VhIq{? zdVm=HwG-&I6X>7r1bXcOs$>_v_5j_&q`FHF(Dze>eh0<$oiTRU!PPO9lUa9Y=Rs2$w72|8SR24D1Z?_b7dO@(RJF2oQy!J-@zr0c3 zPw&(pmE4s(is#8D{*R|S?UDkw&%eYeb(34_FohH6<9wKH!ytRr%-wfO+)GoJ1kK@d z-RTv{(VBTBr@?|ty`=4Pwq3Yb2fOl#tQya|2OoDfnV`h^lS@2J3Vh zTa8W!q5N+uwCvDzAAD!>G?9ObFS(=_!HQ$oY0c-y+#^DNK(5x)VaSZTwldC1_>!4= zKrGoy;XI&z?@Z{tgliL~^ajtoFfa4+*gV1(vW_8)cBI&0A;8j3>eRVOcSGXrIOn@) zGWsjaWmsUgVA;Fsg1koopq>Md$CDXkLouCS;Tg0PKASDnW-ngsWheRfKj0N;h8|DP z_*a&9#;~-1#Fgi_8}FQ>LVM@Q#yd|p-Z_MZAi&O1{tKv7#TyX8S4!LbmClfdN!H1r zm72s8=$~KLfr2?CB*?19^3d8Y{=J3IY#{+Ac7A98r z2AFCBSIy*+?`+Uq*WA}X7Jc2a7ahvWcdR1lDw5G;3P1HYwQu5e8hXwWx;$QXf$R`S zl)XSoH0cJ7X@(Tjsb6i=>x=k^6ZU^Q7*hNkXwI*k(-W|r4zu7Gun&pZ%UMLFf_^XJ zdFv^EQ4t{XildM-SYFZ?=@Nf167v(sq24E?(K(zNrsv^V;}*|R#*w>>GW5l8&y~U} z8D=i8;G=5&1YNA4VR(z8ra`o$g!G7GI_{%B8P(`j(bXWd9nFUos-Q<&V+lfKtx=zh zYK=1V`p*}dOK1vNZwDgW4kfZZCvNhs!u_p(EcmoLIybPfL32owII z1Y<^eOIFFgcK)!>{KA?Jj?6kx3<9}Htn6O4@P?j-yP-!eX47p&3Q;Gag|@b4F7p;3 zx7UK4d_nG|rluhKtGc|h6Unwy6cje11px-iw@vM}20zUEPO9y{MlL+~!7dwYRpR%5 z_cBD)?c|cnA1aoQA{Z-LZyDQ*8iEqc1V7)+C?}F-TGwQos&l^OkF)G@Aj-o+4&vp< zOP5yW77ho#?cuWADwM3)+sq1dka0t!MvbU31z%@q{0fFj$x7PwG^(V+!0=0JC!~<> zv)9`Am&K9A=|Y^fL|jFTpl~?bmZLX+z>>w~aH1^9s^gRhWgQ$R9CgY;2J7+$?NAYi zg{EG87^hx+7^hx+7^iA|=42YXGZ{jIpcNKmow<^ zU*Vplr1`Y}CG`f??$F)$Q6&8MU4MTU6W@H}0ksJV%AXSM-(icHl4Aq8sjhGsI1e{5*S=HsGamg8Oo> zI|$$&3f%G8XoheI#=zVCz5W1U9}w!}!S3$9E@IGo{CIcZ;b297assPLDsekI%VwR& zGq9kg40y&K6AEtNz2|_JDg+1VI3zbq#|5$HaP~K-+6Pt0JwJt^6B7J?6%z`Q{XuvC zaX|CKDm42u@E3$c!KT6_A&W0n3(=3N5QTTJ6`wERyP)^&?%rPixlsH#N|8F5DSn%x zGb5yVO({+U;D7kvALdbd^0xk-P5nDBM<}lJe)&r@BhSvjyP1x0*p1VRv+Oz@7sHOx zygmZ0PS={F%jEd#42>9nsxYEXrsD}NlA^2VL3r9D6M`ys4#Nuz%4#+}-L;Vf?~PWt7-XB9s#H4Lp$RZKLJLV^R#>nV;U& zw+A|$oWMwWlEMQDmpBPP`o@Mv5A+xG%MtntFxfB)s8slWAM4dE@1Dbp(XZ2H*ou~sz^P(0iQrO*C6U;ofS8`L3+MLCVbx&w;p-oV6by7IBLh!ajld=l3*GWc&iUtO$yP zIOsm#$3arwg7}``qT~x{12zJ1aolLgLXVv zY+!edh9&}|tbqw~dkHWU_@>n*#R5b@5duy$1~9>Yt@A#V%_3Babx69GcV@*E85^f8 zTHJiDuS|s)0{%$s!Hr$X$6<&HIBD5-X*vtZDOs{lgKp*y=JsSQ>S}}eN;V2n5HKYI ziiUoLkQ1$IPorW<`kaR3^>X4K(vL^3{c$x%i5P;+xe^=21{K9a0jx+yM;d|d@XKEn zDI(B+0uI80y?T}JXVXAp@E^@BeyP)H8??(C77A64=E-GG%^>SJ&1aPU>ZH|>1Cqpm zG|A=ciY1Z-#{I1&%(>Sbl2l}_(f2dgl-*xOlQTSi)M*ry@COUimP2WV6>r0B{%tD& zT(K>8R;yU_H1G*jl0@TZFmlZ_n>UK>SvvNA(xG$~=Z5_Ye->yo1gWXh2&L*c^5Awb z6?rnxthxGO%OTtvYY$!6*C`kYXX!zftKo(PAK=>yU#CYOG#%bNMu)a9Y~nhuqZq|D zW(RG=M?oib*sst*heC%O2?)YVv?S2Gc2J7d4 zy8NO;V==!(>`PeYFTpiOIt%AkVD0dIAk&SKFI++vz3N0v_jF=c#VuU=0Z@s#woYkh zFjt-uEcSdt%e)*)#ZZh@i9o3Y==v;bNNmMe_phe+Z|wS->`J#sdR^&iJL7vKNWF39 zCl}NqH>c`$qci7~;>{gM2)cfy7*yGR4mr<=e-IbNhi}>v!F;3u0jBN(7Q9;bUv>1x zdE?909MdaQz5e1IJel`ib@0F5L(R!SdjI`S&fWXyd2)*1d-chkf5)}ILF1uDUS0ih z9;jJ=)Oh#N`!MeBz3%rj?n&=9|SGFNpq)|qL zHmZl+;j=@(Ila$&;hSyz*z0$9c4_~ZKA-Iu2@i{W2vWceT-<^58{+H|^N+yEwq$qg z+7dR7!kwFrcg4(YH%`-Z>_fGGXS9`%;R4A^yf`7x_=#TllV9T2)fGt03T5I>TX-cVTGPFK~|aJ z-pJh3;{jcSkT2Oa2^?>gw@TbDiGORbr6-d^MQ?2~~=xLA=Ll z9HQeCScqV=D<&$2N(+^)u*|%oG8o;jq&hsMb#N}LuF}+~_pMlk8U9g$A2(eF`_&DC zmbW10w=m9_9hkwq49~-siZ-tns&9QO3A($w@9xyBIt2m!9X0oVs%(YA=NC%=T5;hW z?t)cW?D=v_q&_}Qm6$JIh!f>1<)q`=6@yI}FNJ&Ww&hS~Nl6kK`gqWPb`V`Zb9RH4 zxSBu7t+=RkA0))X^c+r>U3vhXT#^S17o9a1u{9T_i#W95L?#mBIRtHi@ifYtaazT) z!^9O8zo{7BdVV2)Q2s4HOsTvIw?q_Rb*c-z1w+UmA zmQWV3SikbQHOY7JHm}egRov0ctGB6BNLjev6^0AV#|U;U%{)3d;!l*be<`;DfBg3{ z&GdlUseVI6IMHUiZZNwhk2M$rNVAzmKL_;eXTQ2zO^=Iz$4j>*q!WD&NfXl9-UWeb zwfO)5ZlpXssCZkUg`1x3@?EI$#Q(~4YX6}s>w8HL-Ir5VTPBZqgQ;q zf#_mmBW-GbR$JiW(I``zNLQ?Cq0t9)1c(K~^{iH>#=jRfA)j?8Iua-?QN9Hp0Sn#m zq3pRyfE8@<-tJ;%+R4Y8csUIP=V3lC?4*aHY)<5Zh*P961g85S%uYu-#fFR~t-6)! zO%ZRNPManL!@cizD-x;~6 z0>n0@d8d~jjAobpV*=?-2QVXDsbxhwP(ueU1cSqKAb{$l%_NX_?N$|Y@Ki@3qo7ar`a!Q4RBYn2nMrro6gtRt_cJT zit=uMd<{vJ79_)x6xW+}Co=^*!4wZD>Ov!MD0mU?eGbjW7Z@R1-p_r+?ZiRfa*|>~ zv$NM&BcSF;HPe%hKC6>q5P3E^g98vi>gZJ)O9HVHYVKG^2*hVP#(R5N7zb7qCM2n!1(&>tz z%|^1qAaniVZT@@xeXtTlkzhwn$DNl~le6*jgJ!{58*DrnvlKtc#5A9dC=e@HERsBT z*T|jDxeghFwik_1JRT`w^eQvi-s|n|4?F$+FZ$iV&S7t7mu!6rN{^8(Mcv!|awtWA z&BfdgA?hP9f}9<(Eui`mf1unUdJ%wc8vl{)j}6ee^U#hkA(&LcVU*fE7!MW znXxxE3Vw1pu#49meCby1&4ASmNv7?X&BgWmqirr@T2DT76*$~}vb*zaZ+9Sv&e}^9 z;K(UsFuFU%cTkx9%Ot62r`%#MlZ-y!%C}qEN7tY%rmHmklJJ;fU_gxV;)v{j+Mj%k z@2ffhv#X1#=FXzB0yrmLfCDfEm@qB@Sct zpi&c7`+rzKBK{aj5Fd->Ua)i(tSqvz6G{c1T%%z-%*e|l2d_;VlE;VJvUZq+-)%a8 zg#}#H9NBLYfbtzD$*;HvVP2Rr?r?l&c*KX;m7+63TUY4xv$%Z|v>Ka_*k?<`Ae#_e=o3B+YYrpUaI+O{JX%=jlSK=p50==*Y@cGPA$8> z@aI-@C$dMYjx%v1Ap|?p2*W0GA@Eqw(mn?3g1H4TSCN&`^VL)YS#)Z6b3#Y*gSuUg z$aVUBy>_3k*YET7|6QLysN3o2eqOfE3)giu&nXY{I)2mmFlP*#{J$LLf3-RsJ>E-? zazd`r+m(fpL67I1UUL1(2VlZyfH{+bK5G}GY=p*1B7raL&1sc^weXu9Gf)+C&T#k%+}*(&FVT|*DH1ztkP;0K1mv!WdWlwwy@zk-V>E8; z+5@@m(ga&~2GHomTA~L|B=0=ql240_@?e%1#M0TfV#J|Q5QG97DwSW)bjaC|($BrH z@ybanq&H808mwQee>jd54@I)Kqt8F`@fhCd9A2S^yx^_|50KCaH@e#sr_si@Txo4- z2GC!5ZFFHa4r%ejCT5M9uPtjbG4(#nOS7K)M9qz|(hFSZQDft1rDGVj{JhP1V_F)M zmy<1cQG9)~Yf?J_#48Q)_vInlYonh)S7vd*FD1L`|shOCEDc@zIEF^40QM{*JYYv zMz~cU(a7*cc+xI8ynw%JG|h~f2q&j_;$a-CHMwX(XQ0e9a!>c zasKGt%E@Bg?s5TSR~EHZqWJ= z`AHvlLO}qN%}(;pAMWAp=Uky{F4ax4-zEULfD-TaitIVuq+C<2$BX`*u?0ZuWvDfbuY)`CG=##zvWm0(a^$c4cxV^BQ8whz#iKABFh?Dw z%f+-eAp*l%5LO0+fd)_32OdHIBB5k`6dfNGh%FE{*6caM35Pm`!FEHe-tlq~eF`eI zKJSkmgg!+>;*c?RHdEL^UZ=@^KFKIjnOxHHf4Jnt=+Gw*sSAATJAlarD(6?U$3Ys) zG2z4)fC0VAr=<=xEiwXrB#)gHY7n+M$zfQX(Dt}MwZ%qb#;_D@TzUjKoSP&sdg_Xe zmA~?Tok|TM!+0fMM(P2<`p~j7Dng;Mii%U`igH?SiY|7^`$JTd-UFH(=R^PI+)QW)vHsOB0&VBCQogl@NLM zMmdq3XX@;vmdn%Rn|w+Uiag;7)xm(5(+LuUK4qdfg=Zj{FiCrKL>dvqaaLSp7#ItG z_6HY4K`IPWB<7QcbOdAX17l6_H_Hg0f1RqTqv`o^HuiZtQ;zn>al2gJVC01vLOR1J z@Hw;=@H7g>>F^{uo+TpFILb2DZ69B(!zj37*>4wPDCwo2Y%!{RQ-Qci>Ee?+g~wSs&nuU0J){o#zw zqTTbYZmZR)e6l0^%W{$0EMw593Dg88O9cIXK4y;v-GlCmaO=hqV)N!=%N2@G3}TeX z5l3`UNfufedVW=Cf4C^1>a4I3^298w980y;YR9E!Y$XYfR67(M4-=<{G-_3h1Y;vq zd{)GYE{2$PKqm#9qNLQF&QipG0DUR}r%9CfZXsy9B}a79e%Xkn(t1sWvXBZfvF#u(ZMWf67*d4k-X9A4?t*VCnCT zA*VkcT#(wHjedf%zzw=z*XivpG7p~7=Fa#7V!=gleK><$!KX<-4BM(Ynni?_Z4Rr$ zI+^s|ho{2E`u9N9*udUCSFkNDT68;iVmLO2dZcAC(lZM}yJ{7D5GdT^kW>&5^b8AA z&JwC7iG(Hve+m8g^EQr{^=a(qU+jJn9Lc&vS)Gj;syLj)l5<(G-DF4BE+s4WmWNFXT{mxXp)V8?G1T&7qyc^jnYzXAYQu?WwEqc;&HW($J^f_*x}HGXte{JEZgehlyNY;@~;og|UQ>aGq&f18Omz+F;=0^dX`oK-sNl+#5o z+Ot(?I?2yLe&XkqQ^qt!`GFXx@fok8+ZME-?f2=t^-@lQp)E1{lG(N=93YCKTgCB~ z&i0Vv)8$15?j(76V9%~HY$0mDx9vTVIHiD!os^KkQ$9t@U{lcvJH1H{!CmwKSvS`e z>hB~ce>p)TaNJb{~6m3PHqI2T@aD=5~jziZ!(&^IhB zw#agLcJ4OE2r1utdkEPh4P~%skzd!Ze}j`L^tK;_Mu3^m%McU&;q-(qvt-N! zGQkQUwjdryXIPmXHS&isKDu@L+@L|d@HMGYy8<&mrHJ&qPe=wMoPQ$2eq7Ucx;m6lu!l!$OhkH-x}s9YE9cc1NUAHnbSO;-p1$MzU3%>lPaKV9_Z zwKYomsy86gMOfV67_OvdqyCjo@q}F7;0+UHw+Jr=h8c(CGs>G`o$CF2!u0oHh|YY5 zx#CTu%mj7=cd<^LJ;1iI`&-tBe>W%Eo?g1am6PHZ1Xz1hs6p7?06tpcXS5KjOMrVb zkxP>JEv8!Z9I?K8u($huoo_j1&;>$GukV7R?x_$g)8129OL8%VXpTOi&yLbIOoo@K z2#M!k`Y!l2CjqQuX+Zqh6eqBQ*4hliry~kw-xRdW*^Qf>=bUWw-}8LKe}a6P&*xBB z(l2d4JNDpohDF%A?3VB$lb2IpVtyVTFFRcDlCDRRaLWA zBK%*a@CQ6{M+wUE{DGk zjw0(4pqf(jH8}Td+b#vZ( zzkLJtozJt5kMNgxV5*nStBc@4hEL{^(i{3_?iKzy zJ@qJtEUwg0+re(CaR%eugh^JzXF|#jCr!wE`+G-o2^kAnLe>Qy!fGMd+{>Eb2zd{@ zFM=ESK+e^qDp3bne}(#B;ug;c1BgUeCDA<`B&$Sls;jvOD|#*pkoR0DAIgRofnkyT zqXOWX(N&4&l_QUIgI69ZbAE@5mt`u?RuEU`C~j}yY^&Vy1CW8$;kD%2*Z>GXTACqJ zHaCb4=%H9n^(`;3b6=82)%7EO!;p8r5&l)1I=(f`FJWpIe{AW&UF`7ez%?;O+=e(| zI5ev~s5Hy(53lfoe$o=QHgZHbT8pCa6R4)KD8jPB;Tj`_AbDMVM=@f_^U5@cI&IRM zkisi|3TXU3IGl`KNfaKx(?e#}`du)doX!m>A%P2A04Dw$MGzzK%Xzw{-_e(~|I_Jk zGB_l&Y`OYle|IX1yXv-ccmSqOk%dWJU;k_{%;~Zws_#@`611^BQkz#gc62KK}1j`%QT~RD9(%BbUX&2x&TmT^_5tB9f@H1$71I^ z5!(QXF8F?J1kodsSqRAuqWV&R@*I`p+ZcF>C6Axge5Rwq03UIQc87p6k-LAGKRvB%Ceh8J6rx#@&8X20KH1*ifmf6w+JO|P z(+}K0)tpNZ1S!FlrRQSGH=OF*yLGK#jxkp;X+O`$@S|t%VTCB)y&B*eZm@0#qeA2{ ze`zr$f1%b_89(8SuL1vxhiMZd$=iVKYcUh)3<+bS8)Y_7h55bhF&N~2Yj;cqB-2ZLG%EkUBs!6 z)ktwOO_DqPnBf$jP|_9+k(aopJ?S>fSN>tJ^l#?g7(ae&2chA4xxvo2WAKuZ^Ai^0 z;gUp{QmUQ#YKoxg6B*66>VdrF$$jXw99oMu)p{do-LOd<3HjIk6RgR0hGm>8+=1mt zf2N#e!$Cj4fb(f|255<)d-v-jh>gV(EveGA_}8%;^UegAcA z>U6*uFx7NfeK^HO@yA5J$q3XnDS$PXMNd=)krc^ek(ZnYgJ^}8Y%mg6%@$%L+Jc3V zVpyQ#ni09*Wc5)k%M#+Vplke7h{3E^e^@!PYhl1%juH&|E3&>eQu@Q!LLZcdJ~(Zl zozn=euj_rvNoDB`>}az<^1%MD@84YCFC|QT4yCzR0rnkZkaIi6kZiVvV|&M5hCb`j zL3R#K&Q$+X5P^l*Q}s4xUGHPo)ka1FSUT$eGJ{WW_`*;njVvy{Lc0?Kg+6|Df8gPP z_8+#Amuj=F;#t3ARwwxZz1?gF*aFlT`)cq{oY)U}jeJbZiAE|;0DTq1Kbm&n9q;6- zF8z11JmEMi1R0vCK%HI>5TL%vH2x7;io5fAIl%b&?G7S?@FHuvIPW!uhvaNF%#`38 z*u#=XSurt+Ar=bHTZJB_yOp``f9mn;1|!w2XE?_^T*e(l%uH(tX$-8$qn zX>++DLOwTR#4Ovu@=z|UyOG0c$&c9_<`^8Z6Rt>7XZz%&fx%(-Asl%VA`6~&KlAil zB^Zjt6~L!v>VHqIO8tB47PY^6W5Sv@CXkerhun-kA@SP!ShV%_`oqs0^M=G*Zq`My1tiep`#c|KHO6=V0z-V<>;FP82_rA_0SLceI>y1~ ztr^owk-|oGrRva@R)@Aif7!Y^RVYdBUKe7^^eVKWBzb`9P?FreJ``W3S(U*;O&j#m z*K*Az{6#$B83s&(Y4SmpPd@SHH>=|N6i?M!t4fmFRjY0?ip0jX+Sgl;ldT%n>#ZeK zuht%l|LmM!0G%=N*e2Z{rG#S)!q$VUR>Q&hU{b7hTKF;C9++?Z!5YINuOID@gN>Umq= zQ-Qe7C@fJmCJ%}#f3R1+pRE=ya6*PkEnz(++GFqUcn9yjTjp49zA6O8V(irDa#Tn& z+344FFgnd);OfD2f>AS3fa>!)p-D%F8NwWqe=1LmYn9~3b%g`NpDi9&f3@pSfd1U@ zNP->Kag2#F2V4BH^v4M^(!(#_dk-#nLajNzJs!68;W1kdf01CcyLj00Yq1Sbgct=% zXN~!UwUxWuCWZ25f$4vLd+(Fo9j-Q)shjWm7ZKns+TV}X@QHy8R>5h%57kbmc0s*A^V# zweHNpGNNmFs<=apLm5Ofxd7W^A+Ni5gXsr(ZwOE?h8exYV#=gg;LB`$+^zUvba6*Y z8|Mt8iHE)%1wD&OrpKS4cG73~*@@fUdwNf2l4ku@e|PpqH@40FWcDWaljs)r-Zr=z zjitAexC9voEXSDt1*aJpg@?ag=C^$!oWJ|^?t5Pxfq#x1rLY$Z8|;Pe%D1P`uQVHD zA?+k-0t44u@LaNr6TINAsl?gs@orLmbTXeO8gG_e{B(C)!JGNUS?}bEU(0cC{dDQy zWPlGuf2y!SDZ+>|&0LmQ1;gNoF0%GoR`L8H7K{1fLODeli$N!FRU$ zO%2N=<$4zMS)sjl?A%;~2)?fR1@@mFY-655jf<9TdE*J{8JF#&lE-9%>O4I)I9~7Y zWpEJ%X-gRXsjZE`M{gkx3Ct2t&9^#4UO#Akf0*aL;IPD9EM?%O3-x+#D=HUTi-;5KVW&o$Z(OlEnA{VMHb>&L^KC{&CNwg#W ze>hSMM6iLD)2DV=mY~?-_2*Q{Ykr_3BMk&~oR5)EJH8O*xiIDu#GLblP5dZxPDIam zPsEJbFrESbWhZq!=A(#?@=I1m*sDM7kGUGbojbcU z@G@D9roHLRT=Zc7qa>~mv|{D|CjaY1+gy1>K|qv z0stdUj#diub~Bc<dh&8wXb9U~{`JHaBpx;cl+p(dH&jBFnqle>5~u zEp7Ftik5qQ=BgO@AX_i+O)KnKObxym=eWYB$qoii<~vW8-2>IQk@uu!bDt)ht}KEC z`1U=HZbDAC?sN1%)!ix8u|{x%xI#*Dvg}8HzK7`?d_tvq4wywBcedmPlx!X zv*)e+G)5wGX=HUo5+M~sEJ7`IgB9+vn!T(+J1;zzik-%AZry1N$fzuS8pGN4G=>4* z)2M-_RdZSiRB{>5Ua1zt4G@h2YX+}r-t)uCuf^pf2D{|4;Qc# zBw%lAirj%&qxZ}R$=*=8QwfIm@Rk|1yCCH>e8Z&Xth(kAleM@VL#zomdf8;ftybJB zlSHwS8QVpfi6mVNHDCpMf1MYoruGc|BAoZNXvbSLzG|VK)$DNm19$-Jv%?*DQ25}< zH_@Aiwjj%a9njCm`4#o%e{k?Sl!kT}c?(esk`UYsaYFfpE1cP5c#H3?U1Qwdi@Tf8 zz^Bn|MvxQuSN#*zk3hSEa9PAHb{hB~<}}bs!Xgxsg33e+h_1sYoF{&$pS5gPdbpOn z`7(#j;4ZiTEA!`PL006$N23t!6{zkUV34yw;3+kRIYnKdAOss>e>s2F1WEH=Qpr?~ z-%AR1cbs9Q#20q=R{#s;j)xhQ_RiOn94g`IH70gc*o(-2FazIy3qw|Q6nX@7bBe-> zgJBO&PcxJ-d^x57@w6*)`lP@X$ z&G+y+MkSX78`k^q$tNV<@L!gjgnke|fQk{~m`FcdqC7*_QV-7YWmBK*gu)qN(}f35oa`iAc6YpRn}Uia>m z4c#wELWKECx+33*JbkGSY}Di40P)x6;jPi$G+4hTNaF|NET4k%W)qCJiBmkzVJstF zC>a!Y!G}BoND_dFlunXIS>fW~C+EGN^D$}+>ysR1Hu2-HaPS(2qH@}9T7d$L&hfB% z7*LASkm>U=e+c3N#0R?_6_rd=5 zCkzA33{O6Ja)2Ma$H#cgtnu(<`)nU}t~iGi-uLn$e;jZgpsoJM@!oba22}?%A%gP3 z!S3$9z}cD!=Yug=D?&&=VFJQplrZwMz-|r*e-DCkTT@j*ZMf=st0ir!91Uh0`I+s3EOOZ5fCdK%S;lGa zlb?E+ipm=1c#zkgb@xV~g@9jVZ-T6!jIv8&e_GF@+n;jXWbSC=LfRPD6a z&shAVD*6-F7UhmU{gxm}=I#kpXf(Segm!ubN(7odl&3w|b|+v>n4)-{j`^)r=+k&g z?R#^X3PXeB!m9m#&a$K>EO7OIw2e{V8-6$6#zjU~!DWs_if5N`0 zvlhIM7j{#A6EH@G;60-4u0ovb7Hwb3#Rm9^+NmG|Gi9qE<&)m9zPemDX`5=FW#fJ} zB6`wwU+BD%RKpSkeJcm9+UFLHNXrIKk=p9YFM8<4X^<_+-UwZ)8PFufQKlsafRhoY zKOP+WyYa4|g2IMsXK;FIJ`66Hf10%e5Dp36SWA*S;Q+aP4Q3%n^kNheT3wD;nlOuR zK)9i`-U?3A;=Dje7{Osg>)iMe`M5q8rzjR6PY~(iHaKZ{nsNsAN37+ruWQT2yQ8Fn zk|gGxqT*~)ILgJ1As08JW=C~dU!ZdBaYxH81Y2;^qj+A zQko3qD9cW&ttg^+dztBXSItx%p2!C~dwo7sA6_jtgHAjM4GqFpI9D2rHSv&$Vvfb^Fx-eq zzav8A7D%L|kY*fRfBtr0|s-iG6CJ0xLI&TBJ7&2NaZA6l;)-X)=Y|7 z?LMdTyf-;Z!Pg`ox2>sBReagn5>@_-U@O@GeokLYI)(%=e~)pC?k|T!wX>C(zRbp6 z!ECm{R~}G&L}V>(Qb>#pwf44RzM)OFib=~?ZW&oTe@+6_j`AJ2EInt)*Cjt98Uox} z0+tUh{I@daamt%={A8?nGH7lysxLM(`AHqlv1U6t9twbVt0R0JT4JQ2rXsimfJR9C zmu|_sA;bu5e?mnwwyDcVi%5OMnxnc+zOwuAaeT$zX#&`RIrm|j zxE8c+_B!^~gra%wMpw73Rgd}QY37;;qS+hXZ=ai;|I#MzoPG9OcnfPLjg=A+W&9fV zELyzml_xF_%VH8a)2q@?}wQ&inMIdd?qnh?m=~!%asfS?O7qq5rcu9@1pg zNpcq?F5!RuOBhAhC7>(2|4p7^_#sz+jXRHVR^iSw=ek6B%Yyv>OxsC^PJihfqNN>3 z!aE+-T92!6ydu%C_8$h1Yf(HR_1!%N`G^+ff6>FT@>LeL;azxq^jQBzm!0DSq6$A& zbsG#tS#KkeZYLfQ>un{+v^MXtEid;a!V#d`o+b+iQgX^w=9I3nUt+r%`l=yRdl%Fw zi`GX*7|5?}d~#13(gnB*fG$)AybFAU{-^BtsL?vULLD-{;8nXyN@|rR!v2$2NJDe` zf5B2s?gR988Z|~OQ3mt4Te$)0i*g|t0EE3yxj;blmlTIfW*c2wQ+SpC$ zf;@`c9pGa;_BHm~*W6HQA#S~}io)pvniR8vaayN=8PShPMrvKB%jcMbK6jPk3yH`yAr;i)cf5%-Z zrZ`oLE2eZ*o_z4+!zZ8aV%6|%0zPGgpTA~9A0(KP&T^Q!V{|R!<7PgCE-teE;B?TZ zk>%$Tw2RKCyZVI!X;t1PkW}+R0hqZZul7kM$!>LnYt!$Iv*5@EA&4pd2mJ^l>w9{2I44q;V%se}KZg|BjB8 zwX*EQX}N*pJ!cQCR;$%&wOZ{>xtuE(LO^i*eO5kC&yuhh0QvS~G0Cy0I-O2nu7+?r zLp+{iIWeUf0kd>U$H$W#BSF9rLf=9yymo(kui z8t*>;IyQMy{*=H&e@+W(|1_KZz#o7>v-v5=oVNoK?-;^-HV47@bG#NwiczKPqw5nWfBuSG_{c2FZkp-ZtU0@ddKC{Mb_+IHMcqu)5VqLWLKWWh%HQM?Il}4 z*Xi! zJEWg~e*({!Qm1%cm{X84lc5{?HWXljk7%EzKCRl6k@#>@fyvtv7*(IWbA+Jk6uQDh z#IP8R%6b&)z@*y6r&|USDOOEv1jusy>&Y zsKHq=gHLx6;NpMfzqj)Ld{F*9lj*dzdAHsGz(C$X`~N+*Al(=^nXS>*C%84w^#Zbb< zIWigJi8dH}HGOztinY_?xDt%yxXSz+^>A)+uSFA(Xcae|s_~ z!($N{9@}lpWC&)#;?%FWgjc=d?6sppW<9t??Xnw$ilz-86C_;Y3$vEbmx;s`u zw+1>c9G?{DuwtOZeJRx&`n8DL((QW2Gixi^UM)iL&$WVZob#>WSPY)!bDZFMB;ur? zKP~fe(3j~Dhgxc_MAU*3d%i^`uHT0mFowZ9x0xI5GgqHuy+6(K1%AAje_;kBuRX}> z+N*A|Sq(@L?+_l9oTn}14C^ek{dZX-R&~C5Y;CK^W7?FMBIk-`8FH`KB1YS??iCK2JB3m=i|#7FwqRxTNWXgX z%7uk*wO9Us$+sZ8=gnWbf9m4_gfImjJIHs(VS{AzK|{ZV9m~_>z{KSOLD;+xgjUtS zul(lcbNa6BW(vV>^4a0u$M-*L_al^dxl4G5bNA$fV|>+8od%s-rs@m|v}P{cp$AJ`dwc*yRqf3!xYBEgNV-%qXd zKlFZw9K)j!dnhAlS|F-FptpYX?PmIempD!ZmnvERu9npTU`h6QIfduv5Tye!CgpQd zOLo#WAKK#?c)83cV|2hfVFOdehFM;}>-W^p2y2>twfAm0d;THR2K3=m5Q8KAc_ayx zio9%Tk4C0(T0d^>e>}OZr?p)9vYbwcoAuEx_+sxsA(LXJ4}M{~`lqD=w%ZHSdrm%P zml|ZV$}Yl-Ks_$M)+^DsJ}_Psnu( zt?dMN%#^7sDa#;G{iR?Jt1u5wxK}b@$Qsg7-UyvRHJp=pf2hGcj#1zBsDvmF;t``U zMc~I%01l5*X|NE0d>DqSvH-(WNAZcZXtHx^0O(y<9`NixJUSG&6_bu{?uGRJE-&6= zG(7$1(he+eZ0(kArQ+zi_PwS^K;VOV&U@L-bMI-JHXr`_CQ4v7lq`%l)|t5m_6BfS z=j_|>`q{H#f1)p-Sp`Tlg0`)ywyD(Z#mog#^Te9|Pz}4gv_(ROc!Pf8tO@<(Pv1|? z@cpE`zWp@M#_12=PhXmmxI;g8CtMqYg;m4)ja`N~O6mY$C!lC8D|f2LIx81H+z<6s zTjk%Po*J(Y&QgbzP?vjY6IkL(0>s_q2T_jbC6Q+8e~aA5w6*7MVA61hf>y`VZ|vBi%rPOU@Sk-R z_yGcKe?GJ?p=wuGPg$A4%>Hf0mF|f#CRoC%G=rN{%ZHfxemN)ga!61atbcU=a37hC zi-akRn}Ba#`c8ER&*M@ah!sAGCu7^|?gaH%#Wg(O)vtwQJ0fb&!3%T=y{|SNOIM$V zRccnwZdw!HF-(IZokkS|OC9JVPnPwmj=_2Y0A@x9obd-DL$>xk#PlSLKhnU#FbD zMT-#@fwhSKw(pl2HdmtwR>E#`J^J)jCCM^Y~&RPc4 zfBohFB|^-&BF#%BEzWGk+X}?r1Lqdlt8q7ox7D^C2!F0sGH|;wrjhuks2IihopphF z5V=T$2e=*jY zz?dQaP9`v&UVnla>~C!}x_|V$n2kDi+n&=;%YVDg$o2bQYc+B`{ny%!G~$aj70dEA zN{S%7P}dVFvw&hbNf!H0x!(hE+ZME$_dj9WkOf=inpqqE<=lP^lJ?HGhnbFP>$v)nZ4T!bv8DOnGr@K#%&B?K$ulViwHGu1lu-5>Ngmnv$DV6bZlI8e;BIUV}Y3t z10_MN$Spw}VyD1Iy!Hz_dkd&`BWjHu83 zlw|UreIonpG_@uj2B^MSlH&ccAic|e!&%)9*#TyxM{){V8txJ@ZKX!pE2!B~Ns$iL z$21EM0C6<2z%6%eHTf0JA4Tz}o^qy!3g z^AWe%<&L+BH{OwYX!;JTf9=1@-0AzlOV)ogyyC4zw+Qb~569!f<0E-6@(QnJl|Rim7_Khl zD%tTD3vCYK^ccGXOTlvtzWWorPiGf{cYo!`!jGy^h_Aq3)Tc*Pk}u9!I_+vv6FOp^ zUjReobF*YX*?|8e_zBYBf;mp)8RUZ|&-&A&6kv1HzZ+zne<6>|q9t^Qm#hG&xnM~; zr+^60XModtS(QJ9qLhw^dLbCdOn&0=P?=Z7$IPM_vS{-q zY4jriVQUFFtsjsHo-#x0yd9bQF7tip@nuWyX>pYw;+-_ON78`02gnwLsSsp*e{b(#Jci#d;m`MX z4?j7;9o5VDi{GJyU$0R2v8&p7RV(bcr)CT>z)SKrCq2azVEm5R28L=opXQ4UHPAli zYM9m;6R=AtaKKcR2huXgXkg(W0x(opIZ2ZPxa=k@e@BW;@k1VJ;-ms8&?!Y8=8Kxf#`AejQQEFDzShGxtrRpasTlM;pJV#jWm#4^5=G+Z%zzFcuqq(TC1A@D zZ%LB4zIvguqOVH8P?p6k?F?u9h+`J0ntWdtGXSI_zq@IjlB?Q2lR`*3fU-c{h0oZj zgNj@}EoT?F1a#5!EW=VrxGJAf?({~O;;KR6e>8#pT!?q1bd>j$x&JVD=gTTAG8S3P zJIk*ZHE$fGuyQjx=$9HeK;4SymW9gTCRveVXVwG<=@_B)tuDfMt##bWgyH;SS>d{Z9@~Qdk#5?hsVxC46Oi zfA#=hWqDmC815DWAskh}m(vLSRd0kpk=LEjsjB28>rODufdzE%gIb;Q}z5f?7+GWll>^#XRv!5~>lB6A(YM z3d4dg@G;Z8iX*{;YLd;9lVwpAqvYcsf3x`|j5jgl2QZEX{afOH_5%*}em;dI8j$yc zaEP-97$`7q0o=cwPGtlF&5_hgssuhPIVn`A_0t6x1`XVU4J5@CQX&H*QnfM{ikOA2^-mILbO%Y(+gg*;6`a#)5r`65RVMYqTc?0_dG z<2{qMiP89l`0RSIl{x#xsBG6xN8343`W!+SX>3cy1LQwSeo7{>WcSCin3$n55|rU$K7&k?kL&3T za(Gcpfe$he3`|U#{A`8J18?#Qm%my87=NIrbd%R`kl*ys9wyfOM@{W})KpPNUU5{1 zEErh3oznBKU+>(^qwWXsL&jQn6NADa`la^E4ZtY!gGS1&z-iY9jg(t~s|iQ&Y?1;D zlw0NS8B?v!YIGP&*_39<$O76((URUs&`k0^SU%Oim`iU)q~oIxj=}7;nm&q%Z#T5sk2cyG+*rH=VXmP}f5LnQ zr8g!F+5^`UMiFuCVynFg6I#0qzklG&I;X1(J;@SoP;4igkOl36Yp0W-;akNv`%WZm zs`nHc!?(3|;V)^IR98?+LftmZJa|Qs?yyhVYQ&0v_u+sQHrp-S>87@~JS&_@^1v__1z3%@@T zgQXusV`XoQpczAFS!eCVF1notcr3xQglg$g+6pdlO+Z;9#5~0)M+HSVdgq?0Zn|R} z>blC@b0D7!5dDb&!?OK&EPwPwbF{}i)>^_8NV-{qF|>0NC!>s76(%R|Eps{ndiv1YGjlCW^-(KMImKwAt{$JxU-KS_wZaF>RVSM3BUs(;|>h>g&1f}{EP zIvE{m@xW6W3_Ja8{p~182V5&F9CBxnf1amwc6el{>>a5o2tSBsp8*Kl2yNR`>f4!~ z@3Y*a1FheCA=qFYpmKJI8BhFMNV9WMEgudc_36QAFxXzVa`4OrAH5x!z4o>ShG)q5 z(VTkLFG^h*z`z&hv43?3h8&cMaO5IK-+J>>UkpO~K|X7L@j=@&2e@qW)6C$`)pbAu z$V#|AjeL~Jibow&Jmg6rz7L|9LkmR(=ZEdb^e`p{MUG9DozcO{%layCRZ~64I=O@? z0Y15BXB<>R2+aN_bTVYJ`P@o!fp4$bD`k3^eJZmbU1%bwjOd1!94U= z9^4XBk4D|)F3|CySJ@AKv<0ag{YhUkn!#^0)M7g;l6KgnT(T{7 zxkdDxyUfpi0L|OnEu!^HuF|5_$c0Ab`u@I%6-m;5`oLTsfvU6$kT}J~{kT}bYWgvG_1ettt6Pt|dDj}Rpvb_C5m@*Gw3SxPcqbbmZw1rdWQacNM zY(-uv!lnF7_@=Gici+5BmuZ+;6^Ib_2vp89B`!HFu*ar!oy31}FubaCOVbF>f>pyb zBhF8&oEPQY!{gb|@j`FJ@wQ5`9W~RpBKDZIO|2XDKBwh-(!B2P$U(S$zAXHw*CGNdX?jO7m8rtX56OjnDH-nOTsIi7~R za7Nr5oU+Zge(INggum%~v!joH(`lTHGY_rm5W}vOuGleK__K;k*Uf&ixOcf9b<#KRiBt zo<~mnO8M@e@in65)XHCcVbf2aJHgumcl{+N!_jqt_6NHQlU+qa>(1IA|{w6!h?%(=#! z5s0S`OoYz!rXs7_Z%p-(xbWYYhEolFpr@56fCqm8nwPmuYc9og^pq3XQwB~UwG6N+ zsC{mXvKuWKCLDMjna*Niu-saymV?F)pnc@56K6ip#Rc?gIb9S`Q@~a6l>rM{9HOzD zREI5vnmTBWPtCOewBnr!!zl=Eg*T@#au3IL49`ZD9?$V zHJE?75TPZgJK=G}pM{NPr3*eKBM8HKObd3}ma>yFuLxZs@+Isw%4vClt~G}737%(r zz9JXgSZQ-h51cz@e~d%c>E)gQDYqyW6V6I7Z!iiOBqdEw@+g8cCVxKMi92X}WjP1U zpY?fujK@N4Es>~+1{Ekk{DR5G?Gf2kgAaeHe97HK!H>E+isJpJ2S*W(3Zar;neb0Yu3yfNK_FZhNa7M|?v~>9;QA=|<6`38O!}xC1H(Cz07yQ*- zVCP_lw;d0D)`=j z#Q`_Sq_D>dJr@Jv&%#AoWBzqPqLAho)#e`7wXEu{;BX zgN?~!8fG)@fg3XBjUV!xbj1)?D@M5TBMh^Lvh&%GX)!x5LER0EqSn9Uo*raYV8E4w zOnsR)9A!S!sv~Pt9q;$YV-!Xp;X(N38+r(=-erYY5p;cSN8$s7%hc!RIUQJ4m`VG? zx>^Xi_5%KqT?dOecFnYUW2|F*q@`;0ZXlf&Lfl561VB zpYOmvJ^1oq@BS&ce61`ME@iGP!){Vo1WEQCuy%VvT8OdO5!|q*>!A3f#)B??Qoh~< zeVG&LyP&U_(66fFs|l5Md$Z*Dy^jv|PLY!4o@IsF{c_5pZTFK;c*%dMp;WC`m5WO2 z;a#?^D#7d5K;>`>4D+j)U>!Gv*>X`{W#p+oz2W$-;k?*Pkm(W>=t8*QY`WBEqd+G4 zPMS-}&WJ1t0v>p}Sti8qkP>o-SX1gp)+jOd+Ud>-9!f90rdfQWvcl9?Uwu*2L($jV z&E3w<#CLe5%kK!bo%ergUBAaNkhRbZw-f)kQIv*!-)dwy+zm-2G7Oa0=5p4Rj1n)t zI`K(jv71S&PrW_c^$3JwwF^p;&>!xYB7z3^3Hc?yheXnoa@JwmzQ7@abUw{4Bm^cX zl7K(JfNq#Oq$9Qx@FWY~Q5m|0r1aK^z|lA1`5cq23#eBG1%`hpI*Lgd9KqDTFQ-eS z!DBWVh7N^@-GElzq3u*(5)n@^a#e{`0_tnKJ7&jeyZ6dWlJHmDQf*a}p)j}EsY27+ z>yWXt5f*tIkha9$uz=)QwV?Z+T#aosg^(N8*0G)%DE**>kS=&(rvbjD3_Bi%EX6fT)^(vMkRy8!ts+em2r565+`eJAgr(&PncfJ<0`7#Bl4Lm~P$Fo=J?CYPh;P&yZSKFXwI1>p1ePkC~| zcQ)bpsE)!^Eo_7wr4{^6DB{S>yw^_bB#9CDA}bbruA#e3V1M!JoFvgdF`C>-yH~rn zcH_9NCmFVP4_g>b(irPO~WopyE$d;a_OYaJU5TKQlQt_QSm!XU81 zppzE{OtL?c8>j(0KkU3vaJpD&e(0}p>2hI?`Jc9;-K!TPW83mu^%6k-_(>@g2+p2#b zDps+^37_HzxE(@5J7(swBa*4uT`#F0K%M72`N?(ESRLdojv20DIQ5~8d_oQcRJhG5 zQI!zvk$@r=X~($1x1A-8iDXc>_sKWo`F9P|o_9Lx}8Ujaoxh%nQ8_0i9$)Q-9 zMosr>hffqcDrsittwZ`ESrXqDPs*UggqB1_QS~GYfw$3_NUYaObTvFfA+6@lP%sTm zQ?z;2oD|+qYOn$}LKUXUO#$6#v(c2zr=vEcuCkljBkK}E6r&hCB=oDC09RP8P+3T3 zTr^V7morBV<{LHcr+PhB&5(c1i!N4R#^Ecp0MWyu&h*pB3(6v)oW@<~zEp}cR4cff z|58BFvp35XMFnE6Ci@pb<9pWTlo=Z5%h67O zAz2l-?wTVwQG7H?ULq#NpQ~ zlr*a<6BDe2PGiJ8@{b5ltF2H2_Ts2@wtRS_E-K`0d5g%L=6;9TtRkrE!*5dEj(^NO zo|Q%aq_CZ61S4NeY?NLW^|?7_U# zp?ws43jIIB{)idIj=M>?t;_3!^S<)Xm_2%i5ner$EvT4-`b~dmn$Nr#-FYsqFz{ z7QMJ$d&B)1RAPSutff6Ui z-n{gpaXxmD4cRVf-!6##(beAlP$DIPq=yIv^FeE~JZ`?-Ey}oCy95GE z?k~4Djr`l%W6Zc)%LsvbY&(*8L@CE&b#v8 ziE0MX$hd#9;U!QGb3d&hV6i<39S)v(@kIXhg=kff&Ya-6QAz%_;b$ zp}@PFbws-tLvO3iQ`I$VU}+J`QZ}Rweifa;S8{*ARfc1SHJlhux`s*kkY^OBZArT) zxeb$A4tx27-J|=T@hfE%?H!OIQ+@_%c}8~avpLLMgj3Gx{G%WXJ**<|pbr=T$y*%+ zeTmWF$-JO>te2k`*tog9fGyZJ)b_Bs``4TX?(LUot*7?_gS-d4_1~^O=oN)Jqw}e? zkl%myL|VwAN5JI%qP}X@P!V2v@kLAx9ry&SB3#lxEvn{AHV}pwbOqjco=x=O0)!Mj z<2lLUStSzzk9T?cyr|hJJ{7PhCNLR%uSYv{h^$A6&=fzbFw@scqqcR~WaRK{WEX}U zs^iuY>a!G*>+jcDRlj-!P!+UAly7mFxkG)l3*ra=g!0M6CO-7BK#%*7qOMdNy`H0Htl}BwoJmtAXT)Jh0eZ(_UzV#7LUq}(q=R2uQgN$v% z=d&PWlDUo!KXJmP$G+rdR#}e~B4I`(QfmR+r zF;K0eM?;u{Jmt4iFEz(8tP{R%cP4+u!`j^{wCA9AKR3uCaUTy|${UbC9KJ?PI8|{4 zPtPn$fc$W|VCU>AoUj)dnL=;Z9_t`pChv(`I#9o;<|IaY15Zlw7c~#OZ%KMRfpF z(@@MV9O5Jws~DpiRfdN2#d!!}5M{}LQV_f-ozPQ#&JRD>C4;-!Q~1ZDKZg9S zH*p0$^Xw?40c?;Bh)=}5YJqkb$C;udg_ZjyDn!=4$yxdXqx{y^FPKU z`IK8`fwf}JhH^t&!Ol~g7fno?fzw4(Is|i^Z`eSYV4!8J5N-%v-zlS$3={fhr9k__ ziH|rrWLfs166xWr0GcWf;r^$8@zkaEX77mXKB$qN`CJm>8gNXk3-gRc)XV^#1i9)5M3x;*SCRSuw?k zzS*Qdc#`&Oz}^btYLHaucZLa;r48tcrM2G(GAxBaa4ImwfD-U5bWV`Q+~5Na`}AP^ z;r-M7<1dc7hbr0L80P8j$?5&iR)OTrcn^>t9-gj(gNvKV2bO=_ypg?=-SLNhoO*%p zMVS4A-F**#0}RIyE!B;>)K@4jauob)RCNl$9bVQtBOIumq&z!Y$}8!F8-_3>-Rzonm;t+p-CN}YHed(16k%Ic_{-l(uKHxdR0m{2<)&G*5yHPTNm}3mg73Y=7Wp5SHOAf=;A)=Jll9= zIDw?%oKFaOm&`ZA3XDWx8zf(H*B-QFbW>kLcYCH{1DhB|{}u0lJ>bW?=mAO6IS+{s z(JEUmBGnmqP-9r|^c1tPy1}qDwu-#-e8c2z5uE;| zlj!u%Gr)IE8d9rYs(uk|uT=1h|D?8ZU zvyqGuWpjBR$&?{K7{dY*VCwwkyl&fK-B4rGBgVy1=sj_x-0PFaGN{G=ACXh$=j=7DDJu;4y4_Y zy)ZvH*4hz9V8i)!7vK8lVOs(aSXK3lVhwm0#eACvT-#XBWZwB3sirq zv#2?B?`};LB!eqviu~6{4W&wR`7-tWBBHfyUTdqal3N%3akbYg{h)xRh|g=Hp{{@X z#FJn@*xxbrMFYq>aP)g@}wi)&!uF3iZa4;^OWngNA zzo+H*;eew>6}3u@kre$8SfEm9>iO#BO`MZ+KknU9GIuYPDKDZtpXS zDdzw9IbAfNe>3cTz90Qd?UIVUs^CbRmS{Z8XXLa&Sq{kEbyC1@+G6bviYf=$3fly6 zi>QJ};Cbt1pu8Dut?NsrRseqhm3~RTs|F2iMi1d2yt>6=ZHr&FoLKO9ys3^v(pEMt zb6Al^t*t_W$DP;jByYO2(KQzmUq#XF6x^JV=lyhXS(I5LZ{Gf@Y0QcxAHMc9D6Ks) zZQ3@^;7k5ccvK@QP$U9pxasH41gW8gbg~XWO+Gp~Q2kg3^wuF(L|1se}1L6<`)7KNL9d)bH3)Zm;x#e>0_{1t4f?;dngKNR(pTt2G^q-wAunm!p z^fWbi#4UzNh_8URb%ezu>ao}754((!0m{Hn(g|!96tP|5;K_IaE|y&VfD*591x)Z0 zODl@$!&sE%8^CfPVAAGVZxpm~9NN!{9dvqFeK{o+y+et z+>~8jVegIS*=1dMMxafGX741C1dd}8MNoVxq5HN{~%)k+zFP4)VhNVvtA>J&l*SYrN z=aanR^#3yV0R^OlG92EwOADmHyt2fRGia3zsw}8HV3*2gl0=NF=ScAm{0{2rL41_RmG`2U!+deJ ze97!@nVXSd-sa10E+1t_r$$43Pw(m(z>G~XfAW`pQ2c+4Aw@%4BCZ26EF^kME7KF% z3gAl`I%+_p@`tn3YC()f6`Ker_$g2{Qgi+*P#l}W|1@bJqbGDvDP`R@?$*0HUkMhl zIF_l=5tN#UfW_(Q^Yimzh!%sta$Va~+;*fQ97Sxu@x~jYFvg2A2D=J%8)ADtmr>^P z_CYM4RMCGhwDP9s8d=F77;)=yahai6Hs=H+xS+C%qz8#a<{I3`GYnbF#)fdu)hx#Q zMG8d6tx3oz8&Uh_pj!Y+d@!~FEK^>Rwt#&QNAuH*VTeQ19g6d}GE@6O$bA}{X~qGw z#q#z)l8*`1hw@7dX$vb#zTlmM_wF4X;9_I?n$3SV#U0}c@UR=M6G=chX818;htP4z&I`dHo$?s8Y^0p z^e|eE5|32|GN)%i#0p7+ug>!Gd6|Y8KAX8EPI>}ksEUz_LHSN15C76&Vg7<2=a36{ z!bX(r>?}XUm?OeJtgIJhW$DO$*H(bF&loTd@#nMdAC*i5Oynp*5ubNw~d=Jk{0MlR!RsP*XDt{p|3%lKG>SLO)q6GP7 z_G(T=ngValpaUnpp@a)KS_2k`z-^Gs1cV&YJKHA02`o`L7i4%Ap1A-;hIkhgE#SFH zTB@i*Y@2}Jn+E^HM~HWG3mbj%D7FcVUXrybOS|i;jI>$dY*kWqHPRX&VYGj4FQbW; z2}iC`#?u8YiJN6CKGQUDeHP#;?bBsoDPQ>;7!D(`>?tpb?gmK6JJQlhSybctKC~Jo zUlwzu52{1WkU3<>OrL8|T#+MBg)OOJC7FT+1=u&LtBjH;O%`q6@*b>5v{A{Yn8h8b z3Rgvyi~5%WjQgJ)o;+#;%C~>xjUe+Wb^i(~v?|xdmEJ5QqJf{ngbZK|>iwg8_dk7_ z{!7Y_*bxYvTEWs~Ye`l|kcS>DdCcrUD;YuHlKx!4DlF-IpYmE1RZfBO$H|&{dCRIg zk`!dklBy3gv}DxOK+fP`OfHS)T%QB^+lk^NxDsN7oTXY`1|(=(mpgwBO_+}c6%va8 z8{eL1%3FCUsXB5*hg)jOB`)R|@}tq=MpLa@U5`il9^KP{uh`_n7-)ql`Ucgn)QO!> zK$k@|lU;hqYHp zf`qzhD7hIa%?^`Dq>t?1!e_W*OrcMp`KLVS0Uc=cGSwv@! zNT!;EOe8lO(lOm-wMi}zc#Tr_B+b3VPg^rDX{qQs>r(Vk(kn0qqHwY~sI?g#b)^lB zE}ly!u@k)^zodUA=zQa%ZxyJ%A{VALd7bp0B28#3h!&5Cd`Nw0y_X0z=i;}57CsHI zI27_IFak3e559CT2j_ijQT2v6O@@eztO*5^KZ!q~DT(kW`zQC{l7Et)7FTqv%%4U4FxT}x!(lAHa*(7pZ)=!a|GXhqFIgk`waw<5WVFhRTCO*qLdWwGm8Fx!+qb3bT=mg9F+xO0Z(kLavX&JR8 zuDv6#(Y78=9PnO=c^^1cj14WrlXaVHoPVVhFDuKUgpIV`sdiPZpB6khp$Y-> zsK54V)hjSq3_Wd{-r?g7cw2{swxpTcb{o6BfTC2=^gcS@86%ONy8;5V;CW+bh$-FO z`s?YxRI@XKI33xKU@t}3nl&qQ&~RUji}o+j_v(ABb&B5*az)oeLV&>x1T)XnT{wT< zw(EuU0F9%Hrid7)M@ z(*G6G{}s~z71HaV@V`R(-&06eCO(cm0X}vdgnZw{As{$r_UA%Cz{)MTY=FOI4^J~9 zIU203tIl`n1a)Q{(KwnEXE7B=pp1Wo8nmK9U&6$J#)5@2hkEaXcv0mQ^cXwM(81e( z2y=Fn(H-kOD;~KP;%xO|^e4A@CTvj(Pa|203e(o1HARvyAR{iMqfzW` zYkjJiq}l0wR{I!bd`%=|v*QU;c_lYU0fA|u4vnm*vr=Fjv4-IetSag=LzRCqTxsXr zUQD8=PG^>ovEPg77Ku1-<7YimB=Dzg43)zDB`(d0(!7zZmqqQq!TqXM`bHNx>L3L` zkqzM9Mx7*^_(>~b4CRiM3)cO8dh&5 zuUW^l4{oIBg{%Oo`Cy_stdP(!G9>|!NWDXG1IV;*H86nIn!QNLP~W`D7_!LYPxU!Z zuXAfW?sm(R%pT(DZ6m3aR=sx@JmYdyz1XVY{B(uCITFBY$1p4ijB2#x zA4Clm8mjY2_9IAqS&@HBK%JZ7s1?V9>9`+;coEJga2T9UYCostxazRCq(2q;*h0g{ z89V-^I&_wnlRP8e74>w}*Tqy_Kifa-C>`hXN0-W;Kj_ z{L38XD4j$IotYPMCTA1fELPOV;|YdZJ{B8f5=nFxvuJ$LPhfur3am0n_U-_}AXt+v ztbBqp_oZR-@-P90kT!eCE7<1UPq!5K=QX$&Ng;fRwhmT=zf(#A%Ml(0?!~N;1ed8W zeR-+$5;r@hv5kHa;wl;9oy*Uhe6B%{DlBn%$wPe zhVVO@YrG^jhIW6A4kOO)xyN;c={Gxzp+r2lw=hy_Y3LQ*7#-~dzt?qPl%)gz0_1t) z>a}Mr&4P69dKxy>IY~!Pk?TQ7!bIdG0c@xUredBYhnvWl<$`43LzuFB>Z*OxjsS2n zk)vdzpztEGUl@OCWbUvgYAJ*)-Xn?&Q4lS9!K)`VF?xTji3pd4{TPNMlc6@aBKC_S z{tl-s4bUDpu7>f+UBw2v?ahA9=p-u0R+%a+#^`ARA#v8d=tytnGV6qHME1GPoW1#w zlW7kMqw$kBA5`tt@9?51s%+|_4Wxmd3VZAxC+YMDyd#zntF4UEmDP#Q~iLd9l6v?aOzb9UAlr78 zerkVQ0|2YDwYJ)81z@@^W3C$CwJic|#OR@AiLOPNOXRi=z#7XVZJah#?Yy8^GHME) z#(MU^$KsRDpw7|~Y?-X}O!01Df@U)^l+Qpwi#y3x%9n}N6;+>sShDSL@w0%U=K#q@ttVn>~NN$L)}(X*ev_0mrU6($)9b`5+4 zeMno(#uD+prD_^cN&;fZk)J34!n5Xfi8d0k;Ln6bNuGO%Uuoj9CQ_{OYSgMnlh}VLvJ%S z;dhTjzSZ<0E~bN^_O=S;4hA zX+x0jimfU-aF;8=ph2oL=WZAsHBWH9OmvovpP9FIhI;SNO~%*xT%HH-L@A>-QlOve zxzyRIoxa6hV@K0Pb1$Od@G^h+*SM16QkbGkMR9`LyR3LCeXdbmybS{wyJaNY899To zU(~v+F^>bPDQ(FdIH+>4oS$J!^S`jQO-Ezb4OX#vJJGW*kW zKvw=BJ}EvypyTYk%(4nSIu!>}qe+LM>w3jcrG;X@>W=I4d_22&;t78q*7&Tvud1Je zs6O;xBya$z+Tp*O!A<)Y`eC%5Pt~HPo?kV@?G6yXeBz1D0KY_lokWx9jqj3dtuuEh zHI}YG_=dw@g79;HYrh-(^#;iscQ6NR4%D8GH-=z`!GGaDuQVN*$%SqZG0HHSyJ1Y{ zVN9ZaGOQ0^FW>mXG8WHhaWQ9jU*N5;ee|V& z^aX3NzG?mZ2ABIMwU@lm>dRp~tUNTDwD+O>Iv)7jktJ(~4)iOoyTX}v?e|B&P{M~y z{W|j~TjHO;18L&g7Y4vvdvQ}ug6v2x50&2fi|}xTEZ{HkJRN@(#SCY<3kih9M-Ll- zeAySs0)eR2<^+t`6}~tsX3l0ajF64~F5IBpq027h&F?zBHComMy(g2@P<}Ez))5iQ zm|R1nv2HPy9|y}+ZQ$xfc~Kh}jw$8bT6y_4M#G}e_ezAeeoSopxQ66GVZ}v99$I7g zq6Hs}4S>*qTR?v)KoWFX$D~8pZO{P0*wIi9cpCV#q0*#VZS|XCY5_W&JFX&$i_$_S z^u8ZbIIPO}CGq}TyouMXzEt7sT7B8Y1^I;F`HRpGDM8wqbBi$ z*V`fXVv;Ml%RYI^Zj;#7W}t{7$$3mYg1Fo5(VsqHAtq`NVcJg{)|sPqke^YsfxfC0 z9espqqO2YIV68$P(#u}rAr*a$xy(8zq)NsV2KK|W0GGN8xT08Ov#pWUP(@A<`tOIb zc$lb-2DX1+$=GVQNHj(e0SN)BO%b%b7?3a%P})8cv~kZ+go1l94M-5KWqgY|^k^3^ z;vhh&%g%C1?3eK2keJMK`}w4R;Fb^-(Ua-_M259wxgp;+9##x96FdyA>($a5 zjY}i9>!vr;PP<~(prGDBMeRDO(^6GW?Ww8WSXb?evW2+#~2X==nsgNPH4ZV<7BldqL-jtNCok_t(kB(MHmm1^;L3M8GlU)hG?(ph7MrC8y?>Ya1rlMpJX?t|2BccbgB zYBe29C1`XR>Qk9Kqce1h#M(sGkFrv~mMDKfB=_}C=-x1&&hwcBuwj!@d>hI2_B1Og z>HA>+aEk}l(mz?10k8pGUT!r(=yr)18|JA>*oh0{6`f0O3Ds8be3F$!qm|=)CLX0U zp!%2c=cN!+nY%nc7Oxg0XjluBMM=Owdfj24Q>^_Jh$%j%&u-5+nfw~GEINIzC;ETI zzDO@OGn|HF-fuLP80`;m{Yy72Y$6%H={ov6+g2#@oth3{?8=?I9G4Ojp8fG3klpRCVM!l z?ezh;NJ_V;*Yl-koc52D`#t9O*|jM*B^fwWjY#Z zx+|dEXS=lWY@e9c3G?|Y{D$gpm&S~_gj3W1<`o@IszNaiBspr)g@o32g(J{w^&WqD^2_1Ru znKJcs5~wZ8?7o+Psk}5*2qk|VwvMmszz*uSNylminSuY#A-bO?hW$(%vn)K7_B=$> z+R;HgcakKh?^kKIx)ZhycC;j6l)OM{H_2-@sT3H#LIs7KMMhp6T^1GP1slUO^_V7Y+508ou85_f+-Dqd_Oy?KM= z2-aNVoTZSUu#jSAT&A;`yf%T!qV)MX4@_(0%q?a-MpiLkas@4<+cLyxrl+xHM)CpB z9)Gd>4aNRS5)mY*lB_@qPYQ}s(}mHfC*K34N)G!Zum%2hf!-R&-X2lc2>x(7HQ@8< zv={hK?w!C8>jUuF7&(8q7qS*@>1{(?!CWex$xN6won& zU=rZ1gaq{Q8J7HiaS$0P^>1;pa8A;wLTY2!&J#KwO}B>(lZqz`YJ#pQ+%`u=1hkH2 zBMxVcfRWh_H7*d2LZZ$im_Z(ve>F8(m?n#+Ch26xB^O#=KEN^)%PrWPj(mR|XvCm3>n7&i9{Bd@JM#?=rmk%V)4YTH6YF83B24L}SVBqtL2Urc zLEk7&Zckg1(1tF2pm>^ZQ{S*8`qKdCYaYnWNB52`d}W1=U66P4@^q4YT2!%nG)Oj# zso_;Ipkg zt_Qd10&bCPt>w^2R6mYMV(`>~bZ~vcJQSqN#>u=yg^{0bEVrtC6_;i*@L~LRvHUg_ z=lqSkpo=)raFEnH^ z2(Qj5Q09LPi10Mkdee$kJ}Z+=56n=fsq-$7xM%(w*$!^=HxFk`n>bF!-!kqxupE%^(|TzsGcjp<9uqQ<+WJpoM*y1`!$m z&bl@o_@|u}ZmuafAaV^Y(XORmuY;pzC?Gzyi}ruLzmF>X7?j|(YH)*0CjzldYSDHq zoA2>$pHn3i%pUz6wQ26yMw zAVk-$3)gk=Z_sQ0)E&3k>K7M5M!64i)8=U(ja>2q+>W@Euvo}UFG@;YW$b96sUtfF z499<|;ye1#s;`>1P%yP?!1cp*R`^yojMK{_IyA5u)u}#Vmczr4gWS3@o^sMixnnN4 z5l9aV3FdcQw2+4V{E+Vr_=T-C!+GJWRj#_??`uEA&9HraL+3@Fd+YxyN!nWhh*zU8 z^`V}+4w7#h-Te8jd?}D9l$>M=jkvZyh^&8StEZp6^U_$PO~dzXMKNOviXSuG^{KkD zXb%PJ``FKT!l>u(fikCocpSFgBLiH_TVSNBfJyg-uOO=y8>K~Mq&orDe#vfbht`{k zR()|O14bUVXJ`{2ianVJavC=1joi>Hm_t@GKW8;lHFAc_FLNzK>(ox%E#JcrAhUm| zxIrmBIx~AC?+pzovEBl5W<85+Gxca>yT7)_xTtp86D`5|)0&D!8!-s)MIhyUpuNH| z-?)CS8`=%ea`7~K`1qI@lj<^GpsN(-IDa6c_96@O~ruJ6TlrDEAr(CIdz zZVsD?g7avn)~SW>XRf?cY67*6sBg90$f}T7g1(y7t4AxI~2Of69={iwdyx@Htm-KR06Jk4mj!-L#DvX}heLsKiz-+ZT zd8oz>#4W49X^+FIf*!t0nmQ;#EX7CF5b_`cxl{`Ba%?G11Rt>)iR zUXtw>&56Xo+tLWI__<(UP{6Zt!7{@GiIZe(&`a>Gk6YmnU8}POEbDOYw?6dfUnZ{KUM&P9Se%A>M=_^@8sL(DR~P9KI{!SRHND7sKcy ztxAHzT2gF!)^Crxtt#El-)&!_-X>@awxZjP#sjXWMgal>KkZh?A;A7>dI%oZA_y1> zZ;3k?lqJUP2wi`3$@_SSYd}izd{1k7F^DvI(*>P2uoaQwS`5la3CyV0{6SpHfa6JM z&P5l~@=v&*V;_^%hSS+dV9lu%z2E=nql5sZ6i=zaqyU1ubj*CSw(65PV7{&08~LfF z(#I`wR7-~OMjt4gGkR;D$F8UFzezP3XBjMltHnT5RE&S5bu|*9?MMH%ZlzqhjDrTX zMwQJsKPi+|h_q4}%8#OcFaDKmbN(Zle6iHD=Nm5sJ?s{kvX^*}@~SUHkv|R~ziEeO zmF-`bX#XhEwe2gjgoDCS$?e_JQofbt(`IPz>{_F0Q5VhU+KWsjb-Pnx$A#{)hDiT) zP9(1HIURqX$Go0N16!3GRrTK_>C!F{{|{gx4RRyelhR zUE4O^vr&H4P*NRJ3S{xhAzVhIQLtwIQj*Ppt1~~l^?sILu zr{p?^(sdvfYe6iMXvSl6yYv8ydk;|v2R|zgDM#CKO-k{X0AxCP%J;ffRKK)Nao_fk zc2h^RSQuKs!(@Gh*Y-AAU3PW#RujS5)-)`z9uD8F=j9j*!KQr{Ks?>fc(Lm@u3Bi` zfi{0!R$>s3vb~mEAs}(BpY?3*dczig0!V|45i{~&-BdgW?h9+@YpWY}i?!G-9xHZ| zPz;8cQc0T0ET7HC8BQP-?Z&L6$jn)MAK?{7a1k@P>g-kow`+<@abZ&ZWmKlG^{jeU%S#pUtxc8 zjbSuckM=wH2>8t!jy@V|%KWCcnkqkn$FvAP@YWJSKYqv|Jy)LYCKt2WRki!V3)yt^ zvpgLY<@pQv>jmtJ^nCylsLUTeeYd#0gkNQNTm_&HH(}g|$v3A(m3#w&aF&9Kv`D_G z@@e?}O=!6YE%gm(4~w|xH;H~23@?A*ylrUk9E(KgH4x!A9+-(+3Vwe+CX#dqB-*cCi=4DDL1NYXE!cH>(ww;%+53-f5uMaZpcfAg?zW4JjMD3`$gLPBGPQ0~Z zIgHMySUW8Mv-}ikF-+0`OhB{0DinR5S6t1r!b+CuglpOP`T!dEeSJsiHJOZ;9-<^* zXZrAh{!UL-IdTM7-9G5|gQlT4Y0MUX8Wzo$yt&udTAld~NQbBayM%M{W^1qK+CPVZ z;alrWA^5nMe~m|w;%GLag>4_Ef8ts+_R;1F-nWcGiTeaUu;0u2au_3Uk(2 zedExsjkJkv;1}%jaK;6W&Ek?jeVk3Q8CU2SjYfL82U}iN(c=Vbv5ZE36-wQIhXEFz zozB#2$ka`}10Jkz>ZASdDtH>FSsMc<)s+s@G2Z}a<`YbqGSfUBLC#2CZkR0mD@hMb z2FM+9fRIe!n8!|(jNgdwf@ejEe7XG0``gO3`2jZUb;+KHfE=?IjZTKvF zyixB38wu3)946*t(9-k*J=hFGE(@$ZC&EAq*pJ*`0Y-266I~yzC1CwU&E9tJyXv&S zMZp%MSurkdX|-tS5Lq)e?P~jO6|b=CGxV+S^Iyl#5jP_xuffdQ+WPw;+Np(mZ98(v&4uK!rkIZqHV`!$l+|ae1QfWma*X>LERrjo^JvUwaM`KPx%ez1ZkSBU3Dbb`)N; z*|eIMA!+VWwoS_s#^+&USl=J97m+UY{z;9z9DV=tG*03;WWy(z-`PTeK{?pxPQEyh9tTH zn>o8mvbQ{sk?(|vKK-?uR|gM)QiCmeevcgNMzKe0-4s*jN&|U+JHqVG*W}z9a95sX zZVD_*9IKz%*VJldwW}tR;<1dm6c4tcZ#IT~eMQ6L>lzz>)zuWJ@EKT@#(0&UOHseH zM572uEwQ>zva?xK_3HEjWQ2SS&!LIBp-rmwu9NL(lPsOyziK5;c%Re_fXUXD*b%nZ z6fyRhPazYQM5mln>hITzppH_b1hE5?EPlZrl}>u>!ny4p{dGDHg3Ycen8436_?UdQ zAj{W|E_Z8xSXAnQK@9!DF3E)N*XOs9!06w1&zj?C0=2L#B6SUfp7(tYrHnDpV=g6s61%||p{E9_$~NdFoJ+$=W${K?L*3_x5Fd0}W++lIsb@~w z7%P&0X+Fg<45nGP-b zv@|jP0|<{|Dm2$^D;b<}K@1ocugDhgNmFoW*$O&mn68iSeRl9M6w;MV7)O_9j2kxx zr$bmF@&?0nftBv!`;g9YL*8u+pL+6e4l2@ zhDJ%IoBLlY4grTP>(OuUcVb9r&09xCC+(D*${j%cYJiUG)fPS1A(_qjG(OF=u$3pTW?GYVnOC6yT(1$Z8fU$;)9uX*`@ zQAe)gtCT{sYw)VPDoKAuw&x)~4%71B{_%rPVZ$zpDOw5z11=-@YqEL&I5|nDKO~_| z@)0N;n?wKn<9s}xWKD05pq`|3x%Uy%BHRZRPjFVcb>Fe*%{! zbLjqfOa}b{9(pF@5ud@28RCO?4v$Vg7#b+SIIj>6rpTWJq#DF3vMZF?UgVQ1M$+e- znurzlG(uD;fcDmgh3vyrSJW zeaog2q)rqnuG$Ht=ALO*YgZH2)bbfsW`x+d^J2D|mN3Q=DVH$2n$0DA^EuE?%M zr)FLbKWC+S?I?041iOM%+>jk=%kxAYl&Y;6`j?xVU2Y)S{SlyPSkoD~+w_{<>*QIJ$W% z;0uDGG;j0_&@&|e#ap+3n#4F==ffIBI4y+W(ailnKNB|~2bSC304gKgE(D+x?NHdw z3In1C-!Vf2E>p_q?7x#p_=CM;?QNupeFlmDumqt?Uk-DH#Y;CPgyP3Gb8csw4D$K%mXw-pS3P4iHvA;N4u3vWM* z?q&`xpFwoIzry?>)5r3;a(8B58P<~7H`+$NF%URYUSDPvRgxf|C{xEQjh0u-HBMfPNnw)~+V1h2fUDt5*26%;|`{vtKfMu4whczOF zC3p2)6EtMPwt~EWGMVWPCV39#)|Gv=FI2NBOpODriPr7=zXWO}fi# zL^sR9_q2jgNK?2lW2A{6-*-e*EEF)~E|0LuzFQmdoo4_r@h>jYad;4q!#6w#PYUJE^}Uy@G?bed3oXmM%^(4-wWk`H_*xEn2riye2kr#;JX83 z($jz^Nf$fXeiRkiByBcjTD#a02zX9Nrm${}D`8~CP6BgedS%LW&+=aMaEPXhU_FYu zkMcowo`uuCbTrNo1R*jPTM4pFPh}!tu)DoevA}U6e+2_FP@#xEO^Wn2TrOXE88hoF zbC?e1Vn{xJPR20bj-KL*$^~EA2HPNBW{w~MmqO4@>50@B)_pLA!of3TY(m1;d(n*~ zkLIcGY(zKkUyQ)^@_Yc0D!|^U0{akPZB$`xL8*63us#D4dRUw9RbavQ%?~QDsKxh6 zuy%htONT>XHVez(h1F0Z)WLe6VF9Qcq9an2xV>zDin)o_GJGoM^86||aM5;P*L)o2 zDI}@+Tm2jo{5Q$y4RO+fc+0_-`11^X4!U1__SSnqbNKVl=9BPuoBnRS_vp!2@Ivd9o1oIPcVP|C^SS0^C9P6TdrpOWX6*2Av= z+*|KQUrbN$#rjo>hqOogZ*9HL22@Gfrk0|Ay?mVAW5q7Edp82`_?`#T%CbdZ#UR@SB1tp89!coWw$tChSS8x40y37Mv z`=p5DcVqsmH^dR=O~g2vj6|mJ3!wmmR-k49(uV-F;fxB_n7DSLgX=({t6@P4%MiAI zh{zfYzxwW7k;*D&d2QaaHhVPUKB~vgMs7po%J5oPyKypQze$s8KuJo5ujp7ZfbZEk zZ$o~iWEQV%ET{oun$#q;8uNGw7(QEr^opVdrp#kl=DU?ZOyF{zjxm9pCCIqDEX>Wqw6)TvM?K`f6=B zN#0CYs%Rj|KGiMngX^WedC8-;r;3&e?}vCuDvsuBElU=g<%XXc%nbNuGky(Xq*msi?T^ONvOlOyNY=>@4N6K6o(rN;ONB4KvcCV)P>Iw3U0HT z4X9JZY=i#UWIX%`lr(;Sw!XW)-{((#_E+pfk?k*GTX=GGynVbIyL|95Di?rwox8h_ z=MA`SeU}ZGgwAw~GtG1$8z2or(t@QX4n?phkZZ>`@29%a=UXo8bzxv8~cHH9VjyaJC;k^MWlOqPMi@Kn>xhd{ducIR zEG$-+6)TB~W=YY1C@7lb#I41|N;9^8!Y-Y!&wsj(nr16c)^^SV_*)M--~!nEd1X3x zJ_jKgr3LsI<5f8JGd`yy2R5>>rRDe6c8?w$93J14P7&@`e&hiwSDO9p3WQCbMmWOB z8Jl#pX~ZKRl@UO@Fk6ZQT}Ej)IV;zrK?)Bq$%S?~5=mfxOOOv!Ik`c*R4!$TsLS8s zZs6$v8;YaTDH+UX zM5}8)?INvzFdt(EK)SeOSFQZ&lyAxhWgpMPFvwLhQSap(z2d_#6iT4O?VbID2u{Gi zD$I*m?D0PMsFrm+E6H2T2_Oi>8P5O)Fj1hTI9Nu>FG)5eTfNZmqd6vz;ppyyt&m{% z=Z4?1Kg>?lg}_E5tt7Lz1Tup2@i*S+e4b~cx4zotTG>!9QFmwZc|%9L-Y>o}fkNPc=e1#*Ugy_Ly6 z%ZKoPCVXCGZglTvfVU^YVR#vpN)sjUq`L4uwgY#WgCzlvGI?BKnB~@r^oxlm_;b|) zKwp!qlSN~g{asjuSFuSth!|)lb$xk0lOqwX=<0*jTsRqtX_A>EgMVzY%*to%A3nXp zjp{`TZaPqduXCpZt}1dSoOnUY(-DweW@5m~RJz+J)s zJ4k)LOU{@ZQB=XFFe7Qmf;`Wl+EAwgS5Hexq)^RHZTC7fU*)OsW?atC6&W1=&>~RJ zbcGilpmGal;L9DftU@Sl5*63^^;_64Cl~Ya+@b`)(Tf6x>l}D?{ylcJ)9+~A(l?Wfnvy>9T2@Bx!~ImU8qPm`n=5H z+nu^QvQmX~61XLv*6V+~C_@=K>9qoxPH>mi9aAY^``|iVS~rI>R1+t@s`9mxEgVxn z9H)yQrbICsMP0v@DCieeH0Wl3T!PmdmeWk@Py?p)kWTcOutm01Nn5q10DJ%Gz{+XH3cYISI?3lB+AT3vlqK zQ12Q=A~eGuTPbTR0a_UhD$U|3fw#=^bovVw8K>cva7AZihqQE*Ud^I^^D|W055g#28hFn|QSU6771yD-K4O{zC-aFEQE>4uomCdqZU!XYPp<~}N zSiM9e=+`YHEYa#UFT#W22sZY~?q8D`y+J~_>%N9uTsV3cKnJ2GBhWyg!>|gG{R6eg zIg-&}2FF*~8A%(m%g7~v;X3)l8$`xBEG<_K+3N&v^vtiED{0vvgYXMDR%N#4TNFiq z>6RP{h!JUFfSzXoe(+6j*n*hJGxq72g;v;cw3{W{sz%s$13fbdc!~4un zZcv$`#0RvRzV_hDeQART-DbXvT-3^!DaecQs;z_`EN=w0Zn(J=)Hw%UbO{B| z8;-&(f(|N~TWWEC9b^RvH(3H2s-qF5xq1TC*<4azn|Erf^oaM2u1_AU4);oM{g{hn zJe`6EL^^Be3C74rPG_CFO^d8lQkhU!bUm+e({x+P>!8@VhFKU+$0=Qz4c4r&sD-Jj zg+?IP!w)J?yEeSGL;9sQ!hz{WFk@KvXlRs|%&bT%;Eyx_EJ# zUlV?Rh;Z;;#xV?7@tQghz#$rW4xnj(lkn3w#9;U-D@Z&u+m?qz5L^m)cl*Kd{=wrD z_;>snd^?tQ!cGzbaFQ&SMqT-qIH2Tz4OPk$!(Vnmpo3>-4?ek%B6F3CvpO+mD08uc zL`-5zr46%PWcZj%a&^U1Q4|lb^8&Rm-h9COd*yEG! zPl56$p|=E;6vdrv%vRX1;ZHsmZ{R?L;we4BDo!^yR#Nqm&R$%pbf}x7JOFh$0XJ!X z19|Pq_90w+M6lX`X4D9!=n3AyLhnYCDI$Th<(nxYR!1%(ZW}dHkqd<2_I09L7ruPV zd&dzB6tAx)U@lj34|+C>ah7QG(X420-YT>vagU%FCF_jAptMN?%dZPGOP!{wx6Mo^ z|JUpO*X#a?dYy=dw)pGxkk6lrVThuCpsaZLP@`G@-mX=?XC@Wuxrc74_}->u|Er?JX>~i|1u{T-FT`%Z28zJ@|iPGqM9MJB_l=+ZQ#qq5Y2}f}MYKvN@;_`*WlPFmx7{@$2bi9>s%B#Ybo2 z_UX1H2{bfdtFPF%2cq{!zp&yDY-NR3EV1ya`QEvtHQ4mLejb|wu6UUX! zKUUbdUZRVZnZHT;)V^9t0DIW$#aE2 z=40MR$*9VOb`774$FK=RvE`GTX6krd+V|}df(SxL!y?MJ@?*MTjC_e09A&8Zd1fp3Ox?<)`b9&=5&we+$wt_`;ibfH2O7GXANq5PP zm?lj)A{xa~JoJP*A3Mr}(>Kgmje88qvvksHzGPy#!g zVbi1(PUP|gKx9XvT8kb|BD@y%kZyc657Q-Red^W9T0VKZP#@@1#2`ugBWV2a`Dh+H z75YRA)a2JZdL0M@Yx78ATZPID?VL<}tc?l>kq#ILGtZ*o>t^TNL7?Y8iblppx*Z#( zi?Uc}q}7Ul9AO6aD~~)R4R3VFzzMG?efk(I3&ABsI_r31gtS1Rk1fRG%kk)*(wD?WbdZ}z$g9KN*@c8_;i{f1Tthz38Ukw_Z zL?QheY6)e^)g%q-`D$#-6Efl%SI5A!1a=R|3uFL)ZStZrNP8PIkR+Mld;XU`;cFNLe{SH|;t*{>rmUFYrILp<|~UM~-xo)PR=e&NZnrLYiHtPibbvnFp{yHJTxPahawvc&>m>$nZ%^+{nk? zQe|v^O?3=+DSwwPb_e^k{}r+S6)~%b(W^}P_I9>lE_nLAt`pZ{XSo+4F$ zT%8xq8Xf_~U*!)V3|BA2my7Un1tJI3VwvUgEsP~@vUBnpqWJ8Vl#sSpIQJ*;b*KHP zBs3$mH%`-0w5rR(VLD8c0wxO8J|{xP^$oPZFy@p8IL9$y_~ZTKJ{6{vKA{*#<{AnV z6C}V+P{!lcP82Qf@*z}-*6uQh4(;%N^Xf97NYID{flHVCCz?Fs@x z5h=|&#t$+`%vA}Xh^sQi=LvR-Y|Kfzv||JRFYV~?x#rTo+Gg4GrPI%;&x~T+ z+-F6DI=!^dpMu$VecnEW+S22H=f>NJV!VjA6%8F`k-~SV7x9fT>xx_-2-TVJIr2W( z=vO>Mu>pg<9+jP=&Tk4au&lsEN3n?EtCSFxLUBKxX+JdpzeIh4uPzc4Ho}0g9iyML zQloBnhSF{%5)5VBW+2Q#3YRKJCtg9}vUh3b{j&CZNd`V`V_Bi7D*@zxQsYXwa9icU zGTBlaOTB^Jo7c651}8t3cp+`@f4t5{%}fQjGyQ5OZqbwqsd_w`G^KVOIT+otANgp- zUL1iGI=ieZ(ky=K!nCZ=$Mf^scJloEZ|Eh5dC{q;@xhyUl?$vj*SPB9xh9BEmch4t zdsm*c^H1!AJG}KZku=PIy>ZQ(L7SD67LP*93&f3$L$l>Z?qXdIOA_q=-5S8bee2^G zCZlpB!w8*>u*9&)t3eIht<<&g*8P$_K`q`Ijw`AR& zPG=El4k7QJpNS%&PF7%);Tc|kKc5a|sLuOoAE>Rj>dBzv!lsvhv=LL9!LXhUTWt@Ab(x;Y)QSY$cCfqDr=|@b0GvhUA(z*z zuP`vx28e-tkay1W6s zfOKRwUY%|b)oZzYoj1(%8WxR9-g*nuUqEGngkR5(GWJRi)$}7vLg)g4`HB`18sG~Gxk=DWc zE=JE_%zapYkNot&3M@mbQl9Fqv%*$ibop!OJV)1)m{5{u#1yaf$SGml+ESA%h8|1h zRY}_Pn$2HGUqQV!d3j6j-_P-E+`8pWHmE+wDFamMPzcZOvCUQ$;} zVrwpB>O8kUpAA}OdCbeY5Wt=u<#zSvlW$$}d}LHxoni;y7f>9WkrE-!B-X@_ui*(` zr5-zi`*u0KQdrE3uC!#JMb2HR0Vu7a6>>uqCi5Zi2K$LiI(Hp1HOQ>%Cw`<75KHeJ zniL*?nx^!BgEWQO|IOykZ0<9gTU>*Q5rewFw_!6dgg8e|$MEL;Z-P9*L%II(SBH=H zAMc$!IoN-EY^x>1iEVG@@=q$Dw}+E#G99D@`qS;h1IJQ<^8-mH{o$fL{6=H6o7k}vfOG+VhW`7-&2DOpPeTKaM!gCI7k72I)dsf8R3 z2_QG`lKSYl^`E3ZcKnX1zYhKD99Uj|xW((E1_yzzuGreO<^CQoSnsUIgm2$ut6kdF zY_Lezlde?w?{glJc-2w#{Cr2W4d4@VPfxowPOtJ`v{Q?4L14?#9c9C?-@lD$gbTDU z9>;Q7bGg^GU(Ri*+W^PfLzd6dVRi-=U{Z6|Vi>{cWcsE5WLjL}eqnwu`FFQ}l?d+$ z4%0#D5_Pm_6GgG!WB3*IVpGLK971-m-Gz>I{mX`8ISN-J+a$5s2^z!F?yU z)r9z+^3U#z!$7N1VMWH^rOY?%7c*XAU^UZQM}xEg)4+@$!4~I#x9Rg);6T8>AnRJS zEMO*6$Ri;+HI>?(AY4P8VK)+b0K;mlng(QTagH#r+2%lDogq4YVTb5=ogq5D?GPQW zJw(UPX^7@dZZD$Kn7k>kBE+~on7o&VkkLqf{ zXppm9oh0BN8%`B}6k-7b383s%_vWS8Y>9$D4D3yvJ z@Hbw)8D=o0_{m@gU-HfC9ztU-!dppS6)4T0xFsycoi=`&wzfakXTH};?gj1|!f|=} zt)x?Am1c~BNmHT|z0^+!9CMUJdy?WV#69>La!Qn`@iaAPMIEWui4}s{$x0Ylp`)-E zBWjoXL9Wu9TNWg$d0QTkEyCoGepU0f+LDS1fDL+L0~|=LfZn0!vAdWD zuBmS!9`LvK<5u)$NS%e$nMr*XQlC+3FZwas=)YI(HDdxL0V~(?5w-lz`*2G4HWUCD zZy@X)_=e|q!d=P)Tf_xn&U9jc5JT}8>c)stjQGTV*dYE2tYO>a0hO_>=x97%_?w9sGu$sw4CkaEUxh9(Hca6v40dahQxb^z z%Y20QLWdk&!nT?WuP+mTeFgUf`w7VOEgbs(Go&<7!;<$gK6aNzXQoXGGF2dnM;C#_ zaO-LEYZ{*IKO^H$lu$HN><-gpoD8yQQCVbvQ0yZi`lUu6N+i?0G~Y{4$8dotAEd*N z0MtHm*Kb{b32I>#)LCA1sdqgfWEX(elqs^&yv#F#n{yR7Su|mXoHVWIU_u&J@<`oFd9F`@zdMQ@BuYJ)B{t&M~^- z5Mw07vrCN6lKyr*2DLpM=wmq`c#3`n5vT;S#UPUv(mG@SkU@6Fm(@rgceE|NY(Jdg zpX3ZO>2h5*DHyL(tLD9Y8LL5x#wqrH*5Fq7F&K*Jn~Y)Gl}|4&qY;M%x=elvQy!+* z7^1&L0F6S(U~chi2G=i!={c1hqtNO1-FQyt1GcND;H4pxXR_aUabBXTMVYE_l6 zb3#}I2`kg$h;A+YN;9Fzu7rVql8JIr$ekolQ;lRuvk@#9V|d&t)n=&Hm?I(qTb8LO9~Q1!>H4{dc1t{P#A2s_I1o0E)h8fGS^xG9SBlX{7Fk;VR1u zB|VqRi_t;8@gFy<5m#1>QT19_Oxa6kI^WDKOUFqrvJIn>vs@E-t;tq@KFS8wTWXGT zRECM60&YOxclz%~c$*Th$FOQZ0+)sUqw6B-KFaWd@O3&4tl{Hlv+aRqd(BN(j+<9@ zRChrhqq()g-6L)`RCwoKZ?CA^uG8+hOSi}F%GRK)$;H&5aen~@zMhbyzSd5NdKO9{ z0B_`QfSe)bqy)D3u7dD?4}JADZ$K}Y@(PWUj>b__WPc|%-;tNDVW};;m5%o2W>eeJ z!Rb%X)#$z{-p?tuGFMFv6Yj)hz(AUWkFsL-x2yn5kIU+3gOliEI8WmrV^69jiCC7< z5#ghU*=XR9T2hx;#U+l$As1#Z&YSNH-{ zR=9w-T7@7r+gC!g;8y%f<-bmWhS_AcsLuU5DZwCw*nZR%oC9r_oBxOJ4u+4{)a5f( zf+pZ<=w_WW9o0g!Fg$N8fnl}5g$Ryf&7IfNCloGuLqOj7+8RqwkEW&^>Pp;U7+gmfDUr|W^Osaa81RHu>ay8 zrL?<`qY%(m6s2Q0oaDWQM}@gw&z=j&>edyE)kh&p;^;Jg>WPY;^mU#@r}{;l7Cdt4 zUv$bh@%1;BxR&`sS3y>rRCC~4gV`&80CffE#+~m>p6bp#bOf0c9La;Kz z(rCiI85vydJ$3_g_eX>DH})QQt+oR~yFo5h4f(k#0)FIqwBlAHSXGl-RD<=Q_1v4Qiu@?X9n8b(JLRwUx6V7| z*g8BR@x0@T?$JEGy6Z{T5{0K%%ctUU%H5h^fEmD=Cc~AnDH$gPx+c}FH_<9#JF)80 zZdFQuwbSH$rP>R(rD82#ESI18&7wAP(gV10v%SRt7xg1t&=7w=0@=b#kT0^F`&ZO( ztK#_?h{y^22v}+%nrT!#;nhP%WQQoP0u`e5eAqkd&Kf62r-d1YZ z-yrcFjy@1Al=8+82~B`B*nkOmLv(-;Aatx(IOuv)ZvzGz|M9)?kGMXcFTJ$uK=45D zdP!`@aT3RI?2NJ}9>(TpefR?$afdL8pBsz^gAs-fQRz1x%*wf~sC!Zcx-^;5vx9zr zG|upVTuqItn{BM7sEoPTz7`sC!ZJ8+=M>zWGRj{K2a?a|ignMZ2} zxiS1&t-zt>k`_!PqrL^nzYNLK@1>Aidt{Dv8Gv_PV zSfCX3GiWKg3^=rPG)#6J>F0%DR z2w}+xJSRi1@MMt#^*PoW)!Q(*fU){(%2bKK* ze=ae)mE(OBiWyv-Z9M8X7uVYJlVy&_yjO6Jv0|fPWGooa1aMR-6Ze zN`8S3RX24og;US~fz1E?5~*0-P~0vX_6~$zC`kIT^lx@OZ=@0@;CT2o@z2X8EcBfrcT(4vW!VMC`Ch|BH}DK-8oc zUpypq z#0o-O9d8EEi4bOyhr;?~3ZQDqje76v1#WgUO?MNV(oLMJelt;zkBV#DKPcD+yj zgv*QD>~wjt!d&49g#XT~dK^?Xm&UZp0w0Rtr53|+Tqus?VlOxl!4WPGF zA2xrf7S7LT=TS;)zjL$^0NX0AAhXpPLB)`Vr8lEiN zK*L+OR=>Fhy@J=2RayTGDhz9Q0MooV@XCJ#tVSrhrWTMsuWUDoVVCTWKAU7_5Z-vq zPc>)+xW{&R6Qm04y0Qq%I^Kn>A>1QNloaQ;`Qg0{xp^EQeqCp@CME=({cyg&#pK^b|n!wTbE+E!J25^5T zQuQ#Pt2g4i&T)n@BlF+jUBadC&mV)}1Lpl&+~n73^LrBEB~RrGP=S#IoN9EefQE2@ z!_}wM*$CWbrsP@uGd5ckzZ4636~LCp!Kbuv4Cv6vz%MHRSgq_Css6E|D_me2i&dD9@E3V3)I%UE$23y?JRzk}=5+ldc|lZN!<9B7j2kr3RFPaOrgicFFb-Bc zlSQBP&}~tXQkaOr>xwFJjB%cT5w*H>i4Mx%y|L2$f#5u%6_X$ z8aBtv3ZDjL)^x!|`OWo@!1;go7x>CE#5$K}N^Enq)UmOT+mZ{CE#`uGSuAGAsz=k4 z^I%KPj^E|YBQ%D5!v(&xdl#nWqj!&{C(k@>L7}rST3z2mguz>DV5d?B2 zIR_t;*-~-3VJZ{Llrf)?@cal9qTBXX!x|4AfTM70Zx~Gm9ldJOI{5^?BU%1#T)8`F zAskRRdwzI_Z67sSw!mYt?5Z14NTtEpQ8scA&!YL7Elf4GAy`k5B;v5&{-92o`v{{L zWMSOzIw*tUElHct_e_5qU2rgQjy#!c8;3$FB@KnqWRkkhMk567p(J;@h1L&JW7wwo5!Jrmf&K+zkM$n=)mJrTPG3?(lg#Hl?l zcB1yUcra=YBFhG;h@01Ms*<*PbJhDT7z87IjpXXRiv?HP$5MZBFZ$wAjwgY{RU(+Z z_dpgv>fiXVQtARBmi0Z;7H3;H+@!KDRNoW(7+Qkv5Gp3KG1T7|D;Zpx9>JFln^y#` zleQ#;x?(C%94EQB7>qrv^xlX11gv+AT7;$!)%rGM|D?90-a`*Z;6$E=+WX=vf=f{_ zZ1q&OhU$A`Y=D24Gy~#3#Y!KXp^asj98A(CL}>NK<0M9i{U2d_An9z-P65OartfY8 zc?XZv=sS44cLEO{r%{;5!Gry?@F0zcuO{;F)&2AERmVeh<1Ob-OdH;Krx=lP9lI8Onkd#<3BKBNplwUh*HX3d=()EhyiZ5g`~wjl+u2BGLJkEYwh(=Ig)HO7XbSBCLOFr*ek_D_FZsBE$G-ybU;wB~boq zUNwGq@&&BJ$EVXzkIvuw5Ey#41W%K|Ab3Ch3kW!VP{Xr=7CSk>R`WTt6QV0EfbvFu zc^Y0CdszZ_Z8t9L7VZSs2E6wqe|7?(?*mSTU@53pCvZE=Pdi%S%NyBbWCYo0d3t{H0Mxd14}NsxE)9DE~ITt-$|0#{b$Z1=OaoA!nzZ?gk(V zdJ{Ljrz1h?4*7jmEsA_;?*xc>2##gQ?kFB$d|PoY5<`o~Y!|L5D*Co&*jao_gRXH?&5kZ)(1rZ4!o;|5;a#ZRNtODtna+19^XF z5gEB~MbS0S))cvL75n9)#eM6Mv8%Xj1o|LSw5#jQu0pc^#lt{WN$`t@FN$q_wq}=* zBrYB;j_ye+?kNWUh9eZ7szmG*N{KF!uZ5cH#vwL)u^xp?l@63DI+0;S-ivZx2GUFJ z6A6`ciqj`uE9NySTokEbk=IRnZmxf3a0uQ`z{B~`=|}oZ3J!@sz%Kp^5eG-GlKzhF zn@D#fx-|77FKjQ6PCo#XY)`XhP4Ccm!Ob3Dyh%Td6};p@nJMNPyoHLBPO>OMtR^#H z6TtNOYD5(e77>X2wpAqlK9h6$5Uzl!vMh@=tK|FN&l_-u28j_gQxH31Xf1!;#kEq} z9?o_5vU4-2e|EoCx6J!)&g&D}1L*cG*h7cRj=e98pCh%l)AF@)qMjcH5E|T10sz26 zk2|}`?se$-^!*S=yAJq6i`0ujv_g-~z1A;qc3zc8xYXxCGq0rD`1!Cifvw-uMB z9cKT+qF{#xlar9n;vRF6`KEue;Txn$22~Zl?(#Q91Uh?iu?qo7EJDHhG z_CI^F_R3ypD_9r>`h)4*vC&_)#zLFW?m`V4jIMVrzu^4RNDu$&zp~ZrV(R{yD4N|E z<3?PvF|LGy$FE>J9l3F1F%Yek;EWl9$Sp5KoOJrsEEq$xG3N>h{SvOte@eC)CZ6-yptJ=yBXA8jW98`Et1GKECv;z<{}MP z<^&XcUP-JMnm2kjREvalu;BVGfnRXg=W|5e?LmZo2 z{g8=CG*~y+j}u5v;zLUe*h^(6$i3s|`_nLIH(@RaQQpBPyBy|Bye0SU3t0wec)+f4 zFwwAw@=l+dS7>Yf(q8wyG_f9M!|+V+AYVi2(5E_U_l6caG6RCJlbx1_2lnp~Tyc?p zvrp@z7RIOwd6y^3FACO15JI(OY3Z_)+QDacS%UT?7dx9qk3onp}3WmH`YiBK#- z2-Fjl2WGgP=t>sp8evL(IH8ow%)k>qlm!6<$bLbmu=F$~mH^2szktN=h(}PK-sC1C zM=Rl4(&AMmU)@nIn~pQEFimLN z(<6|LSiw$vMxqLSEC2QJ6R~QLE!X_l^2A4{XiV=Iy_cL?1R7B7X27JS5pcw7Jl_+~ z)ETx;JZ|w*wfwlkdcK12F4=0=IrJFp8dfa{v+GpKya+#n<1w7zxIOnIL*YgrV2RbH z)B38@=$zVV`S*qQFv0kKoXeIqXRoPtjrw3u7aBL7u(OMkx&k4brS1z%MtZ1$XA?ade|Z}#c+&@#4c~vl?S$50{2;i zKZ4<1;kMdHMTR=V9{C;UZDd=9viHr@UEljvJAU2~-PaXOTWEE)P#t6%Wpe#;jNX=F zGUr0us<4klEe+j+ltKlQe`Z1dA^A<7XR2zZ`dxqXt%jPPB_2$B4k%z!$?RrR2__x# z$y=TAmOrE5+?%5c)13-3p^a*W*>BNy#;%sGyAfP=@xP?fv2vg&%0CfsAHF;oG$JL3 zo*ENC_BKGxW>eNfhT{f19}SXQeBCd%e?J(jW9ut{db%?&6vQ{#K#Ze)zXXIvEl}Lp zJiJ-4a6p?_{w|<#cy_2Y zk9m}+Vj9KdWGs+tkxSz15o6dhA6t23bE-I$-`<0bHZ6wqv4Y7neqm6%o^GiL87sK- zYb8953bVeYHG9(cP+C>oe9 zk1yCW>#O`(^+-z6mg1|1_U

KOrmyfp-^y$RQlO-B3>=uxLo7^ezK^Uac4c=Vnv$0c;(A>TiKeD1==^a`EK8Gw)tl|s|oo8z`^m{89*>g|Z3(nE6 zwP&54Id?4g5;(^0w+ZClzTxe+TUc)Sg#Eeu7V$*ZINDg$Ymg#>y?~9nj*|bTOwjZv zvlykk$#vnrx9M6IrG}K4S@mxTnc`0@KlN22zXp`bWL1G*fvx#Y9M&9b>nh;oGbiIk zVBUdD;6!3*t8jN`}bqsCfDC3t& z-dx*h$W$3xTFp42su(WHz#9jE zi&%H5n!G;_PWe}N=aePXUaX$NjDMB~P=+5}x$k%-9R?31Prm!QJ)KPtepOscbUHdI zq%LQ<8SMVh(<`?7J;0-Sj?&(95Oq-dL*d8UzX5;Fe+{K?y2{-djj?b`@_U+jw2rZk zMpku<0L5nC=ZJVyeJ>Ul_j46QYCEBq4nFfL*s^6p$aJm6ONq4L_Py;Vgd+)306o>Y z7vAkVRkc%WA|2SGyQ1#);qIZjrP74W8wyt1m&-7##0feNg;LyXri{M(NeZ>P^hS{j&KHMK!c#i`T1{j!{F0G>|Z4w>Fny!CJ#XA@Ss2P*CDTVRp+l4zY17y9C-Qcc|*u6N5v_0R5$Uh&R-h zSN?pRjwo`ID1I&Cr)oz=F}wPVY9Bf-zJ9XV4WmF5!U~XV`39hCu1QLfg74D00zVTQj?#<4#K}0On~}52Zv<@r%K_Ky~d=zrEPcXASpcE zpqJ@$lg5q2!kuW@T_ChFz?TE_*~Lb3P+QKH8^qqP71|&c5Jg=Pr5ks+*e4V-=)3O;bg{lYl*HJ_1?pdW}f^N;FkH)8`Hwc z^cY6Nd*pa^CnAYZ@ya3ciKOV(_p%?aL2+WDgm&>T@m}!l90|cU32Z0dYZF_51S8GRyQ+-+2Wp2!lXU#gd80>&Q*L4Vs zF<6>3v5nbgo+_#gQh`)8bSlURIdrPm>#0;yh|nUNBK`3V8^biy(P*pDnw~H^t;PrN z9k*!5TeZlHfOiL&;)I0|C~}`UFr%+gA_xqoh*2X!WMuRmuU;*da@}(b2fI=w2 zTnW46pwt;3&Q|)VfK5Uu_O+aflU`=_n-jTgCQh+4!rPcS28q0q%|BmQXKcr$zPdu= zqWpnl|E)k(e|$v;Y5b6Syi0rfv`K;auj;oXc)HD1K-9wr#TpD`f|O`)R#6F!C}Va* zPnUc%95{@dA395{W%F39;49Nk%zP!49xIFBzVG8^J;xmqvEzIfgnq3arPIvud8zt{#yI}39%Zm4m5uLW~GmS&(L+K%SCdd`9X6kspwXB zmcYPy(f8XdtYZ}y`%=UvNt#fT`0=i~KcLKE7R;I-S&BbVn0o%UNTlQW!Qo1zzK>H& zF`;o|jBvBDYSoOFVEC7xqj{f73<068Dot~0r{-KgZfBNmp1{vFFy9X`q^MH1s7KPT zkgj6gW>P3=#$x#HSVCeGAtxke8v8DFUau&RP^8#5KK44az9w?HJjDZ64kDDWv0d`@8@~6TcR9YSFX+tGB zww=``mA<*$ePs~KJ9jC){p9|mfnt-YVt(X#q$+CT%nr9qG!8Z=gwp4uC=X0aCNVUc;VTxHAz9mg3Z0s4^w^;c3PjQDQoxXKyK z$Pw3Aqsp*aDxm&6uMNXTO{I->Dq`+Q=Z)oy{gpdCy-()s+6`r)DIK7*)5s9VtoqWr z62O`mG|uo-aR4eOgIFUe9i6BnCp$p~QXrc!ma(6-lhZh9JdL65DZ@Livp`QyUSaW! zpzL0%S>D!OLkAbJ((TXnbE%CWQ;U7sS_;AZQx@l#ak8S?;IBw6Hr*6_w#sNZcj8}m zH7yBU;YStK?K8}BXgk=$OxU@smPkT7sda$>c*Dbf-NPOF z)cx?Q0)lxm9q&k6DEm;OwCb=|k$ zR4{C%#FFF-a1YI!9obc{2bX5K&N+QTMdi2UD-VV?tySMgR6fghhjN%{TGGM@_zuR%$+lI}9 z`ZnsYv#W9Pq$aZ#vVb^0sVY(@d z$@r5#BGn-CYNI{R)txsM;oiN!Rmpz7LsMva`=q}w$3@qA*kioyZ=&+qP$}x>-l%jD zAkL;aX_*Z!Nm(6X zQCFE|(h^EyP|Grs(e_4o!OqCB(OiqUciRL;Zrk)$Vn6i4WzKqJwUxO3=rB!a(vynq zOSl!)EoUEovW~pKxv8yx4*xRHR%A-SE&DgwEMVyfrEBV!2p$T8or2?B;YqeJ+D^Oy z3pPf`WWrkeJjg1Y;gGxjCk;1X z`OJkwXry?H%_FtagYf<@q;%%B%uMAhPBv$V$4fiO(~!y>%{;1B$2pYC1_J(_imeKLs$P)z1u-XTeF81K$N)pp%9?4MDKGJ zieQ5scF2PavD4}r<%iQLFI6XjBLo%($ZbI2x}a}Ovh z3%?@KXK!OGkluJ3{4<$>&s#QMQQLP;qevb|%q@;PIQ4YKcc~7-meYtjaR*$to)8b4 zi_mLl#eO*LrzRLEzrM(`DWojD>rZk<+dZwc z#D!Uia%}MeGEy{^Is&9GUvMmwxn8^khQm;zFR$V>kDQdXT8Jz)(q7Kj(M3`Og&Ep`Ic$@<)gEFRZU&4m@CKVg@dF;Bc<@W3YE|MQZ^5?rZlU znmPxPs|(uRJpqh+?4ujvzN`M0#0ef{yocn`1R*w4xI$pnY z(`Nxcxf(l%pT&tHx%_adEGRMLaFfZch8EH-*{^|o9ZIFmg71XTm@Z&A{{>sa*KKKe1D4@sG)@CdeymS)ip z&E7rm1e%%7jl)8gad1%j{IV#dIAP{V`X>EF0!}R+m4gP^tRCxt-u{ z8wy%?3R+H4YMJ(1?GTxruL#-7n_hXaLs9FK3@Q{-bn(B3C>x(#sVUk!(jbLz0}d z(xe~|Ac=og3i04xcU31p!AyF_<%u>bdEsbO8H64odxNBa=&-tdV*z-*eB95oe;x9 z5L45fhCidGE*LF9Hx^KfO&uM=>c#ZQ{sF#?_sPn&iPzX*v6h=zY*FjPLQ<{Rz?Yb~ zO_0=sdiKkN(uh@>V6j`023~)=Y$?m1){j&?Jw^^@$(9-;X*#W74w)#=sH))0kYT zVI<~2($d1E3E7pOwWAs$(g3N2i<}yZK5=JDbyrPyej}5!Z4M|bEVgn#Kglj}m+w3{_P0Z5a2-vaDZ zRtNr)?gMd6%Au%2c%SN1Hq=84y!ncjW(jSg(4xdb3Z+YV2 zdEvI)6SZ-pl9M>5PvqF==J0{)CY&q&bhK(HaStqVFt}T zgJ^qumiazP8R7bzKJ3(;VP6nScygJv_8b}~>eSu{EE#Qe_c@3hKJ za6+|_)>t11+Yt}(vkmzxUTsgCoC13^yQH5E!s65~WR0<(tIj8PXUqIus$ZV#q>Uph zOh<5u@{arQ5h0%aEN>-(RjX|FFa7^O{|#pWKwH#1i@fk4&^G>m0WFSBZtpmY>$sMz zE8$o4j$_R-?#v`%5y>zjbo}@qb^8AA1gyrnle-^S;}dq{FifQ{>$A_GJN8JWgrMg7 z)!EqEcRdddb~z;9$K~Drb-dJ@=R&MHHnWc1z2a-jCxO?DS(k5C@s>&GzXv?20i-Za zm(vpRgH$-!yrp4NflT423f`XdMppC%DM zE6V9^L^i9cLqpMmY2}SYEv#sn0TU<|R7M4`ofqY6nD(LLDTjkKJ}`A2ft#A=7kwo)s8!MKr2tL{JUR$-Sj& z+7kGr+q8VQOgS#UAW@&Th($#yR{Eg*sW;7UiOVqdUBUt~y@QOUruIDO09essqL;_Z zvmeXt;uv}(bsAF=(X>PcO1^>Zw4?<4Wf9v{`XZRhEiIqAEECLc14Eb%o)Sje#`xx6 zZ7}F}FrklN#`b#F4bj4aWD+RS_;N_kHC2Yc21wXZ1pcP*LU^zF^I5lK@tX*N`fr}f z+|Nky5xKwdEhT!7(Q0ZK1OVtCOcPe^hHI&Qy)xIby)~KOF`CF1tH?cyC12k>a{n8pn z0@}0`$ziI=A;ZxxBk1{wyMh6PMv@oAnc+sN>eaGDwr^9EC!vrO5;hXzPEBi`SM32r zt5ckN+ts`*>%tp)gON_39VHJRw1l zagElTlZ*hXrc0CJsmXW3=sB~K<^px2$6b-9F4D51YeEz@*op~-N>qemYB9;xHCu}| zeP!~WMHajrg1Qi{(>wTWu)6#mPwV-eW2&P78}Gla8IR|nYhY3Jex2^scjD}8lmjDw z@6$8aaA$|$XBX|Pk$Lo!ob@!~#^cfwGCZxBi(k<-ThaIoG?g#H4V z@V>BeLnB-DibSbUZKKcfh(3*c@*44MDf1gynW?EysW!>C{80kg+I6oi!|YQITq*m6 zTqTa;)Gkljc3`bPMj`o=oTt}kfm0d;45q_uZlpJg%+lV>zjuBf{({ochLqwRU&13G z;|T*$F`oFvg_-K5Np@BE`>`cUlqCiU&6d=L4IV$AIy3JKY^Z^j-p8Zze=VzzX*rRm zV8BT4&C7pA-C`pB^KiekP5kLJpMOi6ac0fvRVTireFI9QYA3wkt%QqP$alFW`7bt; z+K6>rLxC%*;SGG-_KAg?3JfHTaTM~w28yp-xmevLr(-G5kuBpeb|4Jzz@=r`u zX93BL)j)-6`-afJjyyMt-P%qgWHT8p-{7;2qq#Mw8Xr<)CwH1URH_W*+>FbR@*2cF zwmNK>vAa53n^!|(*z%6|(x^cOM@K_brWJVA| zrT!Y;8g9q2Tb1)O2{|3%uNfW&Nli&hCK1fxSD+(=FwnHcA?D=XGs0o_px2pG9j~pv z%G-{ynHg6(`Fv5-C7tZ)EZNr1oxRT8r%`0J2K6)1YT-Wx29l(?xj3e})&ZK*C-Pb2%!fS-DX z0Zj#<)+~JK8kmL>*GL7m{C~5OEEF^d^uK2e{&U5DG6^71(*e}~%OCvDL;o}S{b&1s y9eRC)0{tfzrp9AJGsEbCpi{dsp+#ZFprBLXv7jZO#j#W6v7m|I?{ME=0s228qWahX delta 122276 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 WVvHDx3F2W-0Ts2@fU{6(EHAYg4b#^ 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

Qkujm`KAIk4BM=r@Gb% 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 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 4f9abddd4a95b5c602f3169f6aaded6d8274da63..cae2f660c5daa5070a19e65dbbf2bc5ed65e0569 100644 GIT binary patch delta 120395 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 C|CB=j 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 b8eea66a608ce4859a6c72ca00910a7a79c99114..3299ab03b8e0a33397921b098ef91787ad00066b 100644 GIT binary patch delta 120112 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

cFi5a0 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 z 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 delta 15742 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�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 delta 2328 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 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 5c09d4b7c7a33e4c91ed618527468affc05e62d0..9c48dae59f0692d656fd6c3e9e9e8616e5439a9a 100644 GIT binary patch delta 120039 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 Q01N;`0{{TbF9HAn0E%hl2LJ#7 delta 682 zcmV;b0#*H{<_Ltz0kFmwe{(a;Nb`GR5a9s;0AmFJ02TlM0BkWZZZAYdMnP3fR4+|$ zZ*yfXY;|F!R8eo*Fc5wQiT`l&OJl?gi&MSfcek$?P@uLf8~1i^~Zbxo9*rQ zEja%TVCZ#&pp}%G!5tG!QBz0(+oELJ(DFHfcr>1jCgb>NG>Jdgk-aXLDdn)EHfjn_ zckXB@QeI`w{_{7m$v0{a_AswR>QYCz*9Cw&fi}vzGPbMsWY3IO6Au7w5GGnyDrFw5 zn5mR-=%l13JwzxXfBhjwIMLNE8V^3jIN7^j^zeWNXo#?@E(=wBDL4yNK;!V|7Tzgx z5Yj-1*T2qCk6;c=SZL=Q6kr}LMPNGYsmrMGBnSuzVa`O5D_Mef9XqGwUeVGw5W8G; z({f8fwPwmh{sst_G|O$Cs4cRMi|~pfz&@!h+-01CDER*Ze?O#pRcLKHd{ljf>?ZUg z*=@R=aHXVz2+d^0Gk>FwrkRM`WkT?`cS0M^5b&rmA>0dg!;q5H+|{RShm2bjJ{G7Sx*hO}+SK>}$F=`|Fv{ zCeyE?m!~$b53k4HcH7=O?#sn`9&F2hw{z$L#7GZwGt5Zydt(sc0RRAF1pt>uF#WoU18b7gZ-O9ci10000C Q01N;`0{{RjVE_OC0AbEF%m4rY diff --git a/Moose Test Missions/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.miz b/Moose Test Missions/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.miz index cfd8633ddc74e5fff35ccc94df0bb6e5d319baf9..4d1619242a2143b8d2f52ff136361821f0d842a3 100644 GIT binary patch delta 120004 zcmV(+K;6HAnE|7=2(Vrl4>UE;Nd3xac!SUZ04Kc)lWiCqf9xG=Qya526gA z;!ph~9095e3`Y4yl8U#z`1~U8B!fIndO(H>nML__f0`!gUX*3QdGtED-W~*Jy(nyU zgI*T36ua%~JPkUzNV;Ng=jd3AnE4KmpHoy0W?~U^37L)vlR+aFor_>_9*O)S$|8g5 z_k({X=`T^50bR(pZYRZqx}>vF+zSD=wnjW2`seF2CB=Qn<6gERp!P0V3!c~=1!9C? zPegggf45YEP^Eax-A$9exXAP2tLM*qqhMu}0S!M%&!1n#pX29mlHvFmE4@g<52I*^ zskTifXa9^kIT*$gn|d!vK97c{IT9eADn(}zryZbSWn7B8A|DSU1rq<>5X(eh8I59q zC`)OSkJ5o)6of=zkC4&kcfzTkin%J0Fr6CEf0C4M5M8-qFICdsFo=lL1v8HaVRY?@ z%b+)k;6)6BIL&lv!h}T8xlXwJl&OXE_?>dMv{YJlXp;RX4=8I>6Y<2k1y{TvJLi@~ zVz4B%QBpi7I9TLVbo(48Db)Wtmg%Sm&ZLonIB6X8;z@LxA!My&B*`G!h1Vm6XB$g? zf7WXW0fZG5a-rx&0>P>edLZ=xUNhhe?>!*pi9rIU-tR|)9IU$^gy1X^kw(K_(1}FS z3sD)Q7mzAXA*W`E1zD=H$qKX7A~yvHiVoH?PL_RRLo|p?gKP|nqOyb3y|K7T($ASd zn;@+0*GPe?zi6sJPTT2hL*-hYz}RyrZ5;K&3^FR=Fs~z=Q6i*}5|;;~{#lgj_KiP~#&Yq4k?W)} z10zqk)`|QqYM(ZU96JywO@EZ-;w%D_V#Vx{zE~^vdOY;^A9 zgep1@9C{datNwp_=Y7+#2E1-1O4ODbHCu>UI7BjoPx-rc9I1FTo6wK7YsZd=Z zCH>~fR&<_5j%EWKep^*b?@w2M-+m6CVfKX6}iCL++pzJaT!5K}1fC7R3Fo_4b)(&L#QCO4YUn}_7g^v|{;=(7EW*}Lr zt0+jh`@$5U1km&ID1~Tl)hOyF;)E^=iRR*vO#O^?7NOh$UT*nBfXP>So@ChHcU( zDxI4CZFRIhzmC>j9o@AwGGS~I#`BaB)X`8XtCO2&7ox2xW)@Ew|Cwm}FIwU`y^&Jt!|0(L^OvMk3GOV%M5|$S zCxylfat0w|>Pb+y*z@J-2sG7gw#pqDE$0y}f5-K)!0TJ$7jk1z&_O&L^#Ts1+g7C4 zlN{3uLPxUzS|!)TwrKiLgrVU*!v{7y1spSwO-=zP3OKnTNlT2g(b+QD4#b6=bx8Yf|m} zV~tDekM+~!A8W0DK;y2YiT?M)AkLx56iAz9%WR91AWlg)B*Sw^wG4z_jeX#&s3~BY zz?vXUbqd0)dFUSUpu~{%#iM{uk~JAie>VnBfaN%upu{qnOqy=GMQSYU*IpW*xiYW2 zsG!qXL3QB62m)_o>|vsya{<3H^wrM?IGln9Utr%3h79_H3C(Xk>0Tnjq`K95~PafAp!sQg(N3JAvNSgYJAlw&J0bP)_YRAoX3;j|l@G z$d(W)ezHtSVqqY7zacH906%Id?GXv2=a7JRg}SXs6yP5%5=dH4RL(Li1-rX}4TaZ2 zVYVXlgk}IGGa7`w7%3oFtjG+lr!U)v3QAt2A{iM3Nd?7O!FNeT79N#Me+8#GPe{Sf z%v09l(UjTPgFhy0YnjI`D-~1zRHbyZ>+-ZbQLK$}09)8na z3mev|iW2H74s#5mu8U_#ndr4w{q@zhz+NZFVFC~^7W#>o9?2G62QV?JVkF%sA zf|{nqboimFX>s`%ZCb3d+cho7`!G!l7=4?jWf&KmS6z#_OJgzIiVddF2Fhb92y^^v z1R>7wl?ZTpmePVAf5boF$D~mh3sO0Ph0-R&oMKgwt!Gk16Jzyx!Z8OJKGQ-iSjIRR z$sNE~!2mHR6cpzz-ysHMpkN)K2XrW=fv7O)A_1_kCU!Bd2GLue@()w6F^ru--S&Eb zautjr&W5q3Acdu8+2AS1{vL=0+5O7l+UrASEpy@#V-LA{e=Hm|`(RSn;%k;$ffNmE z<)B28(ybPm)KSE==d0~D^w4W6x});UDTP^DC2B3Eq)c5lx2kpK_BxthFp;JQa5g`r zB8!5mQROftD=c5Dy%LnWT4d62Td#^Qly}PdFVZE=7oz{VdF$3NCBUw1!o=Fq8DV^v zTw%u`4x$LQf1#kF*m`MdX;!V|!i3tzg;V!G$erETC}<@O1yy((GRN2eDFR*C`>UoE zkko+@Vd(E3>7xQi5l2z6INyu6UOk2op7xau3Ju+ zk-Lll8ZI=*;D=w)Mri;azuOjjn>+jB?T7t0$2$l6f9T|e*z9!RR01dx>|W$}u;4j# z^Vrs{BLlHhFI2&ZnnG~wBErKEZ&jL;$%9~~CkPX(`WPOXEnFO-N=+k`TXbP7Ecu#F zfWE9t+wN(32wAN>*bj32%w?-k-WOAlt_8vQA*K9mL?-_{Li|arYHe}GH6A^wqS|CJPET2F0kH<0_a8T8Ic&mmwV^3fR-7U}Mb6J`kRBhH z%!=w$OSsw|sgFAw1nlj&ih4ad;s8Uc{DMNg&#Swpa)Afo8|+(%iDd4CpA-VnpoNk` z0Qsqs{28-QD>o_tU594&?UZ>qlr(;Ee=wjjRg4LeLwIy{&7DKy5EdsvDl7OOXU9SI z8M(6m!Fk7CoZ;ZK;gSA=H0Wmvff|0K-lTRhwdOchlh}ELd;@>vZ);Ns%T>J@gOY&w z&-fP`)a&tn&{tUsg9-w^!9fK-z5@I=e1s6ZfouyJOY=~GS1^J{RWzkaT7|_*f6HtP zRbORNR6Jp_J08UyU3|!*?x+WY#H1g0%n3!_veCy8JT1&dq3_nJS|9#$V?n#|brgOC z#T64SqF&6fG7&zE`0;&ds0fP)m(V(6ILZm5YV&q91P^EjOs|Hj+qxS1mdVQ2>aDBSt=JegE4Dl#L4afSVbOy^q&9X+}IGdmbK}&epKjYk?FwtgzhMocQ9fJc$ zTpGmzedE=yhI$53<%_5If7g%ik-Bth6snFiyx08o{}-HpTT+)zIPQ*3N;h`2vx%AXPN7DKuVh z9!e4e*wQp$;G6Vy|`gBZ;$h$-ELKPe^T_f%!1{p>?%r) z!O+EA<;q2WVpeF-?o%LKQN%42454z+%QU(s*rLnZzkjrrQ(~ zf;BHVWW!0?h7>Mvqo9UqQ6|L=ftu=pBFgT8IJspsEVR-Je+br@%7W`wIexNYp7rF! zioq%gX~JlC3B)RL@-P>d+L&o}lm}^EV6htoz#`MJDZuC4{&n4|rw$OBk~Ni**5JVQ zQ|RTyGhHT(2ClaZ-P$!>6`#~}pG~JbmUOX(PoCg!b#%KXXw+0X@a*^ukWe*hjEU`x zI{YRnofq9Ce*t)D(N1QWG_jK=ExEN>{3PoMB!~SJ$}|>`_sdD+x`7CWFJ^)D!;{9u zO_)%^jb}wTRQVR;sda=gjJpux>MoN}{p@1Ys#US}qDmE%aN}08YH|zN3m3s5w3xvu zTP+*hQZeRT2z2XStfmX&4h)Yd9l@fQ6EGic!BR5sf2dG=Ws5Qb7^hI}4$T6Pv{G-kyhqxAw0pUk1CjMojS`)#D6%c;m#mvs(R z+El9)IjJXZ)&nGV^@0GWl~x2)Cfhjg=cp&PuW6@Osk@z+>YJPRiCw$khn^7iPi_ec z_~D>#+h4&i}Z5MkZLu;qjTz}G`a&0Hh2u_ zP30q-kYg^QXw8f19cREQ#a+~(tZ#T1O~lJNe~!u8l9f%DqnLQTnZ6ecUSQEY%J`}o z2x@jdt7Z2NEGy+Zp~nwc-Foqz&xaq4(k^UtL}u2?yF0IvL{Jtdp&%)+b5b?SSsBeT zKB*Xn>lvt~X{!lJprk0Q-OE;5uRNkzp*w=ttB%Nl=IF1ZIERN++8wmLfV!n5i>aE5 zf1#DUkd{%uC3W*}D(@w>tsS~zlAoO-yQI0iR9ba0fu#*31Xnu#!dbq8> z|KV2^gRauHht}-<2Iv}CQv(=K%)k4bagdUEtRh3Wj=~H|{9ALA)inFO1Xe*Gh2BV96wS{$^1|?Bx@OW1ff0?rJ+t|T0 zTLP@|Y1Ar{p^D%h#_XVKk*PpeCkVe@3Gehes61EmLh#$05%HfF|fY!+uTOx#er}ynLrLsKKlg zmBMe3Sh#6PBFj5IiZ?Ea6%?L=Aa2T-Qz$6nrc5}6V2lqGmka*fMdk}FRAG(pJ9vpyyyXnh!>&T3xq@qkyv8EcHLf9##osHlP8qoe&F zX@R%$y^pG$-Ggs8jZ&sN4N^m$#;BnW(GZ!_tVYOK_s|Rr7Z-^`qC#4u`r{rj9t6<0 zt4kaLF!=y(HdEIOc$#YMhM~*FRW9HjuKZ61&V?FN!bUY!u3?jcP7E zYS!KRYN%o@>Znso&Agl7;8`jPvZ`|ZXtVXNtqHl(l8a!c$;op*T%I)+W(gX{OA*OcFbXhd3&{`ynhgkHkJ^VeU-xCj6bNdfMXZ12%UGx(sgi?E788xBl2 zJ8&EPnYrY%<%DrGQ;O!udm;En2tcT}huJZi`?Q92PAtc4X2)HI_YriN%W_^H{x?`o zX#f5U9!2G?>&0}v<52>9VME?P$o*h%(t z1Xmu%0pL)(gH=|Ev$?X`e$%+Q;Yjl|(KG63X1C_s1%~Ed9no3?eE6d$5v*H4D5?(d z@cIL|cnKgd`%Y4*YD-`{g{Q4m`5vdONl*J0|d&Y+AHb5V>0P9yc>gj!^$tB&# zgqY_MUCD|t}Iu* z6_+DTWtXeC7Pn%-(K*cO1Zgy6!`}ZrmtCxU#h)2-KeJSDrx@t{$38_<-Avh2z`F-ZG2jY94s4&f@&l9oe^!L49jC_DF(VsyZIRw|x(s-J6@UM(~f+jalC0mMg~= zg+&*Ut*mpeCx2y+_wD0v59aY|qj2TO-B$??ej6Y9`tU3I&_a074jr0+;&-Qd7pF>W zoUhww@`yHmG!hS5(kFE2e``v3vvr3GkC*mmoIt9_cRpLpK)To8I_{0fMG5ER3I2YD z`-uU8m}~lRmpN*GL6Hq~xNze&Zp4l8H;~LS88eh_9~uY?5P(DQG`&PELXz^4NRS!mvJEkJ zqY@{4kbcNunIqTgf148qb7#vlFUDYPQua}2g9?Q(Z^&Uc?&23jeuC}Be%sm_TquaG zDa`7s2q8rc>CMUxC42Mn8FYM~XI;x+6rDE3^0G(&e<={X5$1Y&H_23bx!TKxIfmoc z8D3P6&}mgpf>cvkMoi244N*)!j57FSg8qm{1qMV7rzOiYf71xN(BH0rO=SsqPkm!T zjLkPgmz|A;f969O)k(Cwu$*MRs3E0<>*)#xt&Xr2#ngA!m9QsO*yb9$A2&*=vS2z^ zPCu0`z^z6`H9o;Og|c_xj_NiQNv-%1Rn%jurs_&sExBcqx&qmdQf@MC8Xt-N(#iB{ z8Agnibo3|a79a*L5!}~#+yU=f-sf88Vy<9bgu_LUe}>4wPzI>A95bzt*@rJ7k_pnK zoYVUnPv9RyyhXn=v)7R*C8IFukFVbmqO#**X>Qx~VBWbqA3;BN?SF*)S=e=PA7lvB z^g}}bJPIFY#Cb4RXE&XSS;Jg?k)1*INCrR+z5HSx*|FTRo~gkCp?d8z9ZdJQSb9RD8`@9Ma?mmUSP&EGYCQr z{uWh8t?|*+(Icy&n!aSd*i%Jjj6ltH-#~O$e;|tbJ~ym(s20DJ3jt8Y)W8}2%R7Q; z#SP)##6?=sO)@-wtQv|NY*SdkFO?iI5m#Ch(NiX5kd^V6^of)18q1+&8%__)N;IF3 z(9v&I$&5hNI#*EHsat~GSLI5G;Yjs`*z_8G<&ehDW6-Da3s8hKT-c-%bHc7<{uZ&YxS9&VZJ7&6M(|RC zk-jQPS(I+7rifG8tHxQh&6-wQ(QXUVIBLeTTeE4;&5jn_9G1+{?VD^u&yeeeVKJS;@IiyJqgS5_uyISJa%^Vkzd<7IV0N zZOx%CYTS#fYss-=nziX+n9@o$uQ`+w5V^|$PEq_?24)KyS(;NJOAA_0dAPlZe?shh z-%u$JJPVDxvu7>^DCH?4mS>1GOzOrP+g50qj zS$!djWteXwa|iq122T|6^^NsD0g+@wm^GYL8BGD?kdKJ$giOr+8Uul(d6j!iox$!m zU1mIno@a;vq}{CbKE9!+ezvY=f4lZe#HQxxH*D1VcJ*~tizZA)Xnk~QCyem)b&lWv z=P+9ag5#-cg-l;F$Y?)fD(?d|AF`*NXvhSM1=--%rE{7E@Zs%59-O2A0c|IOFJ!L)Dg(%*I1- znYo-=CeeISfrgiww&XTaRi_QCQcC@`7FJaY!%xwL^JAetDp+8}e=rqOXp_~nSCfSr z(gwFwWo>*?75>3HV1Lh5 ze~QNZ@QcwLBa-I$(I~BktF-76N5a8Ati)8ECS?Xp#>j1cGzI(f*L66BZ(N%n8urxY zq8vIW{YDFm^F{_RfAC`5Uk1F5b#GgA=n!%ruJcfPiWLdG*cFRKy@u~_Wbaum0d_P> z0QsrlI@I!~rE94MJzXk%o`QC2e|lO2YBR)Xm_mGQ$H-wob(zqo4TI3+QIPs9j!;ts zk{X+;z_?4JfaxZN7>WwL%&0&%{uA9?aCfz)2B`H}?H4t4e`RVarJPHDX~|AUL!IiS z(D@f(x|1asywN9?4N;(ZFAkJRJ*J+6WHX|Do8GsYD6J3a`KpoeZX*n)afcxe6S(Ez zN@t#Pyf@Eq59l)4S%c8Z0jQoo6hCYWU#Crz9?c!9j!xk}bK<8zRES@0?9YCeq4Fbd z>Ua;o-Sfv)f0t|#%oIozzCZ3HY9t=gS&Q>|xVd}=P#)LUPA+Gdo2%XINsc8#e_De3ze1F=}n4a0oa#)p2w}>4A z(oyAC>Kh@e|&q*W1*K{NL2i6J6zVe-_*-x#w!RRrv0J5!(Ii0D`4rG{#A+YQBI-lna<@KxZbk zZWV19?OHv>9BjdiG{M0vdQJ^D4h8~W8$~)z_p7F5#_ZK7L=&*b7xQLOIp)rAN;z89 zN-^cZett}~s$aJ;Sz8aDHadPX_G&m$0kGv$ zlXG=SU@l6SjG&u63p$@0#VLs=k|$e%9xe@vey&S<{JpG*-S-vgY^q!X|g5UkuS zcaC8$u`b62=FseW8geMG2FQNVNaQ5yK>NFeG*~;|{ z@%vqPJ&Mv8hEtQMsYRN?xn;=1D<8?kPbb0gUWT@uK^1~f9b~Z~68MH#jw zf5sI2$Y`HGuR-<8m89~ioJXBB9_9^?VI~i~;}^mEeQXOGvT}&DnVH={KKV!fhANWg zQ(-7_=BNwdd^|Tn9P?FwyPZt`fWN7$iti#*d)8m?*XCaSC?viRsySm3H?<-r@N!l)qU+4fBsFe?9vyCr>q?O%=>iSMe+GX4qH9&qvHs0 z7Jck(%9x;)jhOQ5)g~+Gih<3Rji@*3sIS8?P;XCk025){g^|xe85=ohrA?uzFM6vo zIlQIxD=T`-4XpaW-W9l*K4tt@E-_lqF%aHRV=@?|0OqY4?MS~G|#)|?7QQC!_IheMY=g{MV;(EWpEeFuR^^%ZfeSILnho`Et zEE^l6%!pGlZL}7fOa^er*k*cBf6BQG1SP#Z36q7ySs3u0+IhqKHiP{vAWLj=EnGY)24iG zFelokKFJNpdwgHUaRM!?S-8`q@f+B^*YJ#mLz|a{qJ@zTyARuBAl(zIZMa4R=rL>b zG_Ea!a5e4fBYa`bw5Z})f5c@M@td}zBZw-Z5UVxK2-5{3a3iY8y*5wowg1N^sP+3W zEl{(&-v(GL&Dz73X6=4UGsB&%-O-)IgG;^*2_yEI`pCrkhCaw|2V+=~V=@GWp$Vgef1@;zFE86|z{3Apvkm>Xw=(n{I1z^O@rKT;AjbK>K2H`8fX0Xn zH@mg9A49PDpxd2o?-KF5#oyWDU;p*}=F!pV=Kj{{_R*Wo_uKOr(C=?$Kv-!jP;0j~ zk9SEgoNXJ3_1!SOjbXgFm0>`QQNM|O`d!?|;qmL)<^f2{e{+=N<*iC`C@K%;cfQf%R-wg7sp^0+wd_+FtZK2 zS+?<@O{Ru|^5m4ErpK`kvPpjxX9P6sKJd5d*oMu`IhJE5RM+xOwgsCyn#EH#HKRdT zRlkg*D^`26e@cI4G)s?t8O1lgj<4L*s|9VHQdXVWTTX|B+`MM@S<(9B9%)pwS$1iV zYgKXz#(yP#R@8xS(Wq!m8w~>z>+MOd`BRdrUW61&3L#sQyu^Be-@vob8kVs&EL*Li zBFFNKK<={MeNiRI+E)=op7*Z|0?m?W{Xgs-Yf~ddfABN^VvJ>7qDzE3-zAm^K~a#C z#8;tZ?U9AsGGsBkQPINRZa?PLJG03Ka^fqNM>5l|>F(+2ot?)Ek!Zo=(K3PFSffCz zq_K;odUK6Z`9oj})^Dwmb!5z1#{TU!vbO`vGN$jWk*P~XJJAD5AEeO?*fjJv9<#jR zz0uVnfA`ohi=B$_|l~!cHez70h9>Qr?~ul7ry@tO>;^+Ad@7>N3wBgf;ZyS&?2UN z`IW6F<4#iFLF@!XMml~0Asw4a?i6{e#NI3c%VXnWg#GF%*SZYRk zX>Px*4OgD%DhvApSE3z}7BtZ|f&_QxZmN@KWiiRB z%&r9GTbO>#t}9GhXBl4ZjQ(~3GwbxDF9ycF=S5LwhtrFc_Goq0D4UQ1pU$$2{8zeb zH?f7s>94huyJ@*wrx%Q#k}gb{m}P$v`g^!R3|ECm>Y^Axcbxr-0T}eupMjQ(f2%I; zz-S~6yqAjD$cG=d8|x_}XlBjW&Gn4#G;H`urF*kCw&DQr?JlaI_NXYXd2xlS)9q<& ziUE`WB+(-h;Fst5B$F(7>ApZ{U~xt~zSsRoER;Nx;I=m{hdg^k)uhWu->Xfvt=<=^ zbBV<&baqza3M<>0g)|LozxD_df3;rtoV83|T1UDZObW`ASPgQ@yAT9~Q=;@P7QX&) z$X@n-v&%b^7>DG)tVTzynVo#rThg%!d0TBtfg1WXcSq6j`A5&2=d3Hp?OwBOi*`fX zU}|V%Z(6xKE$t;ntQMdvbf^_wZxv|m3eB$S++=a5Vv}j;7IA?3RSUR=e~#5GF3Zu- zx0ZQ3e_7hSsLBv*>|c&vGfyk86e9)~eawnUs*F=WwL+HcOUsaosHis3xkjG7w$8Y!I0bFWob<2qC;vmEn zYlG~$I#R;KF8RUPMjd)xAr87*W)aY0=g5Ge@}?07f4zZgn)(CRvPI3W zqqMBPPH$+VmMI%dFJbcd3MSO|^Rh~(=h<;;5k~0@+ypnnmCL#lBlsO^Da`%4lq4qF zYlv}Kq(d1t9N!w4I&e+sm>;gGAJi#{x@JTU>iRd&CD){ECLE$R2ySP4efDmj4|tm( zE_VR&goyMy@0S_Je+6Y$V{IHmEII1F%q0pg-%W%CdI81$lt~6`LP)blm6{M%PtwY~ ze}JDR%Lw3Tzw9u>Yi+Z!c)2btX^vEXSt8G|*qq2PrxO``1d~}ukk01c_ou6>Prb7B zcr1080NdUICiKPEk`6C{BE%_bXWMoou?dMCm|J>QV3fr9e=W7*#{|;VF@Ikj1wSbL zo%r2@Cw@S4cjbCd&V1M^X5{7(;0|{3Kk2+GbdR_%DfS@tx4XEH|KVdUu&>>d(A|A< zjTXbt1c&GAiXKNWjo5phPA{|ZaXOvjo%d_90e)P}lp_c)>R$r`zbPDZ)=U)j<0)jL z_R0LLh9@=`f95+Oh005PcEWUM4b8bO?(KAIaypF@32E^7u>z3}| z$5Z_-)L93#-}(N2L?uBABln^y=xyJTkQ54szdOmaj<$uOAO+}ZJiEn91;=BV>LfDf z!=$F^KG-1?*u^h8kkuZ8%r6ZVzdS&o)OS)@22{J4f4p9Ps|#OW_&{SC6*jBR5!UZ8 zH~fZcRrpJOmC+X@7`DqDv0~7}6a8v4YwD5Y3=e3<6y8i$+1SdU7+-a;ZMKxs(~g3S zu~4bvB7RRhpJn|=oS0hRaG{DLBVXEtFz!`DH7#dmhc+_)^AXPF6tTdR!I>!sW%20|sZ|c?~Ba~JLyWGlnQ8ynQtivUtT5#rPRFO&MS_13hrW#Rcr5glCdj;}$rxSmFHpi#B;;wa z_-7k5l918#Pevm#<9Y~6c|tmhQJzJhfB6-AYv?}fgH_QUixpyY(H@UAqLl%7?sRGa zuD!rU{8*)bTxNOxJR8p^nW^it{|t5U4EM?1CUlzI4Er52@Ago!TM7KX;8BGc7f&H2 z^Zk&1^RzUU!D9pn0xrIE-MdGx(IMrF90t|X^1QpuD?%nTC-2G*$G;i@%g1#<+c(BiienNXy> z;X68}rtzt|?h{lfokA>l=S$+mLX72ZLa$7LeY1y3VTeDK+|4}+b%}T87g*Ai)cNBC zj3lwRCe9xB$+^9+a$yyb*h{B$e{^`4p4vmY{ElC+-(b$+THL5U2}`a&qR?Q7 zG~sb5FbxYMIpgc0!i*K7&CaXkB`WSKe`{e1D=a%5{{)S+K()%GV#053e+~WOLilR^P5fpCuTa%sBsPfz#L57u1LQcF3+>E46(IRife%Y=?EY4=B>5 z+A?I@v2V1)FoOi6nP2U2fAyi#BxhuKBmHTbRFYAhRoiL{p+J1^k<6N?@?>6#g$~j| z&mK_&9(}KeuZ823@!5qkD3(4uD+vTfLQ4Gm*+3R8H z@S3}_3Ec~m=dj;5ep5@hBmtoP3QQ;zOU}dnQVC zRHS&f(a+ocZMGrr+8g0rpjQP-OY4f$e9D)F;Jv%*e3F)BA0ZX}v)xl4{{Avn-Etk3 z?$kd}ij*@6Z0{T`=hxXx7ojcF$pp)}BrDZ8yMURBG2LXGe}gxloD2t^5Qmj|4h{zK z@I6s-Qe3|Js=A=O5*#+0>AKD^{TZ6_F_^Rb4gkM9DlW?of)*2i z@|yK|QDyJJf4{RUTHbS0%+)V=k0;Ie%*(8172pCIC0(>%_<}?9h_2IJF{7Hz*oSI%r#D)PF(?-r2&{@LqLQeqd8q{^5BMl8GxCByym0CH zOq>=a+##E+r>?T>I~$*SnUP z41zExHD&i7i+{H#~oyFgUYQ=d&!Wv@wlknFtqgi_~)-=DA5mO7#SJtAx8k4pBw3&e;ml4gu7<1RX_7h_Na!L6ibcnE7ibA z#eMHQBc}HfYN`e+N~LxsZx}Dq$uH?msh;WXFs^ynW9MO$?B{I4?$yS(z@r4B9EFrJ z;AIv70tq{IRRuU;kwcH1Pk!|M6KYWE%WRs>Qr%@IMOAvk4!1>gQ_{%+dEm%+IA4aI ze~!nwukvZ-Iw4D@9uwXZ1rg{P=;u&&LmeUP2aoU75lB}~EzG9x;>G8Td zRLka#p8OSzp9qhCqDQntm+hFN$h0&@oB>kkSA);zQKok0# z9zs%`Q#K)FV?g1f&Nx}TPVsH8Hws~Ce~_3S%mE|wn#!fDe%qd_^hQ0SE<-((Rrbqs z=!!oBly_0^G$R1MRj*S(EsQoDH&{8X#FJE(!u|SCXV{pla6vi;k!Fex+%enr%*9YV zgYg5o(8&~zKhuw&vgQcg04J(tF)TMSvm~-&4^_ro0!3y4-;Aw+?41=fNhAjyb-e>+Mu^%*|{fAcf$K9uJ6IjkzK@qg9OIe`Mp@ zLzsK0=$i)s_c%e_rR0H4JP=R@?jH0o4TdK_KYD1pQm9iD2vnI(F1VEEIk*^`LmVN? zHV<>r=hP49_-=r{n#bF52KBQH8!faU9cHvU{46oDK@@Z;Z{H*j1QR|cf4K%=JvTsB zJT;*ln_&aH6#yPwe5%aPX`n{e4Ify{%h())o;R>7MID(i)ea}XI?i^fFrhLeffH&L z%X}f2{#SZXQag?ffjBsp(@BW)5$xo}xUkVQhxNl{m0v1%L9oZy;0ZtQ`p^~k|j-rQcF%CEOT35P9^DIo8e=sUN$Qs%)e?m{04*)el%D-cp zUk=rym-~rDKMWZR=DbGwKi4LjgWGA#<%=AN0eA~CqcDv{IF5@_0TzGZSyd)3*9Zvb ziwV9#Mb7ycgr^5dOs@CGHCe(hcl$KY&Nb2--y4C$Y0a6~PQWaLN2jN(zcHou4hLAX z9FiI~{A%t-rHxL<0>c?M=YP*V;^E+BMHolislk!5vF{Nz%U*_t<1p(M!#TCuahOya zwGgzeN$*bWTqpGYamF3T!M|qG88HajK*;SM#ZgcS4ny?xUb@;>H@fIDXc`kBHyP zgRcgkkLoI>D)bT0OMiYK$o<3N)7{bDCxcTfivRG!;ya0~<=j+B>-C}jl+-icAWM|^*^CETr&WHaT3OXR6DCK zH|cDnU0IF$dHI6%$Q(jNa$ta;EIyw+8f(G5^$UrTEsOg;>wmXdQ#5GP+zg@b72~Wl zkJzd+WQYA>_{qtrlgP494uhi6?q`FOgM)hU5nRwyFWWoa9ez?T9DF*UD}L(br-Oqp z2S;&NM@^N3upy(9lh1zG zJNbNcdUDh#H-At)c^Zgwcslwd(CU}RyKo8S?%@##8R+Npj}Jc|u!vtiZL0m`%hCSH z*PjP^IokbpaQXv$g@3>N{BYC&a5UKcYOnwR8hd;UKdDyw$jJ!WO5!!v##DH``wbS| zLMe8-VycIx-(geMPF-DRkH6pf{j5{YpTS~*^Q`mz&VQQ;Y^lz#@aqPidG(whjrBYdaJRm)B93>@nU3(KJcj8NsFn{&L(iExJ?{^_^>)$cud*H?fx}WcP zebKiP1Ysw1e5ufLLnj8+_{!Yz<)T{Sk@%NOtdu)eU@Qh#v%{tB{`ALfE)87~ex>C< z#}yl$1)I^}EG^vOP6o%}_f7_HX(=^2*+0Q!6L7ssmDL|)+>r<>{&CazR}ffPg}m~~ zUw=5!@9Rl@tJ?GQ8p)P8ozGaMd)>T3+82BLVtREu8YNJrp5t-`lZn+C8zCQmpD;0N zyZnNf+gYzLEhL{?mK-7-2Q5>=_%0{)NH;+7Y_7xRB-5@yEjWC3>i{@+-b~aqI3Qyx z7NUo33Frh6mSBG2ao-6^dHOKwufq*}lYa=Bu7iM2*2}_uN&I0j5i;wjZWEc@7bCgz z@Q?-D!DEf)* z(O;2;dsPy=TVS-Uj+cZl_$P&+Xf3-5#axq&cHEF4cCED#gd|2Cv+k zWa;b$=xYUSwbKtzBG~4+0h|}{lo>Tjm%;j7mFneH-C{bqQ6;Q3ozgNAU7VMynD)FB z;24*YaGh1ryoAtg7yS4ukY6PcS*oZ@|nD1VLgj*FrsdJ|ePPK0>1Wum$%HZ7x7dA-D}NJ8N9mmKE{ z$0!9ZX&Yx3>3pJ-$6;YWd2#Tw%!8k*D|4h_KE>tCGrKr8zp%@jSzRoflYgl1#J=*y zM%eKUJjF1W>Owmi!Yo_H#WTe<>Zhq4Q`Zcc1IJ%LJu3?E_o?z$?F@;Qzfjg$GO}19 z27f}2q1>M|<*wcpKotv6L4puhUk%Z#_f;o#*J}Ys0l5&#{isjz`)dxD=anz(bvQ=| z9um`uBDgU4;wU9LVptF;8Jh$x{rIB~8N>w14?Uey){+&$oAM zZdk!GH!FhcwK@_Fu6iy(YgB;smKHi{2I=!JnZzvxKjS~nPN5mJGT9Ccj^8?<-DMUc z-u{wW4EVJtVj2NwbYW+U2j1P;<@}1CD0kJ%6%Eexh;yT8bzab$e>mtmoJ8&8=z9o{ zaORvMB-yb(N5^;M+7K3z4` z6f@2sV*TX%*~>zyb@- zn+aY(AoJsx3x7_2`bVZ*97ygI6&gFb>uVzS`@o%WsO&n`Wr4UBgF_=BGy1jAP-fr9 z-@#yy|49~m{6a0Z%wA9a4)%KTPqNpOzusOiO7TC8?vtWz{GXw%oS|)O;QtG~WAPE*jwD?F^-27%c&?qHma6)gja%i_FcdD_w#TGG%^kcHJ5%dblX*(sSnr#LmcQ(fT10f%bP#v&|m; z;3gW-{xbC98nE$C1Wz0ct1nR{F1p#1t*tuv?0D5j; z9pZZ1pVJ9GR9@hc5q_~${G5+*Wku=~V1`r1B=>=^22N$j&$0^`PJ@klrV~4P4{V9u z!efAV&niWQY|LvxQkGc*7UvM)%YFpaZGU=A&mj-s=DMEdb-z3!i;ckjP}2*b)rmRg zCN)L8jD@?N4r^(Ng5bhor%q~u!!id72&7ao|KGVC+X?^0Q~;OA-u7dQ52!Z|Gw`c% zX?=o6i}b3PPgxAAXIZUbe@XegwG8|x^S$4!BjL!AP#~!S10V<+E-Ke)cAce0uzy25 zzYW~3CSb0M;foQGoPa8&ClafO6mi~kaC-h5-(Q|$XY)9xYUbCg3kGq@8$+8f;Qrw>3#adtD%x8@ac=!wb{wB?!)r3Z}emxZL)PJQ6A-#k;D6`Pb?EtjqN{cUI!H(Z_2g4e08w>eK zGOn2VGQ>F0P8``R)oFphWuNj`nwUN6vcy1kVu(hLrMPt|d zNWFD;f-)sd`6R zB0Z_6yeLT-`X!ZHHMLTOv!YbU(x507U=L=qV&?XoU)Tm`v)NU7$-r_QMu%`z?g?Y@ z-lO$e4p(CG+zZV#JxkAjOxi%@+A&*hF-SD!ET2hldsfF!iL3B$RM-*KX z%_8y(&60A>uIgHyQIDhdvbGRm%-273-zNn)|BwM#6P*@SAOg`1N`Da{h@9{5)JLz^ zLPRNsadFe1dCW6)Dh$r9s#(Jxl(-hjl_~`TWAn)V>LTK=tH-LBc(m?JiAgz1qIp{| z;_$DP{IbKW-s=PdTOyTw%bZ>Ok=2`WXS&=Y;y_sS?oM z$^KyY|M4RKA20GS$BWqBz)s!V8}@fcyMB+z$Nn$7Th}k-t$(zB3HMm91h>+|mU7&M z8!yEU71q%GDGkMS4A|tWX~j$9@XSFLH*w$tLc)?boZ}p5zid#y3q7$3c)fet-*L$} zGz)aUNhAA%`L{lXDtyL?h)1Y+-Fnw-?3Yg=wqEV{!SYN4e=oP5I&isc1ocz#+rm;+ z5mnnW5VGJbIe%grI|JcsZ2rsMF%qT)k&QfDHovM@RewL2?^dg(-JzJO9 zhg+DL-(VQGy1JeK=@usqQg?2CDT7K8FJz4SQC8zmi+?a#Ja7R?%9DxZ$&Bu$l_Q>) z(RWFx86j@OB?DhHD8!98yXwUqvdv+Z;DTnb{l-{iI?k>E6TX{Mlu=-X(0XL-w{goC?RNJ4 z>{=aA_kZ3M-0fpjW`5pn_ANuS{-VQ{-$n)$eNKW5upZUeDFeiSL6)4vDZ%)-7)Lwq zNGrQi8!z$49+&C-wE^t!;zIXY8_CMPRj0642h-!~z&{kn4WhDK4w$vdv$~i( zzP5mC>)wq7?&A3VuuaFr-D}*Y9R1~wPfxyl%6|e-!C&h5>v8ubzRjw-%b?tP3`UUq zjsBFtIZ@F~nEU<4RCR*6vqmd3-yx_zZ1A=| z(l&J8dlv0K6S+}ScZsL10=H6Y4c#c~+9Ef;_*)@Zyl89RIdG#=9wKg|{+RlGr-xRw z#D6htqml0rOW zpKF@@M5V9ScwB?}Y-h*+V#fzt-=!x$WPe|mqkMAsU+(0eNUAWZKvHzj`DAFf~S-8CV!g^rd0+udWh~`GsapiOj{-Yw=i1xC`*6N9@N5Q zj20G-Z2gn>Bnvr%Ep6^fRR+GT9hHOYfBlVO_1}(yJmp~!xwdu?-aWgQR@r4SyXp4S zj=71lZwmX=dPi1i3T^|d+Nl$jklxN!0+rY(0M&JS4GcI&hnVgL+eUt7vwwQWolYMD zp<2Sy;9gy&7BUITL;1*C>=z*q?<97t!a5XF6x_jdMtZkHSM3Oz5kO}w`aSg{xhQy&9UgZ;M&`=dCnpm322Q zs*sm;&-<#%s3K5CV{^j>wd-Q_e)pI_C#un*g06IR< z4D{ka-EkH!+aPJ^TmwrasU!1I@*wc;Y?e+hGd#*!pB`Jc5!vmJjCKR!l zZ{ANWcW{4qgt*5P#Ypbl_-d1I)lMjGMSu zLuv=xxuY=s@9c-ZHj)#&4aXgn0qRJr)oOROT1hJj@8i(l?b!P9QP&w4bR<=j2!$U> z-K5lK-+dlcXijfeX3mc*vd-ICRYXW%uY{_TwfHaU)!FhK0oGw_mn6T!Ks38I?jdDa z^UdAUbb84bsDE7n&f1>lgxqB@qZ`0-cf*~meoyF zUa#KXZ{DECp}V@K3VE?X7gqQnKETo2^yUqe-{5y$@}1v{s(c31etzf#Z%of;P>ddy zpOslnz69gIny6KEdS#l{yvV0O+mco%b8|IKDxOYZ&3~`Ch#rfnP41$!1{lilbe%l? zwyYi5E5=X>_P;&?r}a#q0GGq}FPyp3xkO%T2lHT}oy^O}jwS;{YF_W*7Ut-K#3Mt3 z)tr42(k|mAayW&Wq(5ONoO#3?97Ps}jT&>g20n;@coFK}UWcSI3;M~>a^1#j`07Qi zUY6^dOn-H!)q5r zuDjf7v){#VG2hMRIkE*WF<+FgwRqfx52Bm?6mN>RcGV4h<$4HrM};%Y{|4$8>qG<_JkY*qmI{bN6H=F{n&_jAjoPX~ zW*&i2f_)BN!C~>ORi-3bjkrgbRKMFe+rQ@4F*!yS)GcV~EoD*KiAg zte*r@L!;&28*RG>rz9_Z!T9pr`VhEkpTj$9*Sz+g*S`4`7Ctc9w=(EVhZbP%-@iSO z{D1PVxWcrf0~VZIAYyp$J}ZLJwG5nIy~4cczynMSIQN=aM<6tA^{7;FO9P>U8p3pOR1Iw0VGZHh9oH(I<)xZ3Cts=u z+rx9+=&}-6bQx!C7d3g-lh?uSDEaQcWq;TF?p0RT^5&K3lESz!4>wt|ZAH?JW&wsG z39L>C(#^H*w-9o>1*MIC`0eKX+i=5Qcenbr8XTrjR_1JI^yf?ad&UM;C#1p$BeBWT$wYWxgKFf$;n@O#=0I$Z%rEHb! z*)o@$4B41oCx|MJ?OJL4*x!7k{!OUH`@clv3MTfiit))Xk>cs(ZeUt5GkHFCF+1 zU76ZAq^?!)I}f8h2h!H%6A9LF1;v1OSVS?P+gwN4jiY`kV{eZ!cjI9D3a`1WXR#$N z4%OKq=r>bZ?>fBB?!&9(3v?Uwdq}R2d!WBJThA@cy^*ZGlWL{<&Z<$seSdt6E)GW8 zYA>B3>t{2!((^lyssG~885ua=Gm%L;z!fIlO`7Y69qGza9yr-Z(*GU|)n|WscbeWX zM56Sl3Ar}j^@d99_4&ud{zNNLIV!-5DutKqE1lGo`f3%VnWB5CoGR(CL;V;L5>oY! zI$JIlWz{GcQas4<$x%HrAb*DiV4G$fQ^ff-Ke|69Kw6#2X(*B?FnZWx;pf2ERB90Y z{Ng;TEY#DqNS`s?J9Pst!47zX67$HC|IRx{Pfw0dCu7)KRL9>ODmV}P-PZ@|8;Hn1 zRcGUG#*?ET53zJ@M0fl-K5nSsNx;L?!*BKv&)!mlE4X^cNmp|T6o2C)t1@VJjmj|` zz4MN(_rd7Fkbx}}jX{^?jQy$iqW^GV&}o%HXj>o`1xo##xlEzg)v`d}!*q{CrCg^G zwkb9+r^$v;7NmHdnP@e}#e(_ev%m1QK2kwla^#}$atfWxRN5dgpm>&Z<;;9TgBqaE zAyO!St{(D(3$yDYy?@H56!wOY=*$J}}34IH(IfWPRIj#!j@mjwA~V{eL8DM{TsII=@y0P{*>! z(RZXbXtSA)HKb0O{Q*-i=k^_4L~%K$XLv#gxsX%ONK_N2%~@8|4U9{KzfgLbEwDDv zVvI2FBA;iiBDZ2>KNW07`2y&-9;+1R@5_Ap+x!|~A#t8PPYc6((^q^O2#Uuhb%ZK% zGZ;Qr_@UC3GJo_y7k4Jpl?-!OPts6$(JDT_MxEJGMTJnm2cw6^G&O1cTW70uhJml? zoF`bKDD~F#d797Bzh*VQ%;pPqT`qy^IN`wQ43()zN(8DB0;342;IIyl*>niQK+tyV ztbh$n{5+o$%RxnQtk^pt%yP2ixYkg>?>wLBmM|*#@1eQ^3xn$|v;28pQ^jvcZX?BUTw%Q9d4S zE6~+Cm}!cnm=?|)53$oDIM^_i(&2WE8yuR{XMfr|?-;f{c7=sCK~)_$4aB08zTZ4n z1JJag;xv_7kEy-j({#ayU{?y;WslSj0fX~pKA%BG;vPy(R5ofx)8X1W;NaXUdcuwA zEd@U>ug;++Tk0S~?}+RNpZ_$z%A(9MHm0yjRm|3-JY5zq((87_23JLJEw~P^&eQ5Q zpMSuo<#SK5$rMbC=XqH{%1rNfc;nd+W!f4jG)>b~3hWcMom1A+jCURzk$-;) zZ?5kjpG*#+N=zpPG=4Y5xe)pi`LtX#DD1MBU$4PDZhkC_jPYxvjv^8qltGZ)ACKW0 zxYO~$(RXKUmg%@U&zt?cn$8_YO1mXTsD9%FV27JSsb)FLHrGFH&`?M!Bsw9lcs0hQ zcbU$>&_qz=z*npKo@N)zZ0_4On}6bl%OXqh^ppaJ^*5Nmt8Yq0t4kRQvIQ{>u%Sgb zHU8n#yspc_x@GL)N^|B{DXw@u{8hljN?*beE5EPKoG$}QEJuS8!a?eX26(vX%kX%(ME-X-b-HHkvsa49RCJ~IU zy>f)pd3~LylWiz1l#kP;N;>&hN~>0apol;}1YhPHWFS_I$%QZ$PhTzW$@dGHVU~E| zFQjCRMdL4-fNq_Ypnn1RRaVoo)Qgl~e+9qtTBW9}B*9o{ZVQ{_97`E5echbVBdbAcx5Dijc$PJq z2(xb1#tIE~P@a(}fE@>=;%`&KsI}A?493&TAJS_x4?D>!9DkV6Po*pn<2AWV5|?J! zhlXLtqyydfCDG${fD?RcDe*8D9F|xcYfPA z$TXZDAM%A$PpT}tSqFB!$O@dM-mHNk9oz_Y_&l9u4CIU}jwRWYR^fPrC=`IIk_y?y zMK&*X!IS$@f`1n`^l0V@ujX}Yt_JSd>@LvMd;uIv@}ZF=8n7x$XPcTg`KCP0QXVmUu4Yk|Ipfe<&{q#(g~Hd2n0?a9$=Xa{D?26qt;H@u@PEdvCs zu@fH|JAqRxZg<+BMPv-fv%SO9menclRDG1=C)RueJI2qP{ z<}+okYTTv&+n}Nv4tc?0*+(7EmG7DK8LQ#;bC;D)U`Cc?cA~ zW=s%aP^y%JWUJia6>(VxoeaaG#K))lmZX7)ZrCYC(Op?5uill2IDO>F&gHiUtEtn~ zIGGV=@Mf6XOO=sKc1JuGh%xHVVX5g7kz}sxWut(_6i8xmiQ|$&r^6djmGM5gl9ggl zXn(T4=QjPRCdvwg;0n;)lP){)vhd87?R?{6hKIH&2GhyO0kgEEP+TMt(HoP3Lfl;|c9GD9RVL$v5QsA~zTCVLhB{Z~fYoDnu_BiO?-~B4BF9!WS^9IeONBy&(J5l z9q-LJyf0AgsW0t5e1dEHus~U8XQG&qW+m$EGGDBd39x>Pc5=O3{5r|oH=X4tsZ%3Z zpFM$hjSn&Af5$XzCuswBQ43VSaizToul*9Z$F6qxvoDWM2paimz;3p$bbmta1iyX~ zus^@qYjkh?19G?1LH{%!2cNB;$(x8uFo|l~=o4AAFG~+8)z&IxC8?3ZlEq>s!kzW% zYa>7fn>$!$U4B>p9py7M@zB!6wirZGt$6D|(~3)ZQ2Wl z;K73-erkX~e4?}zp3CZQ-hc0I)q|CTIJ38FsXOtyby6%@>wqO+ZF(n1HaZLQRJR*X zi{;gMRuNBK(QbC==-?%@_vk<{mno2}HGq<_CbchH@ueKOTEo#bnrZY52YrfTC3JK5 z{2El%Oe0oLmLv!#=6;Ttk?OS4AV{zxq*NAPoO}*&;@YyAux^BFmw(DkqJ?8hz=p&l zBY4tEDn;Uh-fUGx5V2kaA>w%rOXy2TtXk0@hh=0QS&<+QJrJp6F1@ds87+COl*`n< zPNfitw2A;HUa7Xlo>xbmAj8wB4QeEnNR&01jw83y6BDUh=YO^hpGUkSwJM-G0GF=> zV4grLoEwf8nDrh^EPoP09ToQ(WDM5J7iGFNiBc+7D#U5%kRo)zQhqkQ%Mcy(bo1`P zKOn_qGk$t_qPV+2{Yv7F0R#Li@-=mbVzxP;pfdHiK!sS+w1R!*`rb z0{pGxbp0}=p$%OvrQqn012=DGc3eoL0%G-$QhwT{Kkq*HS$}u{(Ivxh(61w-dHrVZ zRfFvb)naNJD_=>Gu8x6qIR16wEboJLr-f~7m#wQ_SI=j%oh6;{oxW~2pgAIMu(a<|^ERpO;f~F;EG#af= z{kj)-Gk-z8Q#dc`tZD`;-QXwl_49~M4p8%I`mR^1AX0i1|4Eeo*>pJUZMWhE99>bv z_Ud24{c zPlC*rRen0!mRc}pt`Zs&@X!oK!IC*{O7kwF=d8$c$5V?bHr7+IuqyMmV`7~KswD7+ zgnt8I#!VQAZaWg19~7Wz?)50mKIG5L9a40ygE{J|U-JjG z^Rf0C5VTaKX<`E8b@&#*^+=brryd9u*Fjgra7&&%3}uhgkqlTysCjJA-oy5tjW$0*daWZ~YnYFYCvJWjy9? z^zqObJm))VS!SK%jC9Ga>pft%o;?GPjXfUt!=(vs5Sc@X(J#ziX$Itx$)F>;GIqQB zMBHsQwxbEBx@hMCfChwH6s~Wdl9)B@X zxfT9UT!^F2pKURcqLa7`>Fwfjgh_G9@={zPuYX8|-eBPIX+YQdJkO?0Sq-Bc4zI%u zwti4?>RrOLud(9~uHr6YBin|kddQ8EZ9ywN%k>biW4bIWjFHUh!QDq&_?2v368Wh;kL2T*W%2dYh%7uKj=Sl(tY)k>e zZP;7;&2_{IPB~*bkpKe}cw1Xq#?V7%P|HqG}_j~0Q4)MKi%7LdC|9``ZAw(V5 z2B9%R9kzY!@^#Yri*Sz9{QL`QE7p6VqFmS z{5po7tvSPrHQQ2;^8&pp>5i&c{l0gqb;N#1uO%!k717V{@4@)1R9ERA`PK3YR;Yk& zd2=n-z3sjJBwsz_aQUz(i$g3Lri7jdxot( zU9Io}Src9J0?_X@)PFyxeO@Ji;e)#>9hP>;9cGIKi^x`m;FGd}Uwa^&=5myt*8`g~ z`UC2DHjsyBg@6RhERN0y7zH3tMYk4x^kJ}bwpcIc!4vn z?)(bG3(#|gueczBJ1D%YuwC5&@JoUTlzlU!(m%G(sPvCcjDNa>>@9IB{i7qN(mytH zimx*@TstWj3$S69V-s^dX3s51>h|k4U7;eq@{d*gb9PIFrXqr9tgQ0j9xuv;qe<-C zcIlw_&JA)9Q5g3D!sM3OKf^}-s*a6M@wUwWRh}Ze4Q#M?xzYn-b)xcy1N8L$-l>k* zP)&*bOy26nM}K@EY%y)hYNXDxhC?J!ZLz?z&~KG-5%(4q6P)d2<5lf#ZWw~Ae{A*Iw929sSi5tZRNb*eV6RtB}X;ON~n6YcNS$6?V&c2 zqPUzM_vySq#GU(Yx1P&2wRhZG^grr>x4hhZ<86RQ)h_;zI1sy^Zdqs5lX?0~M{QfZ_Dz;ptl>PZ8xx*J`7#Q07ylPn2XPBK-wKsjLK8`H;s{JEC5fna z)uh}VVQ7oansQ-DHZjdX#;D<5fPbR-h7y1=pHVnLF#wC-(GpXSIQt!iq&71kezw91 zj_gTE%fQCJg2M97#vt1tx$b;{|K=WK6w&+;#eV|QR}&bzhhFPOxWO+#8E9-fWT=X= z7Rn5h-ThKIe!uN<5bo`S^N0oFE~<8Smk)K*R|9~~fyLS;>pCu4E>7tpB@iekZk8n^*b2J|3D8RUh%8?; zw|{tOWTR*_^sfHvCG``6JP+ZaNqBKCkcxwd%SB?O{AkXKoOVR!PGa06j3A%s2?qm)ajM?pyX!Euh%zT?k?Y*o@5W*NGOFJU2C zKVu6MjDFLLm04dMC-;_%Dx01j=^zE;#D6`38K4{5!~98Ua=UlJ=#wb}QB~q0Zt0dA z;aB=yrgt@e{9#s-RO+mrMdz-J{ACIKC(>$_r{WZ4(vFk#?N{trEr_VA$ zm<_icAJN-LBc|{W=HbvE#Sf3*1FZWBYOK{|3FpU`*y#vXANk^^+tZrguFX=&XTGc@ z-z|>6?;RjBFQjEm2GoI#!ndMld4D|xwP-v1#ZvmVx%NosN2DDA%pzW=Pv@`T{Lb~axH-0~yfsy}(5g1)@42Cm!(GQEd`)zoyAgH5muo8I3D8uJ# zOXQni6_=<2vX~IA&%A$|yA$lL+Op!@R!r5hP~{RgLYRWM+WZMCJ8T~j>7 zFy&BTL;`I!l_l=Uf$Z^4PF}fV(FYr}J zs7^1u#>LimTz~%>JGJcenYzHWhM6>6O$oXQDT^wj+PJtg4@|u&oO6&e`9BUClT)@M zV4JKZ;e2aQXx(ea8#i{a-woE{rdAKe+|omE z?zQ+)bb8^nY2Xixi8t6KVkAkNq!MR165BVD6-jQ4-Tr54wf+=v$*%(aB2Kn$l$ZN< z!g65xt;{b**Nc!2nFFZYEd9sqb4^Rjse#IhOWso0S1K|6Jc;c^!1(9XbgM~Xs0 zwzl=63eCI#M+^vZjei{!*@Epc6gT?oMod})`pq@?`Gw1Lla)vT>ds<@L8z@tL@?Vt zhu9`<#H;(5ytm-5799!{NNSGP{($*XjRMVCQ5)AKC^xP)0b@g09|&{f zy0gm20MY}&ytwwrUMy!EN!#o{KH-!1f2Pi_v4dI#t7Sl-`ZBFm zc5#tSk!AC1tvf^(HqE`xUYcNv1p6ibuAw1w*PFKLiSr%K?)w%Vu^d5tes*-lw_mSt z#$6@Sxn@Vo<$qdVyv-S>L4@2X1owRLF3xxdZ(Kun@W$6U+8w=QbPpZJq7XOc^QNa; zYPcD2QgYD&|2saZ?`QV(5LcMzE8q5g$b$@DQo)!L;|^(CMC<1AT**jv@G#|_B<@0w zhX?OX%d(o~1=+mv!qr08k1`#WhVR$(S8Jufw~1W)?teCAau^#38V|}!GThu z-ccp0FuC1rfKuJP2F4}FE{Uq$XTa>W-hczRp)dT~*%`2m2|WRiAx>5V*FN?`#hZry z_`uHvWjW_Diz$o`LvERK;%y;yFMfvPQrVimF6dz&x?q$rzz>O}bD#^# zfEd0H_H3SwNzb$u@)q-%f^JqNC?;nc3(&!=Dt}gc>~WQ!Hz%BzFl=ZPWb(r>o!JvE zjK`PF{f_!IjOBcQ3jpTu0|UZ2L9;^*1J$;Lg23LevlExYuI~6@S%Hv-6{G#5)BUdx zsaRkWIMp>9*}Z<9SH0`eETi_Ugt!Gjjc7m^=xM;^KeBO6oCjR8+dsErRcGw{PsrL^ zV}B8%xHXn8qU(?Mrbn@xPPEsn!RyxMVmH&DT@c-ZR1MNG9eQWK(MR0I$aYm;Axg6p z;aRp0PF+Tt*KMd6^d22n;J0!vOR4Z?Ne_W_ogxQJ+r~bJC?I+B&9+jRz66F_PTx|g z`sj}7acbfYOS>MK7w)odR;N2?0ygbLmw)VZne)oU%%M6x`XEscK2Sr!%W$jEUfG>4 zR7vk8tHJp)C(TaWG%Hcrs2NR%UD$W4wS$`0kG>9TfD#~gxDE-QNTv442G zQT1}MD67V+(!S$5O#!gJU#og0*Q)L}PVYBP@0a0T)-oJ7`DwafL;D&p$E~y^vMjd( zalbq#X6zw@?w9E{Zo8SM(UjsMEC|(o<|+w3nbN z^$Sh2_(E;kvSgIIlYK~=8Z<^VB1-E?S$Pj5)M$e{d6a86Z0(DOyu-I~34gU^>9lUr zYZ+D6Z|xMDEO%OMwHxj63cRl@h!&;g)C8o8iEk&Ner%lBnYPoY>TFgB0GW81leJ}5 z?^IOr@(V{i(B^)~7ga<3_gOGY+lG;|7fxo(V$ z1R&Js*&23Y_qsrL2Y@fKiXW7(@~mihLc~)%EY^-=bXRu9jKSAw-H3}$a8)FAm(Rq= zI7aHL44|^GUM&PWUw^|F`Tu6`=$ad+fzLefA4Kng zm$+9$8W-ES5}5nN{0a6$Ut8IY(>f_|Wq`)gY9;NiRx4?>Dgdyhr5I!H_^j?Z#`VJf zELAbhF}W#U7s4q<+J>B7JMY(Dopwe6LQ@M|;uM>5!L5*HL4OU9T`IYSj#3qdsqCaf z?=A|55Kf`im6rF0m1<}QGwqsO8fM7g(y$|-<0GY4)3Cbvl?AGR+rLgRD8^Y{{)^Rl zb>(0%Wf=Ungas#U{&1#Q`{9{7*6RFoXkWNdWItcIGj*z!dqR2l%KeU&yR3ac`+XpD zrSbcOSpDi--hZREUK%7OmVu6|EI9TKCV$cf;1qsM7XEf3m)3ufHiVu4c-vHZg^Xdl zs*uhe??oS|hbj>*hL+adDJe_vnw^*Q>Nba%9MN7UWxJr00uCyo4!HM~xKHLSz%(iR zLlSOFq}rJ_dGM?-ZT2eI*YkVX-n_cJDsSTDj)W60r+@!@CSI2xN|o@FwqT{}FaX4r zGSs`D&(}SlSMw{BPy`S8=8J8627=-@;y5CpwHY`O7J_M>@K(b2gB^anT_2g@iPwBa zlbzGnH@<&?zvLZ^Q?7YQtgxealFkb%nbS|6VBM>_ljLHWEhvdGwsmfUliO{;Gv0mQ)rplF$m9%vakJG^W<0Lbino(Q6WTxXHyM zmSJ|-)f-K|^?07W1Y2~y#{*dP3MT^yUU4XZ$=9Ent$r|oI74Q&K>9Ge=;sGVu#?ya z9ivqZhWR;umxGRqBZPO9;n_%^%F;P@;Y{Xt$$w&u)n0#x->t}D2|@XkRA%Pc1pkn@ zlgyIyg%E)*AM?+NVcrVlH?Z&6>EdD5NUUF+Y4| z8suJwu0CaU9W&;;b41`?uDnkr;;wT4DPxJV&89tU)U_@)y9ttrcQfs8={ez&xuw-! z1%LPw-ZY&Fmx4a_rO;hb6Agji1<0^3IOz<7CUYIm9l|+Yn6O;W7uflDJ}uj_se$t+ z&7uZ+bm*DxHt+yg4V|Z>uC%N|U0s2w)?5uO=c>bgmpgHd6$k!Of?NU1Y-elVT!Uga zHyDsk_EmN-=$v6(J9DWT>~Di)js{hFJ%3c=UAAapa@FGqjWX5_tL)E&#-9BVuJc1@ zsaOG-OWay{LF&ro>dlYXtkNACPx%6MvpkvHa*<9IHd}>D#eA5j0ADUpSpgt*g+o!0 z!y8{aAs7+JihTDtY?MaSnW9_SOL`b)o8M5(ZOJa_YCl|7%+Eye&J;KE5NSzQM602@B-ZR( z*lNW9JwU?0^|*t#46{n`7M7prMwQm8@4)h9DS^lqJ5slxjB4~uT&rmmZi3NewC&<7 zzJO#{88*7Rx!MIX!m1iAR_RZZf}7Sd+pmAInhDn9H`Og`qT zcer#CI&R&q6jU<}bt?tM{aj^R0V=NOB>!ln!q%_DDm56Nk+_xbBujW*#p}h;N50JL z845e4yEO`wyZi{vnP2Bc$=aX@fQ@blF~m)ct>j zmir4W_ZM1T(+e&4@0r}cXYy|k2HmO&9d1xMBX{*1M(sRsvWEIayfd%os^Wmo&wl&< zv6I#xJE>T1^j@!*P*}n?vhmzX)an1!ODL5qzxF&X*6~UTrrj@~?iWz^3#j`A)PH;d zb#L3>%C^4`s}L?xuDJZ>X4sM~mU^^#QKH&rwKL^EPJpGF9 z#zIYa8jafDQO%u7sX)bXBBi(OR!T_M=2v<>Z*}~S3f|rYpGMS}RT#x3DmZ_|8EvzQ zv966*Y9JPy#1;0yWuCCrTm;_QUpN@m8T_!F$CEhkULD1QACCURV;EY$ieLbEg;YRl z+adudH!2V27AhLGRl=ce=^Z{zO5q#M>yM?b;meP|Ut5Rq|JQcXhWC)}ecqcWNA#;+ z^<=4KCwNmyLw9&_8WbvO2l9U(@P~)Y`ZdtaXBMQv2G1;R<1AmfLTSU1ejQVpb9}9y z$>{4fn9ypSZTZ!V%KHM2nwE_JpE<8RW!zy>uHpk56p#wDT1PI?i{X{k>r~aPG*zgb zYOku+Ym8PDhFtc3n`vQl-k!=ir}towJ}udm%bS0{LDMksB369k zaBy5WY|8*!i{~0OVOc2q2C<(i@7vkRf@o^JD-BsH{7cG5=CLDW{!*#5Vrh|t!m0i+ z{?CyMG_bH~ICm`%h{y}By)3sC5o+0X?&ffp_ULM3FuJ_7V0UpD0kIl@;+wWH&5GRw zZa)u|Q4Z!gzL!IBZ}@+dH74To85Eb*qbzfSNQ^Nzj=a+heu*p2^YkTv&0?eUG+BkG^qiB>_O6$?IT2urJT|Gcx>)kZ4UW*4Uxy7)d zdj##rD5x2>#S^akLf{)3pRyyn`eKd`ijy_v>+XlOVn5| z5h3Rt=8mXFaGS|mG|+j5hZ@b>J&$QV{vN2I8&e-B??{aZ4W-LW2P(tC4dZ#n_ekwv ze!ifdG`j=AwATeJ*|SrP^McY>BsJM)hMa4mF*S~UaRbemD1h9zCi)d|{}#OxN_!>b zoRu%Wa0q`43#fk`jU1#zTsEsf*@YwJB_Jb1BZOdhx1-Usi?~|J!Qh{+7O$3#=}g3G zt$bWjW=ic>{S+b}Y`>?vGKOpzyLJ!s2hFgM?ouLDfsB~-pv+y!+=a|7dG)oGi6t_(bImbkYAz2|d|}5_+;GCG@Avji+U(q-6ey z8CRe8j}Cvf?sZt(I_ytBnfVbaw~!I{n(wYOpVod>-SHZ>+VEXziSb1i8oJaf-Kgdo zi~C{`3LWK=TYYNU(4TsZ+piJ)nHJF`NiKG>i-oM#mD3h1|u}POwR!nFVMq}P8Vj> z_e?#bIcv>-K zkK-A+>eKrU>7Ql;vd`1A$!5IiO#OEL?wNt$M0>m{V4DoHrO$F8Pw_|fx$u!`vf8D! zY=M6TODKy)`TRro5q=f6hi*p;V5#ONc8Y-c9G`=Ps8QecN5g}CwPz?m;EonqXFM&d2(r;LDg1v>%5}wp0#+Xg!-e1_QJwk1nU12%%@Nx_ zCugpIp{?S;M5iRIWQynvSH`j}Dyp=1YU>C&D=S&a0I4-W>Wq+;wKr&uo$UM^AtHZw z0zfTl>HjQEJyDa`TyyD~cw%3ZWHZ<>*5?6DP5`+YyL}9W%-pPT1*C(4>F)(g9W1x{ zrF~j&bDiw=M}2%nI5M>sjHLKkB79~6RF}z7PYft?OG+@NaBJA@=vI@4hR0nICSrS@ zn^;RFOC58#h25GL=8WL8ztCNV-gkdCEqJBI)3|81AFhps&yyD^&HnyII302rV+OLu z&{1-8;P?^|!9&fmP+F)*HBUrLf*Puj0~H807O*%826|;IqHR_B5KutopTz|??a>n3 z%l?Y(Ga;spJvv6D)#-JIdp{shF0fEQ%N}A1GJM-DCj_BzqC~M|GGlt!QDJ{yRUh9u zXt7ZwCljsCNUhJO6L#x4zKAbz#E_J_Qf?G{VvIqUK*whtYhhs~_<^ad=;4DcZclpZ z%DHJ$;IhA;7W3yFSkSBO$4b1&CgEjm)sOT2m#&2eO{Zu>JdHp4U^ABgW+ z#AC8!a6eSr?};H*hZU{VFl|Mw)Nt{Weh9maalg5AT^&wpc&U9{CKG=ht*_D4)@TJ5 zuD?W!EB8a5zNl_ceXqhk4GS#k@R0p=@cdW!P;2d+Z;EphhJ|TF&!&8z7AY7ZCIKEA z!A%$Y{q-!ngrf)Xt=;8BnZvB`Kfh0)UhA`_>h_zWG$2kTT+h+0=LFF~L{y%fZoVHL zf7kzJ85F!KJlt6Z1n+;F_K%hU4UdjTy=91gSc+!%o8kV~8bP*!CUszLRoQz(ZJ7uM z7s+d`2ap2oDgnUw+Nywq!@->?0I2&;hCkH1*1_*Ru#sJ$M?K!uTePGA_zLGWF(NhhDltVmk214oC9c9*dJPp5)`9v_l~?M(}kh#Ml_e`$yu_K%N;-w#f92YZA4 zoz^E08YX}1*e@9k5cAzHlh!dX^w40^wY(j|bo+lVg>E_)2H*F02Wwe1Bpxr#tnm_^ z?2$O&{*)#2mw9Uw$M+iZYcVovsoA29WeB<%LjISA%;!Ji1abn;nV$@fclw979y#jU zq`>fCs(&~v$OEXtjDI>r4@ zkhdsOTdK1Ke{C)j3`c~{?QW^1o(IV1WBBbcxy%&Q;<(HsS}=3&Hu5&9#+6194~W}{G5|;oScE&LaR$19}7wuE*DQ-lff_dcuwbKXxUjvGWLHX z12LEZvT;HKg|mx`WSpL+V}c`(Wgc(>0q~@>IKHIjFpn9+t%NMlxADw8_`Fq=ahYs^ zObfgk)cgN?5s;nOk;9f^o?t`IlkzN^6qLVR`448{1vq}kN)iZ30Xvi~P+C5pk(bfA z3G5V8g@)#)R41LWJ7m{JzZ~P)g1mpBdh*#{_GSu~6x|@FkR@%OT(z^#-* zor`Z=<#=PVPmehv2o=oKZ{WA8Qhrm2`@$6=;i)HEx+_~%V<(byFpVdMyQWr^#Cu9J zXdCk*EwK%=B$;p&OlTYpndFaTJa;D0@U#+@p*n!41yX>JrPH1&D;wr?8wcynUcg@{ zJWgmo!5h30=AEX~q@L@Ri&TGxV=`d#%^V>)`TIN_|2AFd^}rPN-DaBXX0!-x1j0wU zEkf~l1wQi%f2i0NkpXhu1r|dZ7LYjLTNVD#7bq;P)B>CpBpZHvcyKi8?~k4;ybyo< z<-vF02Dv}@esH9Y`}=Uw{HFn;E;MBiKL2X4Gg3#e>3@XV{>N{r4u*eRwhRr112Meo z&py%PE;fk3QJCuVpXRAl)~pTYMKa;}3eRY!3!}KcJve|nLRSQVZk3%%9m>dPCn(R8 z;v!??h^0~MIeu3EIZjR)#n=Rhd0LzSo+5=hp}s{n&jAHLk^wNMy3i9hS4XWRp0(+=(!PStp z^~2Ryv;|^Cy>Uu-=ZII6-)T78I%)&h?AX4ZO#LDUZeX%VJ;;CK*^3HjSR~dZia8sV z7PrwoAIbESas^-0EXOBO%7hd;72=`Eh2(TPoPY&eLw;FA&-0l+oPxE0qnUPz}#3x&`7 z@Y(69ikZWPdU1c6(~xdLN?nxAOCaJl;w#Rwk_KB^+Bfx5^11?=EHFDS?Se$e^7~!& zjgDoj4mJJt{e4fOZz$PabA|#;d(l3@^$)sgloZhEQ#Pt= zSRJqcj!qDqsqfOL3Qt@3;po$=bS}8c9stK^L-!P=ve5+JJZTV0(dG}i%{bgq$o|0B zQWmRfU2T6v3h6A9f(dG*L-{qR_yrayDQHfCS!B5y^VDnNg9i_=nYi%z31PW@#&3e= z*ms-VC2Nv1ME>w$kKS1+1;K|iMD~i^ie(lk1~W)&c};et+REflG+gO9sz%5!qW7CnD4T6WMy26Mrs-Kew$!pkQ^pwcq+l11iHxh029asmxHY&PUKIsL14EBIQcY9rW569 z{2f%$%Ka2zZbD@+{>fmN$00u6*uhqyt?|hgrf&5x4W_ggSx(k4f+-ynjg=mH?8f0$&ck8ScQ{$idMwUEs@PnvOA;T}=s&g>`}rd&VW$ zdznaHQ|9=~;UVF-%|ajMI^faKcRO$ofjYs!CS>@Qh;rhH>_Vf^oK5lh(ibn1JUX>7 z5oKuvFo#zIL52pQ8NC{avNRaa@YQgf=QV$s7{08@Xs9f0G6F4aG6986X3MV{j`9p3 znv>OFnB)5O#w$ILgxrfk6jhE0?z@+Oz4Sk+*?t0(R98pjtga4oTBwf5AyT;Km;!}g zz$9hOs5i6^3vDN<7`Jn%Eu>3Pv4t=6V|K9X?5|hMho2t=Pq8WD^xSSix}9Na&QpJG zc9M4pB)E7^?E$VM=BL9MDBZN|P-2hLc)QjHEn<10iJAQbpC_Ij*_40cjCHunEE?{%%ERIAx_Kvb^{(IxqQ{H{U(`WTve%uydmfK zW7{LAQCINIrBi4%hn%PKwmDB^zZD&pxG8u1wV=5_v_9rw4aez=&2G-2SYb7Jkk>Xlu15=hL-W{w<3Sip0GJ!!~Z4|+#rQ)Ldh_g z&ul?!gK8{6ssd|uRh5&_0d;=z=*^5BQIGarjuEM{B!R5K& z+gdp%MM>_WyfBze7eTEA?$=FN^LWfIx*W5w@fm-W-7!?dTlCYDdwo>Nf7EEBy=`f5 zp~!4>5lR&v%zEyF$tT7dXULIuZRy&f*IPRN#I2L@Su*|&y1=|(w$s}6@+=*n8TKaS zIJz>tm|v5mp!cfK4|>=Bri-7DcLA+HgbX`om$JtD-9pbIa<(l+wJjg5VlA7L4XjVf z0k?lZZZJDgAs;qb$^sV~bkr7Ai!m)^Coo|PiE@fQ7jJE;ZsWBy@HIFBUFp=^E}t79 zYl){Wjt88a)wA`DHu-Am6uh;mRVU^)Q}S43Sw2H+8=M}{sR4LNrGHdYS@lIWU0MJJ z8fDI@&y&-P=Ipm0yuFPZ0K^=Nq%gN3$)A5%+=Y~0-5v%|J9gfs63~8AX9peUx(0o4 z$WN64-C$dMHnzL4@r<_(?024+YQ;rT?ooWo3!DTSq^L{k2GYBJ!967Akl5Z@8@*8@ zv~M_>w1+3aCW@MUT=Gq@5N;5g}|ctBJf_FKthjO52llN!t^WnkNjq&8gs) zEG9V?WH;fO8WwKJ8!$4TC(dm~-i*^1?p`%;vX>Y0$sHPfUekQ9Gj{tJDz zhBNn;eh@@RnsE&C%6Z09zVn3)*lDoqN7ez-Dp*}DW0124x58&JG{xb1CAsS|#5=B4 z!BvU9O?U|-i%@%yshNclKwE_!=Q-Xuz=2&3&Sy6&YL5-@@>F5%$N3hLhY(n>! z$Lbwr0sa&Km;eCXUmistpt}%vyz3h8R*hRI2C#p{$)0FX0#8e_0M1N72~1>2JsRmx zvjrweh<_fUwsrgBk1 zZQz1c#0YoTiu0AycXYXN9d+~r-dHWg=e^~KMM*X&~AT+I55GQdc?@D>(UF1 zY|w6xC|JUpIz+gy>rb9c+U?CzGFek!{$cM}dmE{NpF!e3EJ5hfBVFDIm4{T?00r(^ zwdGk*l}onQg*01s6QCgY?aafk$*i-xNy2NNZO|hm2FjFH#!OH zN=iAnNheaN#P(?=v<<{U+?7tG0{r#~1*DS9IDhT|RPwmuOw7VXJ_zxYAcqU2W7*2I25SdxFCdl?5mD>IBRm+E~Ywb@V; zm&2Qo*8ZyXJ8`D(Z%d_|MK(z4!(54U5zPu0A(9{>`IMRi)bwLj!R5P1WeEmd>r&8D zgS3d22E+(wm>}IqSwoC-+{$CWhpZYTIfv_s$8Tf52Ir%lL9y99#}L%$ya=eJx7PKD zBHeLlg93l*AI(K5;N)Qt@y#rz<>Ho#Cr{AtXH@1{mAZl_95o>T%C1L0<;9}Jz^*r( zXyRXE7{u`a?a--NOH&4g{KO!&si(=i2r^q3g^O;(Xl<4c_@^lyutORJ&YNSD-=844 zSWtw~o2s4*F0SMBZkY$Ef<@044VUx*KlEI1Da(I`Ag^{55?b-s)?&7{+~XayY*a!S zc9g6D8}P$zG_)u`&ahxTY?=lgFvLK^3|2|`OrU>3?x-*=K`9Qpk5iADiZ@z#VJdnI zeYcqDiDSDK@IC5(_sum+Z0PU9FJVp1T{$5VX)SVa0Y3Wt%%b-xVFi5YSvJo_k;InT z{jPudIs)X3br7I+d|0(~e`KP}4<|V&ruv4U_VzXLceD{B4(vA)4;oO7tDACpa{SrX zA00n-75Su^y1aK)akVV?aD|;@w2HTLKm(H9cW;a7-P2;WB#qP7}PCzZKrNf>Na?g^&1kjXPbjwH|llKDAgL>;I8dK@cU3Lx+!n$C|z?8?NN=} zwl>oZdvm8wz1^?mQT2bj{scO7a9wO=yWqO^zg?{rWTairQE_#7M;R+*S7rQ5*dTw= z;Jgl>4YcZl>Ow-#<#I$>7r)e{Q*3PtJ6n`u9pxaFkDXc*%cj1-Bp0!i;X-YCd^;P& z=#*$|dg>D2bNQGT57fEaaat2>+wN=b=>|fK_A_~KX;Ja ziG*L1-zCEhPQ77N)h*>XU_U>e&~h;Qy;HshfS-(^o=XG|B*nLHmotPbaKy$KtY>7P zMitlsof;o){s7+NmfA}qkscKK*gUSL#Vm=s+Ec0{pa+>f5o`LuYiO)1fE$0{g5BDh zo@ws0o_FmBV_Qw%LA^B=?!;&wB)SnobX}I5W(J-_;R?_=@kFPsz>@&R`pSxUm@{;0 z((LiNO%5FXJqF=zjbK|*4YB?|IX-%Pe)+}l;B^_zU+WBw+C?rnVZ*Fn+;W(N9V+ER z7_i~yJWTR(JYBPYYn78>f7O4Wq(p!`bH$={&^!d?T5MlcIOOb4sN?mwUI}a2pFN#s z?vpxxG)1cp%HNFU*XeEk@HJzhpxsIZF!PlGpyI!hmo5HDfnX9Dz;c;~A@-NCAOUk( zx-=4AA$f_b9~V{MBH95Iw$;XqW+y~(Cs5p36jeTJgThMKYc!fHRRe#Adna~UNMau| z;Cz(+dm0Y4Z(wk^T==}F;jpAC_kYcAU|o{fe?3Z@#Hjf<+<#1XyMVgL%?tZ)kNv?hrAvDTxE$gOX^5KXx>lxJ7o z6_86R!#v27Q*bulq{V+*u!c6})|um$t+gfBmJOLLaMOuU8ym8v5GkXy4O5nN&ogm$ zP^N6PD~b&lCY;QM3@J*RwY=FbpJhKg>@6g!O}Us%dG>i4nk0+$@G5H<^BcG=w|OK$ zOxSo9-jLsJ{C%9^wjnX@ntyWC5Od~80g-La&vm_DD-U{(irkRd@9mZq_W;)IvB)=}rfxjz>@Re#|@Of4c{*#-3Owrog ze_?N9u~t0}WcK^Q!r2vtF~zu^haIS(?x4E?4E{>k2VL1S>d6`8Q|P?>pWnV@TK+v7 zn3m_Gq=eyK+&F(>UWf0oDXInTsI5pP>!$nq*V?og@>MzZxoTd7ik|vkuXQ1iN=pMxe~IvMkDe(!*qmwdG5uDI`paEVu}k z_86bIr^0hU%Qyex8^x^l=sP8)OnOhGpyC_ww-L0qr;-K@rmfh_+Wz4`NwY^79(uTf zL>c~QBk+HOre5kf&xwALDAA{YdGlu!nZr6tV%MHCDmVQsuZU_(Dw1gNwk4^}L9S@9)_W30yWs4b zoqi@lG&tHM2AaZG@~$BG{pX%-p;JSg4Z0Q8>3W?8+>U!^G5eFb?-BIHpJip0^5F?a z5O#ky8!&UuT&lI(W;3$e#2^;(u$ljoLZ}6d8nsU>+V99KrP~$RQpYO*b(-yo>7wQ} zs;CZ^l`J3Ow8l(V^i;fkp8Xt7;M18b$pn-l>6V`2fxpLGt}zS+fnbPI4=h#k>za~xH6?%V ze9bh{Em!FL)U#+(B+!FjX2~R{n^76wU6|%G8cS~`m4U-)fIHr8&9P-guqoFf_LiZA zx;41P=m>deS@E(bXQu`ev{<*U4%62PQ}lH8tAW8C_i1o@mMk(k|IG0xRQ_tC(%Q-f zb~sl4N!!?luFZW}SC3=}8_xU0Ym9$lHHhPVx#{r64R-oZi|PA`+&};0Jp_}8G#LCh zBH^=t#P&V3t=~?2;C7)XTdOGm>gA;0POIRFPi;MpSUv=BpJNksZ7jx=I2P(5Om6_7 zzYA{$3#4KEkQ*CoK;|4+xB^ zA5Mz}Muq6INxNzlvE+&0D7w%9r6KFrrnQ}~C!nV==`958!6agDa=j6C< znz=AhPk<9Mx@TNmiSxVu&(P%}1*$H6Oa+5cDlC7P<{uT|yLEqtaf75B(e-6u#VrT4 zs1kZ&)`4K3q1r5S;7;&fm+u6sngdkGK~#!w)X;(8?9*G!2toymb%D6?$ho}i`?$fFB*??c~cRPq3mxR6); z&eS|Ynm^ja(SUy=7XF3eN7-yq(XKLm zq6O+dAMs>I2?<}p^PUZRpGD0B;CFa1P|0H;89CFX)W zjoVcKHwAmomd|7>`g?oTErx1T&XUBItV;-mq76~%1@Lvr`62ZQ9nF-*iG zz88a^9&S!>z8}Xtj_eu!ya--#By8~4qom5`Yz<*#wV$v7Y>O1OniOkcq8=nW)FRuK zJs^Mlqhd7eCx_YXw75Ile~XF5M21!H%$mNDx;?Muu<4%zZ+72)bpFL_4?jLW-({?p z0k1;!d#<_YIJ-9T)BQ&$OW0rE9(GOoYuiI!L;4#UyIL=)^Y6bTp zdE>n2bp#@|v^!kV8A=p&`&wb@-iM;BaD0CX;e->c_oy=3$30Yt8%ulaVkNOc*$ven zgnH_)JrFH}~8<#Dr-%Iu;re_KTbZ}7`P$Ri8TS7a;j)L4Iy zXP`#L*U$jIhCs3G?@cu?GyT+TkXU*<#M6N_K&*V|n5X9+PEWHq@k7IrJ|n)YDK;<{#n5GUp5J68Iwzm! zIDg~G+#q?=G%H@MQ=+s>!W>*(Vb6a|g_Ny&6eyv3r7H(hxzpem>@+dYW4tlq=MfIK z>%mh0vq~yhAi*SCK5d#<_oeU!Qd+8cjw6xk#YTu7Iox^san*cIMu9Gn0N8KRAvApWrBj!YvIP=R|tQs%ooe> zPNEXw0#@MIAdhL5)yW{*8dlr>3PBXm&kAu6FOODP1|077?5TSlf&hIIl=45*w62&q zosJglB_}1Q&g6o2T=qXZ|L&!W55B_z@Kc^qC%I_6DDzS-d%?lCQNVqNeUM;8gP#5D zwY=7EWW&`aWyG49=5A{{kr98R(2g!kS4XK@D&1d3m#mgHAycBL=x4!E2PYY8wL}*N zd;gs(n^$dzT&radoe;HK?fa!3+*YFczuJwkvp%CCQM)0a(MHfw{j z=s-nnHV!NoASq~T_r6OY)qV_I?&lxxzWOm_QZ9e^%#+}36Z`A?oKR8%diE($o<*3AH?i?13nNL#m<;yqp7{yIELa= zn(Lk{XfF+sf-}II>Fcd#153gS^tT!bsQD~NsQX{X4@4xD>EUQT0=^J9t}b~aL{AjF zDU)9X#Ylbm&%J-V8shn|5n+Ni*Q^yfHW&Ajr&uj-AUxkQb%;F(!c5610G#g+m+9Me zplq0Vs}BE(w@Y4(KPW&s(^PJ_@*6LLdF!(}%_fjGwm^v0F_Yw8Hm#O zQcc_9AAI&XK5l~d^I`7rbRA6w{sU=5>A4-{fMS{W9rAza^{*J>!d?{J>n-ErEAUt& zaSbY?e`EECYD7I;imTw?9y^KR3=P9= zV3!K6NOsf*i>FA3?kO$b=NYWA!L|)|rc;|(rBr|8#Zs?+mx`hud%PEAW$9DOC1yuE za~+cG&TMC?#NK_zv@Sqm3k^hX@%bIt$sxnOwB)@oqLIj}MRcc=_lrGO-FdI%K2tql|jWGy*DR zePepH-Nu4KU29E>wn+zg(V>K2nx72oWx9q}JCL0m;`-pmKJ+6{csA+6@_+%$iJKaZ zJ?rqs>`^sw1m$TRo=C%3;@f~HSUeUgkamBZfEDd`JGm0?dDp}Y1QanRg>{W^*oZEc zxnfj^V~16jNJNuLrYOTw&Y1|J4skKDmZE2T#7tkDGniRHGArL`Zy55{=@2(=5kXU@ z0C0W3B+1$x!^^ETcrPxu2~g=AB=fAkmBW3=k78!ETdi|*eAjlgi!D}#LGQ4ho7{hp zuaSZ2K-J+yWv&z);JM}t2m7ZV9sh0}+vT=5*K3a|cmn6U{e161+(r@Tay~nqS*It0 zFy{d;JQ|*z?SBMb{F5Bj-IE11vbwA0*$rT9yZMG~p-Lq){Me_=N0mRI;*~9@)0P_l z4Az-M{+U}~nq41Q=`bX8!Dqz?+}VGRX2j)ict7K-^EIa_|4zA1X9nOv+9OjW%*RyD z|B?cDqHBZ1!080@?W`y5EpA|b6|@^0?g$Lo0aoz*t|to0BO4102k&nVa1p2LE;vX^bRz%W=OD0FjqI?QGn%)JAou6{rL(HqxhI!$>a-Dw*A5(Yn zg;qje7Ugu3;7N#)5yVunpG0wW@IR~!(+PtdAQuN6}e z2aK@h(WB47Oq=B~K0D``F)M$ExeU~Aiyto7AloW_p2b{e^r;>Be46d7BKZhC??8=Pbh-WZBm-&lpEJ5CWNCD@X+_2^ z7IHE$DiqYps+JucIwB@8RB-FITxt~|cYI>~>`1N=dOwEEkHK3c}!Cp~{lh?}?=lb5wWJPxxWm()}j4)!}yAupn1pmc!V0F&CE6M%Nf zEeoCJxXrZeE!VQJ9YR>IOd$l!A~}{++gnuQ%YysGE5R<%8VHtB5QErUGKvvpwu2f% zr`du>eCXRJs1&+EuQq5gz}h7aw3pB5*?P}DLcH947;B?VzrTO~UL%}sGWt)x5>(rk zRf*zNgjH?&F)plnhj4T5bYxG}RtUQ@vAw))lZpJx{BTUAKU<}m*Q$Q;-w==C>>Ms+ z9@NKUIHPy=Uto~?iO0ZI@OAfx5BV!;9gtxus)E2an%)%Eye_c9lLaN;;YINW)@jS$ z$Czd!T#8^pr_g^2T+-gSjzvh&kkQZw3>FW5U;tKzKahbBd>jC7-*(~vFd2Lkn|W){ z$FKYUjo15`w7>CszhPIW+x$#)^KE`1S?N-v$FckTvhhr=Rm9_w6~e>wSA>;wCrlx!%<`?ir^2jeDl5?E`<{yK>;kyZ1IZdiS2Q`KG5UPOZOd z#(AQob1M`D-R66k%G(H>ARWr>CN}5AuYuVJz+_(3 z*Hlx7s}_H^RPi)Hk`d7N4CZ4TsQSzV3aS$mUs^o}YFq3!6D%6myMESKiM5x zCYn8yGXWzKxuRnX;CV~o26-C}b;G0MW1w#|fs=nzkPNe$xm}dEMU_Y_$Oy4SX(f)%-pUN7 z=Q4kr1T1hxbKvd>*kkPP*ec{}row<{!mr9-tQJd^=1vg0gTVu^r<& z9IX5y5Q%d7JD&f@n***9P=;Sq$w4dQ{9AulO}eTE+NEizf`;`5b?_<6%1T%*Y+40* z;jXHO70kx9(M~{9$B-7=q-(gAwr%QGp)e{B&G2h$R!S4os{mzS+6-x8;_JgNa54k< zwunB2#6Df%kNSH+m^RVK{x;EqJ&?nR1Jf-QcWyB;7}F$2HxwyGERAo zQqUuvlj@M!O)iP62i%@zz3;4>h=oe`k4~Y1@FbW8yw0Zi7%cXztbzV`_}S6H@yYq{ z)WQFhUFYLz9ctw4<3oCY#z9xt`E7p<=-J0dCmx1usXD0h)6WmiKR+F+C(g=@=X;7# zvNZkSbeT^lycVo7a@=80-zV9$m_4?9q)87PdL4a0E1dqv^;FrTMV0;}Oot^BTLu`c8 zz2n&jc{#tfVHk#ZGtZ>{TppC8s;Mx+v@31@$K^Dc7}9EHD~2^! zq%xiehiD^X_las%ZUf;A{aJqo8;cs3%$2y@itN&^+ME>icXTGJ?R|E}tA!wKU7yA4 zsM;*1&}7xG1?AQS)-N8+@=>B1N2%OiunWR^?@D7sE_jRyw=?aWh#>k3FQuBj0`3=@ zwk|C2cfP$ARJqmdPnuetX!9Y?1>J`I2{!?igKLEhj}X#spybWmIK+Q@a$`W%Qgh=k zhD$I8)hUK9u)HBvB-pTyjA-s~Et)}28O9pU=g>^E>`ERCk~~h^Qg<>kqE~FSsE8NF zYPt}BvRC6!@99k=2O)Yl+HVZo)N>5Ae%~o>$o`8qQTL(VK&_*+kon!*ArWBW;N@N}>SH@KkUh6w5&aDx*7aaMezVY&=V@uxYrZNs*CxLv3KtOCAM@f+y|{AYdX|*|nKgoP4iZVs!^No~LHR z;er7ySN)d&^?MU-;Cb-X!Bf7_gGi~Kp5^51JEUoH=E~NeoK3H+*B1wLMT806>ov1p z@W)T^?HFkQwLO1xL`Mhn+{RKRLHGN5a@EbteBOqJ&Hr0+R~UY^e{lZU*WNXUA4yu2 z!iFqoid%PaBD z1}r$giL*n1!WK(=9}V%JwA+`9_<}OJ{#he#Dzy5=e1E=1RW!Ls+_H ze#_jb5Qy$8U>n`t^0}okpV9B49F=#_dqqk9YqQ04nqS>@skUoE6$jDB?D~Ftxyg<%QSvFenayh95V`V}c9_vn*@*-~6S{o!XIK6e?i^`jL zbiP;7Ju2S8B^a;!{8`8#fg}PN)7|WGSybr0!tuN+K7ILRgh38#EkCG=?`tg^O@oBf zrM3wYZE_Gcf%Sf1=cESwJyTA!@&I5!pTDEOu9Y9fTDh`+b@^3e1C`4}V+q3&8$n8x z?e*#ml9Q67eDkzKr@ihqr^?T_iK|p_P;Rn!o4E+@nlqPHLlWH}5gI5|3T|MEC5S9; z&dIXbPw3?G#RyK04)Za1yL_76^$AjpI{ExRhVdO|c!`hC+SKwucc83Xc76LISXs9s zMqGsTW!qwZja4^=&VpF-fC-pvy)uir@yz6NkkJqHKG_YPJ(;FUo>6IptxHd-sxT~E z97xmMq3vOq7M0xzllfXk)D4M=D6@>irgy@HYY>uid>B`vqa(b|$dJ{W;t?~R|LBH8 z%+2nrGZsHt2lKR*AU}RDUhuzP;&Wv}*J}W4PfDH{rc?kkyK2BWLl&}&6D)-F`cnSX(Y3Xk zRr{gEW~=KJyXSKMgG@M~HIFp{uN!5Q5glZdOT(*Wx$TcG8(a_&xZe#U%#RyaqG70i zSTL4<_bG>qDI}%Y_D8}6dY(uvz;aVq0`54neY=ffu|IvQ1%XBY9NP$uXdRbd`QqlP zmJxK%kr5r3+I=oQ8hOi8SIXTh?*Q*5P`PU|SFJF*!QJ>iOuK>oxeb*}RT&+1kCBz{O`{WI+-6#Kjom<(g?Ap;P-$WD zzeuxjm4Ly2bkc2Hq*=K!94i3--9^2b61{-Zh=Pl|T{ez>296DXlPkx6`*Ck$bK*F# zUmsIo4!&e*TuI5|ok@Y{V_!6xD7tn#X*T0M#hpGYGi-S8>{3W!MhCAvbV* zmVnwhoa-?zKh0f)hdb!c!U4qT;Ik;pY>am`OE|Z|5Gpp3^lXgMIyD>|l^I@@o|gp% zPE1obPTF+RQU`MgLu59alx@KPyIsb^h>ex@hQ?Fg8 zkYAj=YAzFGW7u$&ax7REhX#`Fe7EH(TuMhz6Z zGo1P&#u9uFC{`OXFpqG56Vp5Nk?fmzpK`gT7FO!jLG{MfxB!woat4$v1CMrJoRg;D4zGUngSawuAw-!QOkKlG!{;1 zyZucU8kRbo6aRTVPGoiNaw@fPpVM;cUOS!Wq+Y+jan3XKa(8no#Rm8%bvl#PvA<<| z)-^)dF1*+7HYV$TU#HpY`#yXoh9Uk*B0#jSCkR{8^+A}Qzd{^1G)rUnfK4QVuLTJ? zP>;aaQvVrQpyq8Z4YX5!zjHrPdf&4@iP^)4|8iL%I=kC|Ta|_T*9_q`zLp^-}J%OZKs;*iroh3{;eu1zeR*p0LX$Nr%LLqmEg4BWzrZE+^uQ1syT% z@!Qw}^SawD+WGFqDEZ(K-kwEzmxbvt+N(k?uo}CS0 zY?}b^`Fyi_E*|_M8~n?L=;8&l;F$N=f940W5YeW87dGe2&VGQFLhET6YJtYlyTwj)BAdPADcuy-xf(_Pg*qhfC$H@6aI5VwdQjOj%jZLyyGf;e-felB zT@oa&hi-t#8vss->KiAeNwQQT(wE}`lZLo|SCd&gE`lMEjGm72*)H97Wv%lQsLTns zrk<|&t?w9oBFP@C0FqUD9! z6cY>dLhJq&28=?pq3r$1-nI3%QUl?4B>qDvFDaxEv^-Th5~bWKaZ@QEI6^2i+jAm+ zLUPEqKtbiVGZ)+A$*jBH&2E}PLC~x{J09Dgy&ijJT+MWshBL}&CEU>&7lqY=w*Sbi zbISPY;Y;#D+m%AhqxDiny}npehB#5_L78e$s2Q_JsA~79X;vrYf9tNO`sji~vG};O zK9>9Xbydann?U;$PCga4RfQ1Gt!}G-dKO&@Wef7rXIS9NR+-(VLSEed>xbMP$Gke+qw#sJr0hO!TbKImIn*HN$n3&G4XyOwY17`i@ z45k6$;mo7{%v0YvQ}D66^r0;1OsKNrqkC&U7=B&Akp3AuU_Ui89mX>g9pIU%N%Gsz zPMJ5TREvUe;vJ~6AbWUT)vSdUzbsZbC+n+L#P&I)_?Y7%g%)ga!q<3z6&rA+-t&BY z{Bd6Ex$)@Q5C>!s8b1ycA`FXlJ$jrALZah9>l~R}__{F^LrPj|40aeEK5+{`bu8Vn z3gvE#7)S6JABMSx2ls#|hvhzvWqJ2_kXuJpS3WcL^Ydit!-DXwaH$}MB*E6llIO0zyy>=F(boNH#g}YL4nj1@4`e}n z-A1Zmk0Q)?Gu6u#&LOi&USpbRVvP$5H4W1!QSjK&0rA%5`&e_q`JdU)-rv3G;#XzR z0n})>z0~Cd3|9?gN)M|u0NVK8!oqmopfIQN4QEAdX*gG87Iw3LtSk&UWR>+5O*mOa zQN2nvZTaYhdfp1n87_(93l$A?@McU9zHq==u5{ree=`!7%CBPqJYX|GLX#|1jsBLA z402oMeNd&*uGbjx6js6qae50wlkb+|WdKWrCbJ8`vZ=BwW?I0+uzZDfs|5XFx#Y_U z;fa@xx5c$wQna6cQP&@qi~MeMVoZP$zW3%2aA)G3nmOK!W)4|}*L-8Dy1SHa_9GnI zRSO6-C6UlK_&W5wU-E0}POqa1TzBt2svw$lzv=z_`=aPHm;q3E6_K#4FX(iMq35pQ z<94<{071cLRXvq|)~+n=a6T#N?vu+<&>+I=T_aOGo)!InF?lFGqncmAw9$JNLD1`m zsUBP!-E-YwChMtUK|_$Iqgc(r1NpwRj7Ca^2x4^%av$nV#bEc5+gI(Cjw4n&xDuP_ z97g2`ToW1x->j;z9gq)OkwguE59t|f6Qo9P-<3FpbEH4RO|vLaPm zJprH6`^7SBpkUzZ8Ttj)RJi~))-I4mhH{Zt zl2I*EMP1y!YF)~WpG|7(gY(cP)xr03YQwrqZaG`hT(IaSii@gP1GOay|E((_Sg7bA zx!qBxfgG_0!Y}74AZ_#ywbTFT)utMttB#L0rL;gx#&Q#7YfX??RqBGAm8%UhaXd0XAC#PJYJ`{E zAZk|ka%`d%5`!GQkO>2*S)k^+A+gEP4)er+Tk3wY2}bdUfoz@ zY*N~mv_>kvo!&^VHqjh2hRGJSM#90Z-R9?|-^;C*Lj2_IK}p4>o%R)de{vllO6nGci7a_$W?{VI|d zc1({`T*%-gzw{(KOHTF#XuppJpr^>d`8DkM%)Jq0p(JGG4-a>)V6(PidbhF}5zc6T zNj<^7Oe`@c^1*@S@n!g;jCk&(pS)}wEIHt3z&KBIycWsb(nqRs4! zo2bt4H*|$Kw&;~PTU;%NAQgWOVj53>MP{QfVfysuiO4X7y`d%q5vUYL=L6n|NZKoQ z913|B%8T4ozeg)RZ}bNw@4geVF2ICOa@Yd&_17}4;a?~NVuql;px&n;ylc^-?)7B| z*c+fjc{B?#5#R1RuIi$nP}CvQ*^8fDy1oXxxPDH_=F(?QO<(F;*%}BpYacy-@{4|{ z0|__bZyd;6{JCL!ac&UEz9Jn-E%-pA?2zXGt_0j|tmw ztp7}5Jb=#O?cYZla$j}=Ia_lU*kCDL>BVdw*SKTj;`&;F|IN>^PSYd*>%uPsSH*8P zFnivHFad*^vWTbImIPzda3XPkJeOA$hUUu1T-eXblwG=&6{jLAs%rpml^z5pn|U_m zW@$O}n5~NzjoFpP)Llk~X;q5`w547*r5@_G9_i}rr)OjRUSeWa+|rRw!mL!i=4T~C zlw9$=sD)K_+x!&i9#QyiHEo!nf%+S!!x&KJ@mYDcxSZci3x0R#d5Bwomc4I5hV}8D zFH}cw<~P#wTI%kEpE&sE8Qh9|0fFhxk9{a(u89h7Jfbw>W#8k#yzVs{tGDiDqRD&P zEj&J^rMtcxh2|SxKJ#MM7G>hiszOb!FF3(XMMO2+Om19_4D4qGy05()=Dy(&4G5d5 zhD7p;7*;HI_?no5gG~c}z8@U4yej74pvh%12L}zWi#a%GbYTpWn<&TJfYi>29=@KnpPRfu%lKkeJo%%R z;g#(-A-d%HY~jCHs>FcX>Q74R&sxn#3TOB1aP=l;bEi@3yX#MX`Ic>`S3zM+bt|!! zH))FDN843eTc{6}y~RlM_jOZkN3DI_GUL$$+eC-)M=;%KoSPmk_AQy?Yo=`VrkTF; zC+{jgquNO9YZH35d^s`RHCJ~9P7T)(qQa9uudLYM$E;6=`-A^=8=Ajo@RCrw1>Rg> z+ymTGY*$c)b^*PAuq)CIpzvZo^eE-N+Xn&ws&pZ|E;2sH$F&0Rx3_IDBEX!F2~=$q?Tm zwGl_)*Yq|8yKVKqyItYv|9-oI*_5nE%DZ)ej=vIwC>dJ&niFBR+xByB8LJLw<2bdNR>*3j%j_V#v!q-9d3~ z)KB7-L(g%7u@(zC%3KUfkBp`QQOabDbJ=E$&t5&{AUc;}9h!&+;y$2~dAV;=$*_uT zWmV2yRO08w^(0ZMOT%WH!lON|8hL`B-8q##kqRV>;^ulanOmwaKKkb3{Nyu7cxUPv z3qrwvH6ej2Hg+_(i1z z0xgFAw3J_ediGTyVMhy$ifidE&c8Xm_~!g0Rb6K&m^Kw;6j@tA6{cxh#)2e_opdBG z$6SyITiOdo*JFKc%>M#&WB;dfHa6%}=7h3;4I3`DN?u+e#%B^9?RqKVsTNle%90jP zKD-%Ecqh&`q%IDbD@X}g(OPS<(}ub8Y|MIRh1&iYOAK%vP-+(LAoR8?W_Sf#Ni`?xX+UaO9#;@{*vX4+qW ze=~pG<(!u2b)9QF-o9=7-q29@t5k~s&h;P&j}`}r_ktuzpSFMd7IwDqC|&go>qzI4~hFXHzJ6j2@z_Mkjm za$<@2*A=)oPJH#!18U9TOc~u^lk2lirXCB4Y%3-R$k!l1GhAz-iy8bQBTg73%>>T8s`U~fiYtV0kap&KNkKZ5w=+ee=Jw?X=9Wj zX9Y55AHwG|U70AZHKu&A!yrL_8c{@H0cG>kcw&k)oD_@jWWmHaj3xdlP~sGeBrE50 z`b9Y6mug{@3nXrQ*10^IPUiDuv{pI84lns_N55A#T|2FAiZH)tKuZZO1SG~__?J=m zQCd~9Y$X-g7FoWyp)WX%E48Izuw`k|_+o-IykZ9a!Geo35L^5!KuZ;WFkRM2`J8_s zxcFBVwyHb@>btse_b7*e*_G(JYwd3w2tpN1H4=7XZT=cdC$ouvd*QZi{jM$X)0Di?eIc2)E49^YzC~sjf9_Rn=OfC1Kp~I( znNzd9eLYEJ3D-~Z^Oz@~S4lm}V%Ze2w~PjYs)uQTrtD=`7|ll~Q^H*J`waN~UaZQ= z&Y~2w(&jMjxO=+{)YT{)SN+u8+kqq(v>rgZ_CS)Tqy{a%|531iv|g_j##5&TcT8{E z?~Q|jwU5(QkCzZrgMRUBggr}-E-=t_QC=hKAgk)g>lldD(6)PKU$pM0;3=7Gv^fZ5yrini#n853ov$`QJUv!0a_# z`_rIoJ}5Cr|I>hf>B|R z1)8I98x$juptY(cA+o={sv*wWI7@LVh)d`=}E>`AwSgMZ9H zgJlxHkWXxXu;8-|6l??cg9OLi0HOAz+Teg_EDY?~vIT)HDUAWg!$N>EuqCA&+pU+J zGoDSKGm-8X%Prk6MA28bsMB*lV`rW6s(uM1wp*f12woIFny#@0rn`p;uy^>>V~pWy zhpKUX@F7*`Xz=bpr|6z*!!Fr%Ow&uxF>BRv!8hA~zPm3fjLlVh3gPk`>t?|jHC`4( zlW?-&O!BcHA3`<==)mOy;;UylVPK*EMIQ{TSFQ^N(&l+!AZ3;V1`=lYUm)4W?iX18 zjznrkQH(8zWaYSCAl*iu7c`8Fkn|uA1wYOLKWNYtJtew5jfmKc*QmY)FTJL7zsYcW) z+R1`*+xl3<7k{?sRxJ8W%3*#z^{p^pbFE19u*yt1R@~dqLSo!161^>%;#6V#Jj%#* zsqnO8{L#pvB6g;LmvyjmPCFHW)1@{)qR+1qm&b= zcAy}_JpT#&*!1Z>f%V$1_k@&aTlmR$qEFum#M1U$C$K*s)N>*SXit6tW z4HponfW~>^HNnr>z7zMsjFmP)nDB4zGm(KNDs4!GrZGgh(%U94jU32LgC@L+zbsUL zC>3Bre+44=m_!HVJ;(n8D2TEfK=kQJgT1juN16;!Jh{3E|a|ZF7?>H01(i9+U2~E_`I=k*Zuh?YT9oXT1@OZH z?2)?0gl${;Rd4@`RMz~Lk{_v8Ocx^&)+|p$@WF@RV>7?+W9;pu#-FBEH2MT7Iq4Kzm?i)d+FPr-f4hx_A8 zm$&og@(H=CdOY7!KC8pCOyk3U(WLEa%u?NK4i$Cx8oueC#az{^p4)JrIomD@$<(U$ zJ=>sMgKioVIkomNKn4%tUV!Cx;#puARW)|DKS54=XE+d;V=mL?Dc1qX^Vc5V>o|Y} zt^Edk(|K^?vzYk1gbas)8a`DWlItaq(;xS_1@IfzBS2;7vtC-i@B+|(q!C- zq9WFv4N^$Z*=dJ^8azZq*6ARH3Y9I62UXaJv$CBJgnCRr+dCl8>)Hjury6sS)h)=eQ7a8IrZUArm}*pyi@C-v#BKz+IuhlNaBJvlApLZe5w1?rJ) zIxb{_oU3+IK@Jd;LKiJ7^rhMaAF|IvfLOl0oK5kLGP9cC@j(LyEBlOTXSg0 z*b}Pls3*6EP23uPs42U&9w&wg`*F#&-Pz8)p;Hs`jJ|$!z5zSbzdPt7K$7KKL5aZ} zzi8~CFtvfF0MT#7SHP7tTj;8{w0~+kPiNXcbz(j`XlSiWGPbZ+ruUlr4$y0xn=TWZ zT{m9d9nd{0D`vId%1;@#%uHvknK?u3nRm^Yxz8~P3-zae!MJmS@v(Uo^gAAR(7ym0 zDHr3qZ9eD6767pZ!putbe@NBGNSv536!y8&p872|yzx&VAehHko~^OwS#59JwZ*YM zM2omWp+TEa2D~4`nK4se6u-Vgt%4d-7v1RVtn%Opz9$tfru9LwggUS5l zhN5=*2oGF;pi!q%&ApN3E48-3)d^Tl^FF<+4~p}wqcuh=Eu_1(k@f}Z@(eyhPFr}2 z`L!vk3$yEf4X;h(7+h+KjbQ0`ASyN2wxD#c=U`Hu(-=4!EAEZ$xD%G#R9coTx3T7~ zd^gcwM6pR<;rk*lKDF#4d^M+k>=B8bGOTfUhvwmbdb(g5J6mu@mA2@$*67&&X-joeMT;RJ*l@@*i@lNJ*?z$D+X_z}O?f9G3R0e;3Q?3V_V4Q1 z;>s2(;L5jxUt0sJLfL>_C#~b5F+1DyG07$!&m8tfnq$ju=a*HlyFbdpJ}|I0_Bu=H z{9Y95lq{}~J{-J4BClPSvtMuKsEo#9k3n!@f^{W}Z=hmZ z=k!037w8GuL37j0fWd^e9w!UZ|H%TJk6Mp^rQpF^P=`qTF_<3T4fl^Dxk*eSKCEcm zL({mnO(OHnDhF%wD`iqle`RHhOSdX*j#0eT`ze?>9^6#W`TylfMms z51T-AUKg^;SHtm z%;(FwjKxAhRC&0>S=z%Tj5JP$rkYO&G2*`db@@wix|~C~@-s#J@qDs!#Qc+qg`(1N zMzYy)M#>Q{kWW@c!HV7N#S8dgl!0bUStBMpFQ(N*kl{$adpWx0(}nGFjPA!8D*Y9h)XMr5Yak~LbdF}FjQ z8YaYjTrx{dJ5oj1CZHA&xp)+R*0eyfKJ@ZXRU|z48k^>lNi;{kf7v_M<~C~J=Q6{8 zILt7yiDN=}d+@Kw%g+z9goJFZdE5%)oDFAJVPXdy4NIhwvyA>XUX? zD`~aTu2vE#g=M(|)TMX>yegcLep;3{LSBkH!mPp{>FlK$B<$rlB-BcOEW#wRG=qS< z9D9H$%*h0{a^;|AJ*%s`zrz|Eg21lUJ3tBuM^L_4_n4O(imq&JotZU2l`=Aj*F zUX$v3#t4oK_M+jcv=c9XlKvG9#jLKVrI=W)rm8aa{WDsMI9*Xg5v^M7wA>U-qyTkA zYy&0Bbg7a3Fm7Z&)JC>l+zRB)7V*P|m|=0d>gcdZ39Ub$Pkv;fly>l!1?w?#r)dlph#Us|5E;SMiV+QRxxTf8K7CO|B;zkAa%+r1!B8c*9h~+x(AWDy+ zaAyLPL}LJlM$vhH3Fp#H9y-s;(hni(9DR4QvP=qfF3WhDPOr++>BZZ!4BVY4OUGED zvUGOjmoj`gx||%9!4>ML_;WuqfPr!Q|-G)kU1j#aVV8%iYf; z#|nG2l20dj4tl9vveMD?*+pq*T#SC5mP^Ag>3K{Z)6uwe?BpORmoetx*Kh^{y?oqt zdtZ#sVBU!2PG%_P2N@i*X4zTIzfS+aIIf3_@kmnVTcrO>!1Cm^3+mnSifge$P4HmT!{Hp<=I6f39)l zcA;p}1&(tUC@dUI0@`D!HKvV0Wp5iHG(gQp?R@m;Cwj@pNEjS=68QZudxw^yxg_XoZG z$DzOdz;#L&Jt1dozwlU*bI{D2>&4R%1V#UpVe9h&R=hDKy07I*EL~{3yhgjop|F)r z{PuhyVsT*?uWNpEctOY^Aox9<7w`XovpCYi~;=xX;OWA^O=_or)Wr^ z$LEtNJyN6u7ox@|paRFBalB+`+s9Fgo=JWT{f{zWj>wTHk#gbWNls%@1|&k^kR)Dz zcrB?{^tSByt!PDsxW>hz^qiGN@)&ZHukmcawbDp(`5BkROXx-b4pW$z5(-S}e(Pt{ z=XX}vl8^#OO$Fzai;PDF4CYESd^($DGn|d7AGin3uX4C2$(>S1nV7j}tIAYaLtVz? z|C^rzxBAl^SYbFP;*Yc<=cN8@dp62{PupDURs@+~md1WExm386!Z^|;lwa5pJ>31B zIZLFIyJUY{qUrm$^W&Fvg^W{N9vu%5F!?{)pxTm;n6;834uQp;XM4aVNecBc!^J5F zG{rBDV*~A(rnS!SlPol=19(WyM&n7AoC9_z*`|OBI?$5m#oRj}h>g#ZFW=vPTrln< zqtc8F;aJ)RKe17seera6{~0&Qnj3*@K^wvi3xu9Kgzf&*r``RXIi!?sV(3D#zodR@ zS!+v4?V=Y4DXs?z2T($3!sfE{*T5kGQFm^pBs?G-P$?zNEC}`ZmL_+7jtZ-ohoPi2 zxOglNE{Q--&0y%4Y5kr4RVi4I zA2IW?j|YrOx-lZAO?^_i5dmwI-EoG~8ZHSWU5+c@+LgA6=~)LyZlLc?MJJ5QY1+$F zTWy7lD};*3c+YAp`9s*kHCu12zmY*n2};6R`I{{4^ovM{z--qL62NbsXRm!&;Mvk_bxknHSscM@!uLHF

N{KbxUd+|}2ZLR3Y%H}Gx=sdFaf%9+2FO-T`kIYGE^-*WDR zm7Zw%kQV>e%2qvBB)S&Ig@E(YzHq~wW>;XxPqP_1J+9#g+UOS-=@hT7hRv6?voks_ z4el(wh~?MObw`K5qt6d7RXN2a#R;H;&nBFZ-Kk!Lfy)tR6TGw}*T)iIFoZ)+c?nf{W>5@?6*S)+2?ZZT14EuY+?ix9DZRdgK1TgG(U1HfVgk{81tYv(4fr)7!j z$-|Fs$$#=_DXbNgjBv}9j&Q)i`|9x4?%`qgvAf#8!9la1hpWY18gL*g|Ipz!9mmes8kdjwcjPISQQ*)Nf98lE z@UhOB3SK65&*)TkDM%8mG>ea|Nxq90P&QlUiW{+H1p353&J_YOM;26@`I<6W+Zvpb zET9;F5CvXgqZ?S?k(#ok8}ihpmUU~*i&dgTRm4flj20_Zk{BM?Ey~t?A*5lEN*A6ImT=3F7xVDPZI~ZH7y&Q-9cOg?Cw!evj#Jvd_nUcqxffuOr~wEY2pt*vQD$Vt z90x+1r5Yfrq-u~ZX2AiAwN~|}8Eta%+bTkT<;JSK5b|9ADtK748xT?UJjt z5x}E-RfI0=mxYi{o!5aaM7|Ev^U-XIdXG`W01?A5P68{g&5(tq8bx7TC$fwp4yuy+ zlWAFYsx?FMXfeoo^3i5>iUlVXNDC~jjh0y%aiq~$wvKo&pMb6Ns9K}`;8r+UjEsSQ z4%ZlsrsIjQYqWtZtFRNLMy(EXfH!bBV%%NN-D#+0&qMhLRzFqNKHL57UT@gz?*}#q z866*Owr`e1BCvc*w~d2t0j6I}E?^7iJ=Hb^uM4}gge6^aWX?`nZ+C~NKmg3s-r*s9p;n?rlwTLUm3%*?0ESDnbdn3#N|StltD4?W z(*42a!l7TKl^1Jl2g&-{N_$Ot_(;hE2Obogf*6~3fZdB`2kiG5%fn)AxiE69du=Ik zf`Fl}A`AHZ)r~zo$#3lBP(h3DLApp9PMd7^~v;a5L@&KJFPl3%@q zh`9tJ*w%i8C_8dNxhOV0c4V~?(G-p>V{_!rg@0cQ0{$;2pfprqIZcPN32a$QsIMck zK$EZ*sh~N^wZ-jr=S%kIZ&DL=oYVBTMX5BXYk|9>mYJ?X8LuPL)#cjC_F_u{XF{+e z>Ik?ERf|4xLove~lJ@t1M5IA+bt2Kw`73c~CS5|!RF(=*vl$U2X?BmP@*`1VCN{(7 z>EN??Y=#9`Kv;*J)rsI+9Hz&3w~XNXugCC-cpA6@pj!MMq{XB63XrO?dq$jzk9gdk zk#B;J$Lw)5w#3!>C#QiEcwg|ugQd479=?ZB&ck7C&5~l#TVzQ1| zA*|)VuYiMgS~gtNuv%erGy;ZW^9~vzS*#o?le!xY0d$3bOaf@-ZD1_MIz%RytB+1y zW$ohesw*o-ac|@47MI1)8kw;(Ju0

cFi5a0 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 z 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 Cjx8nt diff --git a/Moose Test Missions/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.miz b/Moose Test Missions/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.miz index fea222a274800ae182890cd6aff0c1210e5bdc45..20ea2e55b3fbe95466485eaeec4f70969badb224 100644 GIT binary patch delta 119996 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

cFi5a0 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 z zFN~ifwYJmpwQ{1K9|jN_+)n}kz(bEayUFf#==t>h5J$TX_(O}-i$SzPkIle+^&%m~ zsmH%Cs@!OQ*HfSY@-T`+j+p|;<<4ZZp!+3Vha4ggl=XbvY&j^6$Fg*A91Ldw2PMuU=wueZ5Kv~BR)PG|2POco z;epR*VCp(y*TRu3zlYx)&1SSysq3m~*Qy%!m1yO0hU+$Shpk2f<#4Ah*#^oLcFB@& zkhq#U-9|Ui1W|7;byV{leMC9Y$!43DU(6&P zY@pL~IRvRi7W-B_iYlWvq^)35N+p_Y3o8Y+wJ_TOZGD?t-{!Wj&F{XA#K4UwqiFKj zt%GBXV)Oj#5WJRR)p94hPUi}LB}oFp3YH`Tq3&iW2$lX#Inb=qt%hTV{;nlFE|E4T z?@kgVO68p-K9uP@O=#{qsrw8S_hk)0DD6Hh56f4FZQ>`tkKL!=bQ$r$Jp7j^FER{I zP5K!)>HPR!wF;Gn?O_>-=HLLiWYB5IU(H_R4qlbIeRc8UxcFgJ6kSk%0K&nW@J>YG zFaRsdezrY7%VrF8Fm`ylC!T`TsTZGo)@`$yIr&xm(U^A>Cs5Qdb*7D|Xrh{VpYoTY zZV%4ed_7j_?&(<966%vuV~i|tVLhK_pB{a7j$gvpkE`lx?N7*|y}}d^(L)Ljsw{Vr z*vDD1DB8CR6NIM@>9}uys#Cg4E#|k+WFJZH3Rr|J`Dy5C zqG?u;`0tAHwV?$lxHg_3Hfv|DxvtEIkbknK6z`L#PY`j%TSR~e2bSKNI2JvhsMA}I!TSITx(%yv`G zx)T&cGuv9Ton<^NZXb&KO!K>CeR$EO2fVFM;Bg0(?nGw;j=Vm|%!qAsQtv;n!zD5N zWJKoZ9%I7~orm|`j{ByCO=Qd)47YKKqk^p!2aPz}!J$+qF!|$-@%{Ou`j7PHU~fL^ z66aI>=y`NSPhMkx+s)W*EnQO7-FB3eSx7sriJ*sDtc$$H?L1#Ld*_(>8;F@zMNL!| zNCCjRy{uMXF+WBY5ZxH|HaxI4FRRIuj7b*nArAFU9tw&uJFl>rJs?aRCQh%ycWkPn#@FMks)jj>r7w>Qo%Oi*u-jVRf<>R^+f7uA}+(o+B1dOBHb0n$nTw4 zv&DH%U~M?jZ9dg0-o2dd?s2}`!x?Xn=e#|i_5K&S8q>^vA&n!ox%5e1UeY)gx_p#|_6>2%`@5)`8UTw#b>`b4>PN z%q}=aJa=SvyUZ`ki>$uNf2Cx6)f_sPeel_T+2@~5L9f38+UPSnPHQlmi6C2PM5i2B z1?PEf&OnP9mRwWS{5s?IQ&jB~99jgV_N2kR$-&65+NYA?^dc`O{PCG&1afy487*}g zWY*DNUUU^*{uqx%I%ow(gZ#_j^#%BcJ}Gb?)?bU_A^q_uPZ3iG2jUR~KKk+r|NZEH zG#c?=utcK$YcXmycS3d#hcE?IxgfdALku!Xbi;XwmOn_W1rUgQK^AD3M;8F`hiX+8 z`1k5&dCh-CUf?rZ9@`nlp(kWkv<9#cYS=mujc9~|1kw$YtRtgd% zQzsn$CCLuZQPS=HEoYuw@S}4!;^EtW1U6X7gN2bHGz<)oLIdTf;OP_=tH3?HtK=lH z-;;!es9oBziFpCyc%j#@T0#rALKv?J8?A3ELu|2{t$QdpJH;T=;9!Cb8ma(Gso;NG zWmg{}o_@ltm!LqKV*)W`IvupytvEu^0sQ-zq5~0i@mD-DY>7PGgc%Kdo)s>C$`!0m z{V}d$vAVqF;^>r!nO?&zGq+asMcDR2sP=*aQ9GUkGjeK1$5~8kH~=xlSb$Aq)Qv+} z*O5B}!yr()?@e9g8ZU6}3;O#b+V2{`1kB;FTuG&y?|nZ-#d5u;ZtT*1;@T*!4fl3z zCf6bTe>h4s!;ZQ&Ecu5fI_hsP^7cVS2de!tK^q>V^?mWh7qd^!&ZZ~X>67<9{`~j^ z-gX^l`1J*veSZT`O9KRxai1EqsZnN44>UE;Nd3xac!SUZ04Kc)lOCTn77ec0G{DBu z0Yp}p0J_G}0Yp}p0J_GLX`d_uEg%Aun4eGsFC+q!>z^_M15E;xAfQ?U>Q4fbeV{S} ZM^*xpvYreg=vEaPmuI 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

5*iZl&E;tD)Y8uVx0!6 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 Q01N<60{{SF(*OVf0LnW)e*gdg 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 008809de19ea104066d83b6e96ed410fa3236418..4c9ddc39c7a199d4935422334c7afb9c1203bded 100644 GIT binary patch delta 120010 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 nG6NnI0+TOdG6QiM0+Z}Z8reg=vE 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

cFi5a0 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 z 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 O0Ov(!FnOb-bp6th!2DYV0(ESi{|i2OCm-Q? z(&#y{Vnsu!N3&nEtxtC7%p;8+eX%#s#Vz~${iYw=GGFb0_(gNx@BY2d`gdRF{UriB zdmb#i|Nii+e|4K1exCpOHp{a4Y1Ox{$7>j8zkT~%*Wy2K!i&=81yiTYIw&jb6Bz8l zczaRGtqY$l8!Jra)%U19{*h_YX@7mPd6+!%i{7cf0v;d6qkDL-)Hj;C(X0? zz8S1{c@^Zo<2q}DRioLdT}Inhe@i*v6E4ipkSm}T6{eLcw`Ru5DFrW0Zm#oWvo^tE%9n;tX8J*oLB)wlyF6-g-1VQcK2J(7 zcDrft>wTt2oV(v!k!7nY%&J~&KP+InBRG^-Pp0I!K%Ur@S-*Vu{z!e3z03Uf>zU`( zF0WrSeYx5C^~dj*-M(k@?)1?rxt!DW+x=fL&WJ^i{^{S`nM}nB;=b)mI&zWmk*CDF z-G^cHbVm;+9p<&t4ATodm|~fm6&R*p@L)1x{u9hFoz;`ch|@ocfgvc~!pLHJpcj+u z^jJ?ODb8OIF*9R`*j%6(6LZY;gIY{7)316mX)$}{GE8UkVsd2KS2VrGkx6oToEK1Z zYca$0ZZ9ThX4evi=@)?vmAfSj4CRSMsTujD#i_*s-mGj4Kp+H!FIgBErk8_w01^m8 A@&Et; 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 a45f8668d264a1ff00833ca1f080dfcc33f59236..15d1b1326a29962fc93ed1e2f8acdb1c617828e1 100644 GIT binary patch delta 119996 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

cFi5a0 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 z zFN~ifwYJmpwQ{1K9|jN_+)n}kz(bEayUFf#==t>h5J$TX_(O}-i$SzPkIle+^&%m~ zsmH%Cs@!OQ*HfSY@-T`+j+p|;<<4ZZp!+3Vha4ggl=XbvY&j^6$Fg*A91Ldw2PMuU=wueZ5Kv~BR)PG|2POco z;epR*VCp(y*TRu3zlYx)&1SSysq3m~*Qy%!m1yO0hU+$Shpk2f<#4Ah*#^oLcFB@& zkhq#U-9|Ui1W|7;byV{leMC9Y$!43DU(6&P zY@pL~IRvRi7W-B_iYlWvq^)35N+p_Y3o8Y+wJ_TOZGD?t-{!Wj&F{XA#K4UwqiFKj zt%GBXV)Oj#5WJRR)p94hPUi}LB}oFp3YH`Tq3&iW2$lX#Inb=qt%hTV{;nlFE|E4T z?@kgVO68p-K9uP@O=#{qsrw8S_hk)0DD6Hh56f4FZQ>`tkKL!=bQ$r$Jp7j^FER{I zP5K!)>HPR!wF;Gn?O_>-=HLLiWYB5IU(H_R4qlbIeRc8UxcFgJ6kSk%0K&nW@J>YG zFaRsdezrY7%VrF8Fm`ylC!T`TsTZGo)@`$yIr&xm(U^A>Cs5Qdb*7D|Xrh{VpYoTY zZV%4ed_7j_?&(<966%vuV~i|tVLhK_pB{a7j$gvpkE`lx?N7*|y}}d^(L)Ljsw{Vr z*vDD1DB8CR6NIM@>9}uys#Cg4E#|k+WFJZH3Rr|J`Dy5C zqG?u;`0tAHwV?$lxHg_3Hfv|DxvtEIkbknK6z`L#PY`j%TSR~e2bSKNI2JvhsMA}I!TSITx(%yv`G zx)T&cGuv9Ton<^NZXb&KO!K>CeR$EO2fVFM;Bg0(?nGw;j=Vm|%!qAsQtv;n!zD5N zWJKoZ9%I7~orm|`j{ByCO=Qd)47YKKqk^p!2aPz}!J$+qF!|$-@%{Ou`j7PHU~fL^ z66aI>=y`NSPhMkx+s)W*EnQO7-FB3eSx7sriJ*sDtc$$H?L1#Ld*_(>8;F@zMNL!| zNCCjRy{uMXF+WBY5ZxH|HaxI4FRRIuj7b*nArAFU9tw&uJFl>rJs?aRCQh%ycWkPn#@FMks)jj>r7w>Qo%Oi*u-jVRf<>R^+f7uA}+(o+B1dOBHb0n$nTw4 zv&DH%U~M?jZ9dg0-o2dd?s2}`!x?Xn=e#|i_5K&S8q>^vA&n!ox%5e1UeY)gx_p#|_6>2%`@5)`8UTw#b>`b4>PN z%q}=aJa=SvyUZ`ki>$uNf2Cx6)f_sPeel_T+2@~5L9f38+UPSnPHQlmi6C2PM5i2B z1?PEf&OnP9mRwWS{5s?IQ&jB~99jgV_N2kR$-&65+NYA?^dc`O{PCG&1afy487*}g zWY*DNUUU^*{uqx%I%ow(gZ#_j^#%BcJ}Gb?)?bU_A^q_uPZ3iG2jUR~KKk+r|NZEH zG#c?=utcK$YcXmycS3d#hcE?IxgfdALku!Xbi;XwmOn_W1rUgQK^AD3M;8F`hiX+8 z`1k5&dCh-CUf?rZ9@`nlp(kWkv<9#cYS=mujc9~|1kw$YtRtgd% zQzsn$CCLuZQPS=HEoYuw@S}4!;^EtW1U6X7gN2bHGz<)oLIdTf;OP_=tH3?HtK=lH z-;;!es9oBziFpCyc%j#@T0#rALKv?J8?A3ELu|2{t$QdpJH;T=;9!Cb8ma(Gso;NG zWmg{}o_@ltm!LqKV*)W`IvupytvEu^0sQ-zq5~0i@mD-DY>7PGgc%Kdo)s>C$`!0m z{V}d$vAVqF;^>r!nO?&zGq+asMcDR2sP=*aQ9GUkGjeK1$5~8kH~=xlSb$Aq)Qv+} z*O5B}!yr()?@e9g8ZU6}3;O#b+V2{`1kB;FTuG&y?|nZ-#d5u;ZtT*1;@T*!4fl3z zCf6bTe>h4s!;ZQ&Ecu5fI_hsL^7cVS2de!tK^q>V^?mWh7qd^!&ZZ~X>67<9{`~j^ z-gX^l`1J*veSZV9T25_G4>UE;Nd3xac!SUZ04Kc)lh&Oz77ec0G{DBu0Yp}p0J_G} z0Yp}p0J_GLA)YJ){2T(4P@YZ$)E)wpp`J1W3QPi%)}C4e@lFDhGoLa8PE`Vv$%Y$~ Z6`T;0lb;#`#%BVPu%8lOLUB5IWF#nc;Kpk7>|AJ56$wzpe zGysTi^GKsdU+m3uam)UGzv;)e%vU=ge$kxwyMOPq{@vGke~G}( zo(IeBzd!uyU)|=0pXa~6&9ZEMTJ`Pg@fyb2Z{L2`wfN7Q@S?PN!PF_U4$2Dq1O|IB z-d>b)>%u3?#tM^p^*w5je`K0;+FzfzS8uxJ(+!Kwvbg-q-(_e9#igG6_t|{IN%Jhe zZwBjKUIn@DxX#*O)o6BVm(jM>-%`%^gbVXC;Pjswc&7chutM?)Wbs8rU*AHmug;4z1C&;0|?o{NcISJzZKoX65M>A5}OwI1|sgOwf*ODwnlh{v__=C3At@F{PJ_yq&hDopSld z#xdRGbnd(rx|@2tKXfS_uv@8nCv{Gf#*hC@_DiZlGjgqKLTX#zsC`konY(Ll!O|s7 z9A{IG8rLuGTQ;-fPO8)UCF`=Er`)=G$27J;MrZd5$+^!Ap9kjtE{~cVcm3zA&y&)N z-EJEEdY|bL=kE7bWZ9|;v#J-{4-1&?2oB}dlPNhakSBI!)-T_^KT_Xh?=t`Wdgghx z%j*|SUv9R3{qg%{x9{1!JAJfDF6VUp_CGRAx&G+UKfNM{$yBZ&?%TekBNrJTc}l$7 zeHcLpcr!9FFiewWlHy?i0$_>(f+)Yqi9RCJb!3?Yr;Ft>X)zlGFidyOWin#UsAZU5 zk;@dt?BBpJ{VGs|X-(VotWYMI>8g25S}H0t85qhFi&8W4ON&#B1H4(;K*sR_;YVf$ JhEuaaJOGoNGYbF! diff --git a/Moose Test Missions/Moose_Test_ZONE/Moose_Test_ZONE.miz b/Moose Test Missions/Moose_Test_ZONE/Moose_Test_ZONE.miz index de736628884115ec48ff8d75a00eebd1ae0aa650..bf4f2c02a35578e9fd7a00127bdbffed6a158d46 100644 GIT binary patch delta 120004 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

cFi5a0 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 z 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 delta 665 zcmV;K0%rZJzzB+?0kHoV4|6ljNb`GR5a9s;0AmFJlMWdhf2CAWZ`v>reg=vEaPmuI z#0=ztNs)M{fK^C?PJ=y6YgL)Vfk=*B+0I_3{rA~U2Bu9bP+y{)@4NfHJNu4_-=q+^ zjNqo<@5Ac;ezSo2&-LwUIfLbT_Vven0h{gZ_boX84PfYXgP@g^n!z0tOi@!v0o$Tv z+R*Yjfp|2Ye~c#M_-QnWKi84HE|)3gu%k9=3Qu?LXem-&WzPQdH?YY!Y7X`=uSDun zN4VDofI5LT%DOVPtM+8ij8_v60BsN^T2?A$9;}$DlyK;zq$WK?C?fqKMmW*cE*cL$ z#W>l!U-a;R255+|t1b&wd?`2!RY2qL=N8^6auCu$e~8z=&QOnF4op~R=NuGZ9xX*+ zI_#;-sPQBS2nk`%M35_4f_EJ|r{rGI(l-#hTy@iOOG33~%0&JK2$wX=ZJwwtvW<)I ziXy;1sV&@PoPsF${{laxdR1s`JA71qh3qEuBH3-aop7b3f(XrI#WR1Sj;5K2++{-V zq^@h{WZK=_HC=EVEW4-~o#rv;QEmHoT9aPa`I_^RXLCl`F#7LlNM1)y?G&b}cs6?I zx5E%MxKmXPE*x~n5N;OKn)*$>_+{*Cx;Ojlna?KEucDWyHm|S8-*(&HJnqZIdLC@c zf48jZ0ZlXyb2H3H^Lt|u;Q;^uV+8=02p$489&ldvzGB4D0pdv*?z_X$0pdv*?z_X$ z0Z>Z;0ssJ)u;~FB3;+NC009610000A8jLZ19vb0 zmjxdJG6U2$0GB!+0zv~sH~^P_9|A=Kyh;F<#~%Vg14c^#mkS^Q8wTu600000mR~KS diff --git a/Moose Test Missions/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.miz b/Moose Test Missions/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.miz index a53fe345d3cb0e3e87f1876b78290ca0e7677958..c4ce960a8f1769cf67a16ed0437f1a50f61efcf4 100644 GIT binary patch delta 120173 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

Y_$Oy4S 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�{ zg=0#;%ksuE}5UFG?y|0=X zEqSe!%hbM3r4Wd;iU22GskX(QS4W*7!_%k@Y9y6Nlr@=-Be&8M6RBJ0f3^*uN4z7o zDxf+5m#+k1oV)c+xe%hr!fA2o{S$F`^CBtyg zuOp**{buh~gY5~`Vrm;JUrCX!j)8SJ{&nIk@)gKK8f=Uw$K1M&)J`15br@TI*L?;| z{ROIX*)Nl?l7t?t*c&F&u6lpLq4i8glhPn zhcJ$mj{?0gP2!fwZ6UsWK;twc4Ga|SCMzDFpE3#&b%8Lahi8-V>E!U>tu89f>45@= z)erouh)j0vX{kMx!;mtxK`Mp`x~NrZ87;5vqREDT{DryVe;UeH`N03U4;zB|Oi4@` zw2+Pr&K!wtx{SqXf$Wi2XfDddp?dJvx|(PtqWxS_L%yzLIdAgC+%-XJBvj?HDArJ7 zBVEfhk#H<2)6Zn5jA9gj#Cx@82o}U1^xh}{Q+U*d3XW*F$F=-}4Sm$n&^vG}k?cr< zrX^}L8m&(Kf4UcUGeN#nI4|m~Y6dIa;3xC-^N3CkQ1fc~u2-rcQhF5sNtFKCbU5s7 zx8epIT~WjK?kO4HwHgC*Mysmsx4Fox?k<4MsKU89Qn`}EQT4_XbSXdW+D~@wcBqK4 zrh4cVkxQgMYR8PdAw@Kr?S{#pst@e=yp9CfWV)Jqe;^1-)DEP|>*PZ+04mv0Ln=Q6 za{1lfJ6Em{mmBU4zl|aWXMhHtW3h7JL1!u15=WeII)*D+0jVr=;S(|$VzBX*fe3bE zjvkzAJ6uRlg3OjxemdHgS}

5*iZl&E;tD)Y8u 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

xi?!h+@LsMV1J!KPj`ViOWR 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 delta 696 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�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 NjRODxqZ|SN000TWH!shE^KvSrBqRG+At7) z28sW0@=IgH4CH}Hk$9+pRY-$QgFQ@ZRhh(rNRD0E&R(Yd_t{PcrcEnQU!t7vyZgR7 z`;Lj)~^Oju~= z928(4Ek$5D?5WGB@gxWc31QAekSke&cO5&Y?ZUg*=@R=aHXVz2+d^0Gk>Fw zrkRM`WkT<4q^@h{+TGkWU2q&MyQmqR<}v3{ZTojxlU~>Pn)8xpb4J-P`tNB-UPn&t z6sD?pHhSo{!w@yNQ&kNv9CXJJZWh#<`c1v~W$bIZH~Z_E&nDBaqL-&Oudm17cH7=O z?#sn`9&F2hP)h>@mv9~e8n*=M0SYt^b2H3H^Lt|u;Q;^uV+8=09UcNT7I0qnzGB4D z0pdv*?z_X$0pdv*?z_X6XdVJA14J7DmzN#_Py^Z=0GH|>0x|=PFaVby9|AH1={5kD zR38FD16eo#mzf^|MFY`F0GHt(0zo8OO8@|OVRB_?Z*_BJb5KhK1^@s601W^Q0F46x K00B+_0001?S1?Ba diff --git a/Moose Training/Documentation/AIBalancer.html b/Moose Training/Documentation/AIBalancer.html index 12bf002c5..80c324590 100644 --- a/Moose Training/Documentation/AIBalancer.html +++ b/Moose Training/Documentation/AIBalancer.html @@ -19,6 +19,7 @@

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 diff --git a/Moose Test Missions/Moose_Test_BASE/Moose_Test_AIRBLANCER_without_Moose.miz b/Moose Test Missions/Moose_Test_BASE/Moose_Test_AIRBLANCER_without_Moose.miz index 1794abccf91ceceb04bc6e19d0233a68d714806e..cebcf095feebb4811f0eb59e88144426be45f4d6 100644 GIT binary patch delta 117357 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

@@ -1108,13 +1109,21 @@ self

-CLIENT:_AliveCheckScheduler() +CLIENT:_AliveCheckScheduler(SchedulerName)
+

Parameter

+
    +
  • + +

    SchedulerName :

    + +
  • +
diff --git a/Moose Training/Documentation/DCSAirbase.html b/Moose Training/Documentation/DCSAirbase.html index 7f68b0c49..a96d76367 100644 --- a/Moose Training/Documentation/DCSAirbase.html +++ b/Moose Training/Documentation/DCSAirbase.html @@ -19,6 +19,7 @@
  • AIBalancer
  • Airbase
  • +
  • AirbasePolice
  • Base
  • CARGO
  • CleanUp
  • diff --git a/Moose Training/Documentation/DCSCoalitionObject.html b/Moose Training/Documentation/DCSCoalitionObject.html index 03512fa4b..cb13fb9f6 100644 --- a/Moose Training/Documentation/DCSCoalitionObject.html +++ b/Moose Training/Documentation/DCSCoalitionObject.html @@ -19,6 +19,7 @@
    • AIBalancer
    • Airbase
    • +
    • AirbasePolice
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/DCSCommand.html b/Moose Training/Documentation/DCSCommand.html index 1de8e9418..762ea11f1 100644 --- a/Moose Training/Documentation/DCSCommand.html +++ b/Moose Training/Documentation/DCSCommand.html @@ -19,6 +19,7 @@
      • AIBalancer
      • Airbase
      • +
      • AirbasePolice
      • Base
      • CARGO
      • CleanUp
      • diff --git a/Moose Training/Documentation/DCSController.html b/Moose Training/Documentation/DCSController.html index 024cd7b8d..4a98c7547 100644 --- a/Moose Training/Documentation/DCSController.html +++ b/Moose Training/Documentation/DCSController.html @@ -19,6 +19,7 @@
        • AIBalancer
        • Airbase
        • +
        • AirbasePolice
        • Base
        • CARGO
        • CleanUp
        • diff --git a/Moose Training/Documentation/DCSGroup.html b/Moose Training/Documentation/DCSGroup.html index dbb06f65f..a5602a9cb 100644 --- a/Moose Training/Documentation/DCSGroup.html +++ b/Moose Training/Documentation/DCSGroup.html @@ -19,6 +19,7 @@
          • AIBalancer
          • Airbase
          • +
          • AirbasePolice
          • Base
          • CARGO
          • CleanUp
          • diff --git a/Moose Training/Documentation/DCSObject.html b/Moose Training/Documentation/DCSObject.html index 0ca6e09a7..e2da5331a 100644 --- a/Moose Training/Documentation/DCSObject.html +++ b/Moose Training/Documentation/DCSObject.html @@ -19,6 +19,7 @@
-
-
- - - -DATABASE.DCSGroups - -
-
- - - -
-
-
-
- - - -DATABASE.DCSStatics - -
-
- - - -
-
-
-
- - - -DATABASE.DCSUnits - -
-
- - -
@@ -923,38 +843,6 @@ 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, ...) diff --git a/Moose Training/Documentation/Escort.html b/Moose Training/Documentation/Escort.html index 8dff989f8..3ff1d99f1 100644 --- a/Moose Training/Documentation/Escort.html +++ b/Moose Training/Documentation/Escort.html @@ -19,6 +19,7 @@
  • AIBalancer
  • Airbase
  • +
  • AirbasePolice
  • Base
  • CARGO
  • CleanUp
  • @@ -577,6 +578,12 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the ESCORT.ReportTargetsScheduler + + + + ESCORT.SmokeDirectionVector + + @@ -589,6 +596,12 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the ESCORT.TaskPoints + + + + ESCORT:TestSmokeDirectionVector(SmokeDirection) + +

    This function is for test, it will put on the frequency of the FollowScheduler a red smoke at the direction vector calculated for the escort to fly to.

    @@ -751,7 +764,7 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the @@ -762,7 +775,10 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the

    Type Distance

    Type ESCORT

    -

    Field(s)

    + +

    ESCORT class

    + +

    Field(s)

    @@ -1910,6 +1926,19 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the

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

    + +
    +
    +
    + + +ESCORT.SmokeDirectionVector + +
    +
    + + +
    @@ -1938,6 +1967,31 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the + +
    +
    +
    + + +ESCORT:TestSmokeDirectionVector(SmokeDirection) + +
    +
    + +

    This function is for test, it will put on the frequency of the FollowScheduler a red smoke at the direction vector calculated for the escort to fly to.

    + + +

    This allows to visualize where the escort is flying to.

    + +

    Parameter

    +
      +
    • + +

      #boolean SmokeDirection : +If true, then the direction vector will be smoked.

      + +
    • +
    diff --git a/Moose Training/Documentation/Event.html b/Moose Training/Documentation/Event.html index 93784120c..49b030d8d 100644 --- a/Moose Training/Documentation/Event.html +++ b/Moose Training/Documentation/Event.html @@ -19,6 +19,7 @@
    • AIBalancer
    • Airbase
    • +
    • AirbasePolice
    • Base
    • CARGO
    • CleanUp
    • diff --git a/Moose Training/Documentation/GOHOMETASK.html b/Moose Training/Documentation/GOHOMETASK.html index 01aecd8ae..66d6d102e 100644 --- a/Moose Training/Documentation/GOHOMETASK.html +++ b/Moose Training/Documentation/GOHOMETASK.html @@ -19,6 +19,7 @@
      • AIBalancer
      • Airbase
      • +
      • AirbasePolice
      • Base
      • CARGO
      • CleanUp
      • diff --git a/Moose Training/Documentation/Group.html b/Moose Training/Documentation/Group.html index e5a10a838..ad536dbd1 100644 --- a/Moose Training/Documentation/Group.html +++ b/Moose Training/Documentation/Group.html @@ -19,6 +19,7 @@
        • AIBalancer
        • Airbase
        • +
        • AirbasePolice
        • Base
        • CARGO
        • CleanUp
        • diff --git a/Moose Training/Documentation/MISSION.html b/Moose Training/Documentation/MISSION.html index 315e41b09..0e63e702c 100644 --- a/Moose Training/Documentation/MISSION.html +++ b/Moose Training/Documentation/MISSION.html @@ -19,6 +19,7 @@
-

Constructor.

+

SCHEDULER constructor.

Parameters

    @@ -255,6 +262,20 @@ self

    +
+
+
+
+ + #number + +SCHEDULER.ScheduleID + +
+
+ +

the ID of the scheduler.

+
diff --git a/Moose Training/Documentation/Scoring.html b/Moose Training/Documentation/Scoring.html index 22c920010..866110d9e 100644 --- a/Moose Training/Documentation/Scoring.html +++ b/Moose Training/Documentation/Scoring.html @@ -19,6 +19,7 @@