From d5867a1c8c361c7c41911eb715fb6f89378d97a0 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Sun, 5 Jun 2016 00:04:12 +0200 Subject: [PATCH] For those who want to test ZONES --- .../l10n/DEFAULT/Moose.lua | 17619 +++++++++++++++- Moose Mission Setup/Moose.lua | 17619 +++++++++++++++- .../Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz | Bin 199246 -> 204111 bytes .../Moose_Test_DATABASE.miz | Bin 138994 -> 143859 bytes .../Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz | Bin 134430 -> 139295 bytes .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz | Bin 160085 -> 164950 bytes .../Moose_Test_MISSILETRAINER.miz | Bin 219379 -> 224244 bytes .../Moose_Test_SEAD/MOOSE_Test_SEAD.miz | Bin 126683 -> 131548 bytes .../Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz | Bin 159386 -> 160750 bytes .../MOOSE_Test_SPAWN_Repeat.miz | Bin 126244 -> 131109 bytes .../MOOSE_Test_TASK_Pickup_and_Deploy.miz | Bin 132845 -> 137710 bytes .../Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz | Bin 141864 -> 146729 bytes .../Moose_Test_ZONE_POLYGON.miz | Bin 20400 -> 126214 bytes 13 files changed, 35192 insertions(+), 46 deletions(-) diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index dc9f9f58b..7db8a5175 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,6 +1,5 @@ -env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160604_1716' ) - +env.info( '*** MOOSE STATIC INCLUDE START *** ' ) +env.info( 'Moose Generation Timestamp: 20160605_0003' ) local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) @@ -12,27 +11,9 @@ Include.Path = function() end Include.File = function( IncludeFile ) - if not Include.Files[ IncludeFile ] then - Include.Files[IncludeFile] = IncludeFile - env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath ) - local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) ) - if f == nil then - env.info( "Include:" .. IncludeFile .. " from " .. Include.MissionPath ) - local f = assert( base.loadfile( Include.MissionPath .. IncludeFile .. ".lua" ) ) - if f == nil then - error ("Could not load MOOSE file " .. IncludeFile .. ".lua" ) - else - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.MissionPath ) - return f() - end - else - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath ) - return f() - end - end end -Include.ProgramPath = "Scripts/Moose/" +Include.ProgramPath = "Scripts/Moose/Moose/" Include.MissionPath = Include.Path() env.info( "Include.ProgramPath = " .. Include.ProgramPath) @@ -42,4 +23,17596 @@ Include.Files = {} Include.File( "Moose" ) -env.info("Loaded MOOSE Include Engine")env.info( '*** MOOSE INCLUDE END *** ' ) +env.info("Loaded MOOSE Include Engine") +--- Various routines +-- @module routines +-- @author Flightcontrol + +--Include.File( "Trace" ) +--Include.File( "Message" ) + + +env.setErrorMessageBoxEnabled(false) + +--- Extract of MIST functions. +-- @author Grimes + +routines = {} + + +-- don't change these +routines.majorVersion = 3 +routines.minorVersion = 3 +routines.build = 22 + +----------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------- +-- Utils- conversion, Lua utils, etc. +routines.utils = {} + +--from http://lua-users.org/wiki/CopyTable +routines.utils.deepCopy = function(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(object)) + end + local objectreturn = _copy(object) + return objectreturn +end + + +-- porting in Slmod's serialize_slmod2 +routines.utils.oneLineSerialize = function(tbl) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function + + lookup_table = {} + + local function _Serialize( tbl ) + + if type(tbl) == 'table' then --function only works for tables! + + if lookup_table[tbl] then + return lookup_table[object] + end + + local tbl_str = {} + + lookup_table[tbl] = tbl_str + + tbl_str[#tbl_str + 1] = '{' + + for ind,val in pairs(tbl) do -- serialize its fields + local ind_str = {} + if type(ind) == "number" then + ind_str[#ind_str + 1] = '[' + ind_str[#ind_str + 1] = tostring(ind) + ind_str[#ind_str + 1] = ']=' + else --must be a string + ind_str[#ind_str + 1] = '[' + ind_str[#ind_str + 1] = routines.utils.basicSerialize(ind) + ind_str[#ind_str + 1] = ']=' + end + + local val_str = {} + if ((type(val) == 'number') or (type(val) == 'boolean')) then + val_str[#val_str + 1] = tostring(val) + val_str[#val_str + 1] = ',' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'string' then + val_str[#val_str + 1] = routines.utils.basicSerialize(val) + val_str[#val_str + 1] = ',' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'nil' then -- won't ever happen, right? + val_str[#val_str + 1] = 'nil,' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'table' then + if ind == "__index" then + -- tbl_str[#tbl_str + 1] = "__index" + -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it + else + + val_str[#val_str + 1] = _Serialize(val) + val_str[#val_str + 1] = ',' --I think this is right, I just added it + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + end + elseif type(val) == 'function' then + -- tbl_str[#tbl_str + 1] = "function " .. tostring(ind) + -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it + else +-- env.info('unable to serialize value type ' .. routines.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind)) +-- env.info( debug.traceback() ) + end + + end + tbl_str[#tbl_str + 1] = '}' + return table.concat(tbl_str) + else + return tostring(tbl) + end + end + + local objectreturn = _Serialize(tbl) + return objectreturn +end + +--porting in Slmod's "safestring" basic serialize +routines.utils.basicSerialize = function(s) + if s == nil then + return "\"\"" + else + if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then + return tostring(s) + elseif type(s) == 'string' then + s = string.format('%q', s) + return s + end + end +end + + +routines.utils.toDegree = function(angle) + return angle*180/math.pi +end + +routines.utils.toRadian = function(angle) + return angle*math.pi/180 +end + +routines.utils.metersToNM = function(meters) + return meters/1852 +end + +routines.utils.metersToFeet = function(meters) + return meters/0.3048 +end + +routines.utils.NMToMeters = function(NM) + return NM*1852 +end + +routines.utils.feetToMeters = function(feet) + return feet*0.3048 +end + +routines.utils.mpsToKnots = function(mps) + return mps*3600/1852 +end + +routines.utils.mpsToKmph = function(mps) + return mps*3.6 +end + +routines.utils.knotsToMps = function(knots) + return knots*1852/3600 +end + +routines.utils.kmphToMps = function(kmph) + return kmph/3.6 +end + +function routines.utils.makeVec2(Vec3) + if Vec3.z then + return {x = Vec3.x, y = Vec3.z} + else + return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. + end +end + +function routines.utils.makeVec3(Vec2, y) + if not Vec2.z then + if not y then + y = 0 + end + return {x = Vec2.x, y = y, z = Vec2.y} + else + return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. + end +end + +function routines.utils.makeVec3GL(Vec2, offset) + local adj = offset or 0 + + if not Vec2.z then + return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} + else + return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} + end +end + +routines.utils.zoneToVec3 = function(zone) + local new = {} + if type(zone) == 'table' and zone.point then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + elseif type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + if zone then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + end + end +end + +-- gets heading-error corrected direction from point along vector vec. +function routines.utils.getDir(vec, point) + local dir = math.atan2(vec.z, vec.x) + dir = dir + routines.getNorthCorrection(point) + if dir < 0 then + dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi + end + return dir +end + +-- gets distance in meters between two points (2 dimensional) +function routines.utils.get2DDist(point1, point2) + point1 = routines.utils.makeVec3(point1) + point2 = routines.utils.makeVec3(point2) + return routines.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) +end + +-- gets distance in meters between two points (3 dimensional) +function routines.utils.get3DDist(point1, point2) + return routines.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) +end + + + +-- From http://lua-users.org/wiki/SimpleRound +-- use negative idp for rounding ahead of decimal place, positive for rounding after decimal place +routines.utils.round = function(num, idp) + local mult = 10^(idp or 0) + return math.floor(num * mult + 0.5) / mult +end + +-- porting in Slmod's dostring +routines.utils.dostring = function(s) + local f, err = loadstring(s) + if f then + return true, f() + else + return false, err + end +end + + +--3D Vector manipulation +routines.vec = {} + +routines.vec.add = function(vec1, vec2) + return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} +end + +routines.vec.sub = function(vec1, vec2) + return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} +end + +routines.vec.scalarMult = function(vec, mult) + return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} +end + +routines.vec.scalar_mult = routines.vec.scalarMult + +routines.vec.dp = function(vec1, vec2) + return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z +end + +routines.vec.cp = function(vec1, vec2) + return { x = vec1.y*vec2.z - vec1.z*vec2.y, y = vec1.z*vec2.x - vec1.x*vec2.z, z = vec1.x*vec2.y - vec1.y*vec2.x} +end + +routines.vec.mag = function(vec) + return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 +end + +routines.vec.getUnitVec = function(vec) + local mag = routines.vec.mag(vec) + return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } +end + +routines.vec.rotateVec2 = function(vec2, theta) + return { x = vec2.x*math.cos(theta) - vec2.y*math.sin(theta), y = vec2.x*math.sin(theta) + vec2.y*math.cos(theta)} +end +--------------------------------------------------------------------------------------------------------------------------- + + + + +-- acc- the accuracy of each easting/northing. 0, 1, 2, 3, 4, or 5. +routines.tostringMGRS = function(MGRS, acc) + if acc == 0 then + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph + else + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Easting/(10^(5-acc)), 0)) + .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Northing/(10^(5-acc)), 0)) + end +end + +--[[acc: +in DM: decimal point of minutes. +In DMS: decimal point of seconds. +position after the decimal of the least significant digit: +So: +42.32 - acc of 2. +]] +routines.tostringLL = function(lat, lon, acc, DMS) + + local latHemi, lonHemi + if lat > 0 then + latHemi = 'N' + else + latHemi = 'S' + end + + if lon > 0 then + lonHemi = 'E' + else + lonHemi = 'W' + end + + lat = math.abs(lat) + lon = math.abs(lon) + + local latDeg = math.floor(lat) + local latMin = (lat - latDeg)*60 + + local lonDeg = math.floor(lon) + local lonMin = (lon - lonDeg)*60 + + if DMS then -- degrees, minutes, and seconds. + local oldLatMin = latMin + latMin = math.floor(latMin) + local latSec = routines.utils.round((oldLatMin - latMin)*60, acc) + + local oldLonMin = lonMin + lonMin = math.floor(lonMin) + local lonSec = routines.utils.round((oldLonMin - lonMin)*60, acc) + + if latSec == 60 then + latSec = 0 + latMin = latMin + 1 + end + + if lonSec == 60 then + lonSec = 0 + lonMin = lonMin + 1 + end + + local secFrmtStr -- create the formatting string for the seconds place + if acc <= 0 then -- no decimal place. + secFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + secFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format('%02d', latMin) .. '\' ' .. string.format(secFrmtStr, latSec) .. '"' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format('%02d', lonMin) .. '\' ' .. string.format(secFrmtStr, lonSec) .. '"' .. lonHemi + + else -- degrees, decimal minutes. + latMin = routines.utils.round(latMin, acc) + lonMin = routines.utils.round(lonMin, acc) + + if latMin == 60 then + latMin = 0 + latDeg = latDeg + 1 + end + + if lonMin == 60 then + lonMin = 0 + lonDeg = lonDeg + 1 + end + + local minFrmtStr -- create the formatting string for the minutes place + if acc <= 0 then -- no decimal place. + minFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + minFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format(minFrmtStr, latMin) .. '\'' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format(minFrmtStr, lonMin) .. '\'' .. lonHemi + + end +end + +--[[ required: az - radian + required: dist - meters + optional: alt - meters (set to false or nil if you don't want to use it). + optional: metric - set true to get dist and alt in km and m. + precision will always be nearest degree and NM or km.]] +routines.tostringBR = function(az, dist, alt, metric) + az = routines.utils.round(routines.utils.toDegree(az), 0) + + if metric then + dist = routines.utils.round(dist/1000, 2) + else + dist = routines.utils.round(routines.utils.metersToNM(dist), 2) + end + + local s = string.format('%03d', az) .. ' for ' .. dist + + if alt then + if metric then + s = s .. ' at ' .. routines.utils.round(alt, 0) + else + s = s .. ' at ' .. routines.utils.round(routines.utils.metersToFeet(alt), 0) + end + end + return s +end + +routines.getNorthCorrection = function(point) --gets the correction needed for true north + if not point.z then --Vec2; convert to Vec3 + point.z = point.y + point.y = 0 + end + local lat, lon = coord.LOtoLL(point) + local north_posit = coord.LLtoLO(lat + 1, lon) + return math.atan2(north_posit.z - point.z, north_posit.x - point.x) +end + + +-- the main area +do + -- THE MAIN FUNCTION -- Accessed 100 times/sec. + routines.main = function() + timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) --reschedule first in case of Lua error + ---------------------------------------------------------------------------------------------------------- + --area to add new stuff in + + routines.do_scheduled_functions() + end -- end of routines.main + + timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) + +end + + +do + local idNum = 0 + + --Simplified event handler + routines.addEventHandler = function(f) --id is optional! + local handler = {} + idNum = idNum + 1 + handler.id = idNum + handler.f = f + handler.onEvent = function(self, event) + self.f(event) + end + world.addEventHandler(handler) + end + + routines.removeEventHandler = function(id) + for key, handler in pairs(world.eventHandlers) do + if handler.id and handler.id == id then + world.eventHandlers[key] = nil + return true + end + end + return false + end +end + +-- need to return a Vec3 or Vec2? +function routines.getRandPointInCircle(point, radius, innerRadius) + local theta = 2*math.pi*math.random() + local rad = math.random() + math.random() + if rad > 1 then + rad = 2 - rad + end + + local radMult + if innerRadius and innerRadius <= radius then + radMult = (radius - innerRadius)*rad + innerRadius + else + radMult = radius*rad + end + + if not point.z then --might as well work with vec2/3 + point.z = point.y + end + + local rndCoord + if radius > 0 then + rndCoord = {x = math.cos(theta)*radMult + point.x, y = math.sin(theta)*radMult + point.z} + else + rndCoord = {x = point.x, y = point.z} + end + return rndCoord +end + +routines.goRoute = function(group, path) + local misTask = { + id = 'Mission', + params = { + route = { + points = routines.utils.deepCopy(path), + }, + }, + } + if type(group) == 'string' then + group = Group.getByName(group) + end + local groupCon = group:getController() + if groupCon then + groupCon:setTask(misTask) + return true + end + + Controller.setTask(groupCon, misTask) + return false +end + + +-- Useful atomic functions from mist, ported. + +routines.ground = {} +routines.fixedWing = {} +routines.heli = {} + +routines.ground.buildWP = function(point, overRideForm, overRideSpeed) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + local form, speed + + if point.speed and not overRideSpeed then + wp.speed = point.speed + elseif type(overRideSpeed) == 'number' then + wp.speed = overRideSpeed + else + wp.speed = routines.utils.kmphToMps(20) + end + + if point.form and not overRideForm then + form = point.form + else + form = overRideForm + end + + if not form then + wp.action = 'Cone' + else + form = string.lower(form) + if form == 'off_road' or form == 'off road' then + wp.action = 'Off Road' + elseif form == 'on_road' or form == 'on road' then + wp.action = 'On Road' + elseif form == 'rank' or form == 'line_abrest' or form == 'line abrest' or form == 'lineabrest'then + wp.action = 'Rank' + elseif form == 'cone' then + wp.action = 'Cone' + elseif form == 'diamond' then + wp.action = 'Diamond' + elseif form == 'vee' then + wp.action = 'Vee' + elseif form == 'echelon_left' or form == 'echelon left' or form == 'echelonl' then + wp.action = 'EchelonL' + elseif form == 'echelon_right' or form == 'echelon right' or form == 'echelonr' then + wp.action = 'EchelonR' + else + wp.action = 'Cone' -- if nothing matched + end + end + + wp.type = 'Turning Point' + + return wp + +end + +routines.fixedWing.buildWP = function(point, WPtype, speed, alt, altType) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 2000 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = routines.utils.kmphToMps(500) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp +end + +routines.heli.buildWP = function(point, WPtype, speed, alt, altType) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 500 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = routines.utils.kmphToMps(200) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp +end + +routines.groupToRandomPoint = function(vars) + local group = vars.group --Required + local point = vars.point --required + local radius = vars.radius or 0 + local innerRadius = vars.innerRadius + local form = vars.form or 'Cone' + local heading = vars.heading or math.random()*2*math.pi + local headingDegrees = vars.headingDegrees + local speed = vars.speed or routines.utils.kmphToMps(20) + + + local useRoads + if not vars.disableRoads then + useRoads = true + else + useRoads = false + end + + local path = {} + + if headingDegrees then + heading = headingDegrees*math.pi/180 + end + + if heading >= 2*math.pi then + heading = heading - 2*math.pi + end + + local rndCoord = routines.getRandPointInCircle(point, radius, innerRadius) + + local offset = {} + local posStart = routines.getLeadPos(group) + + offset.x = routines.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) + offset.z = routines.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) + path[#path + 1] = routines.ground.buildWP(posStart, form, speed) + + + if useRoads == true and ((point.x - posStart.x)^2 + (point.z - posStart.z)^2)^0.5 > radius * 1.3 then + path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 11, ['z'] = posStart.z + 11}, 'off_road', speed) + path[#path + 1] = routines.ground.buildWP(posStart, 'on_road', speed) + path[#path + 1] = routines.ground.buildWP(offset, 'on_road', speed) + else + path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 25, ['z'] = posStart.z + 25}, form, speed) + end + + path[#path + 1] = routines.ground.buildWP(offset, form, speed) + path[#path + 1] = routines.ground.buildWP(rndCoord, form, speed) + + routines.goRoute(group, path) + + return +end + +routines.groupRandomDistSelf = function(gpData, dist, form, heading, speed) + local pos = routines.getLeadPos(gpData) + local fakeZone = {} + fakeZone.radius = dist or math.random(300, 1000) + fakeZone.point = {x = pos.x, y, pos.y, z = pos.z} + routines.groupToRandomZone(gpData, fakeZone, form, heading, speed) + + return +end + +routines.groupToRandomZone = function(gpData, zone, form, heading, speed) + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + if type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + elseif type(zone) == 'table' and not zone.radius then + zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + end + + if speed then + speed = routines.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.radius = zone.radius + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.point = routines.utils.zoneToVec3(zone) + + routines.groupToRandomPoint(vars) + + return +end + +routines.isTerrainValid = function(coord, terrainTypes) -- vec2/3 and enum or table of acceptable terrain types + if coord.z then + coord.y = coord.z + end + local typeConverted = {} + + if type(terrainTypes) == 'string' then -- if its a string it does this check + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(terrainTypes) or string.lower(constData) == string.lower(terrainTypes) then + table.insert(typeConverted, constId) + end + end + elseif type(terrainTypes) == 'table' then -- if its a table it does this check + for typeId, typeData in pairs(terrainTypes) do + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(typeData) or string.lower(constData) == string.lower(typeId) then + table.insert(typeConverted, constId) + end + end + end + end + for validIndex, validData in pairs(typeConverted) do + if land.getSurfaceType(coord) == land.SurfaceType[validData] then + return true + end + end + return false +end + +routines.groupToPoint = function(gpData, point, form, heading, speed, useRoads) + if type(point) == 'string' then + point = trigger.misc.getZone(point) + end + if speed then + speed = routines.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.disableRoads = useRoads + vars.point = routines.utils.zoneToVec3(point) + routines.groupToRandomPoint(vars) + + return +end + + +routines.getLeadPos = function(group) + if type(group) == 'string' then -- group name + group = Group.getByName(group) + end + + local units = group:getUnits() + + local leader = units[1] + if not leader then -- SHOULD be good, but if there is a bug, this code future-proofs it then. + local lowestInd = math.huge + for ind, unit in pairs(units) do + if ind < lowestInd then + lowestInd = ind + leader = unit + end + end + end + if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... + return leader:getPosition().p + end +end + +--[[ vars for routines.getMGRSString: +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +]] +routines.getMGRSString = function(vars) + local units = vars.units + local acc = vars.acc or 5 + local avgPos = routines.getAvgPos(units) + if avgPos then + return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) + end +end + +--[[ vars for routines.getLLString +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer, number of numbers after decimal place +vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. + + +]] +routines.getLLString = function(vars) + local units = vars.units + local acc = vars.acc or 3 + local DMS = vars.DMS + local avgPos = routines.getAvgPos(units) + if avgPos then + local lat, lon = coord.LOtoLL(avgPos) + return routines.tostringLL(lat, lon, acc, DMS) + end +end + +--[[ +vars.zone - table of a zone name. +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +]] +routines.getBRStringZone = function(vars) + local zone = trigger.misc.getZone( vars.zone ) + local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + if zone then + local vec = {x = zone.point.x - ref.x, y = zone.point.y - ref.y, z = zone.point.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(zone.point, ref) + if alt then + alt = zone.y + end + return routines.tostringBR(dir, dist, alt, metric) + else + env.info( 'routines.getBRStringZone: error: zone is nil' ) + end +end + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +]] +routines.getBRString = function(vars) + local units = vars.units + local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + local avgPos = routines.getAvgPos(units) + if avgPos then + local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(avgPos, ref) + if alt then + alt = avgPos.y + end + return routines.tostringBR(dir, dist, alt, metric) + end +end + + +-- Returns the Vec3 coordinates of the average position of the concentration of units most in the heading direction. +--[[ vars for routines.getLeadingPos: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +]] +routines.getLeadingPos = function(vars) + local units = vars.units + local heading = vars.heading + local radius = vars.radius + if vars.headingDegrees then + heading = routines.utils.toRadian(vars.headingDegrees) + end + + local unitPosTbl = {} + for i = 1, #units do + local unit = Unit.getByName(units[i]) + if unit and unit:isExist() then + unitPosTbl[#unitPosTbl + 1] = unit:getPosition().p + end + end + if #unitPosTbl > 0 then -- one more more units found. + -- first, find the unit most in the heading direction + local maxPos = -math.huge + + local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = + for i = 1, #unitPosTbl do + local rotatedVec2 = routines.vec.rotateVec2(routines.utils.makeVec2(unitPosTbl[i]), heading) + if (not maxPos) or maxPos < rotatedVec2.x then + maxPos = rotatedVec2.x + maxPosInd = i + end + end + + --now, get all the units around this unit... + local avgPos + if radius then + local maxUnitPos = unitPosTbl[maxPosInd] + local avgx, avgy, avgz, totNum = 0, 0, 0, 0 + for i = 1, #unitPosTbl do + if routines.utils.get2DDist(maxUnitPos, unitPosTbl[i]) <= radius then + avgx = avgx + unitPosTbl[i].x + avgy = avgy + unitPosTbl[i].y + avgz = avgz + unitPosTbl[i].z + totNum = totNum + 1 + end + end + avgPos = { x = avgx/totNum, y = avgy/totNum, z = avgz/totNum} + else + avgPos = unitPosTbl[maxPosInd] + end + + return avgPos + end +end + + +--[[ vars for routines.getLeadingMGRSString: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.acc - number, 0 to 5. +]] +routines.getLeadingMGRSString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local acc = vars.acc or 5 + return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) + end +end + +--[[ vars for routines.getLeadingLLString: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.acc - number of digits after decimal point (can be negative) +vars.DMS - boolean, true if you want DMS. +]] +routines.getLeadingLLString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local acc = vars.acc or 3 + local DMS = vars.DMS + local lat, lon = coord.LOtoLL(pos) + return routines.tostringLL(lat, lon, acc, DMS) + end +end + + + +--[[ vars for routines.getLeadingBRString: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.metric - boolean, if true, use km instead of NM. +vars.alt - boolean, if true, include altitude. +vars.ref - vec3/vec2 reference point. +]] +routines.getLeadingBRString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local ref = vars.ref + local alt = vars.alt + local metric = vars.metric + + local vec = {x = pos.x - ref.x, y = pos.y - ref.y, z = pos.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(pos, ref) + if alt then + alt = pos.y + end + return routines.tostringBR(dir, dist, alt, metric) + end +end + +--[[ vars for routines.message.add + vars.text = 'Hello World' + vars.displayTime = 20 + vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} + +]] + +--[[ vars for routines.msgMGRS +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +vars.text - text in the message +vars.displayTime - self explanatory +vars.msgFor - scope +]] +routines.msgMGRS = function(vars) + local units = vars.units + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getMGRSString{units = units, acc = acc} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } +end + +--[[ vars for routines.msgLL +vars.units - table of unit names (NOT unitNameTable- maybe this should change) (Yes). +vars.acc - integer, number of numbers after decimal place +vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. +vars.text - text in the message +vars.displayTime - self explanatory +vars.msgFor - scope +]] +routines.msgLL = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLLString{units = units, acc = acc, DMS = DMS} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgBR = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString + local alt = vars.alt + local metric = vars.metric + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getBRString{units = units, ref = ref, alt = alt, metric = metric} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + + +-------------------------------------------------------------------------------------------- +-- basically, just sub-types of routines.msgBR... saves folks the work of getting the ref point. +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - string red, blue +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgBullseye = function(vars) + if string.lower(vars.ref) == 'red' then + vars.ref = routines.DBs.missionData.bullseye.red + routines.msgBR(vars) + elseif string.lower(vars.ref) == 'blue' then + vars.ref = routines.DBs.missionData.bullseye.blue + routines.msgBR(vars) + end +end + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - unit name of reference point +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] + +routines.msgBRA = function(vars) + if Unit.getByName(vars.ref) then + vars.ref = Unit.getByName(vars.ref):getPosition().p + if not vars.alt then + vars.alt = true + end + routines.msgBR(vars) + end +end +-------------------------------------------------------------------------------------------- + +--[[ vars for routines.msgLeadingMGRS: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.acc - number, 0 to 5. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingMGRS = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + + +end +--[[ vars for routines.msgLeadingLL: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.acc - number of digits after decimal point (can be negative) +vars.DMS - boolean, true if you want DMS. (optional) +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingLL = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + +--[[ +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.metric - boolean, if true, use km instead of NM. (optional) +vars.alt - boolean, if true, include altitude. (optional) +vars.ref - vec3/vec2 reference point. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingBR = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local metric = vars.metric + local alt = vars.alt + local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } +end + + +function spairs(t, order) + -- collect the keys + local keys = {} + for k in pairs(t) do keys[#keys+1] = k end + + -- if order function given, sort by it by passing the table and keys a, b, + -- otherwise just sort the keys + if order then + table.sort(keys, function(a,b) return order(t, a, b) end) + else + table.sort(keys) + end + + -- return the iterator function + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], t[keys[i]] + end + end +end + + +function routines.IsPartOfGroupInZones( CargoGroup, LandingZones ) +--trace.f() + + local CurrentZoneID = nil + + if CargoGroup then + local CargoUnits = CargoGroup:getUnits() + for CargoUnitID, CargoUnit in pairs( CargoUnits ) do + if CargoUnit and CargoUnit:getLife() >= 1.0 then + CurrentZoneID = routines.IsUnitInZones( CargoUnit, LandingZones ) + if CurrentZoneID then + break + end + end + end + end + +--trace.r( "", "", { CurrentZoneID } ) + return CurrentZoneID +end + + + +function routines.IsUnitInZones( TransportUnit, LandingZones ) +--trace.f("", "routines.IsUnitInZones" ) + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + if TransportUnit then + local TransportUnitPos = TransportUnit:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = 1 + end + end + if TransportZoneResult then + --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) + else + --trace.i( "routines", "TransportZone:nil logic" ) + end + return TransportZoneResult + else + --trace.i( "routines", "TransportZone:nil hard" ) + return nil + end +end + +function routines.IsUnitNearZonesRadius( TransportUnit, LandingZones, ZoneRadius ) +--trace.f("", "routines.IsUnitInZones" ) + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + if TransportUnit then + local TransportUnitPos = TransportUnit:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then + TransportZoneResult = 1 + end + end + if TransportZoneResult then + --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) + else + --trace.i( "routines", "TransportZone:nil logic" ) + end + return TransportZoneResult + else + --trace.i( "routines", "TransportZone:nil hard" ) + return nil + end +end + + +function routines.IsStaticInZones( TransportStatic, LandingZones ) +--trace.f() + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + local TransportStaticPos = TransportStatic:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = 1 + end + end + +--trace.r( "", "", { TransportZoneResult } ) + return TransportZoneResult +end + + +function routines.IsUnitInRadius( CargoUnit, ReferencePosition, Radius ) +--trace.f() + + local Valid = true + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + local CargoPos = CargoUnit:getPosition().p + local ReferenceP = ReferencePosition.p + + if (((CargoPos.x - ReferenceP.x)^2 + (CargoPos.z - ReferenceP.z)^2)^0.5 <= Radius) then + else + Valid = false + end + + return Valid +end + +function routines.IsPartOfGroupInRadius( CargoGroup, ReferencePosition, Radius ) +--trace.f() + + local Valid = true + + Valid = routines.ValidateGroup( CargoGroup, "CargoGroup", Valid ) + + -- fill-up some local variables to support further calculations to determine location of units within the zone + local CargoUnits = CargoGroup:getUnits() + for CargoUnitId, CargoUnit in pairs( CargoUnits ) do + local CargoUnitPos = CargoUnit:getPosition().p +-- env.info( 'routines.IsPartOfGroupInRadius: CargoUnitPos.x = ' .. CargoUnitPos.x .. ' CargoUnitPos.z = ' .. CargoUnitPos.z ) + local ReferenceP = ReferencePosition.p +-- env.info( 'routines.IsPartOfGroupInRadius: ReferenceGroupPos.x = ' .. ReferenceGroupPos.x .. ' ReferenceGroupPos.z = ' .. ReferenceGroupPos.z ) + + if ((( CargoUnitPos.x - ReferenceP.x)^2 + (CargoUnitPos.z - ReferenceP.z)^2)^0.5 <= Radius) then + else + Valid = false + break + end + end + + return Valid +end + + +function routines.ValidateString( Variable, VariableName, Valid ) +--trace.f() + + if type( Variable ) == "string" then + if Variable == "" then + error( "routines.ValidateString: error: " .. VariableName .. " must be filled out!" ) + Valid = false + end + else + error( "routines.ValidateString: error: " .. VariableName .. " is not a string." ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateNumber( Variable, VariableName, Valid ) +--trace.f() + + if type( Variable ) == "number" then + else + error( "routines.ValidateNumber: error: " .. VariableName .. " is not a number." ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid + +end + +function routines.ValidateGroup( Variable, VariableName, Valid ) +--trace.f() + + if Variable == nil then + error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateZone( LandingZones, VariableName, Valid ) +--trace.f() + + if LandingZones == nil then + error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) + Valid = false + end + + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + if trigger.misc.getZone( LandingZoneName ) == nil then + error( "routines.ValidateGroup: error: Zone " .. LandingZoneName .. " does not exist!" ) + Valid = false + break + end + end + else + if trigger.misc.getZone( LandingZones ) == nil then + error( "routines.ValidateGroup: error: Zone " .. LandingZones .. " does not exist!" ) + Valid = false + end + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateEnumeration( Variable, VariableName, Enum, Valid ) +--trace.f() + + local ValidVariable = false + + for EnumId, EnumData in pairs( Enum ) do + if Variable == EnumData then + ValidVariable = true + break + end + end + + if ValidVariable then + else + error( 'TransportValidateEnum: " .. VariableName .. " is not a valid type.' .. Variable ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints but returns speed and formation type along with vec2 of point} + -- refactor to search by groupId and allow groupId and groupName as inputs + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + gpId = _DATABASE.Templates.Groups[groupIdent].groupId + end + + for coa_name, coa_data in pairs(env.mission.coalition) do + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + for obj_type_name, obj_type_data in pairs(cntry_data) do + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_type_data.group) do + if group_data and group_data.groupId == gpId then -- this is the group we are looking for + if group_data.route and group_data.route.points and #group_data.route.points > 0 then + local points = {} + + for point_num, point in pairs(group_data.route.points) do + local routeData = {} + if not point.point then + routeData.x = point.x + routeData.y = point.y + else + routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation. + end + routeData.form = point.action + routeData.speed = point.speed + routeData.alt = point.alt + routeData.alt_type = point.alt_type + routeData.airdromeId = point.airdromeId + routeData.helipadId = point.helipadId + routeData.type = point.type + routeData.action = point.action + if task then + routeData.task = point.task + end + points[point_num] = routeData + end + + return points + end + return + end --if group_data and group_data.name and group_data.name == 'groupname' + end --for group_num, group_data in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do +end + +routines.ground.patrolRoute = function(vars) + + + local tempRoute = {} + local useRoute = {} + local gpData = vars.gpData + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + local useGroupRoute + if not vars.useGroupRoute then + useGroupRoute = vars.gpData + else + useGroupRoute = vars.useGroupRoute + end + local routeProvided = false + if not vars.route then + if useGroupRoute then + tempRoute = routines.getGroupRoute(useGroupRoute) + end + else + useRoute = vars.route + local posStart = routines.getLeadPos(gpData) + useRoute[1] = routines.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed) + routeProvided = true + end + + + local overRideSpeed = vars.speed or 'default' + local pType = vars.pType + local offRoadForm = vars.offRoadForm or 'default' + local onRoadForm = vars.onRoadForm or 'default' + + if routeProvided == false and #tempRoute > 0 then + local posStart = routines.getLeadPos(gpData) + + + useRoute[#useRoute + 1] = routines.ground.buildWP(posStart, offRoadForm, overRideSpeed) + for i = 1, #tempRoute do + local tempForm = tempRoute[i].action + local tempSpeed = tempRoute[i].speed + + if offRoadForm == 'default' then + tempForm = tempRoute[i].action + end + if onRoadForm == 'default' then + onRoadForm = 'On Road' + end + if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then + tempForm = onRoadForm + else + tempForm = offRoadForm + end + + if type(overRideSpeed) == 'number' then + tempSpeed = overRideSpeed + end + + + useRoute[#useRoute + 1] = routines.ground.buildWP(tempRoute[i], tempForm, tempSpeed) + end + + if pType and string.lower(pType) == 'doubleback' then + local curRoute = routines.utils.deepCopy(useRoute) + for i = #curRoute, 2, -1 do + useRoute[#useRoute + 1] = routines.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed) + end + end + + useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP + end + + local cTask3 = {} + local newPatrol = {} + newPatrol.route = useRoute + newPatrol.gpData = gpData:getName() + cTask3[#cTask3 + 1] = 'routines.ground.patrolRoute(' + cTask3[#cTask3 + 1] = routines.utils.oneLineSerialize(newPatrol) + cTask3[#cTask3 + 1] = ')' + cTask3 = table.concat(cTask3) + local tempTask = { + id = 'WrappedAction', + params = { + action = { + id = 'Script', + params = { + command = cTask3, + + }, + }, + }, + } + + + useRoute[#useRoute].task = tempTask + routines.goRoute(gpData, useRoute) + + return +end + +routines.ground.patrol = function(gpData, pType, form, speed) + local vars = {} + + if type(gpData) == 'table' and gpData:getName() then + gpData = gpData:getName() + end + + vars.useGroupRoute = gpData + vars.gpData = gpData + vars.pType = pType + vars.offRoadForm = form + vars.speed = speed + + routines.ground.patrolRoute(vars) + + return +end + +function routines.GetUnitHeight( CheckUnit ) +--trace.f( "routines" ) + + local UnitPoint = CheckUnit:getPoint() + local UnitPosition = { x = UnitPoint.x, y = UnitPoint.z } + local UnitHeight = UnitPoint.y + + local LandHeight = land.getHeight( UnitPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + --trace.f( "routines", "Unit Height = " .. UnitHeight - LandHeight ) + + return UnitHeight - LandHeight + +end + + + +Su34Status = { status = {} } +boardMsgRed = { statusMsg = "" } +boardMsgAll = { timeMsg = "" } +SpawnSettings = {} +Su34MenuPath = {} +Su34Menus = 0 + + +function Su34AttackCarlVinson(groupName) +--trace.menu("", "Su34AttackCarlVinson") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupCarlVinson = Group.getByName("US Carl Vinson #001") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupCarlVinson ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupCarlVinson:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + Su34Status.status[groupName] = 1 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking carrier Carl Vinson. ', 10, 'RedStatus' .. groupName ) +end + +function Su34AttackWest(groupName) +--trace.f("","Su34AttackWest") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupShipWest1 = Group.getByName("US Ship West #001") + local groupShipWest2 = Group.getByName("US Ship West #002") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupShipWest1 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + if groupShipWest2 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + Su34Status.status[groupName] = 2 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the west. ', 10, 'RedStatus' .. groupName ) +end + +function Su34AttackNorth(groupName) +--trace.menu("","Su34AttackNorth") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupShipNorth1 = Group.getByName("US Ship North #001") + local groupShipNorth2 = Group.getByName("US Ship North #002") + local groupShipNorth3 = Group.getByName("US Ship North #003") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupShipNorth1 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + if groupShipNorth2 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + if groupShipNorth3 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth3:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + Su34Status.status[groupName] = 3 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the north. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Orbit(groupName) +--trace.menu("","Su34Orbit") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + controllerSu34:pushTask( {id = 'ControlledTask', params = { task = { id = 'Orbit', params = { pattern = AI.Task.OrbitPattern.RACE_TRACK } }, stopCondition = { duration = 600 } } } ) + Su34Status.status[groupName] = 4 + MessageToRed( string.format('%s: ',groupName) .. 'In orbit and awaiting further instructions. ', 10, 'RedStatus' .. groupName ) +end + +function Su34TakeOff(groupName) +--trace.menu("","Su34TakeOff") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + Su34Status.status[groupName] = 8 + MessageToRed( string.format('%s: ',groupName) .. 'Take-Off. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Hold(groupName) +--trace.menu("","Su34Hold") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + Su34Status.status[groupName] = 5 + MessageToRed( string.format('%s: ',groupName) .. 'Holding Weapons. ', 10, 'RedStatus' .. groupName ) +end + +function Su34RTB(groupName) +--trace.menu("","Su34RTB") + Su34Status.status[groupName] = 6 + MessageToRed( string.format('%s: ',groupName) .. 'Return to Krasnodar. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Destroyed(groupName) +--trace.menu("","Su34Destroyed") + Su34Status.status[groupName] = 7 + MessageToRed( string.format('%s: ',groupName) .. 'Destroyed. ', 30, 'RedStatus' .. groupName ) +end + +function GroupAlive( groupName ) +--trace.menu("","GroupAlive") + local groupTest = Group.getByName( groupName ) + + local groupExists = false + + if groupTest then + groupExists = groupTest:isExist() + end + + --trace.r( "", "", { groupExists } ) + return groupExists +end + +function Su34IsDead() +--trace.f() + +end + +function Su34OverviewStatus() +--trace.menu("","Su34OverviewStatus") + local msg = "" + local currentStatus = 0 + local Exists = false + + for groupName, currentStatus in pairs(Su34Status.status) do + + env.info(('Su34 Overview Status: GroupName = ' .. groupName )) + Alive = GroupAlive( groupName ) + + if Alive then + if currentStatus == 1 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking carrier Carl Vinson. " + elseif currentStatus == 2 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking supporting ships in the west. " + elseif currentStatus == 3 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking invading ships in the north. " + elseif currentStatus == 4 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "In orbit and awaiting further instructions. " + elseif currentStatus == 5 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Holding Weapons. " + elseif currentStatus == 6 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Return to Krasnodar. " + elseif currentStatus == 7 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Destroyed. " + elseif currentStatus == 8 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Take-Off. " + end + else + if currentStatus == 7 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Destroyed. " + else + Su34Destroyed(groupName) + end + end + end + + boardMsgRed.statusMsg = msg +end + + +function UpdateBoardMsg() +--trace.f() + Su34OverviewStatus() + MessageToRed( boardMsgRed.statusMsg, 15, 'RedStatus' ) +end + +function MusicReset( flg ) +--trace.f() + trigger.action.setUserFlag(95,flg) +end + +function PlaneActivate(groupNameFormat, flg) +--trace.f() + local groupName = groupNameFormat .. string.format("#%03d", trigger.misc.getUserFlag(flg)) + --trigger.action.outText(groupName,10) + trigger.action.activateGroup(Group.getByName(groupName)) +end + +function Su34Menu(groupName) +--trace.f() + + --env.info(( 'Su34Menu(' .. groupName .. ')' )) + local groupSu34 = Group.getByName( groupName ) + + if Su34Status.status[groupName] == 1 or + Su34Status.status[groupName] == 2 or + Su34Status.status[groupName] == 3 or + Su34Status.status[groupName] == 4 or + Su34Status.status[groupName] == 5 then + if Su34MenuPath[groupName] == nil then + if planeMenuPath == nil then + planeMenuPath = missionCommands.addSubMenuForCoalition( + coalition.side.RED, + "SU-34 anti-ship flights", + nil + ) + end + Su34MenuPath[groupName] = missionCommands.addSubMenuForCoalition( + coalition.side.RED, + "Flight " .. groupName, + planeMenuPath + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack carrier Carl Vinson", + Su34MenuPath[groupName], + Su34AttackCarlVinson, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack ships in the west", + Su34MenuPath[groupName], + Su34AttackWest, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack ships in the north", + Su34MenuPath[groupName], + Su34AttackNorth, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Hold position and await instructions", + Su34MenuPath[groupName], + Su34Orbit, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Report status", + Su34MenuPath[groupName], + Su34OverviewStatus + ) + end + else + if Su34MenuPath[groupName] then + missionCommands.removeItemForCoalition(coalition.side.RED, Su34MenuPath[groupName]) + end + end +end + +--- Obsolete function, but kept to rework in framework. + +function ChooseInfantry ( TeleportPrefixTable, TeleportMax ) +--trace.f("Spawn") + --env.info(( 'ChooseInfantry: ' )) + + TeleportPrefixTableCount = #TeleportPrefixTable + TeleportPrefixTableIndex = math.random( 1, TeleportPrefixTableCount ) + + --env.info(( 'ChooseInfantry: TeleportPrefixTableIndex = ' .. TeleportPrefixTableIndex .. ' TeleportPrefixTableCount = ' .. TeleportPrefixTableCount .. ' TeleportMax = ' .. TeleportMax )) + + local TeleportFound = false + local TeleportLoop = true + local Index = TeleportPrefixTableIndex + local TeleportPrefix = '' + + while TeleportLoop do + TeleportPrefix = TeleportPrefixTable[Index] + if SpawnSettings[TeleportPrefix] then + if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then + SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 + TeleportFound = true + else + TeleportFound = false + end + else + SpawnSettings[TeleportPrefix] = {} + SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 + TeleportFound = true + end + if TeleportFound then + TeleportLoop = false + else + if Index < TeleportPrefixTableCount then + Index = Index + 1 + else + TeleportLoop = false + end + end + --env.info(( 'ChooseInfantry: Loop 1 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) + end + + if TeleportFound == false then + TeleportLoop = true + Index = 1 + while TeleportLoop do + TeleportPrefix = TeleportPrefixTable[Index] + if SpawnSettings[TeleportPrefix] then + if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then + SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 + TeleportFound = true + else + TeleportFound = false + end + else + SpawnSettings[TeleportPrefix] = {} + SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 + TeleportFound = true + end + if TeleportFound then + TeleportLoop = false + else + if Index < TeleportPrefixTableIndex then + Index = Index + 1 + else + TeleportLoop = false + end + end + --env.info(( 'ChooseInfantry: Loop 2 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) + end + end + + local TeleportGroupName = '' + if TeleportFound == true then + TeleportGroupName = TeleportPrefix .. string.format("#%03d", SpawnSettings[TeleportPrefix]['SpawnCount'] ) + else + TeleportGroupName = '' + end + + --env.info(('ChooseInfantry: TeleportGroupName = ' .. TeleportGroupName )) + --env.info(('ChooseInfantry: return')) + + return TeleportGroupName +end + +SpawnedInfantry = 0 + +function LandCarrier ( CarrierGroup, LandingZonePrefix ) +--trace.f() + --env.info(( 'LandCarrier: ' )) + --env.info(( 'LandCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) + --env.info(( 'LandCarrier: LandingZone = ' .. LandingZonePrefix )) + + local controllerGroup = CarrierGroup:getController() + + local LandingZone = trigger.misc.getZone(LandingZonePrefix) + local LandingZonePos = {} + LandingZonePos.x = LandingZone.point.x + math.random(LandingZone.radius * -1, LandingZone.radius) + LandingZonePos.y = LandingZone.point.z + math.random(LandingZone.radius * -1, LandingZone.radius) + + controllerGroup:pushTask( { id = 'Land', params = { point = LandingZonePos, durationFlag = true, duration = 10 } } ) + + --env.info(( 'LandCarrier: end' )) +end + +EscortCount = 0 +function EscortCarrier ( CarrierGroup, EscortPrefix, EscortLastWayPoint, EscortEngagementDistanceMax, EscortTargetTypes ) +--trace.f() + --env.info(( 'EscortCarrier: ' )) + --env.info(( 'EscortCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) + --env.info(( 'EscortCarrier: EscortPrefix = ' .. EscortPrefix )) + + local CarrierName = CarrierGroup:getName() + + local EscortMission = {} + local CarrierMission = {} + + local EscortMission = SpawnMissionGroup( EscortPrefix ) + local CarrierMission = SpawnMissionGroup( CarrierGroup:getName() ) + + if EscortMission ~= nil and CarrierMission ~= nil then + + EscortCount = EscortCount + 1 + EscortMissionName = string.format( EscortPrefix .. '#Escort %s', CarrierName ) + EscortMission.name = EscortMissionName + EscortMission.groupId = nil + EscortMission.lateActivation = false + EscortMission.taskSelected = false + + local EscortUnits = #EscortMission.units + for u = 1, EscortUnits do + EscortMission.units[u].name = string.format( EscortPrefix .. '#Escort %s %02d', CarrierName, u ) + EscortMission.units[u].unitId = nil + end + + + EscortMission.route.points[1].task = { id = "ComboTask", + params = + { + tasks = + { + [1] = + { + enabled = true, + auto = false, + id = "Escort", + number = 1, + params = + { + lastWptIndexFlagChangedManually = false, + groupId = CarrierGroup:getID(), + lastWptIndex = nil, + lastWptIndexFlag = false, + engagementDistMax = EscortEngagementDistanceMax, + targetTypes = EscortTargetTypes, + pos = + { + y = 20, + x = 20, + z = 0, + } -- end of ["pos"] + } -- end of ["params"] + } -- end of [1] + } -- end of ["tasks"] + } -- end of ["params"] + } -- end of ["task"] + + SpawnGroupAdd( EscortPrefix, EscortMission ) + + end +end + +function SendMessageToCarrier( CarrierGroup, CarrierMessage ) +--trace.f() + + if CarrierGroup ~= nil then + MessageToGroup( CarrierGroup, CarrierMessage, 30, 'Carrier/' .. CarrierGroup:getName() ) + end + +end + +function MessageToGroup( MsgGroup, MsgText, MsgTime, MsgName ) +--trace.f() + + if type(MsgGroup) == 'string' then + --env.info( 'MessageToGroup: Converted MsgGroup string "' .. MsgGroup .. '" into a Group structure.' ) + MsgGroup = Group.getByName( MsgGroup ) + end + + if MsgGroup ~= nil then + local MsgTable = {} + MsgTable.text = MsgText + MsgTable.displayTime = MsgTime + MsgTable.msgFor = { units = { MsgGroup:getUnits()[1]:getName() } } + MsgTable.name = MsgName + --routines.message.add( MsgTable ) + --env.info(('MessageToGroup: Message sent to ' .. MsgGroup:getUnits()[1]:getName() .. ' -> ' .. MsgText )) + end +end + +function MessageToUnit( UnitName, MsgText, MsgTime, MsgName ) +--trace.f() + + if UnitName ~= nil then + local MsgTable = {} + MsgTable.text = MsgText + MsgTable.displayTime = MsgTime + MsgTable.msgFor = { units = { UnitName } } + MsgTable.name = MsgName + --routines.message.add( MsgTable ) + end +end + +function MessageToAll( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "Message", MsgTime, MsgName ):ToCoalition( coalition.side.RED ):ToCoalition( coalition.side.BLUE ) +end + +function MessageToRed( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "To Red Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) +end + +function MessageToBlue( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "To Blue Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) +end + +function getCarrierHeight( CarrierGroup ) +--trace.f() + + if CarrierGroup ~= nil then + if table.getn(CarrierGroup:getUnits()) == 1 then + local CarrierUnit = CarrierGroup:getUnits()[1] + local CurrentPoint = CarrierUnit:getPoint() + + local CurrentPosition = { x = CurrentPoint.x, y = CurrentPoint.z } + local CarrierHeight = CurrentPoint.y + + local LandHeight = land.getHeight( CurrentPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + return CarrierHeight - LandHeight + else + return 999999 + end + else + return 999999 + end + +end + +function GetUnitHeight( CheckUnit ) +--trace.f() + + local UnitPoint = CheckUnit:getPoint() + local UnitPosition = { x = CurrentPoint.x, y = CurrentPoint.z } + local UnitHeight = CurrentPoint.y + + local LandHeight = land.getHeight( CurrentPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + return UnitHeight - LandHeight + +end + + +_MusicTable = {} +_MusicTable.Files = {} +_MusicTable.Queue = {} +_MusicTable.FileCnt = 0 + + +function MusicRegister( SndRef, SndFile, SndTime ) +--trace.f() + + env.info(( 'MusicRegister: SndRef = ' .. SndRef )) + env.info(( 'MusicRegister: SndFile = ' .. SndFile )) + env.info(( 'MusicRegister: SndTime = ' .. SndTime )) + + + _MusicTable.FileCnt = _MusicTable.FileCnt + 1 + + _MusicTable.Files[_MusicTable.FileCnt] = {} + _MusicTable.Files[_MusicTable.FileCnt].Ref = SndRef + _MusicTable.Files[_MusicTable.FileCnt].File = SndFile + _MusicTable.Files[_MusicTable.FileCnt].Time = SndTime + + if not _MusicTable.Function then + _MusicTable.Function = routines.scheduleFunction( MusicScheduler, { }, timer.getTime() + 10, 10) + end + +end + +function MusicToPlayer( SndRef, PlayerName, SndContinue ) +--trace.f() + + --env.info(( 'MusicToPlayer: SndRef = ' .. SndRef )) + + local PlayerUnits = AlivePlayerUnits() + for PlayerUnitIdx, PlayerUnit in pairs(PlayerUnits) do + local PlayerUnitName = PlayerUnit:getPlayerName() + --env.info(( 'MusicToPlayer: PlayerUnitName = ' .. PlayerUnitName )) + if PlayerName == PlayerUnitName then + PlayerGroup = PlayerUnit:getGroup() + if PlayerGroup then + --env.info(( 'MusicToPlayer: PlayerGroup = ' .. PlayerGroup:getName() )) + MusicToGroup( SndRef, PlayerGroup, SndContinue ) + end + break + end + end + + --env.info(( 'MusicToPlayer: end' )) + +end + +function MusicToGroup( SndRef, SndGroup, SndContinue ) +--trace.f() + + --env.info(( 'MusicToGroup: SndRef = ' .. SndRef )) + + if SndGroup ~= nil then + if _MusicTable and _MusicTable.FileCnt > 0 then + if SndGroup:isExist() then + if MusicCanStart(SndGroup:getUnit(1):getPlayerName()) then + --env.info(( 'MusicToGroup: OK for Sound.' )) + local SndIdx = 0 + if SndRef == '' then + --env.info(( 'MusicToGroup: SndRef as empty. Queueing at random.' )) + SndIdx = math.random( 1, _MusicTable.FileCnt ) + else + for SndIdx = 1, _MusicTable.FileCnt do + if _MusicTable.Files[SndIdx].Ref == SndRef then + break + end + end + end + --env.info(( 'MusicToGroup: SndIdx = ' .. SndIdx )) + --env.info(( 'MusicToGroup: Queueing Music ' .. _MusicTable.Files[SndIdx].File .. ' for Group ' .. SndGroup:getID() )) + trigger.action.outSoundForGroup( SndGroup:getID(), _MusicTable.Files[SndIdx].File ) + MessageToGroup( SndGroup, 'Playing ' .. _MusicTable.Files[SndIdx].File, 15, 'Music-' .. SndGroup:getUnit(1):getPlayerName() ) + + local SndQueueRef = SndGroup:getUnit(1):getPlayerName() + if _MusicTable.Queue[SndQueueRef] == nil then + _MusicTable.Queue[SndQueueRef] = {} + end + _MusicTable.Queue[SndQueueRef].Start = timer.getTime() + _MusicTable.Queue[SndQueueRef].PlayerName = SndGroup:getUnit(1):getPlayerName() + _MusicTable.Queue[SndQueueRef].Group = SndGroup + _MusicTable.Queue[SndQueueRef].ID = SndGroup:getID() + _MusicTable.Queue[SndQueueRef].Ref = SndIdx + _MusicTable.Queue[SndQueueRef].Continue = SndContinue + _MusicTable.Queue[SndQueueRef].Type = Group + end + end + end + end +end + +function MusicCanStart(PlayerName) +--trace.f() + + --env.info(( 'MusicCanStart:' )) + + local MusicOut = false + + if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then + --env.info(( 'MusicCanStart: PlayerName = ' .. PlayerName )) + local PlayerFound = false + local MusicStart = 0 + local MusicTime = 0 + for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do + if SndQueue.PlayerName == PlayerName then + PlayerFound = true + MusicStart = SndQueue.Start + MusicTime = _MusicTable.Files[SndQueue.Ref].Time + break + end + end + if PlayerFound then + --env.info(( 'MusicCanStart: MusicStart = ' .. MusicStart )) + --env.info(( 'MusicCanStart: MusicTime = ' .. MusicTime )) + --env.info(( 'MusicCanStart: timer.getTime() = ' .. timer.getTime() )) + + if MusicStart + MusicTime <= timer.getTime() then + MusicOut = true + end + else + MusicOut = true + end + end + + if MusicOut then + --env.info(( 'MusicCanStart: true' )) + else + --env.info(( 'MusicCanStart: false' )) + end + + return MusicOut +end + +function MusicScheduler() +--trace.scheduled("", "MusicScheduler") + + --env.info(( 'MusicScheduler:' )) + if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then + --env.info(( 'MusicScheduler: Walking Sound Queue.')) + for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do + if SndQueue.Continue then + if MusicCanStart(SndQueue.PlayerName) then + --env.info(('MusicScheduler: MusicToGroup')) + MusicToPlayer( '', SndQueue.PlayerName, true ) + end + end + end + end + +end + + +env.info(( 'Init: Scripts Loaded v1.1' )) + +--- BASE classes. +-- +-- @{#BASE} class +-- ============== +-- The @{#BASE} class is the super class for most of the classes defined within MOOSE. +-- +-- It handles: +-- +-- * The construction and inheritance of child classes. +-- * The tracing of objects during mission execution within the DCS.log file (under saved games folder). +-- +-- Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes. +-- +-- BASE Trace functionality +-- ======================== +-- The BASE class contains trace methods to trace progress within a mission execution of a certain object. +-- Note that these trace methods are inherited by each MOOSE class interiting BASE. +-- As such, each object created from derived class from BASE can use the tracing functions to trace its execution. +-- +-- Trace a function call +-- --------------------- +-- There are basically 3 types of tracing methods available within BASE: +-- +-- * @{#BASE.F}: Trace the beginning of a function and its given parameters. +-- * @{#BASE.T}: Trace further logic within a function giving optional variables or parameters. +-- * @{#BASE.E}: Trace an execption within a function giving optional variables or parameters. An exception will always be traced. +-- +-- Tracing levels +-- -------------- +-- There are 3 tracing levels within MOOSE. +-- These tracing levels were defined to avoid bulks of tracing to be generated by lots of objects. +-- +-- As such, the F and T methods have additional variants to trace level 2 and 3 respectively: +-- +-- * @{#BASE.F2}: Trace the beginning of a function and its given parameters with tracing level 2. +-- * @{#BASE.F3}: Trace the beginning of a function and its given parameters with tracing level 3. +-- * @{#BASE.T2}: Trace further logic within a function giving optional variables or parameters with tracing level 2. +-- * @{#BASE.T3}: Trace further logic within a function giving optional variables or parameters with tracing level 3. +-- +-- BASE Inheritance support +-- ======================== +-- The following methods are available to support inheritance: +-- +-- * @{#BASE.Inherit}: Inherits from a class. +-- * @{#BASE.Inherited}: Returns the parent class from the class. +-- +-- Future +-- ====== +-- Further methods may be added to BASE whenever there is a need to make "overall" functions available within MOOSE. +-- +-- ==== +-- +-- @module Base +-- @author FlightControl + +Include.File( "Routines" ) + +local _TraceOn = true +local _TraceLevel = 1 +local _TraceClass = { + --DATABASE = true, + --SEAD = true, + --DESTROYBASETASK = true, + --MOVEMENT = true, + --SPAWN = true, + --STAGE = true, + --ZONE = true, + --GROUP = true, + --UNIT = true, + --CLIENT = true, + --CARGO = true, + --CARGO_GROUP = true, + --CARGO_PACKAGE = true, + --CARGO_SLINGLOAD = true, + --CARGO_ZONE = true, + --CLEANUP = true, + --MENU_CLIENT = true, + --MENU_CLIENT_COMMAND = true, + --ESCORT = true, + } +local _TraceClassMethod = {} + +--- The BASE Class +-- @type BASE +-- @field ClassName The name of the class. +-- @field ClassID The ID number of the class. +BASE = { + ClassName = "BASE", + ClassID = 0, + Events = {} +} + +--- The Formation Class +-- @type FORMATION +-- @field Cone A cone formation. +FORMATION = { + Cone = "Cone" +} + + + +--- The base constructor. This is the top top class of all classed defined within the MOOSE. +-- Any new class needs to be derived from this class for proper inheritance. +-- @param #BASE self +-- @return #BASE The new instance of the BASE class. +-- @usage +-- function TASK:New() +-- +-- local self = BASE:Inherit( self, BASE:New() ) +-- +-- -- assign Task default values during construction +-- self.TaskBriefing = "Task: No Task." +-- self.Time = timer.getTime() +-- self.ExecuteStage = _TransportExecuteStage.NONE +-- +-- return self +-- end +-- @todo need to investigate if the deepCopy is really needed... Don't think so. +function BASE:New() + local Child = routines.utils.deepCopy( self ) + local Parent = {} + setmetatable( Child, Parent ) + Child.__index = Child + self.ClassID = self.ClassID + 1 + Child.ClassID = self.ClassID + --Child.AddEvent( Child, S_EVENT_BIRTH, Child.EventBirth ) + return Child +end + +--- This is the worker method to inherit from a parent class. +-- @param #BASE self +-- @param Child is the Child class that inherits. +-- @param #BASE Parent is the Parent class that the Child inherits from. +-- @return #BASE Child +function BASE:Inherit( Child, Parent ) + local Child = routines.utils.deepCopy( Child ) + local Parent = routines.utils.deepCopy( Parent ) + if Child ~= nil then + setmetatable( Child, Parent ) + Child.__index = Child + end + --Child.ClassName = Child.ClassName .. '.' .. Child.ClassID + self:T( 'Inherited from ' .. Parent.ClassName ) + return Child +end + +--- This is the worker method to retrieve the Parent class. +-- @param #BASE self +-- @param #BASE Child is the Child class from which the Parent class needs to be retrieved. +-- @return #BASE +function BASE:Inherited( Child ) + local Parent = getmetatable( Child ) +-- env.info('Inherited class of ' .. Child.ClassName .. ' is ' .. Parent.ClassName ) + return Parent +end + +--- Get the ClassName + ClassID of the class instance. +-- The ClassName + ClassID is formatted as '%s#%09d'. +-- @param #BASE self +-- @return #string The ClassName + ClassID of the class instance. +function BASE:GetClassNameAndID() + return string.format( '%s#%09d', self:GetClassName(), self:GetClassID() ) +end + +--- Get the ClassName of the class instance. +-- @param #BASE self +-- @return #string The ClassName of the class instance. +function BASE:GetClassName() + return self.ClassName +end + +--- Get the ClassID of the class instance. +-- @param #BASE self +-- @return #string The ClassID of the class instance. +function BASE:GetClassID() + return self.ClassID +end + +--- Set a new listener for the class. +-- @param self +-- @param DCSTypes#Event Event +-- @param #function EventFunction +-- @return #BASE +function BASE:AddEvent( Event, EventFunction ) + self:F( Event ) + + self.Events[#self.Events+1] = {} + self.Events[#self.Events].Event = Event + self.Events[#self.Events].EventFunction = EventFunction + self.Events[#self.Events].EventEnabled = false + + return self +end + +--- Returns the event dispatcher +-- @param #BASE self +-- @return Event#EVENT +function BASE:Event() + + return _EVENTDISPATCHER +end + + + + + +--- Enable the event listeners for the class. +-- @param #BASE self +-- @return #BASE +function BASE:EnableEvents() + self:F( #self.Events ) + + for EventID, Event in pairs( self.Events ) do + Event.Self = self + Event.EventEnabled = true + end + self.Events.Handler = world.addEventHandler( self ) + + return self +end + + +--- Disable the event listeners for the class. +-- @param #BASE self +-- @return #BASE +function BASE:DisableEvents() + self:F() + + world.removeEventHandler( self ) + for EventID, Event in pairs( self.Events ) do + Event.Self = nil + Event.EventEnabled = false + end + + return self +end + + +local BaseEventCodes = { + "S_EVENT_SHOT", + "S_EVENT_HIT", + "S_EVENT_TAKEOFF", + "S_EVENT_LAND", + "S_EVENT_CRASH", + "S_EVENT_EJECTION", + "S_EVENT_REFUELING", + "S_EVENT_DEAD", + "S_EVENT_PILOT_DEAD", + "S_EVENT_BASE_CAPTURED", + "S_EVENT_MISSION_START", + "S_EVENT_MISSION_END", + "S_EVENT_TOOK_CONTROL", + "S_EVENT_REFUELING_STOP", + "S_EVENT_BIRTH", + "S_EVENT_HUMAN_FAILURE", + "S_EVENT_ENGINE_STARTUP", + "S_EVENT_ENGINE_SHUTDOWN", + "S_EVENT_PLAYER_ENTER_UNIT", + "S_EVENT_PLAYER_LEAVE_UNIT", + "S_EVENT_PLAYER_COMMENT", + "S_EVENT_SHOOTING_START", + "S_EVENT_SHOOTING_END", + "S_EVENT_MAX", +} + +--onEvent( {[1]="S_EVENT_BIRTH",[2]={["subPlace"]=5,["time"]=0,["initiator"]={["id_"]=16884480,},["place"]={["id_"]=5000040,},["id"]=15,["IniUnitName"]="US F-15C@RAMP-Air Support Mountains#001-01",},} +-- Event = { +-- id = enum world.event, +-- time = Time, +-- initiator = Unit, +-- target = Unit, +-- place = Unit, +-- subPlace = enum world.BirthPlace, +-- weapon = Weapon +-- } + +--- Creation of a Birth Event. +-- @param #BASE self +-- @param DCSTypes#Time EventTime The time stamp of the event. +-- @param DCSObject#Object Initiator The initiating object of the event. +-- @param #string IniUnitName The initiating unit name. +-- @param place +-- @param subplace +function BASE:CreateEventBirth( EventTime, Initiator, IniUnitName, place, subplace ) + self:F( { EventTime, Initiator, IniUnitName, place, subplace } ) + + local Event = { + id = world.event.S_EVENT_BIRTH, + time = EventTime, + initiator = Initiator, + IniUnitName = IniUnitName, + place = place, + subplace = subplace + } + + world.onEvent( Event ) +end + +--- Creation of a Crash Event. +-- @param #BASE self +-- @param DCSTypes#Time EventTime The time stamp of the event. +-- @param DCSObject#Object Initiator The initiating object of the event. +function BASE:CreateEventCrash( EventTime, Initiator ) + self:F( { EventTime, Initiator } ) + + local Event = { + id = world.event.S_EVENT_CRASH, + time = EventTime, + initiator = Initiator, + } + + world.onEvent( Event ) +end + +-- TODO: Complete DCSTypes#Event structure. +--- The main event handling function... This function captures all events generated for the class. +-- @param #BASE self +-- @param DCSTypes#Event event +function BASE:onEvent(event) + --self:F( { BaseEventCodes[event.id], event } ) + + if self then + for EventID, EventObject in pairs( self.Events ) do + if EventObject.EventEnabled then + --env.info( 'onEvent Table EventObject.Self = ' .. tostring(EventObject.Self) ) + --env.info( 'onEvent event.id = ' .. tostring(event.id) ) + --env.info( 'onEvent EventObject.Event = ' .. tostring(EventObject.Event) ) + if event.id == EventObject.Event then + if self == EventObject.Self then + if event.initiator and event.initiator:isExist() then + event.IniUnitName = event.initiator:getName() + end + if event.target and event.target:isExist() then + event.TgtUnitName = event.target:getName() + end + --self:T( { BaseEventCodes[event.id], event } ) + --EventObject.EventFunction( self, event ) + end + end + end + end + end +end + +-- Trace section + +-- Log a trace (only shown when trace is on) +-- TODO: Make trace function using variable parameters. + +--- Set trace level +-- @param #BASE self +-- @param #number Level +function BASE:TraceLevel( Level ) + _TraceLevel = Level + self:E( "Tracing level " .. Level ) +end + +--- Set tracing for a class +-- @param #BASE self +-- @param #string Class +function BASE:TraceClass( Class ) + _TraceClass[Class] = true + _TraceClassMethod[Class] = {} + self:E( "Tracing class " .. Class ) +end + +--- Set tracing for a specific method of class +-- @param #BASE self +-- @param #string Class +-- @param #string Method +function BASE:TraceClassMethod( Class, Method ) + if not _TraceClassMethod[Class] then + _TraceClassMethod[Class] = {} + _TraceClassMethod[Class].Method = {} + end + _TraceClassMethod[Class].Method[Method] = true + self:E( "Tracing method " .. Method .. " of class " .. Class ) +end + +--- Trace a function call. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F( Arguments ) + + if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = 0 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "F", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) + end + end +end + +--- Trace a function call level 2. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F2( Arguments ) + + if _TraceLevel >= 2 then + self:F( Arguments ) + end + +end + +--- Trace a function call level 3. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F3( Arguments ) + + if _TraceLevel >= 3 then + self:F( Arguments ) + end + +end + +--- Trace a function logic. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T( Arguments ) + + if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = 0 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s" , LineCurrent, LineFrom, "T", self.ClassName, self.ClassID, routines.utils.oneLineSerialize( Arguments ) ) ) + end + end +end + +--- Trace a function logic level 2. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T2( Arguments ) + + if _TraceLevel >= 2 then + self:T( Arguments ) + end + +end + +--- Trace a function logic level 3. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T3( Arguments ) + + if _TraceLevel >= 3 then + self:T( Arguments ) + end + +end + +--- Log an exception which will be traced always. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:E( Arguments ) + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = -1 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "E", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) +end + + + +--- Models time events calling event handing functions. +-- +-- @{SCHEDULER} class +-- =================== +-- The @{SCHEDULER} class models time events calling given event handling functions. +-- +-- SCHEDULER constructor +-- ===================== +-- The SCHEDULER class is quite easy to use: +-- +-- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. +-- +-- SCHEDULER timer methods +-- ======================= +-- The SCHEDULER can be stopped and restarted with the following methods: +-- +-- * @{#SCHEDULER.Start}: (Re-)Start the scheduler. +-- * @{#SCHEDULER.Start}: Stop the scheduler. +-- +-- @module Scheduler +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) + + +--- The SCHEDULER class +-- @type SCHEDULER +-- @extends Base#BASE +SCHEDULER = { + ClassName = "SCHEDULER", +} + + +--- Constructor. +-- @param #SCHEDULER self +-- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. +-- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. +-- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. +-- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. +-- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. +-- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. +-- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. +-- @return #SCHEDULER self +function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( { TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) + + self.TimeEventObject = TimeEventObject + self.TimeEventFunction = TimeEventFunction + self.TimeEventFunctionArguments = TimeEventFunctionArguments + self.StartSeconds = StartSeconds + + if RepeatSecondsInterval then + self.RepeatSecondsInterval = RepeatSecondsInterval + else + self.RepeatSecondsInterval = 0 + end + + if RandomizationFactor then + self.RandomizationFactor = RandomizationFactor + else + self.RandomizationFactor = 0 + end + + if StopSeconds then + self.StopSeconds = StopSeconds + end + + self.Repeat = false + + self.StartTime = timer.getTime() + + self:Start() + + return self +end + +--- (Re-)Starts the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Start() + self:F2( self.TimeEventObject ) + + self.Repeat = true + timer.scheduleFunction( self._Scheduler, self, timer.getTime() + self.StartSeconds + .01 ) + + return self +end + +--- Stops the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Stop() + self:F2( self.TimeEventObject ) + + self.Repeat = false + + return self +end + +-- Private Functions + +function SCHEDULER:_Scheduler() + self:F2( self.TimeEventFunctionArguments ) + + local ErrorHandler = function( errmsg ) + + env.info( "Error in SCHEDULER function:" .. errmsg ) + env.info( debug.traceback() ) + + return errmsg + end + + local Status, Result + if self.TimeEventObject then + Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + else + Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + end + + self:T( { Status, Result } ) + + if Status and ( ( not Result ) or ( Result and Result ~= false ) ) then + if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then + timer.scheduleFunction( + self._Scheduler, + self, + timer.getTime() + self.RepeatSecondsInterval + math.random( - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) ) + 0.01 + ) + end + end + +end + + + + + + + + +--- The EVENT class models an efficient event handling process between other classes and its units, weapons. +-- @module Event +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) + +--- The EVENT structure +-- @type EVENT +-- @field #EVENT.Events Events +EVENT = { + ClassName = "EVENT", + ClassID = 0, +} + +local _EVENTCODES = { + "S_EVENT_SHOT", + "S_EVENT_HIT", + "S_EVENT_TAKEOFF", + "S_EVENT_LAND", + "S_EVENT_CRASH", + "S_EVENT_EJECTION", + "S_EVENT_REFUELING", + "S_EVENT_DEAD", + "S_EVENT_PILOT_DEAD", + "S_EVENT_BASE_CAPTURED", + "S_EVENT_MISSION_START", + "S_EVENT_MISSION_END", + "S_EVENT_TOOK_CONTROL", + "S_EVENT_REFUELING_STOP", + "S_EVENT_BIRTH", + "S_EVENT_HUMAN_FAILURE", + "S_EVENT_ENGINE_STARTUP", + "S_EVENT_ENGINE_SHUTDOWN", + "S_EVENT_PLAYER_ENTER_UNIT", + "S_EVENT_PLAYER_LEAVE_UNIT", + "S_EVENT_PLAYER_COMMENT", + "S_EVENT_SHOOTING_START", + "S_EVENT_SHOOTING_END", + "S_EVENT_MAX", +} + +--- The Event structure +-- @type EVENTDATA +-- @field id +-- @field initiator +-- @field target +-- @field weapon +-- @field IniDCSUnit +-- @field IniDCSUnitName +-- @field IniDCSGroup +-- @field IniDCSGroupName +-- @field TgtDCSUnit +-- @field TgtDCSUnitName +-- @field TgtDCSGroup +-- @field TgtDCSGroupName +-- @field Weapon +-- @field WeaponName +-- @field WeaponTgtDCSUnit + +--- The Events structure +-- @type EVENT.Events +-- @field #number IniUnit + +function EVENT:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F2() + self.EventHandler = world.addEventHandler( self ) + return self +end + +function EVENT:EventText( EventID ) + + local EventText = _EVENTCODES[EventID] + + return EventText +end + + +--- Initializes the Events structure for the event +-- @param #EVENT self +-- @param DCSWorld#world.event EventID +-- @param #string EventClass +-- @return #EVENT.Events +function EVENT:Init( EventID, EventClass ) + self:F3( { _EVENTCODES[EventID], EventClass } ) + if not self.Events[EventID] then + self.Events[EventID] = {} + end + if not self.Events[EventID][EventClass] then + self.Events[EventID][EventClass] = {} + end + return self.Events[EventID][EventClass] +end + + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @param #function OnEventFunction +-- @return #EVENT +function EVENT:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, OnEventFunction ) + self:F2( EventTemplate.name ) + + for EventUnitID, EventUnit in pairs( EventTemplate.units ) do + OnEventFunction( self, EventUnit.name, EventFunction, EventSelf ) + end + return self +end + +--- Set a new listener for an S_EVENT_X event independent from a unit or a weapon. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @param EventID +-- @return #EVENT +function EVENT:OnEventGeneric( EventFunction, EventSelf, EventID ) + self:F2( { EventID } ) + + local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) + Event.EventFunction = EventFunction + Event.EventSelf = EventSelf + return self +end + + +--- Set a new listener for an S_EVENT_X event +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @param EventID +-- @return #EVENT +function EVENT:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, EventID ) + self:F2( EventDCSUnitName ) + + local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) + if not Event.IniUnit then + Event.IniUnit = {} + end + Event.IniUnit[EventDCSUnitName] = {} + Event.IniUnit[EventDCSUnitName].EventFunction = EventFunction + Event.IniUnit[EventDCSUnitName].EventSelf = EventSelf + return self +end + + +--- Create an OnBirth event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnBirthForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnBirthForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_BIRTH event, and registers the unit born. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnBirth( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) + + return self +end + +--- Set a new listener for an S_EVENT_BIRTH event. +-- @param #EVENT self +-- @param #string EventDCSUnitName The id of the unit for the event to be handled. +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnBirthForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) + + return self +end + +--- Create an OnCrash event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnCrashForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnCrashForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_CRASH event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnCrash( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_CRASH ) + + return self +end + +--- Set a new listener for an S_EVENT_CRASH event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnCrashForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_CRASH ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnDeadForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnDeadForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_DEAD event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnDead( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_DEAD ) + + return self +end + + +--- Set a new listener for an S_EVENT_DEAD event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_DEAD ) + + return self +end + +--- Set a new listener for an S_EVENT_PILOT_DEAD event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPilotDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_PILOT_DEAD ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnLandForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnLandForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_LAND event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnLandForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_LAND ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnTakeOffForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnTakeOffForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_TAKEOFF event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnTakeOffForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_TAKEOFF ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineShutDownForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnEngineShutDownForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_ENGINE_SHUTDOWN event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineShutDownForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_SHUTDOWN ) + + return self +end + +--- Set a new listener for an S_EVENT_ENGINE_STARTUP event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineStartUpForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_STARTUP ) + + return self +end + +--- Set a new listener for an S_EVENT_SHOT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnShot( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_SHOT ) + + return self +end + +--- Set a new listener for an S_EVENT_SHOT event for a unit. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnShotForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_SHOT ) + + return self +end + +--- Set a new listener for an S_EVENT_HIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnHit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_HIT ) + + return self +end + +--- Set a new listener for an S_EVENT_HIT event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnHitForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_HIT ) + + return self +end + +--- Set a new listener for an S_EVENT_PLAYER_ENTER_UNIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPlayerEnterUnit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_ENTER_UNIT ) + + return self +end + +--- Set a new listener for an S_EVENT_PLAYER_LEAVE_UNIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPlayerLeaveUnit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_LEAVE_UNIT ) + + return self +end + + + +function EVENT:onEvent( Event ) + self:F2( { _EVENTCODES[Event.id], Event } ) + + if self and self.Events and self.Events[Event.id] then + if Event.initiator and Event.initiator:getCategory() == Object.Category.UNIT then + Event.IniDCSUnit = Event.initiator + Event.IniDCSGroup = Event.IniDCSUnit:getGroup() + Event.IniDCSUnitName = Event.IniDCSUnit:getName() + Event.IniDCSGroupName = "" + if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then + Event.IniDCSGroupName = Event.IniDCSGroup:getName() + end + end + if Event.target then + if Event.target and Event.target:getCategory() == Object.Category.UNIT then + Event.TgtDCSUnit = Event.target + Event.TgtDCSGroup = Event.TgtDCSUnit:getGroup() + Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() + Event.TgtDCSGroupName = "" + if Event.TgtDCSGroup and Event.TgtDCSGroup:isExist() then + Event.TgtDCSGroupName = Event.TgtDCSGroup:getName() + end + end + end + if Event.weapon then + Event.Weapon = Event.weapon + Event.WeaponName = Event.Weapon:getTypeName() + --Event.WeaponTgtDCSUnit = Event.Weapon:getTarget() + end + self:E( { _EVENTCODES[Event.id], Event } ) + for ClassName, EventData in pairs( self.Events[Event.id] ) do + if Event.IniDCSUnitName and EventData.IniUnit and EventData.IniUnit[Event.IniDCSUnitName] then + self:T2( { "Calling event function for class ", ClassName, " unit ", Event.IniDCSUnitName } ) + EventData.IniUnit[Event.IniDCSUnitName].EventFunction( EventData.IniUnit[Event.IniDCSUnitName].EventSelf, Event ) + else + if Event.IniDCSUnit and not EventData.IniUnit then + self:T2( { "Calling event function for class ", ClassName } ) + EventData.EventFunction( EventData.EventSelf, Event ) + end + end + end + end +end + +--- Encapsulation of DCS World Menu system in a set of MENU classes. +-- @module Menu + +Include.File( "Routines" ) +Include.File( "Base" ) + +--- The MENU class +-- @type MENU +-- @extends Base#BASE +MENU = { + ClassName = "MENU", + MenuPath = nil, + MenuText = "", + MenuParentPath = nil +} + +--- +function MENU:New( MenuText, MenuParentPath ) + + -- Arrange meta tables + local Child = BASE:Inherit( self, BASE:New() ) + + Child.MenuPath = nil + Child.MenuText = MenuText + Child.MenuParentPath = MenuParentPath + return Child +end + +--- The COMMANDMENU class +-- @type COMMANDMENU +-- @extends Menu#MENU +COMMANDMENU = { + ClassName = "COMMANDMENU", + CommandMenuFunction = nil, + CommandMenuArgument = nil +} + +function COMMANDMENU:New( MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = nil + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + Child.MenuPath = missionCommands.addCommand( MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + Child.CommandMenuFunction = CommandMenuFunction + Child.CommandMenuArgument = CommandMenuArgument + return Child +end + +--- The SUBMENU class +-- @type SUBMENU +-- @extends Menu#MENU +SUBMENU = { + ClassName = "SUBMENU" +} + +function SUBMENU:New( MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = nil + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + Child.MenuPath = missionCommands.addSubMenu( MenuText, MenuParentPath ) + return Child +end + +-- This local variable is used to cache the menus registered under clients. +-- Menus don't dissapear when clients are destroyed and restarted. +-- So every menu for a client created must be tracked so that program logic accidentally does not create +-- the same menus twice during initialization logic. +-- These menu classes are handling this logic with this variable. +local _MENUCLIENTS = {} + +--- The MENU_CLIENT class +-- @type MENU_CLIENT +-- @extends Menu#MENU +MENU_CLIENT = { + ClassName = "MENU_CLIENT" +} + +--- Creates a new menu item for a group +-- @param self +-- @param Client#CLIENT MenuClient The Client owning the menu. +-- @param #string MenuText The text for the menu. +-- @param #table ParentMenu The parent menu. +-- @return #MENU_CLIENT self +function MENU_CLIENT:New( MenuClient, MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + self:F( { MenuClient, MenuText, ParentMenu } ) + + self.MenuClient = MenuClient + self.MenuClientGroupID = MenuClient:GetClientGroupID() + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self.Menus = {} + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText } ) + + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) + end + + self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath ) + MenuPath[MenuPathID] = self.MenuPath + + self:T( { MenuClient:GetClientGroupName(), self.MenuPath } ) + + if ParentMenu and ParentMenu.Menus then + ParentMenu.Menus[self.MenuPath] = self + end + return self +end + +--- Removes the sub menus recursively of this MENU_CLIENT. +-- @param #MENU_CLIENT self +-- @return #MENU_CLIENT self +function MENU_CLIENT:RemoveSubMenus() + self:F( self.MenuPath ) + + for MenuID, Menu in pairs( self.Menus ) do + Menu:Remove() + end + +end + +--- Removes the sub menus recursively of this MENU_CLIENT. +-- @param #MENU_CLIENT self +-- @return #MENU_CLIENT self +function MENU_CLIENT:Remove() + self:F( self.MenuPath ) + + self:RemoveSubMenus() + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then + MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil + end + + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end + + +--- The MENU_CLIENT_COMMAND class +-- @type MENU_CLIENT_COMMAND +-- @extends Menu#MENU +MENU_CLIENT_COMMAND = { + ClassName = "MENU_CLIENT_COMMAND" +} + +--- Creates a new radio command item for a group +-- @param self +-- @param Client#CLIENT MenuClient The Client owning the menu. +-- @param MenuText The text for the menu. +-- @param ParentMenu The parent menu. +-- @param CommandMenuFunction A function that is called when the menu key is pressed. +-- @param CommandMenuArgument An argument for the function. +-- @return Menu#MENU_CLIENT_COMMAND self +function MENU_CLIENT_COMMAND:New( MenuClient, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + self.MenuClient = MenuClient + self.MenuClientGroupID = MenuClient:GetClientGroupID() + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) + + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) + end + + self.MenuPath = missionCommands.addCommandForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + MenuPath[MenuPathID] = self.MenuPath + + self.CommandMenuFunction = CommandMenuFunction + self.CommandMenuArgument = CommandMenuArgument + + ParentMenu.Menus[self.MenuPath] = self + + return self +end + +function MENU_CLIENT_COMMAND:Remove() + self:F( self.MenuPath ) + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then + MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil + end + + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end + + +--- The MENU_COALITION class +-- @type MENU_COALITION +-- @extends Menu#MENU +MENU_COALITION = { + ClassName = "MENU_COALITION" +} + +--- Creates a new coalition menu item +-- @param #MENU_COALITION self +-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. +-- @param #string MenuText The text for the menu. +-- @param #table ParentMenu The parent menu. +-- @return #MENU_COALITION self +function MENU_COALITION:New( MenuCoalition, MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + self:F( { MenuCoalition, MenuText, ParentMenu } ) + + self.MenuCoalition = MenuCoalition + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self.Menus = {} + + self:T( { MenuParentPath, MenuText } ) + + self.MenuPath = missionCommands.addSubMenuForCoalition( self.MenuCoalition, MenuText, MenuParentPath ) + + self:T( { self.MenuPath } ) + + if ParentMenu and ParentMenu.Menus then + ParentMenu.Menus[self.MenuPath] = self + end + return self +end + +--- Removes the sub menus recursively of this MENU_COALITION. +-- @param #MENU_COALITION self +-- @return #MENU_COALITION self +function MENU_COALITION:RemoveSubMenus() + self:F( self.MenuPath ) + + for MenuID, Menu in pairs( self.Menus ) do + Menu:Remove() + end + +end + +--- Removes the sub menus recursively of this MENU_COALITION. +-- @param #MENU_COALITION self +-- @return #MENU_COALITION self +function MENU_COALITION:Remove() + self:F( self.MenuPath ) + + self:RemoveSubMenus() + missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + + return nil +end + + +--- The MENU_COALITION_COMMAND class +-- @type MENU_COALITION_COMMAND +-- @extends Menu#MENU +MENU_COALITION_COMMAND = { + ClassName = "MENU_COALITION_COMMAND" +} + +--- Creates a new radio command item for a group +-- @param #MENU_COALITION_COMMAND self +-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. +-- @param MenuText The text for the menu. +-- @param ParentMenu The parent menu. +-- @param CommandMenuFunction A function that is called when the menu key is pressed. +-- @param CommandMenuArgument An argument for the function. +-- @return #MENU_COALITION_COMMAND self +function MENU_COALITION_COMMAND:New( MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + self.MenuCoalition = MenuCoalition + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self:T( { MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) + + self.MenuPath = missionCommands.addCommandForCoalition( self.MenuCoalition, MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + + self.CommandMenuFunction = CommandMenuFunction + self.CommandMenuArgument = CommandMenuArgument + + ParentMenu.Menus[self.MenuPath] = self + + return self +end + +--- Removes a radio command item for a coalition +-- @param #MENU_COALITION_COMMAND self +-- @return #MENU_COALITION_COMMAND self +function MENU_COALITION_COMMAND:Remove() + self:F( self.MenuPath ) + + missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end +--- GROUP class. +-- +-- @{GROUP} class +-- ============== +-- The @{GROUP} class is a wrapper class to handle the DCS Group objects: +-- +-- * Support all DCS Group APIs. +-- * Enhance with Group specific APIs not in the DCS Group API set. +-- * Handle local Group Controller. +-- * Manage the "state" of the DCS Group. +-- +-- +-- GROUP reference methods +-- ======================= +-- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). +-- +-- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the DCS Group or the DCS GroupName. +-- +-- Another thing to know is that GROUP objects do not "contain" the DCS Group object. +-- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. +-- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. +-- +-- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: +-- +-- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. +-- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). +-- @module Group +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) +Include.File( "Unit" ) + +--- The GROUP class +-- @type GROUP +-- @extends Base#BASE +-- @field DCSGroup#Group DCSGroup The DCS group class. +-- @field #string GroupName The name of the group. +GROUP = { + ClassName = "GROUP", + GroupName = "", + GroupID = 0, + Controller = nil, + DCSGroup = nil, + WayPointFunctions = {}, +} + +--- A DCSGroup +-- @type DCSGroup +-- @field id_ The ID of the group in DCS + +--- Create a new GROUP from a DCSGroup +-- @param #GROUP self +-- @param DCSGroup#Group GroupName The DCS Group name +-- @return #GROUP self +function GROUP:Register( GroupName ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( GroupName ) + self.GroupName = GroupName + return self +end + +-- Reference methods. + +--- Find the GROUP wrapper class instance using the DCS Group. +-- @param #GROUP self +-- @param DCSGroup#Group DCSGroup The DCS Group. +-- @return #GROUP The GROUP. +function GROUP:Find( DCSGroup ) + + local GroupName = DCSGroup:getName() -- Group#GROUP + local GroupFound = _DATABASE:FindGroup( GroupName ) + return GroupFound +end + +--- Find the created GROUP using the DCS Group Name. +-- @param #GROUP self +-- @param #string GroupName The DCS Group Name. +-- @return #GROUP The GROUP. +function GROUP:FindByName( GroupName ) + + local GroupFound = _DATABASE:FindGroup( GroupName ) + return GroupFound +end + +-- DCS Group methods support. + +--- Returns the DCS Group. +-- @param #GROUP self +-- @return DCSGroup#Group The DCS Group. +function GROUP:GetDCSGroup() + local DCSGroup = Group.getByName( self.GroupName ) + + if DCSGroup then + return DCSGroup + end + + return nil +end + + +--- Returns if the DCS Group is alive. +-- When the group exists at run-time, this method will return true, otherwise false. +-- @param #GROUP self +-- @return #boolean true if the DCS Group is alive. +function GROUP:IsAlive() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupIsAlive = DCSGroup:isExist() + self:T3( GroupIsAlive ) + return GroupIsAlive + end + + return nil +end + +--- Destroys the DCS Group and all of its DCS Units. +-- Note that this destroy method also raises a destroy event at run-time. +-- So all event listeners will catch the destroy event of this DCS Group. +-- @param #GROUP self +function GROUP:Destroy() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + self:CreateEventCrash( timer.getTime(), UnitData ) + end + DCSGroup:destroy() + DCSGroup = nil + end + + return nil +end + +--- Returns category of the DCS Group. +-- @param #GROUP self +-- @return DCSGroup#Group.Category The category ID +function GROUP:GetCategory() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T3( GroupCategory ) + return GroupCategory + end + + return nil +end + +--- Returns the category name of the DCS Group. +-- @param #GROUP self +-- @return #string Category name = Helicopter, Airplane, Ground Unit, Ship +function GROUP:GetCategoryName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local CategoryNames = { + [Group.Category.AIRPLANE] = "Airplane", + [Group.Category.HELICOPTER] = "Helicopter", + [Group.Category.GROUND] = "Ground Unit", + [Group.Category.SHIP] = "Ship", + } + local GroupCategory = DCSGroup:getCategory() + self:T3( GroupCategory ) + + return CategoryNames[GroupCategory] + end + + return nil +end + + +--- Returns the coalition of the DCS Group. +-- @param #GROUP self +-- @return DCSCoalitionObject#coalition.side The coalition side of the DCS Group. +function GROUP:GetCoalition() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCoalition = DCSGroup:getCoalition() + self:T3( GroupCoalition ) + return GroupCoalition + end + + return nil +end + +--- Returns the country of the DCS Group. +-- @param #GROUP self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Group is not existing or alive. +function GROUP:GetCountry() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCountry = DCSGroup:getUnit(1):getCountry() + self:T3( GroupCountry ) + return GroupCountry + end + + return nil +end + +--- Returns the name of the DCS Group. +-- @param #GROUP self +-- @return #string The DCS Group name. +function GROUP:GetName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupName = DCSGroup:getName() + self:T3( GroupName ) + return GroupName + end + + return nil +end + +--- Returns the DCS Group identifier. +-- @param #GROUP self +-- @return #number The identifier of the DCS Group. +function GROUP:GetID() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupID = DCSGroup:getID() + self:T3( GroupID ) + return GroupID + end + + return nil +end + +--- Returns the UNIT wrapper class with number UnitNumber. +-- If the underlying DCS Unit does not exist, the method will return nil. . +-- @param #GROUP self +-- @param #number UnitNumber The number of the UNIT wrapper class to be returned. +-- @return Unit#UNIT The UNIT wrapper class. +function GROUP:GetUnit( UnitNumber ) + self:F2( { self.GroupName, UnitNumber } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) + self:T3( UnitFound.UnitName ) + self:T2( UnitFound ) + return UnitFound + end + + return nil +end + +--- Returns the DCS Unit with number UnitNumber. +-- If the underlying DCS Unit does not exist, the method will return nil. . +-- @param #GROUP self +-- @param #number UnitNumber The number of the DCS Unit to be returned. +-- @return DCSUnit#Unit The DCS Unit. +function GROUP:GetDCSUnit( UnitNumber ) + self:F2( { self.GroupName, UnitNumber } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) + self:T3( DCSUnitFound ) + return DCSUnitFound + end + + return nil +end + +--- Returns current size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. +-- @param #GROUP self +-- @return #number The DCS Group size. +function GROUP:GetSize() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupSize = DCSGroup:getSize() + self:T3( GroupSize ) + return GroupSize + end + + return nil +end + +--- +--- Returns the initial size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. +-- @param #GROUP self +-- @return #number The DCS Group initial size. +function GROUP:GetInitialSize() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupInitialSize = DCSGroup:getInitialSize() + self:T3( GroupInitialSize ) + return GroupInitialSize + end + + return nil +end + +--- Returns the UNITs wrappers of the DCS Units of the DCS Group. +-- @param #GROUP self +-- @return #table The UNITs wrappers. +function GROUP:GetUnits() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnits = DCSGroup:getUnits() + local Units = {} + for Index, UnitData in pairs( DCSUnits ) do + Units[#Units+1] = UNIT:Find( UnitData ) + end + self:T3( Units ) + return Units + end + + return nil +end + + +--- Returns the DCS Units of the DCS Group. +-- @param #GROUP self +-- @return #table The DCS Units. +function GROUP:GetDCSUnits() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnits = DCSGroup:getUnits() + self:T3( DCSUnits ) + return DCSUnits + end + + return nil +end + +--- Get the controller for the GROUP. +-- @param #GROUP self +-- @return DCSController#Controller +function GROUP:_GetController() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupController = DCSGroup:getController() + self:T3( GroupController ) + return GroupController + end + + return nil +end + + +--- Retrieve the group mission and allow to place function hooks within the mission waypoint plan. +-- Use the method @{Group#GROUP:WayPointFunction} to define the hook functions for specific waypoints. +-- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. +-- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! +-- @param #GROUP self +-- @return #GROUP +function GROUP:WayPointInitialize() + + self.WayPoints = self:GetTaskRoute() + + return self +end + + +--- Registers a waypoint function that will be executed when the group moves over the WayPoint. +-- @param #GROUP self +-- @param #number WayPoint The waypoint number. Note that the start waypoint on the route is WayPoint 1! +-- @param #number WayPointIndex When defining multiple WayPoint functions for one WayPoint, use WayPointIndex to set the sequence of actions. +-- @param #function WayPointFunction The waypoint function to be called when the group moves over the waypoint. The waypoint function takes variable parameters. +-- @return #GROUP +function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) + self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) + + table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) + self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) + return self +end + + +function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) + + local DCSTask + + local DCSScript = {} + DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " + + if FunctionArguments.n > 0 then + DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" + else + DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" + end + + DCSTask = self:TaskWrappedAction( + self:CommandDoScript( + table.concat( DCSScript ) + ), WayPointIndex + ) + + self:T3( DCSTask ) + + return DCSTask + +end + + + +--- Executes the WayPoint plan. +-- The function gets a WayPoint parameter, that you can use to restart the mission at a specific WayPoint. +-- Note that when the WayPoint parameter is used, the new start mission waypoint of the group will be 1! +-- @param #GROUP self +-- @param #number WayPoint The WayPoint from where to execute the mission. +-- @param #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 Functions + +--- Returns if all units of the group are within a @{Zone#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} +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 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). +-- @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 + + + + +--- Move the group to a Vec2 Point, wait for a defined duration and embark a group. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to wait. +-- @param #number Duration The duration in seconds to wait. +-- @param #GROUP EmbarkingGroup The group to be embarked. +-- @return DCSTask#Task The DCS task structure +function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) + self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) + + local DCSTask + DCSTask = { id = 'Embarking', + params = { x = Point.x, + y = Point.y, + duration = Duration, + groupsForEmbarking = { EmbarkingGroup.GroupID }, + durationFlag = true, + distributionFlag = false, + distribution = {}, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to wait. +-- @param #number Radius The radius of the embarking zone around the Point. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) + self:F2( { self.GroupName, Point, Radius } ) + + local DCSTask --DCSTask#Task + DCSTask = { id = 'EmbarkToTransport', + params = { x = Point.x, + y = Point.y, + zoneRadius = Radius, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task from a mission template. +-- @param #GROUP self +-- @param #table TaskMission A table containing the mission task. +-- @return DCSTask#Task +function GROUP:TaskMission( TaskMission ) + self:F2( Points ) + + local DCSTask + DCSTask = { id = 'Mission', params = { TaskMission, }, } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task to follow a given route defined by Points. +-- @param #GROUP self +-- @param #table Points A table of route points. +-- @return DCSTask#Task +function GROUP:TaskRoute( Points ) + self:F2( Points ) + + local DCSTask + DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Make the DCS Group to fly to a given point and hover. +-- @param #GROUP self +-- @param DCSTypes#Vec3 Point The destination point in Vec3 format. +-- @param #number Speed The speed to travel. +-- @return #GROUP self +function GROUP:TaskRouteToVec2( Point, Speed ) + self:F2( { Point, Speed } ) + + local GroupPoint = self:GetUnit( 1 ):GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local PointTo = {} + PointTo.x = Point.x + PointTo.y = Point.y + PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" + PointTo.speed = Speed + PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self +end + +--- Make the DCS Group to fly to a given point and hover. +-- @param #GROUP self +-- @param DCSTypes#Vec3 Point The destination point in Vec3 format. +-- @param #number Speed The speed to travel. +-- @return #GROUP self +function GROUP:TaskRouteToVec3( Point, Speed ) + self:F2( { Point, Speed } ) + + local GroupPoint = self:GetUnit( 1 ):GetPointVec3() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.z + PointFrom.alt = GroupPoint.y + PointFrom.alt_type = "BARO" + PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local PointTo = {} + PointTo.x = Point.x + PointTo.y = Point.z + PointTo.alt = Point.y + PointTo.alt_type = "BARO" + PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" + PointTo.speed = Speed + PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self +end + + + +--- Make the group to follow a given route. +-- @param #GROUP self +-- @param #table GoPoints A table of Route Points. +-- @return #GROUP self +function GROUP:Route( GoPoints ) + self:F2( GoPoints ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Points = routines.utils.deepCopy( GoPoints ) + local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } + local Controller = self:_GetController() + --Controller.setTask( Controller, MissionTask ) + --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) + SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) + return self + end + + return nil +end + + + +--- Route the group to a given zone. +-- The group final destination point can be randomized. +-- A speed can be given in km/h. +-- A given formation can be given. +-- @param #GROUP self +-- @param Zone#ZONE Zone The zone where to route to. +-- @param #boolean Randomize Defines whether to target point gets randomized within the Zone. +-- @param #number Speed The speed. +-- @param Base#FORMATION Formation The formation string. +function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) + self:F2( Zone ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + + local GroupPoint = self:GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Cone" + PointFrom.speed = 20 / 1.6 + + + local PointTo = {} + local ZonePoint + + if Randomize then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + PointTo.x = ZonePoint.x + PointTo.y = ZonePoint.y + PointTo.type = "Turning Point" + + if Formation then + PointTo.action = Formation + else + PointTo.action = "Cone" + end + + if Speed then + PointTo.speed = Speed + else + PointTo.speed = 20 / 1.6 + end + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self + end + + return nil +end + +-- Commands + +--- Do Script command +-- @param #GROUP self +-- @param #string DoScript +-- @return #DCSCommand +function GROUP:CommandDoScript( DoScript ) + + local DCSDoScript = { + id = "Script", + params = { + command = DoScript, + }, + } + + self:T3( DCSDoScript ) + return DCSDoScript +end + + +--- Return the mission template of the group. +-- @param #GROUP self +-- @return #table The MissionTemplate +function GROUP:GetTaskMission() + self:F2( self.GroupName ) + + return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template ) +end + +--- Return the mission route of the group. +-- @param #GROUP self +-- @return #table The mission route defined by points. +function GROUP:GetTaskRoute() + self:F2( self.GroupName ) + + return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template.route.points ) +end + +--- Return the route of a group by using the @{Database#DATABASE} class. +-- @param #GROUP self +-- @param #number Begin The route point from where the copy will start. The base route point is 0. +-- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. +-- @param #boolean Randomize Randomization of the route, when true. +-- @param #number Radius When randomization is on, the randomization is within the radius. +function GROUP:CopyRoute( Begin, End, Randomize, Radius ) + self:F2( { Begin, End } ) + + local Points = {} + + -- Could be a Spawned Group + local GroupName = string.match( self:GetName(), ".*#" ) + if GroupName then + GroupName = GroupName:sub( 1, -2 ) + else + GroupName = self:GetName() + end + + self:T3( { GroupName } ) + + local Template = _DATABASE.Templates.Groups[GroupName].Template + + if Template then + if not Begin then + Begin = 0 + end + if not End then + End = 0 + end + + for TPointID = Begin + 1, #Template.route.points - End do + if Template.route.points[TPointID] then + Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) + if Randomize then + if not Radius then + Radius = 500 + end + Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) + Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) + end + end + end + return Points + end + + return nil +end + + +function GROUP:GetDetectedTargets() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + return self:_GetController():getDetectedTargets() + end + + return nil +end + +function GROUP:IsTargetDetected( DCSObject ) + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + + local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity + = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, + Controller.Detection.VISUAL, + Controller.Detection.OPTIC, + Controller.Detection.RADAR, + Controller.Detection.IRST, + Controller.Detection.RWR, + Controller.Detection.DLINK + ) + return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity + end + + return nil +end + +-- Options + +--- Can the GROUP hold their weapons? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEHoldFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Holding weapons. +-- @param Group#GROUP self +-- @return Group#GROUP self +function GROUP:OptionROEHoldFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.WEAPON_HOLD ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack returning on enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEReturnFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Return fire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEReturnFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.RETURN_FIRE ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack designated targets? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEOpenFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Openfire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEOpenFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.OPEN_FIRE ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack targets of opportunity? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEWeaponFreePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + +--- Weapon free. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEWeaponFree() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) + end + + return self + end + + return nil +end + +--- Can the GROUP ignore enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTNoReactionPossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- No evasion on enemy threats. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTNoReaction() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade using passive defenses? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTPassiveDefensePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + +--- Evasion passive defense. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTPassiveDefense() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade on enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTEvadeFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- Evade on fire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTEvadeFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade on fire using vertical manoeuvres? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTVerticalPossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- Evade on fire using vertical manoeuvres. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTVertical() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + end + + return self + end + + return nil +end + +-- Message APIs + +--- Returns a message for a coalition or a client. +-- @param #GROUP self +-- @param #string Message The message text +-- @param 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, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) + end + + return nil +end + +--- Send a message to all coalitions. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param 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 +--- UNIT Class +-- +-- @{UNIT} class +-- ============== +-- The @{UNIT} class is a wrapper class to handle the DCS Unit objects: +-- +-- * Support all DCS Unit APIs. +-- * Enhance with Unit specific APIs not in the DCS Unit API set. +-- * Handle local Unit Controller. +-- * Manage the "state" of the DCS Unit. +-- +-- +-- UNIT reference methods +-- ====================== +-- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class). +-- +-- The UNIT class **does not contain a :New()** method, rather it provides **:Find()** methods to retrieve the object reference +-- using the DCS Unit or the DCS UnitName. +-- +-- Another thing to know is that UNIT objects do not "contain" the DCS Unit object. +-- The UNIT methods will reference the DCS Unit object by name when it is needed during API execution. +-- If the DCS Unit object does not exist or is nil, the UNIT methods will return nil and log an exception in the DCS.log file. +-- +-- The UNIT class provides the following functions to retrieve quickly the relevant UNIT instance: +-- +-- * @{#UNIT.Find}(): Find a UNIT instance from the _DATABASE object using a DCS Unit object. +-- * @{#UNIT.FindByName}(): Find a UNIT instance from the _DATABASE object using a DCS Unit name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil). +-- +-- DCS UNIT APIs +-- ============= +-- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method. +-- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call, +-- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSUnit#Unit.getName}() +-- is implemented in the UNIT class as @{#UNIT.GetName}(). +-- +-- Additional UNIT APIs +-- ==================== +-- The UNIT class comes with additional methods. Find below a summary. +-- +-- Smoke, Flare Units +-- ------------------ +-- The UNIT class provides methods to smoke or flare units easily. +-- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods +-- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit. +-- When the DCS Unit moves for whatever reason, the smoking will still continue! +-- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}() +-- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration. +-- +-- Position, Point +-- --------------- +-- The UNIT class provides methods to obtain the current point or position of the DCS Unit. +-- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetPointVec3}() will obtain the current location of the DCS Unit in a Vec2 (2D) or a Vec3 (3D) vector respectively. +-- If you want to obtain the complete 3D position including oriëntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively. +-- +-- Alive +-- ----- +-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active. +-- +-- Test for other units in radius +-- ------------------------------ +-- One can test if another DCS Unit is within a given radius of the current DCS Unit, by using the @{#UNIT.OtherUnitInRadius}() method. +-- +-- More functions will be added +-- ---------------------------- +-- During the MOOSE development, more functions will be added. A complete list of the current functions is below. +-- +-- +-- +-- +-- @module Unit +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + +--- The UNIT class +-- @type UNIT +-- @extends Base#BASE +-- @field #UNIT.FlareColor FlareColor +-- @field #UNIT.SmokeColor SmokeColor +UNIT = { + ClassName="UNIT", + CategoryName = { + [Unit.Category.AIRPLANE] = "Airplane", + [Unit.Category.HELICOPTER] = "Helicoper", + [Unit.Category.GROUND_UNIT] = "Ground Unit", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + }, + FlareColor = { + Green = trigger.flareColor.Green, + Red = trigger.flareColor.Red, + White = trigger.flareColor.White, + Yellow = trigger.flareColor.Yellow + }, + SmokeColor = { + Green = trigger.smokeColor.Green, + Red = trigger.smokeColor.Red, + White = trigger.smokeColor.White, + Orange = trigger.smokeColor.Orange, + Blue = trigger.smokeColor.Blue + }, + } + +--- FlareColor +-- @type UNIT.FlareColor +-- @field Green +-- @field Red +-- @field White +-- @field Yellow + +--- SmokeColor +-- @type UNIT.SmokeColor +-- @field Green +-- @field Red +-- @field White +-- @field Orange +-- @field Blue + +-- Registration. + +--- Create a new UNIT from DCSUnit. +-- @param #UNIT self +-- @param DCSUnit#Unit DCSUnit +-- @param Database#DATABASE Database +-- @return Unit#UNIT +function UNIT:Register( UnitName ) + + local self = BASE:Inherit( self, BASE:New() ) + self:F2( UnitName ) + self.UnitName = UnitName + return self +end + +-- Reference methods. + +--- Finds a UNIT from the _DATABASE using a DCSUnit object. +-- @param #UNIT self +-- @param DCSUnit#Unit DCSUnit An existing DCS Unit object reference. +-- @return Unit#UNIT self +function UNIT:Find( DCSUnit ) + + local UnitName = DCSUnit:getName() + local UnitFound = _DATABASE:FindUnit( UnitName ) + return UnitFound +end + +--- Find a UNIT in the _DATABASE using the name of an existing DCS Unit. +-- @param #UNIT self +-- @param #string UnitName The Unit Name. +-- @return Unit#UNIT self +function UNIT:FindByName( UnitName ) + + local UnitFound = _DATABASE:FindUnit( UnitName ) + return UnitFound +end + +function UNIT:GetDCSUnit() + local DCSUnit = Unit.getByName( self.UnitName ) + + if DCSUnit then + return DCSUnit + end + + return nil +end + +--- Returns coalition of the Unit. +-- @param Unit#UNIT self +-- @return DCSCoalitionObject#coalition.side The side of the coalition. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCoalition() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCoalition = DCSUnit:getCoalition() + self:T3( UnitCoalition ) + return UnitCoalition + end + + return nil +end + +--- Returns country of the Unit. +-- @param Unit#UNIT self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCountry() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCountry = DCSUnit:getCountry() + self:T3( UnitCountry ) + return UnitCountry + end + + return nil +end + + +--- Returns DCS Unit object name. +-- The function provides access to non-activated units too. +-- @param Unit#UNIT self +-- @return #string The name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitName = self.UnitName + return UnitName + end + + return nil +end + + +--- Returns if the unit is alive. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is alive. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsAlive() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitIsAlive = DCSUnit:isExist() + return UnitIsAlive + end + + return false +end + +--- Returns if the unit is activated. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is activated. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsActive() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local UnitIsActive = DCSUnit:isActive() + return UnitIsActive + end + + return nil +end + +--- Returns name of the player that control the unit or nil if the unit is controlled by A.I. +-- @param Unit#UNIT self +-- @return #string Player Name +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPlayerName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local PlayerName = DCSUnit:getPlayerName() + if PlayerName == nil then + PlayerName = "" + end + return PlayerName + end + + return nil +end + +--- Returns the unit's unique identifier. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.ID Unit ID +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetID() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitID = DCSUnit:getID() + return UnitID + end + + return nil +end + +--- Returns the unit's number in the group. +-- The number is the same number the unit has in ME. +-- It may not be changed during the mission. +-- If any unit in the group is destroyed, the numbers of another units will not be changed. +-- @param Unit#UNIT self +-- @return #number The Unit number. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetNumber() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitNumber = DCSUnit:getNumber() + return UnitNumber + end + + return nil +end + +--- Returns the unit's group if it exist and nil otherwise. +-- @param Unit#UNIT self +-- @return Group#GROUP The Group of the Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetGroup() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitGroup = DCSUnit:getGroup() + return UnitGroup + end + + return nil +end + + +--- Returns the unit's callsign - the localized string. +-- @param Unit#UNIT self +-- @return #string The Callsign of the Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCallSign() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCallSign = DCSUnit:getCallsign() + return UnitCallSign + end + + return nil +end + +--- Returns the unit's health. Dead units has health <= 1.0. +-- @param Unit#UNIT self +-- @return #number The Unit's health value. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetLife() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitLife = DCSUnit:getLife() + return UnitLife + end + + return nil +end + +--- Returns the Unit's initial health. +-- @param Unit#UNIT self +-- @return #number The Unit's initial health value. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetLife0() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitLife0 = DCSUnit:getLife0() + return UnitLife0 + end + + return nil +end + +--- Returns relative amount of fuel (from 0.0 to 1.0) the unit has in its internal tanks. If there are additional fuel tanks the value may be greater than 1.0. +-- @param Unit#UNIT self +-- @return #number The relative amount of fuel (from 0.0 to 1.0). +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetFuel() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitFuel = DCSUnit:getFuel() + return UnitFuel + end + + return nil +end + +--- Returns the Unit's ammunition. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Ammo +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetAmmo() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitAmmo = DCSUnit:getAmmo() + return UnitAmmo + end + + return nil +end + +--- Returns the unit sensors. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Sensors +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetSensors() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitSensors = DCSUnit:getSensors() + return UnitSensors + end + + return nil +end + +-- Need to add here a function per sensortype +-- unit:hasSensors(Unit.SensorType.RADAR, Unit.RadarType.AS) + +--- Returns two values: +-- +-- * First value indicates if at least one of the unit's radar(s) is on. +-- * Second value is the object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. +-- @param Unit#UNIT self +-- @return #boolean Indicates if at least one of the unit's radar(s) is on. +-- @return DCSObject#Object The object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetRadar() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitRadarOn, UnitRadarObject = DCSUnit:getRadar() + return UnitRadarOn, UnitRadarObject + end + + return nil, nil +end + +-- Need to add here functions to check if radar is on and which object etc. + +--- Returns unit descriptor. Descriptor type depends on unit category. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Desc The Unit descriptor. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetDesc() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitDesc = DCSUnit:getDesc() + return UnitDesc + end + + return nil +end + + +--- Returns the type name of the DCS Unit. +-- @param Unit#UNIT self +-- @return #string The type name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetTypeName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitTypeName = DCSUnit:getTypeName() + self:T3( UnitTypeName ) + return UnitTypeName + end + + return nil +end + + + +--- Returns the prefix name of the DCS Unit. A prefix name is a part of the name before a '#'-sign. +-- DCS Units spawned with the @{SPAWN} class contain a '#'-sign to indicate the end of the (base) DCS Unit name. +-- The spawn sequence number and unit number are contained within the name after the '#' sign. +-- @param Unit#UNIT self +-- @return #string The name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPrefix() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPrefix = string.match( self.UnitName, ".*#" ):sub( 1, -2 ) + self:T3( UnitPrefix ) + return UnitPrefix + end + + return nil +end + + + +--- Returns the @{DCSTypes#Vec2} vector indicating the point in 2D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec2 The 2D point vector of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPointVec2() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPosition().p + + local UnitPointVec2 = {} + UnitPointVec2.x = UnitPointVec3.x + UnitPointVec2.y = UnitPointVec3.z + + self:T3( UnitPointVec2 ) + return UnitPointVec2 + end + + return nil +end + + +--- Returns the @{DCSTypes#Vec3} vector indicating the point in 3D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec3 The 3D point vector of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPointVec3() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPosition().p + self:T3( UnitPointVec3 ) + return UnitPointVec3 + end + + return nil +end + +--- Returns the @{DCSTypes#Position3} position vectors indicating the point and direction vectors in 3D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Position The 3D position vectors of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPositionVec3() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPosition = DCSUnit:getPosition() + self:T3( UnitPosition ) + return UnitPosition + end + + return nil +end + +--- Returns the DCS Unit velocity vector. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec3 The velocity vector +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetVelocity() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitVelocityVec3 = DCSUnit:getVelocity() + self:T3( UnitVelocityVec3 ) + return UnitVelocityVec3 + end + + return nil +end + +--- Returns true if the DCS Unit is in the air. +-- @param Unit#UNIT self +-- @return #boolean true if in the air. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:InAir() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitInAir = DCSUnit:inAir() + self:T3( UnitInAir ) + return UnitInAir + end + + return nil +end + +--- Returns the altitude of the DCS Unit. +-- @param Unit#UNIT self +-- @return DCSTypes#Distance The altitude of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetAltitude() + self:F2() + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPoint() --DCSTypes#Vec3 + return UnitPointVec3.y + end + + return nil +end + +--- Returns true if there is an **other** DCS Unit within a radius of the current 2D point of the DCS Unit. +-- @param Unit#UNIT self +-- @param Unit#UNIT AwaitUnit The other UNIT wrapper object. +-- @param Radius The radius in meters with the DCS Unit in the centre. +-- @return true If the other DCS Unit is within the radius of the 2D point of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:OtherUnitInRadius( AwaitUnit, Radius ) + self:F2( { self.UnitName, AwaitUnit.UnitName, Radius } ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPos = self:GetPointVec3() + local AwaitUnitPos = AwaitUnit:GetPointVec3() + + if (((UnitPos.x - AwaitUnitPos.x)^2 + (UnitPos.z - AwaitUnitPos.z)^2)^0.5 <= Radius) then + self:T3( "true" ) + return true + else + self:T3( "false" ) + return false + end + end + + return nil +end + +--- Returns the DCS Unit category name as defined within the DCS Unit Descriptor. +-- @param Unit#UNIT self +-- @return #string The DCS Unit Category Name +function UNIT:GetCategoryName() + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCategoryName = self.CategoryName[ self:GetDesc().category ] + return UnitCategoryName + end + + return nil +end + +--- Signal a flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:Flare( FlareColor ) + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), FlareColor , 0 ) +end + +--- Signal a white flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareWhite() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.White , 0 ) +end + +--- Signal a yellow flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareYellow() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Yellow , 0 ) +end + +--- Signal a green flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareGreen() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Green , 0 ) +end + +--- Signal a red flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareRed() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Red, 0 ) +end + +--- Smoke the UNIT. +-- @param #UNIT self +function UNIT:Smoke( SmokeColor ) + self:F2() + trigger.action.smoke( self:GetPointVec3(), SmokeColor ) +end + +--- Smoke the UNIT Green. +-- @param #UNIT self +function UNIT:SmokeGreen() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Green ) +end + +--- Smoke the UNIT Red. +-- @param #UNIT self +function UNIT:SmokeRed() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Red ) +end + +--- Smoke the UNIT White. +-- @param #UNIT self +function UNIT:SmokeWhite() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.White ) +end + +--- Smoke the UNIT Orange. +-- @param #UNIT self +function UNIT:SmokeOrange() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Orange ) +end + +--- Smoke the UNIT Blue. +-- @param #UNIT self +function UNIT:SmokeBlue() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Blue ) +end + +-- Is methods + +--- Returns if the unit is of an air category. +-- If the unit is a helicopter or a plane, then this method will return true, otherwise false. +-- @param #UNIT self +-- @return #boolean Air category evaluation result. +function UNIT:IsAir() + self:F2() + + local UnitDescriptor = self.DCSUnit:getDesc() + self:T3( { UnitDescriptor.category, Unit.Category.AIRPLANE, Unit.Category.HELICOPTER } ) + + local IsAirResult = ( UnitDescriptor.category == Unit.Category.AIRPLANE ) or ( UnitDescriptor.category == Unit.Category.HELICOPTER ) + + self:T3( IsAirResult ) + return IsAirResult +end + +--- ZONE Classes +-- ============= +-- 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. +-- +-- Polymorphic methods +-- =================== +-- 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. +-- +-- @module Zone +-- @author FlightControl + + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + + + +--- The ZONE_BASE class +-- @type ZONE_BASE +-- @Extends Base#BASE +ZONE_BASE = { + ClassName = "ZONE_BASE", + } + +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 + + +--- 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 DCSTypes#Vec2 PointVec2 The location of the zone. +-- @param DCSTypes#Distance Radius The radius of the zone. +-- @return #ZONE_RADIUS +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 + + +--- 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 ) + + if (( PointVec2.x - self.PointVec2.x )^2 + ( PointVec2.y - self.PointVec2.y ) ^2 ) ^ 0.5 <= self.Radius 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:IsPointVec3InZone( { 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 angle = math.random() * math.pi*2; + Point.x = self.PointVec2.x + math.cos( angle ) * math.random() * self.Radius; + Point.y = self.PointVec2.y + math.sin( angle ) * math.random() * self.Radius; + + 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.x, y = Zone.y }, 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 + + +--- 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_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 self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) + self:F( { ZoneName, ZoneGroup } ) + + local GroupPoints = ZoneGroup:GetTaskRoute() + local i = 0 + + self.Polygon = {} + + for i = 1, #GroupPoints do + self.Polygon[i] = {} + self.Polygon[i].x = GroupPoints[i].x + self.Polygon[i].y = GroupPoints[i].y + end + + return self +end + + +--- Returns if a location is within the zone. +-- @param #ZONE_POLYGON self +-- @param DCSTypes#Vec2 PointVec2 The location to test. +-- @return #boolean true if the location is within the zone. +function ZONE_POLYGON: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:T( { "c = ", c } ) + end + + return c +end + +--- The CLIENT models client units in multi player missions. +-- +-- @{#CLIENT} class +-- ================ +-- Clients are those **Units** defined within the Mission Editor that have the skillset defined as __Client__ or __Player__. +-- Note that clients are NOT the same as Units, they are NOT necessarily alive. +-- The @{CLIENT} class is a wrapper class to handle the DCS Unit objects that have the skillset defined as __Client__ or __Player__: +-- +-- * Wraps the DCS Unit objects with skill level set to Player or Client. +-- * Support all DCS Unit APIs. +-- * Enhance with Unit specific APIs not in the DCS Group API set. +-- * When player joins Unit, execute alive init logic. +-- * Handles messages to players. +-- * Manage the "state" of the DCS Unit. +-- +-- Clients are being used by the @{MISSION} class to follow players and register their successes. +-- +-- CLIENT reference methods +-- ======================= +-- For each DCS Unit having skill level Player or Client, a CLIENT wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts). +-- +-- The CLIENT class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the DCS Unit or the DCS UnitName. +-- +-- Another thing to know is that CLIENT objects do not "contain" the DCS Unit object. +-- The CLIENT methods will reference the DCS Unit object by name when it is needed during API execution. +-- If the DCS Unit object does not exist or is nil, the CLIENT methods will return nil and log an exception in the DCS.log file. +-- +-- The CLIENT class provides the following functions to retrieve quickly the relevant CLIENT instance: +-- +-- * @{#CLIENT.Find}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit object. +-- * @{#CLIENT.FindByName}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these CLIENT OBJECT REFERENCES! (make the CLIENT object references nil). +-- +-- @module Client +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Cargo" ) +Include.File( "Message" ) + + +--- The CLIENT class +-- @type CLIENT +-- @extends Unit#UNIT +CLIENT = { + ONBOARDSIDE = { + NONE = 0, + LEFT = 1, + RIGHT = 2, + BACK = 3, + FRONT = 4 + }, + ClassName = "CLIENT", + ClientName = nil, + ClientAlive = false, + ClientTransport = false, + ClientBriefingShown = false, + _Menus = {}, + _Tasks = {}, + Messages = { + } +} + + +--- Finds a CLIENT from the _DATABASE using the relevant DCS Unit. +-- @param #CLIENT self +-- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. +-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. +-- @return #CLIENT +-- @usage +-- -- Create new Clients. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- Mission:AddGoal( DeploySA6TroopsGoal ) +-- +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) +function CLIENT:Find( DCSUnit ) + local ClientName = DCSUnit:getName() + local ClientFound = _DATABASE:FindClient( ClientName ) + + if ClientFound then + ClientFound:F( ClientName ) + return ClientFound + end + + error( "CLIENT not found for: " .. ClientName ) +end + + +--- Finds a CLIENT from the _DATABASE using the relevant Client Unit Name. +-- As an optional parameter, a briefing text can be given also. +-- @param #CLIENT self +-- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. +-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. +-- @return #CLIENT +-- @usage +-- -- Create new Clients. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- Mission:AddGoal( DeploySA6TroopsGoal ) +-- +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) +function CLIENT:FindByName( ClientName, ClientBriefing ) + local ClientFound = _DATABASE:FindClient( ClientName ) + + if ClientFound then + ClientFound:F( { ClientName, ClientBriefing } ) + ClientFound:AddBriefing( ClientBriefing ) + ClientFound.MessageSwitch = true + + return ClientFound + end + + error( "CLIENT not found for: " .. ClientName ) +end + +function CLIENT:Register( ClientName ) + local self = BASE:Inherit( self, UNIT:Register( ClientName ) ) + + self:F( ClientName ) + self.ClientName = ClientName + self.MessageSwitch = true + self.ClientAlive2 = false + + --self.AliveCheckScheduler = routines.scheduleFunction( self._AliveCheckScheduler, { self }, timer.getTime() + 1, 5 ) + self.AliveCheckScheduler = SCHEDULER:New( self, self._AliveCheckScheduler, {}, 1, 5 ) + + return self +end + + +--- Transport defines that the Client is a Transport. Transports show cargo. +-- @param #CLIENT self +-- @return #CLIENT +function CLIENT:Transport() + self:F() + + self.ClientTransport = true + return self +end + +--- AddBriefing adds a briefing to a CLIENT when a player joins a mission. +-- @param #CLIENT self +-- @param #string ClientBriefing is the text defining the Mission briefing. +-- @return #CLIENT self +function CLIENT:AddBriefing( ClientBriefing ) + self:F( ClientBriefing ) + self.ClientBriefing = ClientBriefing + self.ClientBriefingShown = false + + return self +end + +--- Show the briefing of a CLIENT. +-- @param #CLIENT self +-- @return #CLIENT self +function CLIENT:ShowBriefing() + self:F( { self.ClientName, self.ClientBriefingShown } ) + + if not self.ClientBriefingShown then + self.ClientBriefingShown = true + local Briefing = "" + if self.ClientBriefing then + Briefing = Briefing .. self.ClientBriefing + end + Briefing = Briefing .. " Press [LEFT ALT]+[B] to view the complete mission briefing." + self:Message( Briefing, 60, self.ClientName .. '/ClientBriefing', "Briefing" ) + end + + return self +end + +--- Show the mission briefing of a MISSION to the CLIENT. +-- @param #CLIENT self +-- @param #string MissionBriefing +-- @return #CLIENT self +function CLIENT:ShowMissionBriefing( MissionBriefing ) + self:F( { self.ClientName } ) + + if MissionBriefing then + self:Message( MissionBriefing, 60, self.ClientName .. '/MissionBriefing', "Mission Briefing" ) + end + + return self +end + + + +--- Resets a CLIENT. +-- @param #CLIENT self +-- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client. +function CLIENT:Reset( ClientName ) + self:F() + self._Menus = {} +end + +-- Is Functions + +--- Checks if the CLIENT is a multi-seated UNIT. +-- @param #CLIENT self +-- @return #boolean true if multi-seated. +function CLIENT:IsMultiSeated() + self:F( self.ClientName ) + + local ClientMultiSeatedTypes = { + ["Mi-8MT"] = "Mi-8MT", + ["UH-1H"] = "UH-1H", + ["P-51B"] = "P-51B" + } + + if self:IsAlive() then + local ClientTypeName = self:GetClientGroupUnit():GetTypeName() + if ClientMultiSeatedTypes[ClientTypeName] then + return true + end + end + + return false +end + +--- Checks for a client alive event and calls a function on a continuous basis. +-- @param #CLIENT self +-- @param #function CallBack Function. +-- @return #CLIENT +function CLIENT:Alive( CallBack, ... ) + self:F() + + self.ClientCallBack = CallBack + self.ClientParameters = arg + + return self +end + +--- @param #CLIENT self +function CLIENT:_AliveCheckScheduler() + self:F( { self.ClientName, self.ClientAlive2, self.ClientBriefingShown } ) + + if self:IsAlive() then -- Polymorphic call of UNIT + if self.ClientAlive2 == false then + self:ShowBriefing() + if self.ClientCallBack then + self:T("Calling Callback function") + self.ClientCallBack( self, unpack( self.ClientParameters ) ) + end + self.ClientAlive2 = true + end + else + if self.ClientAlive2 == true then + self.ClientAlive2 = false + end + end + + return true +end + +--- Return the DCSGroup of a Client. +-- This function is modified to deal with a couple of bugs in DCS 1.5.3 +-- @param #CLIENT self +-- @return DCSGroup#Group +function CLIENT:GetDCSGroup() + self:F3() + +-- local ClientData = Group.getByName( self.ClientName ) +-- if ClientData and ClientData:isExist() then +-- self:T( self.ClientName .. " : group found!" ) +-- return ClientData +-- else +-- return nil +-- end + + local ClientUnit = Unit.getByName( self.ClientName ) + + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + self:T3( { "CoalitionData:", CoalitionData } ) + for UnitId, UnitData in pairs( CoalitionData ) do + self:T3( { "UnitData:", UnitData } ) + if UnitData and UnitData:isExist() then + + --self:E(self.ClientName) + if ClientUnit then + local ClientGroup = ClientUnit:getGroup() + if ClientGroup then + self:T3( "ClientGroup = " .. self.ClientName ) + if ClientGroup:isExist() and UnitData:getGroup():isExist() then + if ClientGroup:getID() == UnitData:getGroup():getID() then + self:T3( "Normal logic" ) + self:T3( self.ClientName .. " : group found!" ) + self.ClientGroupID = ClientGroup:getID() + self.ClientGroupName = ClientGroup:getName() + return ClientGroup + end + else + -- Now we need to resolve the bugs in DCS 1.5 ... + -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) + self:T3( "Bug 1.5 logic" ) + local ClientGroupTemplate = _DATABASE.Templates.Units[self.ClientName].GroupTemplate + self.ClientGroupID = ClientGroupTemplate.groupId + self.ClientGroupName = _DATABASE.Templates.Units[self.ClientName].GroupName + self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) + return ClientGroup + end + -- else + -- error( "Client " .. self.ClientName .. " not found!" ) + end + else + --self:E( { "Client not found!", self.ClientName } ) + end + end + end + end + + -- For non player clients + if ClientUnit then + local ClientGroup = ClientUnit:getGroup() + if ClientGroup then + self:T3( "ClientGroup = " .. self.ClientName ) + if ClientGroup:isExist() then + self:T3( "Normal logic" ) + self:T3( self.ClientName .. " : group found!" ) + return ClientGroup + end + end + end + + self.ClientGroupID = nil + self.ClientGroupUnit = nil + + return nil +end + + +-- TODO: Check DCSTypes#Group.ID +--- Get the group ID of the client. +-- @param #CLIENT self +-- @return DCSTypes#Group.ID +function CLIENT:GetClientGroupID() + + local ClientGroup = self:GetDCSGroup() + + --self:E( self.ClientGroupID ) -- Determined in GetDCSGroup() + return self.ClientGroupID +end + + +--- Get the name of the group of the client. +-- @param #CLIENT self +-- @return #string +function CLIENT:GetClientGroupName() + + local ClientGroup = self:GetDCSGroup() + + self:T( self.ClientGroupName ) -- Determined in GetDCSGroup() + return self.ClientGroupName +end + +--- Returns the UNIT of the CLIENT. +-- @param #CLIENT self +-- @return Unit#UNIT +function CLIENT:GetClientGroupUnit() + self:F2() + + local ClientDCSUnit = Unit.getByName( self.ClientName ) + + self:T( self.ClientDCSUnit ) + if ClientDCSUnit and ClientDCSUnit:isExist() then + local ClientUnit = _DATABASE:FindUnit( self.ClientName ) + self:T2( ClientUnit ) + return ClientUnit + end +end + +--- Returns the DCSUnit of the CLIENT. +-- @param #CLIENT self +-- @return DCSTypes#Unit +function CLIENT:GetClientGroupDCSUnit() + self:F2() + + local ClientDCSUnit = Unit.getByName( self.ClientName ) + + if ClientDCSUnit and ClientDCSUnit:isExist() then + self:T2( ClientDCSUnit ) + return ClientDCSUnit + end +end + + +--- Evaluates if the CLIENT is a transport. +-- @param #CLIENT self +-- @return #boolean true is a transport. +function CLIENT:IsTransport() + self:F() + return self.ClientTransport +end + +--- Shows the @{Cargo#CARGO} contained within the CLIENT to the player as a message. +-- The @{Cargo#CARGO} is shown using the @{Message#MESSAGE} distribution system. +-- @param #CLIENT self +function CLIENT:ShowCargo() + self:F() + + local CargoMsg = "" + + for CargoName, Cargo in pairs( CARGOS ) do + if self == Cargo:IsLoadedInClient() then + CargoMsg = CargoMsg .. Cargo.CargoName .. " Type:" .. Cargo.CargoType .. " Weight: " .. Cargo.CargoWeight .. "\n" + end + end + + if CargoMsg == "" then + CargoMsg = "empty" + end + + self:Message( CargoMsg, 15, self.ClientName .. "/Cargo", "Co-Pilot: Cargo Status", 30 ) + +end + +-- TODO (1) I urgently need to revise this. +--- A local function called by the DCS World Menu system to switch off messages. +function CLIENT.SwitchMessages( PrmTable ) + PrmTable[1].MessageSwitch = PrmTable[2] +end + +--- The main message driver for the CLIENT. +-- This function displays various messages to the Player logged into the CLIENT through the DCS World Messaging system. +-- @param #CLIENT self +-- @param #string Message is the text describing the message. +-- @param #number MessageDuration is the duration in seconds that the Message should be displayed. +-- @param #string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId +-- @param #string MessageCategory is the category of the message (the title). +-- @param #number MessageInterval is the interval in seconds between the display of the @{Message#MESSAGE} when the CLIENT is in the air. +function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, MessageInterval ) + self:F( { Message, MessageDuration, MessageId, MessageCategory, MessageInterval } ) + + if not self.MenuMessages then + if self:GetClientGroupID() then + self.MenuMessages = MENU_CLIENT:New( self, 'Messages' ) + self.MenuRouteMessageOn = MENU_CLIENT_COMMAND:New( self, 'Messages On', self.MenuMessages, CLIENT.SwitchMessages, { self, true } ) + self.MenuRouteMessageOff = MENU_CLIENT_COMMAND:New( self,'Messages Off', self.MenuMessages, CLIENT.SwitchMessages, { self, false } ) + end + end + + if self.MessageSwitch == true then + if MessageCategory == nil then + MessageCategory = "Messages" + end + if self.Messages[MessageId] == nil then + self.Messages[MessageId] = {} + self.Messages[MessageId].MessageId = MessageId + self.Messages[MessageId].MessageTime = timer.getTime() + self.Messages[MessageId].MessageDuration = MessageDuration + if MessageInterval == nil then + self.Messages[MessageId].MessageInterval = 600 + else + self.Messages[MessageId].MessageInterval = MessageInterval + end + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + else + if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then + if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + self.Messages[MessageId].MessageTime = timer.getTime() + end + else + if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + self.Messages[MessageId].MessageInterval then + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + self.Messages[MessageId].MessageTime = timer.getTime() + end + end + end + end +end +--- Manage the mission database. +-- +-- @{#DATABASE} class +-- ================== +-- Mission designers can use the DATABASE class to refer to: +-- +-- * UNITS +-- * GROUPS +-- * players +-- * alive players +-- * CLIENTS +-- * alive CLIENTS +-- +-- On top, for internal MOOSE administration purposes, the DATBASE administers the Unit and Gruop templates as defined within the Mission Editor. +-- +-- Moose will automatically create one instance of the DATABASE class into the **global** object _DATABASE. +-- Moose refers to _DATABASE within the framework extensively, but you can also refer to the _DATABASE object within your missions if required. +-- +-- DATABASE iterators: +-- =================== +-- You can iterate the database with the available iterator methods. +-- The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the DATABASE: +-- +-- * @{#DATABASE.ForEachUnit}: Calls a function for each @{UNIT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachGroup}: Calls a function for each @{GROUP} it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayer}: Calls a function for each player it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayerAlive}: Calls a function for each alive player it finds within the DATABASE. +-- * @{#DATABASE.ForEachClient}: Calls a function for each @{CLIENT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachClientAlive}: Calls a function for each alive @{CLIENT} it finds within the DATABASE. +-- +-- @module Database +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Unit" ) +Include.File( "Event" ) +Include.File( "Client" ) + + +--- DATABASE class +-- @type DATABASE +-- @extends Base#BASE +DATABASE = { + ClassName = "DATABASE", + Templates = { + Units = {}, + Groups = {}, + ClientsByName = {}, + ClientsByID = {}, + }, + DCSUnits = {}, + DCSGroups = {}, + UNITS = {}, + GROUPS = {}, + PLAYERS = {}, + PLAYERSALIVE = {}, + CLIENTS = {}, + CLIENTSALIVE = {}, + NavPoints = {}, +} + +local _DATABASECoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _DATABASECategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + + +--- Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #DATABASE self +-- @return #DATABASE +-- @usage +-- -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. +-- DBObject = DATABASE:New() +function DATABASE:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + + + -- Follow alive players and clients + _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) + _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) + + self:_RegisterTemplates() + self:_RegisterDatabase() + self:_RegisterPlayers() + + return self +end + +--- Finds a Unit based on the Unit Name. +-- @param #DATABASE self +-- @param #string UnitName +-- @return Unit#UNIT The found Unit. +function DATABASE:FindUnit( UnitName ) + + local UnitFound = self.UNITS[UnitName] + return UnitFound +end + + +--- Adds a Unit based on the Unit Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddUnit( DCSUnit, DCSUnitName ) + + self.DCSUnits[DCSUnitName] = DCSUnit + self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) +end + + +--- Deletes a Unit from the DATABASE based on the Unit Name. +-- @param #DATABASE self +function DATABASE:DeleteUnit( DCSUnitName ) + + self.DCSUnits[DCSUnitName] = nil +end + + +--- Finds a CLIENT based on the ClientName. +-- @param #DATABASE self +-- @param #string ClientName +-- @return Client#CLIENT The found CLIENT. +function DATABASE:FindClient( ClientName ) + + local ClientFound = self.CLIENTS[ClientName] + return ClientFound +end + + +--- Adds a CLIENT based on the ClientName in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddClient( ClientName ) + + self.CLIENTS[ClientName] = CLIENT:Register( ClientName ) + self:E( self.CLIENTS[ClientName]:GetClassNameAndID() ) +end + + +--- Finds a GROUP based on the GroupName. +-- @param #DATABASE self +-- @param #string GroupName +-- @return Group#GROUP The found GROUP. +function DATABASE:FindGroup( GroupName ) + + local GroupFound = self.GROUPS[GroupName] + return GroupFound +end + + +--- Adds a GROUP based on the GroupName in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddGroup( DCSGroup, GroupName ) + + self.DCSGroups[GroupName] = DCSGroup + self.GROUPS[GroupName] = GROUP:Register( GroupName ) +end + +--- Adds a player based on the Player Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddPlayer( UnitName, PlayerName ) + + if PlayerName then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self.PLAYERS[PlayerName] = PlayerName + self.PLAYERSALIVE[PlayerName] = PlayerName + self.CLIENTSALIVE[PlayerName] = self:FindClient( UnitName ) + end +end + +--- Deletes a player from the DATABASE based on the Player Name. +-- @param #DATABASE self +function DATABASE:DeletePlayer( PlayerName ) + + if PlayerName then + self:E( { "Clean player:", PlayerName } ) + self.PLAYERSALIVE[PlayerName] = nil + self.CLIENTSALIVE[PlayerName] = nil + end +end + + +--- Instantiate new Groups within the DCSRTE. +-- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: +-- SpawnCountryID, SpawnCategoryID +-- This method is used by the SPAWN class. +-- @param #DATABASE self +-- @param #table SpawnTemplate +-- @return #DATABASE self +function DATABASE:Spawn( SpawnTemplate ) + self:F2( SpawnTemplate.name ) + + self:T2( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) + + -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. + local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID + local SpawnCountryID = SpawnTemplate.SpawnCountryID + local SpawnCategoryID = SpawnTemplate.SpawnCategoryID + + -- Nullify + SpawnTemplate.SpawnCoalitionID = nil + SpawnTemplate.SpawnCountryID = nil + SpawnTemplate.SpawnCategoryID = nil + + self:_RegisterTemplate( SpawnTemplate ) + coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) + + -- Restore + SpawnTemplate.SpawnCoalitionID = SpawnCoalitionID + SpawnTemplate.SpawnCountryID = SpawnCountryID + SpawnTemplate.SpawnCategoryID = SpawnCategoryID + + + local SpawnGroup = GROUP:Register( SpawnTemplate.name ) + return SpawnGroup +end + +--- Set a status to a Group within the Database, this to check crossing events for example. +function DATABASE:SetStatusGroup( GroupName, Status ) + self:F2( Status ) + + self.Templates.Groups[GroupName].Status = Status +end + +--- Get a status to a Group within the Database, this to check crossing events for example. +function DATABASE:GetStatusGroup( GroupName ) + self:F2( Status ) + + if self.Templates.Groups[GroupName] then + return self.Templates.Groups[GroupName].Status + else + return "" + end +end + + +--- Private method that registers new Group Templates within the DATABASE Object. +-- @param #DATABASE self +-- @param #table GroupTemplate +-- @return #DATABASE self +function DATABASE:_RegisterTemplate( GroupTemplate ) + + local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) + + if not self.Templates.Groups[GroupTemplateName] then + self.Templates.Groups[GroupTemplateName] = {} + self.Templates.Groups[GroupTemplateName].Status = nil + end + + -- Delete the spans from the route, it is not needed and takes memory. + if GroupTemplate.route and GroupTemplate.route.spans then + GroupTemplate.route.spans = nil + end + + self.Templates.Groups[GroupTemplateName].GroupName = GroupTemplateName + self.Templates.Groups[GroupTemplateName].Template = GroupTemplate + self.Templates.Groups[GroupTemplateName].groupId = GroupTemplate.groupId + self.Templates.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units + self.Templates.Groups[GroupTemplateName].Units = GroupTemplate.units + + self:T2( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } ) + + for unit_num, UnitTemplate in pairs( GroupTemplate.units ) do + + local UnitTemplateName = env.getValueDictByKey(UnitTemplate.name) + self.Templates.Units[UnitTemplateName] = {} + self.Templates.Units[UnitTemplateName].UnitName = UnitTemplateName + self.Templates.Units[UnitTemplateName].Template = UnitTemplate + self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName + self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate + self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId + self:E( {"skill",UnitTemplate.skill}) + if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then + self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate + self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate + end + self:E( { "Unit", self.Templates.Units[UnitTemplateName].UnitName } ) + end +end + + +--- Private method that registers all alive players in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterPlayers() + + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for UnitId, UnitData in pairs( CoalitionData ) do + self:T3( { "UnitData:", UnitData } ) + if UnitData and UnitData:isExist() then + local UnitName = UnitData:getName() + local PlayerName = UnitData:getPlayerName() + if not self.PLAYERS[PlayerName] then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self:AddPlayer( UnitName, PlayerName ) + end + end + end + end + + return self +end + + +--- Private method that registers all datapoints within in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterDatabase() + + local CoalitionsData = { GroupsRed = coalition.getGroups( coalition.side.RED ), GroupsBlue = coalition.getGroups( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for DCSGroupId, DCSGroup in pairs( CoalitionData ) do + + if DCSGroup:isExist() then + local DCSGroupName = DCSGroup:getName() + + self:E( { "Register Group:", DCSGroup, DCSGroupName } ) + self:AddGroup( DCSGroup, DCSGroupName ) + + for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do + + local DCSUnitName = DCSUnit:getName() + self:E( { "Register Unit:", DCSUnit, DCSUnitName } ) + self:AddUnit( DCSUnit, DCSUnitName ) + end + else + self:E( { "Group does not exist: ", DCSGroup } ) + end + + end + end + + for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do + self:E( { "Adding Client:", ClientName } ) + self:AddClient( ClientName ) + end + + return self +end + +--- Events + +--- Handles the OnBirth event for the alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnBirth( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + self:AddUnit( Event.IniDCSUnit, Event.IniDCSUnitName ) + self:AddGroup( Event.IniDCSGroup, Event.IniDCSGroupName ) + self:_EventOnPlayerEnterUnit( Event ) + end +end + + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnDeadOrCrash( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + if self.DCSUnits[Event.IniDCSUnitName] then + self:DeleteUnit( Event.IniDCSUnitName ) + -- add logic to correctly remove a group once all units are destroyed... + end + end +end + + +--- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnPlayerEnterUnit( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + local PlayerName = Event.IniDCSUnit:getPlayerName() + if not self.PLAYERSALIVE[PlayerName] then + self:AddPlayer( Event.IniDCSUnitName, PlayerName ) + end + end +end + + +--- Handles the OnPlayerLeaveUnit event to clean the active players table. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnPlayerLeaveUnit( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + local PlayerName = Event.IniDCSUnit:getPlayerName() + if self.PLAYERSALIVE[PlayerName] then + self:DeletePlayer( PlayerName ) + end + end +end + +--- Iterators + +--- Iterate the DATABASE and call an iterator function for the given set, providing the Object for each element within the set and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. +-- @return #DATABASE self +function DATABASE:ForEach( IteratorFunction, arg, Set ) + self:F2( arg ) + + local function CoRoutine() + local Count = 0 + for ObjectID, Object in pairs( Set ) do + self:T2( Object ) + IteratorFunction( Object, unpack( arg ) ) + Count = Count + 1 + if Count % 10 == 0 then + coroutine.yield( false ) + end + end + return true + end + + local co = coroutine.create( CoRoutine ) + + local function Schedule() + + local status, res = coroutine.resume( co ) + self:T2( { status, res } ) + + if status == false then + error( res ) + end + if res == false then + return true -- resume next time the loop + end + + return false + end + + local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** unit, providing the DCSUnit and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a DCSUnit parameter. +-- @return #DATABASE self +function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.DCSUnits ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** UNIT, providing the UNIT and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.UNITS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **alive** GROUP, providing the GROUP and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the database. The function needs to accept a GROUP parameter. +-- @return #DATABASE self +function DATABASE:ForEachGroup( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.GROUPS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each player, providing the player name and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an player in the database. The function needs to accept the player name. +-- @return #DATABASE self +function DATABASE:ForEachPlayer( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** player, providing the Unit of the player and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachPlayerAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERSALIVE ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClient( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **ALIVE** CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClientAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTSALIVE ) + + return self +end + + +function DATABASE:_RegisterTemplates() + self:F2() + + self.Navpoints = {} + self.UNITS = {} + --Build routines.db.units and self.Navpoints + for coa_name, coa_data in pairs(env.mission.coalition) do + + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + --self.Units[coa_name] = {} + + ---------------------------------------------- + -- build nav points DB + self.Navpoints[coa_name] = {} + if coa_data.nav_points then --navpoints + for nav_ind, nav_data in pairs(coa_data.nav_points) do + + if type(nav_data) == 'table' then + self.Navpoints[coa_name][nav_ind] = routines.utils.deepCopy(nav_data) + + self.Navpoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. + self.Navpoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. + self.Navpoints[coa_name][nav_ind]['point']['x'] = nav_data.x + self.Navpoints[coa_name][nav_ind]['point']['y'] = 0 + self.Navpoints[coa_name][nav_ind]['point']['z'] = nav_data.y + end + end + end + ------------------------------------------------- + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + + local countryName = string.lower(cntry_data.name) + --self.Units[coa_name][countryName] = {} + --self.Units[coa_name][countryName]["countryId"] = cntry_data.id + + if type(cntry_data) == 'table' then --just making sure + + for obj_type_name, obj_type_data in pairs(cntry_data) do + + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check + + local category = obj_type_name + + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + + --self.Units[coa_name][countryName][category] = {} + + for group_num, GroupTemplate in pairs(obj_type_data.group) do + + if GroupTemplate and GroupTemplate.units and type(GroupTemplate.units) == 'table' then --making sure again- this is a valid group + self:_RegisterTemplate( GroupTemplate ) + end --if GroupTemplate and GroupTemplate.units then + end --for group_num, GroupTemplate in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --if type(cntry_data) == 'table' then + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do + + return self +end + + + + +--- The main include file for the MOOSE system. + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Event" ) + +-- The order of the declarations is important here. Don't touch it. + +--- Declare the event dispatcher based on the EVENT class +_EVENTDISPATCHER = EVENT:New() -- #EVENT + +--- Declare the main database object, which is used internally by the MOOSE classes. +_DATABASE = DATABASE:New() -- Database#DATABASE + +--- Scoring system for MOOSE. +-- This scoring class calculates the hits and kills that players make within a simulation session. +-- Scoring is calculated using a defined algorithm. +-- With a small change in MissionScripting.lua, the scoring can also be logged in a CSV file, that can then be uploaded +-- to a database or a BI tool to publish the scoring results to the player community. +-- @module Scoring +-- @author FlightControl + + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Event" ) + + +--- The Scoring class +-- @type SCORING +-- @field Players A collection of the current players that have joined the game. +-- @extends Base#BASE +SCORING = { + ClassName = "SCORING", + ClassID = 0, + Players = {}, +} + +local _SCORINGCoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _SCORINGCategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + +--- Creates a new SCORING object to administer the scoring achieved by players. +-- @param #SCORING self +-- @param #string GameName The name of the game. This name is also logged in the CSV score file. +-- @return #SCORING self +-- @usage +-- -- Define a new scoring object for the mission Gori Valley. +-- ScoringObject = SCORING:New( "Gori Valley" ) +function SCORING:New( GameName ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + if GameName then + self.GameName = GameName + else + error( "A game name must be given to register the scoring results" ) + end + + + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnHit( self._EventOnHit, self ) + + --self.SchedulerId = routines.scheduleFunction( SCORING._FollowPlayersScheduled, { self }, 0, 5 ) + self.SchedulerId = SCHEDULER:New( self, self._FollowPlayersScheduled, {}, 0, 5 ) + + self:ScoreMenu() + + return self + +end + +--- Creates a score radio menu. Can be accessed using Radio -> F10. +-- @param #SCORING self +-- @return #SCORING self +function SCORING:ScoreMenu() + self.Menu = SUBMENU:New( 'Scoring' ) + self.AllScoresMenu = COMMANDMENU:New( 'Score All Active Players', self.Menu, SCORING.ReportScoreAll, self ) + --- = COMMANDMENU:New('Your Current Score', ReportScore, SCORING.ReportScorePlayer, self ) + return self +end + +--- Follows new players entering Clients within the DCSRTE. +-- TODO: Need to see if i can catch this also with an event. It will eliminate the schedule ... +function SCORING:_FollowPlayersScheduled() + self:F3( "_FollowPlayersScheduled" ) + + local ClientUnit = 0 + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers(coalition.side.RED), AlivePlayersBlue = coalition.getPlayers(coalition.side.BLUE) } + local unitId + local unitData + local AlivePlayerUnits = {} + + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + self:T3( { "_FollowPlayersScheduled", CoalitionData } ) + for UnitId, UnitData in pairs( CoalitionData ) do + self:_AddPlayerFromUnit( UnitData ) + end + end + + return true +end + + +--- Track DEAD or CRASH events for the scoring. +-- @param #SCORING self +-- @param Event#EVENTDATA Event +function SCORING:_EventOnDeadOrCrash( Event ) + self:F( { Event } ) + + local TargetUnit = nil + local TargetGroup = nil + local TargetUnitName = "" + local TargetGroupName = "" + local TargetPlayerName = "" + local TargetCoalition = nil + local TargetCategory = nil + local TargetType = nil + local TargetUnitCoalition = nil + local TargetUnitCategory = nil + local TargetUnitType = nil + + if Event.IniDCSUnit then + + TargetUnit = Event.IniDCSUnit + TargetUnitName = Event.IniDCSUnitName + TargetGroup = Event.IniDCSGroup + TargetGroupName = Event.IniDCSGroupName + TargetPlayerName = TargetUnit:getPlayerName() + + TargetCoalition = TargetUnit:getCoalition() + --TargetCategory = TargetUnit:getCategory() + TargetCategory = TargetUnit:getDesc().category -- Workaround + TargetType = TargetUnit:getTypeName() + + TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] + TargetUnitCategory = _SCORINGCategory[TargetCategory] + TargetUnitType = TargetType + + self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } ) + end + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Something got killed" ) + + -- Some variables + local InitUnitName = PlayerData.UnitName + local InitUnitType = PlayerData.UnitType + local InitCoalition = PlayerData.UnitCoalition + local InitCategory = PlayerData.UnitCategory + local InitUnitCoalition = _SCORINGCoalition[InitCoalition] + local InitUnitCategory = _SCORINGCategory[InitCategory] + + self:T( { InitUnitName, InitUnitType, InitUnitCoalition, InitCoalition, InitUnitCategory, InitCategory } ) + + -- What is he hitting? + if TargetCategory then + if PlayerData and PlayerData.Hit and PlayerData.Hit[TargetCategory] and PlayerData.Hit[TargetCategory][TargetUnitName] then -- Was there a hit for this unit for this player before registered??? + if not PlayerData.Kill[TargetCategory] then + PlayerData.Kill[TargetCategory] = {} + end + if not PlayerData.Kill[TargetCategory][TargetType] then + PlayerData.Kill[TargetCategory][TargetType] = {} + PlayerData.Kill[TargetCategory][TargetType].Score = 0 + PlayerData.Kill[TargetCategory][TargetType].ScoreKill = 0 + PlayerData.Kill[TargetCategory][TargetType].Penalty = 0 + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = 0 + end + + if InitCoalition == TargetCoalition then + PlayerData.Penalty = PlayerData.Penalty + 25 + PlayerData.Kill[TargetCategory][TargetType].Penalty = PlayerData.Kill[TargetCategory][TargetType].Penalty + 25 + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = PlayerData.Kill[TargetCategory][TargetType].PenaltyKill + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' killed a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill .. " times. Penalty: -" .. PlayerData.Kill[TargetCategory][TargetType].Penalty .. + ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, + "", 5, "/PENALTY" .. PlayerName .. "/" .. InitUnitName ):ToAll() + self:ScoreCSV( PlayerName, "KILL_PENALTY", 1, -125, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + else + PlayerData.Score = PlayerData.Score + 10 + PlayerData.Kill[TargetCategory][TargetType].Score = PlayerData.Kill[TargetCategory][TargetType].Score + 10 + PlayerData.Kill[TargetCategory][TargetType].ScoreKill = PlayerData.Kill[TargetCategory][TargetType].ScoreKill + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' killed an enemy " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + PlayerData.Kill[TargetCategory][TargetType].ScoreKill .. " times. Score: " .. PlayerData.Kill[TargetCategory][TargetType].Score .. + ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, + "", 5, "/SCORE" .. PlayerName .. "/" .. InitUnitName ):ToAll() + self:ScoreCSV( PlayerName, "KILL_SCORE", 1, 10, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + end + end + end + end + end +end + + + +--- Add a new player entering a Unit. +function SCORING:_AddPlayerFromUnit( UnitData ) + self:F( UnitData ) + + if UnitData and UnitData:isExist() then + local UnitName = UnitData:getName() + local PlayerName = UnitData:getPlayerName() + local UnitDesc = UnitData:getDesc() + local UnitCategory = UnitDesc.category + local UnitCoalition = UnitData:getCoalition() + local UnitTypeName = UnitData:getTypeName() + + self:T( { PlayerName, UnitName, UnitCategory, UnitCoalition, UnitTypeName } ) + + if self.Players[PlayerName] == nil then -- I believe this is the place where a Player gets a life in a mission when he enters a unit ... + self.Players[PlayerName] = {} + self.Players[PlayerName].Hit = {} + self.Players[PlayerName].Kill = {} + self.Players[PlayerName].Mission = {} + + -- for CategoryID, CategoryName in pairs( SCORINGCategory ) do + -- self.Players[PlayerName].Hit[CategoryID] = {} + -- self.Players[PlayerName].Kill[CategoryID] = {} + -- end + self.Players[PlayerName].HitPlayers = {} + self.Players[PlayerName].HitUnits = {} + self.Players[PlayerName].Score = 0 + self.Players[PlayerName].Penalty = 0 + self.Players[PlayerName].PenaltyCoalition = 0 + self.Players[PlayerName].PenaltyWarning = 0 + end + + if not self.Players[PlayerName].UnitCoalition then + self.Players[PlayerName].UnitCoalition = UnitCoalition + else + if self.Players[PlayerName].UnitCoalition ~= UnitCoalition then + self.Players[PlayerName].Penalty = self.Players[PlayerName].Penalty + 50 + self.Players[PlayerName].PenaltyCoalition = self.Players[PlayerName].PenaltyCoalition + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' changed coalition from " .. _SCORINGCoalition[self.Players[PlayerName].UnitCoalition] .. " to " .. _SCORINGCoalition[UnitCoalition] .. + "(changed " .. self.Players[PlayerName].PenaltyCoalition .. " times the coalition). 50 Penalty points added.", + "", + 2, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + self:ScoreCSV( PlayerName, "COALITION_PENALTY", 1, -50, self.Players[PlayerName].UnitName, _SCORINGCoalition[self.Players[PlayerName].UnitCoalition], _SCORINGCategory[self.Players[PlayerName].UnitCategory], self.Players[PlayerName].UnitType, + UnitName, _SCORINGCoalition[UnitCoalition], _SCORINGCategory[UnitCategory], UnitData:getTypeName() ) + end + end + self.Players[PlayerName].UnitName = UnitName + self.Players[PlayerName].UnitCoalition = UnitCoalition + self.Players[PlayerName].UnitCategory = UnitCategory + self.Players[PlayerName].UnitType = UnitTypeName + + if self.Players[PlayerName].Penalty > 100 then + if self.Players[PlayerName].PenaltyWarning < 1 then + MESSAGE:New( "Player '" .. PlayerName .. "': WARNING! If you continue to commit FRATRICIDE and have a PENALTY score higher than 150, you will be COURT MARTIALED and DISMISSED from this mission! \nYour total penalty is: " .. self.Players[PlayerName].Penalty, + "", + 30, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + self.Players[PlayerName].PenaltyWarning = self.Players[PlayerName].PenaltyWarning + 1 + end + end + + if self.Players[PlayerName].Penalty > 150 then + ClientGroup = GROUP:NewFromDCSUnit( UnitData ) + ClientGroup:Destroy() + MESSAGE:New( "Player '" .. PlayerName .. "' committed FRATRICIDE, he will be COURT MARTIALED and is DISMISSED from this mission!", + "", + 10, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + end + + end +end + + +--- Registers Scores the players completing a Mission Task. +function SCORING:_AddMissionTaskScore( PlayerUnit, MissionName, Score ) + self:F( { PlayerUnit, MissionName, Score } ) + + local PlayerName = PlayerUnit:getPlayerName() + + if not self.Players[PlayerName].Mission[MissionName] then + self.Players[PlayerName].Mission[MissionName] = {} + self.Players[PlayerName].Mission[MissionName].ScoreTask = 0 + self.Players[PlayerName].Mission[MissionName].ScoreMission = 0 + end + + self:T( PlayerName ) + self:T( self.Players[PlayerName].Mission[MissionName] ) + + self.Players[PlayerName].Score = self.Players[PlayerName].Score + Score + self.Players[PlayerName].Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score + + MESSAGE:New( "Player '" .. PlayerName .. "' has finished another Task in Mission '" .. MissionName .. "'. " .. + Score .. " Score points added.", + "", 20, "/SCORETASK" .. PlayerName ):ToAll() + + self:ScoreCSV( PlayerName, "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score, PlayerUnit:getName() ) +end + + +--- Registers Mission Scores for possible multiple players that contributed in the Mission. +function SCORING:_AddMissionScore( MissionName, Score ) + self:F( { MissionName, Score } ) + + for PlayerName, PlayerData in pairs( self.Players ) do + + if PlayerData.Mission[MissionName] then + PlayerData.Score = PlayerData.Score + Score + PlayerData.Mission[MissionName].ScoreMission = PlayerData.Mission[MissionName].ScoreMission + Score + MESSAGE:New( "Player '" .. PlayerName .. "' has finished Mission '" .. MissionName .. "'. " .. + Score .. " Score points added.", + "", 20, "/SCOREMISSION" .. PlayerName ):ToAll() + self:ScoreCSV( PlayerName, "MISSION_" .. MissionName:gsub( ' ', '_' ), 1, Score ) + end + end +end + +--- Handles the OnHit event for the scoring. +-- @param #SCORING self +-- @param Event#EVENTDATA Event +function SCORING:_EventOnHit( Event ) + self:F( { Event } ) + + local InitUnit = nil + local InitUnitName = "" + local InitGroup = nil + local InitGroupName = "" + local InitPlayerName = nil + + local InitCoalition = nil + local InitCategory = nil + local InitType = nil + local InitUnitCoalition = nil + local InitUnitCategory = nil + local InitUnitType = nil + + local TargetUnit = nil + local TargetUnitName = "" + local TargetGroup = nil + local TargetGroupName = "" + local TargetPlayerName = "" + + local TargetCoalition = nil + local TargetCategory = nil + local TargetType = nil + local TargetUnitCoalition = nil + local TargetUnitCategory = nil + local TargetUnitType = nil + + if Event.IniDCSUnit then + + InitUnit = Event.IniDCSUnit + InitUnitName = Event.IniDCSUnitName + InitGroup = Event.IniDCSGroup + InitGroupName = Event.IniDCSGroupName + InitPlayerName = InitUnit:getPlayerName() + + InitCoalition = InitUnit:getCoalition() + --TODO: Workaround Client DCS Bug + --InitCategory = InitUnit:getCategory() + InitCategory = InitUnit:getDesc().category + InitType = InitUnit:getTypeName() + + InitUnitCoalition = _SCORINGCoalition[InitCoalition] + InitUnitCategory = _SCORINGCategory[InitCategory] + InitUnitType = InitType + + self:T( { InitUnitName, InitGroupName, InitPlayerName, InitCoalition, InitCategory, InitType , InitUnitCoalition, InitUnitCategory, InitUnitType } ) + end + + + if Event.TgtDCSUnit then + + TargetUnit = Event.TgtDCSUnit + TargetUnitName = Event.TgtDCSUnitName + TargetGroup = Event.TgtDCSGroup + TargetGroupName = Event.TgtDCSGroupName + TargetPlayerName = TargetUnit:getPlayerName() + + TargetCoalition = TargetUnit:getCoalition() + --TODO: Workaround Client DCS Bug + --TargetCategory = TargetUnit:getCategory() + TargetCategory = TargetUnit:getDesc().category + TargetType = TargetUnit:getTypeName() + + TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] + TargetUnitCategory = _SCORINGCategory[TargetCategory] + TargetUnitType = TargetType + + self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType, TargetUnitCoalition, TargetUnitCategory, TargetUnitType } ) + end + + if InitPlayerName ~= nil then -- It is a player that is hitting something + self:_AddPlayerFromUnit( InitUnit ) + if self.Players[InitPlayerName] then -- This should normally not happen, but i'll test it anyway. + if TargetPlayerName ~= nil then -- It is a player hitting another player ... + self:_AddPlayerFromUnit( TargetUnit ) + self.Players[InitPlayerName].HitPlayers = self.Players[InitPlayerName].HitPlayers + 1 + end + + self:T( "Hitting Something" ) + -- What is he hitting? + if TargetCategory then + if not self.Players[InitPlayerName].Hit[TargetCategory] then + self.Players[InitPlayerName].Hit[TargetCategory] = {} + end + if not self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] then + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] = {} + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = 0 + end + local Score = 0 + if InitCoalition == TargetCoalition then + self.Players[InitPlayerName].Penalty = self.Players[InitPlayerName].Penalty + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit + 1 + MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit .. " times. Penalty: -" .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty .. + ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, + "", + 2, + "/PENALTY" .. InitPlayerName .. "/" .. InitUnitName + ):ToAll() + self:ScoreCSV( InitPlayerName, "HIT_PENALTY", 1, -25, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + else + self.Players[InitPlayerName].Score = self.Players[InitPlayerName].Score + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score + 1 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit + 1 + MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a target " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit .. " times. Score: " .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score .. + ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, + "", + 2, + "/SCORE" .. InitPlayerName .. "/" .. InitUnitName + ):ToAll() + self:ScoreCSV( InitPlayerName, "HIT_SCORE", 1, 1, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + end + end + end + elseif InitPlayerName == nil then -- It is an AI hitting a player??? + + end +end + + +function SCORING:ReportScoreAll() + + env.info( "Hello World " ) + + local ScoreMessage = "" + local PlayerMessage = "" + + self:T( "Score Report" ) + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local PlayerScore = 0 + local PlayerPenalty = 0 + + ScoreMessage = ":\n" + + local ScoreMessageHits = "" + + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( CategoryName ) + if PlayerData.Hit[CategoryID] then + local Score = 0 + local ScoreHit = 0 + local Penalty = 0 + local PenaltyHit = 0 + self:T( "Hit scores exist for player " .. PlayerName ) + for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do + Score = Score + UnitData.Score + ScoreHit = ScoreHit + UnitData.ScoreHit + Penalty = Penalty + UnitData.Penalty + PenaltyHit = UnitData.PenaltyHit + end + local ScoreMessageHit = string.format( "%s:%d ", CategoryName, Score - Penalty ) + self:T( ScoreMessageHit ) + ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageHits ~= "" then + ScoreMessage = ScoreMessage .. " Hits: " .. ScoreMessageHits .. "\n" + end + + local ScoreMessageKills = "" + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( "Kill scores exist for player " .. PlayerName ) + if PlayerData.Kill[CategoryID] then + local Score = 0 + local ScoreKill = 0 + local Penalty = 0 + local PenaltyKill = 0 + + for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do + Score = Score + UnitData.Score + ScoreKill = ScoreKill + UnitData.ScoreKill + Penalty = Penalty + UnitData.Penalty + PenaltyKill = PenaltyKill + UnitData.PenaltyKill + end + + local ScoreMessageKill = string.format( " %s:%d ", CategoryName, Score - Penalty ) + self:T( ScoreMessageKill ) + ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill + + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageKills ~= "" then + ScoreMessage = ScoreMessage .. " Kills: " .. ScoreMessageKills .. "\n" + end + + local ScoreMessageCoalitionChangePenalties = "" + if PlayerData.PenaltyCoalition ~= 0 then + ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) + PlayerPenalty = PlayerPenalty + PlayerData.Penalty + end + if ScoreMessageCoalitionChangePenalties ~= "" then + ScoreMessage = ScoreMessage .. " Coalition Penalties: " .. ScoreMessageCoalitionChangePenalties .. "\n" + end + + local ScoreMessageMission = "" + local ScoreMission = 0 + local ScoreTask = 0 + for MissionName, MissionData in pairs( PlayerData.Mission ) do + ScoreMission = ScoreMission + MissionData.ScoreMission + ScoreTask = ScoreTask + MissionData.ScoreTask + ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " + end + PlayerScore = PlayerScore + ScoreMission + ScoreTask + + if ScoreMessageMission ~= "" then + ScoreMessage = ScoreMessage .. " Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")\n" + end + + PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score:%d (%d Score -%d Penalties)%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) + end + end + MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() +end + + +function SCORING:ReportScorePlayer() + + env.info( "Hello World " ) + + local ScoreMessage = "" + local PlayerMessage = "" + + self:T( "Score Report" ) + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local PlayerScore = 0 + local PlayerPenalty = 0 + + ScoreMessage = "" + + local ScoreMessageHits = "" + + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( CategoryName ) + if PlayerData.Hit[CategoryID] then + local Score = 0 + local ScoreHit = 0 + local Penalty = 0 + local PenaltyHit = 0 + self:T( "Hit scores exist for player " .. PlayerName ) + for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do + Score = Score + UnitData.Score + ScoreHit = ScoreHit + UnitData.ScoreHit + Penalty = Penalty + UnitData.Penalty + PenaltyHit = UnitData.PenaltyHit + end + local ScoreMessageHit = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreHit, PenaltyHit ) + self:T( ScoreMessageHit ) + ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageHits ~= "" then + ScoreMessage = ScoreMessage .. "\n Hits: " .. ScoreMessageHits .. " " + end + + local ScoreMessageKills = "" + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( "Kill scores exist for player " .. PlayerName ) + if PlayerData.Kill[CategoryID] then + local Score = 0 + local ScoreKill = 0 + local Penalty = 0 + local PenaltyKill = 0 + + for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do + Score = Score + UnitData.Score + ScoreKill = ScoreKill + UnitData.ScoreKill + Penalty = Penalty + UnitData.Penalty + PenaltyKill = PenaltyKill + UnitData.PenaltyKill + end + + local ScoreMessageKill = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreKill, PenaltyKill ) + self:T( ScoreMessageKill ) + ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill + + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageKills ~= "" then + ScoreMessage = ScoreMessage .. "\n Kills: " .. ScoreMessageKills .. " " + end + + local ScoreMessageCoalitionChangePenalties = "" + if PlayerData.PenaltyCoalition ~= 0 then + ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) + PlayerPenalty = PlayerPenalty + PlayerData.Penalty + end + if ScoreMessageCoalitionChangePenalties ~= "" then + ScoreMessage = ScoreMessage .. "\n Coalition: " .. ScoreMessageCoalitionChangePenalties .. " " + end + + local ScoreMessageMission = "" + local ScoreMission = 0 + local ScoreTask = 0 + for MissionName, MissionData in pairs( PlayerData.Mission ) do + ScoreMission = ScoreMission + MissionData.ScoreMission + ScoreTask = ScoreTask + MissionData.ScoreTask + ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " + end + PlayerScore = PlayerScore + ScoreMission + ScoreTask + + if ScoreMessageMission ~= "" then + ScoreMessage = ScoreMessage .. "\n Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ") " + end + + PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties ):%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) + end + end + MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() + +end + + +function SCORING:SecondsToClock(sSeconds) + local nSeconds = sSeconds + if nSeconds == 0 then + --return nil; + return "00:00:00"; + else + nHours = string.format("%02.f", math.floor(nSeconds/3600)); + nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); + nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); + return nHours..":"..nMins..":"..nSecs + end +end + +--- Opens a score CSV file to log the scores. +-- @param #SCORING self +-- @param #string ScoringCSV +-- @return #SCORING self +-- @usage +-- -- Open a new CSV file to log the scores of the game Gori Valley. Let the name of the CSV file begin with "Player Scores". +-- ScoringObject = SCORING:New( "Gori Valley" ) +-- ScoringObject:OpenCSV( "Player Scores" ) +function SCORING:OpenCSV( ScoringCSV ) + self:F( ScoringCSV ) + + if lfs and io and os then + if ScoringCSV then + self.ScoringCSV = ScoringCSV + local fdir = lfs.writedir() .. [[Logs\]] .. self.ScoringCSV .. " " .. os.date( "%Y-%m-%d %H-%M-%S" ) .. ".csv" + + self.CSVFile, self.err = io.open( fdir, "w+" ) + if not self.CSVFile then + error( "Error: Cannot open CSV file in " .. lfs.writedir() ) + end + + self.CSVFile:write( '"GameName","RunTime","Time","PlayerName","ScoreType","PlayerUnitCoaltion","PlayerUnitCategory","PlayerUnitType","PlayerUnitName","TargetUnitCoalition","TargetUnitCategory","TargetUnitType","TargetUnitName","Times","Score"\n' ) + + self.RunTime = os.date("%y-%m-%d_%H-%M-%S") + else + error( "A string containing the CSV file name must be given." ) + end + else + self:E( "The MissionScripting.lua file has not been changed to allow lfs, io and os modules to be used..." ) + end + return self +end + + +--- Registers a score for a player. +-- @param #SCORING self +-- @param #string PlayerName The name of the player. +-- @param #string ScoreType The type of the score. +-- @param #string ScoreTimes The amount of scores achieved. +-- @param #string ScoreAmount The score given. +-- @param #string PlayerUnitName The unit name of the player. +-- @param #string PlayerUnitCoalition The coalition of the player unit. +-- @param #string PlayerUnitCategory The category of the player unit. +-- @param #string PlayerUnitType The type of the player unit. +-- @param #string TargetUnitName The name of the target unit. +-- @param #string TargetUnitCoalition The coalition of the target unit. +-- @param #string TargetUnitCategory The category of the target unit. +-- @param #string TargetUnitType The type of the target unit. +-- @return #SCORING self +function SCORING:ScoreCSV( PlayerName, ScoreType, ScoreTimes, ScoreAmount, PlayerUnitName, PlayerUnitCoalition, PlayerUnitCategory, PlayerUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + --write statistic information to file + local ScoreTime = self:SecondsToClock( timer.getTime() ) + PlayerName = PlayerName:gsub( '"', '_' ) + + if PlayerUnitName and PlayerUnitName ~= '' then + local PlayerUnit = Unit.getByName( PlayerUnitName ) + + if PlayerUnit then + if not PlayerUnitCategory then + --PlayerUnitCategory = SCORINGCategory[PlayerUnit:getCategory()] + PlayerUnitCategory = _SCORINGCategory[PlayerUnit:getDesc().category] + end + + if not PlayerUnitCoalition then + PlayerUnitCoalition = _SCORINGCoalition[PlayerUnit:getCoalition()] + end + + if not PlayerUnitType then + PlayerUnitType = PlayerUnit:getTypeName() + end + else + PlayerUnitName = '' + PlayerUnitCategory = '' + PlayerUnitCoalition = '' + PlayerUnitType = '' + end + else + PlayerUnitName = '' + PlayerUnitCategory = '' + PlayerUnitCoalition = '' + PlayerUnitType = '' + end + + if not TargetUnitCoalition then + TargetUnitCoalition = '' + end + + if not TargetUnitCategory then + TargetUnitCategory = '' + end + + if not TargetUnitType then + TargetUnitType = '' + end + + if not TargetUnitName then + TargetUnitName = '' + end + + if lfs and io and os then + self.CSVFile:write( + '"' .. self.GameName .. '"' .. ',' .. + '"' .. self.RunTime .. '"' .. ',' .. + '' .. ScoreTime .. '' .. ',' .. + '"' .. PlayerName .. '"' .. ',' .. + '"' .. ScoreType .. '"' .. ',' .. + '"' .. PlayerUnitCoalition .. '"' .. ',' .. + '"' .. PlayerUnitCategory .. '"' .. ',' .. + '"' .. PlayerUnitType .. '"' .. ',' .. + '"' .. PlayerUnitName .. '"' .. ',' .. + '"' .. TargetUnitCoalition .. '"' .. ',' .. + '"' .. TargetUnitCategory .. '"' .. ',' .. + '"' .. TargetUnitType .. '"' .. ',' .. + '"' .. TargetUnitName .. '"' .. ',' .. + '' .. ScoreTimes .. '' .. ',' .. + '' .. ScoreAmount + ) + + self.CSVFile:write( "\n" ) + end +end + + +function SCORING:CloseCSV() + if lfs and io and os then + self.CSVFile:close() + end +end + +--- CARGO Classes +-- @module CARGO + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) +Include.File( "Scheduler" ) + + +--- Clients are those Groups defined within the Mission Editor that have the skillset defined as "Client" or "Player". +-- These clients are defined within the Mission Orchestration Framework (MOF) + +CARGOS = {} + + +CARGO_ZONE = { + ClassName="CARGO_ZONE", + CargoZoneName = '', + CargoHostUnitName = '', + SIGNAL = { + TYPE = { + SMOKE = { ID = 1, TEXT = "smoke" }, + FLARE = { ID = 2, TEXT = "flare" } + }, + COLOR = { + GREEN = { ID = 1, TRIGGERCOLOR = trigger.smokeColor.Green, TEXT = "A green" }, + RED = { ID = 2, TRIGGERCOLOR = trigger.smokeColor.Red, TEXT = "A red" }, + WHITE = { ID = 3, TRIGGERCOLOR = trigger.smokeColor.White, TEXT = "A white" }, + ORANGE = { ID = 4, TRIGGERCOLOR = trigger.smokeColor.Orange, TEXT = "An orange" }, + BLUE = { ID = 5, TRIGGERCOLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, + YELLOW = { ID = 6, TRIGGERCOLOR = trigger.flareColor.Yellow, TEXT = "A yellow" } + } + } +} + +--- Creates a new zone where cargo can be collected or deployed. +-- The zone functionality is useful to smoke or indicate routes for cargo pickups or deployments. +-- Provide the zone name as declared in the mission file into the CargoZoneName in the :New method. +-- An optional parameter is the CargoHostName, which is a Group declared with Late Activation switched on in the mission file. +-- The CargoHostName is the "host" of the cargo zone: +-- +-- * It will smoke the zone position when a client is approaching the zone. +-- * Depending on the cargo type, it will assist in the delivery of the cargo by driving to and from the client. +-- +-- @param #CARGO_ZONE self +-- @param #string CargoZoneName The name of the zone as declared within the mission editor. +-- @param #string CargoHostName The name of the Group "hosting" the zone. The Group MUST NOT be a static, and must be a "mobile" unit. +function CARGO_ZONE:New( CargoZoneName, CargoHostName ) local self = BASE:Inherit( self, ZONE:New( CargoZoneName ) ) + self:F( { CargoZoneName, CargoHostName } ) + + self.CargoZoneName = CargoZoneName + self.SignalHeight = 2 + --self.CargoZone = trigger.misc.getZone( CargoZoneName ) + + + if CargoHostName then + self.CargoHostName = CargoHostName + end + + self:T( self.CargoZoneName ) + + return self +end + +function CARGO_ZONE:Spawn() + self:F( self.CargoHostName ) + + if self.CargoHostName then -- Only spawn a host in the zone when there is one given as a parameter in the New function. + if self.CargoHostSpawn then + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() + if CargoHostGroup and CargoHostGroup:IsAlive() then + else + self.CargoHostSpawn:ReSpawn( 1 ) + end + else + self:T( "Initialize CargoHostSpawn" ) + self.CargoHostSpawn = SPAWN:New( self.CargoHostName ):Limit( 1, 1 ) + self.CargoHostSpawn:ReSpawn( 1 ) + end + end + + return self +end + +function CARGO_ZONE:GetHostUnit() + self:F( self ) + + if self.CargoHostName then + + -- A Host has been given, signal the host + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() + local CargoHostUnit + if CargoHostGroup and CargoHostGroup:IsAlive() then + CargoHostUnit = CargoHostGroup:GetUnit(1) + else + CargoHostUnit = StaticObject.getByName( self.CargoHostName ) + end + + return CargoHostUnit + end + + return nil +end + +function CARGO_ZONE:ReportCargosToClient( Client, CargoType ) + self:F() + + local SignalUnit = self:GetHostUnit() + + if SignalUnit then + + local SignalUnitTypeName = SignalUnit:getTypeName() + + local HostMessage = "" + + local IsCargo = false + for CargoID, Cargo in pairs( CARGOS ) do + if Cargo.CargoType == Task.CargoType then + if Cargo:IsStatusNone() then + HostMessage = HostMessage .. " - " .. Cargo.CargoName .. " - " .. Cargo.CargoType .. " (" .. Cargo.Weight .. "kg)" .. "\n" + IsCargo = true + end + end + end + + if not IsCargo then + HostMessage = "No Cargo Available." + end + + Client:Message( HostMessage, 20, Mission.Name .. "/StageHosts." .. SignalUnitTypeName, SignalUnitTypeName .. ": Reporting Cargo", 10 ) + end +end + + +function CARGO_ZONE:Signal() + self:F() + + local Signalled = false + + if self.SignalType then + + if self.CargoHostName then + + -- A Host has been given, signal the host + + local SignalUnit = self:GetHostUnit() + + if SignalUnit then + + self:T( 'Signalling Unit' ) + local SignalVehiclePos = SignalUnit:GetPointVec3() + SignalVehiclePos.y = SignalVehiclePos.y + 2 + + if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then + + trigger.action.smoke( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR ) + Signalled = true + + elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then + + trigger.action.signalFlare( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR , 0 ) + Signalled = false + + end + end + + else + + local ZonePointVec3 = self:GetPointVec3( self.SignalHeight ) -- Get the zone position + the landheight + 2 meters + + if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then + + trigger.action.smoke( ZonePointVec3, self.SignalColor.TRIGGERCOLOR ) + Signalled = true + + elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then + trigger.action.signalFlare( ZonePointVec3, self.SignalColor.TRIGGERCOLOR, 0 ) + Signalled = false + + end + end + end + + return Signalled + +end + +function CARGO_ZONE:WhiteSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:BlueSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.BLUE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:RedSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:OrangeSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.ORANGE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:GreenSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + + +function CARGO_ZONE:WhiteFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:RedFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:GreenFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:YellowFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.YELLOW + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + + +function CARGO_ZONE:GetCargoHostUnit() + self:F( self ) + + if self.CargoHostSpawn then + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex(1) + if CargoHostGroup and CargoHostGroup:IsAlive() then + local CargoHostUnit = CargoHostGroup:GetUnit(1) + if CargoHostUnit and CargoHostUnit:IsAlive() then + return CargoHostUnit + end + end + end + + return nil +end + +function CARGO_ZONE:GetCargoZoneName() + self:F() + + return self.CargoZoneName +end + +CARGO = { + ClassName = "CARGO", + STATUS = { + NONE = 0, + LOADED = 1, + UNLOADED = 2, + LOADING = 3 + }, + CargoClient = nil +} + +--- Add Cargo to the mission... Cargo functionality needs to be reworked a bit, so this is still under construction. I need to make a CARGO Class... +function CARGO:New( CargoType, CargoName, CargoWeight ) local self = BASE:Inherit( self, BASE:New() ) + self:F( { CargoType, CargoName, CargoWeight } ) + + + self.CargoType = CargoType + self.CargoName = CargoName + self.CargoWeight = CargoWeight + + self:StatusNone() + + return self +end + +function CARGO:Spawn( Client ) + self:F() + + return self + +end + +function CARGO:IsNear( Client, LandingZone ) + self:F() + + local Near = true + + return Near + +end + + +function CARGO:IsLoadingToClient() + self:F() + + if self:IsStatusLoading() then + return self.CargoClient + end + + return nil + +end + + +function CARGO:IsLoadedInClient() + self:F() + + if self:IsStatusLoaded() then + return self.CargoClient + end + + return nil + +end + + +function CARGO:UnLoad( Client, TargetZoneName ) + self:F() + + self:StatusUnLoaded() + + return self +end + +function CARGO:OnBoard( Client, LandingZone ) + self:F() + + local Valid = true + + self.CargoClient = Client + local ClientUnit = Client:GetClientGroupDCSUnit() + + return Valid +end + +function CARGO:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = true + + return OnBoarded +end + +function CARGO:Load( Client ) + self:F() + + self:StatusLoaded( Client ) + + return self +end + +function CARGO:IsLandingRequired() + self:F() + return true +end + +function CARGO:IsSlingLoad() + self:F() + return false +end + + +function CARGO:StatusNone() + self:F() + + self.CargoClient = nil + self.CargoStatus = CARGO.STATUS.NONE + + return self +end + +function CARGO:StatusLoading( Client ) + self:F() + + self.CargoClient = Client + self.CargoStatus = CARGO.STATUS.LOADING + self:T( "Cargo " .. self.CargoName .. " loading to Client: " .. self.CargoClient:GetClientGroupName() ) + + return self +end + +function CARGO:StatusLoaded( Client ) + self:F() + + self.CargoClient = Client + self.CargoStatus = CARGO.STATUS.LOADED + self:T( "Cargo " .. self.CargoName .. " loaded in Client: " .. self.CargoClient:GetClientGroupName() ) + + return self +end + +function CARGO:StatusUnLoaded() + self:F() + + self.CargoClient = nil + self.CargoStatus = CARGO.STATUS.UNLOADED + + return self +end + + +function CARGO:IsStatusNone() + self:F() + + return self.CargoStatus == CARGO.STATUS.NONE +end + +function CARGO:IsStatusLoading() + self:F() + + return self.CargoStatus == CARGO.STATUS.LOADING +end + +function CARGO:IsStatusLoaded() + self:F() + + return self.CargoStatus == CARGO.STATUS.LOADED +end + +function CARGO:IsStatusUnLoaded() + self:F() + + return self.CargoStatus == CARGO.STATUS.UNLOADED +end + + +CARGO_GROUP = { + ClassName = "CARGO_GROUP" +} + + +function CARGO_GROUP:New( CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone } ) + + self.CargoSpawn = SPAWN:NewWithAlias( CargoGroupTemplate, CargoName ) + self.CargoZone = CargoZone + + CARGOS[self.CargoName] = self + + return self + +end + +function CARGO_GROUP:Spawn( Client ) + self:F( { Client } ) + + local SpawnCargo = true + + if self:IsStatusNone() then + local CargoGroup = Group.getByName( self.CargoName ) + if CargoGroup and CargoGroup:isExist() then + SpawnCargo = false + end + + elseif self:IsStatusLoading() then + + local Client = self:IsLoadingToClient() + if Client and Client:GetDCSGroup() then + SpawnCargo = false + else + local CargoGroup = Group.getByName( self.CargoName ) + if CargoGroup and CargoGroup:isExist() then + SpawnCargo = false + end + end + + elseif self:IsStatusLoaded() then + + local ClientLoaded = self:IsLoadedInClient() + -- Now test if another Client is alive (not this one), and it has the CARGO, then this cargo does not need to be initialized and spawned. + if ClientLoaded and ClientLoaded ~= Client then + local ClientGroup = Client:GetDCSGroup() + if ClientLoaded:GetClientGroupDCSUnit() and ClientLoaded:GetClientGroupDCSUnit():isExist() then + SpawnCargo = false + else + self:StatusNone() + end + else + -- Same Client, but now in initialize, so set back the status to None. + self:StatusNone() + end + + elseif self:IsStatusUnLoaded() then + + SpawnCargo = false + + end + + if SpawnCargo then + if self.CargoZone:GetCargoHostUnit() then + --- ReSpawn the Cargo from the CargoHost + self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30, 1 ):GetName() + else + --- ReSpawn the Cargo in the CargoZone without a host ... + self:T( self.CargoZone ) + self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone, true, 1 ):GetName() + end + self:StatusNone() + end + + self:T( { self.CargoGroupName, CARGOS[self.CargoName].CargoGroupName } ) + + return self +end + +function CARGO_GROUP:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + if self.CargoGroupName then + local CargoGroup = Group.getByName( self.CargoGroupName ) + if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 250 ) then + Near = true + end + end + + return Near + +end + + +function CARGO_GROUP:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + local ClientUnit = Client:GetClientGroupDCSUnit() + + local CarrierPos = ClientUnit:getPoint() + local CarrierPosMove = ClientUnit:getPoint() + local CarrierPosOnBoard = ClientUnit:getPoint() + + local CargoGroup = Group.getByName( self.CargoGroupName ) + + local CargoUnit = CargoGroup:getUnit(1) + local CargoPos = CargoUnit:getPoint() + + self.CargoInAir = CargoUnit:inAir() + + self:T( self.CargoInAir ) + + -- Only move the group to the carrier when the cargo is not in the air + -- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea). + if not self.CargoInAir then + + local Points = {} + + self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) + self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) + + Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) + + self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) + + if OnBoardSide == nil then + OnBoardSide = CLIENT.ONBOARDSIDE.NONE + end + + if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then + + self:T( "TransportCargoOnBoard: Onboarding LEFT" ) + CarrierPosMove.z = CarrierPosMove.z - 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then + + self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) + CarrierPosMove.z = CarrierPosMove.z + 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then + + self:T( "TransportCargoOnBoard: Onboarding BACK" ) + CarrierPosMove.x = CarrierPosMove.x - 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then + + self:T( "TransportCargoOnBoard: Onboarding CENTRAL" ) + Points[#Points+1] = routines.ground.buildWP( CarrierPos, "Cone", 10 ) + + end + self:T( "TransportCargoOnBoard: Routing " .. self.CargoGroupName ) + + --routines.scheduleFunction( routines.goRoute, { self.CargoGroupName, Points}, timer.getTime() + 4 ) + SCHEDULER:New( self, routines.goRoute, { self.CargoGroupName, Points}, 4 ) + end + + self:StatusLoading( Client ) + + return Valid + +end + + +function CARGO_GROUP:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + local CargoGroup = Group.getByName( self.CargoGroupName ) + + if not self.CargoInAir then + if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 25 ) then + CargoGroup:destroy() + self:StatusLoaded( Client ) + OnBoarded = true + end + else + CargoGroup:destroy() + self:StatusLoaded( Client ) + OnBoarded = true + end + + return OnBoarded +end + + +function CARGO_GROUP:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + + local CargoGroup = self.CargoSpawn:SpawnFromUnit( Client:GetClientGroupUnit(), 60, 30 ) + + self.CargoGroupName = CargoGroup:GetName() + self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) + + CargoGroup:TaskRouteToZone( ZONE:New( TargetZoneName ), true ) + + self:StatusUnLoaded() + + return self +end + + +CARGO_PACKAGE = { + ClassName = "CARGO_PACKAGE" +} + + +function CARGO_PACKAGE:New( CargoType, CargoName, CargoWeight, CargoClient ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoClient } ) + + self.CargoClient = CargoClient + + CARGOS[self.CargoName] = self + + return self + +end + + +function CARGO_PACKAGE:Spawn( Client ) + self:F( { self, Client } ) + + -- this needs to be checked thoroughly + + local CargoClientGroup = self.CargoClient:GetDCSGroup() + if not CargoClientGroup then + if not self.CargoClientSpawn then + self.CargoClientSpawn = SPAWN:New( self.CargoClient:GetClientGroupName() ):Limit( 1, 1 ) + end + self.CargoClientSpawn:ReSpawn( 1 ) + end + + local SpawnCargo = true + + if self:IsStatusNone() then + + elseif self:IsStatusLoading() or self:IsStatusLoaded() then + + local CargoClientLoaded = self:IsLoadedInClient() + if CargoClientLoaded and CargoClientLoaded:GetDCSGroup() then + SpawnCargo = false + end + + elseif self:IsStatusUnLoaded() then + + SpawnCargo = false + + else + + end + + if SpawnCargo then + self:StatusLoaded( self.CargoClient ) + end + + return self +end + + +function CARGO_PACKAGE:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + if self.CargoClient and self.CargoClient:GetDCSGroup() then + self:T( self.CargoClient.ClientName ) + self:T( 'Client Exists.' ) + + if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), Client:GetPositionVec3(), 150 ) then + Near = true + end + end + + return Near + +end + + +function CARGO_PACKAGE:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + local ClientUnit = Client:GetClientGroupDCSUnit() + + local CarrierPos = ClientUnit:getPoint() + local CarrierPosMove = ClientUnit:getPoint() + local CarrierPosOnBoard = ClientUnit:getPoint() + local CarrierPosMoveAway = ClientUnit:getPoint() + + local CargoHostGroup = self.CargoClient:GetDCSGroup() + local CargoHostName = self.CargoClient:GetDCSGroup():getName() + + local CargoHostUnits = CargoHostGroup:getUnits() + local CargoPos = CargoHostUnits[1]:getPoint() + + local Points = {} + + self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) + self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) + + Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) + + self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) + + if OnBoardSide == nil then + OnBoardSide = CLIENT.ONBOARDSIDE.NONE + end + + if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then + + self:T( "TransportCargoOnBoard: Onboarding LEFT" ) + CarrierPosMove.z = CarrierPosMove.z - 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 + CarrierPosMoveAway.z = CarrierPosMoveAway.z - 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then + + self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) + CarrierPosMove.z = CarrierPosMove.z + 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 + CarrierPosMoveAway.z = CarrierPosMoveAway.z + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then + + self:T( "TransportCargoOnBoard: Onboarding BACK" ) + CarrierPosMove.x = CarrierPosMove.x - 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x - 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + end + self:T( "Routing " .. CargoHostName ) + + --routines.scheduleFunction( routines.goRoute, { CargoHostName, Points}, timer.getTime() + 4 ) + SCHEDULER:New( self, routines.goRoute, { CargoHostName, Points }, 4 ) + + return Valid + +end + + +function CARGO_PACKAGE:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + if self.CargoClient and self.CargoClient:GetDCSGroup() then + if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), self.CargoClient:GetPositionVec3(), 10 ) then + + -- Switch Cargo from self.CargoClient to Client ... Each cargo can have only one client. So assigning the new client for the cargo is enough. + self:StatusLoaded( Client ) + + -- All done, onboarded the Cargo to the new Client. + OnBoarded = true + end + end + + return OnBoarded +end + + +function CARGO_PACKAGE:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + --self:T( 'self.CargoHostName = ' .. self.CargoHostName ) + + --self.CargoSpawn:FromCarrier( Client:GetDCSGroup(), TargetZoneName, self.CargoHostName ) + self:StatusUnLoaded() + + return Cargo +end + + +CARGO_SLINGLOAD = { + ClassName = "CARGO_SLINGLOAD" +} + + +function CARGO_SLINGLOAD:New( CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID ) + local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID } ) + + self.CargoHostName = CargoHostName + + -- Cargo will be initialized around the CargoZone position. + self.CargoZone = CargoZone + + self.CargoCount = 0 + self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) + + -- The country ID needs to be correctly set. + self.CargoCountryID = CargoCountryID + + CARGOS[self.CargoName] = self + + return self + +end + + +function CARGO_SLINGLOAD:IsLandingRequired() + self:F() + return false +end + + +function CARGO_SLINGLOAD:IsSlingLoad() + self:F() + return true +end + + +function CARGO_SLINGLOAD:Spawn( Client ) + self:F( { self, Client } ) + + local Zone = trigger.misc.getZone( self.CargoZone ) + + local ZonePos = {} + ZonePos.x = Zone.point.x + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) + ZonePos.y = Zone.point.z + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) + + self:T( "Cargo Location = " .. ZonePos.x .. ", " .. ZonePos.y ) + + --[[ + -- This does not work in 1.5.2. + CargoStatic = StaticObject.getByName( self.CargoName ) + if CargoStatic then + CargoStatic:destroy() + end + --]] + + CargoStatic = StaticObject.getByName( self.CargoStaticName ) + + if CargoStatic and CargoStatic:isExist() then + CargoStatic:destroy() + end + + -- I need to make every time a new cargo due to bugs in 1.5.2. + + self.CargoCount = self.CargoCount + 1 + self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) + + local CargoTemplate = { + ["category"] = "Cargo", + ["shape_name"] = "ab-212_cargo", + ["type"] = "Cargo1", + ["x"] = ZonePos.x, + ["y"] = ZonePos.y, + ["mass"] = self.CargoWeight, + ["name"] = self.CargoStaticName, + ["canCargo"] = true, + ["heading"] = 0, + } + + coalition.addStaticObject( self.CargoCountryID, CargoTemplate ) + +-- end + + return self +end + + +function CARGO_SLINGLOAD:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + return Near +end + + +function CARGO_SLINGLOAD:IsInLandingZone( Client, LandingZone ) + self:F() + + local Near = false + + local CargoStaticUnit = StaticObject.getByName( self.CargoName ) + if CargoStaticUnit then + if routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then + Near = true + end + end + + return Near +end + + +function CARGO_SLINGLOAD:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + + return Valid +end + + +function CARGO_SLINGLOAD:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + local CargoStaticUnit = StaticObject.getByName( self.CargoName ) + if CargoStaticUnit then + if not routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then + OnBoarded = true + end + end + + return OnBoarded +end + + +function CARGO_SLINGLOAD:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) + + self:StatusUnLoaded() + + return Cargo +end +--- Message System to display Messages for Clients and Coalitions or All. +-- Messages are grouped on the display panel per Category to improve readability for the players. +-- Messages are shown on the display panel for an amount of seconds, and will then disappear. +-- Messages are identified by an ID. The messages with the same ID belonging to the same category will be overwritten if they were still being displayed on the display panel. +-- Messages are created with MESSAGE:@{New}(). +-- Messages are sent to Clients with MESSAGE:@{ToClient}(). +-- Messages are sent to Coalitions with MESSAGE:@{ToCoalition}(). +-- Messages are sent to All Players with MESSAGE:@{ToAll}(). +-- @module Message + +Include.File( "Base" ) + +--- The MESSAGE class +-- @type MESSAGE +MESSAGE = { + ClassName = "MESSAGE", + MessageCategory = 0, + MessageID = 0, +} + + +--- Creates a new MESSAGE object. Note that these MESSAGE objects are not yet displayed on the display panel. You must use the functions @{ToClient} or @{ToCoalition} or @{ToAll} to send these Messages to the respective recipients. +-- @param self +-- @param #string MessageText is the text of the Message. +-- @param #string MessageCategory is a string expressing the Category of the Message. Messages are grouped on the display panel per Category to improve readability. +-- @param #number MessageDuration is a number in seconds of how long the MESSAGE should be shown on the display panel. +-- @param #string MessageID is a string expressing the ID of the Message. +-- @return #MESSAGE +-- @usage +-- -- Create a series of new Messages. +-- -- MessageAll is meant to be sent to all players, for 25 seconds, and is classified as "Score". +-- -- MessageRED is meant to be sent to the RED players only, for 10 seconds, and is classified as "End of Mission", with ID "Win". +-- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". +-- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ) +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) +function MESSAGE:New( MessageText, MessageCategory, MessageDuration, MessageID ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MessageText, MessageCategory, MessageDuration, MessageID } ) + + -- When no messagecategory is given, we don't show it as a title... + if MessageCategory and MessageCategory ~= "" then + self.MessageCategory = MessageCategory .. ": " + else + self.MessageCategory = "" + end + + self.MessageDuration = MessageDuration + self.MessageID = MessageID + self.MessageTime = timer.getTime() + self.MessageText = MessageText + + self.MessageSent = false + self.MessageGroup = false + self.MessageCoalition = false + + return self +end + +--- Sends a MESSAGE to a Client Group. Note that the Group needs to be defined within the ME with the skillset "Client" or "Player". +-- @param #MESSAGE self +-- @param Client#CLIENT Client is the Group of the Client. +-- @return #MESSAGE +-- @usage +-- -- Send the 2 messages created with the @{New} method to the Client Group. +-- -- Note that the Message of MessageClient2 is overwriting the Message of MessageClient1. +-- ClientGroup = Group.getByName( "ClientGroup" ) +-- +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- or +-- MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- or +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) +-- MessageClient1:ToClient( ClientGroup ) +-- MessageClient2:ToClient( ClientGroup ) +function MESSAGE:ToClient( Client ) + self:F( Client ) + + if Client and Client:GetClientGroupID() then + + local ClientGroupID = Client:GetClientGroupID() + self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) + trigger.action.outTextForGroup( ClientGroupID, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) + end + + return self +end + +--- Sends a MESSAGE to the Blue coalition. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the BLUE coalition. +-- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() +-- or +-- MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() +-- or +-- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageBLUE:ToBlue() +function MESSAGE:ToBlue() + self:F() + + self:ToCoalition( coalition.side.BLUE ) + + return self +end + +--- Sends a MESSAGE to the Red Coalition. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the RED coalition. +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() +-- or +-- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() +-- or +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageRED:ToRed() +function MESSAGE:ToRed( ) + self:F() + + self:ToCoalition( coalition.side.RED ) + + return self +end + +--- Sends a MESSAGE to a Coalition. +-- @param #MESSAGE self +-- @param CoalitionSide needs to be filled out by the defined structure of the standard scripting engine @{coalition.side}. +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the RED coalition. +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) +-- or +-- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) +-- or +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageRED:ToCoalition( coalition.side.RED ) +function MESSAGE:ToCoalition( CoalitionSide ) + self:F( CoalitionSide ) + + if CoalitionSide then + self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) + trigger.action.outTextForCoalition( CoalitionSide, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) + end + + return self +end + +--- Sends a MESSAGE to all players. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created to all players. +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() +-- or +-- MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() +-- or +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ) +-- MessageAll:ToAll() +function MESSAGE:ToAll() + self:F() + + self:ToCoalition( coalition.side.RED ) + self:ToCoalition( coalition.side.BLUE ) + + return self +end + + + +--- The MESSAGEQUEUE class +-- @type MESSAGEQUEUE +MESSAGEQUEUE = { + ClientGroups = {}, + CoalitionSides = {} +} + +function MESSAGEQUEUE:New( RefreshInterval ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { RefreshInterval } ) + + self.RefreshInterval = RefreshInterval + + --self.DisplayFunction = routines.scheduleFunction( self._DisplayMessages, { self }, 0, RefreshInterval ) + self.DisplayFunction = SCHEDULER:New( self, self._DisplayMessages, {}, 0, RefreshInterval ) + + return self +end + +--- This function is called automatically by the MESSAGEQUEUE scheduler. +function MESSAGEQUEUE:_DisplayMessages() + + -- First we display all messages that a coalition needs to receive... Also those who are not in a client (CA module clients...). + for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do + for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do + if MessageData.MessageSent == false then + --trigger.action.outTextForCoalition( CoalitionSideID, MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageSent = true + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + end + + -- Then we send the messages for each individual client, but also to be included are those Coalition messages for the Clients who belong to a coalition. + -- Because the Client messages will overwrite the Coalition messages (for that Client). + for ClientGroupName, ClientGroupData in pairs( self.ClientGroups ) do + for MessageID, MessageData in pairs( ClientGroupData.Messages ) do + if MessageData.MessageGroup == false then + trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageGroup = true + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + + -- Now check if the Client also has messages that belong to the Coalition of the Client... + for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do + for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do + local CoalitionGroup = Group.getByName( ClientGroupName ) + if CoalitionGroup and CoalitionGroup:getCoalition() == CoalitionSideID then + if MessageData.MessageCoalition == false then + trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageCoalition = true + end + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + end + end + + return true +end + +--- The _MessageQueue object is created when the MESSAGE class module is loaded. +--_MessageQueue = MESSAGEQUEUE:New( 0.5 ) + +--- Stages within a @{TASK} within a @{MISSION}. All of the STAGE functionality is considered internally administered and not to be used by any Mission designer. +-- @module STAGE +-- @author Flightcontrol + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The STAGE class +-- @type +STAGE = { + ClassName = "STAGE", + MSG = { ID = "None", TIME = 10 }, + FREQUENCY = { NONE = 0, ONCE = 1, REPEAT = -1 }, + + Name = "NoStage", + StageType = '', + WaitTime = 1, + Frequency = 1, + MessageCount = 0, + MessageInterval = 15, + MessageShown = {}, + MessageShow = false, + MessageFlash = false +} + + +function STAGE:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F() + return self +end + +function STAGE:Execute( Mission, Client, Task ) + + local Valid = true + + return Valid +end + +function STAGE:Executing( Mission, Client, Task ) + +end + +function STAGE:Validate( Mission, Client, Task ) + local Valid = true + + return Valid +end + + +STAGEBRIEF = { + ClassName = "BRIEF", + MSG = { ID = "Brief", TIME = 1 }, + Name = "Brief", + StageBriefingTime = 0, + StageBriefingDuration = 1 +} + +function STAGEBRIEF:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Execute +-- @param #STAGEBRIEF self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +-- @return #boolean +function STAGEBRIEF:Execute( Mission, Client, Task ) + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + self:F() + Client:ShowMissionBriefing( Mission.MissionBriefing ) + self.StageBriefingTime = timer.getTime() + return Valid +end + +function STAGEBRIEF:Validate( Mission, Client, Task ) + local Valid = STAGE:Validate( Mission, Client, Task ) + self:T() + + if timer.getTime() - self.StageBriefingTime <= self.StageBriefingDuration then + return 0 + else + self.StageBriefingTime = timer.getTime() + return 1 + end + +end + + +STAGESTART = { + ClassName = "START", + MSG = { ID = "Start", TIME = 1 }, + Name = "Start", + StageStartTime = 0, + StageStartDuration = 1 +} + +function STAGESTART:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGESTART:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + if Task.TaskBriefing then + Client:Message( Task.TaskBriefing, 30, Mission.Name .. "/Stage", "Command" ) + else + Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, Mission.Name .. "/Stage", "Command" ) + end + self.StageStartTime = timer.getTime() + return Valid +end + +function STAGESTART:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + if timer.getTime() - self.StageStartTime <= self.StageStartDuration then + return 0 + else + self.StageStartTime = timer.getTime() + return 1 + end + + return 1 + +end + +STAGE_CARGO_LOAD = { + ClassName = "STAGE_CARGO_LOAD" +} + +function STAGE_CARGO_LOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGE_CARGO_LOAD:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + for LoadCargoID, LoadCargo in pairs( Task.Cargos.LoadCargos ) do + LoadCargo:Load( Client ) + end + + if Mission.MissionReportFlash and Client:IsTransport() then + Client:ShowCargo() + end + + return Valid +end + +function STAGE_CARGO_LOAD:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + return 1 +end + + +STAGE_CARGO_INIT = { + ClassName = "STAGE_CARGO_INIT" +} + +function STAGE_CARGO_INIT:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGE_CARGO_INIT:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + for InitLandingZoneID, InitLandingZone in pairs( Task.LandingZones.LandingZones ) do + self:T( InitLandingZone ) + InitLandingZone:Spawn() + end + + + self:T( Task.Cargos.InitCargos ) + for InitCargoID, InitCargoData in pairs( Task.Cargos.InitCargos ) do + self:T( { InitCargoData } ) + InitCargoData:Spawn( Client ) + end + + return Valid +end + + +function STAGE_CARGO_INIT:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + return 1 +end + + + +STAGEROUTE = { + ClassName = "STAGEROUTE", + MSG = { ID = "Route", TIME = 5 }, + Frequency = STAGE.FREQUENCY.REPEAT, + Name = "Route" +} + +function STAGEROUTE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + self.MessageSwitch = true + return self +end + + +--- Execute the routing. +-- @param #STAGEROUTE self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEROUTE:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + local RouteMessage = "Fly to: " + self:T( Task.LandingZones ) + for LandingZoneID, LandingZoneName in pairs( Task.LandingZones.LandingZoneNames ) do + RouteMessage = RouteMessage .. "\n " .. LandingZoneName .. ' at ' .. routines.getBRStringZone( { zone = LandingZoneName, ref = Client:GetClientGroupDCSUnit():getPoint(), true, true } ) .. ' km.' + end + + if Client:IsMultiSeated() then + Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot", 20 ) + else + Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Command", 20 ) + end + + + if Mission.MissionReportFlash and Client:IsTransport() then + Client:ShowCargo() + end + + return Valid +end + +function STAGEROUTE:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + -- check if the Client is in the landing zone + self:T( Task.LandingZones.LandingZoneNames ) + Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) + + if Task.CurrentLandingZoneName then + + Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone + Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] + + if Task.CurrentCargoZone then + if not Task.Signalled then + Task.Signalled = Task.CurrentCargoZone:Signal() + end + end + + self:T( 1 ) + return 1 + end + + self:T( 0 ) + return 0 +end + + + +STAGELANDING = { + ClassName = "STAGELANDING", + MSG = { ID = "Landing", TIME = 10 }, + Name = "Landing", + Signalled = false +} + +function STAGELANDING:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Execute the landing coordination. +-- @param #STAGELANDING self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGELANDING:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( "We have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Co-Pilot", 10 ) + else + Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Command", 10 ) + end + + Task.HostUnit = Task.CurrentCargoZone:GetHostUnit() + + self:T( { Task.HostUnit } ) + + if Task.HostUnit then + + Task.HostUnitName = Task.HostUnit:GetPrefix() + Task.HostUnitTypeName = Task.HostUnit:GetTypeName() + + local HostMessage = "" + Task.CargoNames = "" + + local IsFirst = true + + for CargoID, Cargo in pairs( CARGOS ) do + if Cargo.CargoType == Task.CargoType then + + if Cargo:IsLandingRequired() then + self:T( "Task for cargo " .. Cargo.CargoType .. " requires landing.") + Task.IsLandingRequired = true + end + + if Cargo:IsSlingLoad() then + self:T( "Task for cargo " .. Cargo.CargoType .. " is a slingload.") + Task.IsSlingLoad = true + end + + if IsFirst then + IsFirst = false + Task.CargoNames = Task.CargoNames .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" + else + Task.CargoNames = Task.CargoNames .. "; " .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" + end + end + end + + if Task.IsLandingRequired then + HostMessage = "Land the helicopter to " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." + else + HostMessage = "Use the Radio menu and F6 to find the cargo, then fly or land near the cargo and " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." + end + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Host, Host, 10 ) + + end +end + +function STAGELANDING:Validate( Mission, Client, Task ) + self:F() + + Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) + if Task.CurrentLandingZoneName then + + -- Client is in de landing zone. + self:T( Task.CurrentLandingZoneName ) + + Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone + Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] + + if Task.CurrentCargoZone then + if not Task.Signalled then + Task.Signalled = Task.CurrentCargoZone:Signal() + end + end + else + if Task.CurrentLandingZone then + Task.CurrentLandingZone = nil + end + if Task.CurrentCargoZone then + Task.CurrentCargoZone = nil + end + Task.Signalled = false + Task:RemoveCargoMenus( Client ) + self:T( -1 ) + return -1 + end + + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and not Client:GetClientGroupDCSUnit():inAir() then + self:T( 1 ) + Task.IsInAirTestRequired = true + return 1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and DCSUnitVelocity <= 0.05 and DCSUnitHeight <= Task.CurrentCargoZone.SignalHeight then + self:T( 1 ) + Task.IsInAirTestRequired = false + return 1 + end + + self:T( 0 ) + return 0 +end + +STAGELANDED = { + ClassName = "STAGELANDED", + MSG = { ID = "Land", TIME = 10 }, + Name = "Landed", + MenusAdded = false +} + +function STAGELANDED:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGELANDED:Execute( Mission, Client, Task ) + self:F() + + if Task.IsLandingRequired then + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.', + self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC" .. Host, Host ) + + if not self.MenusAdded then + Task.Cargo = nil + Task:RemoveCargoMenus( Client ) + Task:AddCargoMenus( Client, CARGOS, 250 ) + end + end +end + + + +function STAGELANDED:Validate( Mission, Client, Task ) + self:F() + + if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." ) + Task.Signalled = false + Task:RemoveCargoMenus( Client ) + self:T( -2 ) + return -2 + end + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then + self:T( "Client went back in the air. Go back to stage Landing." ) + self:T( -1 ) + return -1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then + self:T( "It seems the Client went back in the air and over the boundary limits. Go back to stage Landing." ) + self:T( -1 ) + return -1 + end + + -- Wait until cargo is selected from the menu. + if Task.IsLandingRequired then + if not Task.Cargo then + self:T( 0 ) + return 0 + end + end + + self:T( 1 ) + return 1 +end + +STAGEUNLOAD = { + ClassName = "STAGEUNLOAD", + MSG = { ID = "Unload", TIME = 10 }, + Name = "Unload" +} + +function STAGEUNLOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Coordinate UnLoading +-- @param #STAGEUNLOAD self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEUNLOAD:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Co-Pilot" ) + else + Client:Message( 'You are unloading the ' .. Task.CargoType .. ' ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Command" ) + end + Task:RemoveCargoMenus( Client ) +end + +function STAGEUNLOAD:Executing( Mission, Client, Task ) + self:F() + env.info( 'STAGEUNLOAD:Executing() Task.Cargo.CargoName = ' .. Task.Cargo.CargoName ) + + local TargetZoneName + + if Task.TargetZoneName then + TargetZoneName = Task.TargetZoneName + else + TargetZoneName = Task.CurrentLandingZoneName + end + + if Task.Cargo:UnLoad( Client, TargetZoneName ) then + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + if Mission.MissionReportFlash then + Client:ShowCargo() + end + end +end + +--- Validate UnLoading +-- @param #STAGEUNLOAD self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEUNLOAD:Validate( Mission, Client, Task ) + self:F() + env.info( 'STAGEUNLOAD:Validate()' ) + + if routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + else + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task:RemoveCargoMenus( Client ) + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) + end + return 1 + end + + if not Client:GetClientGroupDCSUnit():inAir() then + else + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task:RemoveCargoMenus( Client ) + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) + end + return 1 + end + + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Command" ) + end + Task:RemoveCargoMenus( Client ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) -- We set the cargo as one more goal completed in the mission. + return 1 + end + + return 1 +end + +STAGELOAD = { + ClassName = "STAGELOAD", + MSG = { ID = "Load", TIME = 10 }, + Name = "Load" +} + +function STAGELOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGELOAD:Execute( Mission, Client, Task ) + self:F() + + if not Task.IsSlingLoad then + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Host, Host ) + + -- Route the cargo to the Carrier + + Task.Cargo:OnBoard( Client, Task.CurrentCargoZone, Task.OnBoardSide ) + Task.ExecuteStage = _TransportExecuteStage.EXECUTING + else + Task.ExecuteStage = _TransportExecuteStage.EXECUTING + end +end + +function STAGELOAD:Executing( Mission, Client, Task ) + self:F() + + -- If the Cargo is ready to be loaded, load it into the Client. + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + if not Task.IsSlingLoad then + self:T( Task.Cargo.CargoName) + + if Task.Cargo:OnBoarded( Client, Task.CurrentCargoZone ) then + + -- Load the Cargo onto the Client + Task.Cargo:Load( Client ) + + -- Message to the pilot that cargo has been loaded. + Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.", + 20, Mission.Name .. "/STAGELANDING.LOADING1." .. Host, Host ) + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + + Client:ShowCargo() + end + else + Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.", + _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Host, Host , 10 ) + for CargoID, Cargo in pairs( CARGOS ) do + self:T( "Cargo.CargoName = " .. Cargo.CargoName ) + + if Cargo:IsSlingLoad() then + local CargoStatic = StaticObject.getByName( Cargo.CargoStaticName ) + if CargoStatic then + self:T( "Cargo is found in the DCS simulator.") + local CargoStaticPosition = CargoStatic:getPosition().p + self:T( "Cargo Position x = " .. CargoStaticPosition.x .. ", y = " .. CargoStaticPosition.y .. ", z = " .. CargoStaticPosition.z ) + local CargoStaticHeight = routines.GetUnitHeight( CargoStatic ) + if CargoStaticHeight > 5 then + self:T( "Cargo is airborne.") + Cargo:StatusLoaded() + Task.Cargo = Cargo + Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.', + self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Host, Host ) + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + break + end + else + self:T( "Cargo not found in the DCS simulator." ) + end + end + end + end + +end + +function STAGELOAD:Validate( Mission, Client, Task ) + self:F() + + self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName ) + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + if not Task.IsSlingLoad then + if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + Task:RemoveCargoMenus( Client ) + Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Host, Host ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) + self:T( 1 ) + return 1 + end + + else + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName ) + if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then + Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Host, Host ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 ) + self:T( 1 ) + return 1 + end + end + + end + + + self:T( 0 ) + return 0 +end + + +STAGEDONE = { + ClassName = "STAGEDONE", + MSG = { ID = "Done", TIME = 10 }, + Name = "Done" +} + +function STAGEDONE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'AI' + return self +end + +function STAGEDONE:Execute( Mission, Client, Task ) + self:F() + +end + +function STAGEDONE:Validate( Mission, Client, Task ) + self:F() + + Task:Done() + + return 0 +end + +STAGEARRIVE = { + ClassName = "STAGEARRIVE", + MSG = { ID = "Arrive", TIME = 10 }, + Name = "Arrive" +} + +function STAGEARRIVE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + + +--- Execute Arrival +-- @param #STAGEARRIVE self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEARRIVE:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Co-Pilot" ) + else + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Command" ) + end + +end + +function STAGEARRIVE:Validate( Mission, Client, Task ) + self:F() + + Task.CurrentLandingZoneID = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones ) + if ( Task.CurrentLandingZoneID ) then + else + return -1 + end + + return 1 +end + +STAGEGROUPSDESTROYED = { + ClassName = "STAGEGROUPSDESTROYED", + DestroyGroupSize = -1, + Frequency = STAGE.FREQUENCY.REPEAT, + MSG = { ID = "DestroyGroup", TIME = 10 }, + Name = "GroupsDestroyed" +} + +function STAGEGROUPSDESTROYED:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'AI' + return self +end + +--function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) +-- +-- Client:Message( 'Task: Still ' .. DestroyGroupSize .. " of " .. Task.DestroyGroupCount .. " " .. Task.DestroyGroupType .. " to be destroyed!", self.MSG.TIME, Mission.Name .. "/Stage" ) +-- +--end + +function STAGEGROUPSDESTROYED:Validate( Mission, Client, Task ) + self:F() + + if Task.MissionTask:IsGoalReached() then + return 1 + else + return 0 + end +end + +function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) + self:F() + self:T( { Task.ClassName, Task.Destroyed } ) + --env.info( 'Event Table Task = ' .. tostring(Task) ) + +end + + + + + + + + + + + + + +--[[ + _TransportStage: Defines the different stages of which of transport missions can be in. This table is internal and is used to control the sequence of messages, actions and flow. + + - _TransportStage.START + - _TransportStage.ROUTE + - _TransportStage.LAND + - _TransportStage.EXECUTE + - _TransportStage.DONE + - _TransportStage.REMOVE +--]] +_TransportStage = { + HOLD = "HOLD", + START = "START", + ROUTE = "ROUTE", + LANDING = "LANDING", + LANDED = "LANDED", + EXECUTING = "EXECUTING", + LOAD = "LOAD", + UNLOAD = "UNLOAD", + DONE = "DONE", + NEXT = "NEXT" +} + +_TransportStageMsgTime = { + HOLD = 10, + START = 60, + ROUTE = 5, + LANDING = 10, + LANDED = 30, + EXECUTING = 30, + LOAD = 30, + UNLOAD = 30, + DONE = 30, + NEXT = 0 +} + +_TransportStageTime = { + HOLD = 10, + START = 5, + ROUTE = 5, + LANDING = 1, + LANDED = 1, + EXECUTING = 5, + LOAD = 5, + UNLOAD = 5, + DONE = 1, + NEXT = 0 +} + +_TransportStageAction = { + REPEAT = -1, + NONE = 0, + ONCE = 1 +} +--- The TASK Classes define major end-to-end activities within a MISSION. The TASK Class is the Master Class to orchestrate these activities. From this class, many concrete TASK classes are inherited. +-- @module TASK + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Stage" ) + +--- The TASK class +-- @type TASK +-- @extends Base#BASE +TASK = { + + -- Defines the different signal types with a Task. + SIGNAL = { + COLOR = { + RED = { ID = 1, COLOR = trigger.smokeColor.Red, TEXT = "A red" }, + GREEN = { ID = 2, COLOR = trigger.smokeColor.Green, TEXT = "A green" }, + BLUE = { ID = 3, COLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, + WHITE = { ID = 4, COLOR = trigger.smokeColor.White, TEXT = "A white" }, + ORANGE = { ID = 5, COLOR = trigger.smokeColor.Orange, TEXT = "An orange" } + }, + TYPE = { + SMOKE = { ID = 1, TEXT = "smoke" }, + FLARE = { ID = 2, TEXT = "flare" } + } + }, + ClassName = "TASK", + Mission = {}, -- Owning mission of the Task + Name = '', + Stages = {}, + Stage = {}, + Cargos = { + InitCargos = {}, + LoadCargos = {} + }, + LandingZones = { + LandingZoneNames = {}, + LandingZones = {} + }, + ActiveStage = 0, + TaskDone = false, + TaskFailed = false, + GoalTasks = {} +} + +--- Instantiates a new TASK Base. Should never be used. Interface Class. +-- @return TASK +function TASK:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F() + + -- assign Task default values during construction + self.TaskBriefing = "Task: No Task." + self.Time = timer.getTime() + self.ExecuteStage = _TransportExecuteStage.NONE + + return self +end + +function TASK:SetStage( StageSequenceIncrement ) + self:F( { StageSequenceIncrement } ) + + local Valid = false + if StageSequenceIncrement ~= 0 then + self.ActiveStage = self.ActiveStage + StageSequenceIncrement + if 1 <= self.ActiveStage and self.ActiveStage <= #self.Stages then + self.Stage = self.Stages[self.ActiveStage] + self:T( { self.Stage.Name } ) + self.Frequency = self.Stage.Frequency + Valid = true + else + Valid = false + env.info( "TASK:SetStage() self.ActiveStage is smaller or larger than self.Stages array. self.ActiveStage = " .. self.ActiveStage ) + end + end + self.Time = timer.getTime() + return Valid +end + +function TASK:Init() + self:F() + self.ActiveStage = 0 + self:SetStage(1) + self.TaskDone = false + self.TaskFailed = false +end + + +--- Get progress of a TASK. +-- @return string GoalsText +function TASK:GetGoalProgress() + self:F2() + + local GoalsText = "" + for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do + local Goals = self:GetGoalCompletion( GoalVerb ) + if Goals and Goals ~= "" then + Goals = '(' .. Goals .. ')' + else + Goals = '( - )' + end + GoalsText = GoalsText .. GoalVerb .. ': ' .. self:GetGoalCount(GoalVerb) .. ' goals ' .. Goals .. ' of ' .. self:GetGoalTotal(GoalVerb) .. ' goals completed (' .. self:GetGoalPercentage(GoalVerb) .. '%); ' + end + + if GoalsText == "" then + GoalsText = "( - )" + end + + return GoalsText +end + +--- Show progress of a TASK. +-- @param MISSION Mission Group structure describing the Mission. +-- @param CLIENT Client Group structure describing the Client. +function TASK:ShowGoalProgress( Mission, Client ) + self:F2() + + local GoalsText = "" + for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do + if Mission:IsCompleted() then + else + local Goals = self:GetGoalCompletion( GoalVerb ) + if Goals and Goals ~= "" then + else + Goals = "-" + end + GoalsText = GoalsText .. self:GetGoalProgress() + end + end + + if Mission.MissionReportFlash or Mission.MissionReportShow then + Client:Message( GoalsText, 10, "/TASKPROGRESS" .. self.ClassName, "Mission Command: Task Status", 30 ) + end +end + +--- Sets a TASK to status Done. +function TASK:Done() + self:F2() + self.TaskDone = true +end + +--- Returns if a TASK is done. +-- @return bool +function TASK:IsDone() + self:F2( self.TaskDone ) + return self.TaskDone +end + +--- Sets a TASK to status failed. +function TASK:Failed() + self:F() + self.TaskFailed = true +end + +--- Returns if a TASk has failed. +-- @return bool +function TASK:IsFailed() + self:F2( self.TaskFailed ) + return self.TaskFailed +end + +function TASK:Reset( Mission, Client ) + self:F2() + self.ExecuteStage = _TransportExecuteStage.NONE +end + +--- Returns the Goals of a TASK +-- @return @table Goals +function TASK:GetGoals() + return self.GoalTasks +end + +--- Returns if a TASK has Goal(s). +-- @param #TASK self +-- @param #string GoalVerb is the name of the Goal of the TASK. +-- @return bool +function TASK:Goal( GoalVerb ) + self:F2( { GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + self:T2( {self.GoalTasks[GoalVerb] } ) + if self.GoalTasks[GoalVerb] and self.GoalTasks[GoalVerb].GoalTotal > 0 then + return true + else + return false + end +end + +--- Sets the total Goals to be achieved of the Goal Name +-- @param number GoalTotal is the number of times the GoalVerb needs to be achieved. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +function TASK:SetGoalTotal( GoalTotal, GoalVerb ) + self:F2( { GoalTotal, GoalVerb } ) + + if not GoalVerb then + GoalVerb = self.GoalVerb + end + self.GoalTasks[GoalVerb] = {} + self.GoalTasks[GoalVerb].Goals = {} + self.GoalTasks[GoalVerb].GoalTotal = GoalTotal + self.GoalTasks[GoalVerb].GoalCount = 0 + return self +end + +--- Gets the total of Goals to be achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +function TASK:GetGoalTotal( GoalVerb ) + self:F2( { GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return self.GoalTasks[GoalVerb].GoalTotal + else + return 0 + end +end + +--- Sets the total of Goals currently achieved within the TASK of the GoalVerb. +-- @param number GoalCount is the total number of Goals achieved within the TASK. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:SetGoalCount( GoalCount, GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb) then + self.GoalTasks[GoalVerb].GoalCount = GoalCount + end + return self +end + +--- Increments the total of Goals currently achieved within the TASK of the GoalVerb, with the given GoalCountIncrease. +-- @param number GoalCountIncrease is the number of new Goals achieved within the TASK. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:IncreaseGoalCount( GoalCountIncrease, GoalVerb ) + self:F2( { GoalCountIncrease, GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb) then + self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalCountIncrease + end + return self +end + +--- Gets the total of Goals currently achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:GetGoalCount( GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return self.GoalTasks[GoalVerb].GoalCount + else + return 0 + end +end + +--- Gets the percentage of Goals currently achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:GetGoalPercentage( GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return math.floor( self:GetGoalCount( GoalVerb ) / self:GetGoalTotal( GoalVerb ) * 100 + .5 ) + else + return 100 + end +end + +--- Returns if all the Goals of the TASK were achieved. +-- @return bool +function TASK:IsGoalReached() + self:F2() + + local GoalReached = true + + for GoalVerb, Goals in pairs( self.GoalTasks ) do + self:T2( { "GoalVerb", GoalVerb } ) + if self:Goal( GoalVerb ) then + local GoalToDo = self:GetGoalTotal( GoalVerb ) - self:GetGoalCount( GoalVerb ) + self:T2( "GoalToDo = " .. GoalToDo ) + if GoalToDo <= 0 then + else + GoalReached = false + break + end + else + break + end + end + + self:T( { GoalReached, self.GoalTasks } ) + return GoalReached +end + +--- Adds an Additional Goal for the TASK to be achieved. +-- @param string GoalVerb is the name of the Goal of the TASK. +-- @param string GoalTask is a text describing the Goal of the TASK to be achieved. +-- @param number GoalIncrease is a number by which the Goal achievement is increasing. +function TASK:AddGoalCompletion( GoalVerb, GoalTask, GoalIncrease ) + self:F2( { GoalVerb, GoalTask, GoalIncrease } ) + + if self:Goal( GoalVerb ) then + self.GoalTasks[GoalVerb].Goals[#self.GoalTasks[GoalVerb].Goals+1] = GoalTask + self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalIncrease + end + return self +end + +--- Returns if the additional Goal for the TASK was completed. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return string Goals +function TASK:GetGoalCompletion( GoalVerb ) + self:F2( { GoalVerb } ) + + if self:Goal( GoalVerb ) then + local Goals = "" + for GoalID, GoalName in pairs( self.GoalTasks[GoalVerb].Goals ) do Goals = Goals .. GoalName .. " + " end + return Goals:gsub(" + $", ""), self.GoalTasks[GoalVerb].GoalCount + end +end + +function TASK.MenuAction( Parameter ) + Parameter.ReferenceTask.ExecuteStage = _TransportExecuteStage.EXECUTING + Parameter.ReferenceTask.Cargo = Parameter.CargoTask +end + +function TASK:StageExecute() + self:F() + + local Execute = false + + if self.Frequency == STAGE.FREQUENCY.REPEAT then + Execute = true + elseif self.Frequency == STAGE.FREQUENCY.NONE then + Execute = false + elseif self.Frequency >= 0 then + Execute = true + self.Frequency = self.Frequency - 1 + end + + return Execute + +end + +--- Work function to set signal events within a TASK. +function TASK:AddSignal( SignalUnitNames, SignalType, SignalColor, SignalHeight ) + self:F() + + local Valid = true + + if Valid then + if type( SignalUnitNames ) == "table" then + self.LandingZoneSignalUnitNames = SignalUnitNames + else + self.LandingZoneSignalUnitNames = { SignalUnitNames } + end + self.LandingZoneSignalType = SignalType + self.LandingZoneSignalColor = SignalColor + self.Signalled = false + if SignalHeight ~= nil then + self.LandingZoneSignalHeight = SignalHeight + else + self.LandingZoneSignalHeight = 0 + end + + if self.TaskBriefing then + self.TaskBriefing = self.TaskBriefing .. " " .. SignalColor.TEXT .. " " .. SignalType.TEXT .. " will be fired when entering the landing zone." + end + end + + return Valid +end + +--- When the CLIENT is approaching the landing zone, a RED SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeRed( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.RED, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a GREEN SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeGreen( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a BLUE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeBlue( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a WHITE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeWhite( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, an ORANGE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeOrange( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a RED FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareRed( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.RED, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a GREEN FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareGreen( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a BLUE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareBlue( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a WHITE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareWhite( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, an ORANGE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareOrange( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) +end +--- A GOHOMETASK orchestrates the travel back to the home base, which is a specific zone defined within the ME. +-- @module GOHOMETASK + +Include.File("Task") + +--- The GOHOMETASK class +-- @type +GOHOMETASK = { + ClassName = "GOHOMETASK", +} + +--- Creates a new GOHOMETASK. +-- @param table{string,...}|string LandingZones Table of Landing Zone names where Home(s) are located. +-- @return GOHOMETASK +function GOHOMETASK:New( LandingZones ) + local self = BASE:Inherit( self, TASK:New() ) + self:F( { LandingZones } ) + local Valid = true + + Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) + + if Valid then + self.Name = 'Fly Home' + self.TaskBriefing = "Task: Fly back to your home base. Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to your home base." + if type( LandingZones ) == "table" then + self.LandingZones = LandingZones + else + self.LandingZones = { LandingZones } + end + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end +--- A DESTROYBASETASK will monitor the destruction of Groups and Units. This is a BASE class, other classes are derived from this class. +-- @module DESTROYBASETASK +-- @see DESTROYGROUPSTASK +-- @see DESTROYUNITTYPESTASK +-- @see DESTROY_RADARS_TASK + +Include.File("Task") + +--- The DESTROYBASETASK class +-- @type DESTROYBASETASK +DESTROYBASETASK = { + ClassName = "DESTROYBASETASK", + Destroyed = 0, + GoalVerb = "Destroy", + DestroyPercentage = 100, +} + +--- Creates a new DESTROYBASETASK. +-- @param #DESTROYBASETASK self +-- @param #string DestroyGroupType Text describing the group to be destroyed. f.e. "Radar Installations", "Ships", "Vehicles", "Command Centers". +-- @param #string DestroyUnitType Text describing the unit types to be destroyed. f.e. "SA-6", "Row Boats", "Tanks", "Tents". +-- @param #list<#string> DestroyGroupPrefixes Table of Prefixes of the Groups to be destroyed before task is completed. +-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. +-- @return DESTROYBASETASK +function DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupPrefixes, DestroyPercentage ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + self.Name = 'Destroy' + self.Destroyed = 0 + self.DestroyGroupPrefixes = DestroyGroupPrefixes + self.DestroyGroupType = DestroyGroupType + self.DestroyUnitType = DestroyUnitType + if DestroyPercentage then + self.DestroyPercentage = DestroyPercentage + end + self.TaskBriefing = "Task: Destroy " .. DestroyGroupType .. "." + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEGROUPSDESTROYED:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + + return self +end + +--- Handle the S_EVENT_DEAD events to validate the destruction of units for the task monitoring. +-- @param #DESTROYBASETASK self +-- @param Event#EVENTDATA Event structure of MOOSE. +function DESTROYBASETASK:EventDead( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + local DestroyUnit = Event.IniDCSUnit + local DestroyUnitName = Event.IniDCSUnitName + local DestroyGroup = Event.IniDCSGroup + local DestroyGroupName = Event.IniDCSGroupName + + --TODO: I need to fix here if 2 groups in the mission have a similar name with GroupPrefix equal, then i should differentiate for which group the goal was reached! + --I may need to test if for the goalverb that group goal was reached or something. Need to think about it a bit more ... + local UnitsDestroyed = 0 + for DestroyGroupPrefixID, DestroyGroupPrefix in pairs( self.DestroyGroupPrefixes ) do + self:T( DestroyGroupPrefix ) + if string.find( DestroyGroupName, DestroyGroupPrefix, 1, true ) then + self:T( BASE:Inherited(self).ClassName ) + UnitsDestroyed = self:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:T( UnitsDestroyed ) + end + end + + self:T( { UnitsDestroyed } ) + self:IncreaseGoalCount( UnitsDestroyed, self.GoalVerb ) + end + +end + +--- Validate task completeness of DESTROYBASETASK. +-- @param DestroyGroup Group structure describing the group to be evaluated. +-- @param DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYBASETASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F() + + return 0 +end +--- DESTROYGROUPSTASK +-- @module DESTROYGROUPSTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYGROUPSTASK class +-- @type +DESTROYGROUPSTASK = { + ClassName = "DESTROYGROUPSTASK", + GoalVerb = "Destroy Groups", +} + +--- Creates a new DESTROYGROUPSTASK. +-- @param #DESTROYGROUPSTASK self +-- @param #string DestroyGroupType String describing the group to be destroyed. +-- @param #string DestroyUnitType String describing the unit to be destroyed. +-- @param #list<#string> DestroyGroupNames Table of string containing the name of the groups to be destroyed before task is completed. +-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. +---@return DESTROYGROUPSTASK +function DESTROYGROUPSTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) + local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) ) + self:F() + + self.Name = 'Destroy Groups' + self.GoalVerb = "Destroy " .. DestroyGroupType + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + _EVENTDISPATCHER:OnCrash( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param #DESTROYGROUPSTASK self +-- @param DCSGroup#Group DestroyGroup Group structure describing the group to be evaluated. +-- @param DCSUnit#Unit DestroyUnit Unit structure describing the Unit to be evaluated. +-- @return #number The DestroyCount reflecting the amount of units destroyed within the group. +function DESTROYGROUPSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit, self.DestroyPercentage } ) + + local DestroyGroupSize = DestroyGroup:getSize() - 1 -- When a DEAD event occurs, the getSize is still one larger than the destroyed unit. + local DestroyGroupInitialSize = DestroyGroup:getInitialSize() + self:T( { DestroyGroupSize, DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) } ) + + local DestroyCount = 0 + if DestroyGroup then + if DestroyGroupSize <= DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) then + DestroyCount = 1 + end + else + DestroyCount = 1 + end + + self:T( DestroyCount ) + + return DestroyCount +end +--- Task class to destroy radar installations. +-- @module DESTROYRADARSTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYRADARS class +-- @type +DESTROYRADARSTASK = { + ClassName = "DESTROYRADARSTASK", + GoalVerb = "Destroy Radars" +} + +--- Creates a new DESTROYRADARSTASK. +-- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. +-- @return DESTROYRADARSTASK +function DESTROYRADARSTASK:New( DestroyGroupNames ) + local self = BASE:Inherit( self, DESTROYGROUPSTASK:New( 'radar installations', 'radars', DestroyGroupNames ) ) + self:F() + + self.Name = 'Destroy Radars' + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param Group DestroyGroup Group structure describing the group to be evaluated. +-- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYRADARSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit } ) + + local DestroyCount = 0 + if DestroyUnit and DestroyUnit:hasSensors( Unit.SensorType.RADAR, Unit.RadarType.AS ) then + if DestroyUnit and DestroyUnit:getLife() <= 1.0 then + self:T( 'Destroyed a radar' ) + DestroyCount = 1 + end + end + return DestroyCount +end +--- Set TASK to destroy certain unit types. +-- @module DESTROYUNITTYPESTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYUNITTYPESTASK class +-- @type +DESTROYUNITTYPESTASK = { + ClassName = "DESTROYUNITTYPESTASK", + GoalVerb = "Destroy", +} + +--- Creates a new DESTROYUNITTYPESTASK. +-- @param string DestroyGroupType String describing the group to be destroyed. f.e. "Radar Installations", "Fleet", "Batallion", "Command Centers". +-- @param string DestroyUnitType String describing the unit to be destroyed. f.e. "radars", "ships", "tanks", "centers". +-- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. +-- @param string DestroyUnitTypes Table of string containing the type names of the units to achieve mission success. +-- @return DESTROYUNITTYPESTASK +function DESTROYUNITTYPESTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes ) + local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames ) ) + self:F( { DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes } ) + + if type(DestroyUnitTypes) == 'table' then + self.DestroyUnitTypes = DestroyUnitTypes + else + self.DestroyUnitTypes = { DestroyUnitTypes } + end + + self.Name = 'Destroy Unit Types' + self.GoalVerb = "Destroy " .. DestroyGroupType + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param Group DestroyGroup Group structure describing the group to be evaluated. +-- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYUNITTYPESTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit } ) + + local DestroyCount = 0 + for UnitTypeID, UnitType in pairs( self.DestroyUnitTypes ) do + if DestroyUnit and DestroyUnit:getTypeName() == UnitType then + if DestroyUnit and DestroyUnit:getLife() <= 1.0 then + DestroyCount = DestroyCount + 1 + end + end + end + return DestroyCount +end +--- A PICKUPTASK orchestrates the loading of CARGO at a specific landing zone. +-- @module PICKUPTASK +-- @parent TASK + +Include.File("Task") +Include.File("Cargo") + +--- The PICKUPTASK class +-- @type +PICKUPTASK = { + ClassName = "PICKUPTASK", + TEXT = { "Pick-Up", "picked-up", "loaded" }, + GoalVerb = "Pick-Up" +} + +--- Creates a new PICKUPTASK. +-- @param table{string,...}|string LandingZones Table of Zone names where Cargo is to be loaded. +-- @param CARGO_TYPE CargoType Type of the Cargo. The type must be of the following Enumeration:.. +-- @param number OnBoardSide Reflects from which side the cargo Group will be on-boarded on the Carrier. +function PICKUPTASK:New( CargoType, OnBoardSide ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + -- self holds the inherited instance of the PICKUPTASK Class to the BASE class. + + local Valid = true + + if Valid then + self.Name = 'Pickup Cargo' + self.TaskBriefing = "Task: Fly to the indicated landing zones and pickup " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the pickup zone." + self.CargoType = CargoType + self.GoalVerb = CargoType .. " " .. self.GoalVerb + self.OnBoardSide = OnBoardSide + self.IsLandingRequired = true -- required to decide whether the client needs to land or not + self.IsSlingLoad = false -- Indicates whether the cargo is a sling load cargo + self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGELOAD:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +function PICKUPTASK:FromZone( LandingZone ) + self:F() + + self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName + self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone + + return self +end + +function PICKUPTASK:InitCargo( InitCargos ) + self:F( { InitCargos } ) + + if type( InitCargos ) == "table" then + self.Cargos.InitCargos = InitCargos + else + self.Cargos.InitCargos = { InitCargos } + end + + return self +end + +function PICKUPTASK:LoadCargo( LoadCargos ) + self:F( { LoadCargos } ) + + if type( LoadCargos ) == "table" then + self.Cargos.LoadCargos = LoadCargos + else + self.Cargos.LoadCargos = { LoadCargos } + end + + return self +end + +function PICKUPTASK:AddCargoMenus( Client, Cargos, TransportRadius ) + self:F() + + for CargoID, Cargo in pairs( Cargos ) do + + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) + + -- If the Cargo has no status, allow the menu option. + if Cargo:IsStatusNone() or ( Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() ) then + + local MenuAdd = false + if Cargo:IsNear( Client, self.CurrentCargoZone ) then + MenuAdd = true + end + + if MenuAdd then + if Client._Menus[Cargo.CargoType] == nil then + Client._Menus[Cargo.CargoType] = {} + end + + if not Client._Menus[Cargo.CargoType].PickupMenu then + Client._Menus[Cargo.CargoType].PickupMenu = missionCommands.addSubMenuForGroup( + Client:GetClientGroupID(), + self.TEXT[1] .. " " .. Cargo.CargoType, + nil + ) + self:T( 'Added PickupMenu: ' .. self.TEXT[1] .. " " .. Cargo.CargoType ) + end + + if Client._Menus[Cargo.CargoType].PickupSubMenus == nil then + Client._Menus[Cargo.CargoType].PickupSubMenus = {} + end + + Client._Menus[Cargo.CargoType].PickupSubMenus[ #Client._Menus[Cargo.CargoType].PickupSubMenus + 1 ] = missionCommands.addCommandForGroup( + Client:GetClientGroupID(), + Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", + Client._Menus[Cargo.CargoType].PickupMenu, + self.MenuAction, + { ReferenceTask = self, CargoTask = Cargo } + ) + self:T( 'Added PickupSubMenu' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) + end + end + end + +end + +function PICKUPTASK:RemoveCargoMenus( Client ) + self:F() + + for MenuID, MenuData in pairs( Client._Menus ) do + for SubMenuID, SubMenuData in pairs( MenuData.PickupSubMenus ) do + missionCommands.removeItemForGroup( Client:GetClientGroupID(), SubMenuData ) + self:T( "Removed PickupSubMenu " ) + SubMenuData = nil + end + if MenuData.PickupMenu then + missionCommands.removeItemForGroup( Client:GetClientGroupID(), MenuData.PickupMenu ) + self:T( "Removed PickupMenu " ) + MenuData.PickupMenu = nil + end + end + + for CargoID, Cargo in pairs( CARGOS ) do + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) + if Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() then + Cargo:StatusNone() + end + end + +end + + + +function PICKUPTASK:HasFailed( ClientDead ) + self:F() + + local TaskHasFailed = self.TaskFailed + return TaskHasFailed +end + +--- A DEPLOYTASK orchestrates the deployment of CARGO within a specific landing zone. +-- @module DEPLOYTASK + +Include.File( "Task" ) + +--- A DeployTask +-- @type DEPLOYTASK +DEPLOYTASK = { + ClassName = "DEPLOYTASK", + TEXT = { "Deploy", "deployed", "unloaded" }, + GoalVerb = "Deployment" +} + + +--- Creates a new DEPLOYTASK object, which models the sequence of STAGEs to unload a cargo. +-- @function [parent=#DEPLOYTASK] New +-- @param #string CargoType Type of the Cargo. +-- @return #DEPLOYTASK The created DeployTask +function DEPLOYTASK:New( CargoType ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + local Valid = true + + if Valid then + self.Name = 'Deploy Cargo' + self.TaskBriefing = "Fly to one of the indicated landing zones and deploy " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the deployment zone." + self.CargoType = CargoType + self.GoalVerb = CargoType .. " " .. self.GoalVerb + self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGEUNLOAD:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +function DEPLOYTASK:ToZone( LandingZone ) + self:F() + + self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName + self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone + + return self +end + + +function DEPLOYTASK:InitCargo( InitCargos ) + self:F( { InitCargos } ) + + if type( InitCargos ) == "table" then + self.Cargos.InitCargos = InitCargos + else + self.Cargos.InitCargos = { InitCargos } + end + + return self +end + + +function DEPLOYTASK:LoadCargo( LoadCargos ) + self:F( { LoadCargos } ) + + if type( LoadCargos ) == "table" then + self.Cargos.LoadCargos = LoadCargos + else + self.Cargos.LoadCargos = { LoadCargos } + end + + return self +end + + +--- When the cargo is unloaded, it will move to the target zone name. +-- @param string TargetZoneName Name of the Zone to where the Cargo should move after unloading. +function DEPLOYTASK:SetCargoTargetZoneName( TargetZoneName ) + self:F() + + local Valid = true + + Valid = routines.ValidateString( TargetZoneName, "TargetZoneName", Valid ) + + if Valid then + self.TargetZoneName = TargetZoneName + end + + return Valid + +end + +function DEPLOYTASK:AddCargoMenus( Client, Cargos, TransportRadius ) + self:F() + + local ClientGroupID = Client:GetClientGroupID() + + self:T( ClientGroupID ) + + for CargoID, Cargo in pairs( Cargos ) do + + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo.CargoWeight } ) + + if Cargo:IsStatusLoaded() and Client == Cargo:IsLoadedInClient() then + + if Client._Menus[Cargo.CargoType] == nil then + Client._Menus[Cargo.CargoType] = {} + end + + if not Client._Menus[Cargo.CargoType].DeployMenu then + Client._Menus[Cargo.CargoType].DeployMenu = missionCommands.addSubMenuForGroup( + ClientGroupID, + self.TEXT[1] .. " " .. Cargo.CargoType, + nil + ) + self:T( 'Added DeployMenu ' .. self.TEXT[1] ) + end + + if Client._Menus[Cargo.CargoType].DeploySubMenus == nil then + Client._Menus[Cargo.CargoType].DeploySubMenus = {} + end + + if Client._Menus[Cargo.CargoType].DeployMenu == nil then + self:T( 'deploymenu is nil' ) + end + + Client._Menus[Cargo.CargoType].DeploySubMenus[ #Client._Menus[Cargo.CargoType].DeploySubMenus + 1 ] = missionCommands.addCommandForGroup( + ClientGroupID, + Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", + Client._Menus[Cargo.CargoType].DeployMenu, + self.MenuAction, + { ReferenceTask = self, CargoTask = Cargo } + ) + self:T( 'Added DeploySubMenu ' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) + end + end + +end + +function DEPLOYTASK:RemoveCargoMenus( Client ) + self:F() + + local ClientGroupID = Client:GetClientGroupID() + self:T( ClientGroupID ) + + for MenuID, MenuData in pairs( Client._Menus ) do + if MenuData.DeploySubMenus ~= nil then + for SubMenuID, SubMenuData in pairs( MenuData.DeploySubMenus ) do + missionCommands.removeItemForGroup( ClientGroupID, SubMenuData ) + self:T( "Removed DeploySubMenu " ) + SubMenuData = nil + end + end + if MenuData.DeployMenu then + missionCommands.removeItemForGroup( ClientGroupID, MenuData.DeployMenu ) + self:T( "Removed DeployMenu " ) + MenuData.DeployMenu = nil + end + end + +end +--- A NOTASK is a dummy activity... But it will show a Mission Briefing... +-- @module NOTASK + +Include.File("Task") + +--- The NOTASK class +-- @type +NOTASK = { + ClassName = "NOTASK", +} + +--- Creates a new NOTASK. +function NOTASK:New() + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + local Valid = true + + if Valid then + self.Name = 'Nothing' + self.TaskBriefing = "Task: Execute your mission." + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end +--- A ROUTETASK orchestrates the travel to a specific zone defined within the ME. +-- @module ROUTETASK + +--- The ROUTETASK class +-- @type +ROUTETASK = { + ClassName = "ROUTETASK", + GoalVerb = "Route", +} + +--- Creates a new ROUTETASK. +-- @param table{sring,...}|string LandingZones Table of Zone Names where the target is located. +-- @param string TaskBriefing (optional) Defines a text describing the briefing of the task. +-- @return ROUTETASK +function ROUTETASK:New( LandingZones, TaskBriefing ) + local self = BASE:Inherit( self, TASK:New() ) + self:F( { LandingZones, TaskBriefing } ) + + local Valid = true + + Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) + + if Valid then + self.Name = 'Route To Zone' + if TaskBriefing then + self.TaskBriefing = TaskBriefing .. " Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." + else + self.TaskBriefing = "Task: Fly to specified zone(s). Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." + end + if type( LandingZones ) == "table" then + self.LandingZones = LandingZones + else + self.LandingZones = { LandingZones } + end + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +--- A MISSION is the main owner of a Mission orchestration within MOOSE . The Mission framework orchestrates @{CLIENT}s, @{TASK}s, @{STAGE}s etc. +-- A @{CLIENT} needs to be registered within the @{MISSION} through the function @{AddClient}. A @{TASK} needs to be registered within the @{MISSION} through the function @{AddTask}. +-- @module Mission + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The MISSION class +-- @type MISSION +-- @extends Base#BASE +-- @field #MISSION.Clients _Clients +-- @field #string MissionBriefing +MISSION = { + ClassName = "MISSION", + Name = "", + MissionStatus = "PENDING", + _Clients = {}, + _Tasks = {}, + _ActiveTasks = {}, + GoalFunction = nil, + MissionReportTrigger = 0, + MissionProgressTrigger = 0, + MissionReportShow = false, + MissionReportFlash = false, + MissionTimeInterval = 0, + MissionCoalition = "", + SUCCESS = 1, + FAILED = 2, + REPEAT = 3, + _GoalTasks = {} +} + +--- @type MISSION.Clients +-- @list + +function MISSION:Meta() + + local self = BASE:Inherit( self, BASE:New() ) + self:F() + + return self +end + +--- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. +-- @param string MissionName is the name of the mission. This name will be used to reference the status of each mission by the players. +-- @param string MissionPriority is a string indicating the "priority" of the Mission. f.e. "Primary", "Secondary" or "First", "Second". It is free format and up to the Mission designer to choose. There are no rules behind this field. +-- @param string MissionBriefing is a string indicating the mission briefing to be shown when a player joins a @{CLIENT}. +-- @param string MissionCoalition is a string indicating the coalition or party to which this mission belongs to. It is free format and can be chosen freely by the mission designer. Note that this field is not to be confused with the coalition concept of the ME. Examples of a Mission Coalition could be "NATO", "CCCP", "Intruders", "Terrorists"... +-- @return MISSION +-- @usage +-- -- Declare a few missions. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Patriots', 'Primary', 'Our intelligence reports that 3 Patriot SAM defense batteries are located near Ruisi, Kvarhiti and Gori.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Package Delivery', 'Operational', 'In order to be in full control of the situation, we need you to deliver a very important package at a secret location. Fly undetected through the NATO defenses and deliver the secret package. The secret agent is located at waypoint 4.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue General', 'Tactical', 'Our intelligence has received a remote signal behind Gori. We believe it is a very important Russian General that was captured by Georgia. Go out there and rescue him! Ensure you stay out of the battle zone, keep south. Waypoint 4 is the location of our Russian General.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'SA-6 SAMs', 'Primary', 'Our intelligence reports that 3 SA-6 SAM defense batteries are located near Didmukha, Khetagurov and Berula. Eliminate the Russian SAMs.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Sling Load', 'Operational', 'Fly to the cargo pickup zone at Dzegvi or Kaspi, and sling the cargo to Soganlug airbase.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue secret agent', 'Tactical', 'In order to be in full control of the situation, we need you to rescue a secret agent from the woods behind enemy lines. Avoid the Russian defenses and rescue the agent. Keep south until Khasuri, and keep your eyes open for any SAM presence. The agent is located at waypoint 4 on your kneeboard.', 'NATO' ) +function MISSION:New( MissionName, MissionPriority, MissionBriefing, MissionCoalition ) + + self = MISSION:Meta() + self:T({ MissionName, MissionPriority, MissionBriefing, MissionCoalition }) + + local Valid = true + + Valid = routines.ValidateString( MissionName, "MissionName", Valid ) + Valid = routines.ValidateString( MissionPriority, "MissionPriority", Valid ) + Valid = routines.ValidateString( MissionBriefing, "MissionBriefing", Valid ) + Valid = routines.ValidateString( MissionCoalition, "MissionCoalition", Valid ) + + if Valid then + self.Name = MissionName + self.MissionPriority = MissionPriority + self.MissionBriefing = MissionBriefing + self.MissionCoalition = MissionCoalition + end + + return self +end + +--- Returns if a Mission has completed. +-- @return bool +function MISSION:IsCompleted() + self:F() + return self.MissionStatus == "ACCOMPLISHED" +end + +--- Set a Mission to completed. +function MISSION:Completed() + self:F() + self.MissionStatus = "ACCOMPLISHED" + self:StatusToClients() +end + +--- Returns if a Mission is ongoing. +-- treturn bool +function MISSION:IsOngoing() + self:F() + return self.MissionStatus == "ONGOING" +end + +--- Set a Mission to ongoing. +function MISSION:Ongoing() + self:F() + self.MissionStatus = "ONGOING" + --self:StatusToClients() +end + +--- Returns if a Mission is pending. +-- treturn bool +function MISSION:IsPending() + self:F() + return self.MissionStatus == "PENDING" +end + +--- Set a Mission to pending. +function MISSION:Pending() + self:F() + self.MissionStatus = "PENDING" + self:StatusToClients() +end + +--- Returns if a Mission has failed. +-- treturn bool +function MISSION:IsFailed() + self:F() + return self.MissionStatus == "FAILED" +end + +--- Set a Mission to failed. +function MISSION:Failed() + self:F() + self.MissionStatus = "FAILED" + self:StatusToClients() +end + +--- Send the status of the MISSION to all Clients. +function MISSION:StatusToClients() + self:F() + if self.MissionReportFlash then + for ClientID, Client in pairs( self._Clients ) do + Client:Message( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. '! ( ' .. self.MissionPriority .. ' mission ) ', 10, self.Name .. '/Status', "Mission Command: Mission Status") + end + end +end + +--- Handles the reporting. After certain time intervals, a MISSION report MESSAGE will be shown to All Players. +function MISSION:ReportTrigger() + self:F() + + if self.MissionReportShow == true then + self.MissionReportShow = false + return true + else + if self.MissionReportFlash == true then + if timer.getTime() >= self.MissionReportTrigger then + self.MissionReportTrigger = timer.getTime() + self.MissionTimeInterval + return true + else + return false + end + else + return false + end + end +end + +--- Report the status of all MISSIONs to all active Clients. +function MISSION:ReportToAll() + self:F() + + local AlivePlayers = '' + for ClientID, Client in pairs( self._Clients ) do + if Client:GetDCSGroup() then + if Client:GetClientGroupDCSUnit() then + if Client:GetClientGroupDCSUnit():getLife() > 0.0 then + if AlivePlayers == '' then + AlivePlayers = ' Players: ' .. Client:GetClientGroupDCSUnit():getPlayerName() + else + AlivePlayers = AlivePlayers .. ' / ' .. Client:GetClientGroupDCSUnit():getPlayerName() + end + end + end + end + end + local Tasks = self:GetTasks() + local TaskText = "" + for TaskID, TaskData in pairs( Tasks ) do + TaskText = TaskText .. " - Task " .. TaskID .. ": " .. TaskData.Name .. ": " .. TaskData:GetGoalProgress() .. "\n" + end + MESSAGE:New( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. ' ( ' .. self.MissionPriority .. ' mission )' .. AlivePlayers .. "\n" .. TaskText:gsub("\n$",""), "Mission Command: Mission Report", 10, self.Name .. '/Status'):ToAll() +end + + +--- Add a goal function to a MISSION. Goal functions are called when a @{TASK} within a mission has been completed. +-- @param function GoalFunction is the function defined by the mission designer to evaluate whether a certain goal has been reached after a @{TASK} finishes within the @{MISSION}. A GoalFunction must accept 2 parameters: Mission, Client, which contains the current MISSION object and the current CLIENT object respectively. +-- @usage +-- PatriotActivation = { +-- { "US SAM Patriot Zerti", false }, +-- { "US SAM Patriot Zegduleti", false }, +-- { "US SAM Patriot Gvleti", false } +-- } +-- +-- function DeployPatriotTroopsGoal( Mission, Client ) +-- +-- +-- -- Check if the cargo is all deployed for mission success. +-- for CargoID, CargoData in pairs( Mission._Cargos ) do +-- if Group.getByName( CargoData.CargoGroupName ) then +-- CargoGroup = Group.getByName( CargoData.CargoGroupName ) +-- if CargoGroup then +-- -- Check if the cargo is ready to activate +-- CurrentLandingZoneID = routines.IsUnitInZones( CargoGroup:getUnits()[1], Mission:GetTask( 2 ).LandingZones ) -- The second task is the Deploytask to measure mission success upon +-- if CurrentLandingZoneID then +-- if PatriotActivation[CurrentLandingZoneID][2] == false then +-- -- Now check if this is a new Mission Task to be completed... +-- trigger.action.setGroupAIOn( Group.getByName( PatriotActivation[CurrentLandingZoneID][1] ) ) +-- PatriotActivation[CurrentLandingZoneID][2] = true +-- MessageToBlue( "Mission Command: Message to all airborne units! The " .. PatriotActivation[CurrentLandingZoneID][1] .. " is armed. Our air defenses are now stronger.", 60, "BLUE/PatriotDefense" ) +-- MessageToRed( "Mission Command: Our satellite systems are detecting additional NATO air defenses. To all airborne units: Take care!!!", 60, "RED/PatriotDefense" ) +-- Mission:GetTask( 2 ):AddGoalCompletion( "Patriots activated", PatriotActivation[CurrentLandingZoneID][1], 1 ) -- Register Patriot activation as part of mission goal. +-- end +-- end +-- end +-- end +-- end +-- end +-- +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) +-- Mission:AddGoalFunction( DeployPatriotTroopsGoal ) +function MISSION:AddGoalFunction( GoalFunction ) + self:F() + self.GoalFunction = GoalFunction +end + +--- Register a new @{CLIENT} to participate within the mission. +-- @param CLIENT Client is the @{CLIENT} object. The object must have been instantiated with @{CLIENT:New}. +-- @return CLIENT +-- @usage +-- Add a number of Client objects to the Mission. +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 1', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 3', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 2', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 4', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +function MISSION:AddClient( Client ) + self:F( { Client } ) + + local Valid = true + + if Valid then + self._Clients[Client.ClientName] = Client + end + + return Client +end + +--- Find a @{CLIENT} object within the @{MISSION} by its ClientName. +-- @param CLIENT ClientName is a string defining the Client Group as defined within the ME. +-- @return CLIENT +-- @usage +-- -- Seach for Client "Bomber" within the Mission. +-- local BomberClient = Mission:FindClient( "Bomber" ) +function MISSION:FindClient( ClientName ) + self:F( { self._Clients[ClientName] } ) + return self._Clients[ClientName] +end + + +--- Register a @{TASK} to be completed within the @{MISSION}. Note that there can be multiple @{TASK}s registered to be completed. Each TASK can be set a certain Goal. The MISSION will not be completed until all Goals are reached. +-- @param TASK Task is the @{TASK} object. The object must have been instantiated with @{TASK:New} or any of its inherited @{TASK}s. +-- @param number TaskNumber is the sequence number of the TASK within the MISSION. This number does have to be chronological. +-- @return TASK +-- @usage +-- -- Define a few tasks for the Mission. +-- PickupZones = { "NATO Gold Pickup Zone", "NATO Titan Pickup Zone" } +-- PickupSignalUnits = { "NATO Gold Coordination Center", "NATO Titan Coordination Center" } +-- +-- -- Assign the Pickup Task +-- local PickupTask = PICKUPTASK:New( PickupZones, CARGO_TYPE.ENGINEERS, CLIENT.ONBOARDSIDE.LEFT ) +-- PickupTask:AddSmokeBlue( PickupSignalUnits ) +-- PickupTask:SetGoalTotal( 3 ) +-- Mission:AddTask( PickupTask, 1 ) +-- +-- -- Assign the Deploy Task +-- local PatriotActivationZones = { "US Patriot Battery 1 Activation", "US Patriot Battery 2 Activation", "US Patriot Battery 3 Activation" } +-- local PatriotActivationZonesSmokeUnits = { "US SAM Patriot - Battery 1 Control", "US SAM Patriot - Battery 2 Control", "US SAM Patriot - Battery 3 Control" } +-- local DeployTask = DEPLOYTASK:New( PatriotActivationZones, CARGO_TYPE.ENGINEERS ) +-- --DeployTask:SetCargoTargetZoneName( 'US Troops Attack ' .. math.random(2) ) +-- DeployTask:AddSmokeBlue( PatriotActivationZonesSmokeUnits ) +-- DeployTask:SetGoalTotal( 3 ) +-- DeployTask:SetGoalTotal( 3, "Patriots activated" ) +-- Mission:AddTask( DeployTask, 2 ) + +function MISSION:AddTask( Task, TaskNumber ) + self:F() + + self._Tasks[TaskNumber] = Task + self._Tasks[TaskNumber]:EnableEvents() + self._Tasks[TaskNumber].ID = TaskNumber + + return Task + end + +--- Get the TASK idenified by the TaskNumber from the Mission. This function is useful in GoalFunctions. +-- @param number TaskNumber is the number of the @{TASK} within the @{MISSION}. +-- @return TASK +-- @usage +-- -- Get Task 2 from the Mission. +-- Task2 = Mission:GetTask( 2 ) + +function MISSION:GetTask( TaskNumber ) + self:F() + + local Valid = true + + local Task = nil + + if type(TaskNumber) ~= "number" then + Valid = false + end + + if Valid then + Task = self._Tasks[TaskNumber] + end + + return Task +end + +--- Get all the TASKs from the Mission. This function is useful in GoalFunctions. +-- @return {TASK,...} Structure of TASKS with the @{TASK} number as the key. +-- @usage +-- -- Get Tasks from the Mission. +-- Tasks = Mission:GetTasks() +-- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" ) +function MISSION:GetTasks() + self:F() + + return self._Tasks +end + + +--[[ + _TransportExecuteStage: Defines the different stages of Transport unload/load execution. This table is internal and is used to control the validity of Transport load/unload timing. + + - _TransportExecuteStage.EXECUTING + - _TransportExecuteStage.SUCCESS + - _TransportExecuteStage.FAILED + +--]] +_TransportExecuteStage = { + NONE = 0, + EXECUTING = 1, + SUCCESS = 2, + FAILED = 3 +} + + +--- The MISSIONSCHEDULER is an OBJECT and is the main scheduler of ALL active MISSIONs registered within this scheduler. It's workings are considered internal and is automatically created when the Mission.lua file is included. +-- @type MISSIONSCHEDULER +-- @field #MISSIONSCHEDULER.MISSIONS Missions +MISSIONSCHEDULER = { + Missions = {}, + MissionCount = 0, + TimeIntervalCount = 0, + TimeIntervalShow = 150, + TimeSeconds = 14400, + TimeShow = 5 +} + +--- @type MISSIONSCHEDULER.MISSIONS +-- @list <#MISSION> Mission + +--- This is the main MISSIONSCHEDULER Scheduler function. It is considered internal and is automatically created when the Mission.lua file is included. +function MISSIONSCHEDULER.Scheduler() + + + -- loop through the missions in the TransportTasks + for MissionName, MissionData in pairs( MISSIONSCHEDULER.Missions ) do + + local Mission = MissionData -- #MISSION + + if not Mission:IsCompleted() then + + -- This flag will monitor if for this mission, there are clients alive. If this flag is still false at the end of the loop, the mission status will be set to Pending (if not Failed or Completed). + local ClientsAlive = false + + for ClientID, ClientData in pairs( Mission._Clients ) do + + local Client = ClientData -- Client#CLIENT + + if Client:IsAlive() then + + -- There is at least one Client that is alive... So the Mission status is set to Ongoing. + ClientsAlive = true + + -- If this Client was not registered as Alive before: + -- 1. We register the Client as Alive. + -- 2. We initialize the Client Tasks and make a link to the original Mission Task. + -- 3. We initialize the Cargos. + -- 4. We flag the Mission as Ongoing. + if not Client.ClientAlive then + Client.ClientAlive = true + Client.ClientBriefingShown = false + for TaskNumber, Task in pairs( Mission._Tasks ) do + -- Note that this a deepCopy. Each client must have their own Tasks with own Stages!!! + Client._Tasks[TaskNumber] = routines.utils.deepCopy( Mission._Tasks[TaskNumber] ) + -- Each MissionTask must point to the original Mission. + Client._Tasks[TaskNumber].MissionTask = Mission._Tasks[TaskNumber] + Client._Tasks[TaskNumber].Cargos = Mission._Tasks[TaskNumber].Cargos + Client._Tasks[TaskNumber].LandingZones = Mission._Tasks[TaskNumber].LandingZones + end + + Mission:Ongoing() + end + + + -- For each Client, check for each Task the state and evolve the mission. + -- This flag will indicate if the Task of the Client is Complete. + local TaskComplete = false + + for TaskNumber, Task in pairs( Client._Tasks ) do + + if not Task.Stage then + Task:SetStage( 1 ) + end + + + local TransportTime = timer.getTime() + + if not Task:IsDone() then + + if Task:Goal() then + Task:ShowGoalProgress( Mission, Client ) + end + + --env.info( 'Scheduler: Mission = ' .. Mission.Name .. ' / Client = ' .. Client.ClientName .. ' / Task = ' .. Task.Name .. ' / Stage = ' .. Task.ActiveStage .. ' - ' .. Task.Stage.Name .. ' - ' .. Task.Stage.StageType ) + + -- Action + if Task:StageExecute() then + Task.Stage:Execute( Mission, Client, Task ) + end + + -- Wait until execution is finished + if Task.ExecuteStage == _TransportExecuteStage.EXECUTING then + Task.Stage:Executing( Mission, Client, Task ) + end + + -- Validate completion or reverse to earlier stage + if Task.Time + Task.Stage.WaitTime <= TransportTime then + Task:SetStage( Task.Stage:Validate( Mission, Client, Task ) ) + end + + if Task:IsDone() then + --env.info( 'Scheduler: Mission '.. Mission.Name .. ' Task ' .. Task.Name .. ' Stage ' .. Task.Stage.Name .. ' done. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) + TaskComplete = true -- when a task is not yet completed, a mission cannot be completed + + else + -- break only if this task is not yet done, so that future task are not yet activated. + TaskComplete = false -- when a task is not yet completed, a mission cannot be completed + --env.info( 'Scheduler: Mission "'.. Mission.Name .. '" Task "' .. Task.Name .. '" Stage "' .. Task.Stage.Name .. '" break. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) + break + end + + if TaskComplete then + + if Mission.GoalFunction ~= nil then + Mission.GoalFunction( Mission, Client ) + end + if MISSIONSCHEDULER.Scoring then + MISSIONSCHEDULER.Scoring:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) + end + +-- if not Mission:IsCompleted() then +-- end + end + end + end + + local MissionComplete = true + for TaskNumber, Task in pairs( Mission._Tasks ) do + if Task:Goal() then +-- Task:ShowGoalProgress( Mission, Client ) + if Task:IsGoalReached() then + else + MissionComplete = false + end + else + MissionComplete = false -- If there is no goal, the mission should never be ended. The goal status will be set somewhere else. + end + end + + if MissionComplete then + Mission:Completed() + if MISSIONSCHEDULER.Scoring then + MISSIONSCHEDULER.Scoring:_AddMissionScore( Mission.Name, 100 ) + end + else + if TaskComplete then + -- Reset for new tasking of active client + Client.ClientAlive = false -- Reset the client tasks. + end + end + + + else + if Client.ClientAlive then + env.info( 'Scheduler: Client "' .. Client.ClientName .. '" is inactive.' ) + Client.ClientAlive = false + + -- This is tricky. If we sanitize Client._Tasks before sanitizing Client._Tasks[TaskNumber].MissionTask, then the original MissionTask will be sanitized, and will be lost within the garbage collector. + -- So first sanitize Client._Tasks[TaskNumber].MissionTask, after that, sanitize only the whole _Tasks structure... + --Client._Tasks[TaskNumber].MissionTask = nil + --Client._Tasks = nil + end + end + end + + -- If all Clients of this Mission are not activated, then the Mission status needs to be put back into Pending status. + -- But only if the Mission was Ongoing. In case the Mission is Completed or Failed, the Mission status may not be changed. In these cases, this will be the last run of this Mission in the Scheduler. + if ClientsAlive == false then + if Mission:IsOngoing() then + -- Mission status back to pending... + Mission:Pending() + end + end + end + + Mission:StatusToClients() + + if Mission:ReportTrigger() then + Mission:ReportToAll() + end + end + + return true +end + +--- Start the MISSIONSCHEDULER. +function MISSIONSCHEDULER.Start() + if MISSIONSCHEDULER ~= nil then + --MISSIONSCHEDULER.SchedulerId = routines.scheduleFunction( MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) + MISSIONSCHEDULER.SchedulerId = SCHEDULER:New( nil, MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) + end +end + +--- Stop the MISSIONSCHEDULER. +function MISSIONSCHEDULER.Stop() + if MISSIONSCHEDULER.SchedulerId then + routines.removeFunction(MISSIONSCHEDULER.SchedulerId) + MISSIONSCHEDULER.SchedulerId = nil + end +end + +--- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. +-- @param Mission is the MISSION object instantiated by @{MISSION:New}. +-- @return MISSION +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +function MISSIONSCHEDULER.AddMission( Mission ) + MISSIONSCHEDULER.Missions[Mission.Name] = Mission + MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount + 1 + -- Add an overall AI Client for the AI tasks... This AI Client will facilitate the Events in the background for each Task. + --MissionAdd:AddClient( CLIENT:Register( 'AI' ) ) + + return Mission +end + +--- Remove a MISSION from the MISSIONSCHEDULER. +-- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +-- +-- -- Now remove the Mission. +-- MISSIONSCHEDULER:RemoveMission( 'Russia Transport Troops SA-6' ) +function MISSIONSCHEDULER.RemoveMission( MissionName ) + MISSIONSCHEDULER.Missions[MissionName] = nil + MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount - 1 +end + +--- Find a MISSION within the MISSIONSCHEDULER. +-- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. +-- @return MISSION +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +-- +-- -- Now find the Mission. +-- MissionFind = MISSIONSCHEDULER:FindMission( 'Russia Transport Troops SA-6' ) +function MISSIONSCHEDULER.FindMission( MissionName ) + return MISSIONSCHEDULER.Missions[MissionName] +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsShow( ) + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = true + Mission.MissionReportFlash = false + end +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsFlash( TimeInterval ) + local Count = 0 + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = false + Mission.MissionReportFlash = true + Mission.MissionReportTrigger = timer.getTime() + Count * TimeInterval + Mission.MissionTimeInterval = MISSIONSCHEDULER.MissionCount * TimeInterval + env.info( "TimeInterval = " .. Mission.MissionTimeInterval ) + Count = Count + 1 + end +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsHide( Prm ) + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = false + Mission.MissionReportFlash = false + end +end + +--- Enables a MENU option in the communications menu under F10 to control the status of the active missions. +-- This function should be called only once when starting the MISSIONSCHEDULER. +function MISSIONSCHEDULER.ReportMenu() + local ReportMenu = SUBMENU:New( 'Status' ) + local ReportMenuShow = COMMANDMENU:New( 'Show Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsShow, 0 ) + local ReportMenuFlash = COMMANDMENU:New('Flash Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsFlash, 120 ) + local ReportMenuHide = COMMANDMENU:New( 'Hide Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsHide, 0 ) +end + +--- Show the remaining mission time. +function MISSIONSCHEDULER:TimeShow() + self.TimeIntervalCount = self.TimeIntervalCount + 1 + if self.TimeIntervalCount >= self.TimeTriggerShow then + local TimeMsg = string.format("%00d", ( self.TimeSeconds / 60 ) - ( timer.getTime() / 60 )) .. ' minutes left until mission reload.' + MESSAGE:New( TimeMsg, "Mission time", self.TimeShow, '/TimeMsg' ):ToAll() + self.TimeIntervalCount = 0 + end +end + +function MISSIONSCHEDULER:Time( TimeSeconds, TimeIntervalShow, TimeShow ) + + self.TimeIntervalCount = 0 + self.TimeSeconds = TimeSeconds + self.TimeIntervalShow = TimeIntervalShow + self.TimeShow = TimeShow +end + +--- Adds a mission scoring to the game. +function MISSIONSCHEDULER:Scoring( Scoring ) + + self.Scoring = Scoring +end + +--- The CLEANUP class keeps an area clean of crashing or colliding airplanes. It also prevents airplanes from firing within this area. +-- @module CleanUp +-- @author Flightcontrol + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The CLEANUP class. +-- @type CLEANUP +-- @extends Base#BASE +CLEANUP = { + ClassName = "CLEANUP", + ZoneNames = {}, + TimeInterval = 300, + CleanUpList = {}, +} + +--- Creates the main object which is handling the cleaning of the debris within the given Zone Names. +-- @param #CLEANUP self +-- @param #table ZoneNames Is a table of zone names where the debris should be cleaned. Also a single string can be passed with one zone name. +-- @param #number TimeInterval The interval in seconds when the clean activity takes place. The default is 300 seconds, thus every 5 minutes. +-- @return #CLEANUP +-- @usage +-- -- Clean these Zones. +-- CleanUpAirports = CLEANUP:New( { 'CLEAN Tbilisi', 'CLEAN Kutaisi' }, 150 ) +-- or +-- CleanUpTbilisi = CLEANUP:New( 'CLEAN Tbilisi', 150 ) +-- CleanUpKutaisi = CLEANUP:New( 'CLEAN Kutaisi', 600 ) +function CLEANUP:New( ZoneNames, TimeInterval ) local self = BASE:Inherit( self, BASE:New() ) + self:F( { ZoneNames, TimeInterval } ) + + if type( ZoneNames ) == 'table' then + self.ZoneNames = ZoneNames + else + self.ZoneNames = { ZoneNames } + end + if TimeInterval then + self.TimeInterval = TimeInterval + end + + _EVENTDISPATCHER:OnBirth( self._OnEventBirth, self ) + + --self.CleanUpScheduler = routines.scheduleFunction( self._CleanUpScheduler, { self }, timer.getTime() + 1, TimeInterval ) + self.CleanUpScheduler = SCHEDULER:New( self, self._CleanUpScheduler, {}, 1, TimeInterval ) + + return self +end + + +--- Destroys a group from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSGroup#Group GroupObject The object to be destroyed. +-- @param #string CleanUpGroupName The groupname... +function CLEANUP:_DestroyGroup( GroupObject, CleanUpGroupName ) + self:F( { GroupObject, CleanUpGroupName } ) + + if GroupObject then -- and GroupObject:isExist() then + --MESSAGE:New( "Destroy Group " .. CleanUpGroupName, CleanUpGroupName, 1, CleanUpGroupName ):ToAll() + trigger.action.deactivateGroup(GroupObject) + self:T( { "GroupObject Destroyed", GroupObject } ) + end +end + +--- Destroys a @{DCSUnit#Unit} from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSUnit#Unit CleanUpUnit The object to be destroyed. +-- @param #string CleanUpUnitName The Unit name ... +function CLEANUP:_DestroyUnit( CleanUpUnit, CleanUpUnitName ) + self:F( { CleanUpUnit, CleanUpUnitName } ) + + if CleanUpUnit then + --MESSAGE:New( "Destroy " .. CleanUpUnitName, CleanUpUnitName, 1, CleanUpUnitName ):ToAll() + local CleanUpGroup = Unit.getGroup(CleanUpUnit) + -- TODO Client bug in 1.5.3 + if CleanUpGroup and CleanUpGroup:isExist() then + local CleanUpGroupUnits = CleanUpGroup:getUnits() + if #CleanUpGroupUnits == 1 then + local CleanUpGroupName = CleanUpGroup:getName() + --self:CreateEventCrash( timer.getTime(), CleanUpUnit ) + CleanUpGroup:destroy() + self:T( { "Destroyed Group:", CleanUpGroupName } ) + else + CleanUpUnit:destroy() + self:T( { "Destroyed Unit:", CleanUpUnitName } ) + end + self.CleanUpList[CleanUpUnitName] = nil -- Cleaning from the list + CleanUpUnit = nil + end + end +end + +-- TODO check DCSTypes#Weapon +--- Destroys a missile from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSTypes#Weapon MissileObject +function CLEANUP:_DestroyMissile( MissileObject ) + self:F( { MissileObject } ) + + if MissileObject and MissileObject:isExist() then + MissileObject:destroy() + self:T( "MissileObject Destroyed") + end +end + +function CLEANUP:_OnEventBirth( Event ) + self:F( { Event } ) + + self.CleanUpList[Event.IniDCSUnitName] = {} + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName + + _EVENTDISPATCHER:OnEngineShutDownForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnEngineStartUpForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnHitForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnPilotDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnShotForUnit( Event.IniDCSUnitName, self._EventShot, self ) + + --self:AddEvent( world.event.S_EVENT_ENGINE_SHUTDOWN, self._EventAddForCleanUp ) + --self:AddEvent( world.event.S_EVENT_ENGINE_STARTUP, self._EventAddForCleanUp ) +-- self:AddEvent( world.event.S_EVENT_HIT, self._EventAddForCleanUp ) -- , self._EventHitCleanUp ) +-- self:AddEvent( world.event.S_EVENT_CRASH, self._EventCrash ) -- , self._EventHitCleanUp ) +-- --self:AddEvent( world.event.S_EVENT_DEAD, self._EventCrash ) +-- self:AddEvent( world.event.S_EVENT_SHOT, self._EventShot ) +-- +-- self:EnableEvents() + + +end + +--- Detects if a crash event occurs. +-- Crashed units go into a CleanUpList for removal. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventCrash( Event ) + self:F( { Event } ) + + --TODO: This stuff is not working due to a DCS bug. Burning units cannot be destroyed. + --MESSAGE:New( "Crash ", "Crash", 10, "Crash" ):ToAll() + -- self:T("before getGroup") + -- local _grp = Unit.getGroup(event.initiator)-- Identify the group that fired + -- self:T("after getGroup") + -- _grp:destroy() + -- self:T("after deactivateGroup") + -- event.initiator:destroy() + + self.CleanUpList[Event.IniDCSUnitName] = {} + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName + +end + +--- Detects if a unit shoots a missile. +-- If this occurs within one of the zones, then the weapon used must be destroyed. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventShot( Event ) + self:F( { Event } ) + + -- Test if the missile was fired within one of the CLEANUP.ZoneNames. + local CurrentLandingZoneID = 0 + CurrentLandingZoneID = routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) + if ( CurrentLandingZoneID ) then + -- Okay, the missile was fired within the CLEANUP.ZoneNames, destroy the fired weapon. + --_SEADmissile:destroy() + --routines.scheduleFunction( CLEANUP._DestroyMissile, { self, Event.Weapon }, timer.getTime() + 0.1) + SCHEDULER:New( self, CLEANUP._DestroyMissile, { Event.Weapon }, 0.1 ) + end +end + + +--- Detects if the Unit has an S_EVENT_HIT within the given ZoneNames. If this is the case, destroy the unit. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventHitCleanUp( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then + self:T( { "Life: ", Event.IniDCSUnitName, ' = ', Event.IniDCSUnit:getLife(), "/", Event.IniDCSUnit:getLife0() } ) + if Event.IniDCSUnit:getLife() < Event.IniDCSUnit:getLife0() then + self:T( "CleanUp: Destroy: " .. Event.IniDCSUnitName ) + --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.IniDCSUnit }, timer.getTime() + 0.1) + SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.IniDCSUnit }, 0.1 ) + end + end + end + + if Event.TgtDCSUnit then + if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then + self:T( { "Life: ", Event.TgtDCSUnitName, ' = ', Event.TgtDCSUnit:getLife(), "/", Event.TgtDCSUnit:getLife0() } ) + if Event.TgtDCSUnit:getLife() < Event.TgtDCSUnit:getLife0() then + self:T( "CleanUp: Destroy: " .. Event.TgtDCSUnitName ) + --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.TgtDCSUnit }, timer.getTime() + 0.1 ) + SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.TgtDCSUnit }, 0.1 ) + end + end + end +end + +--- Add the @{DCSUnit#Unit} to the CleanUpList for CleanUp. +function CLEANUP:_AddForCleanUp( CleanUpUnit, CleanUpUnitName ) + self:F( { CleanUpUnit, CleanUpUnitName } ) + + self.CleanUpList[CleanUpUnitName] = {} + self.CleanUpList[CleanUpUnitName].CleanUpUnit = CleanUpUnit + self.CleanUpList[CleanUpUnitName].CleanUpUnitName = CleanUpUnitName + self.CleanUpList[CleanUpUnitName].CleanUpGroup = Unit.getGroup(CleanUpUnit) + self.CleanUpList[CleanUpUnitName].CleanUpGroupName = Unit.getGroup(CleanUpUnit):getName() + self.CleanUpList[CleanUpUnitName].CleanUpTime = timer.getTime() + self.CleanUpList[CleanUpUnitName].CleanUpMoved = false + + self:T( { "CleanUp: Add to CleanUpList: ", Unit.getGroup(CleanUpUnit):getName(), CleanUpUnitName } ) + +end + +--- Detects if the Unit has an S_EVENT_ENGINE_SHUTDOWN or an S_EVENT_HIT within the given ZoneNames. If this is the case, add the Group to the CLEANUP List. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventAddForCleanUp( Event ) + + if Event.IniDCSUnit then + if self.CleanUpList[Event.IniDCSUnitName] == nil then + if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then + self:_AddForCleanUp( Event.IniDCSUnit, Event.IniDCSUnitName ) + end + end + end + + if Event.TgtDCSUnit then + if self.CleanUpList[Event.TgtDCSUnitName] == nil then + if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then + self:_AddForCleanUp( Event.TgtDCSUnit, Event.TgtDCSUnitName ) + end + end + end + +end + +local CleanUpSurfaceTypeText = { + "LAND", + "SHALLOW_WATER", + "WATER", + "ROAD", + "RUNWAY" + } + +--- At the defined time interval, CleanUp the Groups within the CleanUpList. +-- @param #CLEANUP self +function CLEANUP:_CleanUpScheduler() + self:F( { "CleanUp Scheduler" } ) + + local CleanUpCount = 0 + for CleanUpUnitName, UnitData in pairs( self.CleanUpList ) do + CleanUpCount = CleanUpCount + 1 + + self:T( { CleanUpUnitName, UnitData } ) + local CleanUpUnit = Unit.getByName(UnitData.CleanUpUnitName) + local CleanUpGroupName = UnitData.CleanUpGroupName + local CleanUpUnitName = UnitData.CleanUpUnitName + if CleanUpUnit then + self:T( { "CleanUp Scheduler", "Checking:", CleanUpUnitName } ) + if _DATABASE:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then + local CleanUpUnitVec3 = CleanUpUnit:getPoint() + --self:T( CleanUpUnitVec3 ) + local CleanUpUnitVec2 = {} + CleanUpUnitVec2.x = CleanUpUnitVec3.x + CleanUpUnitVec2.y = CleanUpUnitVec3.z + --self:T( CleanUpUnitVec2 ) + local CleanUpSurfaceType = land.getSurfaceType(CleanUpUnitVec2) + --self:T( CleanUpSurfaceType ) + --MESSAGE:New( "Surface " .. CleanUpUnitName .. " = " .. CleanUpSurfaceTypeText[CleanUpSurfaceType], CleanUpUnitName, 10, CleanUpUnitName ):ToAll() + + if CleanUpUnit and CleanUpUnit:getLife() <= CleanUpUnit:getLife0() * 0.95 then + if CleanUpSurfaceType == land.SurfaceType.RUNWAY then + if CleanUpUnit:inAir() then + local CleanUpLandHeight = land.getHeight(CleanUpUnitVec2) + local CleanUpUnitHeight = CleanUpUnitVec3.y - CleanUpLandHeight + self:T( { "CleanUp Scheduler", "Height = " .. CleanUpUnitHeight } ) + if CleanUpUnitHeight < 30 then + self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because below safe height and damaged." } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + else + self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because on runway and damaged." } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + end + end + -- Clean Units which are waiting for a very long time in the CleanUpZone. + if CleanUpUnit then + local CleanUpUnitVelocity = CleanUpUnit:getVelocity() + local CleanUpUnitVelocityTotal = math.abs(CleanUpUnitVelocity.x) + math.abs(CleanUpUnitVelocity.y) + math.abs(CleanUpUnitVelocity.z) + if CleanUpUnitVelocityTotal < 1 then + if UnitData.CleanUpMoved then + if UnitData.CleanUpTime + 180 <= timer.getTime() then + self:T( { "CleanUp Scheduler", "Destroy due to not moving anymore " .. CleanUpUnitName } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + end + else + UnitData.CleanUpTime = timer.getTime() + UnitData.CleanUpMoved = true + --MESSAGE:New( "Moved " .. CleanUpUnitName, CleanUpUnitName, 10, CleanUpUnitName ):ToAll() + end + end + + else + -- Do nothing ... + self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE + end + else + self:T( "CleanUp: Group " .. CleanUpUnitName .. " cannot be found in DCS RTE, removing ..." ) + self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE + end + end + self:T(CleanUpCount) + + return true +end + +--- Dynamic spawning of groups (and units). +-- +-- @{#SPAWN} class +-- =============== +-- The @{#SPAWN} class allows to spawn dynamically new groups, based on pre-defined initialization settings, modifying the behaviour when groups are spawned. +-- For each group to be spawned, within the mission editor, a group has to be created with the "late activation flag" set. We call this group the *"Spawn Template"* of the SPAWN object. +-- A reference to this Spawn Template needs to be provided when constructing the SPAWN object, by indicating the name of the group within the mission editor in the constructor methods. +-- +-- Within the SPAWN object, there is an internal index that keeps track of which group from the internal group list was spawned. +-- When new groups get spawned by using the SPAWN functions (see below), it will be validated whether the Limits (@{#SPAWN.Limit}) of the SPAWN object are not reached. +-- When all is valid, a new group will be created by the spawning methods, and the internal index will be increased with 1. +-- +-- Regarding the name of new spawned groups, a _SpawnPrefix_ will be assigned for each new group created. +-- If you want to have the Spawn Template name to be used as the _SpawnPrefix_ name, use the @{#SPAWN.New} constructor. +-- However, when the @{#SPAWN.NewWithAlias} constructor was used, the Alias name will define the _SpawnPrefix_ name. +-- Groups will follow the following naming structure when spawned at run-time: +-- +-- 1. Spawned groups will have the name _SpawnPrefix_#ggg, where ggg is a counter from 0 to 999. +-- 2. Spawned units will have the name _SpawnPrefix_#ggg-uu, where uu is a counter from 0 to 99 for each new spawned unit belonging to the group. +-- +-- Some additional notes that need to be remembered: +-- +-- * Templates are actually groups defined within the mission editor, with the flag "Late Activation" set. As such, these groups are never used within the mission, but are used by the @{#SPAWN} module. +-- * It is important to defined BEFORE you spawn new groups, a proper initialization of the SPAWN instance is done with the options you want to use. +-- * When designing a mission, NEVER name groups using a "#" within the name of the group Spawn Template(s), or the SPAWN module logic won't work anymore. +-- +-- SPAWN construction methods: +-- =========================== +-- Create a new SPAWN object with the @{#SPAWN.New} or the @{#SPAWN.NewWithAlias} methods: +-- +-- * @{#SPAWN.New}: Creates a new SPAWN object taking the name of the group that functions as the Template. +-- +-- It is important to understand how the SPAWN class works internally. The SPAWN object created will contain internally a list of groups that will be spawned and that are already spawned. +-- The initialization functions will modify this list of groups so that when a group gets spawned, ALL information is already prepared when spawning. This is done for performance reasons. +-- So in principle, the group list will contain all parameters and configurations after initialization, and when groups get actually spawned, this spawning can be done quickly and efficient. +-- +-- SPAWN initialization methods: +-- ============================= +-- A spawn object will behave differently based on the usage of initialization methods: +-- +-- * @{#SPAWN.Limit}: Limits the amount of groups that can be alive at the same time and that can be dynamically spawned. +-- * @{#SPAWN.RandomizeRoute}: Randomize the routes of spawned groups. +-- * @{#SPAWN.RandomizeTemplate}: Randomize the group templates so that when a new group is spawned, a random group template is selected from one of the templates defined. +-- * @{#SPAWN.Uncontrolled}: Spawn plane groups uncontrolled. +-- * @{#SPAWN.Array}: Make groups visible before they are actually activated, and order these groups like a batallion in an array. +-- * @{#SPAWN.InitRepeat}: Re-spawn groups when they land at the home base. Similar functions are @{#SPAWN.InitRepeatOnLanding} and @{#SPAWN.InitRepeatOnEngineShutDown}. +-- +-- SPAWN spawning methods: +-- ======================= +-- Groups can be spawned at different times and methods: +-- +-- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index. +-- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index. +-- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively. +-- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}. +-- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}. +-- +-- Note that @{#SPAWN.Spawn} and @{#SPAWN.ReSpawn} return a @{GROUP#GROUP.New} object, that contains a reference to the DCSGroup object. +-- You can use the @{GROUP} object to do further actions with the DCSGroup. +-- +-- SPAWN object cleaning: +-- ========================= +-- Sometimes, it will occur during a mission run-time, that ground or especially air objects get damaged, and will while being damged stop their activities, while remaining alive. +-- In such cases, the SPAWN object will just sit there and wait until that group gets destroyed, but most of the time it won't, +-- and it may occur that no new groups are or can be spawned as limits are reached. +-- To prevent this, a @{#SPAWN.CleanUp} initialization method has been defined that will silently monitor the status of each spawned group. +-- Once a group has a velocity = 0, and has been waiting for a defined interval, that group will be cleaned or removed from run-time. +-- There is a catch however :-) If a damaged group has returned to an airbase within the coalition, that group will not be considered as "lost"... +-- In such a case, when the inactive group is cleaned, a new group will Re-spawned automatically. +-- This models AI that has succesfully returned to their airbase, to restart their combat activities. +-- Check the @{#SPAWN.CleanUp} for further info. +-- +-- ==== +-- @module Spawn +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Group" ) +Include.File( "Zone" ) +Include.File( "Event" ) +Include.File( "Scheduler" ) + +--- SPAWN Class +-- @type SPAWN +-- @extends Base#BASE +-- @field ClassName +-- @field #string SpawnTemplatePrefix +-- @field #string SpawnAliasPrefix +SPAWN = { + ClassName = "SPAWN", + SpawnTemplatePrefix = nil, + SpawnAliasPrefix = nil, +} + + + +--- Creates the main object to spawn a GROUP defined in the DCS ME. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. Each new group will have the name starting with SpawnTemplatePrefix. +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ) +-- @usage local Plane = SPAWN:New( "Plane" ) -- Creates a new local variable that can initiate new planes with the name "Plane#ddd" using the template "Plane" as defined within the ME. +function SPAWN:New( SpawnTemplatePrefix ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { SpawnTemplatePrefix } ) + + local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) + if TemplateGroup then + self.SpawnTemplatePrefix = SpawnTemplatePrefix + self.SpawnIndex = 0 + self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. + self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! + self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. + self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. + self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. + self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. + self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. + + self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. + else + error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) + end + + return self +end + +--- Creates a new SPAWN instance to create new groups based on the defined template and using a new alias for each new group. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. +-- @param #string SpawnAliasPrefix is the name that will be given to the Group at runtime. +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- Spawn_BE_KA50 = SPAWN:NewWithAlias( 'BE KA-50@RAMP-Ground Defense', 'Helicopter Attacking a City' ) +-- @usage local PlaneWithAlias = SPAWN:NewWithAlias( "Plane", "Bomber" ) -- Creates a new local variable that can instantiate new planes with the name "Bomber#ddd" using the template "Plane" as defined within the ME. +function SPAWN:NewWithAlias( SpawnTemplatePrefix, SpawnAliasPrefix ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { SpawnTemplatePrefix, SpawnAliasPrefix } ) + + local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) + if TemplateGroup then + self.SpawnTemplatePrefix = SpawnTemplatePrefix + self.SpawnAliasPrefix = SpawnAliasPrefix + self.SpawnIndex = 0 + self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. + self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! + self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. + self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. + self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. + self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. + self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. + + self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. + else + error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) + end + + return self +end + + +--- Limits the Maximum amount of Units that can be alive at the same time, and the maximum amount of groups that can be spawned. +-- Note that this method is exceptionally important to balance the performance of the mission. Depending on the machine etc, a mission can only process a maximum amount of units. +-- If the time interval must be short, but there should not be more Units or Groups alive than a maximum amount of units, then this function should be used... +-- When a @{#SPAWN.New} is executed and the limit of the amount of units alive is reached, then no new spawn will happen of the group, until some of these units of the spawn object will be destroyed. +-- @param #SPAWN self +-- @param #number SpawnMaxUnitsAlive The maximum amount of units that can be alive at runtime. +-- @param #number SpawnMaxGroups The maximum amount of groups that can be spawned. When the limit is reached, then no more actual spawns will happen of the group. +-- This parameter is useful to define a maximum amount of airplanes, ground troops, helicopters, ships etc within a supply area. +-- This parameter accepts the value 0, which defines that there are no maximum group limits, but there are limits on the maximum of units that can be alive at the same time. +-- @return #SPAWN self +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- This helicopter group consists of one Unit. So, this group will SPAWN maximum 2 groups simultaneously within the DCSRTE. +-- -- There will be maximum 24 groups spawned during the whole mission lifetime. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Limit( 2, 24 ) +function SPAWN:Limit( SpawnMaxUnitsAlive, SpawnMaxGroups ) + self:F( { self.SpawnTemplatePrefix, SpawnMaxUnitsAlive, SpawnMaxGroups } ) + + self.SpawnMaxUnitsAlive = SpawnMaxUnitsAlive -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = SpawnMaxGroups -- The maximum amount of groups that can be spawned. + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:_InitializeSpawnGroups( SpawnGroupID ) + end + + return self +end + + +--- Randomizes the defined route of the SpawnTemplatePrefix group in the ME. This is very useful to define extra variation of the behaviour of groups. +-- @param #SPAWN self +-- @param #number SpawnStartPoint is the waypoint where the randomization begins. +-- Note that the StartPoint = 0 equaling the point where the group is spawned. +-- @param #number SpawnEndPoint is the waypoint where the randomization ends counting backwards. +-- This parameter is useful to avoid randomization to end at a waypoint earlier than the last waypoint on the route. +-- @param #number SpawnRadius is the radius in meters in which the randomization of the new waypoints, with the original waypoint of the original template located in the middle ... +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- The KA-50 has waypoints Start point ( =0 or SP ), 1, 2, 3, 4, End point (= 5 or DP). +-- -- Waypoints 2 and 3 will only be randomized. The others will remain on their original position with each new spawn of the helicopter. +-- -- The randomization of waypoint 2 and 3 will take place within a radius of 2000 meters. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):RandomizeRoute( 2, 2, 2000 ) +function SPAWN:RandomizeRoute( SpawnStartPoint, SpawnEndPoint, SpawnRadius ) + self:F( { self.SpawnTemplatePrefix, SpawnStartPoint, SpawnEndPoint, SpawnRadius } ) + + self.SpawnRandomizeRoute = true + self.SpawnRandomizeRouteStartPoint = SpawnStartPoint + self.SpawnRandomizeRouteEndPoint = SpawnEndPoint + self.SpawnRandomizeRouteRadius = SpawnRadius + + for GroupID = 1, self.SpawnMaxGroups do + self:_RandomizeRoute( GroupID ) + end + + return self +end + + +--- This function is rather complicated to understand. But I'll try to explain. +-- This function becomes useful when you need to spawn groups with random templates of groups defined within the mission editor, +-- but they will all follow the same Template route and have the same prefix name. +-- In other words, this method randomizes between a defined set of groups the template to be used for each new spawn of a group. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefixTable A table with the names of the groups defined within the mission editor, from which one will be choosen when a new group will be spawned. +-- @return #SPAWN +-- @usage +-- -- NATO Tank Platoons invading Gori. +-- -- Choose between 13 different 'US Tank Platoon' configurations for each new SPAWN the Group to be spawned for the +-- -- 'US Tank Platoon Left', 'US Tank Platoon Middle' and 'US Tank Platoon Right' SpawnTemplatePrefixes. +-- -- Each new SPAWN will randomize the route, with a defined time interval of 200 seconds with 40% time variation (randomization) and +-- -- with a limit set of maximum 12 Units alive simulteneously and 150 Groups to be spawned during the whole mission. +-- Spawn_US_Platoon = { 'US Tank Platoon 1', 'US Tank Platoon 2', 'US Tank Platoon 3', 'US Tank Platoon 4', 'US Tank Platoon 5', +-- 'US Tank Platoon 6', 'US Tank Platoon 7', 'US Tank Platoon 8', 'US Tank Platoon 9', 'US Tank Platoon 10', +-- 'US Tank Platoon 11', 'US Tank Platoon 12', 'US Tank Platoon 13' } +-- Spawn_US_Platoon_Left = SPAWN:New( 'US Tank Platoon Left' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +-- Spawn_US_Platoon_Middle = SPAWN:New( 'US Tank Platoon Middle' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +-- Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +function SPAWN:RandomizeTemplate( SpawnTemplatePrefixTable ) + self:F( { self.SpawnTemplatePrefix, SpawnTemplatePrefixTable } ) + + self.SpawnTemplatePrefixTable = SpawnTemplatePrefixTable + self.SpawnRandomizeTemplate = true + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:_RandomizeTemplate( SpawnGroupID ) + end + + return self +end + + + + + +--- For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment. +-- This function is used to re-spawn automatically (so no extra call is needed anymore) the same group after it has landed. +-- This will enable a spawned group to be re-spawned after it lands, until it is destroyed... +-- Note: When the group is respawned, it will re-spawn from the original airbase where it took off. +-- So ensure that the routes for groups that respawn, always return to the original airbase, or players may get confused ... +-- @param #SPAWN self +-- @return #SPAWN self +-- @usage +-- -- RU Su-34 - AI Ship Attack +-- -- Re-SPAWN the Group(s) after each landing and Engine Shut-Down automatically. +-- SpawnRU_SU34 = SPAWN:New( 'TF1 RU Su-34 Krymsk@AI - Attack Ships' ):Schedule( 2, 3, 1800, 0.4 ):SpawnUncontrolled():RandomizeRoute( 1, 1, 3000 ):RepeatOnEngineShutDown() +function SPAWN:InitRepeat() + self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) + + self.Repeat = true + self.RepeatOnEngineShutDown = false + self.RepeatOnLanding = true + + return self +end + +--- Respawn group after landing. +-- @param #SPAWN self +-- @return #SPAWN self +function SPAWN:InitRepeatOnLanding() + self:F( { self.SpawnTemplatePrefix } ) + + self:InitRepeat() + self.RepeatOnEngineShutDown = false + self.RepeatOnLanding = true + + return self +end + + +--- Respawn after landing when its engines have shut down. +-- @param #SPAWN self +-- @return #SPAWN self +function SPAWN:InitRepeatOnEngineShutDown() + self:F( { self.SpawnTemplatePrefix } ) + + self:InitRepeat() + self.RepeatOnEngineShutDown = true + self.RepeatOnLanding = false + + return self +end + + +--- CleanUp groups when they are still alive, but inactive. +-- When groups are still alive and have become inactive due to damage and are unable to contribute anything, then this group will be removed at defined intervals in seconds. +-- @param #SPAWN self +-- @param #string SpawnCleanUpInterval The interval to check for inactive groups within seconds. +-- @return #SPAWN self +-- @usage Spawn_Helicopter:CleanUp( 20 ) -- CleanUp the spawning of the helicopters every 20 seconds when they become inactive. +function SPAWN:CleanUp( SpawnCleanUpInterval ) + self:F( { self.SpawnTemplatePrefix, SpawnCleanUpInterval } ) + + self.SpawnCleanUpInterval = SpawnCleanUpInterval + self.SpawnCleanUpTimeStamps = {} + --self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval ) + self.CleanUpScheduler = SCHEDULER:New( self, self._SpawnCleanUpScheduler, {}, 1, SpawnCleanUpInterval, 0.2 ) + return self +end + + + +--- Makes the groups visible before start (like a batallion). +-- The method will take the position of the group as the first position in the array. +-- @param #SPAWN self +-- @param #number SpawnAngle The angle in degrees how the groups and each unit of the group will be positioned. +-- @param #number SpawnWidth The amount of Groups that will be positioned on the X axis. +-- @param #number SpawnDeltaX The space between each Group on the X-axis. +-- @param #number SpawnDeltaY The space between each Group on the Y-axis. +-- @return #SPAWN self +-- @usage +-- -- Define an array of Groups. +-- Spawn_BE_Ground = SPAWN:New( 'BE Ground' ):Limit( 2, 24 ):Visible( 90, "Diamond", 10, 100, 50 ) +function SPAWN:Array( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) + self:F( { self.SpawnTemplatePrefix, SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY } ) + + self.SpawnVisible = true -- When the first Spawn executes, all the Groups need to be made visible before start. + + local SpawnX = 0 + local SpawnY = 0 + local SpawnXIndex = 0 + local SpawnYIndex = 0 + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:T( { SpawnX, SpawnY, SpawnXIndex, SpawnYIndex } ) + + self.SpawnGroups[SpawnGroupID].Visible = true + self.SpawnGroups[SpawnGroupID].Spawned = false + + SpawnXIndex = SpawnXIndex + 1 + if SpawnWidth and SpawnWidth ~= 0 then + if SpawnXIndex >= SpawnWidth then + SpawnXIndex = 0 + SpawnYIndex = SpawnYIndex + 1 + end + end + + local SpawnRootX = self.SpawnGroups[SpawnGroupID].SpawnTemplate.x + local SpawnRootY = self.SpawnGroups[SpawnGroupID].SpawnTemplate.y + + self:_TranslateRotate( SpawnGroupID, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) + + self.SpawnGroups[SpawnGroupID].SpawnTemplate.lateActivation = true + self.SpawnGroups[SpawnGroupID].SpawnTemplate.visible = true + + self.SpawnGroups[SpawnGroupID].Visible = true + + _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnBirth, self ) + _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) + + if self.Repeat then + _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnTakeOff, self ) + _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnLand, self ) + end + if self.RepeatOnEngineShutDown then + _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnEngineShutDown, self ) + end + + self.SpawnGroups[SpawnGroupID].Group = _DATABASE:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) + + SpawnX = SpawnXIndex * SpawnDeltaX + SpawnY = SpawnYIndex * SpawnDeltaY + end + + return self +end + + + +--- Will spawn a group based on the internal index. +-- Note: Uses @{DATABASE} module defined in MOOSE. +-- @param #SPAWN self +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:Spawn() + self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) + + return self:SpawnWithIndex( self.SpawnIndex + 1 ) +end + +--- Will re-spawn a group based on a given index. +-- Note: Uses @{DATABASE} module defined in MOOSE. +-- @param #SPAWN self +-- @param #string SpawnIndex The index of the group to be spawned. +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:ReSpawn( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + if not SpawnIndex then + SpawnIndex = 1 + end + +-- TODO: This logic makes DCS crash and i don't know why (yet). + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup then + local SpawnDCSGroup = SpawnGroup:GetDCSGroup() + if SpawnDCSGroup then + SpawnGroup:Destroy() + end + end + + return self:SpawnWithIndex( SpawnIndex ) +end + +--- Will spawn a group with a specified index number. +-- Uses @{DATABASE} global object defined in MOOSE. +-- @param #SPAWN self +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:SpawnWithIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups } ) + + if self:_GetSpawnIndex( SpawnIndex ) then + + if self.SpawnGroups[self.SpawnIndex].Visible then + self.SpawnGroups[self.SpawnIndex].Group:Activate() + else + self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnBirth, self ) + _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) + + if self.Repeat then + _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnTakeOff, self ) + _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnLand, self ) + end + if self.RepeatOnEngineShutDown then + _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) + end + + self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + + self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + + -- If there is a SpawnFunction hook defined, call it. + if self.SpawnFunctionHook then + self.SpawnFunctionHook( self.SpawnGroups[self.SpawnIndex].Group, unpack( self.SpawnFunctionArguments ) ) + end + -- TODO: Need to fix this by putting an "R" in the name of the group when the group repeats. + --if self.Repeat then + -- _DATABASE:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) + --end + end + + self.SpawnGroups[self.SpawnIndex].Spawned = true + return self.SpawnGroups[self.SpawnIndex].Group + else + --self:E( { self.SpawnTemplatePrefix, "No more Groups to Spawn:", SpawnIndex, self.SpawnMaxGroups } ) + end + + return nil +end + +--- Spawns new groups at varying time intervals. +-- This is useful if you want to have continuity within your missions of certain (AI) groups to be present (alive) within your missions. +-- @param #SPAWN self +-- @param #number SpawnTime The time interval defined in seconds between each new spawn of new groups. +-- @param #number SpawnTimeVariation The variation to be applied on the defined time interval between each new spawn. +-- The variation is a number between 0 and 1, representing the %-tage of variation to be applied on the time interval. +-- @return #SPAWN self +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- The time interval is set to SPAWN new helicopters between each 600 seconds, with a time variation of 50%. +-- -- The time variation in this case will be between 450 seconds and 750 seconds. +-- -- This is calculated as follows: +-- -- Low limit: 600 * ( 1 - 0.5 / 2 ) = 450 +-- -- High limit: 600 * ( 1 + 0.5 / 2 ) = 750 +-- -- Between these two values, a random amount of seconds will be choosen for each new spawn of the helicopters. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) +function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation ) + self:F( { SpawnTime, SpawnTimeVariation } ) + + if SpawnTime ~= nil and SpawnTimeVariation ~= nil then + self.SpawnScheduler = SCHEDULER:New( self, self._Scheduler, {}, 1, SpawnTime, SpawnTimeVariation ) + end + + return self +end + +--- Will re-start the spawning scheduler. +-- Note: This function is only required to be called when the schedule was stopped. +function SPAWN:SpawnScheduleStart() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnScheduler:Start() +end + +--- Will stop the scheduled spawning scheduler. +function SPAWN:SpawnScheduleStop() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnScheduler:Stop() +end + + +--- Allows to place a CallFunction hook when a new group spawns. +-- The provided function will be called when a new group is spawned, including its given parameters. +-- The first parameter of the SpawnFunction is the @{Group#GROUP} that was spawned. +-- @param #SPAWN self +-- @param #function SpawnFunctionHook The function to be called when a group spawns. +-- @param SpawnFunctionArguments A random amount of arguments to be provided to the function when the group spawns. +-- @return #SPAWN +function SPAWN:SpawnFunction( SpawnFunctionHook, ... ) + self:F( SpawnFunction ) + + self.SpawnFunctionHook = SpawnFunctionHook + self.SpawnFunctionArguments = {} + if arg then + self.SpawnFunctionArguments = arg + end + + return self +end + + + + +--- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone. +-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. +-- You can use the returned group to further define the route to be followed. +-- @param #SPAWN self +-- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group. +-- @param #number OuterRadius The outer radius in meters where the new group will be spawned. +-- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned. +-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. +-- @return Group#GROUP that was spawned. +-- @return #nil Nothing was spawned. +function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } ) + + if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then + + if SpawnIndex then + else + SpawnIndex = self.SpawnIndex + 1 + end + + if self:_GetSpawnIndex( SpawnIndex ) then + + local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate + + if SpawnTemplate then + + local UnitPoint = HostUnit:GetPointVec2() + + self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } ) + + --for PointID, Point in pairs( SpawnTemplate.route.points ) do + --Point.x = UnitPoint.x + --Point.y = UnitPoint.y + --Point.alt = nil + --Point.alt_type = nil + --end + + SpawnTemplate.route.points[1].x = UnitPoint.x + SpawnTemplate.route.points[1].y = UnitPoint.y + + if not InnerRadius then + InnerRadius = 10 + end + + if not OuterRadius then + OuterRadius = 50 + end + + -- Apply SpawnFormation + for UnitID = 1, #SpawnTemplate.units do + if InnerRadius == 0 then + SpawnTemplate.units[UnitID].x = UnitPoint.x + SpawnTemplate.units[UnitID].y = UnitPoint.y + else + local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) + SpawnTemplate.units[UnitID].x = CirclePos.x + SpawnTemplate.units[UnitID].y = CirclePos.y + end + self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) + end + + local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) + local Point = {} + Point.type = "Turning Point" + Point.x = SpawnPos.x + Point.y = SpawnPos.y + Point.action = "Cone" + Point.speed = 5 + + table.insert( SpawnTemplate.route.points, 2, Point ) + + return self:SpawnWithIndex( self.SpawnIndex ) + end + end + end + + return nil +end + +--- Will spawn a Group within a given @{Zone#ZONE}. +-- Once the group is spawned within the zone, it will continue on its route. +-- The first waypoint (where the group is spawned) is replaced with the zone coordinates. +-- @param #SPAWN self +-- @param Zone#ZONE Zone The zone where the group is to be spawned. +-- @param #number ZoneRandomize (Optional) Set to true if you want to randomize the starting point in the zone. +-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. +-- @return Group#GROUP that was spawned. +-- @return #nil when nothing was spawned. +function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } ) + + if Zone then + + if SpawnIndex then + else + SpawnIndex = self.SpawnIndex + 1 + end + + if self:_GetSpawnIndex( SpawnIndex ) then + + local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate + + if SpawnTemplate then + + local ZonePoint + + if ZoneRandomize == true then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + SpawnTemplate.route.points[1].x = ZonePoint.x + SpawnTemplate.route.points[1].y = ZonePoint.y + + -- Apply SpawnFormation + for UnitID = 1, #SpawnTemplate.units do + local ZonePointUnit = Zone:GetRandomPointVec2() + SpawnTemplate.units[UnitID].x = ZonePointUnit.x + SpawnTemplate.units[UnitID].y = ZonePointUnit.y + self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) + end + + return self:SpawnWithIndex( self.SpawnIndex ) + end + end + end + + return nil +end + + + + +--- Will spawn a plane group in uncontrolled mode... +-- This will be similar to the uncontrolled flag setting in the ME. +-- @return #SPAWN self +function SPAWN:UnControlled() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnUnControlled = true + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self.SpawnGroups[SpawnGroupID].UnControlled = true + end + + return self +end + + + +--- Will return the SpawnGroupName either with with a specific count number or without any count. +-- @param #SPAWN self +-- @param #number SpawnIndex Is the number of the Group that is to be spawned. +-- @return #string SpawnGroupName +function SPAWN:SpawnGroupName( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + local SpawnPrefix = self.SpawnTemplatePrefix + if self.SpawnAliasPrefix then + SpawnPrefix = self.SpawnAliasPrefix + end + + if SpawnIndex then + local SpawnName = string.format( '%s#%03d', SpawnPrefix, SpawnIndex ) + self:T( SpawnName ) + return SpawnName + else + self:T( SpawnPrefix ) + return SpawnPrefix + end + +end + +--- Find the first alive group. +-- @param #SPAWN self +-- @param #number SpawnCursor A number holding the index from where to find the first group from. +-- @return Group#GROUP, #number The group found, the new index where the group was found. +-- @return #nil, #nil When no group is found, #nil is returned. +function SPAWN:GetFirstAliveGroup( SpawnCursor ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) + + for SpawnIndex = 1, self.SpawnCount do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + SpawnCursor = SpawnIndex + return SpawnGroup, SpawnCursor + end + end + + return nil, nil +end + + +--- Find the next alive group. +-- @param #SPAWN self +-- @param #number SpawnCursor A number holding the last found previous index. +-- @return Group#GROUP, #number The group found, the new index where the group was found. +-- @return #nil, #nil When no group is found, #nil is returned. +function SPAWN:GetNextAliveGroup( SpawnCursor ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) + + SpawnCursor = SpawnCursor + 1 + for SpawnIndex = SpawnCursor, self.SpawnCount do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + SpawnCursor = SpawnIndex + return SpawnGroup, SpawnCursor + end + end + + return nil, nil +end + +--- Find the last alive group during runtime. +function SPAWN:GetLastAliveGroup() + self:F( { self.SpawnTemplatePrefixself.SpawnAliasPrefix } ) + + self.SpawnIndex = self:_GetLastIndex() + for SpawnIndex = self.SpawnIndex, 1, -1 do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + self.SpawnIndex = SpawnIndex + return SpawnGroup + end + end + + self.SpawnIndex = nil + return nil +end + + + +--- Get the group from an index. +-- Returns the group from the SpawnGroups list. +-- If no index is given, it will return the first group in the list. +-- @param #SPAWN self +-- @param #number SpawnIndex The index of the group to return. +-- @return Group#GROUP +function SPAWN:GetGroupFromIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) + + if not SpawnIndex then + SpawnIndex = 1 + end + + if self.SpawnGroups and self.SpawnGroups[SpawnIndex] then + local SpawnGroup = self.SpawnGroups[SpawnIndex].Group + return SpawnGroup + else + return nil + end +end + +--- Get the group index from a DCSUnit. +-- The method will search for a #-mark, and will return the index behind the #-mark of the DCSUnit. +-- It will return nil of no prefix was found. +-- @param #SPAWN self +-- @param DCSUnit The DCS unit to be searched. +-- @return #string The prefix +-- @return #nil Nothing found +function SPAWN:_GetGroupIndexFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit and DCSUnit:getName() then + local IndexString = string.match( DCSUnit:getName(), "#.*-" ):sub( 2, -2 ) + self:T( IndexString ) + + if IndexString then + local Index = tonumber( IndexString ) + self:T( { "Index:", IndexString, Index } ) + return Index + end + end + + return nil +end + +--- Return the prefix of a DCSUnit. +-- The method will search for a #-mark, and will return the text before the #-mark. +-- It will return nil of no prefix was found. +-- @param #SPAWN self +-- @param DCSUnit The DCS unit to be searched. +-- @return #string The prefix +-- @return #nil Nothing found +function SPAWN:_GetPrefixFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit and DCSUnit:getName() then + local SpawnPrefix = string.match( DCSUnit:getName(), ".*#" ) + if SpawnPrefix then + SpawnPrefix = SpawnPrefix:sub( 1, -2 ) + end + self:T( SpawnPrefix ) + return SpawnPrefix + end + + return nil +end + +--- Return the group within the SpawnGroups collection with input a DCSUnit. +function SPAWN:_GetGroupFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit then + local SpawnPrefix = self:_GetPrefixFromDCSUnit( DCSUnit ) + + if self.SpawnTemplatePrefix == SpawnPrefix or ( self.SpawnAliasPrefix and self.SpawnAliasPrefix == SpawnPrefix ) then + local SpawnGroupIndex = self:_GetGroupIndexFromDCSUnit( DCSUnit ) + local SpawnGroup = self.SpawnGroups[SpawnGroupIndex].Group + self:T( SpawnGroup ) + return SpawnGroup + end + end + + return nil +end + + +--- Get the index from a given group. +-- The function will search the name of the group for a #, and will return the number behind the #-mark. +function SPAWN:GetSpawnIndexFromGroup( SpawnGroup ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnGroup } ) + + local IndexString = string.match( SpawnGroup:GetName(), "#.*$" ):sub( 2 ) + local Index = tonumber( IndexString ) + + self:T( IndexString, Index ) + return Index + +end + +--- Return the last maximum index that can be used. +function SPAWN:_GetLastIndex() + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) + + return self.SpawnMaxGroups +end + +--- Initalize the SpawnGroups collection. +function SPAWN:_InitializeSpawnGroups( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) + + if not self.SpawnGroups[SpawnIndex] then + self.SpawnGroups[SpawnIndex] = {} + self.SpawnGroups[SpawnIndex].Visible = false + self.SpawnGroups[SpawnIndex].Spawned = false + self.SpawnGroups[SpawnIndex].UnControlled = false + self.SpawnGroups[SpawnIndex].SpawnTime = 0 + + self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefix + self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) + end + + self:_RandomizeTemplate( SpawnIndex ) + self:_RandomizeRoute( SpawnIndex ) + --self:_TranslateRotate( SpawnIndex ) + + return self.SpawnGroups[SpawnIndex] +end + + + +--- Gets the CategoryID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCategoryID( SpawnPrefix ) + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + return TemplateGroup:getCategory() + else + return nil + end +end + +--- Gets the CoalitionID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCoalitionID( SpawnPrefix ) + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + return TemplateGroup:getCoalition() + else + return nil + end +end + +--- Gets the CountryID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCountryID( SpawnPrefix ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnPrefix } ) + + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + local TemplateUnits = TemplateGroup:getUnits() + return TemplateUnits[1]:getCountry() + else + return nil + end +end + +--- Gets the Group Template from the ME environment definition. +-- This method used the @{DATABASE} object, which contains ALL initial and new spawned object in MOOSE. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix +-- @return @SPAWN self +function SPAWN:_GetTemplate( SpawnTemplatePrefix ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnTemplatePrefix } ) + + local SpawnTemplate = nil + + SpawnTemplate = routines.utils.deepCopy( _DATABASE.Templates.Groups[SpawnTemplatePrefix].Template ) + + if SpawnTemplate == nil then + error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) + end + + SpawnTemplate.SpawnCoalitionID = self:_GetGroupCoalitionID( SpawnTemplatePrefix ) + SpawnTemplate.SpawnCategoryID = self:_GetGroupCategoryID( SpawnTemplatePrefix ) + SpawnTemplate.SpawnCountryID = self:_GetGroupCountryID( SpawnTemplatePrefix ) + + self:T( { SpawnTemplate } ) + return SpawnTemplate +end + +--- Prepares the new Group Template. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix +-- @param #number SpawnIndex +-- @return #SPAWN self +function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) + + local SpawnTemplate = self:_GetTemplate( SpawnTemplatePrefix ) + SpawnTemplate.name = self:SpawnGroupName( SpawnIndex ) + + SpawnTemplate.groupId = nil + SpawnTemplate.lateActivation = false + + if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then + self:T( "For ground units, visible needs to be false..." ) + SpawnTemplate.visible = false + end + + if SpawnTemplate.SpawnCategoryID == Group.Category.HELICOPTER or SpawnTemplate.SpawnCategoryID == Group.Category.AIRPLANE then + SpawnTemplate.uncontrolled = false + end + + for UnitID = 1, #SpawnTemplate.units do + SpawnTemplate.units[UnitID].name = string.format( SpawnTemplate.name .. '-%02d', UnitID ) + SpawnTemplate.units[UnitID].unitId = nil + SpawnTemplate.units[UnitID].x = SpawnTemplate.route.points[1].x + SpawnTemplate.units[UnitID].y = SpawnTemplate.route.points[1].y + end + + self:T( { "Template:", SpawnTemplate } ) + return SpawnTemplate + +end + +--- Private method randomizing the routes. +-- @param #SPAWN self +-- @param #number SpawnIndex The index of the group to be spawned. +-- @return #SPAWN +function SPAWN:_RandomizeRoute( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnRandomizeRoute, self.SpawnRandomizeRouteStartPoint, self.SpawnRandomizeRouteEndPoint, self.SpawnRandomizeRouteRadius } ) + + if self.SpawnRandomizeRoute then + local SpawnTemplate = self.SpawnGroups[SpawnIndex].SpawnTemplate + local RouteCount = #SpawnTemplate.route.points + + for t = self.SpawnRandomizeRouteStartPoint + 1, ( RouteCount - self.SpawnRandomizeRouteEndPoint ) do + SpawnTemplate.route.points[t].x = SpawnTemplate.route.points[t].x + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) + SpawnTemplate.route.points[t].y = SpawnTemplate.route.points[t].y + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) + -- TODO: manage altitude for airborne units ... + SpawnTemplate.route.points[t].alt = nil + --SpawnGroup.route.points[t].alt_type = nil + self:T( 'SpawnTemplate.route.points[' .. t .. '].x = ' .. SpawnTemplate.route.points[t].x .. ', SpawnTemplate.route.points[' .. t .. '].y = ' .. SpawnTemplate.route.points[t].y ) + end + end + + return self +end + +--- Private method that randomizes the template of the group. +-- @param #SPAWN self +-- @param #number SpawnIndex +-- @return #SPAWN self +function SPAWN:_RandomizeTemplate( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + if self.SpawnRandomizeTemplate then + self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefixTable[ math.random( 1, #self.SpawnTemplatePrefixTable ) ] + self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) + self.SpawnGroups[SpawnIndex].SpawnTemplate.route = routines.utils.deepCopy( self.SpawnTemplate.route ) + self.SpawnGroups[SpawnIndex].SpawnTemplate.x = self.SpawnTemplate.x + self.SpawnGroups[SpawnIndex].SpawnTemplate.y = self.SpawnTemplate.y + self.SpawnGroups[SpawnIndex].SpawnTemplate.start_time = self.SpawnTemplate.start_time + for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading + end + end + + self:_RandomizeRoute( SpawnIndex ) + + return self +end + +function SPAWN:_TranslateRotate( SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle } ) + + -- Translate + local TranslatedX = SpawnX + local TranslatedY = SpawnY + + -- Rotate + -- From Wikipedia: https://en.wikipedia.org/wiki/Rotation_matrix#Common_rotations + -- x' = x \cos \theta - y \sin \theta\ + -- y' = x \sin \theta + y \cos \theta\ + local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) + + TranslatedY * math.sin( math.rad( SpawnAngle ) ) + local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) + + TranslatedY * math.cos( math.rad( SpawnAngle ) ) + + -- Assign + self.SpawnGroups[SpawnIndex].SpawnTemplate.x = SpawnRootX - RotatedX + self.SpawnGroups[SpawnIndex].SpawnTemplate.y = SpawnRootY + RotatedY + + + local SpawnUnitCount = table.getn( self.SpawnGroups[SpawnIndex].SpawnTemplate.units ) + for u = 1, SpawnUnitCount do + + -- Translate + local TranslatedX = SpawnX + local TranslatedY = SpawnY - 10 * ( u - 1 ) + + -- Rotate + local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) + + TranslatedY * math.sin( math.rad( SpawnAngle ) ) + local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) + + TranslatedY * math.cos( math.rad( SpawnAngle ) ) + + -- Assign + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].x = SpawnRootX - RotatedX + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].y = SpawnRootY + RotatedY + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading = self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading + math.rad( SpawnAngle ) + end + + return self +end + +--- Get the next index of the groups to be spawned. This function is complicated, as it is used at several spaces. +function SPAWN:_GetSpawnIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive, self.AliveUnits, #self.SpawnTemplate.units } ) + + + if ( self.SpawnMaxGroups == 0 ) or ( SpawnIndex <= self.SpawnMaxGroups ) then + if ( self.SpawnMaxUnitsAlive == 0 ) or ( self.AliveUnits < self.SpawnMaxUnitsAlive * #self.SpawnTemplate.units ) or self.UnControlled then + if SpawnIndex and SpawnIndex >= self.SpawnCount + 1 then + self.SpawnCount = self.SpawnCount + 1 + SpawnIndex = self.SpawnCount + end + self.SpawnIndex = SpawnIndex + if not self.SpawnGroups[self.SpawnIndex] then + self:_InitializeSpawnGroups( self.SpawnIndex ) + end + else + return nil + end + else + return nil + end + + return self.SpawnIndex +end + + +-- TODO Need to delete this... _DATABASE does this now ... +function SPAWN:_OnBirth( event ) + + if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if event.initiator and event.initiator:getName() then + local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) + if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then + self:T( { "Birth event: " .. event.initiator:getName(), event } ) + --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " spawned." , 5, EventPrefix .. '/Event') + self.AliveUnits = self.AliveUnits + 1 + self:T( "Alive Units: " .. self.AliveUnits ) + end + end + end + +end + +--- Obscolete +-- @todo Need to delete this... _DATABASE does this now ... +function SPAWN:_OnDeadOrCrash( event ) + self:F( self.SpawnTemplatePrefix, event ) + + if event.initiator and event.initiator:getName() then + local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) + if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then + self:T( { "Dead event: " .. event.initiator:getName(), event } ) +-- local DestroyedUnit = Unit.getByName( EventPrefix ) +-- if DestroyedUnit and DestroyedUnit.getLife() <= 1.0 then + --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " crashed." , 5, EventPrefix .. '/Event') + self.AliveUnits = self.AliveUnits - 1 + self:T( "Alive Units: " .. self.AliveUnits ) +-- end + end + end +end + +--- Will detect AIR Units taking off... When the event takes place, the spawned Group is registered as airborne... +-- This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups. +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnTakeOff( event ) + self:F( self.SpawnTemplatePrefix, event ) + + if event.initiator and event.initiator:getName() then + local SpawnGroup = self:_GetGroupFromDCSUnit( event.initiator ) + if SpawnGroup then + self:T( { "TakeOff event: " .. event.initiator:getName(), event } ) + self:T( "self.Landed = false" ) + self.Landed = false + end + end +end + +--- Will detect AIR Units landing... When the event takes place, the spawned Group is registered as landed. +-- This is needed to ensure that Re-SPAWNing is only done for landed AIR Groups. +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnLand( event ) + self:F( self.SpawnTemplatePrefix, event ) + + local SpawnUnit = event.initiator + if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then + local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) + if SpawnGroup then + self:T( { "Landed event:" .. SpawnUnit:getName(), event } ) + self.Landed = true + self:T( "self.Landed = true" ) + if self.Landed and self.RepeatOnLanding then + local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) + self:T( { "Landed:", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + self:ReSpawn( SpawnGroupIndex ) + end + end + end +end + +--- Will detect AIR Units shutting down their engines ... +-- When the event takes place, and the method @{RepeatOnEngineShutDown} was called, the spawned Group will Re-SPAWN. +-- But only when the Unit was registered to have landed. +-- @param #SPAWN self +-- @see _OnTakeOff +-- @see _OnLand +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnEngineShutDown( event ) + self:F( self.SpawnTemplatePrefix, event ) + + local SpawnUnit = event.initiator + if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then + local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) + if SpawnGroup then + self:T( { "EngineShutDown event: " .. SpawnUnit:getName(), event } ) + if self.Landed and self.RepeatOnEngineShutDown then + local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) + self:T( { "EngineShutDown: ", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + self:ReSpawn( SpawnGroupIndex ) + end + end + end +end + +--- This function is called automatically by the Spawning scheduler. +-- It is the internal worker method SPAWNing new Groups on the defined time intervals. +function SPAWN:_Scheduler() + self:F( { "_Scheduler", self.SpawnTemplatePrefix, self.SpawnAliasPrefix, self.SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive } ) + + -- Validate if there are still groups left in the batch... + self:Spawn() + + return true +end + +function SPAWN:_SpawnCleanUpScheduler() + self:F( { "CleanUp Scheduler:", self.SpawnTemplatePrefix } ) + + local SpawnCursor + local SpawnGroup, SpawnCursor = self:GetFirstAliveGroup( SpawnCursor ) + + self:T( { "CleanUp Scheduler:", SpawnGroup } ) + + while SpawnGroup do + + if SpawnGroup:AllOnGround() and SpawnGroup:GetMaxVelocity() < 1 then + if not self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] then + self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = timer.getTime() + else + if self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] + self.SpawnCleanUpInterval < timer.getTime() then + self:T( { "CleanUp Scheduler:", "Cleaning:", SpawnGroup } ) + SpawnGroup:Destroy() + end + end + else + self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = nil + end + + SpawnGroup, SpawnCursor = self:GetNextAliveGroup( SpawnCursor ) + + self:T( { "CleanUp Scheduler:", SpawnGroup } ) + + end + + return true -- Repeat + +end +--- Limit the simultaneous movement of Groups within a running Mission. +-- This module is defined to improve the performance in missions, and to bring additional realism for GROUND vehicles. +-- Performance: If in a DCSRTE there are a lot of moving GROUND units, then in a multi player mission, this WILL create lag if +-- the main DCS execution core of your CPU is fully utilized. So, this class will limit the amount of simultaneous moving GROUND units +-- on defined intervals (currently every minute). +-- @module MOVEMENT + +Include.File( "Routines" ) + +--- the MOVEMENT class +-- @type +MOVEMENT = { + ClassName = "MOVEMENT", +} + +--- Creates the main object which is handling the GROUND forces movement. +-- @param table{string,...}|string MovePrefixes is a table of the Prefixes (names) of the GROUND Groups that need to be controlled by the MOVEMENT Object. +-- @param number MoveMaximum is a number that defines the maximum amount of GROUND Units to be moving during one minute. +-- @return MOVEMENT +-- @usage +-- -- Limit the amount of simultaneous moving units on the ground to prevent lag. +-- Movement_US_Platoons = MOVEMENT:New( { 'US Tank Platoon Left', 'US Tank Platoon Middle', 'US Tank Platoon Right', 'US CH-47D Troops' }, 15 ) + +function MOVEMENT:New( MovePrefixes, MoveMaximum ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MovePrefixes, MoveMaximum } ) + + if type( MovePrefixes ) == 'table' then + self.MovePrefixes = MovePrefixes + else + self.MovePrefixes = { MovePrefixes } + end + self.MoveCount = 0 -- The internal counter of the amount of Moveing the has happened since MoveStart. + self.MoveMaximum = MoveMaximum -- Contains the Maximum amount of units that are allowed to move... + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.MoveUnits = {} -- Reflects if the Moving for this MovePrefixes is going to be scheduled or not. + + _EVENTDISPATCHER:OnBirth( self.OnBirth, self ) + +-- self:AddEvent( world.event.S_EVENT_BIRTH, self.OnBirth ) +-- +-- self:EnableEvents() + + self:ScheduleStart() + + return self +end + +--- Call this function to start the MOVEMENT scheduling. +function MOVEMENT:ScheduleStart() + self:F() + --self.MoveFunction = routines.scheduleFunction( self._Scheduler, { self }, timer.getTime() + 1, 120 ) + self.MoveFunction = SCHEDULER:New( self, self._Scheduler, {}, 1, 120 ) +end + +--- Call this function to stop the MOVEMENT scheduling. +-- @todo need to implement it ... Forgot. +function MOVEMENT:ScheduleStop() + self:F() + +end + +--- Captures the birth events when new Units were spawned. +-- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. +function MOVEMENT:OnBirth( Event ) + self:F( { Event } ) + + if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if Event.IniDCSUnit then + self:T( "Birth object : " .. Event.IniDCSUnitName ) + if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then + for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do + if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then + self.AliveUnits = self.AliveUnits + 1 + self.MoveUnits[Event.IniDCSUnitName] = Event.IniDCSGroupName + self:T( self.AliveUnits ) + end + end + end + end + _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) + end + +end + +--- Captures the Dead or Crash events when Units crash or are destroyed. +-- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. +function MOVEMENT:OnDeadOrCrash( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + self:T( "Dead object : " .. Event.IniDCSUnitName ) + for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do + if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then + self.AliveUnits = self.AliveUnits - 1 + self.MoveUnits[Event.IniDCSUnitName] = nil + self:T( self.AliveUnits ) + end + end + end +end + +--- This function is called automatically by the MOVEMENT scheduler. A new function is scheduled when MoveScheduled is true. +function MOVEMENT:_Scheduler() + self:F( { self.MovePrefixes, self.MoveMaximum, self.AliveUnits, self.MovementGroups } ) + + if self.AliveUnits > 0 then + local MoveProbability = ( self.MoveMaximum * 100 ) / self.AliveUnits + self:T( 'Move Probability = ' .. MoveProbability ) + + for MovementUnitName, MovementGroupName in pairs( self.MoveUnits ) do + local MovementGroup = Group.getByName( MovementGroupName ) + if MovementGroup and MovementGroup:isExist() then + local MoveOrStop = math.random( 1, 100 ) + self:T( 'MoveOrStop = ' .. MoveOrStop ) + if MoveOrStop <= MoveProbability then + self:T( 'Group continues moving = ' .. MovementGroupName ) + trigger.action.groupContinueMoving( MovementGroup ) + else + self:T( 'Group stops moving = ' .. MovementGroupName ) + trigger.action.groupStopMoving( MovementGroup ) + end + else + self.MoveUnits[MovementUnitName] = nil + end + end + end + return true +end +--- Provides defensive behaviour to a set of SAM sites within a running Mission. +-- @module Sead +-- @author to be searched on the forum +-- @author (co) Flightcontrol (Modified and enriched with functionality) + +Include.File( "Routines" ) +Include.File( "Event" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The SEAD class +-- @type SEAD +-- @extends Base#BASE +SEAD = { + ClassName = "SEAD", + TargetSkill = { + Average = { Evade = 50, DelayOff = { 10, 25 }, DelayOn = { 10, 30 } } , + Good = { Evade = 30, DelayOff = { 8, 20 }, DelayOn = { 20, 40 } } , + High = { Evade = 15, DelayOff = { 5, 17 }, DelayOn = { 30, 50 } } , + Excellent = { Evade = 10, DelayOff = { 3, 10 }, DelayOn = { 30, 60 } } + }, + SEADGroupPrefixes = {} +} + +--- Creates the main object which is handling defensive actions for SA sites or moving SA vehicles. +-- When an anti radiation missile is fired (KH-58, KH-31P, KH-31A, KH-25MPU, HARM missiles), the SA will shut down their radars and will take evasive actions... +-- Chances are big that the missile will miss. +-- @param table{string,...}|string SEADGroupPrefixes which is a table of Prefixes of the SA Groups in the DCSRTE on which evasive actions need to be taken. +-- @return SEAD +-- @usage +-- -- CCCP SEAD Defenses +-- -- Defends the Russian SA installations from SEAD attacks. +-- SEAD_RU_SAM_Defenses = SEAD:New( { 'RU SA-6 Kub', 'RU SA-6 Defenses', 'RU MI-26 Troops', 'RU Attack Gori' } ) +function SEAD:New( SEADGroupPrefixes ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( SEADGroupPrefixes ) + if type( SEADGroupPrefixes ) == 'table' then + for SEADGroupPrefixID, SEADGroupPrefix in pairs( SEADGroupPrefixes ) do + self.SEADGroupPrefixes[SEADGroupPrefix] = SEADGroupPrefix + end + else + self.SEADGroupNames[SEADGroupPrefixes] = SEADGroupPrefixes + end + _EVENTDISPATCHER:OnShot( self.EventShot, self ) + + return self +end + +--- Detects if an SA site was shot with an anti radiation missile. In this case, take evasive actions based on the skill level set within the ME. +-- @see SEAD +function SEAD:EventShot( Event ) + self:F( { Event } ) + + local SEADUnit = Event.IniDCSUnit + local SEADUnitName = Event.IniDCSUnitName + local SEADWeapon = Event.Weapon -- Identify the weapon fired + local SEADWeaponName = Event.WeaponName -- return weapon type + --trigger.action.outText( string.format("Alerte, depart missile " ..string.format(SEADWeaponName)), 20) --debug message + -- Start of the 2nd loop + self:T( "Missile Launched = " .. SEADWeaponName ) + if SEADWeaponName == "KH-58" or SEADWeaponName == "KH-25MPU" or SEADWeaponName == "AGM-88" or SEADWeaponName == "KH-31A" or SEADWeaponName == "KH-31P" then -- Check if the missile is a SEAD + local _evade = math.random (1,100) -- random number for chance of evading action + local _targetMim = Event.Weapon:getTarget() -- Identify target + local _targetMimname = Unit.getName(_targetMim) + local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) + local _targetMimgroupName = _targetMimgroup:getName() + local _targetMimcont= _targetMimgroup:getController() + local _targetskill = _DATABASE.Templates.Units[_targetMimname].Template.skill + self:T( self.SEADGroupPrefixes ) + self:T( _targetMimgroupName ) + local SEADGroupFound = false + for SEADGroupPrefixID, SEADGroupPrefix in pairs( self.SEADGroupPrefixes ) do + if string.find( _targetMimgroupName, SEADGroupPrefix, 1, true ) then + SEADGroupFound = true + self:T( 'Group Found' ) + break + end + end + if SEADGroupFound == true then + if _targetskill == "Random" then -- when skill is random, choose a skill + local Skills = { "Average", "Good", "High", "Excellent" } + _targetskill = Skills[ math.random(1,4) ] + end + self:T( _targetskill ) -- debug message for skill check + if self.TargetSkill[_targetskill] then + if (_evade > self.TargetSkill[_targetskill].Evade) then + self:T( string.format("Evading, target skill " ..string.format(_targetskill)) ) --debug message + local _targetMim = Weapon.getTarget(SEADWeapon) + local _targetMimname = Unit.getName(_targetMim) + local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) + local _targetMimcont= _targetMimgroup:getController() + routines.groupRandomDistSelf(_targetMimgroup,300,'Diamond',250,20) -- move randomly + local SuppressedGroups1 = {} -- unit suppressed radar off for a random time + local function SuppressionEnd1(id) + id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) + SuppressedGroups1[id.groupName] = nil + end + local id = { + groupName = _targetMimgroup, + ctrl = _targetMimcont + } + local delay1 = math.random(self.TargetSkill[_targetskill].DelayOff[1], self.TargetSkill[_targetskill].DelayOff[2]) + if SuppressedGroups1[id.groupName] == nil then + SuppressedGroups1[id.groupName] = { + SuppressionEndTime1 = timer.getTime() + delay1, + SuppressionEndN1 = SuppressionEndCounter1 --Store instance of SuppressionEnd() scheduled function + } + Controller.setOption(_targetMimcont, AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) + timer.scheduleFunction(SuppressionEnd1, id, SuppressedGroups1[id.groupName].SuppressionEndTime1) --Schedule the SuppressionEnd() function + --trigger.action.outText( string.format("Radar Off " ..string.format(delay1)), 20) + end + + local SuppressedGroups = {} + local function SuppressionEnd(id) + id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.RED) + SuppressedGroups[id.groupName] = nil + end + local id = { + groupName = _targetMimgroup, + ctrl = _targetMimcont + } + local delay = math.random(self.TargetSkill[_targetskill].DelayOn[1], self.TargetSkill[_targetskill].DelayOn[2]) + if SuppressedGroups[id.groupName] == nil then + SuppressedGroups[id.groupName] = { + SuppressionEndTime = timer.getTime() + delay, + SuppressionEndN = SuppressionEndCounter --Store instance of SuppressionEnd() scheduled function + } + timer.scheduleFunction(SuppressionEnd, id, SuppressedGroups[id.groupName].SuppressionEndTime) --Schedule the SuppressionEnd() function + --trigger.action.outText( string.format("Radar On " ..string.format(delay)), 20) + end + end + end + end + end +end +--- Taking the lead of AI escorting your flight. +-- +-- @{#ESCORT} class +-- ================ +-- The @{#ESCORT} class allows you to interact with escorting AI on your flight and take the lead. +-- Each escorting group can be commanded with a whole set of radio commands (radio menu in your flight, and then F10). +-- +-- The radio commands will vary according the category of the group. The richest set of commands are with Helicopters and AirPlanes. +-- Ships and Ground troops will have a more limited set, but they can provide support through the bombing of targets designated by the other escorts. +-- +-- RADIO MENUs that can be created: +-- ================================ +-- Find a summary below of the current available commands: +-- +-- Navigation ...: +-- --------------- +-- Escort group navigation functions: +-- +-- * **"Join-Up and Follow at x meters":** The escort group fill follow you at about x meters, and they will follow you. +-- * **"Flare":** Provides menu commands to let the escort group shoot a flare in the air in a color. +-- * **"Smoke":** Provides menu commands to let the escort group smoke the air in a color. Note that smoking is only available for ground and naval troops. +-- +-- Hold position ...: +-- ------------------ +-- Escort group navigation functions: +-- +-- * **"At current location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. +-- * **"At client location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. +-- +-- Report targets ...: +-- ------------------- +-- Report targets will make the escort group to report any target that it identifies within a 8km range. Any detected target can be attacked using the 4. Attack nearby targets function. (see below). +-- +-- * **"Report now":** Will report the current detected targets. +-- * **"Report targets on":** Will make the escort group to report detected targets and will fill the "Attack nearby targets" menu list. +-- * **"Report targets off":** Will stop detecting targets. +-- +-- Scan targets ...: +-- ----------------- +-- Menu items to pop-up the escort group for target scanning. After scanning, the escort group will resume with the mission or defined task. +-- +-- * **"Scan targets 30 seconds":** Scan 30 seconds for targets. +-- * **"Scan targets 60 seconds":** Scan 60 seconds for targets. +-- +-- Attack targets ...: +-- ------------------- +-- This menu item will list all detected targets within a 15km range. Depending on the level of detection (known/unknown) and visuality, the targets type will also be listed. +-- +-- Request assistance from ...: +-- ---------------------------- +-- This menu item will list all detected targets within a 15km range, as with the menu item **Attack Targets**. +-- This menu item allows to request attack support from other escorts supporting the current client group. +-- eg. the function allows a player to request support from the Ship escort to attack a target identified by the Plane escort with its Tomahawk missiles. +-- eg. the function allows a player to request support from other Planes escorting to bomb the unit with illumination missiles or bombs, so that the main plane escort can attack the area. +-- +-- ROE ...: +-- -------- +-- Sets the Rules of Engagement (ROE) of the escort group when in flight. +-- +-- * **"Hold Fire":** The escort group will hold fire. +-- * **"Return Fire":** The escort group will return fire. +-- * **"Open Fire":** The escort group will open fire on designated targets. +-- * **"Weapon Free":** The escort group will engage with any target. +-- +-- Evasion ...: +-- ------------ +-- Will define the evasion techniques that the escort group will perform during flight or combat. +-- +-- * **"Fight until death":** The escort group will have no reaction to threats. +-- * **"Use flares, chaff and jammers":** The escort group will use passive defense using flares and jammers. No evasive manoeuvres are executed. +-- * **"Evade enemy fire":** The rescort group will evade enemy fire before firing. +-- * **"Go below radar and evade fire":** The escort group will perform evasive vertical manoeuvres. +-- +-- Resume Mission ...: +-- ------------------- +-- Escort groups can have their own mission. This menu item will allow the escort group to resume their Mission from a given waypoint. +-- Note that this is really fantastic, as you now have the dynamic of taking control of the escort groups, and allowing them to resume their path or mission. +-- +-- ESCORT construction methods. +-- ============================ +-- Create a new SPAWN object with the @{#ESCORT.New} method: +-- +-- * @{#ESCORT.New}: Creates a new ESCORT object from a @{Group#GROUP} for a @{Client#CLIENT}, with an optional briefing text. +-- +-- ESCORT initialization methods. +-- ============================== +-- The following menus are created within the RADIO MENU of an active unit hosted by a player: +-- +-- * @{#ESCORT.MenuFollowAt}: Creates a menu to make the escort follow the client. +-- * @{#ESCORT.MenuHoldAtEscortPosition}: Creates a menu to hold the escort at its current position. +-- * @{#ESCORT.MenuHoldAtLeaderPosition}: Creates a menu to hold the escort at the client position. +-- * @{#ESCORT.MenuScanForTargets}: Creates a menu so that the escort scans targets. +-- * @{#ESCORT.MenuFlare}: Creates a menu to disperse flares. +-- * @{#ESCORT.MenuSmoke}: Creates a menu to disparse smoke. +-- * @{#ESCORT.MenuReportTargets}: Creates a menu so that the escort reports targets. +-- * @{#ESCORT.MenuReportPosition}: Creates a menu so that the escort reports its current position from bullseye. +-- * @{#ESCORT.MenuAssistedAttack: Creates a menu so that the escort supportes assisted attack from other escorts with the client. +-- * @{#ESCORT.MenuROE: Creates a menu structure to set the rules of engagement of the escort. +-- * @{#ESCORT.MenuEvasion: Creates a menu structure to set the evasion techniques when the escort is under threat. +-- * @{#ESCORT.MenuResumeMission}: Creates a menu structure so that the escort can resume from a waypoint. +-- +-- @module Escort +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Group" ) +Include.File( "Zone" ) + +--- +-- @type ESCORT +-- @extends Base#BASE +-- @field Client#CLIENT EscortClient +-- @field Group#GROUP EscortGroup +-- @field #string EscortName +-- @field #ESCORT.MODE EscortMode The mode the escort is in. +-- @field #number FollowScheduler The id of the _FollowScheduler function. +-- @field #boolean ReportTargets If true, nearby targets are reported. +-- @Field DCSTypes#AI.Option.Air.val.ROE OptionROE Which ROE is set to the EscortGroup. +-- @field DCSTypes#AI.Option.Air.val.REACTION_ON_THREAT OptionReactionOnThreat Which REACTION_ON_THREAT is set to the EscortGroup. +-- @field Menu#MENU_CLIENT EscortMenuResumeMission +ESCORT = { + ClassName = "ESCORT", + EscortName = nil, -- The Escort Name + EscortClient = nil, + EscortGroup = nil, + EscortMode = nil, + MODE = { + FOLLOW = 1, + MISSION = 2, + }, + Targets = {}, -- The identified targets + FollowScheduler = nil, + ReportTargets = true, + OptionROE = AI.Option.Air.val.ROE.OPEN_FIRE, + OptionReactionOnThreat = AI.Option.Air.val.REACTION_ON_THREAT.ALLOW_ABORT_MISSION, + TaskPoints = {} +} + +--- ESCORT.Mode class +-- @type ESCORT.MODE +-- @field #number FOLLOW +-- @field #number MISSION + +--- MENUPARAM type +-- @type MENUPARAM +-- @field #ESCORT ParamSelf +-- @field #Distance ParamDistance +-- @field #function ParamFunction +-- @field #string ParamMessage + +--- ESCORT class constructor for an AI group +-- @param #ESCORT self +-- @param Client#CLIENT EscortClient The client escorted by the EscortGroup. +-- @param Group#GROUP EscortGroup The group AI escorting the EscortClient. +-- @param #string EscortName Name of the escort. +-- @return #ESCORT self +function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { EscortClient, EscortGroup, EscortName } ) + + self.EscortClient = EscortClient -- Client#CLIENT + self.EscortGroup = EscortGroup -- Group#GROUP + self.EscortName = EscortName + self.EscortBriefing = EscortBriefing + + self:T( EscortGroup:GetClassNameAndID() ) + + -- Set EscortGroup known at EscortClient. + if not self.EscortClient._EscortGroups then + self.EscortClient._EscortGroups = {} + end + + if not self.EscortClient._EscortGroups[EscortGroup:GetName()] then + self.EscortClient._EscortGroups[EscortGroup:GetName()] = {} + self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortGroup = self.EscortGroup + self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortName = self.EscortName + self.EscortClient._EscortGroups[EscortGroup:GetName()].Targets = {} + self.EscortMode = ESCORT.MODE.FOLLOW + end + + + self.EscortMenu = MENU_CLIENT:New( self.EscortClient, self.EscortName ) + + self.EscortGroup:WayPointInitialize(1) + + self.EscortGroup:OptionROTVertical() + self.EscortGroup:OptionROEOpenFire() + + EscortGroup:MessageToClient( EscortGroup:GetCategoryName() .. " '" .. EscortName .. "' (" .. EscortGroup:GetCallsign() .. ") reporting! " .. + "We're escorting your flight. " .. + "Use the Radio Menu and F10 and use the options under + " .. EscortName .. "\n", + 60, EscortClient + ) + + return self +end + + +--- Defines the default menus +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:Menus() + self:F() + + self:MenuFollowAt( 100 ) + self:MenuFollowAt( 200 ) + self:MenuFollowAt( 300 ) + self:MenuFollowAt( 400 ) + + self:MenuScanForTargets( 100, 60 ) + + self:MenuHoldAtEscortPosition( 30 ) + self:MenuHoldAtLeaderPosition( 30 ) + + self:MenuFlare() + self:MenuSmoke() + + self:MenuReportTargets( 60 ) + self:MenuAssistedAttack() + self:MenuROE() + self:MenuEvasion() + self:MenuResumeMission() + + return self +end + + + +--- Defines a menu slot to let the escort Join and Follow you at a certain distance. +-- This menu will appear under **Navigation**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Distance The distance in meters that the escort needs to follow the client. +-- @return #ESCORT +function ESCORT:MenuFollowAt( Distance ) + self:F(Distance) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + if not self.EscortMenuJoinUpAndFollow then + self.EscortMenuJoinUpAndFollow = {} + end + + self.EscortMenuJoinUpAndFollow[#self.EscortMenuJoinUpAndFollow+1] = MENU_CLIENT_COMMAND:New( self.EscortClient, "Join-Up and Follow at " .. Distance, self.EscortMenuReportNavigation, ESCORT._JoinUpAndFollow, { ParamSelf = self, ParamDistance = Distance } ) + + self.EscortMode = ESCORT.MODE.FOLLOW + end + + return self +end + +--- Defines a menu slot to let the escort hold at their current position and stay low with a specified height during a specified time in seconds. +-- This menu will appear under **Hold position**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +-- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. +function ESCORT:MenuHoldAtEscortPosition( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + + if not self.EscortMenuHold then + self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) + end + + if not Height then + Height = 30 + end + + if not Seconds then + Seconds = 0 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "Hold at %d meter", Height ) + else + MenuText = string.format( "Hold at %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuHoldPosition then + self.EscortMenuHoldPosition = {} + end + + self.EscortMenuHoldPosition[#self.EscortMenuHoldPosition+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuHold, + ESCORT._HoldPosition, + { ParamSelf = self, + ParamOrbitGroup = self.EscortGroup, + ParamHeight = Height, + ParamSeconds = Seconds + } + ) + end + + return self +end + + +--- Defines a menu slot to let the escort hold at the client position and stay low with a specified height during a specified time in seconds. +-- This menu will appear under **Navigation**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +-- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. +function ESCORT:MenuHoldAtLeaderPosition( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + + if not self.EscortMenuHold then + self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) + end + + if not Height then + Height = 30 + end + + if not Seconds then + Seconds = 0 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "Rejoin and hold at %d meter", Height ) + else + MenuText = string.format( "Rejoin and hold at %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuHoldAtLeaderPosition then + self.EscortMenuHoldAtLeaderPosition = {} + end + + self.EscortMenuHoldAtLeaderPosition[#self.EscortMenuHoldAtLeaderPosition+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuHold, + ESCORT._HoldPosition, + { ParamSelf = self, + ParamOrbitGroup = self.EscortClient, + ParamHeight = Height, + ParamSeconds = Seconds + } + ) + end + + return self +end + +--- Defines a menu slot to let the escort scan for targets at a certain height for a certain time in seconds. +-- This menu will appear under **Scan targets**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuScanForTargets( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuScan then + self.EscortMenuScan = MENU_CLIENT:New( self.EscortClient, "Scan for targets", self.EscortMenu ) + end + + if not Height then + Height = 100 + end + + if not Seconds then + Seconds = 30 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "At %d meter", Height ) + else + MenuText = string.format( "At %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuScanForTargets then + self.EscortMenuScanForTargets = {} + end + + self.EscortMenuScanForTargets[#self.EscortMenuScanForTargets+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuScan, + ESCORT._ScanTargets, + { ParamSelf = self, + ParamScanDuration = 30 + } + ) + end + + return self +end + + + +--- Defines a menu slot to let the escort disperse a flare in a certain color. +-- This menu will appear under **Navigation**. +-- The flare will be fired from the first unit in the group. +-- @param #ESCORT self +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuFlare( MenuTextFormat ) + self:F() + + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + local MenuText = "" + if not MenuTextFormat then + MenuText = "Flare" + else + MenuText = MenuTextFormat + end + + if not self.EscortMenuFlare then + self.EscortMenuFlare = MENU_CLIENT:New( self.EscortClient, MenuText, self.EscortMenuReportNavigation, ESCORT._Flare, { ParamSelf = self } ) + self.EscortMenuFlareGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Green, ParamMessage = "Released a green flare!" } ) + self.EscortMenuFlareRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Red, ParamMessage = "Released a red flare!" } ) + self.EscortMenuFlareWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.White, ParamMessage = "Released a white flare!" } ) + self.EscortMenuFlareYellow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release yellow flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Yellow, ParamMessage = "Released a yellow flare!" } ) + end + + return self +end + +--- Defines a menu slot to let the escort disperse a smoke in a certain color. +-- This menu will appear under **Navigation**. +-- Note that smoke menu options will only be displayed for ships and ground units. Not for air units. +-- The smoke will be fired from the first unit in the group. +-- @param #ESCORT self +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuSmoke( MenuTextFormat ) + self:F() + + if not self.EscortGroup:IsAir() then + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + local MenuText = "" + if not MenuTextFormat then + MenuText = "Smoke" + else + MenuText = MenuTextFormat + end + + if not self.EscortMenuSmoke then + self.EscortMenuSmoke = MENU_CLIENT:New( self.EscortClient, "Smoke", self.EscortMenuReportNavigation, ESCORT._Smoke, { ParamSelf = self } ) + self.EscortMenuSmokeGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Green, ParamMessage = "Releasing green smoke!" } ) + self.EscortMenuSmokeRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Red, ParamMessage = "Releasing red smoke!" } ) + self.EscortMenuSmokeWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.White, ParamMessage = "Releasing white smoke!" } ) + self.EscortMenuSmokeOrange = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release orange smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Orange, ParamMessage = "Releasing orange smoke!" } ) + self.EscortMenuSmokeBlue = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release blue smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Blue, ParamMessage = "Releasing blue smoke!" } ) + end + end + + return self +end + +--- Defines a menu slot to let the escort report their current detected targets with a specified time interval in seconds. +-- This menu will appear under **Report targets**. +-- Note that if a report targets menu is not specified, no targets will be detected by the escort, and the attack and assisted attack menus will not be displayed. +-- @param #ESCORT self +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort report their current detected targets after specified time interval in seconds. The default time is 30 seconds. +-- @return #ESCORT +function ESCORT:MenuReportTargets( Seconds ) + self:F( { Seconds } ) + + if not self.EscortMenuReportNearbyTargets then + self.EscortMenuReportNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Report targets", self.EscortMenu ) + end + + if not Seconds then + Seconds = 30 + end + + -- Report Targets + self.EscortMenuReportNearbyTargetsNow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets now!", self.EscortMenuReportNearbyTargets, ESCORT._ReportNearbyTargetsNow, { ParamSelf = self } ) + self.EscortMenuReportNearbyTargetsOn = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets on", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = true } ) + self.EscortMenuReportNearbyTargetsOff = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets off", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = false, } ) + + -- Attack Targets + self.EscortMenuAttackNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Attack targets", self.EscortMenu ) + + + --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, Seconds ) + self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, Seconds ) + + return self +end + +--- Defines a menu slot to let the escort attack its detected targets using assisted attack from another escort joined also with the client. +-- This menu will appear under **Request assistance from**. +-- Note that this method needs to be preceded with the method MenuReportTargets. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuAssistedAttack() + self:F() + + -- Request assistance from other escorts. + -- This is very useful to let f.e. an escorting ship attack a target detected by an escorting plane... + self.EscortMenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, "Request assistance from", self.EscortMenu ) + + return self +end + +--- Defines a menu to let the escort set its rules of engagement. +-- All rules of engagement will appear under the menu **ROE**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuROE( MenuTextFormat ) + self:F( MenuTextFormat ) + + if not self.EscortMenuROE then + -- Rules of Engagement + self.EscortMenuROE = MENU_CLIENT:New( self.EscortClient, "ROE", self.EscortMenu ) + if self.EscortGroup:OptionROEHoldFirePossible() then + self.EscortMenuROEHoldFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Hold Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEHoldFire(), ParamMessage = "Holding weapons!" } ) + end + if self.EscortGroup:OptionROEReturnFirePossible() then + self.EscortMenuROEReturnFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Return Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEReturnFire(), ParamMessage = "Returning fire!" } ) + end + if self.EscortGroup:OptionROEOpenFirePossible() then + self.EscortMenuROEOpenFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Open Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEOpenFire(), ParamMessage = "Opening fire on designated targets!!" } ) + end + if self.EscortGroup:OptionROEWeaponFreePossible() then + self.EscortMenuROEWeaponFree = MENU_CLIENT_COMMAND:New( self.EscortClient, "Weapon Free", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEWeaponFree(), ParamMessage = "Opening fire on targets of opportunity!" } ) + end + end + + return self +end + + +--- Defines a menu to let the escort set its evasion when under threat. +-- All rules of engagement will appear under the menu **Evasion**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuEvasion( MenuTextFormat ) + self:F( MenuTextFormat ) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuEvasion then + -- Reaction to Threats + self.EscortMenuEvasion = MENU_CLIENT:New( self.EscortClient, "Evasion", self.EscortMenu ) + if self.EscortGroup:OptionROTNoReactionPossible() then + self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTNoReaction(), ParamMessage = "Fighting until death!" } ) + end + if self.EscortGroup:OptionROTPassiveDefensePossible() then + self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTPassiveDefense(), ParamMessage = "Defending using jammers, chaff and flares!" } ) + end + if self.EscortGroup:OptionROTEvadeFirePossible() then + self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTEvadeFire(), ParamMessage = "Evading on enemy fire!" } ) + end + if self.EscortGroup:OptionROTVerticalPossible() then + self.EscortMenuOptionEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTVertical(), ParamMessage = "Evading on enemy fire with vertical manoeuvres!" } ) + end + end + end + + return self +end + +--- Defines a menu to let the escort resume its mission from a waypoint on its route. +-- All rules of engagement will appear under the menu **Resume mission from**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuResumeMission() + self:F() + + if not self.EscortMenuResumeMission then + -- Mission Resume Menu Root + self.EscortMenuResumeMission = MENU_CLIENT:New( self.EscortClient, "Resume mission from", self.EscortMenu ) + end + + return self +end + + +--- @param #MENUPARAM MenuParam +function ESCORT._HoldPosition( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local OrbitGroup = MenuParam.ParamOrbitGroup -- Group#GROUP + local OrbitUnit = OrbitGroup:GetUnit(1) -- Unit#UNIT + local OrbitHeight = MenuParam.ParamHeight + local OrbitSeconds = MenuParam.ParamSeconds -- Not implemented yet + + routines.removeFunction( self.FollowScheduler ) + + local PointFrom = {} + local GroupPoint = EscortGroup:GetUnit(1):GetPointVec3() + PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.z + PointFrom.speed = 250 + PointFrom.type = AI.Task.WaypointType.TURNING_POINT + PointFrom.alt = GroupPoint.y + PointFrom.alt_type = AI.Task.AltitudeType.BARO + + local OrbitPoint = OrbitUnit:GetPointVec2() + local PointTo = {} + PointTo.x = OrbitPoint.x + PointTo.y = OrbitPoint.y + PointTo.speed = 250 + PointTo.type = AI.Task.WaypointType.TURNING_POINT + PointTo.alt = OrbitHeight + PointTo.alt_type = AI.Task.AltitudeType.BARO + PointTo.task = EscortGroup:TaskOrbitCircleAtVec2( OrbitPoint, OrbitHeight, 0 ) + + local Points = { PointFrom, PointTo } + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + EscortGroup:SetTask( EscortGroup:TaskRoute( Points ) ) + EscortGroup:MessageToClient( "Orbiting at location.", 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._JoinUpAndFollow( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.Distance = MenuParam.ParamDistance + + self:JoinUpAndFollow( EscortGroup, EscortClient, self.Distance ) +end + +--- JoinsUp and Follows a CLIENT. +-- @param Escort#ESCORT self +-- @param Group#GROUP EscortGroup +-- @param Client#CLIENT EscortClient +-- @param DCSTypes#Distance Distance +function ESCORT:JoinUpAndFollow( EscortGroup, EscortClient, Distance ) + self:F( { EscortGroup, EscortClient, Distance } ) + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + self.EscortMode = ESCORT.MODE.FOLLOW + + self.CT1 = 0 + self.GT1 = 0 + --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + 1, .5 ) + self.FollowScheduler = SCHEDULER:New( self, self._FollowScheduler, { Distance }, 1, .5, .1 ) + EscortGroup:MessageToClient( "Rejoining and Following at " .. Distance .. "!", 30, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._Flare( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local Color = MenuParam.ParamColor + local Message = MenuParam.ParamMessage + + EscortGroup:GetUnit(1):Flare( Color ) + EscortGroup:MessageToClient( Message, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._Smoke( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local Color = MenuParam.ParamColor + local Message = MenuParam.ParamMessage + + EscortGroup:GetUnit(1):Smoke( Color ) + EscortGroup:MessageToClient( Message, 10, EscortClient ) +end + + +--- @param #MENUPARAM MenuParam +function ESCORT._ReportNearbyTargetsNow( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self:_ReportTargetsScheduler() + +end + +function ESCORT._SwitchReportNearbyTargets( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.ReportTargets = MenuParam.ParamReportTargets + + if self.ReportTargets then + if not self.ReportTargetsScheduler then + --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, 30 ) + self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, 30 ) + end + else + routines.removeFunction( self.ReportTargetsScheduler ) + self.ReportTargetsScheduler = nil + end +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ScanTargets( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local ScanDuration = MenuParam.ParamScanDuration + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + self:T( { "FollowScheduler after removefunction: ", self.FollowScheduler } ) + + if EscortGroup:IsHelicopter() then + SCHEDULER:New( EscortGroup, EscortGroup.PushTask, + { EscortGroup:TaskControlled( + EscortGroup:TaskOrbitCircle( 200, 20 ), + EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) + ) + }, + 1 + ) + elseif EscortGroup:IsAirPlane() then + SCHEDULER:New( EscortGroup, EscortGroup.PushTask, + { EscortGroup:TaskControlled( + EscortGroup:TaskOrbitCircle( 1000, 500 ), + EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) + ) + }, + 1 + ) + end + + EscortGroup:MessageToClient( "Scanning targets for " .. ScanDuration .. " seconds.", ScanDuration, EscortClient ) + + if self.EscortMode == ESCORT.MODE.FOLLOW then + --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + ScanDuration, 1 ) + self.FollowScheduler:Start() + end + +end + +function _Resume( EscortGroup ) + env.info( '_Resume' ) + + local Escort = EscortGroup.Escort -- #ESCORT + env.info( "EscortMode = " .. Escort.EscortMode ) + if Escort.EscortMode == ESCORT.MODE.FOLLOW then + Escort:JoinUpAndFollow( EscortGroup, Escort.EscortClient, Escort.Distance ) + end + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._AttackTarget( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + self:T( AttackUnit ) + + if EscortGroup:IsAir() then + EscortGroup:OptionROEOpenFire() + EscortGroup:OptionROTPassiveDefense() + EscortGroup.Escort = self -- Need to do this trick to get the reference for the escort in the _Resume function. +-- routines.scheduleFunction( +-- EscortGroup.PushTask, +-- { EscortGroup, +-- EscortGroup:TaskCombo( +-- { EscortGroup:TaskAttackUnit( AttackUnit ), +-- EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroup, + EscortGroup.PushTask, + { EscortGroup:TaskCombo( + { EscortGroup:TaskAttackUnit( AttackUnit ), + EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) + } + ) + }, 10 + ) + else +-- routines.scheduleFunction( +-- EscortGroup.PushTask, +-- { EscortGroup, +-- EscortGroup:TaskCombo( +-- { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroup, + EscortGroup.PushTask, + { EscortGroup:TaskCombo( + { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) + } + ) + }, 10 + ) + end + EscortGroup:MessageToClient( "Engaging Designated Unit!", 10, EscortClient ) + + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._AssistTarget( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + local EscortGroupAttack = MenuParam.ParamEscortGroup + local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + + self:T( AttackUnit ) + + if EscortGroupAttack:IsAir() then + EscortGroupAttack:OptionROEOpenFire() + EscortGroupAttack:OptionROTVertical() +-- routines.scheduleFunction( +-- EscortGroupAttack.PushTask, +-- { EscortGroupAttack, +-- EscortGroupAttack:TaskCombo( +-- { EscortGroupAttack:TaskAttackUnit( AttackUnit ), +-- EscortGroupAttack:TaskOrbitCircle( 500, 350 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHDULER:New( EscortGroupAttack, + EscortGroupAttack.PushTask, + { EscortGroupAttack:TaskCombo( + { EscortGroupAttack:TaskAttackUnit( AttackUnit ), + EscortGroupAttack:TaskOrbitCircle( 500, 350 ) + } + ) + }, 10 + ) + else +-- routines.scheduleFunction( +-- EscortGroupAttack.PushTask, +-- { EscortGroupAttack, +-- EscortGroupAttack:TaskCombo( +-- { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroupAttack, + EscortGroupAttack.PushTask, + { EscortGroupAttack:TaskCombo( + { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) + } + ) + }, 10 + ) + end + EscortGroupAttack:MessageToClient( "Assisting with the destroying the enemy unit!", 10, EscortClient ) + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ROE( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local EscortROEFunction = MenuParam.ParamFunction + local EscortROEMessage = MenuParam.ParamMessage + + pcall( function() EscortROEFunction() end ) + EscortGroup:MessageToClient( EscortROEMessage, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ROT( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local EscortROTFunction = MenuParam.ParamFunction + local EscortROTMessage = MenuParam.ParamMessage + + pcall( function() EscortROTFunction() end ) + EscortGroup:MessageToClient( EscortROTMessage, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ResumeMission( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local WayPoint = MenuParam.ParamWayPoint + + routines.removeFunction( self.FollowScheduler ) + self.FollowScheduler = nil + + local WayPoints = EscortGroup:GetTaskRoute() + self:T( WayPoint, WayPoints ) + + for WayPointIgnore = 1, WayPoint do + table.remove( WayPoints, 1 ) + end + + --routines.scheduleFunction( EscortGroup.SetTask, {EscortGroup, EscortGroup:TaskRoute( WayPoints ) }, timer.getTime() + 1 ) + SCHEDULER:New( EscortGroup, EscortGroup.SetTask, { EscortGroup:TaskRoute( WayPoints ) }, 1 ) + + EscortGroup:MessageToClient( "Resuming mission from waypoint " .. WayPoint .. ".", 10, EscortClient ) +end + +--- Registers the waypoints +-- @param #ESCORT self +-- @return #table +function ESCORT:RegisterRoute() + self:F() + + local EscortGroup = self.EscortGroup -- Group#GROUP + + local TaskPoints = EscortGroup:GetTaskRoute() + + self:T( TaskPoints ) + + return TaskPoints +end + +--- @param Escort#ESCORT self +function ESCORT:_FollowScheduler( FollowDistance ) + self:F( { FollowDistance }) + + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + + local ClientUnit = self.EscortClient:GetClientGroupUnit() + local GroupUnit = self.EscortGroup:GetUnit( 1 ) + + if self.CT1 == 0 and self.GT1 == 0 then + self.CV1 = ClientUnit:GetPointVec3() + self.CT1 = timer.getTime() + self.GV1 = GroupUnit:GetPointVec3() + self.GT1 = timer.getTime() + else + local CT1 = self.CT1 + local CT2 = timer.getTime() + local CV1 = self.CV1 + local CV2 = ClientUnit:GetPointVec3() + self.CT1 = CT2 + self.CV1 = CV2 + + local CD = ( ( CV2.x - CV1.x )^2 + ( CV2.y - CV1.y )^2 + ( CV2.z - CV1.z )^2 ) ^ 0.5 + local CT = CT2 - CT1 + + local CS = ( 3600 / CT ) * ( CD / 1000 ) + + self:T2( { "Client:", CS, CD, CT, CV2, CV1, CT2, CT1 } ) + + local GT1 = self.GT1 + local GT2 = timer.getTime() + local GV1 = self.GV1 + local GV2 = GroupUnit:GetPointVec3() + self.GT1 = GT2 + self.GV1 = GV2 + + local GD = ( ( GV2.x - GV1.x )^2 + ( GV2.y - GV1.y )^2 + ( GV2.z - GV1.z )^2 ) ^ 0.5 + local GT = GT2 - GT1 + + local GS = ( 3600 / GT ) * ( GD / 1000 ) + + self:T2( { "Group:", GS, GD, GT, GV2, GV1, GT2, GT1 } ) + + -- Calculate the group direction vector + local GV = { x = GV2.x - CV2.x, y = GV2.y - CV2.y, z = GV2.z - CV2.z } + + -- Calculate GH2, GH2 with the same height as CV2. + local GH2 = { x = GV2.x, y = CV2.y, z = GV2.z } + + -- Calculate the angle of GV to the orthonormal plane + local alpha = math.atan2( GV.z, GV.x ) + + -- Now we calculate the intersecting vector between the circle around CV2 with radius FollowDistance and GH2. + -- From the GeoGebra model: CVI = (x(CV2) + FollowDistance cos(alpha), y(GH2) + FollowDistance sin(alpha), z(CV2)) + local CVI = { x = CV2.x + FollowDistance * math.cos(alpha), + y = GH2.y, + z = CV2.z + FollowDistance * math.sin(alpha), + } + + -- Calculate the direction vector DV of the escort group. We use CVI as the base and CV2 as the direction. + local DV = { x = CV2.x - CVI.x, y = CV2.y - CVI.y, z = CV2.z - CVI.z } + + -- We now calculate the unary direction vector DVu, so that we can multiply DVu with the speed, which is expressed in meters / s. + -- We need to calculate this vector to predict the point the escort group needs to fly to according its speed. + -- The distance of the destination point should be far enough not to have the aircraft starting to swipe left to right... + local DVu = { x = DV.x / FollowDistance, y = DV.y / FollowDistance, z = DV.z / FollowDistance } + + -- Now we can calculate the group destination vector GDV. + local GDV = { x = DVu.x * CS * 8 + CVI.x, y = CVI.y, z = DVu.z * CS * 8 + CVI.z } + + --trigger.action.smoke( GDV, trigger.smokeColor.Red ) + self:T2( { "CV2:", CV2 } ) + self:T2( { "CVI:", CVI } ) + self:T2( { "GDV:", GDV } ) + + -- Measure distance between client and group + local CatchUpDistance = ( ( GDV.x - GV2.x )^2 + ( GDV.y - GV2.y )^2 + ( GDV.z - GV2.z )^2 ) ^ 0.5 + + -- The calculation of the Speed would simulate that the group would take 30 seconds to overcome + -- the requested Distance). + local Time = 10 + local CatchUpSpeed = ( CatchUpDistance - ( CS * 8.4 ) ) / Time + + local Speed = CS + CatchUpSpeed + if Speed < 0 then + Speed = 0 + end + + self:T( { "Client Speed, Escort Speed, Speed, FlyDistance, Time:", CS, GS, Speed, Distance, Time } ) + + -- Now route the escort to the desired point with the desired speed. + self.EscortGroup:TaskRouteToVec3( GDV, Speed / 3.6 ) -- DCS models speed in Mps (Miles per second) + end + return true + end + + return false +end + + +--- Report Targets Scheduler. +-- @param #ESCORT self +function ESCORT:_ReportTargetsScheduler() + self:F( self.EscortGroup:GetName() ) + + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + local EscortGroupName = self.EscortGroup:GetName() + local EscortTargets = self.EscortGroup:GetDetectedTargets() + + local ClientEscortTargets = self.EscortClient._EscortGroups[EscortGroupName].Targets + + local EscortTargetMessages = "" + for EscortTargetID, EscortTarget in pairs( EscortTargets ) do + local EscortObject = EscortTarget.object + self:T( EscortObject ) + if EscortObject and EscortObject:isExist() and EscortObject.id_ < 50000000 then + + local EscortTargetUnit = UNIT:Find( EscortObject ) + local EscortTargetUnitName = EscortTargetUnit:GetName() + + + + -- local EscortTargetIsDetected, + -- EscortTargetIsVisible, + -- EscortTargetLastTime, + -- EscortTargetKnowType, + -- EscortTargetKnowDistance, + -- EscortTargetLastPos, + -- EscortTargetLastVelocity + -- = self.EscortGroup:IsTargetDetected( EscortObject ) + -- + -- self:T( { EscortTargetIsDetected, + -- EscortTargetIsVisible, + -- EscortTargetLastTime, + -- EscortTargetKnowType, + -- EscortTargetKnowDistance, + -- EscortTargetLastPos, + -- EscortTargetLastVelocity } ) + + + local EscortTargetUnitPositionVec3 = EscortTargetUnit:GetPointVec3() + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + + ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + + ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + + self:T( { self.EscortGroup:GetName(), EscortTargetUnit:GetName(), Distance, EscortTarget } ) + + if Distance <= 15 then + + if not ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = {} + end + ClientEscortTargets[EscortTargetUnitName].AttackUnit = EscortTargetUnit + ClientEscortTargets[EscortTargetUnitName].visible = EscortTarget.visible + ClientEscortTargets[EscortTargetUnitName].type = EscortTarget.type + ClientEscortTargets[EscortTargetUnitName].distance = EscortTarget.distance + else + if ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = nil + end + end + end + end + + self:T( { "Sorting Targets Table:", ClientEscortTargets } ) + table.sort( ClientEscortTargets, function( a, b ) return a.Distance < b.Distance end ) + self:T( { "Sorted Targets Table:", ClientEscortTargets } ) + + -- Remove the sub menus of the Attack menu of the Escort for the EscortGroup. + self.EscortMenuAttackNearbyTargets:RemoveSubMenus() + + if self.EscortMenuTargetAssistance then + self.EscortMenuTargetAssistance:RemoveSubMenus() + end + + --for MenuIndex = 1, #self.EscortMenuAttackTargets do + -- self:T( { "Remove Menu:", self.EscortMenuAttackTargets[MenuIndex] } ) + -- self.EscortMenuAttackTargets[MenuIndex] = self.EscortMenuAttackTargets[MenuIndex]:Remove() + --end + + + if ClientEscortTargets then + for ClientEscortTargetUnitName, ClientEscortTargetData in pairs( ClientEscortTargets ) do + + for ClientEscortGroupName, EscortGroupData in pairs( self.EscortClient._EscortGroups ) do + + if ClientEscortTargetData and ClientEscortTargetData.AttackUnit:IsAlive() then + + local EscortTargetMessage = "" + local EscortTargetCategoryName = ClientEscortTargetData.AttackUnit:GetCategoryName() + local EscortTargetCategoryType = ClientEscortTargetData.AttackUnit:GetTypeName() + if ClientEscortTargetData.type then + EscortTargetMessage = EscortTargetMessage .. EscortTargetCategoryName .. " (" .. EscortTargetCategoryType .. ") at " + else + EscortTargetMessage = EscortTargetMessage .. "Unknown target at " + end + + local EscortTargetUnitPositionVec3 = ClientEscortTargetData.AttackUnit:GetPointVec3() + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + + ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + + ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + + self:T( { self.EscortGroup:GetName(), ClientEscortTargetData.AttackUnit:GetName(), Distance, ClientEscortTargetData.AttackUnit } ) + if ClientEscortTargetData.visible == false then + EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " estimated km" + else + EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " km" + end + + if ClientEscortTargetData.visible then + EscortTargetMessage = EscortTargetMessage .. ", visual" + end + + if ClientEscortGroupName == EscortGroupName then + + MENU_CLIENT_COMMAND:New( self.EscortClient, + EscortTargetMessage, + self.EscortMenuAttackNearbyTargets, + ESCORT._AttackTarget, + { ParamSelf = self, + ParamUnit = ClientEscortTargetData.AttackUnit + } + ) + EscortTargetMessages = EscortTargetMessages .. "\n - " .. EscortTargetMessage + else + if self.EscortMenuTargetAssistance then + local MenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, EscortGroupData.EscortName, self.EscortMenuTargetAssistance ) + MENU_CLIENT_COMMAND:New( self.EscortClient, + EscortTargetMessage, + MenuTargetAssistance, + ESCORT._AssistTarget, + { ParamSelf = self, + ParamEscortGroup = EscortGroupData.EscortGroup, + ParamUnit = ClientEscortTargetData.AttackUnit + } + ) + end + end + else + ClientEscortTargetData = nil + end + end + end + + if EscortTargetMessages ~= "" and self.ReportTargets == true then + self.EscortGroup:MessageToClient( "Detected targets within 15 km range:" .. EscortTargetMessages:gsub("\n$",""), 20, self.EscortClient ) + else + self.EscortGroup:MessageToClient( "No targets detected!", 20, self.EscortClient ) + end + end + + if self.EscortMenuResumeMission then + self.EscortMenuResumeMission:RemoveSubMenus() + + -- if self.EscortMenuResumeWayPoints then + -- for MenuIndex = 1, #self.EscortMenuResumeWayPoints do + -- self:T( { "Remove Menu:", self.EscortMenuResumeWayPoints[MenuIndex] } ) + -- self.EscortMenuResumeWayPoints[MenuIndex] = self.EscortMenuResumeWayPoints[MenuIndex]:Remove() + -- end + -- end + + local TaskPoints = self:RegisterRoute() + for WayPointID, WayPoint in pairs( TaskPoints ) do + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( WayPoint.x - EscortPositionVec3.x )^2 + + ( WayPoint.y - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + MENU_CLIENT_COMMAND:New( self.EscortClient, "Waypoint " .. WayPointID .. " at " .. string.format( "%.2f", Distance ).. "km", self.EscortMenuResumeMission, ESCORT._ResumeMission, { ParamSelf = self, ParamWayPoint = WayPointID } ) + end + end + return true + end + + return false +end +--- Provides missile training functions. +-- +-- @{#MISSILETRAINER} class +-- ======================== +-- The @{#MISSILETRAINER} class uses the DCS world messaging system to be alerted of any missiles fired, and when a missile would hit your aircraft, +-- the class will destroy the missile within a certain range, to avoid damage to your aircraft. +-- It suports the following functionality: +-- +-- * Track the missiles fired at you and other players, providing bearing and range information of the missiles towards the airplanes. +-- * Provide alerts of missile launches, including detailed information of the units launching, including bearing, range … +-- * Provide alerts when a missile would have killed your aircraft. +-- * Provide alerts when the missile self destructs. +-- * Enable / Disable and Configure the Missile Trainer using the various menu options. +-- +-- When running a mission where MISSILETRAINER is used, the following radio menu structure ( 'Radio Menu' -> 'Other (F10)' -> 'MissileTrainer' ) options are available for the players: +-- +-- * **Messages**: Menu to configure all messages. +-- * **Messages On**: Show all messages. +-- * **Messages Off**: Disable all messages. +-- * **Tracking**: Menu to configure missile tracking messages. +-- * **To All**: Shows missile tracking messages to all players. +-- * **To Target**: Shows missile tracking messages only to the player where the missile is targetted at. +-- * **Tracking On**: Show missile tracking messages. +-- * **Tracking Off**: Disable missile tracking messages. +-- * **Frequency Increase**: Increases the missile tracking message frequency with one second. +-- * **Frequency Decrease**: Decreases the missile tracking message frequency with one second. +-- * **Alerts**: Menu to configure alert messages. +-- * **To All**: Shows alert messages to all players. +-- * **To Target**: Shows alert messages only to the player where the missile is (was) targetted at. +-- * **Hits On**: Show missile hit alert messages. +-- * **Hits Off**: Disable missile hit alert messages. +-- * **Launches On**: Show missile launch messages. +-- * **Launches Off**: Disable missile launch messages. +-- * **Details**: Menu to configure message details. +-- * **Range On**: Shows range information when a missile is fired to a target. +-- * **Range Off**: Disable range information when a missile is fired to a target. +-- * **Bearing On**: Shows bearing information when a missile is fired to a target. +-- * **Bearing Off**: Disable bearing information when a missile is fired to a target. +-- * **Distance**: Menu to configure the distance when a missile needs to be destroyed when near to a player, during tracking. This will improve/influence hit calculation accuracy, but has the risk of damaging the aircraft when the missile reaches the aircraft before the distance is measured. +-- * **50 meter**: Destroys the missile when the distance to the aircraft is below or equal to 50 meter. +-- * **100 meter**: Destroys the missile when the distance to the aircraft is below or equal to 100 meter. +-- * **150 meter**: Destroys the missile when the distance to the aircraft is below or equal to 150 meter. +-- * **200 meter**: Destroys the missile when the distance to the aircraft is below or equal to 200 meter. +-- +-- +-- MISSILETRAINER construction methods: +-- ==================================== +-- Create a new MISSILETRAINER object with the @{#MISSILETRAINER.New} method: +-- +-- * @{#MISSILETRAINER.New}: Creates a new MISSILETRAINER object taking the maximum distance to your aircraft to evaluate when a missile needs to be destroyed. +-- +-- MISSILETRAINER will collect each unit declared in the mission with a skill level "Client" and "Player", and will monitor the missiles shot at those. +-- +-- MISSILETRAINER initialization methods: +-- ====================================== +-- A MISSILETRAINER object will behave differently based on the usage of initialization methods: +-- +-- * @{#MISSILETRAINER.InitMessagesOnOff}: Sets by default the display of any message to be ON or OFF. +-- * @{#MISSILETRAINER.InitTrackingToAll}: Sets by default the missile tracking report for all players or only for those missiles targetted to you. +-- * @{#MISSILETRAINER.InitTrackingOnOff}: Sets by default the display of missile tracking report to be ON or OFF. +-- * @{#MISSILETRAINER.InitTrackingFrequency}: Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. +-- * @{#MISSILETRAINER.InitAlertsToAll}: Sets by default the display of alerts to be shown to all players or only to you. +-- * @{#MISSILETRAINER.InitAlertsHitsOnOff}: Sets by default the display of hit alerts ON or OFF. +-- * @{#MISSILETRAINER.InitAlertsLaunchesOnOff}: Sets by default the display of launch alerts ON or OFF. +-- * @{#MISSILETRAINER.InitRangeOnOff}: Sets by default the display of range information of missiles ON of OFF. +-- * @{#MISSILETRAINER.InitBearingOnOff}: Sets by default the display of bearing information of missiles ON of OFF. +-- * @{#MISSILETRAINER.InitMenusOnOff}: Allows to configure the options through the radio menu. +-- +-- @module MissileTrainer +-- @author FlightControl + + +Include.File( "Client" ) +Include.File( "Scheduler" ) + +--- The MISSILETRAINER class +-- @type MISSILETRAINER +-- @extends Base#BASE +MISSILETRAINER = { + ClassName = "MISSILETRAINER", +} + +--- Creates the main object which is handling missile tracking. +-- When a missile is fired a SCHEDULER is set off that follows the missile. When near a certain a client player, the missile will be destroyed. +-- @param #MISSILETRAINER self +-- @param #number Distance The distance in meters when a tracked missile needs to be destroyed when close to a player. +-- @param #string Briefing (Optional) Will show a text to the players when starting their mission. Can be used for briefing purposes. +-- @return #MISSILETRAINER +function MISSILETRAINER:New( Distance, Briefing ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( Distance ) + + if Briefing then + self.Briefing = Briefing + end + + self.Schedulers = {} + self.SchedulerID = 0 + + self.MessageInterval = 2 + self.MessageLastTime = timer.getTime() + + self.Distance = Distance / 1000 + + _EVENTDISPATCHER:OnShot( self._EventShot, self ) + + self.DB = DATABASE:New():FilterStart() + self.DBClients = self.DB.Clients + self.DBUnits = self.DB.Units + + for ClientID, Client in pairs( self.DBClients ) do + + local function _Alive( Client ) + + if self.Briefing then + Client:Message( self.Briefing, 15, "HELLO WORLD", "Trainer" ) + end + + if self.MenusOnOff == true then + Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "MENU", "Trainer" ) + + Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) -- Menu#MENU_CLIENT + + Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu ) + Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } ) + Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } ) + + Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu ) + Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } ) + Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } ) + Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = true } ) + Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = false } ) + Client.MenuTrackIncrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Increase", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = -1 } ) + Client.MenuTrackDecrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Decrease", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = 1 } ) + + Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu ) + Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } ) + Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } ) + Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = true } ) + Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = false } ) + Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = true } ) + Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = false } ) + + Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu ) + Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = true } ) + Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = false } ) + Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = true } ) + Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = false } ) + + Client.MenuDistance = MENU_CLIENT:New( Client, "Set distance to plane", Client.MainMenu ) + Client.MenuDistance50 = MENU_CLIENT_COMMAND:New( Client, "50 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 50 / 1000 } ) + Client.MenuDistance100 = MENU_CLIENT_COMMAND:New( Client, "100 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 100 / 1000 } ) + Client.MenuDistance150 = MENU_CLIENT_COMMAND:New( Client, "150 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 150 / 1000 } ) + Client.MenuDistance200 = MENU_CLIENT_COMMAND:New( Client, "200 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 200 / 1000 } ) + else + if Client.MainMenu then + Client.MainMenu:Remove() + end + end + + + local ClientID = Client:GetID() + self:T( ClientID ) + if not self.TrackingMissiles[ClientID] then + self.TrackingMissiles[ClientID] = {} + end + self.TrackingMissiles[ClientID].Client = Client + if not self.TrackingMissiles[ClientID].MissileData then + self.TrackingMissiles[ClientID].MissileData = {} + end + end + + Client:Alive( _Alive ) + + end + +-- self.DB:ForEachClient( +-- --- @param Client#CLIENT Client +-- function( Client ) +-- +-- ... actions ... +-- +-- end +-- ) + + self.MessagesOnOff = true + + self.TrackingToAll = false + self.TrackingOnOff = true + self.TrackingFrequency = 3 + + self.AlertsToAll = true + self.AlertsHitsOnOff = true + self.AlertsLaunchesOnOff = true + + self.DetailsRangeOnOff = true + self.DetailsBearingOnOff = true + + self.MenusOnOff = true + + self.TrackingMissiles = {} + + self.TrackingScheduler = SCHEDULER:New( self, self._TrackMissiles, {}, 0.5, 0.05, 0 ) + + return self +end + +-- Initialization methods. + + +--- Sets by default the display of any message to be ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean MessagesOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitMessagesOnOff( MessagesOnOff ) + self:F( MessagesOnOff ) + + self.MessagesOnOff = MessagesOnOff + if self.MessagesOnOff == true then + MESSAGE:New( "Messages ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Messages OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the missile tracking report for all players or only for those missiles targetted to you. +-- @param #MISSILETRAINER self +-- @param #boolean TrackingToAll true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingToAll( TrackingToAll ) + self:F( TrackingToAll ) + + self.TrackingToAll = TrackingToAll + if self.TrackingToAll == true then + MESSAGE:New( "Missile tracking to all players ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Missile tracking to all players OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of missile tracking report to be ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean TrackingOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingOnOff( TrackingOnOff ) + self:F( TrackingOnOff ) + + self.TrackingOnOff = TrackingOnOff + if self.TrackingOnOff == true then + MESSAGE:New( "Missile tracking ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Missile tracking OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. +-- The default frequency is a 3 second interval, so the Tracking Frequency parameter specifies the increase or decrease from the default 3 seconds or the last frequency update. +-- @param #MISSILETRAINER self +-- @param #number TrackingFrequency Provide a negative or positive value in seconds to incraese or decrease the display frequency. +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingFrequency( TrackingFrequency ) + self:F( TrackingFrequency ) + + self.TrackingFrequency = self.TrackingFrequency + TrackingFrequency + if self.TrackingFrequency < 0.5 then + self.TrackingFrequency = 0.5 + end + if self.TrackingFrequency then + MESSAGE:New( "Missile tracking frequency is " .. self.TrackingFrequency .. " seconds.", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of alerts to be shown to all players or only to you. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsToAll true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsToAll( AlertsToAll ) + self:F( AlertsToAll ) + + self.AlertsToAll = AlertsToAll + if self.AlertsToAll == true then + MESSAGE:New( "Alerts to all players ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts to all players OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of hit alerts ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsHitsOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsHitsOnOff( AlertsHitsOnOff ) + self:F( AlertsHitsOnOff ) + + self.AlertsHitsOnOff = AlertsHitsOnOff + if self.AlertsHitsOnOff == true then + MESSAGE:New( "Alerts Hits ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts Hits OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of launch alerts ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsLaunchesOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsLaunchesOnOff( AlertsLaunchesOnOff ) + self:F( AlertsLaunchesOnOff ) + + self.AlertsLaunchesOnOff = AlertsLaunchesOnOff + if self.AlertsLaunchesOnOff == true then + MESSAGE:New( "Alerts Launches ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts Launches OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of range information of missiles ON of OFF. +-- @param #MISSILETRAINER self +-- @param #boolean DetailsRangeOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitRangeOnOff( DetailsRangeOnOff ) + self:F( DetailsRangeOnOff ) + + self.DetailsRangeOnOff = DetailsRangeOnOff + if self.DetailsRangeOnOff == true then + MESSAGE:New( "Range display ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Range display OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of bearing information of missiles ON of OFF. +-- @param #MISSILETRAINER self +-- @param #boolean DetailsBearingOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitBearingOnOff( DetailsBearingOnOff ) + self:F( DetailsBearingOnOff ) + + self.DetailsBearingOnOff = DetailsBearingOnOff + if self.DetailsBearingOnOff == true then + MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Enables / Disables the menus. +-- @param #MISSILETRAINER self +-- @param #boolean MenusOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitMenusOnOff( MenusOnOff ) + self:F( MenusOnOff ) + + self.MenusOnOff = MenusOnOff + if self.MenusOnOff == true then + MESSAGE:New( "Menus are ENABLED (only when a player rejoins a slot)", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Menus are DISABLED", "Menu", 15, "ID" ):ToAll() + end + + return self +end + + +-- Menu functions + +function MISSILETRAINER._MenuMessages( MenuParameters ) + + local self = MenuParameters.MenuSelf + + if MenuParameters.MessagesOnOff ~= nil then + self:InitMessagesOnOff( MenuParameters.MessagesOnOff ) + end + + if MenuParameters.TrackingToAll ~= nil then + self:InitTrackingToAll( MenuParameters.TrackingToAll ) + end + + if MenuParameters.TrackingOnOff ~= nil then + self:InitTrackingOnOff( MenuParameters.TrackingOnOff ) + end + + if MenuParameters.TrackingFrequency ~= nil then + self:InitTrackingFrequency( MenuParameters.TrackingFrequency ) + end + + if MenuParameters.AlertsToAll ~= nil then + self:InitAlertsToAll( MenuParameters.AlertsToAll ) + end + + if MenuParameters.AlertsHitsOnOff ~= nil then + self:InitAlertsHitsOnOff( MenuParameters.AlertsHitsOnOff ) + end + + if MenuParameters.AlertsLaunchesOnOff ~= nil then + self:InitAlertsLaunchesOnOff( MenuParameters.AlertsLaunchesOnOff ) + end + + if MenuParameters.DetailsRangeOnOff ~= nil then + self:InitRangeOnOff( MenuParameters.DetailsRangeOnOff ) + end + + if MenuParameters.DetailsBearingOnOff ~= nil then + self:InitBearingOnOff( MenuParameters.DetailsBearingOnOff ) + end + + if MenuParameters.Distance ~= nil then + self.Distance = MenuParameters.Distance + MESSAGE:New( "Hit detection distance set to " .. self.Distance .. " meters", "Menu", 15, "ID" ):ToAll() + end + +end + +--- Detects if an SA site was shot with an anti radiation missile. In this case, take evasive actions based on the skill level set within the ME. +-- @param #MISSILETRAINER self +-- @param Event#EVENTDATA Event +function MISSILETRAINER:_EventShot( Event ) + self:F( { Event } ) + + local TrainerSourceDCSUnit = Event.IniDCSUnit + local TrainerSourceDCSUnitName = Event.IniDCSUnitName + local TrainerWeapon = Event.Weapon -- Identify the weapon fired + local TrainerWeaponName = Event.WeaponName -- return weapon type + + self:T( "Missile Launched = " .. TrainerWeaponName ) + + local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target + local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit ) + local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill + + self:T(TrainerTargetDCSUnitName ) + + local Client = self.DBClients[TrainerTargetDCSUnitName] + if Client then + + local TrainerSourceUnit = UNIT:Find( TrainerSourceDCSUnit ) + local TrainerTargetUnit = UNIT:Find( TrainerTargetDCSUnit ) + + if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then + + local Message = MESSAGE:New( + string.format( "%s launched a %s", + TrainerSourceUnit:GetTypeName(), + TrainerWeaponName + ) .. self:_AddRange( Client, TrainerWeapon ) .. self:_AddBearing( Client, TrainerWeapon ),"Launch Alert", 5, "ID" ) + + if self.AlertsToAll then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + + local ClientID = Client:GetID() + local MissileData = {} + MissileData.TrainerSourceUnit = TrainerSourceUnit + MissileData.TrainerWeapon = TrainerWeapon + MissileData.TrainerTargetUnit = TrainerTargetUnit + MissileData.TrainerWeaponTypeName = TrainerWeapon:getTypeName() + MissileData.TrainerWeaponLaunched = true + table.insert( self.TrackingMissiles[ClientID].MissileData, MissileData ) + --self:T( self.TrackingMissiles ) + end +end + +function MISSILETRAINER:_AddRange( Client, TrainerWeapon ) + + local RangeText = "" + + if self.DetailsRangeOnOff then + + local PositionMissile = TrainerWeapon:getPoint() + local PositionTarget = Client:GetPointVec3() + + local Range = ( ( PositionMissile.x - PositionTarget.x )^2 + + ( PositionMissile.y - PositionTarget.y )^2 + + ( PositionMissile.z - PositionTarget.z )^2 + ) ^ 0.5 / 1000 + + RangeText = string.format( ", at %4.2fkm", Range ) + end + + return RangeText +end + +function MISSILETRAINER:_AddBearing( Client, TrainerWeapon ) + + local BearingText = "" + + if self.DetailsBearingOnOff then + + local PositionMissile = TrainerWeapon:getPoint() + local PositionTarget = Client:GetPointVec3() + + self:T2( { PositionTarget, PositionMissile }) + + local DirectionVector = { x = PositionMissile.x - PositionTarget.x, y = PositionMissile.y - PositionTarget.y, z = PositionMissile.z - PositionTarget.z } + local DirectionRadians = math.atan2( DirectionVector.z, DirectionVector.x ) + --DirectionRadians = DirectionRadians + routines.getNorthCorrection( PositionTarget ) + if DirectionRadians < 0 then + DirectionRadians = DirectionRadians + 2 * math.pi + end + local DirectionDegrees = DirectionRadians * 180 / math.pi + + BearingText = string.format( ", %d degrees", DirectionDegrees ) + end + + return BearingText +end + + +function MISSILETRAINER:_TrackMissiles() + self:F2() + + + local ShowMessages = false + if self.MessagesOnOff and self.MessageLastTime + self.TrackingFrequency <= timer.getTime() then + self.MessageLastTime = timer.getTime() + ShowMessages = true + end + + -- ALERTS PART + + -- Loop for all Player Clients to check the alerts and deletion of missiles. + for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do + + local Client = ClientData.Client + self:T2( { Client:GetName() } ) + + for MissileDataID, MissileData in pairs( ClientData.MissileData ) do + self:T3( MissileDataID ) + + local TrainerSourceUnit = MissileData.TrainerSourceUnit + local TrainerWeapon = MissileData.TrainerWeapon + local TrainerTargetUnit = MissileData.TrainerTargetUnit + local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName + local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched + + if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then + local PositionMissile = TrainerWeapon:getPosition().p + local PositionTarget = Client:GetPointVec3() + + local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 + + ( PositionMissile.y - PositionTarget.y )^2 + + ( PositionMissile.z - PositionTarget.z )^2 + ) ^ 0.5 / 1000 + + if Distance <= self.Distance then + -- Hit alert + TrainerWeapon:destroy() + if self.MessagesOnOff == true and self.AlertsHitsOnOff == true then + + self:T( "killed" ) + + local Message = MESSAGE:New( + string.format( "%s launched by %s killed %s", + TrainerWeapon:getTypeName(), + TrainerSourceUnit:GetTypeName(), + TrainerTargetUnit:GetPlayerName() + ),"Hit Alert", 15, "ID" ) + + if self.AlertsToAll == true then + Message:ToAll() + else + Message:ToClient( Client ) + end + + MissileData = nil + table.remove( ClientData.MissileData, MissileDataID ) + self:T(ClientData.MissileData) + end + end + else + if not ( TrainerWeapon and TrainerWeapon:isExist() ) then + if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then + -- Weapon does not exist anymore. Delete from Table + local Message = MESSAGE:New( + string.format( "%s launched by %s self destructed!", + TrainerWeaponTypeName, + TrainerSourceUnit:GetTypeName() + ),"Tracking", 5, "ID" ) + + if self.AlertsToAll == true then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + MissileData = nil + table.remove( ClientData.MissileData, MissileDataID ) + self:T( ClientData.MissileData ) + end + end + end + end + + if ShowMessages == true and self.MessagesOnOff == true and self.TrackingOnOff == true then -- Only do this when tracking information needs to be displayed. + + -- TRACKING PART + + -- For the current client, the missile range and bearing details are displayed To the Player Client. + -- For the other clients, the missile range and bearing details are displayed To the other Player Clients. + -- To achieve this, a cross loop is done for each Player Client <-> Other Player Client missile information. + + -- Main Player Client loop + for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do + + local Client = ClientData.Client + self:T2( { Client:GetName() } ) + + + ClientData.MessageToClient = "" + ClientData.MessageToAll = "" + + -- Other Players Client loop + for TrackingDataID, TrackingData in pairs( self.TrackingMissiles ) do + + for MissileDataID, MissileData in pairs( TrackingData.MissileData ) do + self:T3( MissileDataID ) + + local TrainerSourceUnit = MissileData.TrainerSourceUnit + local TrainerWeapon = MissileData.TrainerWeapon + local TrainerTargetUnit = MissileData.TrainerTargetUnit + local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName + local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched + + if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then + + if ShowMessages == true then + local TrackingTo + TrackingTo = string.format( " -> %s", + TrainerWeaponTypeName + ) + + if ClientDataID == TrackingDataID then + if ClientData.MessageToClient == "" then + ClientData.MessageToClient = "Missiles to You:\n" + end + ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. "\n" + else + if self.TrackingToAll == true then + if ClientData.MessageToAll == "" then + ClientData.MessageToAll = "Missiles to other Players:\n" + end + ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. " ( " .. TrainerTargetUnit:GetPlayerName() .. " )\n" + end + end + end + end + end + end + + -- Once the Player Client and the Other Player Client tracking messages are prepared, show them. + if ClientData.MessageToClient ~= "" or ClientData.MessageToAll ~= "" then + local Message = MESSAGE:New( ClientData.MessageToClient .. ClientData.MessageToAll, "Tracking", 1, "ID" ):ToClient( Client ) + end + end + end + + return true +end +env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index dc9f9f58b..7db8a5175 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,6 +1,5 @@ -env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160604_1716' ) - +env.info( '*** MOOSE STATIC INCLUDE START *** ' ) +env.info( 'Moose Generation Timestamp: 20160605_0003' ) local base = _G env.info("Loading MOOSE " .. base.timer.getAbsTime() ) @@ -12,27 +11,9 @@ Include.Path = function() end Include.File = function( IncludeFile ) - if not Include.Files[ IncludeFile ] then - Include.Files[IncludeFile] = IncludeFile - env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath ) - local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) ) - if f == nil then - env.info( "Include:" .. IncludeFile .. " from " .. Include.MissionPath ) - local f = assert( base.loadfile( Include.MissionPath .. IncludeFile .. ".lua" ) ) - if f == nil then - error ("Could not load MOOSE file " .. IncludeFile .. ".lua" ) - else - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.MissionPath ) - return f() - end - else - env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath ) - return f() - end - end end -Include.ProgramPath = "Scripts/Moose/" +Include.ProgramPath = "Scripts/Moose/Moose/" Include.MissionPath = Include.Path() env.info( "Include.ProgramPath = " .. Include.ProgramPath) @@ -42,4 +23,17596 @@ Include.Files = {} Include.File( "Moose" ) -env.info("Loaded MOOSE Include Engine")env.info( '*** MOOSE INCLUDE END *** ' ) +env.info("Loaded MOOSE Include Engine") +--- Various routines +-- @module routines +-- @author Flightcontrol + +--Include.File( "Trace" ) +--Include.File( "Message" ) + + +env.setErrorMessageBoxEnabled(false) + +--- Extract of MIST functions. +-- @author Grimes + +routines = {} + + +-- don't change these +routines.majorVersion = 3 +routines.minorVersion = 3 +routines.build = 22 + +----------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------- +-- Utils- conversion, Lua utils, etc. +routines.utils = {} + +--from http://lua-users.org/wiki/CopyTable +routines.utils.deepCopy = function(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(object)) + end + local objectreturn = _copy(object) + return objectreturn +end + + +-- porting in Slmod's serialize_slmod2 +routines.utils.oneLineSerialize = function(tbl) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function + + lookup_table = {} + + local function _Serialize( tbl ) + + if type(tbl) == 'table' then --function only works for tables! + + if lookup_table[tbl] then + return lookup_table[object] + end + + local tbl_str = {} + + lookup_table[tbl] = tbl_str + + tbl_str[#tbl_str + 1] = '{' + + for ind,val in pairs(tbl) do -- serialize its fields + local ind_str = {} + if type(ind) == "number" then + ind_str[#ind_str + 1] = '[' + ind_str[#ind_str + 1] = tostring(ind) + ind_str[#ind_str + 1] = ']=' + else --must be a string + ind_str[#ind_str + 1] = '[' + ind_str[#ind_str + 1] = routines.utils.basicSerialize(ind) + ind_str[#ind_str + 1] = ']=' + end + + local val_str = {} + if ((type(val) == 'number') or (type(val) == 'boolean')) then + val_str[#val_str + 1] = tostring(val) + val_str[#val_str + 1] = ',' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'string' then + val_str[#val_str + 1] = routines.utils.basicSerialize(val) + val_str[#val_str + 1] = ',' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'nil' then -- won't ever happen, right? + val_str[#val_str + 1] = 'nil,' + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + elseif type(val) == 'table' then + if ind == "__index" then + -- tbl_str[#tbl_str + 1] = "__index" + -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it + else + + val_str[#val_str + 1] = _Serialize(val) + val_str[#val_str + 1] = ',' --I think this is right, I just added it + tbl_str[#tbl_str + 1] = table.concat(ind_str) + tbl_str[#tbl_str + 1] = table.concat(val_str) + end + elseif type(val) == 'function' then + -- tbl_str[#tbl_str + 1] = "function " .. tostring(ind) + -- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it + else +-- env.info('unable to serialize value type ' .. routines.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind)) +-- env.info( debug.traceback() ) + end + + end + tbl_str[#tbl_str + 1] = '}' + return table.concat(tbl_str) + else + return tostring(tbl) + end + end + + local objectreturn = _Serialize(tbl) + return objectreturn +end + +--porting in Slmod's "safestring" basic serialize +routines.utils.basicSerialize = function(s) + if s == nil then + return "\"\"" + else + if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then + return tostring(s) + elseif type(s) == 'string' then + s = string.format('%q', s) + return s + end + end +end + + +routines.utils.toDegree = function(angle) + return angle*180/math.pi +end + +routines.utils.toRadian = function(angle) + return angle*math.pi/180 +end + +routines.utils.metersToNM = function(meters) + return meters/1852 +end + +routines.utils.metersToFeet = function(meters) + return meters/0.3048 +end + +routines.utils.NMToMeters = function(NM) + return NM*1852 +end + +routines.utils.feetToMeters = function(feet) + return feet*0.3048 +end + +routines.utils.mpsToKnots = function(mps) + return mps*3600/1852 +end + +routines.utils.mpsToKmph = function(mps) + return mps*3.6 +end + +routines.utils.knotsToMps = function(knots) + return knots*1852/3600 +end + +routines.utils.kmphToMps = function(kmph) + return kmph/3.6 +end + +function routines.utils.makeVec2(Vec3) + if Vec3.z then + return {x = Vec3.x, y = Vec3.z} + else + return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. + end +end + +function routines.utils.makeVec3(Vec2, y) + if not Vec2.z then + if not y then + y = 0 + end + return {x = Vec2.x, y = y, z = Vec2.y} + else + return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. + end +end + +function routines.utils.makeVec3GL(Vec2, offset) + local adj = offset or 0 + + if not Vec2.z then + return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} + else + return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} + end +end + +routines.utils.zoneToVec3 = function(zone) + local new = {} + if type(zone) == 'table' and zone.point then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + elseif type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + if zone then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + end + end +end + +-- gets heading-error corrected direction from point along vector vec. +function routines.utils.getDir(vec, point) + local dir = math.atan2(vec.z, vec.x) + dir = dir + routines.getNorthCorrection(point) + if dir < 0 then + dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi + end + return dir +end + +-- gets distance in meters between two points (2 dimensional) +function routines.utils.get2DDist(point1, point2) + point1 = routines.utils.makeVec3(point1) + point2 = routines.utils.makeVec3(point2) + return routines.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) +end + +-- gets distance in meters between two points (3 dimensional) +function routines.utils.get3DDist(point1, point2) + return routines.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) +end + + + +-- From http://lua-users.org/wiki/SimpleRound +-- use negative idp for rounding ahead of decimal place, positive for rounding after decimal place +routines.utils.round = function(num, idp) + local mult = 10^(idp or 0) + return math.floor(num * mult + 0.5) / mult +end + +-- porting in Slmod's dostring +routines.utils.dostring = function(s) + local f, err = loadstring(s) + if f then + return true, f() + else + return false, err + end +end + + +--3D Vector manipulation +routines.vec = {} + +routines.vec.add = function(vec1, vec2) + return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} +end + +routines.vec.sub = function(vec1, vec2) + return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} +end + +routines.vec.scalarMult = function(vec, mult) + return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} +end + +routines.vec.scalar_mult = routines.vec.scalarMult + +routines.vec.dp = function(vec1, vec2) + return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z +end + +routines.vec.cp = function(vec1, vec2) + return { x = vec1.y*vec2.z - vec1.z*vec2.y, y = vec1.z*vec2.x - vec1.x*vec2.z, z = vec1.x*vec2.y - vec1.y*vec2.x} +end + +routines.vec.mag = function(vec) + return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 +end + +routines.vec.getUnitVec = function(vec) + local mag = routines.vec.mag(vec) + return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } +end + +routines.vec.rotateVec2 = function(vec2, theta) + return { x = vec2.x*math.cos(theta) - vec2.y*math.sin(theta), y = vec2.x*math.sin(theta) + vec2.y*math.cos(theta)} +end +--------------------------------------------------------------------------------------------------------------------------- + + + + +-- acc- the accuracy of each easting/northing. 0, 1, 2, 3, 4, or 5. +routines.tostringMGRS = function(MGRS, acc) + if acc == 0 then + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph + else + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Easting/(10^(5-acc)), 0)) + .. ' ' .. string.format('%0' .. acc .. 'd', routines.utils.round(MGRS.Northing/(10^(5-acc)), 0)) + end +end + +--[[acc: +in DM: decimal point of minutes. +In DMS: decimal point of seconds. +position after the decimal of the least significant digit: +So: +42.32 - acc of 2. +]] +routines.tostringLL = function(lat, lon, acc, DMS) + + local latHemi, lonHemi + if lat > 0 then + latHemi = 'N' + else + latHemi = 'S' + end + + if lon > 0 then + lonHemi = 'E' + else + lonHemi = 'W' + end + + lat = math.abs(lat) + lon = math.abs(lon) + + local latDeg = math.floor(lat) + local latMin = (lat - latDeg)*60 + + local lonDeg = math.floor(lon) + local lonMin = (lon - lonDeg)*60 + + if DMS then -- degrees, minutes, and seconds. + local oldLatMin = latMin + latMin = math.floor(latMin) + local latSec = routines.utils.round((oldLatMin - latMin)*60, acc) + + local oldLonMin = lonMin + lonMin = math.floor(lonMin) + local lonSec = routines.utils.round((oldLonMin - lonMin)*60, acc) + + if latSec == 60 then + latSec = 0 + latMin = latMin + 1 + end + + if lonSec == 60 then + lonSec = 0 + lonMin = lonMin + 1 + end + + local secFrmtStr -- create the formatting string for the seconds place + if acc <= 0 then -- no decimal place. + secFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + secFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format('%02d', latMin) .. '\' ' .. string.format(secFrmtStr, latSec) .. '"' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format('%02d', lonMin) .. '\' ' .. string.format(secFrmtStr, lonSec) .. '"' .. lonHemi + + else -- degrees, decimal minutes. + latMin = routines.utils.round(latMin, acc) + lonMin = routines.utils.round(lonMin, acc) + + if latMin == 60 then + latMin = 0 + latDeg = latDeg + 1 + end + + if lonMin == 60 then + lonMin = 0 + lonDeg = lonDeg + 1 + end + + local minFrmtStr -- create the formatting string for the minutes place + if acc <= 0 then -- no decimal place. + minFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + minFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format(minFrmtStr, latMin) .. '\'' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format(minFrmtStr, lonMin) .. '\'' .. lonHemi + + end +end + +--[[ required: az - radian + required: dist - meters + optional: alt - meters (set to false or nil if you don't want to use it). + optional: metric - set true to get dist and alt in km and m. + precision will always be nearest degree and NM or km.]] +routines.tostringBR = function(az, dist, alt, metric) + az = routines.utils.round(routines.utils.toDegree(az), 0) + + if metric then + dist = routines.utils.round(dist/1000, 2) + else + dist = routines.utils.round(routines.utils.metersToNM(dist), 2) + end + + local s = string.format('%03d', az) .. ' for ' .. dist + + if alt then + if metric then + s = s .. ' at ' .. routines.utils.round(alt, 0) + else + s = s .. ' at ' .. routines.utils.round(routines.utils.metersToFeet(alt), 0) + end + end + return s +end + +routines.getNorthCorrection = function(point) --gets the correction needed for true north + if not point.z then --Vec2; convert to Vec3 + point.z = point.y + point.y = 0 + end + local lat, lon = coord.LOtoLL(point) + local north_posit = coord.LLtoLO(lat + 1, lon) + return math.atan2(north_posit.z - point.z, north_posit.x - point.x) +end + + +-- the main area +do + -- THE MAIN FUNCTION -- Accessed 100 times/sec. + routines.main = function() + timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) --reschedule first in case of Lua error + ---------------------------------------------------------------------------------------------------------- + --area to add new stuff in + + routines.do_scheduled_functions() + end -- end of routines.main + + timer.scheduleFunction(routines.main, {}, timer.getTime() + 2) + +end + + +do + local idNum = 0 + + --Simplified event handler + routines.addEventHandler = function(f) --id is optional! + local handler = {} + idNum = idNum + 1 + handler.id = idNum + handler.f = f + handler.onEvent = function(self, event) + self.f(event) + end + world.addEventHandler(handler) + end + + routines.removeEventHandler = function(id) + for key, handler in pairs(world.eventHandlers) do + if handler.id and handler.id == id then + world.eventHandlers[key] = nil + return true + end + end + return false + end +end + +-- need to return a Vec3 or Vec2? +function routines.getRandPointInCircle(point, radius, innerRadius) + local theta = 2*math.pi*math.random() + local rad = math.random() + math.random() + if rad > 1 then + rad = 2 - rad + end + + local radMult + if innerRadius and innerRadius <= radius then + radMult = (radius - innerRadius)*rad + innerRadius + else + radMult = radius*rad + end + + if not point.z then --might as well work with vec2/3 + point.z = point.y + end + + local rndCoord + if radius > 0 then + rndCoord = {x = math.cos(theta)*radMult + point.x, y = math.sin(theta)*radMult + point.z} + else + rndCoord = {x = point.x, y = point.z} + end + return rndCoord +end + +routines.goRoute = function(group, path) + local misTask = { + id = 'Mission', + params = { + route = { + points = routines.utils.deepCopy(path), + }, + }, + } + if type(group) == 'string' then + group = Group.getByName(group) + end + local groupCon = group:getController() + if groupCon then + groupCon:setTask(misTask) + return true + end + + Controller.setTask(groupCon, misTask) + return false +end + + +-- Useful atomic functions from mist, ported. + +routines.ground = {} +routines.fixedWing = {} +routines.heli = {} + +routines.ground.buildWP = function(point, overRideForm, overRideSpeed) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + local form, speed + + if point.speed and not overRideSpeed then + wp.speed = point.speed + elseif type(overRideSpeed) == 'number' then + wp.speed = overRideSpeed + else + wp.speed = routines.utils.kmphToMps(20) + end + + if point.form and not overRideForm then + form = point.form + else + form = overRideForm + end + + if not form then + wp.action = 'Cone' + else + form = string.lower(form) + if form == 'off_road' or form == 'off road' then + wp.action = 'Off Road' + elseif form == 'on_road' or form == 'on road' then + wp.action = 'On Road' + elseif form == 'rank' or form == 'line_abrest' or form == 'line abrest' or form == 'lineabrest'then + wp.action = 'Rank' + elseif form == 'cone' then + wp.action = 'Cone' + elseif form == 'diamond' then + wp.action = 'Diamond' + elseif form == 'vee' then + wp.action = 'Vee' + elseif form == 'echelon_left' or form == 'echelon left' or form == 'echelonl' then + wp.action = 'EchelonL' + elseif form == 'echelon_right' or form == 'echelon right' or form == 'echelonr' then + wp.action = 'EchelonR' + else + wp.action = 'Cone' -- if nothing matched + end + end + + wp.type = 'Turning Point' + + return wp + +end + +routines.fixedWing.buildWP = function(point, WPtype, speed, alt, altType) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 2000 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = routines.utils.kmphToMps(500) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp +end + +routines.heli.buildWP = function(point, WPtype, speed, alt, altType) + + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 500 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = routines.utils.kmphToMps(200) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp +end + +routines.groupToRandomPoint = function(vars) + local group = vars.group --Required + local point = vars.point --required + local radius = vars.radius or 0 + local innerRadius = vars.innerRadius + local form = vars.form or 'Cone' + local heading = vars.heading or math.random()*2*math.pi + local headingDegrees = vars.headingDegrees + local speed = vars.speed or routines.utils.kmphToMps(20) + + + local useRoads + if not vars.disableRoads then + useRoads = true + else + useRoads = false + end + + local path = {} + + if headingDegrees then + heading = headingDegrees*math.pi/180 + end + + if heading >= 2*math.pi then + heading = heading - 2*math.pi + end + + local rndCoord = routines.getRandPointInCircle(point, radius, innerRadius) + + local offset = {} + local posStart = routines.getLeadPos(group) + + offset.x = routines.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) + offset.z = routines.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) + path[#path + 1] = routines.ground.buildWP(posStart, form, speed) + + + if useRoads == true and ((point.x - posStart.x)^2 + (point.z - posStart.z)^2)^0.5 > radius * 1.3 then + path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 11, ['z'] = posStart.z + 11}, 'off_road', speed) + path[#path + 1] = routines.ground.buildWP(posStart, 'on_road', speed) + path[#path + 1] = routines.ground.buildWP(offset, 'on_road', speed) + else + path[#path + 1] = routines.ground.buildWP({['x'] = posStart.x + 25, ['z'] = posStart.z + 25}, form, speed) + end + + path[#path + 1] = routines.ground.buildWP(offset, form, speed) + path[#path + 1] = routines.ground.buildWP(rndCoord, form, speed) + + routines.goRoute(group, path) + + return +end + +routines.groupRandomDistSelf = function(gpData, dist, form, heading, speed) + local pos = routines.getLeadPos(gpData) + local fakeZone = {} + fakeZone.radius = dist or math.random(300, 1000) + fakeZone.point = {x = pos.x, y, pos.y, z = pos.z} + routines.groupToRandomZone(gpData, fakeZone, form, heading, speed) + + return +end + +routines.groupToRandomZone = function(gpData, zone, form, heading, speed) + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + if type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + elseif type(zone) == 'table' and not zone.radius then + zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + end + + if speed then + speed = routines.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.radius = zone.radius + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.point = routines.utils.zoneToVec3(zone) + + routines.groupToRandomPoint(vars) + + return +end + +routines.isTerrainValid = function(coord, terrainTypes) -- vec2/3 and enum or table of acceptable terrain types + if coord.z then + coord.y = coord.z + end + local typeConverted = {} + + if type(terrainTypes) == 'string' then -- if its a string it does this check + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(terrainTypes) or string.lower(constData) == string.lower(terrainTypes) then + table.insert(typeConverted, constId) + end + end + elseif type(terrainTypes) == 'table' then -- if its a table it does this check + for typeId, typeData in pairs(terrainTypes) do + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(typeData) or string.lower(constData) == string.lower(typeId) then + table.insert(typeConverted, constId) + end + end + end + end + for validIndex, validData in pairs(typeConverted) do + if land.getSurfaceType(coord) == land.SurfaceType[validData] then + return true + end + end + return false +end + +routines.groupToPoint = function(gpData, point, form, heading, speed, useRoads) + if type(point) == 'string' then + point = trigger.misc.getZone(point) + end + if speed then + speed = routines.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.disableRoads = useRoads + vars.point = routines.utils.zoneToVec3(point) + routines.groupToRandomPoint(vars) + + return +end + + +routines.getLeadPos = function(group) + if type(group) == 'string' then -- group name + group = Group.getByName(group) + end + + local units = group:getUnits() + + local leader = units[1] + if not leader then -- SHOULD be good, but if there is a bug, this code future-proofs it then. + local lowestInd = math.huge + for ind, unit in pairs(units) do + if ind < lowestInd then + lowestInd = ind + leader = unit + end + end + end + if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... + return leader:getPosition().p + end +end + +--[[ vars for routines.getMGRSString: +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +]] +routines.getMGRSString = function(vars) + local units = vars.units + local acc = vars.acc or 5 + local avgPos = routines.getAvgPos(units) + if avgPos then + return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) + end +end + +--[[ vars for routines.getLLString +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer, number of numbers after decimal place +vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. + + +]] +routines.getLLString = function(vars) + local units = vars.units + local acc = vars.acc or 3 + local DMS = vars.DMS + local avgPos = routines.getAvgPos(units) + if avgPos then + local lat, lon = coord.LOtoLL(avgPos) + return routines.tostringLL(lat, lon, acc, DMS) + end +end + +--[[ +vars.zone - table of a zone name. +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +]] +routines.getBRStringZone = function(vars) + local zone = trigger.misc.getZone( vars.zone ) + local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + if zone then + local vec = {x = zone.point.x - ref.x, y = zone.point.y - ref.y, z = zone.point.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(zone.point, ref) + if alt then + alt = zone.y + end + return routines.tostringBR(dir, dist, alt, metric) + else + env.info( 'routines.getBRStringZone: error: zone is nil' ) + end +end + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +]] +routines.getBRString = function(vars) + local units = vars.units + local ref = routines.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + local avgPos = routines.getAvgPos(units) + if avgPos then + local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(avgPos, ref) + if alt then + alt = avgPos.y + end + return routines.tostringBR(dir, dist, alt, metric) + end +end + + +-- Returns the Vec3 coordinates of the average position of the concentration of units most in the heading direction. +--[[ vars for routines.getLeadingPos: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +]] +routines.getLeadingPos = function(vars) + local units = vars.units + local heading = vars.heading + local radius = vars.radius + if vars.headingDegrees then + heading = routines.utils.toRadian(vars.headingDegrees) + end + + local unitPosTbl = {} + for i = 1, #units do + local unit = Unit.getByName(units[i]) + if unit and unit:isExist() then + unitPosTbl[#unitPosTbl + 1] = unit:getPosition().p + end + end + if #unitPosTbl > 0 then -- one more more units found. + -- first, find the unit most in the heading direction + local maxPos = -math.huge + + local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = + for i = 1, #unitPosTbl do + local rotatedVec2 = routines.vec.rotateVec2(routines.utils.makeVec2(unitPosTbl[i]), heading) + if (not maxPos) or maxPos < rotatedVec2.x then + maxPos = rotatedVec2.x + maxPosInd = i + end + end + + --now, get all the units around this unit... + local avgPos + if radius then + local maxUnitPos = unitPosTbl[maxPosInd] + local avgx, avgy, avgz, totNum = 0, 0, 0, 0 + for i = 1, #unitPosTbl do + if routines.utils.get2DDist(maxUnitPos, unitPosTbl[i]) <= radius then + avgx = avgx + unitPosTbl[i].x + avgy = avgy + unitPosTbl[i].y + avgz = avgz + unitPosTbl[i].z + totNum = totNum + 1 + end + end + avgPos = { x = avgx/totNum, y = avgy/totNum, z = avgz/totNum} + else + avgPos = unitPosTbl[maxPosInd] + end + + return avgPos + end +end + + +--[[ vars for routines.getLeadingMGRSString: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.acc - number, 0 to 5. +]] +routines.getLeadingMGRSString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local acc = vars.acc or 5 + return routines.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) + end +end + +--[[ vars for routines.getLeadingLLString: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.acc - number of digits after decimal point (can be negative) +vars.DMS - boolean, true if you want DMS. +]] +routines.getLeadingLLString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local acc = vars.acc or 3 + local DMS = vars.DMS + local lat, lon = coord.LOtoLL(pos) + return routines.tostringLL(lat, lon, acc, DMS) + end +end + + + +--[[ vars for routines.getLeadingBRString: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +vars.metric - boolean, if true, use km instead of NM. +vars.alt - boolean, if true, include altitude. +vars.ref - vec3/vec2 reference point. +]] +routines.getLeadingBRString = function(vars) + local pos = routines.getLeadingPos(vars) + if pos then + local ref = vars.ref + local alt = vars.alt + local metric = vars.metric + + local vec = {x = pos.x - ref.x, y = pos.y - ref.y, z = pos.z - ref.z} + local dir = routines.utils.getDir(vec, ref) + local dist = routines.utils.get2DDist(pos, ref) + if alt then + alt = pos.y + end + return routines.tostringBR(dir, dist, alt, metric) + end +end + +--[[ vars for routines.message.add + vars.text = 'Hello World' + vars.displayTime = 20 + vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} + +]] + +--[[ vars for routines.msgMGRS +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +vars.text - text in the message +vars.displayTime - self explanatory +vars.msgFor - scope +]] +routines.msgMGRS = function(vars) + local units = vars.units + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getMGRSString{units = units, acc = acc} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } +end + +--[[ vars for routines.msgLL +vars.units - table of unit names (NOT unitNameTable- maybe this should change) (Yes). +vars.acc - integer, number of numbers after decimal place +vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in degrees, minutes. +vars.text - text in the message +vars.displayTime - self explanatory +vars.msgFor - scope +]] +routines.msgLL = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLLString{units = units, acc = acc, DMS = DMS} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - vec3 ref point, maybe overload for vec2 as well? +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgBR = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString + local alt = vars.alt + local metric = vars.metric + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getBRString{units = units, ref = ref, alt = alt, metric = metric} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + + +-------------------------------------------------------------------------------------------- +-- basically, just sub-types of routines.msgBR... saves folks the work of getting the ref point. +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - string red, blue +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgBullseye = function(vars) + if string.lower(vars.ref) == 'red' then + vars.ref = routines.DBs.missionData.bullseye.red + routines.msgBR(vars) + elseif string.lower(vars.ref) == 'blue' then + vars.ref = routines.DBs.missionData.bullseye.blue + routines.msgBR(vars) + end +end + +--[[ +vars.units- table of unit names (NOT unitNameTable- maybe this should change). +vars.ref - unit name of reference point +vars.alt - boolean, if used, includes altitude in string +vars.metric - boolean, gives distance in km instead of NM. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] + +routines.msgBRA = function(vars) + if Unit.getByName(vars.ref) then + vars.ref = Unit.getByName(vars.ref):getPosition().p + if not vars.alt then + vars.alt = true + end + routines.msgBR(vars) + end +end +-------------------------------------------------------------------------------------------- + +--[[ vars for routines.msgLeadingMGRS: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.acc - number, 0 to 5. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingMGRS = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + + +end +--[[ vars for routines.msgLeadingLL: +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.acc - number of digits after decimal point (can be negative) +vars.DMS - boolean, true if you want DMS. (optional) +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingLL = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + +end + +--[[ +vars.units - table of unit names +vars.heading - direction, number +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees (optional) +vars.metric - boolean, if true, use km instead of NM. (optional) +vars.alt - boolean, if true, include altitude. (optional) +vars.ref - vec3/vec2 reference point. +vars.text - text of the message +vars.displayTime +vars.msgFor - scope +]] +routines.msgLeadingBR = function(vars) + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local metric = vars.metric + local alt = vars.alt + local ref = vars.ref -- vec2/vec3 will be handled in routines.getBRString + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = routines.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} + local newText + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + + routines.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } +end + + +function spairs(t, order) + -- collect the keys + local keys = {} + for k in pairs(t) do keys[#keys+1] = k end + + -- if order function given, sort by it by passing the table and keys a, b, + -- otherwise just sort the keys + if order then + table.sort(keys, function(a,b) return order(t, a, b) end) + else + table.sort(keys) + end + + -- return the iterator function + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], t[keys[i]] + end + end +end + + +function routines.IsPartOfGroupInZones( CargoGroup, LandingZones ) +--trace.f() + + local CurrentZoneID = nil + + if CargoGroup then + local CargoUnits = CargoGroup:getUnits() + for CargoUnitID, CargoUnit in pairs( CargoUnits ) do + if CargoUnit and CargoUnit:getLife() >= 1.0 then + CurrentZoneID = routines.IsUnitInZones( CargoUnit, LandingZones ) + if CurrentZoneID then + break + end + end + end + end + +--trace.r( "", "", { CurrentZoneID } ) + return CurrentZoneID +end + + + +function routines.IsUnitInZones( TransportUnit, LandingZones ) +--trace.f("", "routines.IsUnitInZones" ) + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + if TransportUnit then + local TransportUnitPos = TransportUnit:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = 1 + end + end + if TransportZoneResult then + --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) + else + --trace.i( "routines", "TransportZone:nil logic" ) + end + return TransportZoneResult + else + --trace.i( "routines", "TransportZone:nil hard" ) + return nil + end +end + +function routines.IsUnitNearZonesRadius( TransportUnit, LandingZones, ZoneRadius ) +--trace.f("", "routines.IsUnitInZones" ) + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + if TransportUnit then + local TransportUnitPos = TransportUnit:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then + TransportZoneResult = 1 + end + end + if TransportZoneResult then + --trace.i( "routines", "TransportZone:" .. TransportZoneResult ) + else + --trace.i( "routines", "TransportZone:nil logic" ) + end + return TransportZoneResult + else + --trace.i( "routines", "TransportZone:nil hard" ) + return nil + end +end + + +function routines.IsStaticInZones( TransportStatic, LandingZones ) +--trace.f() + + local TransportZoneResult = nil + local TransportZonePos = nil + local TransportZone = nil + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + local TransportStaticPos = TransportStatic:getPosition().p + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + TransportZone = trigger.misc.getZone( LandingZoneName ) + if TransportZone then + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = LandingZoneID + break + end + end + end + else + TransportZone = trigger.misc.getZone( LandingZones ) + TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z} + if ((( TransportStaticPos.x - TransportZonePos.x)^2 + (TransportStaticPos.z - TransportZonePos.z)^2)^0.5 <= TransportZonePos.radius) then + TransportZoneResult = 1 + end + end + +--trace.r( "", "", { TransportZoneResult } ) + return TransportZoneResult +end + + +function routines.IsUnitInRadius( CargoUnit, ReferencePosition, Radius ) +--trace.f() + + local Valid = true + + -- fill-up some local variables to support further calculations to determine location of units within the zone. + local CargoPos = CargoUnit:getPosition().p + local ReferenceP = ReferencePosition.p + + if (((CargoPos.x - ReferenceP.x)^2 + (CargoPos.z - ReferenceP.z)^2)^0.5 <= Radius) then + else + Valid = false + end + + return Valid +end + +function routines.IsPartOfGroupInRadius( CargoGroup, ReferencePosition, Radius ) +--trace.f() + + local Valid = true + + Valid = routines.ValidateGroup( CargoGroup, "CargoGroup", Valid ) + + -- fill-up some local variables to support further calculations to determine location of units within the zone + local CargoUnits = CargoGroup:getUnits() + for CargoUnitId, CargoUnit in pairs( CargoUnits ) do + local CargoUnitPos = CargoUnit:getPosition().p +-- env.info( 'routines.IsPartOfGroupInRadius: CargoUnitPos.x = ' .. CargoUnitPos.x .. ' CargoUnitPos.z = ' .. CargoUnitPos.z ) + local ReferenceP = ReferencePosition.p +-- env.info( 'routines.IsPartOfGroupInRadius: ReferenceGroupPos.x = ' .. ReferenceGroupPos.x .. ' ReferenceGroupPos.z = ' .. ReferenceGroupPos.z ) + + if ((( CargoUnitPos.x - ReferenceP.x)^2 + (CargoUnitPos.z - ReferenceP.z)^2)^0.5 <= Radius) then + else + Valid = false + break + end + end + + return Valid +end + + +function routines.ValidateString( Variable, VariableName, Valid ) +--trace.f() + + if type( Variable ) == "string" then + if Variable == "" then + error( "routines.ValidateString: error: " .. VariableName .. " must be filled out!" ) + Valid = false + end + else + error( "routines.ValidateString: error: " .. VariableName .. " is not a string." ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateNumber( Variable, VariableName, Valid ) +--trace.f() + + if type( Variable ) == "number" then + else + error( "routines.ValidateNumber: error: " .. VariableName .. " is not a number." ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid + +end + +function routines.ValidateGroup( Variable, VariableName, Valid ) +--trace.f() + + if Variable == nil then + error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateZone( LandingZones, VariableName, Valid ) +--trace.f() + + if LandingZones == nil then + error( "routines.ValidateGroup: error: " .. VariableName .. " is a nil value!" ) + Valid = false + end + + if type( LandingZones ) == "table" then + for LandingZoneID, LandingZoneName in pairs( LandingZones ) do + if trigger.misc.getZone( LandingZoneName ) == nil then + error( "routines.ValidateGroup: error: Zone " .. LandingZoneName .. " does not exist!" ) + Valid = false + break + end + end + else + if trigger.misc.getZone( LandingZones ) == nil then + error( "routines.ValidateGroup: error: Zone " .. LandingZones .. " does not exist!" ) + Valid = false + end + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.ValidateEnumeration( Variable, VariableName, Enum, Valid ) +--trace.f() + + local ValidVariable = false + + for EnumId, EnumData in pairs( Enum ) do + if Variable == EnumData then + ValidVariable = true + break + end + end + + if ValidVariable then + else + error( 'TransportValidateEnum: " .. VariableName .. " is not a valid type.' .. Variable ) + Valid = false + end + +--trace.r( "", "", { Valid } ) + return Valid +end + +function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints but returns speed and formation type along with vec2 of point} + -- refactor to search by groupId and allow groupId and groupName as inputs + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + gpId = _DATABASE.Templates.Groups[groupIdent].groupId + end + + for coa_name, coa_data in pairs(env.mission.coalition) do + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + for obj_type_name, obj_type_data in pairs(cntry_data) do + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_type_data.group) do + if group_data and group_data.groupId == gpId then -- this is the group we are looking for + if group_data.route and group_data.route.points and #group_data.route.points > 0 then + local points = {} + + for point_num, point in pairs(group_data.route.points) do + local routeData = {} + if not point.point then + routeData.x = point.x + routeData.y = point.y + else + routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation. + end + routeData.form = point.action + routeData.speed = point.speed + routeData.alt = point.alt + routeData.alt_type = point.alt_type + routeData.airdromeId = point.airdromeId + routeData.helipadId = point.helipadId + routeData.type = point.type + routeData.action = point.action + if task then + routeData.task = point.task + end + points[point_num] = routeData + end + + return points + end + return + end --if group_data and group_data.name and group_data.name == 'groupname' + end --for group_num, group_data in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do +end + +routines.ground.patrolRoute = function(vars) + + + local tempRoute = {} + local useRoute = {} + local gpData = vars.gpData + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + local useGroupRoute + if not vars.useGroupRoute then + useGroupRoute = vars.gpData + else + useGroupRoute = vars.useGroupRoute + end + local routeProvided = false + if not vars.route then + if useGroupRoute then + tempRoute = routines.getGroupRoute(useGroupRoute) + end + else + useRoute = vars.route + local posStart = routines.getLeadPos(gpData) + useRoute[1] = routines.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed) + routeProvided = true + end + + + local overRideSpeed = vars.speed or 'default' + local pType = vars.pType + local offRoadForm = vars.offRoadForm or 'default' + local onRoadForm = vars.onRoadForm or 'default' + + if routeProvided == false and #tempRoute > 0 then + local posStart = routines.getLeadPos(gpData) + + + useRoute[#useRoute + 1] = routines.ground.buildWP(posStart, offRoadForm, overRideSpeed) + for i = 1, #tempRoute do + local tempForm = tempRoute[i].action + local tempSpeed = tempRoute[i].speed + + if offRoadForm == 'default' then + tempForm = tempRoute[i].action + end + if onRoadForm == 'default' then + onRoadForm = 'On Road' + end + if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then + tempForm = onRoadForm + else + tempForm = offRoadForm + end + + if type(overRideSpeed) == 'number' then + tempSpeed = overRideSpeed + end + + + useRoute[#useRoute + 1] = routines.ground.buildWP(tempRoute[i], tempForm, tempSpeed) + end + + if pType and string.lower(pType) == 'doubleback' then + local curRoute = routines.utils.deepCopy(useRoute) + for i = #curRoute, 2, -1 do + useRoute[#useRoute + 1] = routines.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed) + end + end + + useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP + end + + local cTask3 = {} + local newPatrol = {} + newPatrol.route = useRoute + newPatrol.gpData = gpData:getName() + cTask3[#cTask3 + 1] = 'routines.ground.patrolRoute(' + cTask3[#cTask3 + 1] = routines.utils.oneLineSerialize(newPatrol) + cTask3[#cTask3 + 1] = ')' + cTask3 = table.concat(cTask3) + local tempTask = { + id = 'WrappedAction', + params = { + action = { + id = 'Script', + params = { + command = cTask3, + + }, + }, + }, + } + + + useRoute[#useRoute].task = tempTask + routines.goRoute(gpData, useRoute) + + return +end + +routines.ground.patrol = function(gpData, pType, form, speed) + local vars = {} + + if type(gpData) == 'table' and gpData:getName() then + gpData = gpData:getName() + end + + vars.useGroupRoute = gpData + vars.gpData = gpData + vars.pType = pType + vars.offRoadForm = form + vars.speed = speed + + routines.ground.patrolRoute(vars) + + return +end + +function routines.GetUnitHeight( CheckUnit ) +--trace.f( "routines" ) + + local UnitPoint = CheckUnit:getPoint() + local UnitPosition = { x = UnitPoint.x, y = UnitPoint.z } + local UnitHeight = UnitPoint.y + + local LandHeight = land.getHeight( UnitPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + --trace.f( "routines", "Unit Height = " .. UnitHeight - LandHeight ) + + return UnitHeight - LandHeight + +end + + + +Su34Status = { status = {} } +boardMsgRed = { statusMsg = "" } +boardMsgAll = { timeMsg = "" } +SpawnSettings = {} +Su34MenuPath = {} +Su34Menus = 0 + + +function Su34AttackCarlVinson(groupName) +--trace.menu("", "Su34AttackCarlVinson") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupCarlVinson = Group.getByName("US Carl Vinson #001") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupCarlVinson ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupCarlVinson:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + Su34Status.status[groupName] = 1 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking carrier Carl Vinson. ', 10, 'RedStatus' .. groupName ) +end + +function Su34AttackWest(groupName) +--trace.f("","Su34AttackWest") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupShipWest1 = Group.getByName("US Ship West #001") + local groupShipWest2 = Group.getByName("US Ship West #002") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupShipWest1 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + if groupShipWest2 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipWest2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = true}}) + end + Su34Status.status[groupName] = 2 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the west. ', 10, 'RedStatus' .. groupName ) +end + +function Su34AttackNorth(groupName) +--trace.menu("","Su34AttackNorth") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34.getController(groupSu34) + local groupShipNorth1 = Group.getByName("US Ship North #001") + local groupShipNorth2 = Group.getByName("US Ship North #002") + local groupShipNorth3 = Group.getByName("US Ship North #003") + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + if groupShipNorth1 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth1:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + if groupShipNorth2 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth2:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + if groupShipNorth3 ~= nil then + controllerSu34.pushTask(controllerSu34,{id = 'AttackGroup', params = { groupId = groupShipNorth3:getID(), expend = AI.Task.WeaponExpend.ALL, attackQtyLimit = false}}) + end + Su34Status.status[groupName] = 3 + MessageToRed( string.format('%s: ',groupName) .. 'Attacking invading ships in the north. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Orbit(groupName) +--trace.menu("","Su34Orbit") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + controllerSu34:pushTask( {id = 'ControlledTask', params = { task = { id = 'Orbit', params = { pattern = AI.Task.OrbitPattern.RACE_TRACK } }, stopCondition = { duration = 600 } } } ) + Su34Status.status[groupName] = 4 + MessageToRed( string.format('%s: ',groupName) .. 'In orbit and awaiting further instructions. ', 10, 'RedStatus' .. groupName ) +end + +function Su34TakeOff(groupName) +--trace.menu("","Su34TakeOff") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + Su34Status.status[groupName] = 8 + MessageToRed( string.format('%s: ',groupName) .. 'Take-Off. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Hold(groupName) +--trace.menu("","Su34Hold") + local groupSu34 = Group.getByName( groupName ) + local controllerSu34 = groupSu34:getController() + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + controllerSu34.setOption( controllerSu34, AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + Su34Status.status[groupName] = 5 + MessageToRed( string.format('%s: ',groupName) .. 'Holding Weapons. ', 10, 'RedStatus' .. groupName ) +end + +function Su34RTB(groupName) +--trace.menu("","Su34RTB") + Su34Status.status[groupName] = 6 + MessageToRed( string.format('%s: ',groupName) .. 'Return to Krasnodar. ', 10, 'RedStatus' .. groupName ) +end + +function Su34Destroyed(groupName) +--trace.menu("","Su34Destroyed") + Su34Status.status[groupName] = 7 + MessageToRed( string.format('%s: ',groupName) .. 'Destroyed. ', 30, 'RedStatus' .. groupName ) +end + +function GroupAlive( groupName ) +--trace.menu("","GroupAlive") + local groupTest = Group.getByName( groupName ) + + local groupExists = false + + if groupTest then + groupExists = groupTest:isExist() + end + + --trace.r( "", "", { groupExists } ) + return groupExists +end + +function Su34IsDead() +--trace.f() + +end + +function Su34OverviewStatus() +--trace.menu("","Su34OverviewStatus") + local msg = "" + local currentStatus = 0 + local Exists = false + + for groupName, currentStatus in pairs(Su34Status.status) do + + env.info(('Su34 Overview Status: GroupName = ' .. groupName )) + Alive = GroupAlive( groupName ) + + if Alive then + if currentStatus == 1 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking carrier Carl Vinson. " + elseif currentStatus == 2 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking supporting ships in the west. " + elseif currentStatus == 3 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Attacking invading ships in the north. " + elseif currentStatus == 4 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "In orbit and awaiting further instructions. " + elseif currentStatus == 5 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Holding Weapons. " + elseif currentStatus == 6 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Return to Krasnodar. " + elseif currentStatus == 7 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Destroyed. " + elseif currentStatus == 8 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Take-Off. " + end + else + if currentStatus == 7 then + msg = msg .. string.format("%s: ",groupName) + msg = msg .. "Destroyed. " + else + Su34Destroyed(groupName) + end + end + end + + boardMsgRed.statusMsg = msg +end + + +function UpdateBoardMsg() +--trace.f() + Su34OverviewStatus() + MessageToRed( boardMsgRed.statusMsg, 15, 'RedStatus' ) +end + +function MusicReset( flg ) +--trace.f() + trigger.action.setUserFlag(95,flg) +end + +function PlaneActivate(groupNameFormat, flg) +--trace.f() + local groupName = groupNameFormat .. string.format("#%03d", trigger.misc.getUserFlag(flg)) + --trigger.action.outText(groupName,10) + trigger.action.activateGroup(Group.getByName(groupName)) +end + +function Su34Menu(groupName) +--trace.f() + + --env.info(( 'Su34Menu(' .. groupName .. ')' )) + local groupSu34 = Group.getByName( groupName ) + + if Su34Status.status[groupName] == 1 or + Su34Status.status[groupName] == 2 or + Su34Status.status[groupName] == 3 or + Su34Status.status[groupName] == 4 or + Su34Status.status[groupName] == 5 then + if Su34MenuPath[groupName] == nil then + if planeMenuPath == nil then + planeMenuPath = missionCommands.addSubMenuForCoalition( + coalition.side.RED, + "SU-34 anti-ship flights", + nil + ) + end + Su34MenuPath[groupName] = missionCommands.addSubMenuForCoalition( + coalition.side.RED, + "Flight " .. groupName, + planeMenuPath + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack carrier Carl Vinson", + Su34MenuPath[groupName], + Su34AttackCarlVinson, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack ships in the west", + Su34MenuPath[groupName], + Su34AttackWest, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Attack ships in the north", + Su34MenuPath[groupName], + Su34AttackNorth, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Hold position and await instructions", + Su34MenuPath[groupName], + Su34Orbit, + groupName + ) + + missionCommands.addCommandForCoalition( + coalition.side.RED, + "Report status", + Su34MenuPath[groupName], + Su34OverviewStatus + ) + end + else + if Su34MenuPath[groupName] then + missionCommands.removeItemForCoalition(coalition.side.RED, Su34MenuPath[groupName]) + end + end +end + +--- Obsolete function, but kept to rework in framework. + +function ChooseInfantry ( TeleportPrefixTable, TeleportMax ) +--trace.f("Spawn") + --env.info(( 'ChooseInfantry: ' )) + + TeleportPrefixTableCount = #TeleportPrefixTable + TeleportPrefixTableIndex = math.random( 1, TeleportPrefixTableCount ) + + --env.info(( 'ChooseInfantry: TeleportPrefixTableIndex = ' .. TeleportPrefixTableIndex .. ' TeleportPrefixTableCount = ' .. TeleportPrefixTableCount .. ' TeleportMax = ' .. TeleportMax )) + + local TeleportFound = false + local TeleportLoop = true + local Index = TeleportPrefixTableIndex + local TeleportPrefix = '' + + while TeleportLoop do + TeleportPrefix = TeleportPrefixTable[Index] + if SpawnSettings[TeleportPrefix] then + if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then + SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 + TeleportFound = true + else + TeleportFound = false + end + else + SpawnSettings[TeleportPrefix] = {} + SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 + TeleportFound = true + end + if TeleportFound then + TeleportLoop = false + else + if Index < TeleportPrefixTableCount then + Index = Index + 1 + else + TeleportLoop = false + end + end + --env.info(( 'ChooseInfantry: Loop 1 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) + end + + if TeleportFound == false then + TeleportLoop = true + Index = 1 + while TeleportLoop do + TeleportPrefix = TeleportPrefixTable[Index] + if SpawnSettings[TeleportPrefix] then + if SpawnSettings[TeleportPrefix]['SpawnCount'] - 1 < TeleportMax then + SpawnSettings[TeleportPrefix]['SpawnCount'] = SpawnSettings[TeleportPrefix]['SpawnCount'] + 1 + TeleportFound = true + else + TeleportFound = false + end + else + SpawnSettings[TeleportPrefix] = {} + SpawnSettings[TeleportPrefix]['SpawnCount'] = 0 + TeleportFound = true + end + if TeleportFound then + TeleportLoop = false + else + if Index < TeleportPrefixTableIndex then + Index = Index + 1 + else + TeleportLoop = false + end + end + --env.info(( 'ChooseInfantry: Loop 2 - TeleportPrefix = ' .. TeleportPrefix .. ' Index = ' .. Index )) + end + end + + local TeleportGroupName = '' + if TeleportFound == true then + TeleportGroupName = TeleportPrefix .. string.format("#%03d", SpawnSettings[TeleportPrefix]['SpawnCount'] ) + else + TeleportGroupName = '' + end + + --env.info(('ChooseInfantry: TeleportGroupName = ' .. TeleportGroupName )) + --env.info(('ChooseInfantry: return')) + + return TeleportGroupName +end + +SpawnedInfantry = 0 + +function LandCarrier ( CarrierGroup, LandingZonePrefix ) +--trace.f() + --env.info(( 'LandCarrier: ' )) + --env.info(( 'LandCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) + --env.info(( 'LandCarrier: LandingZone = ' .. LandingZonePrefix )) + + local controllerGroup = CarrierGroup:getController() + + local LandingZone = trigger.misc.getZone(LandingZonePrefix) + local LandingZonePos = {} + LandingZonePos.x = LandingZone.point.x + math.random(LandingZone.radius * -1, LandingZone.radius) + LandingZonePos.y = LandingZone.point.z + math.random(LandingZone.radius * -1, LandingZone.radius) + + controllerGroup:pushTask( { id = 'Land', params = { point = LandingZonePos, durationFlag = true, duration = 10 } } ) + + --env.info(( 'LandCarrier: end' )) +end + +EscortCount = 0 +function EscortCarrier ( CarrierGroup, EscortPrefix, EscortLastWayPoint, EscortEngagementDistanceMax, EscortTargetTypes ) +--trace.f() + --env.info(( 'EscortCarrier: ' )) + --env.info(( 'EscortCarrier: CarrierGroup = ' .. CarrierGroup:getName() )) + --env.info(( 'EscortCarrier: EscortPrefix = ' .. EscortPrefix )) + + local CarrierName = CarrierGroup:getName() + + local EscortMission = {} + local CarrierMission = {} + + local EscortMission = SpawnMissionGroup( EscortPrefix ) + local CarrierMission = SpawnMissionGroup( CarrierGroup:getName() ) + + if EscortMission ~= nil and CarrierMission ~= nil then + + EscortCount = EscortCount + 1 + EscortMissionName = string.format( EscortPrefix .. '#Escort %s', CarrierName ) + EscortMission.name = EscortMissionName + EscortMission.groupId = nil + EscortMission.lateActivation = false + EscortMission.taskSelected = false + + local EscortUnits = #EscortMission.units + for u = 1, EscortUnits do + EscortMission.units[u].name = string.format( EscortPrefix .. '#Escort %s %02d', CarrierName, u ) + EscortMission.units[u].unitId = nil + end + + + EscortMission.route.points[1].task = { id = "ComboTask", + params = + { + tasks = + { + [1] = + { + enabled = true, + auto = false, + id = "Escort", + number = 1, + params = + { + lastWptIndexFlagChangedManually = false, + groupId = CarrierGroup:getID(), + lastWptIndex = nil, + lastWptIndexFlag = false, + engagementDistMax = EscortEngagementDistanceMax, + targetTypes = EscortTargetTypes, + pos = + { + y = 20, + x = 20, + z = 0, + } -- end of ["pos"] + } -- end of ["params"] + } -- end of [1] + } -- end of ["tasks"] + } -- end of ["params"] + } -- end of ["task"] + + SpawnGroupAdd( EscortPrefix, EscortMission ) + + end +end + +function SendMessageToCarrier( CarrierGroup, CarrierMessage ) +--trace.f() + + if CarrierGroup ~= nil then + MessageToGroup( CarrierGroup, CarrierMessage, 30, 'Carrier/' .. CarrierGroup:getName() ) + end + +end + +function MessageToGroup( MsgGroup, MsgText, MsgTime, MsgName ) +--trace.f() + + if type(MsgGroup) == 'string' then + --env.info( 'MessageToGroup: Converted MsgGroup string "' .. MsgGroup .. '" into a Group structure.' ) + MsgGroup = Group.getByName( MsgGroup ) + end + + if MsgGroup ~= nil then + local MsgTable = {} + MsgTable.text = MsgText + MsgTable.displayTime = MsgTime + MsgTable.msgFor = { units = { MsgGroup:getUnits()[1]:getName() } } + MsgTable.name = MsgName + --routines.message.add( MsgTable ) + --env.info(('MessageToGroup: Message sent to ' .. MsgGroup:getUnits()[1]:getName() .. ' -> ' .. MsgText )) + end +end + +function MessageToUnit( UnitName, MsgText, MsgTime, MsgName ) +--trace.f() + + if UnitName ~= nil then + local MsgTable = {} + MsgTable.text = MsgText + MsgTable.displayTime = MsgTime + MsgTable.msgFor = { units = { UnitName } } + MsgTable.name = MsgName + --routines.message.add( MsgTable ) + end +end + +function MessageToAll( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "Message", MsgTime, MsgName ):ToCoalition( coalition.side.RED ):ToCoalition( coalition.side.BLUE ) +end + +function MessageToRed( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "To Red Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) +end + +function MessageToBlue( MsgText, MsgTime, MsgName ) +--trace.f() + + MESSAGE:New( MsgText, "To Blue Coalition", MsgTime, MsgName ):ToCoalition( coalition.side.RED ) +end + +function getCarrierHeight( CarrierGroup ) +--trace.f() + + if CarrierGroup ~= nil then + if table.getn(CarrierGroup:getUnits()) == 1 then + local CarrierUnit = CarrierGroup:getUnits()[1] + local CurrentPoint = CarrierUnit:getPoint() + + local CurrentPosition = { x = CurrentPoint.x, y = CurrentPoint.z } + local CarrierHeight = CurrentPoint.y + + local LandHeight = land.getHeight( CurrentPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + return CarrierHeight - LandHeight + else + return 999999 + end + else + return 999999 + end + +end + +function GetUnitHeight( CheckUnit ) +--trace.f() + + local UnitPoint = CheckUnit:getPoint() + local UnitPosition = { x = CurrentPoint.x, y = CurrentPoint.z } + local UnitHeight = CurrentPoint.y + + local LandHeight = land.getHeight( CurrentPosition ) + + --env.info(( 'CarrierHeight: LandHeight = ' .. LandHeight .. ' CarrierHeight = ' .. CarrierHeight )) + + return UnitHeight - LandHeight + +end + + +_MusicTable = {} +_MusicTable.Files = {} +_MusicTable.Queue = {} +_MusicTable.FileCnt = 0 + + +function MusicRegister( SndRef, SndFile, SndTime ) +--trace.f() + + env.info(( 'MusicRegister: SndRef = ' .. SndRef )) + env.info(( 'MusicRegister: SndFile = ' .. SndFile )) + env.info(( 'MusicRegister: SndTime = ' .. SndTime )) + + + _MusicTable.FileCnt = _MusicTable.FileCnt + 1 + + _MusicTable.Files[_MusicTable.FileCnt] = {} + _MusicTable.Files[_MusicTable.FileCnt].Ref = SndRef + _MusicTable.Files[_MusicTable.FileCnt].File = SndFile + _MusicTable.Files[_MusicTable.FileCnt].Time = SndTime + + if not _MusicTable.Function then + _MusicTable.Function = routines.scheduleFunction( MusicScheduler, { }, timer.getTime() + 10, 10) + end + +end + +function MusicToPlayer( SndRef, PlayerName, SndContinue ) +--trace.f() + + --env.info(( 'MusicToPlayer: SndRef = ' .. SndRef )) + + local PlayerUnits = AlivePlayerUnits() + for PlayerUnitIdx, PlayerUnit in pairs(PlayerUnits) do + local PlayerUnitName = PlayerUnit:getPlayerName() + --env.info(( 'MusicToPlayer: PlayerUnitName = ' .. PlayerUnitName )) + if PlayerName == PlayerUnitName then + PlayerGroup = PlayerUnit:getGroup() + if PlayerGroup then + --env.info(( 'MusicToPlayer: PlayerGroup = ' .. PlayerGroup:getName() )) + MusicToGroup( SndRef, PlayerGroup, SndContinue ) + end + break + end + end + + --env.info(( 'MusicToPlayer: end' )) + +end + +function MusicToGroup( SndRef, SndGroup, SndContinue ) +--trace.f() + + --env.info(( 'MusicToGroup: SndRef = ' .. SndRef )) + + if SndGroup ~= nil then + if _MusicTable and _MusicTable.FileCnt > 0 then + if SndGroup:isExist() then + if MusicCanStart(SndGroup:getUnit(1):getPlayerName()) then + --env.info(( 'MusicToGroup: OK for Sound.' )) + local SndIdx = 0 + if SndRef == '' then + --env.info(( 'MusicToGroup: SndRef as empty. Queueing at random.' )) + SndIdx = math.random( 1, _MusicTable.FileCnt ) + else + for SndIdx = 1, _MusicTable.FileCnt do + if _MusicTable.Files[SndIdx].Ref == SndRef then + break + end + end + end + --env.info(( 'MusicToGroup: SndIdx = ' .. SndIdx )) + --env.info(( 'MusicToGroup: Queueing Music ' .. _MusicTable.Files[SndIdx].File .. ' for Group ' .. SndGroup:getID() )) + trigger.action.outSoundForGroup( SndGroup:getID(), _MusicTable.Files[SndIdx].File ) + MessageToGroup( SndGroup, 'Playing ' .. _MusicTable.Files[SndIdx].File, 15, 'Music-' .. SndGroup:getUnit(1):getPlayerName() ) + + local SndQueueRef = SndGroup:getUnit(1):getPlayerName() + if _MusicTable.Queue[SndQueueRef] == nil then + _MusicTable.Queue[SndQueueRef] = {} + end + _MusicTable.Queue[SndQueueRef].Start = timer.getTime() + _MusicTable.Queue[SndQueueRef].PlayerName = SndGroup:getUnit(1):getPlayerName() + _MusicTable.Queue[SndQueueRef].Group = SndGroup + _MusicTable.Queue[SndQueueRef].ID = SndGroup:getID() + _MusicTable.Queue[SndQueueRef].Ref = SndIdx + _MusicTable.Queue[SndQueueRef].Continue = SndContinue + _MusicTable.Queue[SndQueueRef].Type = Group + end + end + end + end +end + +function MusicCanStart(PlayerName) +--trace.f() + + --env.info(( 'MusicCanStart:' )) + + local MusicOut = false + + if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then + --env.info(( 'MusicCanStart: PlayerName = ' .. PlayerName )) + local PlayerFound = false + local MusicStart = 0 + local MusicTime = 0 + for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do + if SndQueue.PlayerName == PlayerName then + PlayerFound = true + MusicStart = SndQueue.Start + MusicTime = _MusicTable.Files[SndQueue.Ref].Time + break + end + end + if PlayerFound then + --env.info(( 'MusicCanStart: MusicStart = ' .. MusicStart )) + --env.info(( 'MusicCanStart: MusicTime = ' .. MusicTime )) + --env.info(( 'MusicCanStart: timer.getTime() = ' .. timer.getTime() )) + + if MusicStart + MusicTime <= timer.getTime() then + MusicOut = true + end + else + MusicOut = true + end + end + + if MusicOut then + --env.info(( 'MusicCanStart: true' )) + else + --env.info(( 'MusicCanStart: false' )) + end + + return MusicOut +end + +function MusicScheduler() +--trace.scheduled("", "MusicScheduler") + + --env.info(( 'MusicScheduler:' )) + if _MusicTable['Queue'] ~= nil and _MusicTable.FileCnt > 0 then + --env.info(( 'MusicScheduler: Walking Sound Queue.')) + for SndQueueIdx, SndQueue in pairs( _MusicTable.Queue ) do + if SndQueue.Continue then + if MusicCanStart(SndQueue.PlayerName) then + --env.info(('MusicScheduler: MusicToGroup')) + MusicToPlayer( '', SndQueue.PlayerName, true ) + end + end + end + end + +end + + +env.info(( 'Init: Scripts Loaded v1.1' )) + +--- BASE classes. +-- +-- @{#BASE} class +-- ============== +-- The @{#BASE} class is the super class for most of the classes defined within MOOSE. +-- +-- It handles: +-- +-- * The construction and inheritance of child classes. +-- * The tracing of objects during mission execution within the DCS.log file (under saved games folder). +-- +-- Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes. +-- +-- BASE Trace functionality +-- ======================== +-- The BASE class contains trace methods to trace progress within a mission execution of a certain object. +-- Note that these trace methods are inherited by each MOOSE class interiting BASE. +-- As such, each object created from derived class from BASE can use the tracing functions to trace its execution. +-- +-- Trace a function call +-- --------------------- +-- There are basically 3 types of tracing methods available within BASE: +-- +-- * @{#BASE.F}: Trace the beginning of a function and its given parameters. +-- * @{#BASE.T}: Trace further logic within a function giving optional variables or parameters. +-- * @{#BASE.E}: Trace an execption within a function giving optional variables or parameters. An exception will always be traced. +-- +-- Tracing levels +-- -------------- +-- There are 3 tracing levels within MOOSE. +-- These tracing levels were defined to avoid bulks of tracing to be generated by lots of objects. +-- +-- As such, the F and T methods have additional variants to trace level 2 and 3 respectively: +-- +-- * @{#BASE.F2}: Trace the beginning of a function and its given parameters with tracing level 2. +-- * @{#BASE.F3}: Trace the beginning of a function and its given parameters with tracing level 3. +-- * @{#BASE.T2}: Trace further logic within a function giving optional variables or parameters with tracing level 2. +-- * @{#BASE.T3}: Trace further logic within a function giving optional variables or parameters with tracing level 3. +-- +-- BASE Inheritance support +-- ======================== +-- The following methods are available to support inheritance: +-- +-- * @{#BASE.Inherit}: Inherits from a class. +-- * @{#BASE.Inherited}: Returns the parent class from the class. +-- +-- Future +-- ====== +-- Further methods may be added to BASE whenever there is a need to make "overall" functions available within MOOSE. +-- +-- ==== +-- +-- @module Base +-- @author FlightControl + +Include.File( "Routines" ) + +local _TraceOn = true +local _TraceLevel = 1 +local _TraceClass = { + --DATABASE = true, + --SEAD = true, + --DESTROYBASETASK = true, + --MOVEMENT = true, + --SPAWN = true, + --STAGE = true, + --ZONE = true, + --GROUP = true, + --UNIT = true, + --CLIENT = true, + --CARGO = true, + --CARGO_GROUP = true, + --CARGO_PACKAGE = true, + --CARGO_SLINGLOAD = true, + --CARGO_ZONE = true, + --CLEANUP = true, + --MENU_CLIENT = true, + --MENU_CLIENT_COMMAND = true, + --ESCORT = true, + } +local _TraceClassMethod = {} + +--- The BASE Class +-- @type BASE +-- @field ClassName The name of the class. +-- @field ClassID The ID number of the class. +BASE = { + ClassName = "BASE", + ClassID = 0, + Events = {} +} + +--- The Formation Class +-- @type FORMATION +-- @field Cone A cone formation. +FORMATION = { + Cone = "Cone" +} + + + +--- The base constructor. This is the top top class of all classed defined within the MOOSE. +-- Any new class needs to be derived from this class for proper inheritance. +-- @param #BASE self +-- @return #BASE The new instance of the BASE class. +-- @usage +-- function TASK:New() +-- +-- local self = BASE:Inherit( self, BASE:New() ) +-- +-- -- assign Task default values during construction +-- self.TaskBriefing = "Task: No Task." +-- self.Time = timer.getTime() +-- self.ExecuteStage = _TransportExecuteStage.NONE +-- +-- return self +-- end +-- @todo need to investigate if the deepCopy is really needed... Don't think so. +function BASE:New() + local Child = routines.utils.deepCopy( self ) + local Parent = {} + setmetatable( Child, Parent ) + Child.__index = Child + self.ClassID = self.ClassID + 1 + Child.ClassID = self.ClassID + --Child.AddEvent( Child, S_EVENT_BIRTH, Child.EventBirth ) + return Child +end + +--- This is the worker method to inherit from a parent class. +-- @param #BASE self +-- @param Child is the Child class that inherits. +-- @param #BASE Parent is the Parent class that the Child inherits from. +-- @return #BASE Child +function BASE:Inherit( Child, Parent ) + local Child = routines.utils.deepCopy( Child ) + local Parent = routines.utils.deepCopy( Parent ) + if Child ~= nil then + setmetatable( Child, Parent ) + Child.__index = Child + end + --Child.ClassName = Child.ClassName .. '.' .. Child.ClassID + self:T( 'Inherited from ' .. Parent.ClassName ) + return Child +end + +--- This is the worker method to retrieve the Parent class. +-- @param #BASE self +-- @param #BASE Child is the Child class from which the Parent class needs to be retrieved. +-- @return #BASE +function BASE:Inherited( Child ) + local Parent = getmetatable( Child ) +-- env.info('Inherited class of ' .. Child.ClassName .. ' is ' .. Parent.ClassName ) + return Parent +end + +--- Get the ClassName + ClassID of the class instance. +-- The ClassName + ClassID is formatted as '%s#%09d'. +-- @param #BASE self +-- @return #string The ClassName + ClassID of the class instance. +function BASE:GetClassNameAndID() + return string.format( '%s#%09d', self:GetClassName(), self:GetClassID() ) +end + +--- Get the ClassName of the class instance. +-- @param #BASE self +-- @return #string The ClassName of the class instance. +function BASE:GetClassName() + return self.ClassName +end + +--- Get the ClassID of the class instance. +-- @param #BASE self +-- @return #string The ClassID of the class instance. +function BASE:GetClassID() + return self.ClassID +end + +--- Set a new listener for the class. +-- @param self +-- @param DCSTypes#Event Event +-- @param #function EventFunction +-- @return #BASE +function BASE:AddEvent( Event, EventFunction ) + self:F( Event ) + + self.Events[#self.Events+1] = {} + self.Events[#self.Events].Event = Event + self.Events[#self.Events].EventFunction = EventFunction + self.Events[#self.Events].EventEnabled = false + + return self +end + +--- Returns the event dispatcher +-- @param #BASE self +-- @return Event#EVENT +function BASE:Event() + + return _EVENTDISPATCHER +end + + + + + +--- Enable the event listeners for the class. +-- @param #BASE self +-- @return #BASE +function BASE:EnableEvents() + self:F( #self.Events ) + + for EventID, Event in pairs( self.Events ) do + Event.Self = self + Event.EventEnabled = true + end + self.Events.Handler = world.addEventHandler( self ) + + return self +end + + +--- Disable the event listeners for the class. +-- @param #BASE self +-- @return #BASE +function BASE:DisableEvents() + self:F() + + world.removeEventHandler( self ) + for EventID, Event in pairs( self.Events ) do + Event.Self = nil + Event.EventEnabled = false + end + + return self +end + + +local BaseEventCodes = { + "S_EVENT_SHOT", + "S_EVENT_HIT", + "S_EVENT_TAKEOFF", + "S_EVENT_LAND", + "S_EVENT_CRASH", + "S_EVENT_EJECTION", + "S_EVENT_REFUELING", + "S_EVENT_DEAD", + "S_EVENT_PILOT_DEAD", + "S_EVENT_BASE_CAPTURED", + "S_EVENT_MISSION_START", + "S_EVENT_MISSION_END", + "S_EVENT_TOOK_CONTROL", + "S_EVENT_REFUELING_STOP", + "S_EVENT_BIRTH", + "S_EVENT_HUMAN_FAILURE", + "S_EVENT_ENGINE_STARTUP", + "S_EVENT_ENGINE_SHUTDOWN", + "S_EVENT_PLAYER_ENTER_UNIT", + "S_EVENT_PLAYER_LEAVE_UNIT", + "S_EVENT_PLAYER_COMMENT", + "S_EVENT_SHOOTING_START", + "S_EVENT_SHOOTING_END", + "S_EVENT_MAX", +} + +--onEvent( {[1]="S_EVENT_BIRTH",[2]={["subPlace"]=5,["time"]=0,["initiator"]={["id_"]=16884480,},["place"]={["id_"]=5000040,},["id"]=15,["IniUnitName"]="US F-15C@RAMP-Air Support Mountains#001-01",},} +-- Event = { +-- id = enum world.event, +-- time = Time, +-- initiator = Unit, +-- target = Unit, +-- place = Unit, +-- subPlace = enum world.BirthPlace, +-- weapon = Weapon +-- } + +--- Creation of a Birth Event. +-- @param #BASE self +-- @param DCSTypes#Time EventTime The time stamp of the event. +-- @param DCSObject#Object Initiator The initiating object of the event. +-- @param #string IniUnitName The initiating unit name. +-- @param place +-- @param subplace +function BASE:CreateEventBirth( EventTime, Initiator, IniUnitName, place, subplace ) + self:F( { EventTime, Initiator, IniUnitName, place, subplace } ) + + local Event = { + id = world.event.S_EVENT_BIRTH, + time = EventTime, + initiator = Initiator, + IniUnitName = IniUnitName, + place = place, + subplace = subplace + } + + world.onEvent( Event ) +end + +--- Creation of a Crash Event. +-- @param #BASE self +-- @param DCSTypes#Time EventTime The time stamp of the event. +-- @param DCSObject#Object Initiator The initiating object of the event. +function BASE:CreateEventCrash( EventTime, Initiator ) + self:F( { EventTime, Initiator } ) + + local Event = { + id = world.event.S_EVENT_CRASH, + time = EventTime, + initiator = Initiator, + } + + world.onEvent( Event ) +end + +-- TODO: Complete DCSTypes#Event structure. +--- The main event handling function... This function captures all events generated for the class. +-- @param #BASE self +-- @param DCSTypes#Event event +function BASE:onEvent(event) + --self:F( { BaseEventCodes[event.id], event } ) + + if self then + for EventID, EventObject in pairs( self.Events ) do + if EventObject.EventEnabled then + --env.info( 'onEvent Table EventObject.Self = ' .. tostring(EventObject.Self) ) + --env.info( 'onEvent event.id = ' .. tostring(event.id) ) + --env.info( 'onEvent EventObject.Event = ' .. tostring(EventObject.Event) ) + if event.id == EventObject.Event then + if self == EventObject.Self then + if event.initiator and event.initiator:isExist() then + event.IniUnitName = event.initiator:getName() + end + if event.target and event.target:isExist() then + event.TgtUnitName = event.target:getName() + end + --self:T( { BaseEventCodes[event.id], event } ) + --EventObject.EventFunction( self, event ) + end + end + end + end + end +end + +-- Trace section + +-- Log a trace (only shown when trace is on) +-- TODO: Make trace function using variable parameters. + +--- Set trace level +-- @param #BASE self +-- @param #number Level +function BASE:TraceLevel( Level ) + _TraceLevel = Level + self:E( "Tracing level " .. Level ) +end + +--- Set tracing for a class +-- @param #BASE self +-- @param #string Class +function BASE:TraceClass( Class ) + _TraceClass[Class] = true + _TraceClassMethod[Class] = {} + self:E( "Tracing class " .. Class ) +end + +--- Set tracing for a specific method of class +-- @param #BASE self +-- @param #string Class +-- @param #string Method +function BASE:TraceClassMethod( Class, Method ) + if not _TraceClassMethod[Class] then + _TraceClassMethod[Class] = {} + _TraceClassMethod[Class].Method = {} + end + _TraceClassMethod[Class].Method[Method] = true + self:E( "Tracing method " .. Method .. " of class " .. Class ) +end + +--- Trace a function call. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F( Arguments ) + + if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = 0 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "F", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) + end + end +end + +--- Trace a function call level 2. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F2( Arguments ) + + if _TraceLevel >= 2 then + self:F( Arguments ) + end + +end + +--- Trace a function call level 3. Must be at the beginning of the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:F3( Arguments ) + + if _TraceLevel >= 3 then + self:F( Arguments ) + end + +end + +--- Trace a function logic. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T( Arguments ) + + if _TraceOn and ( _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName] ) then + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + if _TraceClass[self.ClassName] or _TraceClassMethod[self.ClassName].Method[Function] then + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = 0 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s" , LineCurrent, LineFrom, "T", self.ClassName, self.ClassID, routines.utils.oneLineSerialize( Arguments ) ) ) + end + end +end + +--- Trace a function logic level 2. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T2( Arguments ) + + if _TraceLevel >= 2 then + self:T( Arguments ) + end + +end + +--- Trace a function logic level 3. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:T3( Arguments ) + + if _TraceLevel >= 3 then + self:T( Arguments ) + end + +end + +--- Log an exception which will be traced always. Can be anywhere within the function logic. +-- @param #BASE self +-- @param Arguments A #table or any field. +function BASE:E( Arguments ) + + local DebugInfoCurrent = debug.getinfo( 2, "nl" ) + local DebugInfoFrom = debug.getinfo( 3, "l" ) + + local Function = "function" + if DebugInfoCurrent.name then + Function = DebugInfoCurrent.name + end + + local LineCurrent = DebugInfoCurrent.currentline + local LineFrom = -1 + if DebugInfoFrom then + LineFrom = DebugInfoFrom.currentline + end + + env.info( string.format( "%6d(%6d)/%1s:%20s%05d.%s(%s)" , LineCurrent, LineFrom, "E", self.ClassName, self.ClassID, Function, routines.utils.oneLineSerialize( Arguments ) ) ) +end + + + +--- Models time events calling event handing functions. +-- +-- @{SCHEDULER} class +-- =================== +-- The @{SCHEDULER} class models time events calling given event handling functions. +-- +-- SCHEDULER constructor +-- ===================== +-- The SCHEDULER class is quite easy to use: +-- +-- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. +-- +-- SCHEDULER timer methods +-- ======================= +-- The SCHEDULER can be stopped and restarted with the following methods: +-- +-- * @{#SCHEDULER.Start}: (Re-)Start the scheduler. +-- * @{#SCHEDULER.Start}: Stop the scheduler. +-- +-- @module Scheduler +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) + + +--- The SCHEDULER class +-- @type SCHEDULER +-- @extends Base#BASE +SCHEDULER = { + ClassName = "SCHEDULER", +} + + +--- Constructor. +-- @param #SCHEDULER self +-- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. +-- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. +-- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. +-- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. +-- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. +-- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. +-- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. +-- @return #SCHEDULER self +function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( { TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) + + self.TimeEventObject = TimeEventObject + self.TimeEventFunction = TimeEventFunction + self.TimeEventFunctionArguments = TimeEventFunctionArguments + self.StartSeconds = StartSeconds + + if RepeatSecondsInterval then + self.RepeatSecondsInterval = RepeatSecondsInterval + else + self.RepeatSecondsInterval = 0 + end + + if RandomizationFactor then + self.RandomizationFactor = RandomizationFactor + else + self.RandomizationFactor = 0 + end + + if StopSeconds then + self.StopSeconds = StopSeconds + end + + self.Repeat = false + + self.StartTime = timer.getTime() + + self:Start() + + return self +end + +--- (Re-)Starts the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Start() + self:F2( self.TimeEventObject ) + + self.Repeat = true + timer.scheduleFunction( self._Scheduler, self, timer.getTime() + self.StartSeconds + .01 ) + + return self +end + +--- Stops the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Stop() + self:F2( self.TimeEventObject ) + + self.Repeat = false + + return self +end + +-- Private Functions + +function SCHEDULER:_Scheduler() + self:F2( self.TimeEventFunctionArguments ) + + local ErrorHandler = function( errmsg ) + + env.info( "Error in SCHEDULER function:" .. errmsg ) + env.info( debug.traceback() ) + + return errmsg + end + + local Status, Result + if self.TimeEventObject then + Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + else + Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + end + + self:T( { Status, Result } ) + + if Status and ( ( not Result ) or ( Result and Result ~= false ) ) then + if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then + timer.scheduleFunction( + self._Scheduler, + self, + timer.getTime() + self.RepeatSecondsInterval + math.random( - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) ) + 0.01 + ) + end + end + +end + + + + + + + + +--- The EVENT class models an efficient event handling process between other classes and its units, weapons. +-- @module Event +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) + +--- The EVENT structure +-- @type EVENT +-- @field #EVENT.Events Events +EVENT = { + ClassName = "EVENT", + ClassID = 0, +} + +local _EVENTCODES = { + "S_EVENT_SHOT", + "S_EVENT_HIT", + "S_EVENT_TAKEOFF", + "S_EVENT_LAND", + "S_EVENT_CRASH", + "S_EVENT_EJECTION", + "S_EVENT_REFUELING", + "S_EVENT_DEAD", + "S_EVENT_PILOT_DEAD", + "S_EVENT_BASE_CAPTURED", + "S_EVENT_MISSION_START", + "S_EVENT_MISSION_END", + "S_EVENT_TOOK_CONTROL", + "S_EVENT_REFUELING_STOP", + "S_EVENT_BIRTH", + "S_EVENT_HUMAN_FAILURE", + "S_EVENT_ENGINE_STARTUP", + "S_EVENT_ENGINE_SHUTDOWN", + "S_EVENT_PLAYER_ENTER_UNIT", + "S_EVENT_PLAYER_LEAVE_UNIT", + "S_EVENT_PLAYER_COMMENT", + "S_EVENT_SHOOTING_START", + "S_EVENT_SHOOTING_END", + "S_EVENT_MAX", +} + +--- The Event structure +-- @type EVENTDATA +-- @field id +-- @field initiator +-- @field target +-- @field weapon +-- @field IniDCSUnit +-- @field IniDCSUnitName +-- @field IniDCSGroup +-- @field IniDCSGroupName +-- @field TgtDCSUnit +-- @field TgtDCSUnitName +-- @field TgtDCSGroup +-- @field TgtDCSGroupName +-- @field Weapon +-- @field WeaponName +-- @field WeaponTgtDCSUnit + +--- The Events structure +-- @type EVENT.Events +-- @field #number IniUnit + +function EVENT:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F2() + self.EventHandler = world.addEventHandler( self ) + return self +end + +function EVENT:EventText( EventID ) + + local EventText = _EVENTCODES[EventID] + + return EventText +end + + +--- Initializes the Events structure for the event +-- @param #EVENT self +-- @param DCSWorld#world.event EventID +-- @param #string EventClass +-- @return #EVENT.Events +function EVENT:Init( EventID, EventClass ) + self:F3( { _EVENTCODES[EventID], EventClass } ) + if not self.Events[EventID] then + self.Events[EventID] = {} + end + if not self.Events[EventID][EventClass] then + self.Events[EventID][EventClass] = {} + end + return self.Events[EventID][EventClass] +end + + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @param #function OnEventFunction +-- @return #EVENT +function EVENT:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, OnEventFunction ) + self:F2( EventTemplate.name ) + + for EventUnitID, EventUnit in pairs( EventTemplate.units ) do + OnEventFunction( self, EventUnit.name, EventFunction, EventSelf ) + end + return self +end + +--- Set a new listener for an S_EVENT_X event independent from a unit or a weapon. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @param EventID +-- @return #EVENT +function EVENT:OnEventGeneric( EventFunction, EventSelf, EventID ) + self:F2( { EventID } ) + + local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) + Event.EventFunction = EventFunction + Event.EventSelf = EventSelf + return self +end + + +--- Set a new listener for an S_EVENT_X event +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @param EventID +-- @return #EVENT +function EVENT:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, EventID ) + self:F2( EventDCSUnitName ) + + local Event = self:Init( EventID, EventSelf:GetClassNameAndID() ) + if not Event.IniUnit then + Event.IniUnit = {} + end + Event.IniUnit[EventDCSUnitName] = {} + Event.IniUnit[EventDCSUnitName].EventFunction = EventFunction + Event.IniUnit[EventDCSUnitName].EventSelf = EventSelf + return self +end + + +--- Create an OnBirth event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnBirthForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnBirthForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_BIRTH event, and registers the unit born. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnBirth( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) + + return self +end + +--- Set a new listener for an S_EVENT_BIRTH event. +-- @param #EVENT self +-- @param #string EventDCSUnitName The id of the unit for the event to be handled. +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnBirthForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_BIRTH ) + + return self +end + +--- Create an OnCrash event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnCrashForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnCrashForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_CRASH event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnCrash( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_CRASH ) + + return self +end + +--- Set a new listener for an S_EVENT_CRASH event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnCrashForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_CRASH ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param Group#GROUP EventGroup +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnDeadForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnDeadForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_DEAD event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf +-- @return #EVENT +function EVENT:OnDead( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_DEAD ) + + return self +end + + +--- Set a new listener for an S_EVENT_DEAD event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_DEAD ) + + return self +end + +--- Set a new listener for an S_EVENT_PILOT_DEAD event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPilotDeadForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_PILOT_DEAD ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnLandForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnLandForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_LAND event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnLandForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_LAND ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnTakeOffForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnTakeOffForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_TAKEOFF event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnTakeOffForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_TAKEOFF ) + + return self +end + +--- Create an OnDead event handler for a group +-- @param #EVENT self +-- @param #table EventTemplate +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineShutDownForTemplate( EventTemplate, EventFunction, EventSelf ) + self:F2( EventTemplate.name ) + + self:OnEventForTemplate( EventTemplate, EventFunction, EventSelf, self.OnEngineShutDownForUnit ) + + return self +end + +--- Set a new listener for an S_EVENT_ENGINE_SHUTDOWN event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineShutDownForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_SHUTDOWN ) + + return self +end + +--- Set a new listener for an S_EVENT_ENGINE_STARTUP event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnEngineStartUpForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_ENGINE_STARTUP ) + + return self +end + +--- Set a new listener for an S_EVENT_SHOT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnShot( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_SHOT ) + + return self +end + +--- Set a new listener for an S_EVENT_SHOT event for a unit. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnShotForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_SHOT ) + + return self +end + +--- Set a new listener for an S_EVENT_HIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnHit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_HIT ) + + return self +end + +--- Set a new listener for an S_EVENT_HIT event. +-- @param #EVENT self +-- @param #string EventDCSUnitName +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnHitForUnit( EventDCSUnitName, EventFunction, EventSelf ) + self:F2( EventDCSUnitName ) + + self:OnEventForUnit( EventDCSUnitName, EventFunction, EventSelf, world.event.S_EVENT_HIT ) + + return self +end + +--- Set a new listener for an S_EVENT_PLAYER_ENTER_UNIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPlayerEnterUnit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_ENTER_UNIT ) + + return self +end + +--- Set a new listener for an S_EVENT_PLAYER_LEAVE_UNIT event. +-- @param #EVENT self +-- @param #function EventFunction The function to be called when the event occurs for the unit. +-- @param Base#BASE EventSelf The self instance of the class for which the event is. +-- @return #EVENT +function EVENT:OnPlayerLeaveUnit( EventFunction, EventSelf ) + self:F2() + + self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_LEAVE_UNIT ) + + return self +end + + + +function EVENT:onEvent( Event ) + self:F2( { _EVENTCODES[Event.id], Event } ) + + if self and self.Events and self.Events[Event.id] then + if Event.initiator and Event.initiator:getCategory() == Object.Category.UNIT then + Event.IniDCSUnit = Event.initiator + Event.IniDCSGroup = Event.IniDCSUnit:getGroup() + Event.IniDCSUnitName = Event.IniDCSUnit:getName() + Event.IniDCSGroupName = "" + if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then + Event.IniDCSGroupName = Event.IniDCSGroup:getName() + end + end + if Event.target then + if Event.target and Event.target:getCategory() == Object.Category.UNIT then + Event.TgtDCSUnit = Event.target + Event.TgtDCSGroup = Event.TgtDCSUnit:getGroup() + Event.TgtDCSUnitName = Event.TgtDCSUnit:getName() + Event.TgtDCSGroupName = "" + if Event.TgtDCSGroup and Event.TgtDCSGroup:isExist() then + Event.TgtDCSGroupName = Event.TgtDCSGroup:getName() + end + end + end + if Event.weapon then + Event.Weapon = Event.weapon + Event.WeaponName = Event.Weapon:getTypeName() + --Event.WeaponTgtDCSUnit = Event.Weapon:getTarget() + end + self:E( { _EVENTCODES[Event.id], Event } ) + for ClassName, EventData in pairs( self.Events[Event.id] ) do + if Event.IniDCSUnitName and EventData.IniUnit and EventData.IniUnit[Event.IniDCSUnitName] then + self:T2( { "Calling event function for class ", ClassName, " unit ", Event.IniDCSUnitName } ) + EventData.IniUnit[Event.IniDCSUnitName].EventFunction( EventData.IniUnit[Event.IniDCSUnitName].EventSelf, Event ) + else + if Event.IniDCSUnit and not EventData.IniUnit then + self:T2( { "Calling event function for class ", ClassName } ) + EventData.EventFunction( EventData.EventSelf, Event ) + end + end + end + end +end + +--- Encapsulation of DCS World Menu system in a set of MENU classes. +-- @module Menu + +Include.File( "Routines" ) +Include.File( "Base" ) + +--- The MENU class +-- @type MENU +-- @extends Base#BASE +MENU = { + ClassName = "MENU", + MenuPath = nil, + MenuText = "", + MenuParentPath = nil +} + +--- +function MENU:New( MenuText, MenuParentPath ) + + -- Arrange meta tables + local Child = BASE:Inherit( self, BASE:New() ) + + Child.MenuPath = nil + Child.MenuText = MenuText + Child.MenuParentPath = MenuParentPath + return Child +end + +--- The COMMANDMENU class +-- @type COMMANDMENU +-- @extends Menu#MENU +COMMANDMENU = { + ClassName = "COMMANDMENU", + CommandMenuFunction = nil, + CommandMenuArgument = nil +} + +function COMMANDMENU:New( MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = nil + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + Child.MenuPath = missionCommands.addCommand( MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + Child.CommandMenuFunction = CommandMenuFunction + Child.CommandMenuArgument = CommandMenuArgument + return Child +end + +--- The SUBMENU class +-- @type SUBMENU +-- @extends Menu#MENU +SUBMENU = { + ClassName = "SUBMENU" +} + +function SUBMENU:New( MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = nil + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local Child = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + Child.MenuPath = missionCommands.addSubMenu( MenuText, MenuParentPath ) + return Child +end + +-- This local variable is used to cache the menus registered under clients. +-- Menus don't dissapear when clients are destroyed and restarted. +-- So every menu for a client created must be tracked so that program logic accidentally does not create +-- the same menus twice during initialization logic. +-- These menu classes are handling this logic with this variable. +local _MENUCLIENTS = {} + +--- The MENU_CLIENT class +-- @type MENU_CLIENT +-- @extends Menu#MENU +MENU_CLIENT = { + ClassName = "MENU_CLIENT" +} + +--- Creates a new menu item for a group +-- @param self +-- @param Client#CLIENT MenuClient The Client owning the menu. +-- @param #string MenuText The text for the menu. +-- @param #table ParentMenu The parent menu. +-- @return #MENU_CLIENT self +function MENU_CLIENT:New( MenuClient, MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + self:F( { MenuClient, MenuText, ParentMenu } ) + + self.MenuClient = MenuClient + self.MenuClientGroupID = MenuClient:GetClientGroupID() + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self.Menus = {} + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText } ) + + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) + end + + self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath ) + MenuPath[MenuPathID] = self.MenuPath + + self:T( { MenuClient:GetClientGroupName(), self.MenuPath } ) + + if ParentMenu and ParentMenu.Menus then + ParentMenu.Menus[self.MenuPath] = self + end + return self +end + +--- Removes the sub menus recursively of this MENU_CLIENT. +-- @param #MENU_CLIENT self +-- @return #MENU_CLIENT self +function MENU_CLIENT:RemoveSubMenus() + self:F( self.MenuPath ) + + for MenuID, Menu in pairs( self.Menus ) do + Menu:Remove() + end + +end + +--- Removes the sub menus recursively of this MENU_CLIENT. +-- @param #MENU_CLIENT self +-- @return #MENU_CLIENT self +function MENU_CLIENT:Remove() + self:F( self.MenuPath ) + + self:RemoveSubMenus() + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then + MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil + end + + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end + + +--- The MENU_CLIENT_COMMAND class +-- @type MENU_CLIENT_COMMAND +-- @extends Menu#MENU +MENU_CLIENT_COMMAND = { + ClassName = "MENU_CLIENT_COMMAND" +} + +--- Creates a new radio command item for a group +-- @param self +-- @param Client#CLIENT MenuClient The Client owning the menu. +-- @param MenuText The text for the menu. +-- @param ParentMenu The parent menu. +-- @param CommandMenuFunction A function that is called when the menu key is pressed. +-- @param CommandMenuArgument An argument for the function. +-- @return Menu#MENU_CLIENT_COMMAND self +function MENU_CLIENT_COMMAND:New( MenuClient, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + self.MenuClient = MenuClient + self.MenuClientGroupID = MenuClient:GetClientGroupID() + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) + + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) + end + + self.MenuPath = missionCommands.addCommandForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + MenuPath[MenuPathID] = self.MenuPath + + self.CommandMenuFunction = CommandMenuFunction + self.CommandMenuArgument = CommandMenuArgument + + ParentMenu.Menus[self.MenuPath] = self + + return self +end + +function MENU_CLIENT_COMMAND:Remove() + self:F( self.MenuPath ) + + if not _MENUCLIENTS[self.MenuClientGroupID] then + _MENUCLIENTS[self.MenuClientGroupID] = {} + end + + local MenuPath = _MENUCLIENTS[self.MenuClientGroupID] + + if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then + MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil + end + + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end + + +--- The MENU_COALITION class +-- @type MENU_COALITION +-- @extends Menu#MENU +MENU_COALITION = { + ClassName = "MENU_COALITION" +} + +--- Creates a new coalition menu item +-- @param #MENU_COALITION self +-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. +-- @param #string MenuText The text for the menu. +-- @param #table ParentMenu The parent menu. +-- @return #MENU_COALITION self +function MENU_COALITION:New( MenuCoalition, MenuText, ParentMenu ) + + -- Arrange meta tables + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + self:F( { MenuCoalition, MenuText, ParentMenu } ) + + self.MenuCoalition = MenuCoalition + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self.Menus = {} + + self:T( { MenuParentPath, MenuText } ) + + self.MenuPath = missionCommands.addSubMenuForCoalition( self.MenuCoalition, MenuText, MenuParentPath ) + + self:T( { self.MenuPath } ) + + if ParentMenu and ParentMenu.Menus then + ParentMenu.Menus[self.MenuPath] = self + end + return self +end + +--- Removes the sub menus recursively of this MENU_COALITION. +-- @param #MENU_COALITION self +-- @return #MENU_COALITION self +function MENU_COALITION:RemoveSubMenus() + self:F( self.MenuPath ) + + for MenuID, Menu in pairs( self.Menus ) do + Menu:Remove() + end + +end + +--- Removes the sub menus recursively of this MENU_COALITION. +-- @param #MENU_COALITION self +-- @return #MENU_COALITION self +function MENU_COALITION:Remove() + self:F( self.MenuPath ) + + self:RemoveSubMenus() + missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + + return nil +end + + +--- The MENU_COALITION_COMMAND class +-- @type MENU_COALITION_COMMAND +-- @extends Menu#MENU +MENU_COALITION_COMMAND = { + ClassName = "MENU_COALITION_COMMAND" +} + +--- Creates a new radio command item for a group +-- @param #MENU_COALITION_COMMAND self +-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu. +-- @param MenuText The text for the menu. +-- @param ParentMenu The parent menu. +-- @param CommandMenuFunction A function that is called when the menu key is pressed. +-- @param CommandMenuArgument An argument for the function. +-- @return #MENU_COALITION_COMMAND self +function MENU_COALITION_COMMAND:New( MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument ) + + -- Arrange meta tables + + local MenuParentPath = {} + if ParentMenu ~= nil then + MenuParentPath = ParentMenu.MenuPath + end + + local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) ) + + self.MenuCoalition = MenuCoalition + self.MenuParentPath = MenuParentPath + self.MenuText = MenuText + self.ParentMenu = ParentMenu + + self:T( { MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) + + self.MenuPath = missionCommands.addCommandForCoalition( self.MenuCoalition, MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + + self.CommandMenuFunction = CommandMenuFunction + self.CommandMenuArgument = CommandMenuArgument + + ParentMenu.Menus[self.MenuPath] = self + + return self +end + +--- Removes a radio command item for a coalition +-- @param #MENU_COALITION_COMMAND self +-- @return #MENU_COALITION_COMMAND self +function MENU_COALITION_COMMAND:Remove() + self:F( self.MenuPath ) + + missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath ) + self.ParentMenu.Menus[self.MenuPath] = nil + return nil +end +--- GROUP class. +-- +-- @{GROUP} class +-- ============== +-- The @{GROUP} class is a wrapper class to handle the DCS Group objects: +-- +-- * Support all DCS Group APIs. +-- * Enhance with Group specific APIs not in the DCS Group API set. +-- * Handle local Group Controller. +-- * Manage the "state" of the DCS Group. +-- +-- +-- GROUP reference methods +-- ======================= +-- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class). +-- +-- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the DCS Group or the DCS GroupName. +-- +-- Another thing to know is that GROUP objects do not "contain" the DCS Group object. +-- The GROUP methods will reference the DCS Group object by name when it is needed during API execution. +-- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file. +-- +-- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance: +-- +-- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. +-- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil). +-- @module Group +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) +Include.File( "Unit" ) + +--- The GROUP class +-- @type GROUP +-- @extends Base#BASE +-- @field DCSGroup#Group DCSGroup The DCS group class. +-- @field #string GroupName The name of the group. +GROUP = { + ClassName = "GROUP", + GroupName = "", + GroupID = 0, + Controller = nil, + DCSGroup = nil, + WayPointFunctions = {}, +} + +--- A DCSGroup +-- @type DCSGroup +-- @field id_ The ID of the group in DCS + +--- Create a new GROUP from a DCSGroup +-- @param #GROUP self +-- @param DCSGroup#Group GroupName The DCS Group name +-- @return #GROUP self +function GROUP:Register( GroupName ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( GroupName ) + self.GroupName = GroupName + return self +end + +-- Reference methods. + +--- Find the GROUP wrapper class instance using the DCS Group. +-- @param #GROUP self +-- @param DCSGroup#Group DCSGroup The DCS Group. +-- @return #GROUP The GROUP. +function GROUP:Find( DCSGroup ) + + local GroupName = DCSGroup:getName() -- Group#GROUP + local GroupFound = _DATABASE:FindGroup( GroupName ) + return GroupFound +end + +--- Find the created GROUP using the DCS Group Name. +-- @param #GROUP self +-- @param #string GroupName The DCS Group Name. +-- @return #GROUP The GROUP. +function GROUP:FindByName( GroupName ) + + local GroupFound = _DATABASE:FindGroup( GroupName ) + return GroupFound +end + +-- DCS Group methods support. + +--- Returns the DCS Group. +-- @param #GROUP self +-- @return DCSGroup#Group The DCS Group. +function GROUP:GetDCSGroup() + local DCSGroup = Group.getByName( self.GroupName ) + + if DCSGroup then + return DCSGroup + end + + return nil +end + + +--- Returns if the DCS Group is alive. +-- When the group exists at run-time, this method will return true, otherwise false. +-- @param #GROUP self +-- @return #boolean true if the DCS Group is alive. +function GROUP:IsAlive() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupIsAlive = DCSGroup:isExist() + self:T3( GroupIsAlive ) + return GroupIsAlive + end + + return nil +end + +--- Destroys the DCS Group and all of its DCS Units. +-- Note that this destroy method also raises a destroy event at run-time. +-- So all event listeners will catch the destroy event of this DCS Group. +-- @param #GROUP self +function GROUP:Destroy() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + for Index, UnitData in pairs( DCSGroup:getUnits() ) do + self:CreateEventCrash( timer.getTime(), UnitData ) + end + DCSGroup:destroy() + DCSGroup = nil + end + + return nil +end + +--- Returns category of the DCS Group. +-- @param #GROUP self +-- @return DCSGroup#Group.Category The category ID +function GROUP:GetCategory() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCategory = DCSGroup:getCategory() + self:T3( GroupCategory ) + return GroupCategory + end + + return nil +end + +--- Returns the category name of the DCS Group. +-- @param #GROUP self +-- @return #string Category name = Helicopter, Airplane, Ground Unit, Ship +function GROUP:GetCategoryName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local CategoryNames = { + [Group.Category.AIRPLANE] = "Airplane", + [Group.Category.HELICOPTER] = "Helicopter", + [Group.Category.GROUND] = "Ground Unit", + [Group.Category.SHIP] = "Ship", + } + local GroupCategory = DCSGroup:getCategory() + self:T3( GroupCategory ) + + return CategoryNames[GroupCategory] + end + + return nil +end + + +--- Returns the coalition of the DCS Group. +-- @param #GROUP self +-- @return DCSCoalitionObject#coalition.side The coalition side of the DCS Group. +function GROUP:GetCoalition() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCoalition = DCSGroup:getCoalition() + self:T3( GroupCoalition ) + return GroupCoalition + end + + return nil +end + +--- Returns the country of the DCS Group. +-- @param #GROUP self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Group is not existing or alive. +function GROUP:GetCountry() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local GroupCountry = DCSGroup:getUnit(1):getCountry() + self:T3( GroupCountry ) + return GroupCountry + end + + return nil +end + +--- Returns the name of the DCS Group. +-- @param #GROUP self +-- @return #string The DCS Group name. +function GROUP:GetName() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupName = DCSGroup:getName() + self:T3( GroupName ) + return GroupName + end + + return nil +end + +--- Returns the DCS Group identifier. +-- @param #GROUP self +-- @return #number The identifier of the DCS Group. +function GROUP:GetID() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupID = DCSGroup:getID() + self:T3( GroupID ) + return GroupID + end + + return nil +end + +--- Returns the UNIT wrapper class with number UnitNumber. +-- If the underlying DCS Unit does not exist, the method will return nil. . +-- @param #GROUP self +-- @param #number UnitNumber The number of the UNIT wrapper class to be returned. +-- @return Unit#UNIT The UNIT wrapper class. +function GROUP:GetUnit( UnitNumber ) + self:F2( { self.GroupName, UnitNumber } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local UnitFound = UNIT:Find( DCSGroup:getUnit( UnitNumber ) ) + self:T3( UnitFound.UnitName ) + self:T2( UnitFound ) + return UnitFound + end + + return nil +end + +--- Returns the DCS Unit with number UnitNumber. +-- If the underlying DCS Unit does not exist, the method will return nil. . +-- @param #GROUP self +-- @param #number UnitNumber The number of the DCS Unit to be returned. +-- @return DCSUnit#Unit The DCS Unit. +function GROUP:GetDCSUnit( UnitNumber ) + self:F2( { self.GroupName, UnitNumber } ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnitFound = DCSGroup:getUnit( UnitNumber ) + self:T3( DCSUnitFound ) + return DCSUnitFound + end + + return nil +end + +--- Returns current size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed the size of the DCS Group is changed. +-- @param #GROUP self +-- @return #number The DCS Group size. +function GROUP:GetSize() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupSize = DCSGroup:getSize() + self:T3( GroupSize ) + return GroupSize + end + + return nil +end + +--- +--- Returns the initial size of the DCS Group. +-- If some of the DCS Units of the DCS Group are destroyed, the initial size of the DCS Group is unchanged. +-- @param #GROUP self +-- @return #number The DCS Group initial size. +function GROUP:GetInitialSize() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupInitialSize = DCSGroup:getInitialSize() + self:T3( GroupInitialSize ) + return GroupInitialSize + end + + return nil +end + +--- Returns the UNITs wrappers of the DCS Units of the DCS Group. +-- @param #GROUP self +-- @return #table The UNITs wrappers. +function GROUP:GetUnits() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnits = DCSGroup:getUnits() + local Units = {} + for Index, UnitData in pairs( DCSUnits ) do + Units[#Units+1] = UNIT:Find( UnitData ) + end + self:T3( Units ) + return Units + end + + return nil +end + + +--- Returns the DCS Units of the DCS Group. +-- @param #GROUP self +-- @return #table The DCS Units. +function GROUP:GetDCSUnits() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local DCSUnits = DCSGroup:getUnits() + self:T3( DCSUnits ) + return DCSUnits + end + + return nil +end + +--- Get the controller for the GROUP. +-- @param #GROUP self +-- @return DCSController#Controller +function GROUP:_GetController() + self:F2( { self.GroupName } ) + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local GroupController = DCSGroup:getController() + self:T3( GroupController ) + return GroupController + end + + return nil +end + + +--- Retrieve the group mission and allow to place function hooks within the mission waypoint plan. +-- Use the method @{Group#GROUP:WayPointFunction} to define the hook functions for specific waypoints. +-- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. +-- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! +-- @param #GROUP self +-- @return #GROUP +function GROUP:WayPointInitialize() + + self.WayPoints = self:GetTaskRoute() + + return self +end + + +--- Registers a waypoint function that will be executed when the group moves over the WayPoint. +-- @param #GROUP self +-- @param #number WayPoint The waypoint number. Note that the start waypoint on the route is WayPoint 1! +-- @param #number WayPointIndex When defining multiple WayPoint functions for one WayPoint, use WayPointIndex to set the sequence of actions. +-- @param #function WayPointFunction The waypoint function to be called when the group moves over the waypoint. The waypoint function takes variable parameters. +-- @return #GROUP +function GROUP:WayPointFunction( WayPoint, WayPointIndex, WayPointFunction, ... ) + self:F2( { WayPoint, WayPointIndex, WayPointFunction } ) + + table.insert( self.WayPoints[WayPoint].task.params.tasks, WayPointIndex ) + self.WayPoints[WayPoint].task.params.tasks[WayPointIndex] = self:TaskFunction( WayPoint, WayPointIndex, WayPointFunction, arg ) + return self +end + + +function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionArguments ) + + local DCSTask + + local DCSScript = {} + DCSScript[#DCSScript+1] = "local MissionGroup = GROUP:Find( ... ) " + + if FunctionArguments.n > 0 then + DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")" + else + DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )" + end + + DCSTask = self:TaskWrappedAction( + self:CommandDoScript( + table.concat( DCSScript ) + ), WayPointIndex + ) + + self:T3( DCSTask ) + + return DCSTask + +end + + + +--- Executes the WayPoint plan. +-- The function gets a WayPoint parameter, that you can use to restart the mission at a specific WayPoint. +-- Note that when the WayPoint parameter is used, the new start mission waypoint of the group will be 1! +-- @param #GROUP self +-- @param #number WayPoint The WayPoint from where to execute the mission. +-- @param #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 Functions + +--- Returns if all units of the group are within a @{Zone#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} +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 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). +-- @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 + + + + +--- Move the group to a Vec2 Point, wait for a defined duration and embark a group. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to wait. +-- @param #number Duration The duration in seconds to wait. +-- @param #GROUP EmbarkingGroup The group to be embarked. +-- @return DCSTask#Task The DCS task structure +function GROUP:TaskEmbarkingAtVec2( Point, Duration, EmbarkingGroup ) + self:F2( { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } ) + + local DCSTask + DCSTask = { id = 'Embarking', + params = { x = Point.x, + y = Point.y, + duration = Duration, + groupsForEmbarking = { EmbarkingGroup.GroupID }, + durationFlag = true, + distributionFlag = false, + distribution = {}, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Move to a defined Vec2 Point, and embark to a group when arrived within a defined Radius. +-- @param #GROUP self +-- @param DCSTypes#Vec2 Point The point where to wait. +-- @param #number Radius The radius of the embarking zone around the Point. +-- @return DCSTask#Task The DCS task structure. +function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) + self:F2( { self.GroupName, Point, Radius } ) + + local DCSTask --DCSTask#Task + DCSTask = { id = 'EmbarkToTransport', + params = { x = Point.x, + y = Point.y, + zoneRadius = Radius, + } + } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task from a mission template. +-- @param #GROUP self +-- @param #table TaskMission A table containing the mission task. +-- @return DCSTask#Task +function GROUP:TaskMission( TaskMission ) + self:F2( Points ) + + local DCSTask + DCSTask = { id = 'Mission', params = { TaskMission, }, } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task to follow a given route defined by Points. +-- @param #GROUP self +-- @param #table Points A table of route points. +-- @return DCSTask#Task +function GROUP:TaskRoute( Points ) + self:F2( Points ) + + local DCSTask + DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } + + self:T3( { DCSTask } ) + return DCSTask +end + +--- Make the DCS Group to fly to a given point and hover. +-- @param #GROUP self +-- @param DCSTypes#Vec3 Point The destination point in Vec3 format. +-- @param #number Speed The speed to travel. +-- @return #GROUP self +function GROUP:TaskRouteToVec2( Point, Speed ) + self:F2( { Point, Speed } ) + + local GroupPoint = self:GetUnit( 1 ):GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local PointTo = {} + PointTo.x = Point.x + PointTo.y = Point.y + PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" + PointTo.speed = Speed + PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self +end + +--- Make the DCS Group to fly to a given point and hover. +-- @param #GROUP self +-- @param DCSTypes#Vec3 Point The destination point in Vec3 format. +-- @param #number Speed The speed to travel. +-- @return #GROUP self +function GROUP:TaskRouteToVec3( Point, Speed ) + self:F2( { Point, Speed } ) + + local GroupPoint = self:GetUnit( 1 ):GetPointVec3() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.z + PointFrom.alt = GroupPoint.y + PointFrom.alt_type = "BARO" + PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local PointTo = {} + PointTo.x = Point.x + PointTo.y = Point.z + PointTo.alt = Point.y + PointTo.alt_type = "BARO" + PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" + PointTo.speed = Speed + PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self +end + + + +--- Make the group to follow a given route. +-- @param #GROUP self +-- @param #table GoPoints A table of Route Points. +-- @return #GROUP self +function GROUP:Route( GoPoints ) + self:F2( GoPoints ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + local Points = routines.utils.deepCopy( GoPoints ) + local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, } + local Controller = self:_GetController() + --Controller.setTask( Controller, MissionTask ) + --routines.scheduleFunction( Controller.setTask, { Controller, MissionTask}, timer.getTime() + 1 ) + SCHEDULER:New( Controller, Controller.setTask, { MissionTask }, 1 ) + return self + end + + return nil +end + + + +--- Route the group to a given zone. +-- The group final destination point can be randomized. +-- A speed can be given in km/h. +-- A given formation can be given. +-- @param #GROUP self +-- @param Zone#ZONE Zone The zone where to route to. +-- @param #boolean Randomize Defines whether to target point gets randomized within the Zone. +-- @param #number Speed The speed. +-- @param Base#FORMATION Formation The formation string. +function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) + self:F2( Zone ) + + local DCSGroup = self:GetDCSGroup() + + if DCSGroup then + + local GroupPoint = self:GetPointVec2() + + local PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.y + PointFrom.type = "Turning Point" + PointFrom.action = "Cone" + PointFrom.speed = 20 / 1.6 + + + local PointTo = {} + local ZonePoint + + if Randomize then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + PointTo.x = ZonePoint.x + PointTo.y = ZonePoint.y + PointTo.type = "Turning Point" + + if Formation then + PointTo.action = Formation + else + PointTo.action = "Cone" + end + + if Speed then + PointTo.speed = Speed + else + PointTo.speed = 20 / 1.6 + end + + local Points = { PointFrom, PointTo } + + self:T3( Points ) + + self:Route( Points ) + + return self + end + + return nil +end + +-- Commands + +--- Do Script command +-- @param #GROUP self +-- @param #string DoScript +-- @return #DCSCommand +function GROUP:CommandDoScript( DoScript ) + + local DCSDoScript = { + id = "Script", + params = { + command = DoScript, + }, + } + + self:T3( DCSDoScript ) + return DCSDoScript +end + + +--- Return the mission template of the group. +-- @param #GROUP self +-- @return #table The MissionTemplate +function GROUP:GetTaskMission() + self:F2( self.GroupName ) + + return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template ) +end + +--- Return the mission route of the group. +-- @param #GROUP self +-- @return #table The mission route defined by points. +function GROUP:GetTaskRoute() + self:F2( self.GroupName ) + + return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template.route.points ) +end + +--- Return the route of a group by using the @{Database#DATABASE} class. +-- @param #GROUP self +-- @param #number Begin The route point from where the copy will start. The base route point is 0. +-- @param #number End The route point where the copy will end. The End point is the last point - the End point. The last point has base 0. +-- @param #boolean Randomize Randomization of the route, when true. +-- @param #number Radius When randomization is on, the randomization is within the radius. +function GROUP:CopyRoute( Begin, End, Randomize, Radius ) + self:F2( { Begin, End } ) + + local Points = {} + + -- Could be a Spawned Group + local GroupName = string.match( self:GetName(), ".*#" ) + if GroupName then + GroupName = GroupName:sub( 1, -2 ) + else + GroupName = self:GetName() + end + + self:T3( { GroupName } ) + + local Template = _DATABASE.Templates.Groups[GroupName].Template + + if Template then + if not Begin then + Begin = 0 + end + if not End then + End = 0 + end + + for TPointID = Begin + 1, #Template.route.points - End do + if Template.route.points[TPointID] then + Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] ) + if Randomize then + if not Radius then + Radius = 500 + end + Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius ) + Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius ) + end + end + end + return Points + end + + return nil +end + + +function GROUP:GetDetectedTargets() + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + return self:_GetController():getDetectedTargets() + end + + return nil +end + +function GROUP:IsTargetDetected( DCSObject ) + self:F2( self.GroupName ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + + local TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity + = self:_GetController().isTargetDetected( self:_GetController(), DCSObject, + Controller.Detection.VISUAL, + Controller.Detection.OPTIC, + Controller.Detection.RADAR, + Controller.Detection.IRST, + Controller.Detection.RWR, + Controller.Detection.DLINK + ) + return TargetIsDetected, TargetIsVisible, TargetLastTime, TargetKnowType, TargetKnowDistance, TargetLastPos, TargetLastVelocity + end + + return nil +end + +-- Options + +--- Can the GROUP hold their weapons? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEHoldFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Holding weapons. +-- @param Group#GROUP self +-- @return Group#GROUP self +function GROUP:OptionROEHoldFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_HOLD ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.WEAPON_HOLD ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.WEAPON_HOLD ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack returning on enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEReturnFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Return fire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEReturnFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.RETURN_FIRE ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.RETURN_FIRE ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.RETURN_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack designated targets? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEOpenFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() or self:IsGround() or self:IsShip() then + return true + end + + return false + end + + return nil +end + +--- Openfire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEOpenFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.OPEN_FIRE ) + elseif self:IsGround() then + Controller:setOption( AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.OPEN_FIRE ) + elseif self:IsShip() then + Controller:setOption( AI.Option.Naval.id.ROE, AI.Option.Naval.val.ROE.OPEN_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP attack targets of opportunity? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROEWeaponFreePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + +--- Weapon free. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROEWeaponFree() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.ROE, AI.Option.Air.val.ROE.WEAPON_FREE ) + end + + return self + end + + return nil +end + +--- Can the GROUP ignore enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTNoReactionPossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- No evasion on enemy threats. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTNoReaction() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade using passive defenses? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTPassiveDefensePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + +--- Evasion passive defense. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTPassiveDefense() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.PASSIVE_DEFENCE ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade on enemy fire? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTEvadeFirePossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- Evade on fire. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTEvadeFire() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.EVADE_FIRE ) + end + + return self + end + + return nil +end + +--- Can the GROUP evade on fire using vertical manoeuvres? +-- @param #GROUP self +-- @return #boolean +function GROUP:OptionROTVerticalPossible() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + if self:IsAir() then + return true + end + + return false + end + + return nil +end + + +--- Evade on fire using vertical manoeuvres. +-- @param #GROUP self +-- @return #GROUP self +function GROUP:OptionROTVertical() + self:F2( { self.GroupName } ) + + local DCSGroup = self:GetDCSGroup() + if DCSGroup then + local Controller = self:_GetController() + + if self:IsAir() then + Controller:setOption( AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.BYPASS_AND_ESCAPE ) + end + + return self + end + + return nil +end + +-- Message APIs + +--- Returns a message for a coalition or a client. +-- @param #GROUP self +-- @param #string Message The message text +-- @param 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, self:GetCallsign() .. " (" .. self:GetTypeName() .. ")", Duration, self:GetClassNameAndID() ) + end + + return nil +end + +--- Send a message to all coalitions. +-- The message will appear in the message area. The message will begin with the callsign of the group and the type of the first unit sending the message. +-- @param #GROUP self +-- @param #string Message The message text +-- @param 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 +--- UNIT Class +-- +-- @{UNIT} class +-- ============== +-- The @{UNIT} class is a wrapper class to handle the DCS Unit objects: +-- +-- * Support all DCS Unit APIs. +-- * Enhance with Unit specific APIs not in the DCS Unit API set. +-- * Handle local Unit Controller. +-- * Manage the "state" of the DCS Unit. +-- +-- +-- UNIT reference methods +-- ====================== +-- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class). +-- +-- The UNIT class **does not contain a :New()** method, rather it provides **:Find()** methods to retrieve the object reference +-- using the DCS Unit or the DCS UnitName. +-- +-- Another thing to know is that UNIT objects do not "contain" the DCS Unit object. +-- The UNIT methods will reference the DCS Unit object by name when it is needed during API execution. +-- If the DCS Unit object does not exist or is nil, the UNIT methods will return nil and log an exception in the DCS.log file. +-- +-- The UNIT class provides the following functions to retrieve quickly the relevant UNIT instance: +-- +-- * @{#UNIT.Find}(): Find a UNIT instance from the _DATABASE object using a DCS Unit object. +-- * @{#UNIT.FindByName}(): Find a UNIT instance from the _DATABASE object using a DCS Unit name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil). +-- +-- DCS UNIT APIs +-- ============= +-- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method. +-- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call, +-- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSUnit#Unit.getName}() +-- is implemented in the UNIT class as @{#UNIT.GetName}(). +-- +-- Additional UNIT APIs +-- ==================== +-- The UNIT class comes with additional methods. Find below a summary. +-- +-- Smoke, Flare Units +-- ------------------ +-- The UNIT class provides methods to smoke or flare units easily. +-- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods +-- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit. +-- When the DCS Unit moves for whatever reason, the smoking will still continue! +-- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}() +-- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration. +-- +-- Position, Point +-- --------------- +-- The UNIT class provides methods to obtain the current point or position of the DCS Unit. +-- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetPointVec3}() will obtain the current location of the DCS Unit in a Vec2 (2D) or a Vec3 (3D) vector respectively. +-- If you want to obtain the complete 3D position including oriëntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively. +-- +-- Alive +-- ----- +-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active. +-- +-- Test for other units in radius +-- ------------------------------ +-- One can test if another DCS Unit is within a given radius of the current DCS Unit, by using the @{#UNIT.OtherUnitInRadius}() method. +-- +-- More functions will be added +-- ---------------------------- +-- During the MOOSE development, more functions will be added. A complete list of the current functions is below. +-- +-- +-- +-- +-- @module Unit +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + +--- The UNIT class +-- @type UNIT +-- @extends Base#BASE +-- @field #UNIT.FlareColor FlareColor +-- @field #UNIT.SmokeColor SmokeColor +UNIT = { + ClassName="UNIT", + CategoryName = { + [Unit.Category.AIRPLANE] = "Airplane", + [Unit.Category.HELICOPTER] = "Helicoper", + [Unit.Category.GROUND_UNIT] = "Ground Unit", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + }, + FlareColor = { + Green = trigger.flareColor.Green, + Red = trigger.flareColor.Red, + White = trigger.flareColor.White, + Yellow = trigger.flareColor.Yellow + }, + SmokeColor = { + Green = trigger.smokeColor.Green, + Red = trigger.smokeColor.Red, + White = trigger.smokeColor.White, + Orange = trigger.smokeColor.Orange, + Blue = trigger.smokeColor.Blue + }, + } + +--- FlareColor +-- @type UNIT.FlareColor +-- @field Green +-- @field Red +-- @field White +-- @field Yellow + +--- SmokeColor +-- @type UNIT.SmokeColor +-- @field Green +-- @field Red +-- @field White +-- @field Orange +-- @field Blue + +-- Registration. + +--- Create a new UNIT from DCSUnit. +-- @param #UNIT self +-- @param DCSUnit#Unit DCSUnit +-- @param Database#DATABASE Database +-- @return Unit#UNIT +function UNIT:Register( UnitName ) + + local self = BASE:Inherit( self, BASE:New() ) + self:F2( UnitName ) + self.UnitName = UnitName + return self +end + +-- Reference methods. + +--- Finds a UNIT from the _DATABASE using a DCSUnit object. +-- @param #UNIT self +-- @param DCSUnit#Unit DCSUnit An existing DCS Unit object reference. +-- @return Unit#UNIT self +function UNIT:Find( DCSUnit ) + + local UnitName = DCSUnit:getName() + local UnitFound = _DATABASE:FindUnit( UnitName ) + return UnitFound +end + +--- Find a UNIT in the _DATABASE using the name of an existing DCS Unit. +-- @param #UNIT self +-- @param #string UnitName The Unit Name. +-- @return Unit#UNIT self +function UNIT:FindByName( UnitName ) + + local UnitFound = _DATABASE:FindUnit( UnitName ) + return UnitFound +end + +function UNIT:GetDCSUnit() + local DCSUnit = Unit.getByName( self.UnitName ) + + if DCSUnit then + return DCSUnit + end + + return nil +end + +--- Returns coalition of the Unit. +-- @param Unit#UNIT self +-- @return DCSCoalitionObject#coalition.side The side of the coalition. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCoalition() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCoalition = DCSUnit:getCoalition() + self:T3( UnitCoalition ) + return UnitCoalition + end + + return nil +end + +--- Returns country of the Unit. +-- @param Unit#UNIT self +-- @return DCScountry#country.id The country identifier. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCountry() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCountry = DCSUnit:getCountry() + self:T3( UnitCountry ) + return UnitCountry + end + + return nil +end + + +--- Returns DCS Unit object name. +-- The function provides access to non-activated units too. +-- @param Unit#UNIT self +-- @return #string The name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitName = self.UnitName + return UnitName + end + + return nil +end + + +--- Returns if the unit is alive. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is alive. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsAlive() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitIsAlive = DCSUnit:isExist() + return UnitIsAlive + end + + return false +end + +--- Returns if the unit is activated. +-- @param Unit#UNIT self +-- @return #boolean true if Unit is activated. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:IsActive() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local UnitIsActive = DCSUnit:isActive() + return UnitIsActive + end + + return nil +end + +--- Returns name of the player that control the unit or nil if the unit is controlled by A.I. +-- @param Unit#UNIT self +-- @return #string Player Name +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPlayerName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + + local PlayerName = DCSUnit:getPlayerName() + if PlayerName == nil then + PlayerName = "" + end + return PlayerName + end + + return nil +end + +--- Returns the unit's unique identifier. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.ID Unit ID +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetID() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitID = DCSUnit:getID() + return UnitID + end + + return nil +end + +--- Returns the unit's number in the group. +-- The number is the same number the unit has in ME. +-- It may not be changed during the mission. +-- If any unit in the group is destroyed, the numbers of another units will not be changed. +-- @param Unit#UNIT self +-- @return #number The Unit number. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetNumber() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitNumber = DCSUnit:getNumber() + return UnitNumber + end + + return nil +end + +--- Returns the unit's group if it exist and nil otherwise. +-- @param Unit#UNIT self +-- @return Group#GROUP The Group of the Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetGroup() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitGroup = DCSUnit:getGroup() + return UnitGroup + end + + return nil +end + + +--- Returns the unit's callsign - the localized string. +-- @param Unit#UNIT self +-- @return #string The Callsign of the Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetCallSign() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCallSign = DCSUnit:getCallsign() + return UnitCallSign + end + + return nil +end + +--- Returns the unit's health. Dead units has health <= 1.0. +-- @param Unit#UNIT self +-- @return #number The Unit's health value. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetLife() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitLife = DCSUnit:getLife() + return UnitLife + end + + return nil +end + +--- Returns the Unit's initial health. +-- @param Unit#UNIT self +-- @return #number The Unit's initial health value. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetLife0() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitLife0 = DCSUnit:getLife0() + return UnitLife0 + end + + return nil +end + +--- Returns relative amount of fuel (from 0.0 to 1.0) the unit has in its internal tanks. If there are additional fuel tanks the value may be greater than 1.0. +-- @param Unit#UNIT self +-- @return #number The relative amount of fuel (from 0.0 to 1.0). +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetFuel() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitFuel = DCSUnit:getFuel() + return UnitFuel + end + + return nil +end + +--- Returns the Unit's ammunition. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Ammo +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetAmmo() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitAmmo = DCSUnit:getAmmo() + return UnitAmmo + end + + return nil +end + +--- Returns the unit sensors. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Sensors +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetSensors() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitSensors = DCSUnit:getSensors() + return UnitSensors + end + + return nil +end + +-- Need to add here a function per sensortype +-- unit:hasSensors(Unit.SensorType.RADAR, Unit.RadarType.AS) + +--- Returns two values: +-- +-- * First value indicates if at least one of the unit's radar(s) is on. +-- * Second value is the object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. +-- @param Unit#UNIT self +-- @return #boolean Indicates if at least one of the unit's radar(s) is on. +-- @return DCSObject#Object The object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetRadar() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitRadarOn, UnitRadarObject = DCSUnit:getRadar() + return UnitRadarOn, UnitRadarObject + end + + return nil, nil +end + +-- Need to add here functions to check if radar is on and which object etc. + +--- Returns unit descriptor. Descriptor type depends on unit category. +-- @param Unit#UNIT self +-- @return DCSUnit#Unit.Desc The Unit descriptor. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetDesc() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitDesc = DCSUnit:getDesc() + return UnitDesc + end + + return nil +end + + +--- Returns the type name of the DCS Unit. +-- @param Unit#UNIT self +-- @return #string The type name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetTypeName() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitTypeName = DCSUnit:getTypeName() + self:T3( UnitTypeName ) + return UnitTypeName + end + + return nil +end + + + +--- Returns the prefix name of the DCS Unit. A prefix name is a part of the name before a '#'-sign. +-- DCS Units spawned with the @{SPAWN} class contain a '#'-sign to indicate the end of the (base) DCS Unit name. +-- The spawn sequence number and unit number are contained within the name after the '#' sign. +-- @param Unit#UNIT self +-- @return #string The name of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPrefix() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPrefix = string.match( self.UnitName, ".*#" ):sub( 1, -2 ) + self:T3( UnitPrefix ) + return UnitPrefix + end + + return nil +end + + + +--- Returns the @{DCSTypes#Vec2} vector indicating the point in 2D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec2 The 2D point vector of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPointVec2() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPosition().p + + local UnitPointVec2 = {} + UnitPointVec2.x = UnitPointVec3.x + UnitPointVec2.y = UnitPointVec3.z + + self:T3( UnitPointVec2 ) + return UnitPointVec2 + end + + return nil +end + + +--- Returns the @{DCSTypes#Vec3} vector indicating the point in 3D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec3 The 3D point vector of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPointVec3() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPosition().p + self:T3( UnitPointVec3 ) + return UnitPointVec3 + end + + return nil +end + +--- Returns the @{DCSTypes#Position3} position vectors indicating the point and direction vectors in 3D of the DCS Unit within the mission. +-- @param Unit#UNIT self +-- @return DCSTypes#Position The 3D position vectors of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetPositionVec3() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPosition = DCSUnit:getPosition() + self:T3( UnitPosition ) + return UnitPosition + end + + return nil +end + +--- Returns the DCS Unit velocity vector. +-- @param Unit#UNIT self +-- @return DCSTypes#Vec3 The velocity vector +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetVelocity() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitVelocityVec3 = DCSUnit:getVelocity() + self:T3( UnitVelocityVec3 ) + return UnitVelocityVec3 + end + + return nil +end + +--- Returns true if the DCS Unit is in the air. +-- @param Unit#UNIT self +-- @return #boolean true if in the air. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:InAir() + self:F2( self.UnitName ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitInAir = DCSUnit:inAir() + self:T3( UnitInAir ) + return UnitInAir + end + + return nil +end + +--- Returns the altitude of the DCS Unit. +-- @param Unit#UNIT self +-- @return DCSTypes#Distance The altitude of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:GetAltitude() + self:F2() + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPointVec3 = DCSUnit:getPoint() --DCSTypes#Vec3 + return UnitPointVec3.y + end + + return nil +end + +--- Returns true if there is an **other** DCS Unit within a radius of the current 2D point of the DCS Unit. +-- @param Unit#UNIT self +-- @param Unit#UNIT AwaitUnit The other UNIT wrapper object. +-- @param Radius The radius in meters with the DCS Unit in the centre. +-- @return true If the other DCS Unit is within the radius of the 2D point of the DCS Unit. +-- @return #nil The DCS Unit is not existing or alive. +function UNIT:OtherUnitInRadius( AwaitUnit, Radius ) + self:F2( { self.UnitName, AwaitUnit.UnitName, Radius } ) + + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitPos = self:GetPointVec3() + local AwaitUnitPos = AwaitUnit:GetPointVec3() + + if (((UnitPos.x - AwaitUnitPos.x)^2 + (UnitPos.z - AwaitUnitPos.z)^2)^0.5 <= Radius) then + self:T3( "true" ) + return true + else + self:T3( "false" ) + return false + end + end + + return nil +end + +--- Returns the DCS Unit category name as defined within the DCS Unit Descriptor. +-- @param Unit#UNIT self +-- @return #string The DCS Unit Category Name +function UNIT:GetCategoryName() + local DCSUnit = self:GetDCSUnit() + + if DCSUnit then + local UnitCategoryName = self.CategoryName[ self:GetDesc().category ] + return UnitCategoryName + end + + return nil +end + +--- Signal a flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:Flare( FlareColor ) + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), FlareColor , 0 ) +end + +--- Signal a white flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareWhite() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.White , 0 ) +end + +--- Signal a yellow flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareYellow() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Yellow , 0 ) +end + +--- Signal a green flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareGreen() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Green , 0 ) +end + +--- Signal a red flare at the position of the UNIT. +-- @param #UNIT self +function UNIT:FlareRed() + self:F2() + trigger.action.signalFlare( self:GetPointVec3(), trigger.flareColor.Red, 0 ) +end + +--- Smoke the UNIT. +-- @param #UNIT self +function UNIT:Smoke( SmokeColor ) + self:F2() + trigger.action.smoke( self:GetPointVec3(), SmokeColor ) +end + +--- Smoke the UNIT Green. +-- @param #UNIT self +function UNIT:SmokeGreen() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Green ) +end + +--- Smoke the UNIT Red. +-- @param #UNIT self +function UNIT:SmokeRed() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Red ) +end + +--- Smoke the UNIT White. +-- @param #UNIT self +function UNIT:SmokeWhite() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.White ) +end + +--- Smoke the UNIT Orange. +-- @param #UNIT self +function UNIT:SmokeOrange() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Orange ) +end + +--- Smoke the UNIT Blue. +-- @param #UNIT self +function UNIT:SmokeBlue() + self:F2() + trigger.action.smoke( self:GetPointVec3(), trigger.smokeColor.Blue ) +end + +-- Is methods + +--- Returns if the unit is of an air category. +-- If the unit is a helicopter or a plane, then this method will return true, otherwise false. +-- @param #UNIT self +-- @return #boolean Air category evaluation result. +function UNIT:IsAir() + self:F2() + + local UnitDescriptor = self.DCSUnit:getDesc() + self:T3( { UnitDescriptor.category, Unit.Category.AIRPLANE, Unit.Category.HELICOPTER } ) + + local IsAirResult = ( UnitDescriptor.category == Unit.Category.AIRPLANE ) or ( UnitDescriptor.category == Unit.Category.HELICOPTER ) + + self:T3( IsAirResult ) + return IsAirResult +end + +--- ZONE Classes +-- ============= +-- 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. +-- +-- Polymorphic methods +-- =================== +-- 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. +-- +-- @module Zone +-- @author FlightControl + + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) + + + +--- The ZONE_BASE class +-- @type ZONE_BASE +-- @Extends Base#BASE +ZONE_BASE = { + ClassName = "ZONE_BASE", + } + +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 + + +--- 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 DCSTypes#Vec2 PointVec2 The location of the zone. +-- @param DCSTypes#Distance Radius The radius of the zone. +-- @return #ZONE_RADIUS +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 + + +--- 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 ) + + if (( PointVec2.x - self.PointVec2.x )^2 + ( PointVec2.y - self.PointVec2.y ) ^2 ) ^ 0.5 <= self.Radius 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:IsPointVec3InZone( { 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 angle = math.random() * math.pi*2; + Point.x = self.PointVec2.x + math.cos( angle ) * math.random() * self.Radius; + Point.y = self.PointVec2.y + math.sin( angle ) * math.random() * self.Radius; + + 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.x, y = Zone.y }, 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 + + +--- 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_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 self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) + self:F( { ZoneName, ZoneGroup } ) + + local GroupPoints = ZoneGroup:GetTaskRoute() + local i = 0 + + self.Polygon = {} + + for i = 1, #GroupPoints do + self.Polygon[i] = {} + self.Polygon[i].x = GroupPoints[i].x + self.Polygon[i].y = GroupPoints[i].y + end + + return self +end + + +--- Returns if a location is within the zone. +-- @param #ZONE_POLYGON self +-- @param DCSTypes#Vec2 PointVec2 The location to test. +-- @return #boolean true if the location is within the zone. +function ZONE_POLYGON: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:T( { "c = ", c } ) + end + + return c +end + +--- The CLIENT models client units in multi player missions. +-- +-- @{#CLIENT} class +-- ================ +-- Clients are those **Units** defined within the Mission Editor that have the skillset defined as __Client__ or __Player__. +-- Note that clients are NOT the same as Units, they are NOT necessarily alive. +-- The @{CLIENT} class is a wrapper class to handle the DCS Unit objects that have the skillset defined as __Client__ or __Player__: +-- +-- * Wraps the DCS Unit objects with skill level set to Player or Client. +-- * Support all DCS Unit APIs. +-- * Enhance with Unit specific APIs not in the DCS Group API set. +-- * When player joins Unit, execute alive init logic. +-- * Handles messages to players. +-- * Manage the "state" of the DCS Unit. +-- +-- Clients are being used by the @{MISSION} class to follow players and register their successes. +-- +-- CLIENT reference methods +-- ======================= +-- For each DCS Unit having skill level Player or Client, a CLIENT wrapper object (instance) will be created within the _@{DATABASE} object. +-- This is done at the beginning of the mission (when the mission starts). +-- +-- The CLIENT class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference +-- using the DCS Unit or the DCS UnitName. +-- +-- Another thing to know is that CLIENT objects do not "contain" the DCS Unit object. +-- The CLIENT methods will reference the DCS Unit object by name when it is needed during API execution. +-- If the DCS Unit object does not exist or is nil, the CLIENT methods will return nil and log an exception in the DCS.log file. +-- +-- The CLIENT class provides the following functions to retrieve quickly the relevant CLIENT instance: +-- +-- * @{#CLIENT.Find}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit object. +-- * @{#CLIENT.FindByName}(): Find a CLIENT instance from the _DATABASE object using a DCS Unit name. +-- +-- IMPORTANT: ONE SHOULD NEVER SANATIZE these CLIENT OBJECT REFERENCES! (make the CLIENT object references nil). +-- +-- @module Client +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Cargo" ) +Include.File( "Message" ) + + +--- The CLIENT class +-- @type CLIENT +-- @extends Unit#UNIT +CLIENT = { + ONBOARDSIDE = { + NONE = 0, + LEFT = 1, + RIGHT = 2, + BACK = 3, + FRONT = 4 + }, + ClassName = "CLIENT", + ClientName = nil, + ClientAlive = false, + ClientTransport = false, + ClientBriefingShown = false, + _Menus = {}, + _Tasks = {}, + Messages = { + } +} + + +--- Finds a CLIENT from the _DATABASE using the relevant DCS Unit. +-- @param #CLIENT self +-- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. +-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. +-- @return #CLIENT +-- @usage +-- -- Create new Clients. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- Mission:AddGoal( DeploySA6TroopsGoal ) +-- +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) +function CLIENT:Find( DCSUnit ) + local ClientName = DCSUnit:getName() + local ClientFound = _DATABASE:FindClient( ClientName ) + + if ClientFound then + ClientFound:F( ClientName ) + return ClientFound + end + + error( "CLIENT not found for: " .. ClientName ) +end + + +--- Finds a CLIENT from the _DATABASE using the relevant Client Unit Name. +-- As an optional parameter, a briefing text can be given also. +-- @param #CLIENT self +-- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor. +-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. +-- @return #CLIENT +-- @usage +-- -- Create new Clients. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- Mission:AddGoal( DeploySA6TroopsGoal ) +-- +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 1' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 3' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) +function CLIENT:FindByName( ClientName, ClientBriefing ) + local ClientFound = _DATABASE:FindClient( ClientName ) + + if ClientFound then + ClientFound:F( { ClientName, ClientBriefing } ) + ClientFound:AddBriefing( ClientBriefing ) + ClientFound.MessageSwitch = true + + return ClientFound + end + + error( "CLIENT not found for: " .. ClientName ) +end + +function CLIENT:Register( ClientName ) + local self = BASE:Inherit( self, UNIT:Register( ClientName ) ) + + self:F( ClientName ) + self.ClientName = ClientName + self.MessageSwitch = true + self.ClientAlive2 = false + + --self.AliveCheckScheduler = routines.scheduleFunction( self._AliveCheckScheduler, { self }, timer.getTime() + 1, 5 ) + self.AliveCheckScheduler = SCHEDULER:New( self, self._AliveCheckScheduler, {}, 1, 5 ) + + return self +end + + +--- Transport defines that the Client is a Transport. Transports show cargo. +-- @param #CLIENT self +-- @return #CLIENT +function CLIENT:Transport() + self:F() + + self.ClientTransport = true + return self +end + +--- AddBriefing adds a briefing to a CLIENT when a player joins a mission. +-- @param #CLIENT self +-- @param #string ClientBriefing is the text defining the Mission briefing. +-- @return #CLIENT self +function CLIENT:AddBriefing( ClientBriefing ) + self:F( ClientBriefing ) + self.ClientBriefing = ClientBriefing + self.ClientBriefingShown = false + + return self +end + +--- Show the briefing of a CLIENT. +-- @param #CLIENT self +-- @return #CLIENT self +function CLIENT:ShowBriefing() + self:F( { self.ClientName, self.ClientBriefingShown } ) + + if not self.ClientBriefingShown then + self.ClientBriefingShown = true + local Briefing = "" + if self.ClientBriefing then + Briefing = Briefing .. self.ClientBriefing + end + Briefing = Briefing .. " Press [LEFT ALT]+[B] to view the complete mission briefing." + self:Message( Briefing, 60, self.ClientName .. '/ClientBriefing', "Briefing" ) + end + + return self +end + +--- Show the mission briefing of a MISSION to the CLIENT. +-- @param #CLIENT self +-- @param #string MissionBriefing +-- @return #CLIENT self +function CLIENT:ShowMissionBriefing( MissionBriefing ) + self:F( { self.ClientName } ) + + if MissionBriefing then + self:Message( MissionBriefing, 60, self.ClientName .. '/MissionBriefing', "Mission Briefing" ) + end + + return self +end + + + +--- Resets a CLIENT. +-- @param #CLIENT self +-- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client. +function CLIENT:Reset( ClientName ) + self:F() + self._Menus = {} +end + +-- Is Functions + +--- Checks if the CLIENT is a multi-seated UNIT. +-- @param #CLIENT self +-- @return #boolean true if multi-seated. +function CLIENT:IsMultiSeated() + self:F( self.ClientName ) + + local ClientMultiSeatedTypes = { + ["Mi-8MT"] = "Mi-8MT", + ["UH-1H"] = "UH-1H", + ["P-51B"] = "P-51B" + } + + if self:IsAlive() then + local ClientTypeName = self:GetClientGroupUnit():GetTypeName() + if ClientMultiSeatedTypes[ClientTypeName] then + return true + end + end + + return false +end + +--- Checks for a client alive event and calls a function on a continuous basis. +-- @param #CLIENT self +-- @param #function CallBack Function. +-- @return #CLIENT +function CLIENT:Alive( CallBack, ... ) + self:F() + + self.ClientCallBack = CallBack + self.ClientParameters = arg + + return self +end + +--- @param #CLIENT self +function CLIENT:_AliveCheckScheduler() + self:F( { self.ClientName, self.ClientAlive2, self.ClientBriefingShown } ) + + if self:IsAlive() then -- Polymorphic call of UNIT + if self.ClientAlive2 == false then + self:ShowBriefing() + if self.ClientCallBack then + self:T("Calling Callback function") + self.ClientCallBack( self, unpack( self.ClientParameters ) ) + end + self.ClientAlive2 = true + end + else + if self.ClientAlive2 == true then + self.ClientAlive2 = false + end + end + + return true +end + +--- Return the DCSGroup of a Client. +-- This function is modified to deal with a couple of bugs in DCS 1.5.3 +-- @param #CLIENT self +-- @return DCSGroup#Group +function CLIENT:GetDCSGroup() + self:F3() + +-- local ClientData = Group.getByName( self.ClientName ) +-- if ClientData and ClientData:isExist() then +-- self:T( self.ClientName .. " : group found!" ) +-- return ClientData +-- else +-- return nil +-- end + + local ClientUnit = Unit.getByName( self.ClientName ) + + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + self:T3( { "CoalitionData:", CoalitionData } ) + for UnitId, UnitData in pairs( CoalitionData ) do + self:T3( { "UnitData:", UnitData } ) + if UnitData and UnitData:isExist() then + + --self:E(self.ClientName) + if ClientUnit then + local ClientGroup = ClientUnit:getGroup() + if ClientGroup then + self:T3( "ClientGroup = " .. self.ClientName ) + if ClientGroup:isExist() and UnitData:getGroup():isExist() then + if ClientGroup:getID() == UnitData:getGroup():getID() then + self:T3( "Normal logic" ) + self:T3( self.ClientName .. " : group found!" ) + self.ClientGroupID = ClientGroup:getID() + self.ClientGroupName = ClientGroup:getName() + return ClientGroup + end + else + -- Now we need to resolve the bugs in DCS 1.5 ... + -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) + self:T3( "Bug 1.5 logic" ) + local ClientGroupTemplate = _DATABASE.Templates.Units[self.ClientName].GroupTemplate + self.ClientGroupID = ClientGroupTemplate.groupId + self.ClientGroupName = _DATABASE.Templates.Units[self.ClientName].GroupName + self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) + return ClientGroup + end + -- else + -- error( "Client " .. self.ClientName .. " not found!" ) + end + else + --self:E( { "Client not found!", self.ClientName } ) + end + end + end + end + + -- For non player clients + if ClientUnit then + local ClientGroup = ClientUnit:getGroup() + if ClientGroup then + self:T3( "ClientGroup = " .. self.ClientName ) + if ClientGroup:isExist() then + self:T3( "Normal logic" ) + self:T3( self.ClientName .. " : group found!" ) + return ClientGroup + end + end + end + + self.ClientGroupID = nil + self.ClientGroupUnit = nil + + return nil +end + + +-- TODO: Check DCSTypes#Group.ID +--- Get the group ID of the client. +-- @param #CLIENT self +-- @return DCSTypes#Group.ID +function CLIENT:GetClientGroupID() + + local ClientGroup = self:GetDCSGroup() + + --self:E( self.ClientGroupID ) -- Determined in GetDCSGroup() + return self.ClientGroupID +end + + +--- Get the name of the group of the client. +-- @param #CLIENT self +-- @return #string +function CLIENT:GetClientGroupName() + + local ClientGroup = self:GetDCSGroup() + + self:T( self.ClientGroupName ) -- Determined in GetDCSGroup() + return self.ClientGroupName +end + +--- Returns the UNIT of the CLIENT. +-- @param #CLIENT self +-- @return Unit#UNIT +function CLIENT:GetClientGroupUnit() + self:F2() + + local ClientDCSUnit = Unit.getByName( self.ClientName ) + + self:T( self.ClientDCSUnit ) + if ClientDCSUnit and ClientDCSUnit:isExist() then + local ClientUnit = _DATABASE:FindUnit( self.ClientName ) + self:T2( ClientUnit ) + return ClientUnit + end +end + +--- Returns the DCSUnit of the CLIENT. +-- @param #CLIENT self +-- @return DCSTypes#Unit +function CLIENT:GetClientGroupDCSUnit() + self:F2() + + local ClientDCSUnit = Unit.getByName( self.ClientName ) + + if ClientDCSUnit and ClientDCSUnit:isExist() then + self:T2( ClientDCSUnit ) + return ClientDCSUnit + end +end + + +--- Evaluates if the CLIENT is a transport. +-- @param #CLIENT self +-- @return #boolean true is a transport. +function CLIENT:IsTransport() + self:F() + return self.ClientTransport +end + +--- Shows the @{Cargo#CARGO} contained within the CLIENT to the player as a message. +-- The @{Cargo#CARGO} is shown using the @{Message#MESSAGE} distribution system. +-- @param #CLIENT self +function CLIENT:ShowCargo() + self:F() + + local CargoMsg = "" + + for CargoName, Cargo in pairs( CARGOS ) do + if self == Cargo:IsLoadedInClient() then + CargoMsg = CargoMsg .. Cargo.CargoName .. " Type:" .. Cargo.CargoType .. " Weight: " .. Cargo.CargoWeight .. "\n" + end + end + + if CargoMsg == "" then + CargoMsg = "empty" + end + + self:Message( CargoMsg, 15, self.ClientName .. "/Cargo", "Co-Pilot: Cargo Status", 30 ) + +end + +-- TODO (1) I urgently need to revise this. +--- A local function called by the DCS World Menu system to switch off messages. +function CLIENT.SwitchMessages( PrmTable ) + PrmTable[1].MessageSwitch = PrmTable[2] +end + +--- The main message driver for the CLIENT. +-- This function displays various messages to the Player logged into the CLIENT through the DCS World Messaging system. +-- @param #CLIENT self +-- @param #string Message is the text describing the message. +-- @param #number MessageDuration is the duration in seconds that the Message should be displayed. +-- @param #string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId +-- @param #string MessageCategory is the category of the message (the title). +-- @param #number MessageInterval is the interval in seconds between the display of the @{Message#MESSAGE} when the CLIENT is in the air. +function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, MessageInterval ) + self:F( { Message, MessageDuration, MessageId, MessageCategory, MessageInterval } ) + + if not self.MenuMessages then + if self:GetClientGroupID() then + self.MenuMessages = MENU_CLIENT:New( self, 'Messages' ) + self.MenuRouteMessageOn = MENU_CLIENT_COMMAND:New( self, 'Messages On', self.MenuMessages, CLIENT.SwitchMessages, { self, true } ) + self.MenuRouteMessageOff = MENU_CLIENT_COMMAND:New( self,'Messages Off', self.MenuMessages, CLIENT.SwitchMessages, { self, false } ) + end + end + + if self.MessageSwitch == true then + if MessageCategory == nil then + MessageCategory = "Messages" + end + if self.Messages[MessageId] == nil then + self.Messages[MessageId] = {} + self.Messages[MessageId].MessageId = MessageId + self.Messages[MessageId].MessageTime = timer.getTime() + self.Messages[MessageId].MessageDuration = MessageDuration + if MessageInterval == nil then + self.Messages[MessageId].MessageInterval = 600 + else + self.Messages[MessageId].MessageInterval = MessageInterval + end + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + else + if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then + if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + self.Messages[MessageId].MessageTime = timer.getTime() + end + else + if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + self.Messages[MessageId].MessageInterval then + MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self ) + self.Messages[MessageId].MessageTime = timer.getTime() + end + end + end + end +end +--- Manage the mission database. +-- +-- @{#DATABASE} class +-- ================== +-- Mission designers can use the DATABASE class to refer to: +-- +-- * UNITS +-- * GROUPS +-- * players +-- * alive players +-- * CLIENTS +-- * alive CLIENTS +-- +-- On top, for internal MOOSE administration purposes, the DATBASE administers the Unit and Gruop templates as defined within the Mission Editor. +-- +-- Moose will automatically create one instance of the DATABASE class into the **global** object _DATABASE. +-- Moose refers to _DATABASE within the framework extensively, but you can also refer to the _DATABASE object within your missions if required. +-- +-- DATABASE iterators: +-- =================== +-- You can iterate the database with the available iterator methods. +-- The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. +-- The following iterator methods are currently available within the DATABASE: +-- +-- * @{#DATABASE.ForEachUnit}: Calls a function for each @{UNIT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachGroup}: Calls a function for each @{GROUP} it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayer}: Calls a function for each player it finds within the DATABASE. +-- * @{#DATABASE.ForEachPlayerAlive}: Calls a function for each alive player it finds within the DATABASE. +-- * @{#DATABASE.ForEachClient}: Calls a function for each @{CLIENT} it finds within the DATABASE. +-- * @{#DATABASE.ForEachClientAlive}: Calls a function for each alive @{CLIENT} it finds within the DATABASE. +-- +-- @module Database +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Unit" ) +Include.File( "Event" ) +Include.File( "Client" ) + + +--- DATABASE class +-- @type DATABASE +-- @extends Base#BASE +DATABASE = { + ClassName = "DATABASE", + Templates = { + Units = {}, + Groups = {}, + ClientsByName = {}, + ClientsByID = {}, + }, + DCSUnits = {}, + DCSGroups = {}, + UNITS = {}, + GROUPS = {}, + PLAYERS = {}, + PLAYERSALIVE = {}, + CLIENTS = {}, + CLIENTSALIVE = {}, + NavPoints = {}, +} + +local _DATABASECoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _DATABASECategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + + +--- Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #DATABASE self +-- @return #DATABASE +-- @usage +-- -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. +-- DBObject = DATABASE:New() +function DATABASE:New() + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + + + -- Follow alive players and clients + _EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self ) + _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self ) + + self:_RegisterTemplates() + self:_RegisterDatabase() + self:_RegisterPlayers() + + return self +end + +--- Finds a Unit based on the Unit Name. +-- @param #DATABASE self +-- @param #string UnitName +-- @return Unit#UNIT The found Unit. +function DATABASE:FindUnit( UnitName ) + + local UnitFound = self.UNITS[UnitName] + return UnitFound +end + + +--- Adds a Unit based on the Unit Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddUnit( DCSUnit, DCSUnitName ) + + self.DCSUnits[DCSUnitName] = DCSUnit + self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName ) +end + + +--- Deletes a Unit from the DATABASE based on the Unit Name. +-- @param #DATABASE self +function DATABASE:DeleteUnit( DCSUnitName ) + + self.DCSUnits[DCSUnitName] = nil +end + + +--- Finds a CLIENT based on the ClientName. +-- @param #DATABASE self +-- @param #string ClientName +-- @return Client#CLIENT The found CLIENT. +function DATABASE:FindClient( ClientName ) + + local ClientFound = self.CLIENTS[ClientName] + return ClientFound +end + + +--- Adds a CLIENT based on the ClientName in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddClient( ClientName ) + + self.CLIENTS[ClientName] = CLIENT:Register( ClientName ) + self:E( self.CLIENTS[ClientName]:GetClassNameAndID() ) +end + + +--- Finds a GROUP based on the GroupName. +-- @param #DATABASE self +-- @param #string GroupName +-- @return Group#GROUP The found GROUP. +function DATABASE:FindGroup( GroupName ) + + local GroupFound = self.GROUPS[GroupName] + return GroupFound +end + + +--- Adds a GROUP based on the GroupName in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddGroup( DCSGroup, GroupName ) + + self.DCSGroups[GroupName] = DCSGroup + self.GROUPS[GroupName] = GROUP:Register( GroupName ) +end + +--- Adds a player based on the Player Name in the DATABASE. +-- @param #DATABASE self +function DATABASE:AddPlayer( UnitName, PlayerName ) + + if PlayerName then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self.PLAYERS[PlayerName] = PlayerName + self.PLAYERSALIVE[PlayerName] = PlayerName + self.CLIENTSALIVE[PlayerName] = self:FindClient( UnitName ) + end +end + +--- Deletes a player from the DATABASE based on the Player Name. +-- @param #DATABASE self +function DATABASE:DeletePlayer( PlayerName ) + + if PlayerName then + self:E( { "Clean player:", PlayerName } ) + self.PLAYERSALIVE[PlayerName] = nil + self.CLIENTSALIVE[PlayerName] = nil + end +end + + +--- Instantiate new Groups within the DCSRTE. +-- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: +-- SpawnCountryID, SpawnCategoryID +-- This method is used by the SPAWN class. +-- @param #DATABASE self +-- @param #table SpawnTemplate +-- @return #DATABASE self +function DATABASE:Spawn( SpawnTemplate ) + self:F2( SpawnTemplate.name ) + + self:T2( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) + + -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. + local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID + local SpawnCountryID = SpawnTemplate.SpawnCountryID + local SpawnCategoryID = SpawnTemplate.SpawnCategoryID + + -- Nullify + SpawnTemplate.SpawnCoalitionID = nil + SpawnTemplate.SpawnCountryID = nil + SpawnTemplate.SpawnCategoryID = nil + + self:_RegisterTemplate( SpawnTemplate ) + coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate ) + + -- Restore + SpawnTemplate.SpawnCoalitionID = SpawnCoalitionID + SpawnTemplate.SpawnCountryID = SpawnCountryID + SpawnTemplate.SpawnCategoryID = SpawnCategoryID + + + local SpawnGroup = GROUP:Register( SpawnTemplate.name ) + return SpawnGroup +end + +--- Set a status to a Group within the Database, this to check crossing events for example. +function DATABASE:SetStatusGroup( GroupName, Status ) + self:F2( Status ) + + self.Templates.Groups[GroupName].Status = Status +end + +--- Get a status to a Group within the Database, this to check crossing events for example. +function DATABASE:GetStatusGroup( GroupName ) + self:F2( Status ) + + if self.Templates.Groups[GroupName] then + return self.Templates.Groups[GroupName].Status + else + return "" + end +end + + +--- Private method that registers new Group Templates within the DATABASE Object. +-- @param #DATABASE self +-- @param #table GroupTemplate +-- @return #DATABASE self +function DATABASE:_RegisterTemplate( GroupTemplate ) + + local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) + + if not self.Templates.Groups[GroupTemplateName] then + self.Templates.Groups[GroupTemplateName] = {} + self.Templates.Groups[GroupTemplateName].Status = nil + end + + -- Delete the spans from the route, it is not needed and takes memory. + if GroupTemplate.route and GroupTemplate.route.spans then + GroupTemplate.route.spans = nil + end + + self.Templates.Groups[GroupTemplateName].GroupName = GroupTemplateName + self.Templates.Groups[GroupTemplateName].Template = GroupTemplate + self.Templates.Groups[GroupTemplateName].groupId = GroupTemplate.groupId + self.Templates.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units + self.Templates.Groups[GroupTemplateName].Units = GroupTemplate.units + + self:T2( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } ) + + for unit_num, UnitTemplate in pairs( GroupTemplate.units ) do + + local UnitTemplateName = env.getValueDictByKey(UnitTemplate.name) + self.Templates.Units[UnitTemplateName] = {} + self.Templates.Units[UnitTemplateName].UnitName = UnitTemplateName + self.Templates.Units[UnitTemplateName].Template = UnitTemplate + self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName + self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate + self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId + self:E( {"skill",UnitTemplate.skill}) + if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then + self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate + self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate + end + self:E( { "Unit", self.Templates.Units[UnitTemplateName].UnitName } ) + end +end + + +--- Private method that registers all alive players in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterPlayers() + + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for UnitId, UnitData in pairs( CoalitionData ) do + self:T3( { "UnitData:", UnitData } ) + if UnitData and UnitData:isExist() then + local UnitName = UnitData:getName() + local PlayerName = UnitData:getPlayerName() + if not self.PLAYERS[PlayerName] then + self:E( { "Add player for unit:", UnitName, PlayerName } ) + self:AddPlayer( UnitName, PlayerName ) + end + end + end + end + + return self +end + + +--- Private method that registers all datapoints within in the mission. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:_RegisterDatabase() + + local CoalitionsData = { GroupsRed = coalition.getGroups( coalition.side.RED ), GroupsBlue = coalition.getGroups( coalition.side.BLUE ) } + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + for DCSGroupId, DCSGroup in pairs( CoalitionData ) do + + if DCSGroup:isExist() then + local DCSGroupName = DCSGroup:getName() + + self:E( { "Register Group:", DCSGroup, DCSGroupName } ) + self:AddGroup( DCSGroup, DCSGroupName ) + + for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do + + local DCSUnitName = DCSUnit:getName() + self:E( { "Register Unit:", DCSUnit, DCSUnitName } ) + self:AddUnit( DCSUnit, DCSUnitName ) + end + else + self:E( { "Group does not exist: ", DCSGroup } ) + end + + end + end + + for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do + self:E( { "Adding Client:", ClientName } ) + self:AddClient( ClientName ) + end + + return self +end + +--- Events + +--- Handles the OnBirth event for the alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnBirth( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + self:AddUnit( Event.IniDCSUnit, Event.IniDCSUnitName ) + self:AddGroup( Event.IniDCSGroup, Event.IniDCSGroupName ) + self:_EventOnPlayerEnterUnit( Event ) + end +end + + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnDeadOrCrash( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + if self.DCSUnits[Event.IniDCSUnitName] then + self:DeleteUnit( Event.IniDCSUnitName ) + -- add logic to correctly remove a group once all units are destroyed... + end + end +end + + +--- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied). +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnPlayerEnterUnit( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + local PlayerName = Event.IniDCSUnit:getPlayerName() + if not self.PLAYERSALIVE[PlayerName] then + self:AddPlayer( Event.IniDCSUnitName, PlayerName ) + end + end +end + + +--- Handles the OnPlayerLeaveUnit event to clean the active players table. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnPlayerLeaveUnit( Event ) + self:F2( { Event } ) + + if Event.IniDCSUnit then + local PlayerName = Event.IniDCSUnit:getPlayerName() + if self.PLAYERSALIVE[PlayerName] then + self:DeletePlayer( PlayerName ) + end + end +end + +--- Iterators + +--- Iterate the DATABASE and call an iterator function for the given set, providing the Object for each element within the set and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. +-- @return #DATABASE self +function DATABASE:ForEach( IteratorFunction, arg, Set ) + self:F2( arg ) + + local function CoRoutine() + local Count = 0 + for ObjectID, Object in pairs( Set ) do + self:T2( Object ) + IteratorFunction( Object, unpack( arg ) ) + Count = Count + 1 + if Count % 10 == 0 then + coroutine.yield( false ) + end + end + return true + end + + local co = coroutine.create( CoRoutine ) + + local function Schedule() + + local status, res = coroutine.resume( co ) + self:T2( { status, res } ) + + if status == false then + error( res ) + end + if res == false then + return true -- resume next time the loop + end + + return false + end + + local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** unit, providing the DCSUnit and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a DCSUnit parameter. +-- @return #DATABASE self +function DATABASE:ForEachDCSUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.DCSUnits ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** UNIT, providing the UNIT and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive UNIT in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachUnit( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.UNITS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **alive** GROUP, providing the GROUP and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the database. The function needs to accept a GROUP parameter. +-- @return #DATABASE self +function DATABASE:ForEachGroup( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.GROUPS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each player, providing the player name and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an player in the database. The function needs to accept the player name. +-- @return #DATABASE self +function DATABASE:ForEachPlayer( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERS ) + + return self +end + + +--- Iterate the DATABASE and call an iterator function for each **alive** player, providing the Unit of the player and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachPlayerAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.PLAYERSALIVE ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClient( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTS ) + + return self +end + +--- Iterate the DATABASE and call an iterator function for each **ALIVE** CLIENT, providing the CLIENT to the function and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the database. The function needs to accept a CLIENT parameter. +-- @return #DATABASE self +function DATABASE:ForEachClientAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self.CLIENTSALIVE ) + + return self +end + + +function DATABASE:_RegisterTemplates() + self:F2() + + self.Navpoints = {} + self.UNITS = {} + --Build routines.db.units and self.Navpoints + for coa_name, coa_data in pairs(env.mission.coalition) do + + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + --self.Units[coa_name] = {} + + ---------------------------------------------- + -- build nav points DB + self.Navpoints[coa_name] = {} + if coa_data.nav_points then --navpoints + for nav_ind, nav_data in pairs(coa_data.nav_points) do + + if type(nav_data) == 'table' then + self.Navpoints[coa_name][nav_ind] = routines.utils.deepCopy(nav_data) + + self.Navpoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. + self.Navpoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. + self.Navpoints[coa_name][nav_ind]['point']['x'] = nav_data.x + self.Navpoints[coa_name][nav_ind]['point']['y'] = 0 + self.Navpoints[coa_name][nav_ind]['point']['z'] = nav_data.y + end + end + end + ------------------------------------------------- + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + + local countryName = string.lower(cntry_data.name) + --self.Units[coa_name][countryName] = {} + --self.Units[coa_name][countryName]["countryId"] = cntry_data.id + + if type(cntry_data) == 'table' then --just making sure + + for obj_type_name, obj_type_data in pairs(cntry_data) do + + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check + + local category = obj_type_name + + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + + --self.Units[coa_name][countryName][category] = {} + + for group_num, GroupTemplate in pairs(obj_type_data.group) do + + if GroupTemplate and GroupTemplate.units and type(GroupTemplate.units) == 'table' then --making sure again- this is a valid group + self:_RegisterTemplate( GroupTemplate ) + end --if GroupTemplate and GroupTemplate.units then + end --for group_num, GroupTemplate in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --if type(cntry_data) == 'table' then + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do + + return self +end + + + + +--- The main include file for the MOOSE system. + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Event" ) + +-- The order of the declarations is important here. Don't touch it. + +--- Declare the event dispatcher based on the EVENT class +_EVENTDISPATCHER = EVENT:New() -- #EVENT + +--- Declare the main database object, which is used internally by the MOOSE classes. +_DATABASE = DATABASE:New() -- Database#DATABASE + +--- Scoring system for MOOSE. +-- This scoring class calculates the hits and kills that players make within a simulation session. +-- Scoring is calculated using a defined algorithm. +-- With a small change in MissionScripting.lua, the scoring can also be logged in a CSV file, that can then be uploaded +-- to a database or a BI tool to publish the scoring results to the player community. +-- @module Scoring +-- @author FlightControl + + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Event" ) + + +--- The Scoring class +-- @type SCORING +-- @field Players A collection of the current players that have joined the game. +-- @extends Base#BASE +SCORING = { + ClassName = "SCORING", + ClassID = 0, + Players = {}, +} + +local _SCORINGCoalition = + { + [1] = "Red", + [2] = "Blue", + } + +local _SCORINGCategory = + { + [Unit.Category.AIRPLANE] = "Plane", + [Unit.Category.HELICOPTER] = "Helicopter", + [Unit.Category.GROUND_UNIT] = "Vehicle", + [Unit.Category.SHIP] = "Ship", + [Unit.Category.STRUCTURE] = "Structure", + } + +--- Creates a new SCORING object to administer the scoring achieved by players. +-- @param #SCORING self +-- @param #string GameName The name of the game. This name is also logged in the CSV score file. +-- @return #SCORING self +-- @usage +-- -- Define a new scoring object for the mission Gori Valley. +-- ScoringObject = SCORING:New( "Gori Valley" ) +function SCORING:New( GameName ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + if GameName then + self.GameName = GameName + else + error( "A game name must be given to register the scoring results" ) + end + + + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnHit( self._EventOnHit, self ) + + --self.SchedulerId = routines.scheduleFunction( SCORING._FollowPlayersScheduled, { self }, 0, 5 ) + self.SchedulerId = SCHEDULER:New( self, self._FollowPlayersScheduled, {}, 0, 5 ) + + self:ScoreMenu() + + return self + +end + +--- Creates a score radio menu. Can be accessed using Radio -> F10. +-- @param #SCORING self +-- @return #SCORING self +function SCORING:ScoreMenu() + self.Menu = SUBMENU:New( 'Scoring' ) + self.AllScoresMenu = COMMANDMENU:New( 'Score All Active Players', self.Menu, SCORING.ReportScoreAll, self ) + --- = COMMANDMENU:New('Your Current Score', ReportScore, SCORING.ReportScorePlayer, self ) + return self +end + +--- Follows new players entering Clients within the DCSRTE. +-- TODO: Need to see if i can catch this also with an event. It will eliminate the schedule ... +function SCORING:_FollowPlayersScheduled() + self:F3( "_FollowPlayersScheduled" ) + + local ClientUnit = 0 + local CoalitionsData = { AlivePlayersRed = coalition.getPlayers(coalition.side.RED), AlivePlayersBlue = coalition.getPlayers(coalition.side.BLUE) } + local unitId + local unitData + local AlivePlayerUnits = {} + + for CoalitionId, CoalitionData in pairs( CoalitionsData ) do + self:T3( { "_FollowPlayersScheduled", CoalitionData } ) + for UnitId, UnitData in pairs( CoalitionData ) do + self:_AddPlayerFromUnit( UnitData ) + end + end + + return true +end + + +--- Track DEAD or CRASH events for the scoring. +-- @param #SCORING self +-- @param Event#EVENTDATA Event +function SCORING:_EventOnDeadOrCrash( Event ) + self:F( { Event } ) + + local TargetUnit = nil + local TargetGroup = nil + local TargetUnitName = "" + local TargetGroupName = "" + local TargetPlayerName = "" + local TargetCoalition = nil + local TargetCategory = nil + local TargetType = nil + local TargetUnitCoalition = nil + local TargetUnitCategory = nil + local TargetUnitType = nil + + if Event.IniDCSUnit then + + TargetUnit = Event.IniDCSUnit + TargetUnitName = Event.IniDCSUnitName + TargetGroup = Event.IniDCSGroup + TargetGroupName = Event.IniDCSGroupName + TargetPlayerName = TargetUnit:getPlayerName() + + TargetCoalition = TargetUnit:getCoalition() + --TargetCategory = TargetUnit:getCategory() + TargetCategory = TargetUnit:getDesc().category -- Workaround + TargetType = TargetUnit:getTypeName() + + TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] + TargetUnitCategory = _SCORINGCategory[TargetCategory] + TargetUnitType = TargetType + + self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } ) + end + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Something got killed" ) + + -- Some variables + local InitUnitName = PlayerData.UnitName + local InitUnitType = PlayerData.UnitType + local InitCoalition = PlayerData.UnitCoalition + local InitCategory = PlayerData.UnitCategory + local InitUnitCoalition = _SCORINGCoalition[InitCoalition] + local InitUnitCategory = _SCORINGCategory[InitCategory] + + self:T( { InitUnitName, InitUnitType, InitUnitCoalition, InitCoalition, InitUnitCategory, InitCategory } ) + + -- What is he hitting? + if TargetCategory then + if PlayerData and PlayerData.Hit and PlayerData.Hit[TargetCategory] and PlayerData.Hit[TargetCategory][TargetUnitName] then -- Was there a hit for this unit for this player before registered??? + if not PlayerData.Kill[TargetCategory] then + PlayerData.Kill[TargetCategory] = {} + end + if not PlayerData.Kill[TargetCategory][TargetType] then + PlayerData.Kill[TargetCategory][TargetType] = {} + PlayerData.Kill[TargetCategory][TargetType].Score = 0 + PlayerData.Kill[TargetCategory][TargetType].ScoreKill = 0 + PlayerData.Kill[TargetCategory][TargetType].Penalty = 0 + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = 0 + end + + if InitCoalition == TargetCoalition then + PlayerData.Penalty = PlayerData.Penalty + 25 + PlayerData.Kill[TargetCategory][TargetType].Penalty = PlayerData.Kill[TargetCategory][TargetType].Penalty + 25 + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = PlayerData.Kill[TargetCategory][TargetType].PenaltyKill + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' killed a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + PlayerData.Kill[TargetCategory][TargetType].PenaltyKill .. " times. Penalty: -" .. PlayerData.Kill[TargetCategory][TargetType].Penalty .. + ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, + "", 5, "/PENALTY" .. PlayerName .. "/" .. InitUnitName ):ToAll() + self:ScoreCSV( PlayerName, "KILL_PENALTY", 1, -125, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + else + PlayerData.Score = PlayerData.Score + 10 + PlayerData.Kill[TargetCategory][TargetType].Score = PlayerData.Kill[TargetCategory][TargetType].Score + 10 + PlayerData.Kill[TargetCategory][TargetType].ScoreKill = PlayerData.Kill[TargetCategory][TargetType].ScoreKill + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' killed an enemy " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + PlayerData.Kill[TargetCategory][TargetType].ScoreKill .. " times. Score: " .. PlayerData.Kill[TargetCategory][TargetType].Score .. + ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, + "", 5, "/SCORE" .. PlayerName .. "/" .. InitUnitName ):ToAll() + self:ScoreCSV( PlayerName, "KILL_SCORE", 1, 10, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + end + end + end + end + end +end + + + +--- Add a new player entering a Unit. +function SCORING:_AddPlayerFromUnit( UnitData ) + self:F( UnitData ) + + if UnitData and UnitData:isExist() then + local UnitName = UnitData:getName() + local PlayerName = UnitData:getPlayerName() + local UnitDesc = UnitData:getDesc() + local UnitCategory = UnitDesc.category + local UnitCoalition = UnitData:getCoalition() + local UnitTypeName = UnitData:getTypeName() + + self:T( { PlayerName, UnitName, UnitCategory, UnitCoalition, UnitTypeName } ) + + if self.Players[PlayerName] == nil then -- I believe this is the place where a Player gets a life in a mission when he enters a unit ... + self.Players[PlayerName] = {} + self.Players[PlayerName].Hit = {} + self.Players[PlayerName].Kill = {} + self.Players[PlayerName].Mission = {} + + -- for CategoryID, CategoryName in pairs( SCORINGCategory ) do + -- self.Players[PlayerName].Hit[CategoryID] = {} + -- self.Players[PlayerName].Kill[CategoryID] = {} + -- end + self.Players[PlayerName].HitPlayers = {} + self.Players[PlayerName].HitUnits = {} + self.Players[PlayerName].Score = 0 + self.Players[PlayerName].Penalty = 0 + self.Players[PlayerName].PenaltyCoalition = 0 + self.Players[PlayerName].PenaltyWarning = 0 + end + + if not self.Players[PlayerName].UnitCoalition then + self.Players[PlayerName].UnitCoalition = UnitCoalition + else + if self.Players[PlayerName].UnitCoalition ~= UnitCoalition then + self.Players[PlayerName].Penalty = self.Players[PlayerName].Penalty + 50 + self.Players[PlayerName].PenaltyCoalition = self.Players[PlayerName].PenaltyCoalition + 1 + MESSAGE:New( "Player '" .. PlayerName .. "' changed coalition from " .. _SCORINGCoalition[self.Players[PlayerName].UnitCoalition] .. " to " .. _SCORINGCoalition[UnitCoalition] .. + "(changed " .. self.Players[PlayerName].PenaltyCoalition .. " times the coalition). 50 Penalty points added.", + "", + 2, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + self:ScoreCSV( PlayerName, "COALITION_PENALTY", 1, -50, self.Players[PlayerName].UnitName, _SCORINGCoalition[self.Players[PlayerName].UnitCoalition], _SCORINGCategory[self.Players[PlayerName].UnitCategory], self.Players[PlayerName].UnitType, + UnitName, _SCORINGCoalition[UnitCoalition], _SCORINGCategory[UnitCategory], UnitData:getTypeName() ) + end + end + self.Players[PlayerName].UnitName = UnitName + self.Players[PlayerName].UnitCoalition = UnitCoalition + self.Players[PlayerName].UnitCategory = UnitCategory + self.Players[PlayerName].UnitType = UnitTypeName + + if self.Players[PlayerName].Penalty > 100 then + if self.Players[PlayerName].PenaltyWarning < 1 then + MESSAGE:New( "Player '" .. PlayerName .. "': WARNING! If you continue to commit FRATRICIDE and have a PENALTY score higher than 150, you will be COURT MARTIALED and DISMISSED from this mission! \nYour total penalty is: " .. self.Players[PlayerName].Penalty, + "", + 30, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + self.Players[PlayerName].PenaltyWarning = self.Players[PlayerName].PenaltyWarning + 1 + end + end + + if self.Players[PlayerName].Penalty > 150 then + ClientGroup = GROUP:NewFromDCSUnit( UnitData ) + ClientGroup:Destroy() + MESSAGE:New( "Player '" .. PlayerName .. "' committed FRATRICIDE, he will be COURT MARTIALED and is DISMISSED from this mission!", + "", + 10, + "/PENALTYCOALITION" .. PlayerName + ):ToAll() + end + + end +end + + +--- Registers Scores the players completing a Mission Task. +function SCORING:_AddMissionTaskScore( PlayerUnit, MissionName, Score ) + self:F( { PlayerUnit, MissionName, Score } ) + + local PlayerName = PlayerUnit:getPlayerName() + + if not self.Players[PlayerName].Mission[MissionName] then + self.Players[PlayerName].Mission[MissionName] = {} + self.Players[PlayerName].Mission[MissionName].ScoreTask = 0 + self.Players[PlayerName].Mission[MissionName].ScoreMission = 0 + end + + self:T( PlayerName ) + self:T( self.Players[PlayerName].Mission[MissionName] ) + + self.Players[PlayerName].Score = self.Players[PlayerName].Score + Score + self.Players[PlayerName].Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score + + MESSAGE:New( "Player '" .. PlayerName .. "' has finished another Task in Mission '" .. MissionName .. "'. " .. + Score .. " Score points added.", + "", 20, "/SCORETASK" .. PlayerName ):ToAll() + + self:ScoreCSV( PlayerName, "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score, PlayerUnit:getName() ) +end + + +--- Registers Mission Scores for possible multiple players that contributed in the Mission. +function SCORING:_AddMissionScore( MissionName, Score ) + self:F( { MissionName, Score } ) + + for PlayerName, PlayerData in pairs( self.Players ) do + + if PlayerData.Mission[MissionName] then + PlayerData.Score = PlayerData.Score + Score + PlayerData.Mission[MissionName].ScoreMission = PlayerData.Mission[MissionName].ScoreMission + Score + MESSAGE:New( "Player '" .. PlayerName .. "' has finished Mission '" .. MissionName .. "'. " .. + Score .. " Score points added.", + "", 20, "/SCOREMISSION" .. PlayerName ):ToAll() + self:ScoreCSV( PlayerName, "MISSION_" .. MissionName:gsub( ' ', '_' ), 1, Score ) + end + end +end + +--- Handles the OnHit event for the scoring. +-- @param #SCORING self +-- @param Event#EVENTDATA Event +function SCORING:_EventOnHit( Event ) + self:F( { Event } ) + + local InitUnit = nil + local InitUnitName = "" + local InitGroup = nil + local InitGroupName = "" + local InitPlayerName = nil + + local InitCoalition = nil + local InitCategory = nil + local InitType = nil + local InitUnitCoalition = nil + local InitUnitCategory = nil + local InitUnitType = nil + + local TargetUnit = nil + local TargetUnitName = "" + local TargetGroup = nil + local TargetGroupName = "" + local TargetPlayerName = "" + + local TargetCoalition = nil + local TargetCategory = nil + local TargetType = nil + local TargetUnitCoalition = nil + local TargetUnitCategory = nil + local TargetUnitType = nil + + if Event.IniDCSUnit then + + InitUnit = Event.IniDCSUnit + InitUnitName = Event.IniDCSUnitName + InitGroup = Event.IniDCSGroup + InitGroupName = Event.IniDCSGroupName + InitPlayerName = InitUnit:getPlayerName() + + InitCoalition = InitUnit:getCoalition() + --TODO: Workaround Client DCS Bug + --InitCategory = InitUnit:getCategory() + InitCategory = InitUnit:getDesc().category + InitType = InitUnit:getTypeName() + + InitUnitCoalition = _SCORINGCoalition[InitCoalition] + InitUnitCategory = _SCORINGCategory[InitCategory] + InitUnitType = InitType + + self:T( { InitUnitName, InitGroupName, InitPlayerName, InitCoalition, InitCategory, InitType , InitUnitCoalition, InitUnitCategory, InitUnitType } ) + end + + + if Event.TgtDCSUnit then + + TargetUnit = Event.TgtDCSUnit + TargetUnitName = Event.TgtDCSUnitName + TargetGroup = Event.TgtDCSGroup + TargetGroupName = Event.TgtDCSGroupName + TargetPlayerName = TargetUnit:getPlayerName() + + TargetCoalition = TargetUnit:getCoalition() + --TODO: Workaround Client DCS Bug + --TargetCategory = TargetUnit:getCategory() + TargetCategory = TargetUnit:getDesc().category + TargetType = TargetUnit:getTypeName() + + TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] + TargetUnitCategory = _SCORINGCategory[TargetCategory] + TargetUnitType = TargetType + + self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType, TargetUnitCoalition, TargetUnitCategory, TargetUnitType } ) + end + + if InitPlayerName ~= nil then -- It is a player that is hitting something + self:_AddPlayerFromUnit( InitUnit ) + if self.Players[InitPlayerName] then -- This should normally not happen, but i'll test it anyway. + if TargetPlayerName ~= nil then -- It is a player hitting another player ... + self:_AddPlayerFromUnit( TargetUnit ) + self.Players[InitPlayerName].HitPlayers = self.Players[InitPlayerName].HitPlayers + 1 + end + + self:T( "Hitting Something" ) + -- What is he hitting? + if TargetCategory then + if not self.Players[InitPlayerName].Hit[TargetCategory] then + self.Players[InitPlayerName].Hit[TargetCategory] = {} + end + if not self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] then + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] = {} + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = 0 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = 0 + end + local Score = 0 + if InitCoalition == TargetCoalition then + self.Players[InitPlayerName].Penalty = self.Players[InitPlayerName].Penalty + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit + 1 + MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit .. " times. Penalty: -" .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty .. + ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, + "", + 2, + "/PENALTY" .. InitPlayerName .. "/" .. InitUnitName + ):ToAll() + self:ScoreCSV( InitPlayerName, "HIT_PENALTY", 1, -25, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + else + self.Players[InitPlayerName].Score = self.Players[InitPlayerName].Score + 10 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score + 1 + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit + 1 + MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a target " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. + self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit .. " times. Score: " .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score .. + ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, + "", + 2, + "/SCORE" .. InitPlayerName .. "/" .. InitUnitName + ):ToAll() + self:ScoreCSV( InitPlayerName, "HIT_SCORE", 1, 1, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + end + end + end + elseif InitPlayerName == nil then -- It is an AI hitting a player??? + + end +end + + +function SCORING:ReportScoreAll() + + env.info( "Hello World " ) + + local ScoreMessage = "" + local PlayerMessage = "" + + self:T( "Score Report" ) + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local PlayerScore = 0 + local PlayerPenalty = 0 + + ScoreMessage = ":\n" + + local ScoreMessageHits = "" + + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( CategoryName ) + if PlayerData.Hit[CategoryID] then + local Score = 0 + local ScoreHit = 0 + local Penalty = 0 + local PenaltyHit = 0 + self:T( "Hit scores exist for player " .. PlayerName ) + for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do + Score = Score + UnitData.Score + ScoreHit = ScoreHit + UnitData.ScoreHit + Penalty = Penalty + UnitData.Penalty + PenaltyHit = UnitData.PenaltyHit + end + local ScoreMessageHit = string.format( "%s:%d ", CategoryName, Score - Penalty ) + self:T( ScoreMessageHit ) + ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageHits ~= "" then + ScoreMessage = ScoreMessage .. " Hits: " .. ScoreMessageHits .. "\n" + end + + local ScoreMessageKills = "" + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( "Kill scores exist for player " .. PlayerName ) + if PlayerData.Kill[CategoryID] then + local Score = 0 + local ScoreKill = 0 + local Penalty = 0 + local PenaltyKill = 0 + + for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do + Score = Score + UnitData.Score + ScoreKill = ScoreKill + UnitData.ScoreKill + Penalty = Penalty + UnitData.Penalty + PenaltyKill = PenaltyKill + UnitData.PenaltyKill + end + + local ScoreMessageKill = string.format( " %s:%d ", CategoryName, Score - Penalty ) + self:T( ScoreMessageKill ) + ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill + + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageKills ~= "" then + ScoreMessage = ScoreMessage .. " Kills: " .. ScoreMessageKills .. "\n" + end + + local ScoreMessageCoalitionChangePenalties = "" + if PlayerData.PenaltyCoalition ~= 0 then + ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) + PlayerPenalty = PlayerPenalty + PlayerData.Penalty + end + if ScoreMessageCoalitionChangePenalties ~= "" then + ScoreMessage = ScoreMessage .. " Coalition Penalties: " .. ScoreMessageCoalitionChangePenalties .. "\n" + end + + local ScoreMessageMission = "" + local ScoreMission = 0 + local ScoreTask = 0 + for MissionName, MissionData in pairs( PlayerData.Mission ) do + ScoreMission = ScoreMission + MissionData.ScoreMission + ScoreTask = ScoreTask + MissionData.ScoreTask + ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " + end + PlayerScore = PlayerScore + ScoreMission + ScoreTask + + if ScoreMessageMission ~= "" then + ScoreMessage = ScoreMessage .. " Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")\n" + end + + PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score:%d (%d Score -%d Penalties)%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) + end + end + MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() +end + + +function SCORING:ReportScorePlayer() + + env.info( "Hello World " ) + + local ScoreMessage = "" + local PlayerMessage = "" + + self:T( "Score Report" ) + + for PlayerName, PlayerData in pairs( self.Players ) do + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local PlayerScore = 0 + local PlayerPenalty = 0 + + ScoreMessage = "" + + local ScoreMessageHits = "" + + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( CategoryName ) + if PlayerData.Hit[CategoryID] then + local Score = 0 + local ScoreHit = 0 + local Penalty = 0 + local PenaltyHit = 0 + self:T( "Hit scores exist for player " .. PlayerName ) + for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do + Score = Score + UnitData.Score + ScoreHit = ScoreHit + UnitData.ScoreHit + Penalty = Penalty + UnitData.Penalty + PenaltyHit = UnitData.PenaltyHit + end + local ScoreMessageHit = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreHit, PenaltyHit ) + self:T( ScoreMessageHit ) + ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageHits ~= "" then + ScoreMessage = ScoreMessage .. "\n Hits: " .. ScoreMessageHits .. " " + end + + local ScoreMessageKills = "" + for CategoryID, CategoryName in pairs( _SCORINGCategory ) do + self:T( "Kill scores exist for player " .. PlayerName ) + if PlayerData.Kill[CategoryID] then + local Score = 0 + local ScoreKill = 0 + local Penalty = 0 + local PenaltyKill = 0 + + for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do + Score = Score + UnitData.Score + ScoreKill = ScoreKill + UnitData.ScoreKill + Penalty = Penalty + UnitData.Penalty + PenaltyKill = PenaltyKill + UnitData.PenaltyKill + end + + local ScoreMessageKill = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreKill, PenaltyKill ) + self:T( ScoreMessageKill ) + ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill + + PlayerScore = PlayerScore + Score + PlayerPenalty = PlayerPenalty + Penalty + else + --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) + end + end + if ScoreMessageKills ~= "" then + ScoreMessage = ScoreMessage .. "\n Kills: " .. ScoreMessageKills .. " " + end + + local ScoreMessageCoalitionChangePenalties = "" + if PlayerData.PenaltyCoalition ~= 0 then + ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) + PlayerPenalty = PlayerPenalty + PlayerData.Penalty + end + if ScoreMessageCoalitionChangePenalties ~= "" then + ScoreMessage = ScoreMessage .. "\n Coalition: " .. ScoreMessageCoalitionChangePenalties .. " " + end + + local ScoreMessageMission = "" + local ScoreMission = 0 + local ScoreTask = 0 + for MissionName, MissionData in pairs( PlayerData.Mission ) do + ScoreMission = ScoreMission + MissionData.ScoreMission + ScoreTask = ScoreTask + MissionData.ScoreTask + ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " + end + PlayerScore = PlayerScore + ScoreMission + ScoreTask + + if ScoreMessageMission ~= "" then + ScoreMessage = ScoreMessage .. "\n Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ") " + end + + PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties ):%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) + end + end + MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() + +end + + +function SCORING:SecondsToClock(sSeconds) + local nSeconds = sSeconds + if nSeconds == 0 then + --return nil; + return "00:00:00"; + else + nHours = string.format("%02.f", math.floor(nSeconds/3600)); + nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); + nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); + return nHours..":"..nMins..":"..nSecs + end +end + +--- Opens a score CSV file to log the scores. +-- @param #SCORING self +-- @param #string ScoringCSV +-- @return #SCORING self +-- @usage +-- -- Open a new CSV file to log the scores of the game Gori Valley. Let the name of the CSV file begin with "Player Scores". +-- ScoringObject = SCORING:New( "Gori Valley" ) +-- ScoringObject:OpenCSV( "Player Scores" ) +function SCORING:OpenCSV( ScoringCSV ) + self:F( ScoringCSV ) + + if lfs and io and os then + if ScoringCSV then + self.ScoringCSV = ScoringCSV + local fdir = lfs.writedir() .. [[Logs\]] .. self.ScoringCSV .. " " .. os.date( "%Y-%m-%d %H-%M-%S" ) .. ".csv" + + self.CSVFile, self.err = io.open( fdir, "w+" ) + if not self.CSVFile then + error( "Error: Cannot open CSV file in " .. lfs.writedir() ) + end + + self.CSVFile:write( '"GameName","RunTime","Time","PlayerName","ScoreType","PlayerUnitCoaltion","PlayerUnitCategory","PlayerUnitType","PlayerUnitName","TargetUnitCoalition","TargetUnitCategory","TargetUnitType","TargetUnitName","Times","Score"\n' ) + + self.RunTime = os.date("%y-%m-%d_%H-%M-%S") + else + error( "A string containing the CSV file name must be given." ) + end + else + self:E( "The MissionScripting.lua file has not been changed to allow lfs, io and os modules to be used..." ) + end + return self +end + + +--- Registers a score for a player. +-- @param #SCORING self +-- @param #string PlayerName The name of the player. +-- @param #string ScoreType The type of the score. +-- @param #string ScoreTimes The amount of scores achieved. +-- @param #string ScoreAmount The score given. +-- @param #string PlayerUnitName The unit name of the player. +-- @param #string PlayerUnitCoalition The coalition of the player unit. +-- @param #string PlayerUnitCategory The category of the player unit. +-- @param #string PlayerUnitType The type of the player unit. +-- @param #string TargetUnitName The name of the target unit. +-- @param #string TargetUnitCoalition The coalition of the target unit. +-- @param #string TargetUnitCategory The category of the target unit. +-- @param #string TargetUnitType The type of the target unit. +-- @return #SCORING self +function SCORING:ScoreCSV( PlayerName, ScoreType, ScoreTimes, ScoreAmount, PlayerUnitName, PlayerUnitCoalition, PlayerUnitCategory, PlayerUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) + --write statistic information to file + local ScoreTime = self:SecondsToClock( timer.getTime() ) + PlayerName = PlayerName:gsub( '"', '_' ) + + if PlayerUnitName and PlayerUnitName ~= '' then + local PlayerUnit = Unit.getByName( PlayerUnitName ) + + if PlayerUnit then + if not PlayerUnitCategory then + --PlayerUnitCategory = SCORINGCategory[PlayerUnit:getCategory()] + PlayerUnitCategory = _SCORINGCategory[PlayerUnit:getDesc().category] + end + + if not PlayerUnitCoalition then + PlayerUnitCoalition = _SCORINGCoalition[PlayerUnit:getCoalition()] + end + + if not PlayerUnitType then + PlayerUnitType = PlayerUnit:getTypeName() + end + else + PlayerUnitName = '' + PlayerUnitCategory = '' + PlayerUnitCoalition = '' + PlayerUnitType = '' + end + else + PlayerUnitName = '' + PlayerUnitCategory = '' + PlayerUnitCoalition = '' + PlayerUnitType = '' + end + + if not TargetUnitCoalition then + TargetUnitCoalition = '' + end + + if not TargetUnitCategory then + TargetUnitCategory = '' + end + + if not TargetUnitType then + TargetUnitType = '' + end + + if not TargetUnitName then + TargetUnitName = '' + end + + if lfs and io and os then + self.CSVFile:write( + '"' .. self.GameName .. '"' .. ',' .. + '"' .. self.RunTime .. '"' .. ',' .. + '' .. ScoreTime .. '' .. ',' .. + '"' .. PlayerName .. '"' .. ',' .. + '"' .. ScoreType .. '"' .. ',' .. + '"' .. PlayerUnitCoalition .. '"' .. ',' .. + '"' .. PlayerUnitCategory .. '"' .. ',' .. + '"' .. PlayerUnitType .. '"' .. ',' .. + '"' .. PlayerUnitName .. '"' .. ',' .. + '"' .. TargetUnitCoalition .. '"' .. ',' .. + '"' .. TargetUnitCategory .. '"' .. ',' .. + '"' .. TargetUnitType .. '"' .. ',' .. + '"' .. TargetUnitName .. '"' .. ',' .. + '' .. ScoreTimes .. '' .. ',' .. + '' .. ScoreAmount + ) + + self.CSVFile:write( "\n" ) + end +end + + +function SCORING:CloseCSV() + if lfs and io and os then + self.CSVFile:close() + end +end + +--- CARGO Classes +-- @module CARGO + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Message" ) +Include.File( "Scheduler" ) + + +--- Clients are those Groups defined within the Mission Editor that have the skillset defined as "Client" or "Player". +-- These clients are defined within the Mission Orchestration Framework (MOF) + +CARGOS = {} + + +CARGO_ZONE = { + ClassName="CARGO_ZONE", + CargoZoneName = '', + CargoHostUnitName = '', + SIGNAL = { + TYPE = { + SMOKE = { ID = 1, TEXT = "smoke" }, + FLARE = { ID = 2, TEXT = "flare" } + }, + COLOR = { + GREEN = { ID = 1, TRIGGERCOLOR = trigger.smokeColor.Green, TEXT = "A green" }, + RED = { ID = 2, TRIGGERCOLOR = trigger.smokeColor.Red, TEXT = "A red" }, + WHITE = { ID = 3, TRIGGERCOLOR = trigger.smokeColor.White, TEXT = "A white" }, + ORANGE = { ID = 4, TRIGGERCOLOR = trigger.smokeColor.Orange, TEXT = "An orange" }, + BLUE = { ID = 5, TRIGGERCOLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, + YELLOW = { ID = 6, TRIGGERCOLOR = trigger.flareColor.Yellow, TEXT = "A yellow" } + } + } +} + +--- Creates a new zone where cargo can be collected or deployed. +-- The zone functionality is useful to smoke or indicate routes for cargo pickups or deployments. +-- Provide the zone name as declared in the mission file into the CargoZoneName in the :New method. +-- An optional parameter is the CargoHostName, which is a Group declared with Late Activation switched on in the mission file. +-- The CargoHostName is the "host" of the cargo zone: +-- +-- * It will smoke the zone position when a client is approaching the zone. +-- * Depending on the cargo type, it will assist in the delivery of the cargo by driving to and from the client. +-- +-- @param #CARGO_ZONE self +-- @param #string CargoZoneName The name of the zone as declared within the mission editor. +-- @param #string CargoHostName The name of the Group "hosting" the zone. The Group MUST NOT be a static, and must be a "mobile" unit. +function CARGO_ZONE:New( CargoZoneName, CargoHostName ) local self = BASE:Inherit( self, ZONE:New( CargoZoneName ) ) + self:F( { CargoZoneName, CargoHostName } ) + + self.CargoZoneName = CargoZoneName + self.SignalHeight = 2 + --self.CargoZone = trigger.misc.getZone( CargoZoneName ) + + + if CargoHostName then + self.CargoHostName = CargoHostName + end + + self:T( self.CargoZoneName ) + + return self +end + +function CARGO_ZONE:Spawn() + self:F( self.CargoHostName ) + + if self.CargoHostName then -- Only spawn a host in the zone when there is one given as a parameter in the New function. + if self.CargoHostSpawn then + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() + if CargoHostGroup and CargoHostGroup:IsAlive() then + else + self.CargoHostSpawn:ReSpawn( 1 ) + end + else + self:T( "Initialize CargoHostSpawn" ) + self.CargoHostSpawn = SPAWN:New( self.CargoHostName ):Limit( 1, 1 ) + self.CargoHostSpawn:ReSpawn( 1 ) + end + end + + return self +end + +function CARGO_ZONE:GetHostUnit() + self:F( self ) + + if self.CargoHostName then + + -- A Host has been given, signal the host + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() + local CargoHostUnit + if CargoHostGroup and CargoHostGroup:IsAlive() then + CargoHostUnit = CargoHostGroup:GetUnit(1) + else + CargoHostUnit = StaticObject.getByName( self.CargoHostName ) + end + + return CargoHostUnit + end + + return nil +end + +function CARGO_ZONE:ReportCargosToClient( Client, CargoType ) + self:F() + + local SignalUnit = self:GetHostUnit() + + if SignalUnit then + + local SignalUnitTypeName = SignalUnit:getTypeName() + + local HostMessage = "" + + local IsCargo = false + for CargoID, Cargo in pairs( CARGOS ) do + if Cargo.CargoType == Task.CargoType then + if Cargo:IsStatusNone() then + HostMessage = HostMessage .. " - " .. Cargo.CargoName .. " - " .. Cargo.CargoType .. " (" .. Cargo.Weight .. "kg)" .. "\n" + IsCargo = true + end + end + end + + if not IsCargo then + HostMessage = "No Cargo Available." + end + + Client:Message( HostMessage, 20, Mission.Name .. "/StageHosts." .. SignalUnitTypeName, SignalUnitTypeName .. ": Reporting Cargo", 10 ) + end +end + + +function CARGO_ZONE:Signal() + self:F() + + local Signalled = false + + if self.SignalType then + + if self.CargoHostName then + + -- A Host has been given, signal the host + + local SignalUnit = self:GetHostUnit() + + if SignalUnit then + + self:T( 'Signalling Unit' ) + local SignalVehiclePos = SignalUnit:GetPointVec3() + SignalVehiclePos.y = SignalVehiclePos.y + 2 + + if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then + + trigger.action.smoke( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR ) + Signalled = true + + elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then + + trigger.action.signalFlare( SignalVehiclePos, self.SignalColor.TRIGGERCOLOR , 0 ) + Signalled = false + + end + end + + else + + local ZonePointVec3 = self:GetPointVec3( self.SignalHeight ) -- Get the zone position + the landheight + 2 meters + + if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then + + trigger.action.smoke( ZonePointVec3, self.SignalColor.TRIGGERCOLOR ) + Signalled = true + + elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then + trigger.action.signalFlare( ZonePointVec3, self.SignalColor.TRIGGERCOLOR, 0 ) + Signalled = false + + end + end + end + + return Signalled + +end + +function CARGO_ZONE:WhiteSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:BlueSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.BLUE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:RedSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:OrangeSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.ORANGE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:GreenSmoke( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + + +function CARGO_ZONE:WhiteFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:RedFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:GreenFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + +function CARGO_ZONE:YellowFlare( SignalHeight ) + self:F() + + self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE + self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.YELLOW + + if SignalHeight then + self.SignalHeight = SignalHeight + end + + return self +end + + +function CARGO_ZONE:GetCargoHostUnit() + self:F( self ) + + if self.CargoHostSpawn then + local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex(1) + if CargoHostGroup and CargoHostGroup:IsAlive() then + local CargoHostUnit = CargoHostGroup:GetUnit(1) + if CargoHostUnit and CargoHostUnit:IsAlive() then + return CargoHostUnit + end + end + end + + return nil +end + +function CARGO_ZONE:GetCargoZoneName() + self:F() + + return self.CargoZoneName +end + +CARGO = { + ClassName = "CARGO", + STATUS = { + NONE = 0, + LOADED = 1, + UNLOADED = 2, + LOADING = 3 + }, + CargoClient = nil +} + +--- Add Cargo to the mission... Cargo functionality needs to be reworked a bit, so this is still under construction. I need to make a CARGO Class... +function CARGO:New( CargoType, CargoName, CargoWeight ) local self = BASE:Inherit( self, BASE:New() ) + self:F( { CargoType, CargoName, CargoWeight } ) + + + self.CargoType = CargoType + self.CargoName = CargoName + self.CargoWeight = CargoWeight + + self:StatusNone() + + return self +end + +function CARGO:Spawn( Client ) + self:F() + + return self + +end + +function CARGO:IsNear( Client, LandingZone ) + self:F() + + local Near = true + + return Near + +end + + +function CARGO:IsLoadingToClient() + self:F() + + if self:IsStatusLoading() then + return self.CargoClient + end + + return nil + +end + + +function CARGO:IsLoadedInClient() + self:F() + + if self:IsStatusLoaded() then + return self.CargoClient + end + + return nil + +end + + +function CARGO:UnLoad( Client, TargetZoneName ) + self:F() + + self:StatusUnLoaded() + + return self +end + +function CARGO:OnBoard( Client, LandingZone ) + self:F() + + local Valid = true + + self.CargoClient = Client + local ClientUnit = Client:GetClientGroupDCSUnit() + + return Valid +end + +function CARGO:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = true + + return OnBoarded +end + +function CARGO:Load( Client ) + self:F() + + self:StatusLoaded( Client ) + + return self +end + +function CARGO:IsLandingRequired() + self:F() + return true +end + +function CARGO:IsSlingLoad() + self:F() + return false +end + + +function CARGO:StatusNone() + self:F() + + self.CargoClient = nil + self.CargoStatus = CARGO.STATUS.NONE + + return self +end + +function CARGO:StatusLoading( Client ) + self:F() + + self.CargoClient = Client + self.CargoStatus = CARGO.STATUS.LOADING + self:T( "Cargo " .. self.CargoName .. " loading to Client: " .. self.CargoClient:GetClientGroupName() ) + + return self +end + +function CARGO:StatusLoaded( Client ) + self:F() + + self.CargoClient = Client + self.CargoStatus = CARGO.STATUS.LOADED + self:T( "Cargo " .. self.CargoName .. " loaded in Client: " .. self.CargoClient:GetClientGroupName() ) + + return self +end + +function CARGO:StatusUnLoaded() + self:F() + + self.CargoClient = nil + self.CargoStatus = CARGO.STATUS.UNLOADED + + return self +end + + +function CARGO:IsStatusNone() + self:F() + + return self.CargoStatus == CARGO.STATUS.NONE +end + +function CARGO:IsStatusLoading() + self:F() + + return self.CargoStatus == CARGO.STATUS.LOADING +end + +function CARGO:IsStatusLoaded() + self:F() + + return self.CargoStatus == CARGO.STATUS.LOADED +end + +function CARGO:IsStatusUnLoaded() + self:F() + + return self.CargoStatus == CARGO.STATUS.UNLOADED +end + + +CARGO_GROUP = { + ClassName = "CARGO_GROUP" +} + + +function CARGO_GROUP:New( CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoGroupTemplate, CargoZone } ) + + self.CargoSpawn = SPAWN:NewWithAlias( CargoGroupTemplate, CargoName ) + self.CargoZone = CargoZone + + CARGOS[self.CargoName] = self + + return self + +end + +function CARGO_GROUP:Spawn( Client ) + self:F( { Client } ) + + local SpawnCargo = true + + if self:IsStatusNone() then + local CargoGroup = Group.getByName( self.CargoName ) + if CargoGroup and CargoGroup:isExist() then + SpawnCargo = false + end + + elseif self:IsStatusLoading() then + + local Client = self:IsLoadingToClient() + if Client and Client:GetDCSGroup() then + SpawnCargo = false + else + local CargoGroup = Group.getByName( self.CargoName ) + if CargoGroup and CargoGroup:isExist() then + SpawnCargo = false + end + end + + elseif self:IsStatusLoaded() then + + local ClientLoaded = self:IsLoadedInClient() + -- Now test if another Client is alive (not this one), and it has the CARGO, then this cargo does not need to be initialized and spawned. + if ClientLoaded and ClientLoaded ~= Client then + local ClientGroup = Client:GetDCSGroup() + if ClientLoaded:GetClientGroupDCSUnit() and ClientLoaded:GetClientGroupDCSUnit():isExist() then + SpawnCargo = false + else + self:StatusNone() + end + else + -- Same Client, but now in initialize, so set back the status to None. + self:StatusNone() + end + + elseif self:IsStatusUnLoaded() then + + SpawnCargo = false + + end + + if SpawnCargo then + if self.CargoZone:GetCargoHostUnit() then + --- ReSpawn the Cargo from the CargoHost + self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30, 1 ):GetName() + else + --- ReSpawn the Cargo in the CargoZone without a host ... + self:T( self.CargoZone ) + self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone, true, 1 ):GetName() + end + self:StatusNone() + end + + self:T( { self.CargoGroupName, CARGOS[self.CargoName].CargoGroupName } ) + + return self +end + +function CARGO_GROUP:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + if self.CargoGroupName then + local CargoGroup = Group.getByName( self.CargoGroupName ) + if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 250 ) then + Near = true + end + end + + return Near + +end + + +function CARGO_GROUP:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + local ClientUnit = Client:GetClientGroupDCSUnit() + + local CarrierPos = ClientUnit:getPoint() + local CarrierPosMove = ClientUnit:getPoint() + local CarrierPosOnBoard = ClientUnit:getPoint() + + local CargoGroup = Group.getByName( self.CargoGroupName ) + + local CargoUnit = CargoGroup:getUnit(1) + local CargoPos = CargoUnit:getPoint() + + self.CargoInAir = CargoUnit:inAir() + + self:T( self.CargoInAir ) + + -- Only move the group to the carrier when the cargo is not in the air + -- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea). + if not self.CargoInAir then + + local Points = {} + + self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) + self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) + + Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) + + self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) + + if OnBoardSide == nil then + OnBoardSide = CLIENT.ONBOARDSIDE.NONE + end + + if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then + + self:T( "TransportCargoOnBoard: Onboarding LEFT" ) + CarrierPosMove.z = CarrierPosMove.z - 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then + + self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) + CarrierPosMove.z = CarrierPosMove.z + 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then + + self:T( "TransportCargoOnBoard: Onboarding BACK" ) + CarrierPosMove.x = CarrierPosMove.x - 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then + + self:T( "TransportCargoOnBoard: Onboarding CENTRAL" ) + Points[#Points+1] = routines.ground.buildWP( CarrierPos, "Cone", 10 ) + + end + self:T( "TransportCargoOnBoard: Routing " .. self.CargoGroupName ) + + --routines.scheduleFunction( routines.goRoute, { self.CargoGroupName, Points}, timer.getTime() + 4 ) + SCHEDULER:New( self, routines.goRoute, { self.CargoGroupName, Points}, 4 ) + end + + self:StatusLoading( Client ) + + return Valid + +end + + +function CARGO_GROUP:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + local CargoGroup = Group.getByName( self.CargoGroupName ) + + if not self.CargoInAir then + if routines.IsPartOfGroupInRadius( CargoGroup, Client:GetPositionVec3(), 25 ) then + CargoGroup:destroy() + self:StatusLoaded( Client ) + OnBoarded = true + end + else + CargoGroup:destroy() + self:StatusLoaded( Client ) + OnBoarded = true + end + + return OnBoarded +end + + +function CARGO_GROUP:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + + local CargoGroup = self.CargoSpawn:SpawnFromUnit( Client:GetClientGroupUnit(), 60, 30 ) + + self.CargoGroupName = CargoGroup:GetName() + self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) + + CargoGroup:TaskRouteToZone( ZONE:New( TargetZoneName ), true ) + + self:StatusUnLoaded() + + return self +end + + +CARGO_PACKAGE = { + ClassName = "CARGO_PACKAGE" +} + + +function CARGO_PACKAGE:New( CargoType, CargoName, CargoWeight, CargoClient ) local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoClient } ) + + self.CargoClient = CargoClient + + CARGOS[self.CargoName] = self + + return self + +end + + +function CARGO_PACKAGE:Spawn( Client ) + self:F( { self, Client } ) + + -- this needs to be checked thoroughly + + local CargoClientGroup = self.CargoClient:GetDCSGroup() + if not CargoClientGroup then + if not self.CargoClientSpawn then + self.CargoClientSpawn = SPAWN:New( self.CargoClient:GetClientGroupName() ):Limit( 1, 1 ) + end + self.CargoClientSpawn:ReSpawn( 1 ) + end + + local SpawnCargo = true + + if self:IsStatusNone() then + + elseif self:IsStatusLoading() or self:IsStatusLoaded() then + + local CargoClientLoaded = self:IsLoadedInClient() + if CargoClientLoaded and CargoClientLoaded:GetDCSGroup() then + SpawnCargo = false + end + + elseif self:IsStatusUnLoaded() then + + SpawnCargo = false + + else + + end + + if SpawnCargo then + self:StatusLoaded( self.CargoClient ) + end + + return self +end + + +function CARGO_PACKAGE:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + if self.CargoClient and self.CargoClient:GetDCSGroup() then + self:T( self.CargoClient.ClientName ) + self:T( 'Client Exists.' ) + + if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), Client:GetPositionVec3(), 150 ) then + Near = true + end + end + + return Near + +end + + +function CARGO_PACKAGE:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + local ClientUnit = Client:GetClientGroupDCSUnit() + + local CarrierPos = ClientUnit:getPoint() + local CarrierPosMove = ClientUnit:getPoint() + local CarrierPosOnBoard = ClientUnit:getPoint() + local CarrierPosMoveAway = ClientUnit:getPoint() + + local CargoHostGroup = self.CargoClient:GetDCSGroup() + local CargoHostName = self.CargoClient:GetDCSGroup():getName() + + local CargoHostUnits = CargoHostGroup:getUnits() + local CargoPos = CargoHostUnits[1]:getPoint() + + local Points = {} + + self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) + self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) + + Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) + + self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) + + if OnBoardSide == nil then + OnBoardSide = CLIENT.ONBOARDSIDE.NONE + end + + if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then + + self:T( "TransportCargoOnBoard: Onboarding LEFT" ) + CarrierPosMove.z = CarrierPosMove.z - 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 + CarrierPosMoveAway.z = CarrierPosMoveAway.z - 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then + + self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) + CarrierPosMove.z = CarrierPosMove.z + 25 + CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 + CarrierPosMoveAway.z = CarrierPosMoveAway.z + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then + + self:T( "TransportCargoOnBoard: Onboarding BACK" ) + CarrierPosMove.x = CarrierPosMove.x - 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x - 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then + + self:T( "TransportCargoOnBoard: Onboarding FRONT" ) + CarrierPosMove.x = CarrierPosMove.x + 25 + CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 + CarrierPosMoveAway.x = CarrierPosMoveAway.x + 20 + Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) + Points[#Points+1] = routines.ground.buildWP( CarrierPosMoveAway, "Cone", 10 ) + + end + self:T( "Routing " .. CargoHostName ) + + --routines.scheduleFunction( routines.goRoute, { CargoHostName, Points}, timer.getTime() + 4 ) + SCHEDULER:New( self, routines.goRoute, { CargoHostName, Points }, 4 ) + + return Valid + +end + + +function CARGO_PACKAGE:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + if self.CargoClient and self.CargoClient:GetDCSGroup() then + if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), self.CargoClient:GetPositionVec3(), 10 ) then + + -- Switch Cargo from self.CargoClient to Client ... Each cargo can have only one client. So assigning the new client for the cargo is enough. + self:StatusLoaded( Client ) + + -- All done, onboarded the Cargo to the new Client. + OnBoarded = true + end + end + + return OnBoarded +end + + +function CARGO_PACKAGE:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + --self:T( 'self.CargoHostName = ' .. self.CargoHostName ) + + --self.CargoSpawn:FromCarrier( Client:GetDCSGroup(), TargetZoneName, self.CargoHostName ) + self:StatusUnLoaded() + + return Cargo +end + + +CARGO_SLINGLOAD = { + ClassName = "CARGO_SLINGLOAD" +} + + +function CARGO_SLINGLOAD:New( CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID ) + local self = BASE:Inherit( self, CARGO:New( CargoType, CargoName, CargoWeight ) ) + self:F( { CargoType, CargoName, CargoWeight, CargoZone, CargoHostName, CargoCountryID } ) + + self.CargoHostName = CargoHostName + + -- Cargo will be initialized around the CargoZone position. + self.CargoZone = CargoZone + + self.CargoCount = 0 + self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) + + -- The country ID needs to be correctly set. + self.CargoCountryID = CargoCountryID + + CARGOS[self.CargoName] = self + + return self + +end + + +function CARGO_SLINGLOAD:IsLandingRequired() + self:F() + return false +end + + +function CARGO_SLINGLOAD:IsSlingLoad() + self:F() + return true +end + + +function CARGO_SLINGLOAD:Spawn( Client ) + self:F( { self, Client } ) + + local Zone = trigger.misc.getZone( self.CargoZone ) + + local ZonePos = {} + ZonePos.x = Zone.point.x + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) + ZonePos.y = Zone.point.z + math.random( Zone.radius / 2 * -1, Zone.radius / 2 ) + + self:T( "Cargo Location = " .. ZonePos.x .. ", " .. ZonePos.y ) + + --[[ + -- This does not work in 1.5.2. + CargoStatic = StaticObject.getByName( self.CargoName ) + if CargoStatic then + CargoStatic:destroy() + end + --]] + + CargoStatic = StaticObject.getByName( self.CargoStaticName ) + + if CargoStatic and CargoStatic:isExist() then + CargoStatic:destroy() + end + + -- I need to make every time a new cargo due to bugs in 1.5.2. + + self.CargoCount = self.CargoCount + 1 + self.CargoStaticName = string.format( "%s#%03d", self.CargoName, self.CargoCount ) + + local CargoTemplate = { + ["category"] = "Cargo", + ["shape_name"] = "ab-212_cargo", + ["type"] = "Cargo1", + ["x"] = ZonePos.x, + ["y"] = ZonePos.y, + ["mass"] = self.CargoWeight, + ["name"] = self.CargoStaticName, + ["canCargo"] = true, + ["heading"] = 0, + } + + coalition.addStaticObject( self.CargoCountryID, CargoTemplate ) + +-- end + + return self +end + + +function CARGO_SLINGLOAD:IsNear( Client, LandingZone ) + self:F() + + local Near = false + + return Near +end + + +function CARGO_SLINGLOAD:IsInLandingZone( Client, LandingZone ) + self:F() + + local Near = false + + local CargoStaticUnit = StaticObject.getByName( self.CargoName ) + if CargoStaticUnit then + if routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then + Near = true + end + end + + return Near +end + + +function CARGO_SLINGLOAD:OnBoard( Client, LandingZone, OnBoardSide ) + self:F() + + local Valid = true + + + return Valid +end + + +function CARGO_SLINGLOAD:OnBoarded( Client, LandingZone ) + self:F() + + local OnBoarded = false + + local CargoStaticUnit = StaticObject.getByName( self.CargoName ) + if CargoStaticUnit then + if not routines.IsStaticInZones( CargoStaticUnit, LandingZone ) then + OnBoarded = true + end + end + + return OnBoarded +end + + +function CARGO_SLINGLOAD:UnLoad( Client, TargetZoneName ) + self:F() + + self:T( 'self.CargoName = ' .. self.CargoName ) + self:T( 'self.CargoGroupName = ' .. self.CargoGroupName ) + + self:StatusUnLoaded() + + return Cargo +end +--- Message System to display Messages for Clients and Coalitions or All. +-- Messages are grouped on the display panel per Category to improve readability for the players. +-- Messages are shown on the display panel for an amount of seconds, and will then disappear. +-- Messages are identified by an ID. The messages with the same ID belonging to the same category will be overwritten if they were still being displayed on the display panel. +-- Messages are created with MESSAGE:@{New}(). +-- Messages are sent to Clients with MESSAGE:@{ToClient}(). +-- Messages are sent to Coalitions with MESSAGE:@{ToCoalition}(). +-- Messages are sent to All Players with MESSAGE:@{ToAll}(). +-- @module Message + +Include.File( "Base" ) + +--- The MESSAGE class +-- @type MESSAGE +MESSAGE = { + ClassName = "MESSAGE", + MessageCategory = 0, + MessageID = 0, +} + + +--- Creates a new MESSAGE object. Note that these MESSAGE objects are not yet displayed on the display panel. You must use the functions @{ToClient} or @{ToCoalition} or @{ToAll} to send these Messages to the respective recipients. +-- @param self +-- @param #string MessageText is the text of the Message. +-- @param #string MessageCategory is a string expressing the Category of the Message. Messages are grouped on the display panel per Category to improve readability. +-- @param #number MessageDuration is a number in seconds of how long the MESSAGE should be shown on the display panel. +-- @param #string MessageID is a string expressing the ID of the Message. +-- @return #MESSAGE +-- @usage +-- -- Create a series of new Messages. +-- -- MessageAll is meant to be sent to all players, for 25 seconds, and is classified as "Score". +-- -- MessageRED is meant to be sent to the RED players only, for 10 seconds, and is classified as "End of Mission", with ID "Win". +-- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". +-- -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score". +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ) +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) +function MESSAGE:New( MessageText, MessageCategory, MessageDuration, MessageID ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MessageText, MessageCategory, MessageDuration, MessageID } ) + + -- When no messagecategory is given, we don't show it as a title... + if MessageCategory and MessageCategory ~= "" then + self.MessageCategory = MessageCategory .. ": " + else + self.MessageCategory = "" + end + + self.MessageDuration = MessageDuration + self.MessageID = MessageID + self.MessageTime = timer.getTime() + self.MessageText = MessageText + + self.MessageSent = false + self.MessageGroup = false + self.MessageCoalition = false + + return self +end + +--- Sends a MESSAGE to a Client Group. Note that the Group needs to be defined within the ME with the skillset "Client" or "Player". +-- @param #MESSAGE self +-- @param Client#CLIENT Client is the Group of the Client. +-- @return #MESSAGE +-- @usage +-- -- Send the 2 messages created with the @{New} method to the Client Group. +-- -- Note that the Message of MessageClient2 is overwriting the Message of MessageClient1. +-- ClientGroup = Group.getByName( "ClientGroup" ) +-- +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- or +-- MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup ) +-- or +-- MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ) +-- MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ) +-- MessageClient1:ToClient( ClientGroup ) +-- MessageClient2:ToClient( ClientGroup ) +function MESSAGE:ToClient( Client ) + self:F( Client ) + + if Client and Client:GetClientGroupID() then + + local ClientGroupID = Client:GetClientGroupID() + self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) + trigger.action.outTextForGroup( ClientGroupID, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) + end + + return self +end + +--- Sends a MESSAGE to the Blue coalition. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the BLUE coalition. +-- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() +-- or +-- MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue() +-- or +-- MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageBLUE:ToBlue() +function MESSAGE:ToBlue() + self:F() + + self:ToCoalition( coalition.side.BLUE ) + + return self +end + +--- Sends a MESSAGE to the Red Coalition. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the RED coalition. +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() +-- or +-- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed() +-- or +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageRED:ToRed() +function MESSAGE:ToRed( ) + self:F() + + self:ToCoalition( coalition.side.RED ) + + return self +end + +--- Sends a MESSAGE to a Coalition. +-- @param #MESSAGE self +-- @param CoalitionSide needs to be filled out by the defined structure of the standard scripting engine @{coalition.side}. +-- @return #MESSAGE +-- @usage +-- -- Send a message created with the @{New} method to the RED coalition. +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) +-- or +-- MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED ) +-- or +-- MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ) +-- MessageRED:ToCoalition( coalition.side.RED ) +function MESSAGE:ToCoalition( CoalitionSide ) + self:F( CoalitionSide ) + + if CoalitionSide then + self:T( self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$","") .. " / " .. self.MessageDuration ) + trigger.action.outTextForCoalition( CoalitionSide, self.MessageCategory .. self.MessageText:gsub("\n$",""):gsub("\n$",""), self.MessageDuration ) + end + + return self +end + +--- Sends a MESSAGE to all players. +-- @param #MESSAGE self +-- @return #MESSAGE +-- @usage +-- -- Send a message created to all players. +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() +-- or +-- MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll() +-- or +-- MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ) +-- MessageAll:ToAll() +function MESSAGE:ToAll() + self:F() + + self:ToCoalition( coalition.side.RED ) + self:ToCoalition( coalition.side.BLUE ) + + return self +end + + + +--- The MESSAGEQUEUE class +-- @type MESSAGEQUEUE +MESSAGEQUEUE = { + ClientGroups = {}, + CoalitionSides = {} +} + +function MESSAGEQUEUE:New( RefreshInterval ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { RefreshInterval } ) + + self.RefreshInterval = RefreshInterval + + --self.DisplayFunction = routines.scheduleFunction( self._DisplayMessages, { self }, 0, RefreshInterval ) + self.DisplayFunction = SCHEDULER:New( self, self._DisplayMessages, {}, 0, RefreshInterval ) + + return self +end + +--- This function is called automatically by the MESSAGEQUEUE scheduler. +function MESSAGEQUEUE:_DisplayMessages() + + -- First we display all messages that a coalition needs to receive... Also those who are not in a client (CA module clients...). + for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do + for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do + if MessageData.MessageSent == false then + --trigger.action.outTextForCoalition( CoalitionSideID, MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageSent = true + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + end + + -- Then we send the messages for each individual client, but also to be included are those Coalition messages for the Clients who belong to a coalition. + -- Because the Client messages will overwrite the Coalition messages (for that Client). + for ClientGroupName, ClientGroupData in pairs( self.ClientGroups ) do + for MessageID, MessageData in pairs( ClientGroupData.Messages ) do + if MessageData.MessageGroup == false then + trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageGroup = true + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + + -- Now check if the Client also has messages that belong to the Coalition of the Client... + for CoalitionSideID, CoalitionSideData in pairs( self.CoalitionSides ) do + for MessageID, MessageData in pairs( CoalitionSideData.Messages ) do + local CoalitionGroup = Group.getByName( ClientGroupName ) + if CoalitionGroup and CoalitionGroup:getCoalition() == CoalitionSideID then + if MessageData.MessageCoalition == false then + trigger.action.outTextForGroup( Group.getByName(ClientGroupName):getID(), MessageData.MessageCategory .. '\n' .. MessageData.MessageText:gsub("\n$",""):gsub("\n$",""), MessageData.MessageDuration ) + MessageData.MessageCoalition = true + end + end + local MessageTimeLeft = ( MessageData.MessageTime + MessageData.MessageDuration ) - timer.getTime() + if MessageTimeLeft <= 0 then + MessageData = nil + end + end + end + end + + return true +end + +--- The _MessageQueue object is created when the MESSAGE class module is loaded. +--_MessageQueue = MESSAGEQUEUE:New( 0.5 ) + +--- Stages within a @{TASK} within a @{MISSION}. All of the STAGE functionality is considered internally administered and not to be used by any Mission designer. +-- @module STAGE +-- @author Flightcontrol + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The STAGE class +-- @type +STAGE = { + ClassName = "STAGE", + MSG = { ID = "None", TIME = 10 }, + FREQUENCY = { NONE = 0, ONCE = 1, REPEAT = -1 }, + + Name = "NoStage", + StageType = '', + WaitTime = 1, + Frequency = 1, + MessageCount = 0, + MessageInterval = 15, + MessageShown = {}, + MessageShow = false, + MessageFlash = false +} + + +function STAGE:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F() + return self +end + +function STAGE:Execute( Mission, Client, Task ) + + local Valid = true + + return Valid +end + +function STAGE:Executing( Mission, Client, Task ) + +end + +function STAGE:Validate( Mission, Client, Task ) + local Valid = true + + return Valid +end + + +STAGEBRIEF = { + ClassName = "BRIEF", + MSG = { ID = "Brief", TIME = 1 }, + Name = "Brief", + StageBriefingTime = 0, + StageBriefingDuration = 1 +} + +function STAGEBRIEF:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Execute +-- @param #STAGEBRIEF self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +-- @return #boolean +function STAGEBRIEF:Execute( Mission, Client, Task ) + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + self:F() + Client:ShowMissionBriefing( Mission.MissionBriefing ) + self.StageBriefingTime = timer.getTime() + return Valid +end + +function STAGEBRIEF:Validate( Mission, Client, Task ) + local Valid = STAGE:Validate( Mission, Client, Task ) + self:T() + + if timer.getTime() - self.StageBriefingTime <= self.StageBriefingDuration then + return 0 + else + self.StageBriefingTime = timer.getTime() + return 1 + end + +end + + +STAGESTART = { + ClassName = "START", + MSG = { ID = "Start", TIME = 1 }, + Name = "Start", + StageStartTime = 0, + StageStartDuration = 1 +} + +function STAGESTART:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGESTART:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + if Task.TaskBriefing then + Client:Message( Task.TaskBriefing, 30, Mission.Name .. "/Stage", "Command" ) + else + Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, Mission.Name .. "/Stage", "Command" ) + end + self.StageStartTime = timer.getTime() + return Valid +end + +function STAGESTART:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + if timer.getTime() - self.StageStartTime <= self.StageStartDuration then + return 0 + else + self.StageStartTime = timer.getTime() + return 1 + end + + return 1 + +end + +STAGE_CARGO_LOAD = { + ClassName = "STAGE_CARGO_LOAD" +} + +function STAGE_CARGO_LOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGE_CARGO_LOAD:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + for LoadCargoID, LoadCargo in pairs( Task.Cargos.LoadCargos ) do + LoadCargo:Load( Client ) + end + + if Mission.MissionReportFlash and Client:IsTransport() then + Client:ShowCargo() + end + + return Valid +end + +function STAGE_CARGO_LOAD:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + return 1 +end + + +STAGE_CARGO_INIT = { + ClassName = "STAGE_CARGO_INIT" +} + +function STAGE_CARGO_INIT:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGE_CARGO_INIT:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + for InitLandingZoneID, InitLandingZone in pairs( Task.LandingZones.LandingZones ) do + self:T( InitLandingZone ) + InitLandingZone:Spawn() + end + + + self:T( Task.Cargos.InitCargos ) + for InitCargoID, InitCargoData in pairs( Task.Cargos.InitCargos ) do + self:T( { InitCargoData } ) + InitCargoData:Spawn( Client ) + end + + return Valid +end + + +function STAGE_CARGO_INIT:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + return 1 +end + + + +STAGEROUTE = { + ClassName = "STAGEROUTE", + MSG = { ID = "Route", TIME = 5 }, + Frequency = STAGE.FREQUENCY.REPEAT, + Name = "Route" +} + +function STAGEROUTE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + self.MessageSwitch = true + return self +end + + +--- Execute the routing. +-- @param #STAGEROUTE self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEROUTE:Execute( Mission, Client, Task ) + self:F() + local Valid = BASE:Inherited(self):Execute( Mission, Client, Task ) + + local RouteMessage = "Fly to: " + self:T( Task.LandingZones ) + for LandingZoneID, LandingZoneName in pairs( Task.LandingZones.LandingZoneNames ) do + RouteMessage = RouteMessage .. "\n " .. LandingZoneName .. ' at ' .. routines.getBRStringZone( { zone = LandingZoneName, ref = Client:GetClientGroupDCSUnit():getPoint(), true, true } ) .. ' km.' + end + + if Client:IsMultiSeated() then + Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot", 20 ) + else + Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Command", 20 ) + end + + + if Mission.MissionReportFlash and Client:IsTransport() then + Client:ShowCargo() + end + + return Valid +end + +function STAGEROUTE:Validate( Mission, Client, Task ) + self:F() + local Valid = STAGE:Validate( Mission, Client, Task ) + + -- check if the Client is in the landing zone + self:T( Task.LandingZones.LandingZoneNames ) + Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) + + if Task.CurrentLandingZoneName then + + Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone + Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] + + if Task.CurrentCargoZone then + if not Task.Signalled then + Task.Signalled = Task.CurrentCargoZone:Signal() + end + end + + self:T( 1 ) + return 1 + end + + self:T( 0 ) + return 0 +end + + + +STAGELANDING = { + ClassName = "STAGELANDING", + MSG = { ID = "Landing", TIME = 10 }, + Name = "Landing", + Signalled = false +} + +function STAGELANDING:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Execute the landing coordination. +-- @param #STAGELANDING self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGELANDING:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( "We have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Co-Pilot", 10 ) + else + Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Command", 10 ) + end + + Task.HostUnit = Task.CurrentCargoZone:GetHostUnit() + + self:T( { Task.HostUnit } ) + + if Task.HostUnit then + + Task.HostUnitName = Task.HostUnit:GetPrefix() + Task.HostUnitTypeName = Task.HostUnit:GetTypeName() + + local HostMessage = "" + Task.CargoNames = "" + + local IsFirst = true + + for CargoID, Cargo in pairs( CARGOS ) do + if Cargo.CargoType == Task.CargoType then + + if Cargo:IsLandingRequired() then + self:T( "Task for cargo " .. Cargo.CargoType .. " requires landing.") + Task.IsLandingRequired = true + end + + if Cargo:IsSlingLoad() then + self:T( "Task for cargo " .. Cargo.CargoType .. " is a slingload.") + Task.IsSlingLoad = true + end + + if IsFirst then + IsFirst = false + Task.CargoNames = Task.CargoNames .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" + else + Task.CargoNames = Task.CargoNames .. "; " .. Cargo.CargoName .. "( " .. Cargo.CargoWeight .. " )" + end + end + end + + if Task.IsLandingRequired then + HostMessage = "Land the helicopter to " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." + else + HostMessage = "Use the Radio menu and F6 to find the cargo, then fly or land near the cargo and " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." + end + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Host, Host, 10 ) + + end +end + +function STAGELANDING:Validate( Mission, Client, Task ) + self:F() + + Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 ) + if Task.CurrentLandingZoneName then + + -- Client is in de landing zone. + self:T( Task.CurrentLandingZoneName ) + + Task.CurrentLandingZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName].CargoZone + Task.CurrentCargoZone = Task.LandingZones.LandingZones[Task.CurrentLandingZoneName] + + if Task.CurrentCargoZone then + if not Task.Signalled then + Task.Signalled = Task.CurrentCargoZone:Signal() + end + end + else + if Task.CurrentLandingZone then + Task.CurrentLandingZone = nil + end + if Task.CurrentCargoZone then + Task.CurrentCargoZone = nil + end + Task.Signalled = false + Task:RemoveCargoMenus( Client ) + self:T( -1 ) + return -1 + end + + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and not Client:GetClientGroupDCSUnit():inAir() then + self:T( 1 ) + Task.IsInAirTestRequired = true + return 1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and DCSUnitVelocity <= 0.05 and DCSUnitHeight <= Task.CurrentCargoZone.SignalHeight then + self:T( 1 ) + Task.IsInAirTestRequired = false + return 1 + end + + self:T( 0 ) + return 0 +end + +STAGELANDED = { + ClassName = "STAGELANDED", + MSG = { ID = "Land", TIME = 10 }, + Name = "Landed", + MenusAdded = false +} + +function STAGELANDED:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGELANDED:Execute( Mission, Client, Task ) + self:F() + + if Task.IsLandingRequired then + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.', + self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC" .. Host, Host ) + + if not self.MenusAdded then + Task.Cargo = nil + Task:RemoveCargoMenus( Client ) + Task:AddCargoMenus( Client, CARGOS, 250 ) + end + end +end + + + +function STAGELANDED:Validate( Mission, Client, Task ) + self:F() + + if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." ) + Task.Signalled = false + Task:RemoveCargoMenus( Client ) + self:T( -2 ) + return -2 + end + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then + self:T( "Client went back in the air. Go back to stage Landing." ) + self:T( -1 ) + return -1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then + self:T( "It seems the Client went back in the air and over the boundary limits. Go back to stage Landing." ) + self:T( -1 ) + return -1 + end + + -- Wait until cargo is selected from the menu. + if Task.IsLandingRequired then + if not Task.Cargo then + self:T( 0 ) + return 0 + end + end + + self:T( 1 ) + return 1 +end + +STAGEUNLOAD = { + ClassName = "STAGEUNLOAD", + MSG = { ID = "Unload", TIME = 10 }, + Name = "Unload" +} + +function STAGEUNLOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +--- Coordinate UnLoading +-- @param #STAGEUNLOAD self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEUNLOAD:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Co-Pilot" ) + else + Client:Message( 'You are unloading the ' .. Task.CargoType .. ' ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Command" ) + end + Task:RemoveCargoMenus( Client ) +end + +function STAGEUNLOAD:Executing( Mission, Client, Task ) + self:F() + env.info( 'STAGEUNLOAD:Executing() Task.Cargo.CargoName = ' .. Task.Cargo.CargoName ) + + local TargetZoneName + + if Task.TargetZoneName then + TargetZoneName = Task.TargetZoneName + else + TargetZoneName = Task.CurrentLandingZoneName + end + + if Task.Cargo:UnLoad( Client, TargetZoneName ) then + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + if Mission.MissionReportFlash then + Client:ShowCargo() + end + end +end + +--- Validate UnLoading +-- @param #STAGEUNLOAD self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEUNLOAD:Validate( Mission, Client, Task ) + self:F() + env.info( 'STAGEUNLOAD:Validate()' ) + + if routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + else + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task:RemoveCargoMenus( Client ) + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) + end + return 1 + end + + if not Client:GetClientGroupDCSUnit():inAir() then + else + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task:RemoveCargoMenus( Client ) + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.', + _TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" ) + end + return 1 + end + + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + if Client:IsMultiSeated() then + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Co-Pilot" ) + else + Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Command" ) + end + Task:RemoveCargoMenus( Client ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) -- We set the cargo as one more goal completed in the mission. + return 1 + end + + return 1 +end + +STAGELOAD = { + ClassName = "STAGELOAD", + MSG = { ID = "Load", TIME = 10 }, + Name = "Load" +} + +function STAGELOAD:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + +function STAGELOAD:Execute( Mission, Client, Task ) + self:F() + + if not Task.IsSlingLoad then + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', + _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Host, Host ) + + -- Route the cargo to the Carrier + + Task.Cargo:OnBoard( Client, Task.CurrentCargoZone, Task.OnBoardSide ) + Task.ExecuteStage = _TransportExecuteStage.EXECUTING + else + Task.ExecuteStage = _TransportExecuteStage.EXECUTING + end +end + +function STAGELOAD:Executing( Mission, Client, Task ) + self:F() + + -- If the Cargo is ready to be loaded, load it into the Client. + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + if not Task.IsSlingLoad then + self:T( Task.Cargo.CargoName) + + if Task.Cargo:OnBoarded( Client, Task.CurrentCargoZone ) then + + -- Load the Cargo onto the Client + Task.Cargo:Load( Client ) + + -- Message to the pilot that cargo has been loaded. + Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.", + 20, Mission.Name .. "/STAGELANDING.LOADING1." .. Host, Host ) + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + + Client:ShowCargo() + end + else + Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.", + _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Host, Host , 10 ) + for CargoID, Cargo in pairs( CARGOS ) do + self:T( "Cargo.CargoName = " .. Cargo.CargoName ) + + if Cargo:IsSlingLoad() then + local CargoStatic = StaticObject.getByName( Cargo.CargoStaticName ) + if CargoStatic then + self:T( "Cargo is found in the DCS simulator.") + local CargoStaticPosition = CargoStatic:getPosition().p + self:T( "Cargo Position x = " .. CargoStaticPosition.x .. ", y = " .. CargoStaticPosition.y .. ", z = " .. CargoStaticPosition.z ) + local CargoStaticHeight = routines.GetUnitHeight( CargoStatic ) + if CargoStaticHeight > 5 then + self:T( "Cargo is airborne.") + Cargo:StatusLoaded() + Task.Cargo = Cargo + Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.', + self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Host, Host ) + Task.ExecuteStage = _TransportExecuteStage.SUCCESS + break + end + else + self:T( "Cargo not found in the DCS simulator." ) + end + end + end + end + +end + +function STAGELOAD:Validate( Mission, Client, Task ) + self:F() + + self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName ) + + local Host = "Command" + if Task.HostUnitName then + Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" + else + if Client:IsMultiSeated() then + Host = "Co-Pilot" + end + end + + if not Task.IsSlingLoad then + if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity() + local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5 + + local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint() + local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } ) + local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight + + self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } ) + if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then + Task:RemoveCargoMenus( Client ) + Task.ExecuteStage = _TransportExecuteStage.FAILED + Task.CargoName = nil + Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host ) + self:T( -1 ) + return -1 + end + + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + Task:RemoveCargoMenus( Client ) + Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Host, Host ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) + self:T( 1 ) + return 1 + end + + else + if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then + CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName ) + if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then + Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.", + self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Host, Host ) + Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 ) + self:T( 1 ) + return 1 + end + end + + end + + + self:T( 0 ) + return 0 +end + + +STAGEDONE = { + ClassName = "STAGEDONE", + MSG = { ID = "Done", TIME = 10 }, + Name = "Done" +} + +function STAGEDONE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'AI' + return self +end + +function STAGEDONE:Execute( Mission, Client, Task ) + self:F() + +end + +function STAGEDONE:Validate( Mission, Client, Task ) + self:F() + + Task:Done() + + return 0 +end + +STAGEARRIVE = { + ClassName = "STAGEARRIVE", + MSG = { ID = "Arrive", TIME = 10 }, + Name = "Arrive" +} + +function STAGEARRIVE:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'CLIENT' + return self +end + + +--- Execute Arrival +-- @param #STAGEARRIVE self +-- @param Mission#MISSION Mission +-- @param Client#CLIENT Client +-- @param Task#TASK Task +function STAGEARRIVE:Execute( Mission, Client, Task ) + self:F() + + if Client:IsMultiSeated() then + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Co-Pilot" ) + else + Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Command" ) + end + +end + +function STAGEARRIVE:Validate( Mission, Client, Task ) + self:F() + + Task.CurrentLandingZoneID = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones ) + if ( Task.CurrentLandingZoneID ) then + else + return -1 + end + + return 1 +end + +STAGEGROUPSDESTROYED = { + ClassName = "STAGEGROUPSDESTROYED", + DestroyGroupSize = -1, + Frequency = STAGE.FREQUENCY.REPEAT, + MSG = { ID = "DestroyGroup", TIME = 10 }, + Name = "GroupsDestroyed" +} + +function STAGEGROUPSDESTROYED:New() + local self = BASE:Inherit( self, STAGE:New() ) + self:F() + self.StageType = 'AI' + return self +end + +--function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) +-- +-- Client:Message( 'Task: Still ' .. DestroyGroupSize .. " of " .. Task.DestroyGroupCount .. " " .. Task.DestroyGroupType .. " to be destroyed!", self.MSG.TIME, Mission.Name .. "/Stage" ) +-- +--end + +function STAGEGROUPSDESTROYED:Validate( Mission, Client, Task ) + self:F() + + if Task.MissionTask:IsGoalReached() then + return 1 + else + return 0 + end +end + +function STAGEGROUPSDESTROYED:Execute( Mission, Client, Task ) + self:F() + self:T( { Task.ClassName, Task.Destroyed } ) + --env.info( 'Event Table Task = ' .. tostring(Task) ) + +end + + + + + + + + + + + + + +--[[ + _TransportStage: Defines the different stages of which of transport missions can be in. This table is internal and is used to control the sequence of messages, actions and flow. + + - _TransportStage.START + - _TransportStage.ROUTE + - _TransportStage.LAND + - _TransportStage.EXECUTE + - _TransportStage.DONE + - _TransportStage.REMOVE +--]] +_TransportStage = { + HOLD = "HOLD", + START = "START", + ROUTE = "ROUTE", + LANDING = "LANDING", + LANDED = "LANDED", + EXECUTING = "EXECUTING", + LOAD = "LOAD", + UNLOAD = "UNLOAD", + DONE = "DONE", + NEXT = "NEXT" +} + +_TransportStageMsgTime = { + HOLD = 10, + START = 60, + ROUTE = 5, + LANDING = 10, + LANDED = 30, + EXECUTING = 30, + LOAD = 30, + UNLOAD = 30, + DONE = 30, + NEXT = 0 +} + +_TransportStageTime = { + HOLD = 10, + START = 5, + ROUTE = 5, + LANDING = 1, + LANDED = 1, + EXECUTING = 5, + LOAD = 5, + UNLOAD = 5, + DONE = 1, + NEXT = 0 +} + +_TransportStageAction = { + REPEAT = -1, + NONE = 0, + ONCE = 1 +} +--- The TASK Classes define major end-to-end activities within a MISSION. The TASK Class is the Master Class to orchestrate these activities. From this class, many concrete TASK classes are inherited. +-- @module TASK + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Stage" ) + +--- The TASK class +-- @type TASK +-- @extends Base#BASE +TASK = { + + -- Defines the different signal types with a Task. + SIGNAL = { + COLOR = { + RED = { ID = 1, COLOR = trigger.smokeColor.Red, TEXT = "A red" }, + GREEN = { ID = 2, COLOR = trigger.smokeColor.Green, TEXT = "A green" }, + BLUE = { ID = 3, COLOR = trigger.smokeColor.Blue, TEXT = "A blue" }, + WHITE = { ID = 4, COLOR = trigger.smokeColor.White, TEXT = "A white" }, + ORANGE = { ID = 5, COLOR = trigger.smokeColor.Orange, TEXT = "An orange" } + }, + TYPE = { + SMOKE = { ID = 1, TEXT = "smoke" }, + FLARE = { ID = 2, TEXT = "flare" } + } + }, + ClassName = "TASK", + Mission = {}, -- Owning mission of the Task + Name = '', + Stages = {}, + Stage = {}, + Cargos = { + InitCargos = {}, + LoadCargos = {} + }, + LandingZones = { + LandingZoneNames = {}, + LandingZones = {} + }, + ActiveStage = 0, + TaskDone = false, + TaskFailed = false, + GoalTasks = {} +} + +--- Instantiates a new TASK Base. Should never be used. Interface Class. +-- @return TASK +function TASK:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F() + + -- assign Task default values during construction + self.TaskBriefing = "Task: No Task." + self.Time = timer.getTime() + self.ExecuteStage = _TransportExecuteStage.NONE + + return self +end + +function TASK:SetStage( StageSequenceIncrement ) + self:F( { StageSequenceIncrement } ) + + local Valid = false + if StageSequenceIncrement ~= 0 then + self.ActiveStage = self.ActiveStage + StageSequenceIncrement + if 1 <= self.ActiveStage and self.ActiveStage <= #self.Stages then + self.Stage = self.Stages[self.ActiveStage] + self:T( { self.Stage.Name } ) + self.Frequency = self.Stage.Frequency + Valid = true + else + Valid = false + env.info( "TASK:SetStage() self.ActiveStage is smaller or larger than self.Stages array. self.ActiveStage = " .. self.ActiveStage ) + end + end + self.Time = timer.getTime() + return Valid +end + +function TASK:Init() + self:F() + self.ActiveStage = 0 + self:SetStage(1) + self.TaskDone = false + self.TaskFailed = false +end + + +--- Get progress of a TASK. +-- @return string GoalsText +function TASK:GetGoalProgress() + self:F2() + + local GoalsText = "" + for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do + local Goals = self:GetGoalCompletion( GoalVerb ) + if Goals and Goals ~= "" then + Goals = '(' .. Goals .. ')' + else + Goals = '( - )' + end + GoalsText = GoalsText .. GoalVerb .. ': ' .. self:GetGoalCount(GoalVerb) .. ' goals ' .. Goals .. ' of ' .. self:GetGoalTotal(GoalVerb) .. ' goals completed (' .. self:GetGoalPercentage(GoalVerb) .. '%); ' + end + + if GoalsText == "" then + GoalsText = "( - )" + end + + return GoalsText +end + +--- Show progress of a TASK. +-- @param MISSION Mission Group structure describing the Mission. +-- @param CLIENT Client Group structure describing the Client. +function TASK:ShowGoalProgress( Mission, Client ) + self:F2() + + local GoalsText = "" + for GoalVerb, GoalVerbData in pairs( self.GoalTasks ) do + if Mission:IsCompleted() then + else + local Goals = self:GetGoalCompletion( GoalVerb ) + if Goals and Goals ~= "" then + else + Goals = "-" + end + GoalsText = GoalsText .. self:GetGoalProgress() + end + end + + if Mission.MissionReportFlash or Mission.MissionReportShow then + Client:Message( GoalsText, 10, "/TASKPROGRESS" .. self.ClassName, "Mission Command: Task Status", 30 ) + end +end + +--- Sets a TASK to status Done. +function TASK:Done() + self:F2() + self.TaskDone = true +end + +--- Returns if a TASK is done. +-- @return bool +function TASK:IsDone() + self:F2( self.TaskDone ) + return self.TaskDone +end + +--- Sets a TASK to status failed. +function TASK:Failed() + self:F() + self.TaskFailed = true +end + +--- Returns if a TASk has failed. +-- @return bool +function TASK:IsFailed() + self:F2( self.TaskFailed ) + return self.TaskFailed +end + +function TASK:Reset( Mission, Client ) + self:F2() + self.ExecuteStage = _TransportExecuteStage.NONE +end + +--- Returns the Goals of a TASK +-- @return @table Goals +function TASK:GetGoals() + return self.GoalTasks +end + +--- Returns if a TASK has Goal(s). +-- @param #TASK self +-- @param #string GoalVerb is the name of the Goal of the TASK. +-- @return bool +function TASK:Goal( GoalVerb ) + self:F2( { GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + self:T2( {self.GoalTasks[GoalVerb] } ) + if self.GoalTasks[GoalVerb] and self.GoalTasks[GoalVerb].GoalTotal > 0 then + return true + else + return false + end +end + +--- Sets the total Goals to be achieved of the Goal Name +-- @param number GoalTotal is the number of times the GoalVerb needs to be achieved. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +function TASK:SetGoalTotal( GoalTotal, GoalVerb ) + self:F2( { GoalTotal, GoalVerb } ) + + if not GoalVerb then + GoalVerb = self.GoalVerb + end + self.GoalTasks[GoalVerb] = {} + self.GoalTasks[GoalVerb].Goals = {} + self.GoalTasks[GoalVerb].GoalTotal = GoalTotal + self.GoalTasks[GoalVerb].GoalCount = 0 + return self +end + +--- Gets the total of Goals to be achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +function TASK:GetGoalTotal( GoalVerb ) + self:F2( { GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return self.GoalTasks[GoalVerb].GoalTotal + else + return 0 + end +end + +--- Sets the total of Goals currently achieved within the TASK of the GoalVerb. +-- @param number GoalCount is the total number of Goals achieved within the TASK. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:SetGoalCount( GoalCount, GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb) then + self.GoalTasks[GoalVerb].GoalCount = GoalCount + end + return self +end + +--- Increments the total of Goals currently achieved within the TASK of the GoalVerb, with the given GoalCountIncrease. +-- @param number GoalCountIncrease is the number of new Goals achieved within the TASK. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:IncreaseGoalCount( GoalCountIncrease, GoalVerb ) + self:F2( { GoalCountIncrease, GoalVerb } ) + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb) then + self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalCountIncrease + end + return self +end + +--- Gets the total of Goals currently achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:GetGoalCount( GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return self.GoalTasks[GoalVerb].GoalCount + else + return 0 + end +end + +--- Gets the percentage of Goals currently achieved within the TASK of the GoalVerb. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return TASK +function TASK:GetGoalPercentage( GoalVerb ) + self:F2() + if not GoalVerb then + GoalVerb = self.GoalVerb + end + if self:Goal( GoalVerb ) then + return math.floor( self:GetGoalCount( GoalVerb ) / self:GetGoalTotal( GoalVerb ) * 100 + .5 ) + else + return 100 + end +end + +--- Returns if all the Goals of the TASK were achieved. +-- @return bool +function TASK:IsGoalReached() + self:F2() + + local GoalReached = true + + for GoalVerb, Goals in pairs( self.GoalTasks ) do + self:T2( { "GoalVerb", GoalVerb } ) + if self:Goal( GoalVerb ) then + local GoalToDo = self:GetGoalTotal( GoalVerb ) - self:GetGoalCount( GoalVerb ) + self:T2( "GoalToDo = " .. GoalToDo ) + if GoalToDo <= 0 then + else + GoalReached = false + break + end + else + break + end + end + + self:T( { GoalReached, self.GoalTasks } ) + return GoalReached +end + +--- Adds an Additional Goal for the TASK to be achieved. +-- @param string GoalVerb is the name of the Goal of the TASK. +-- @param string GoalTask is a text describing the Goal of the TASK to be achieved. +-- @param number GoalIncrease is a number by which the Goal achievement is increasing. +function TASK:AddGoalCompletion( GoalVerb, GoalTask, GoalIncrease ) + self:F2( { GoalVerb, GoalTask, GoalIncrease } ) + + if self:Goal( GoalVerb ) then + self.GoalTasks[GoalVerb].Goals[#self.GoalTasks[GoalVerb].Goals+1] = GoalTask + self.GoalTasks[GoalVerb].GoalCount = self.GoalTasks[GoalVerb].GoalCount + GoalIncrease + end + return self +end + +--- Returns if the additional Goal for the TASK was completed. +-- @param ?string GoalVerb is the name of the Goal of the TASK. If the GoalVerb is not given, then the default TASK Goals will be used. +-- @return string Goals +function TASK:GetGoalCompletion( GoalVerb ) + self:F2( { GoalVerb } ) + + if self:Goal( GoalVerb ) then + local Goals = "" + for GoalID, GoalName in pairs( self.GoalTasks[GoalVerb].Goals ) do Goals = Goals .. GoalName .. " + " end + return Goals:gsub(" + $", ""), self.GoalTasks[GoalVerb].GoalCount + end +end + +function TASK.MenuAction( Parameter ) + Parameter.ReferenceTask.ExecuteStage = _TransportExecuteStage.EXECUTING + Parameter.ReferenceTask.Cargo = Parameter.CargoTask +end + +function TASK:StageExecute() + self:F() + + local Execute = false + + if self.Frequency == STAGE.FREQUENCY.REPEAT then + Execute = true + elseif self.Frequency == STAGE.FREQUENCY.NONE then + Execute = false + elseif self.Frequency >= 0 then + Execute = true + self.Frequency = self.Frequency - 1 + end + + return Execute + +end + +--- Work function to set signal events within a TASK. +function TASK:AddSignal( SignalUnitNames, SignalType, SignalColor, SignalHeight ) + self:F() + + local Valid = true + + if Valid then + if type( SignalUnitNames ) == "table" then + self.LandingZoneSignalUnitNames = SignalUnitNames + else + self.LandingZoneSignalUnitNames = { SignalUnitNames } + end + self.LandingZoneSignalType = SignalType + self.LandingZoneSignalColor = SignalColor + self.Signalled = false + if SignalHeight ~= nil then + self.LandingZoneSignalHeight = SignalHeight + else + self.LandingZoneSignalHeight = 0 + end + + if self.TaskBriefing then + self.TaskBriefing = self.TaskBriefing .. " " .. SignalColor.TEXT .. " " .. SignalType.TEXT .. " will be fired when entering the landing zone." + end + end + + return Valid +end + +--- When the CLIENT is approaching the landing zone, a RED SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeRed( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.RED, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a GREEN SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeGreen( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a BLUE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeBlue( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a WHITE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeWhite( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, an ORANGE SMOKE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddSmokeOrange( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.SMOKE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a RED FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareRed( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.RED, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a GREEN FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareGreen( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.GREEN, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a BLUE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareBlue( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.BLUE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, a WHITE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareWhite( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.WHITE, SignalHeight ) +end + +--- When the CLIENT is approaching the landing zone, an ORANGE FLARE will be fired by an optional SignalUnitNames. +-- @param table|string SignalUnitNames Name of the Group that will fire the signal. If this parameter is NIL, the signal will be fired from the center of the landing zone. +-- @param number SignalHeight Altitude that the Signal should be fired... +function TASK:AddFlareOrange( SignalUnitNames, SignalHeight ) + self:F() + self:AddSignal( SignalUnitNames, TASK.SIGNAL.TYPE.FLARE, TASK.SIGNAL.COLOR.ORANGE, SignalHeight ) +end +--- A GOHOMETASK orchestrates the travel back to the home base, which is a specific zone defined within the ME. +-- @module GOHOMETASK + +Include.File("Task") + +--- The GOHOMETASK class +-- @type +GOHOMETASK = { + ClassName = "GOHOMETASK", +} + +--- Creates a new GOHOMETASK. +-- @param table{string,...}|string LandingZones Table of Landing Zone names where Home(s) are located. +-- @return GOHOMETASK +function GOHOMETASK:New( LandingZones ) + local self = BASE:Inherit( self, TASK:New() ) + self:F( { LandingZones } ) + local Valid = true + + Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) + + if Valid then + self.Name = 'Fly Home' + self.TaskBriefing = "Task: Fly back to your home base. Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to your home base." + if type( LandingZones ) == "table" then + self.LandingZones = LandingZones + else + self.LandingZones = { LandingZones } + end + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end +--- A DESTROYBASETASK will monitor the destruction of Groups and Units. This is a BASE class, other classes are derived from this class. +-- @module DESTROYBASETASK +-- @see DESTROYGROUPSTASK +-- @see DESTROYUNITTYPESTASK +-- @see DESTROY_RADARS_TASK + +Include.File("Task") + +--- The DESTROYBASETASK class +-- @type DESTROYBASETASK +DESTROYBASETASK = { + ClassName = "DESTROYBASETASK", + Destroyed = 0, + GoalVerb = "Destroy", + DestroyPercentage = 100, +} + +--- Creates a new DESTROYBASETASK. +-- @param #DESTROYBASETASK self +-- @param #string DestroyGroupType Text describing the group to be destroyed. f.e. "Radar Installations", "Ships", "Vehicles", "Command Centers". +-- @param #string DestroyUnitType Text describing the unit types to be destroyed. f.e. "SA-6", "Row Boats", "Tanks", "Tents". +-- @param #list<#string> DestroyGroupPrefixes Table of Prefixes of the Groups to be destroyed before task is completed. +-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. +-- @return DESTROYBASETASK +function DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupPrefixes, DestroyPercentage ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + self.Name = 'Destroy' + self.Destroyed = 0 + self.DestroyGroupPrefixes = DestroyGroupPrefixes + self.DestroyGroupType = DestroyGroupType + self.DestroyUnitType = DestroyUnitType + if DestroyPercentage then + self.DestroyPercentage = DestroyPercentage + end + self.TaskBriefing = "Task: Destroy " .. DestroyGroupType .. "." + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEGROUPSDESTROYED:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + + return self +end + +--- Handle the S_EVENT_DEAD events to validate the destruction of units for the task monitoring. +-- @param #DESTROYBASETASK self +-- @param Event#EVENTDATA Event structure of MOOSE. +function DESTROYBASETASK:EventDead( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + local DestroyUnit = Event.IniDCSUnit + local DestroyUnitName = Event.IniDCSUnitName + local DestroyGroup = Event.IniDCSGroup + local DestroyGroupName = Event.IniDCSGroupName + + --TODO: I need to fix here if 2 groups in the mission have a similar name with GroupPrefix equal, then i should differentiate for which group the goal was reached! + --I may need to test if for the goalverb that group goal was reached or something. Need to think about it a bit more ... + local UnitsDestroyed = 0 + for DestroyGroupPrefixID, DestroyGroupPrefix in pairs( self.DestroyGroupPrefixes ) do + self:T( DestroyGroupPrefix ) + if string.find( DestroyGroupName, DestroyGroupPrefix, 1, true ) then + self:T( BASE:Inherited(self).ClassName ) + UnitsDestroyed = self:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:T( UnitsDestroyed ) + end + end + + self:T( { UnitsDestroyed } ) + self:IncreaseGoalCount( UnitsDestroyed, self.GoalVerb ) + end + +end + +--- Validate task completeness of DESTROYBASETASK. +-- @param DestroyGroup Group structure describing the group to be evaluated. +-- @param DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYBASETASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F() + + return 0 +end +--- DESTROYGROUPSTASK +-- @module DESTROYGROUPSTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYGROUPSTASK class +-- @type +DESTROYGROUPSTASK = { + ClassName = "DESTROYGROUPSTASK", + GoalVerb = "Destroy Groups", +} + +--- Creates a new DESTROYGROUPSTASK. +-- @param #DESTROYGROUPSTASK self +-- @param #string DestroyGroupType String describing the group to be destroyed. +-- @param #string DestroyUnitType String describing the unit to be destroyed. +-- @param #list<#string> DestroyGroupNames Table of string containing the name of the groups to be destroyed before task is completed. +-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}. +---@return DESTROYGROUPSTASK +function DESTROYGROUPSTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) + local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) ) + self:F() + + self.Name = 'Destroy Groups' + self.GoalVerb = "Destroy " .. DestroyGroupType + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + _EVENTDISPATCHER:OnCrash( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param #DESTROYGROUPSTASK self +-- @param DCSGroup#Group DestroyGroup Group structure describing the group to be evaluated. +-- @param DCSUnit#Unit DestroyUnit Unit structure describing the Unit to be evaluated. +-- @return #number The DestroyCount reflecting the amount of units destroyed within the group. +function DESTROYGROUPSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit, self.DestroyPercentage } ) + + local DestroyGroupSize = DestroyGroup:getSize() - 1 -- When a DEAD event occurs, the getSize is still one larger than the destroyed unit. + local DestroyGroupInitialSize = DestroyGroup:getInitialSize() + self:T( { DestroyGroupSize, DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) } ) + + local DestroyCount = 0 + if DestroyGroup then + if DestroyGroupSize <= DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) then + DestroyCount = 1 + end + else + DestroyCount = 1 + end + + self:T( DestroyCount ) + + return DestroyCount +end +--- Task class to destroy radar installations. +-- @module DESTROYRADARSTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYRADARS class +-- @type +DESTROYRADARSTASK = { + ClassName = "DESTROYRADARSTASK", + GoalVerb = "Destroy Radars" +} + +--- Creates a new DESTROYRADARSTASK. +-- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. +-- @return DESTROYRADARSTASK +function DESTROYRADARSTASK:New( DestroyGroupNames ) + local self = BASE:Inherit( self, DESTROYGROUPSTASK:New( 'radar installations', 'radars', DestroyGroupNames ) ) + self:F() + + self.Name = 'Destroy Radars' + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param Group DestroyGroup Group structure describing the group to be evaluated. +-- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYRADARSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit } ) + + local DestroyCount = 0 + if DestroyUnit and DestroyUnit:hasSensors( Unit.SensorType.RADAR, Unit.RadarType.AS ) then + if DestroyUnit and DestroyUnit:getLife() <= 1.0 then + self:T( 'Destroyed a radar' ) + DestroyCount = 1 + end + end + return DestroyCount +end +--- Set TASK to destroy certain unit types. +-- @module DESTROYUNITTYPESTASK + +Include.File("DestroyBaseTask") + +--- The DESTROYUNITTYPESTASK class +-- @type +DESTROYUNITTYPESTASK = { + ClassName = "DESTROYUNITTYPESTASK", + GoalVerb = "Destroy", +} + +--- Creates a new DESTROYUNITTYPESTASK. +-- @param string DestroyGroupType String describing the group to be destroyed. f.e. "Radar Installations", "Fleet", "Batallion", "Command Centers". +-- @param string DestroyUnitType String describing the unit to be destroyed. f.e. "radars", "ships", "tanks", "centers". +-- @param table{string,...} DestroyGroupNames Table of string containing the group names of which the radars are be destroyed. +-- @param string DestroyUnitTypes Table of string containing the type names of the units to achieve mission success. +-- @return DESTROYUNITTYPESTASK +function DESTROYUNITTYPESTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes ) + local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames ) ) + self:F( { DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyUnitTypes } ) + + if type(DestroyUnitTypes) == 'table' then + self.DestroyUnitTypes = DestroyUnitTypes + else + self.DestroyUnitTypes = { DestroyUnitTypes } + end + + self.Name = 'Destroy Unit Types' + self.GoalVerb = "Destroy " .. DestroyGroupType + + _EVENTDISPATCHER:OnDead( self.EventDead , self ) + + return self +end + +--- Report Goal Progress. +-- @param Group DestroyGroup Group structure describing the group to be evaluated. +-- @param Unit DestroyUnit Unit structure describing the Unit to be evaluated. +function DESTROYUNITTYPESTASK:ReportGoalProgress( DestroyGroup, DestroyUnit ) + self:F( { DestroyGroup, DestroyUnit } ) + + local DestroyCount = 0 + for UnitTypeID, UnitType in pairs( self.DestroyUnitTypes ) do + if DestroyUnit and DestroyUnit:getTypeName() == UnitType then + if DestroyUnit and DestroyUnit:getLife() <= 1.0 then + DestroyCount = DestroyCount + 1 + end + end + end + return DestroyCount +end +--- A PICKUPTASK orchestrates the loading of CARGO at a specific landing zone. +-- @module PICKUPTASK +-- @parent TASK + +Include.File("Task") +Include.File("Cargo") + +--- The PICKUPTASK class +-- @type +PICKUPTASK = { + ClassName = "PICKUPTASK", + TEXT = { "Pick-Up", "picked-up", "loaded" }, + GoalVerb = "Pick-Up" +} + +--- Creates a new PICKUPTASK. +-- @param table{string,...}|string LandingZones Table of Zone names where Cargo is to be loaded. +-- @param CARGO_TYPE CargoType Type of the Cargo. The type must be of the following Enumeration:.. +-- @param number OnBoardSide Reflects from which side the cargo Group will be on-boarded on the Carrier. +function PICKUPTASK:New( CargoType, OnBoardSide ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + -- self holds the inherited instance of the PICKUPTASK Class to the BASE class. + + local Valid = true + + if Valid then + self.Name = 'Pickup Cargo' + self.TaskBriefing = "Task: Fly to the indicated landing zones and pickup " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the pickup zone." + self.CargoType = CargoType + self.GoalVerb = CargoType .. " " .. self.GoalVerb + self.OnBoardSide = OnBoardSide + self.IsLandingRequired = true -- required to decide whether the client needs to land or not + self.IsSlingLoad = false -- Indicates whether the cargo is a sling load cargo + self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGELOAD:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +function PICKUPTASK:FromZone( LandingZone ) + self:F() + + self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName + self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone + + return self +end + +function PICKUPTASK:InitCargo( InitCargos ) + self:F( { InitCargos } ) + + if type( InitCargos ) == "table" then + self.Cargos.InitCargos = InitCargos + else + self.Cargos.InitCargos = { InitCargos } + end + + return self +end + +function PICKUPTASK:LoadCargo( LoadCargos ) + self:F( { LoadCargos } ) + + if type( LoadCargos ) == "table" then + self.Cargos.LoadCargos = LoadCargos + else + self.Cargos.LoadCargos = { LoadCargos } + end + + return self +end + +function PICKUPTASK:AddCargoMenus( Client, Cargos, TransportRadius ) + self:F() + + for CargoID, Cargo in pairs( Cargos ) do + + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) + + -- If the Cargo has no status, allow the menu option. + if Cargo:IsStatusNone() or ( Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() ) then + + local MenuAdd = false + if Cargo:IsNear( Client, self.CurrentCargoZone ) then + MenuAdd = true + end + + if MenuAdd then + if Client._Menus[Cargo.CargoType] == nil then + Client._Menus[Cargo.CargoType] = {} + end + + if not Client._Menus[Cargo.CargoType].PickupMenu then + Client._Menus[Cargo.CargoType].PickupMenu = missionCommands.addSubMenuForGroup( + Client:GetClientGroupID(), + self.TEXT[1] .. " " .. Cargo.CargoType, + nil + ) + self:T( 'Added PickupMenu: ' .. self.TEXT[1] .. " " .. Cargo.CargoType ) + end + + if Client._Menus[Cargo.CargoType].PickupSubMenus == nil then + Client._Menus[Cargo.CargoType].PickupSubMenus = {} + end + + Client._Menus[Cargo.CargoType].PickupSubMenus[ #Client._Menus[Cargo.CargoType].PickupSubMenus + 1 ] = missionCommands.addCommandForGroup( + Client:GetClientGroupID(), + Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", + Client._Menus[Cargo.CargoType].PickupMenu, + self.MenuAction, + { ReferenceTask = self, CargoTask = Cargo } + ) + self:T( 'Added PickupSubMenu' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) + end + end + end + +end + +function PICKUPTASK:RemoveCargoMenus( Client ) + self:F() + + for MenuID, MenuData in pairs( Client._Menus ) do + for SubMenuID, SubMenuData in pairs( MenuData.PickupSubMenus ) do + missionCommands.removeItemForGroup( Client:GetClientGroupID(), SubMenuData ) + self:T( "Removed PickupSubMenu " ) + SubMenuData = nil + end + if MenuData.PickupMenu then + missionCommands.removeItemForGroup( Client:GetClientGroupID(), MenuData.PickupMenu ) + self:T( "Removed PickupMenu " ) + MenuData.PickupMenu = nil + end + end + + for CargoID, Cargo in pairs( CARGOS ) do + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo:IsStatusNone(), Cargo:IsStatusLoaded(), Cargo:IsStatusLoading(), Cargo:IsStatusUnLoaded() } ) + if Cargo:IsStatusLoading() and Client == Cargo:IsLoadingToClient() then + Cargo:StatusNone() + end + end + +end + + + +function PICKUPTASK:HasFailed( ClientDead ) + self:F() + + local TaskHasFailed = self.TaskFailed + return TaskHasFailed +end + +--- A DEPLOYTASK orchestrates the deployment of CARGO within a specific landing zone. +-- @module DEPLOYTASK + +Include.File( "Task" ) + +--- A DeployTask +-- @type DEPLOYTASK +DEPLOYTASK = { + ClassName = "DEPLOYTASK", + TEXT = { "Deploy", "deployed", "unloaded" }, + GoalVerb = "Deployment" +} + + +--- Creates a new DEPLOYTASK object, which models the sequence of STAGEs to unload a cargo. +-- @function [parent=#DEPLOYTASK] New +-- @param #string CargoType Type of the Cargo. +-- @return #DEPLOYTASK The created DeployTask +function DEPLOYTASK:New( CargoType ) + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + local Valid = true + + if Valid then + self.Name = 'Deploy Cargo' + self.TaskBriefing = "Fly to one of the indicated landing zones and deploy " .. CargoType .. ". Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the deployment zone." + self.CargoType = CargoType + self.GoalVerb = CargoType .. " " .. self.GoalVerb + self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGEUNLOAD:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +function DEPLOYTASK:ToZone( LandingZone ) + self:F() + + self.LandingZones.LandingZoneNames[LandingZone.CargoZoneName] = LandingZone.CargoZoneName + self.LandingZones.LandingZones[LandingZone.CargoZoneName] = LandingZone + + return self +end + + +function DEPLOYTASK:InitCargo( InitCargos ) + self:F( { InitCargos } ) + + if type( InitCargos ) == "table" then + self.Cargos.InitCargos = InitCargos + else + self.Cargos.InitCargos = { InitCargos } + end + + return self +end + + +function DEPLOYTASK:LoadCargo( LoadCargos ) + self:F( { LoadCargos } ) + + if type( LoadCargos ) == "table" then + self.Cargos.LoadCargos = LoadCargos + else + self.Cargos.LoadCargos = { LoadCargos } + end + + return self +end + + +--- When the cargo is unloaded, it will move to the target zone name. +-- @param string TargetZoneName Name of the Zone to where the Cargo should move after unloading. +function DEPLOYTASK:SetCargoTargetZoneName( TargetZoneName ) + self:F() + + local Valid = true + + Valid = routines.ValidateString( TargetZoneName, "TargetZoneName", Valid ) + + if Valid then + self.TargetZoneName = TargetZoneName + end + + return Valid + +end + +function DEPLOYTASK:AddCargoMenus( Client, Cargos, TransportRadius ) + self:F() + + local ClientGroupID = Client:GetClientGroupID() + + self:T( ClientGroupID ) + + for CargoID, Cargo in pairs( Cargos ) do + + self:T( { Cargo.ClassName, Cargo.CargoName, Cargo.CargoType, Cargo.CargoWeight } ) + + if Cargo:IsStatusLoaded() and Client == Cargo:IsLoadedInClient() then + + if Client._Menus[Cargo.CargoType] == nil then + Client._Menus[Cargo.CargoType] = {} + end + + if not Client._Menus[Cargo.CargoType].DeployMenu then + Client._Menus[Cargo.CargoType].DeployMenu = missionCommands.addSubMenuForGroup( + ClientGroupID, + self.TEXT[1] .. " " .. Cargo.CargoType, + nil + ) + self:T( 'Added DeployMenu ' .. self.TEXT[1] ) + end + + if Client._Menus[Cargo.CargoType].DeploySubMenus == nil then + Client._Menus[Cargo.CargoType].DeploySubMenus = {} + end + + if Client._Menus[Cargo.CargoType].DeployMenu == nil then + self:T( 'deploymenu is nil' ) + end + + Client._Menus[Cargo.CargoType].DeploySubMenus[ #Client._Menus[Cargo.CargoType].DeploySubMenus + 1 ] = missionCommands.addCommandForGroup( + ClientGroupID, + Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )", + Client._Menus[Cargo.CargoType].DeployMenu, + self.MenuAction, + { ReferenceTask = self, CargoTask = Cargo } + ) + self:T( 'Added DeploySubMenu ' .. Cargo.CargoType .. ":" .. Cargo.CargoName .. " ( " .. Cargo.CargoWeight .. "kg )" ) + end + end + +end + +function DEPLOYTASK:RemoveCargoMenus( Client ) + self:F() + + local ClientGroupID = Client:GetClientGroupID() + self:T( ClientGroupID ) + + for MenuID, MenuData in pairs( Client._Menus ) do + if MenuData.DeploySubMenus ~= nil then + for SubMenuID, SubMenuData in pairs( MenuData.DeploySubMenus ) do + missionCommands.removeItemForGroup( ClientGroupID, SubMenuData ) + self:T( "Removed DeploySubMenu " ) + SubMenuData = nil + end + end + if MenuData.DeployMenu then + missionCommands.removeItemForGroup( ClientGroupID, MenuData.DeployMenu ) + self:T( "Removed DeployMenu " ) + MenuData.DeployMenu = nil + end + end + +end +--- A NOTASK is a dummy activity... But it will show a Mission Briefing... +-- @module NOTASK + +Include.File("Task") + +--- The NOTASK class +-- @type +NOTASK = { + ClassName = "NOTASK", +} + +--- Creates a new NOTASK. +function NOTASK:New() + local self = BASE:Inherit( self, TASK:New() ) + self:F() + + local Valid = true + + if Valid then + self.Name = 'Nothing' + self.TaskBriefing = "Task: Execute your mission." + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end +--- A ROUTETASK orchestrates the travel to a specific zone defined within the ME. +-- @module ROUTETASK + +--- The ROUTETASK class +-- @type +ROUTETASK = { + ClassName = "ROUTETASK", + GoalVerb = "Route", +} + +--- Creates a new ROUTETASK. +-- @param table{sring,...}|string LandingZones Table of Zone Names where the target is located. +-- @param string TaskBriefing (optional) Defines a text describing the briefing of the task. +-- @return ROUTETASK +function ROUTETASK:New( LandingZones, TaskBriefing ) + local self = BASE:Inherit( self, TASK:New() ) + self:F( { LandingZones, TaskBriefing } ) + + local Valid = true + + Valid = routines.ValidateZone( LandingZones, "LandingZones", Valid ) + + if Valid then + self.Name = 'Route To Zone' + if TaskBriefing then + self.TaskBriefing = TaskBriefing .. " Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." + else + self.TaskBriefing = "Task: Fly to specified zone(s). Your co-pilot will provide you with the directions (required flight angle in degrees) and the distance (in km) to the target objective." + end + if type( LandingZones ) == "table" then + self.LandingZones = LandingZones + else + self.LandingZones = { LandingZones } + end + self.Stages = { STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGEARRIVE:New(), STAGEDONE:New() } + self.SetStage( self, 1 ) + end + + return self +end + +--- A MISSION is the main owner of a Mission orchestration within MOOSE . The Mission framework orchestrates @{CLIENT}s, @{TASK}s, @{STAGE}s etc. +-- A @{CLIENT} needs to be registered within the @{MISSION} through the function @{AddClient}. A @{TASK} needs to be registered within the @{MISSION} through the function @{AddTask}. +-- @module Mission + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The MISSION class +-- @type MISSION +-- @extends Base#BASE +-- @field #MISSION.Clients _Clients +-- @field #string MissionBriefing +MISSION = { + ClassName = "MISSION", + Name = "", + MissionStatus = "PENDING", + _Clients = {}, + _Tasks = {}, + _ActiveTasks = {}, + GoalFunction = nil, + MissionReportTrigger = 0, + MissionProgressTrigger = 0, + MissionReportShow = false, + MissionReportFlash = false, + MissionTimeInterval = 0, + MissionCoalition = "", + SUCCESS = 1, + FAILED = 2, + REPEAT = 3, + _GoalTasks = {} +} + +--- @type MISSION.Clients +-- @list + +function MISSION:Meta() + + local self = BASE:Inherit( self, BASE:New() ) + self:F() + + return self +end + +--- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. +-- @param string MissionName is the name of the mission. This name will be used to reference the status of each mission by the players. +-- @param string MissionPriority is a string indicating the "priority" of the Mission. f.e. "Primary", "Secondary" or "First", "Second". It is free format and up to the Mission designer to choose. There are no rules behind this field. +-- @param string MissionBriefing is a string indicating the mission briefing to be shown when a player joins a @{CLIENT}. +-- @param string MissionCoalition is a string indicating the coalition or party to which this mission belongs to. It is free format and can be chosen freely by the mission designer. Note that this field is not to be confused with the coalition concept of the ME. Examples of a Mission Coalition could be "NATO", "CCCP", "Intruders", "Terrorists"... +-- @return MISSION +-- @usage +-- -- Declare a few missions. +-- local Mission = MISSIONSCHEDULER.AddMission( 'Russia Transport Troops SA-6', 'Operational', 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Patriots', 'Primary', 'Our intelligence reports that 3 Patriot SAM defense batteries are located near Ruisi, Kvarhiti and Gori.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Package Delivery', 'Operational', 'In order to be in full control of the situation, we need you to deliver a very important package at a secret location. Fly undetected through the NATO defenses and deliver the secret package. The secret agent is located at waypoint 4.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue General', 'Tactical', 'Our intelligence has received a remote signal behind Gori. We believe it is a very important Russian General that was captured by Georgia. Go out there and rescue him! Ensure you stay out of the battle zone, keep south. Waypoint 4 is the location of our Russian General.', 'Russia' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'SA-6 SAMs', 'Primary', 'Our intelligence reports that 3 SA-6 SAM defense batteries are located near Didmukha, Khetagurov and Berula. Eliminate the Russian SAMs.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Sling Load', 'Operational', 'Fly to the cargo pickup zone at Dzegvi or Kaspi, and sling the cargo to Soganlug airbase.', 'NATO' ) +-- local Mission = MISSIONSCHEDULER.AddMission( 'Rescue secret agent', 'Tactical', 'In order to be in full control of the situation, we need you to rescue a secret agent from the woods behind enemy lines. Avoid the Russian defenses and rescue the agent. Keep south until Khasuri, and keep your eyes open for any SAM presence. The agent is located at waypoint 4 on your kneeboard.', 'NATO' ) +function MISSION:New( MissionName, MissionPriority, MissionBriefing, MissionCoalition ) + + self = MISSION:Meta() + self:T({ MissionName, MissionPriority, MissionBriefing, MissionCoalition }) + + local Valid = true + + Valid = routines.ValidateString( MissionName, "MissionName", Valid ) + Valid = routines.ValidateString( MissionPriority, "MissionPriority", Valid ) + Valid = routines.ValidateString( MissionBriefing, "MissionBriefing", Valid ) + Valid = routines.ValidateString( MissionCoalition, "MissionCoalition", Valid ) + + if Valid then + self.Name = MissionName + self.MissionPriority = MissionPriority + self.MissionBriefing = MissionBriefing + self.MissionCoalition = MissionCoalition + end + + return self +end + +--- Returns if a Mission has completed. +-- @return bool +function MISSION:IsCompleted() + self:F() + return self.MissionStatus == "ACCOMPLISHED" +end + +--- Set a Mission to completed. +function MISSION:Completed() + self:F() + self.MissionStatus = "ACCOMPLISHED" + self:StatusToClients() +end + +--- Returns if a Mission is ongoing. +-- treturn bool +function MISSION:IsOngoing() + self:F() + return self.MissionStatus == "ONGOING" +end + +--- Set a Mission to ongoing. +function MISSION:Ongoing() + self:F() + self.MissionStatus = "ONGOING" + --self:StatusToClients() +end + +--- Returns if a Mission is pending. +-- treturn bool +function MISSION:IsPending() + self:F() + return self.MissionStatus == "PENDING" +end + +--- Set a Mission to pending. +function MISSION:Pending() + self:F() + self.MissionStatus = "PENDING" + self:StatusToClients() +end + +--- Returns if a Mission has failed. +-- treturn bool +function MISSION:IsFailed() + self:F() + return self.MissionStatus == "FAILED" +end + +--- Set a Mission to failed. +function MISSION:Failed() + self:F() + self.MissionStatus = "FAILED" + self:StatusToClients() +end + +--- Send the status of the MISSION to all Clients. +function MISSION:StatusToClients() + self:F() + if self.MissionReportFlash then + for ClientID, Client in pairs( self._Clients ) do + Client:Message( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. '! ( ' .. self.MissionPriority .. ' mission ) ', 10, self.Name .. '/Status', "Mission Command: Mission Status") + end + end +end + +--- Handles the reporting. After certain time intervals, a MISSION report MESSAGE will be shown to All Players. +function MISSION:ReportTrigger() + self:F() + + if self.MissionReportShow == true then + self.MissionReportShow = false + return true + else + if self.MissionReportFlash == true then + if timer.getTime() >= self.MissionReportTrigger then + self.MissionReportTrigger = timer.getTime() + self.MissionTimeInterval + return true + else + return false + end + else + return false + end + end +end + +--- Report the status of all MISSIONs to all active Clients. +function MISSION:ReportToAll() + self:F() + + local AlivePlayers = '' + for ClientID, Client in pairs( self._Clients ) do + if Client:GetDCSGroup() then + if Client:GetClientGroupDCSUnit() then + if Client:GetClientGroupDCSUnit():getLife() > 0.0 then + if AlivePlayers == '' then + AlivePlayers = ' Players: ' .. Client:GetClientGroupDCSUnit():getPlayerName() + else + AlivePlayers = AlivePlayers .. ' / ' .. Client:GetClientGroupDCSUnit():getPlayerName() + end + end + end + end + end + local Tasks = self:GetTasks() + local TaskText = "" + for TaskID, TaskData in pairs( Tasks ) do + TaskText = TaskText .. " - Task " .. TaskID .. ": " .. TaskData.Name .. ": " .. TaskData:GetGoalProgress() .. "\n" + end + MESSAGE:New( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. ' ( ' .. self.MissionPriority .. ' mission )' .. AlivePlayers .. "\n" .. TaskText:gsub("\n$",""), "Mission Command: Mission Report", 10, self.Name .. '/Status'):ToAll() +end + + +--- Add a goal function to a MISSION. Goal functions are called when a @{TASK} within a mission has been completed. +-- @param function GoalFunction is the function defined by the mission designer to evaluate whether a certain goal has been reached after a @{TASK} finishes within the @{MISSION}. A GoalFunction must accept 2 parameters: Mission, Client, which contains the current MISSION object and the current CLIENT object respectively. +-- @usage +-- PatriotActivation = { +-- { "US SAM Patriot Zerti", false }, +-- { "US SAM Patriot Zegduleti", false }, +-- { "US SAM Patriot Gvleti", false } +-- } +-- +-- function DeployPatriotTroopsGoal( Mission, Client ) +-- +-- +-- -- Check if the cargo is all deployed for mission success. +-- for CargoID, CargoData in pairs( Mission._Cargos ) do +-- if Group.getByName( CargoData.CargoGroupName ) then +-- CargoGroup = Group.getByName( CargoData.CargoGroupName ) +-- if CargoGroup then +-- -- Check if the cargo is ready to activate +-- CurrentLandingZoneID = routines.IsUnitInZones( CargoGroup:getUnits()[1], Mission:GetTask( 2 ).LandingZones ) -- The second task is the Deploytask to measure mission success upon +-- if CurrentLandingZoneID then +-- if PatriotActivation[CurrentLandingZoneID][2] == false then +-- -- Now check if this is a new Mission Task to be completed... +-- trigger.action.setGroupAIOn( Group.getByName( PatriotActivation[CurrentLandingZoneID][1] ) ) +-- PatriotActivation[CurrentLandingZoneID][2] = true +-- MessageToBlue( "Mission Command: Message to all airborne units! The " .. PatriotActivation[CurrentLandingZoneID][1] .. " is armed. Our air defenses are now stronger.", 60, "BLUE/PatriotDefense" ) +-- MessageToRed( "Mission Command: Our satellite systems are detecting additional NATO air defenses. To all airborne units: Take care!!!", 60, "RED/PatriotDefense" ) +-- Mission:GetTask( 2 ):AddGoalCompletion( "Patriots activated", PatriotActivation[CurrentLandingZoneID][1], 1 ) -- Register Patriot activation as part of mission goal. +-- end +-- end +-- end +-- end +-- end +-- end +-- +-- local Mission = MISSIONSCHEDULER.AddMission( 'NATO Transport Troops', 'Operational', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.', 'NATO' ) +-- Mission:AddGoalFunction( DeployPatriotTroopsGoal ) +function MISSION:AddGoalFunction( GoalFunction ) + self:F() + self.GoalFunction = GoalFunction +end + +--- Register a new @{CLIENT} to participate within the mission. +-- @param CLIENT Client is the @{CLIENT} object. The object must have been instantiated with @{CLIENT:New}. +-- @return CLIENT +-- @usage +-- Add a number of Client objects to the Mission. +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 1', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 3', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*HOT-Deploy Troops 2', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +-- Mission:AddClient( CLIENT:FindByName( 'US UH-1H*RAMP-Deploy Troops 4', 'Transport 3 groups of air defense engineers from our barracks "Gold" and "Titan" to each patriot battery control center to activate our air defenses.' ):Transport() ) +function MISSION:AddClient( Client ) + self:F( { Client } ) + + local Valid = true + + if Valid then + self._Clients[Client.ClientName] = Client + end + + return Client +end + +--- Find a @{CLIENT} object within the @{MISSION} by its ClientName. +-- @param CLIENT ClientName is a string defining the Client Group as defined within the ME. +-- @return CLIENT +-- @usage +-- -- Seach for Client "Bomber" within the Mission. +-- local BomberClient = Mission:FindClient( "Bomber" ) +function MISSION:FindClient( ClientName ) + self:F( { self._Clients[ClientName] } ) + return self._Clients[ClientName] +end + + +--- Register a @{TASK} to be completed within the @{MISSION}. Note that there can be multiple @{TASK}s registered to be completed. Each TASK can be set a certain Goal. The MISSION will not be completed until all Goals are reached. +-- @param TASK Task is the @{TASK} object. The object must have been instantiated with @{TASK:New} or any of its inherited @{TASK}s. +-- @param number TaskNumber is the sequence number of the TASK within the MISSION. This number does have to be chronological. +-- @return TASK +-- @usage +-- -- Define a few tasks for the Mission. +-- PickupZones = { "NATO Gold Pickup Zone", "NATO Titan Pickup Zone" } +-- PickupSignalUnits = { "NATO Gold Coordination Center", "NATO Titan Coordination Center" } +-- +-- -- Assign the Pickup Task +-- local PickupTask = PICKUPTASK:New( PickupZones, CARGO_TYPE.ENGINEERS, CLIENT.ONBOARDSIDE.LEFT ) +-- PickupTask:AddSmokeBlue( PickupSignalUnits ) +-- PickupTask:SetGoalTotal( 3 ) +-- Mission:AddTask( PickupTask, 1 ) +-- +-- -- Assign the Deploy Task +-- local PatriotActivationZones = { "US Patriot Battery 1 Activation", "US Patriot Battery 2 Activation", "US Patriot Battery 3 Activation" } +-- local PatriotActivationZonesSmokeUnits = { "US SAM Patriot - Battery 1 Control", "US SAM Patriot - Battery 2 Control", "US SAM Patriot - Battery 3 Control" } +-- local DeployTask = DEPLOYTASK:New( PatriotActivationZones, CARGO_TYPE.ENGINEERS ) +-- --DeployTask:SetCargoTargetZoneName( 'US Troops Attack ' .. math.random(2) ) +-- DeployTask:AddSmokeBlue( PatriotActivationZonesSmokeUnits ) +-- DeployTask:SetGoalTotal( 3 ) +-- DeployTask:SetGoalTotal( 3, "Patriots activated" ) +-- Mission:AddTask( DeployTask, 2 ) + +function MISSION:AddTask( Task, TaskNumber ) + self:F() + + self._Tasks[TaskNumber] = Task + self._Tasks[TaskNumber]:EnableEvents() + self._Tasks[TaskNumber].ID = TaskNumber + + return Task + end + +--- Get the TASK idenified by the TaskNumber from the Mission. This function is useful in GoalFunctions. +-- @param number TaskNumber is the number of the @{TASK} within the @{MISSION}. +-- @return TASK +-- @usage +-- -- Get Task 2 from the Mission. +-- Task2 = Mission:GetTask( 2 ) + +function MISSION:GetTask( TaskNumber ) + self:F() + + local Valid = true + + local Task = nil + + if type(TaskNumber) ~= "number" then + Valid = false + end + + if Valid then + Task = self._Tasks[TaskNumber] + end + + return Task +end + +--- Get all the TASKs from the Mission. This function is useful in GoalFunctions. +-- @return {TASK,...} Structure of TASKS with the @{TASK} number as the key. +-- @usage +-- -- Get Tasks from the Mission. +-- Tasks = Mission:GetTasks() +-- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" ) +function MISSION:GetTasks() + self:F() + + return self._Tasks +end + + +--[[ + _TransportExecuteStage: Defines the different stages of Transport unload/load execution. This table is internal and is used to control the validity of Transport load/unload timing. + + - _TransportExecuteStage.EXECUTING + - _TransportExecuteStage.SUCCESS + - _TransportExecuteStage.FAILED + +--]] +_TransportExecuteStage = { + NONE = 0, + EXECUTING = 1, + SUCCESS = 2, + FAILED = 3 +} + + +--- The MISSIONSCHEDULER is an OBJECT and is the main scheduler of ALL active MISSIONs registered within this scheduler. It's workings are considered internal and is automatically created when the Mission.lua file is included. +-- @type MISSIONSCHEDULER +-- @field #MISSIONSCHEDULER.MISSIONS Missions +MISSIONSCHEDULER = { + Missions = {}, + MissionCount = 0, + TimeIntervalCount = 0, + TimeIntervalShow = 150, + TimeSeconds = 14400, + TimeShow = 5 +} + +--- @type MISSIONSCHEDULER.MISSIONS +-- @list <#MISSION> Mission + +--- This is the main MISSIONSCHEDULER Scheduler function. It is considered internal and is automatically created when the Mission.lua file is included. +function MISSIONSCHEDULER.Scheduler() + + + -- loop through the missions in the TransportTasks + for MissionName, MissionData in pairs( MISSIONSCHEDULER.Missions ) do + + local Mission = MissionData -- #MISSION + + if not Mission:IsCompleted() then + + -- This flag will monitor if for this mission, there are clients alive. If this flag is still false at the end of the loop, the mission status will be set to Pending (if not Failed or Completed). + local ClientsAlive = false + + for ClientID, ClientData in pairs( Mission._Clients ) do + + local Client = ClientData -- Client#CLIENT + + if Client:IsAlive() then + + -- There is at least one Client that is alive... So the Mission status is set to Ongoing. + ClientsAlive = true + + -- If this Client was not registered as Alive before: + -- 1. We register the Client as Alive. + -- 2. We initialize the Client Tasks and make a link to the original Mission Task. + -- 3. We initialize the Cargos. + -- 4. We flag the Mission as Ongoing. + if not Client.ClientAlive then + Client.ClientAlive = true + Client.ClientBriefingShown = false + for TaskNumber, Task in pairs( Mission._Tasks ) do + -- Note that this a deepCopy. Each client must have their own Tasks with own Stages!!! + Client._Tasks[TaskNumber] = routines.utils.deepCopy( Mission._Tasks[TaskNumber] ) + -- Each MissionTask must point to the original Mission. + Client._Tasks[TaskNumber].MissionTask = Mission._Tasks[TaskNumber] + Client._Tasks[TaskNumber].Cargos = Mission._Tasks[TaskNumber].Cargos + Client._Tasks[TaskNumber].LandingZones = Mission._Tasks[TaskNumber].LandingZones + end + + Mission:Ongoing() + end + + + -- For each Client, check for each Task the state and evolve the mission. + -- This flag will indicate if the Task of the Client is Complete. + local TaskComplete = false + + for TaskNumber, Task in pairs( Client._Tasks ) do + + if not Task.Stage then + Task:SetStage( 1 ) + end + + + local TransportTime = timer.getTime() + + if not Task:IsDone() then + + if Task:Goal() then + Task:ShowGoalProgress( Mission, Client ) + end + + --env.info( 'Scheduler: Mission = ' .. Mission.Name .. ' / Client = ' .. Client.ClientName .. ' / Task = ' .. Task.Name .. ' / Stage = ' .. Task.ActiveStage .. ' - ' .. Task.Stage.Name .. ' - ' .. Task.Stage.StageType ) + + -- Action + if Task:StageExecute() then + Task.Stage:Execute( Mission, Client, Task ) + end + + -- Wait until execution is finished + if Task.ExecuteStage == _TransportExecuteStage.EXECUTING then + Task.Stage:Executing( Mission, Client, Task ) + end + + -- Validate completion or reverse to earlier stage + if Task.Time + Task.Stage.WaitTime <= TransportTime then + Task:SetStage( Task.Stage:Validate( Mission, Client, Task ) ) + end + + if Task:IsDone() then + --env.info( 'Scheduler: Mission '.. Mission.Name .. ' Task ' .. Task.Name .. ' Stage ' .. Task.Stage.Name .. ' done. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) + TaskComplete = true -- when a task is not yet completed, a mission cannot be completed + + else + -- break only if this task is not yet done, so that future task are not yet activated. + TaskComplete = false -- when a task is not yet completed, a mission cannot be completed + --env.info( 'Scheduler: Mission "'.. Mission.Name .. '" Task "' .. Task.Name .. '" Stage "' .. Task.Stage.Name .. '" break. TaskComplete = ' .. string.format ( "%s", TaskComplete and "true" or "false" ) ) + break + end + + if TaskComplete then + + if Mission.GoalFunction ~= nil then + Mission.GoalFunction( Mission, Client ) + end + if MISSIONSCHEDULER.Scoring then + MISSIONSCHEDULER.Scoring:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) + end + +-- if not Mission:IsCompleted() then +-- end + end + end + end + + local MissionComplete = true + for TaskNumber, Task in pairs( Mission._Tasks ) do + if Task:Goal() then +-- Task:ShowGoalProgress( Mission, Client ) + if Task:IsGoalReached() then + else + MissionComplete = false + end + else + MissionComplete = false -- If there is no goal, the mission should never be ended. The goal status will be set somewhere else. + end + end + + if MissionComplete then + Mission:Completed() + if MISSIONSCHEDULER.Scoring then + MISSIONSCHEDULER.Scoring:_AddMissionScore( Mission.Name, 100 ) + end + else + if TaskComplete then + -- Reset for new tasking of active client + Client.ClientAlive = false -- Reset the client tasks. + end + end + + + else + if Client.ClientAlive then + env.info( 'Scheduler: Client "' .. Client.ClientName .. '" is inactive.' ) + Client.ClientAlive = false + + -- This is tricky. If we sanitize Client._Tasks before sanitizing Client._Tasks[TaskNumber].MissionTask, then the original MissionTask will be sanitized, and will be lost within the garbage collector. + -- So first sanitize Client._Tasks[TaskNumber].MissionTask, after that, sanitize only the whole _Tasks structure... + --Client._Tasks[TaskNumber].MissionTask = nil + --Client._Tasks = nil + end + end + end + + -- If all Clients of this Mission are not activated, then the Mission status needs to be put back into Pending status. + -- But only if the Mission was Ongoing. In case the Mission is Completed or Failed, the Mission status may not be changed. In these cases, this will be the last run of this Mission in the Scheduler. + if ClientsAlive == false then + if Mission:IsOngoing() then + -- Mission status back to pending... + Mission:Pending() + end + end + end + + Mission:StatusToClients() + + if Mission:ReportTrigger() then + Mission:ReportToAll() + end + end + + return true +end + +--- Start the MISSIONSCHEDULER. +function MISSIONSCHEDULER.Start() + if MISSIONSCHEDULER ~= nil then + --MISSIONSCHEDULER.SchedulerId = routines.scheduleFunction( MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) + MISSIONSCHEDULER.SchedulerId = SCHEDULER:New( nil, MISSIONSCHEDULER.Scheduler, { }, 0, 2 ) + end +end + +--- Stop the MISSIONSCHEDULER. +function MISSIONSCHEDULER.Stop() + if MISSIONSCHEDULER.SchedulerId then + routines.removeFunction(MISSIONSCHEDULER.SchedulerId) + MISSIONSCHEDULER.SchedulerId = nil + end +end + +--- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. +-- @param Mission is the MISSION object instantiated by @{MISSION:New}. +-- @return MISSION +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +function MISSIONSCHEDULER.AddMission( Mission ) + MISSIONSCHEDULER.Missions[Mission.Name] = Mission + MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount + 1 + -- Add an overall AI Client for the AI tasks... This AI Client will facilitate the Events in the background for each Task. + --MissionAdd:AddClient( CLIENT:Register( 'AI' ) ) + + return Mission +end + +--- Remove a MISSION from the MISSIONSCHEDULER. +-- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +-- +-- -- Now remove the Mission. +-- MISSIONSCHEDULER:RemoveMission( 'Russia Transport Troops SA-6' ) +function MISSIONSCHEDULER.RemoveMission( MissionName ) + MISSIONSCHEDULER.Missions[MissionName] = nil + MISSIONSCHEDULER.MissionCount = MISSIONSCHEDULER.MissionCount - 1 +end + +--- Find a MISSION within the MISSIONSCHEDULER. +-- @param MissionName is the name of the MISSION given at declaration using @{AddMission}. +-- @return MISSION +-- @usage +-- -- Declare a mission. +-- Mission = MISSION:New( 'Russia Transport Troops SA-6', +-- 'Operational', +-- 'Transport troops from the control center to one of the SA-6 SAM sites to activate their operation.', +-- 'Russia' ) +-- MISSIONSCHEDULER:AddMission( Mission ) +-- +-- -- Now find the Mission. +-- MissionFind = MISSIONSCHEDULER:FindMission( 'Russia Transport Troops SA-6' ) +function MISSIONSCHEDULER.FindMission( MissionName ) + return MISSIONSCHEDULER.Missions[MissionName] +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsShow( ) + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = true + Mission.MissionReportFlash = false + end +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsFlash( TimeInterval ) + local Count = 0 + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = false + Mission.MissionReportFlash = true + Mission.MissionReportTrigger = timer.getTime() + Count * TimeInterval + Mission.MissionTimeInterval = MISSIONSCHEDULER.MissionCount * TimeInterval + env.info( "TimeInterval = " .. Mission.MissionTimeInterval ) + Count = Count + 1 + end +end + +-- Internal function used by the MISSIONSCHEDULER menu. +function MISSIONSCHEDULER.ReportMissionsHide( Prm ) + for MissionName, Mission in pairs( MISSIONSCHEDULER.Missions ) do + Mission.MissionReportShow = false + Mission.MissionReportFlash = false + end +end + +--- Enables a MENU option in the communications menu under F10 to control the status of the active missions. +-- This function should be called only once when starting the MISSIONSCHEDULER. +function MISSIONSCHEDULER.ReportMenu() + local ReportMenu = SUBMENU:New( 'Status' ) + local ReportMenuShow = COMMANDMENU:New( 'Show Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsShow, 0 ) + local ReportMenuFlash = COMMANDMENU:New('Flash Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsFlash, 120 ) + local ReportMenuHide = COMMANDMENU:New( 'Hide Report Missions', ReportMenu, MISSIONSCHEDULER.ReportMissionsHide, 0 ) +end + +--- Show the remaining mission time. +function MISSIONSCHEDULER:TimeShow() + self.TimeIntervalCount = self.TimeIntervalCount + 1 + if self.TimeIntervalCount >= self.TimeTriggerShow then + local TimeMsg = string.format("%00d", ( self.TimeSeconds / 60 ) - ( timer.getTime() / 60 )) .. ' minutes left until mission reload.' + MESSAGE:New( TimeMsg, "Mission time", self.TimeShow, '/TimeMsg' ):ToAll() + self.TimeIntervalCount = 0 + end +end + +function MISSIONSCHEDULER:Time( TimeSeconds, TimeIntervalShow, TimeShow ) + + self.TimeIntervalCount = 0 + self.TimeSeconds = TimeSeconds + self.TimeIntervalShow = TimeIntervalShow + self.TimeShow = TimeShow +end + +--- Adds a mission scoring to the game. +function MISSIONSCHEDULER:Scoring( Scoring ) + + self.Scoring = Scoring +end + +--- The CLEANUP class keeps an area clean of crashing or colliding airplanes. It also prevents airplanes from firing within this area. +-- @module CleanUp +-- @author Flightcontrol + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The CLEANUP class. +-- @type CLEANUP +-- @extends Base#BASE +CLEANUP = { + ClassName = "CLEANUP", + ZoneNames = {}, + TimeInterval = 300, + CleanUpList = {}, +} + +--- Creates the main object which is handling the cleaning of the debris within the given Zone Names. +-- @param #CLEANUP self +-- @param #table ZoneNames Is a table of zone names where the debris should be cleaned. Also a single string can be passed with one zone name. +-- @param #number TimeInterval The interval in seconds when the clean activity takes place. The default is 300 seconds, thus every 5 minutes. +-- @return #CLEANUP +-- @usage +-- -- Clean these Zones. +-- CleanUpAirports = CLEANUP:New( { 'CLEAN Tbilisi', 'CLEAN Kutaisi' }, 150 ) +-- or +-- CleanUpTbilisi = CLEANUP:New( 'CLEAN Tbilisi', 150 ) +-- CleanUpKutaisi = CLEANUP:New( 'CLEAN Kutaisi', 600 ) +function CLEANUP:New( ZoneNames, TimeInterval ) local self = BASE:Inherit( self, BASE:New() ) + self:F( { ZoneNames, TimeInterval } ) + + if type( ZoneNames ) == 'table' then + self.ZoneNames = ZoneNames + else + self.ZoneNames = { ZoneNames } + end + if TimeInterval then + self.TimeInterval = TimeInterval + end + + _EVENTDISPATCHER:OnBirth( self._OnEventBirth, self ) + + --self.CleanUpScheduler = routines.scheduleFunction( self._CleanUpScheduler, { self }, timer.getTime() + 1, TimeInterval ) + self.CleanUpScheduler = SCHEDULER:New( self, self._CleanUpScheduler, {}, 1, TimeInterval ) + + return self +end + + +--- Destroys a group from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSGroup#Group GroupObject The object to be destroyed. +-- @param #string CleanUpGroupName The groupname... +function CLEANUP:_DestroyGroup( GroupObject, CleanUpGroupName ) + self:F( { GroupObject, CleanUpGroupName } ) + + if GroupObject then -- and GroupObject:isExist() then + --MESSAGE:New( "Destroy Group " .. CleanUpGroupName, CleanUpGroupName, 1, CleanUpGroupName ):ToAll() + trigger.action.deactivateGroup(GroupObject) + self:T( { "GroupObject Destroyed", GroupObject } ) + end +end + +--- Destroys a @{DCSUnit#Unit} from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSUnit#Unit CleanUpUnit The object to be destroyed. +-- @param #string CleanUpUnitName The Unit name ... +function CLEANUP:_DestroyUnit( CleanUpUnit, CleanUpUnitName ) + self:F( { CleanUpUnit, CleanUpUnitName } ) + + if CleanUpUnit then + --MESSAGE:New( "Destroy " .. CleanUpUnitName, CleanUpUnitName, 1, CleanUpUnitName ):ToAll() + local CleanUpGroup = Unit.getGroup(CleanUpUnit) + -- TODO Client bug in 1.5.3 + if CleanUpGroup and CleanUpGroup:isExist() then + local CleanUpGroupUnits = CleanUpGroup:getUnits() + if #CleanUpGroupUnits == 1 then + local CleanUpGroupName = CleanUpGroup:getName() + --self:CreateEventCrash( timer.getTime(), CleanUpUnit ) + CleanUpGroup:destroy() + self:T( { "Destroyed Group:", CleanUpGroupName } ) + else + CleanUpUnit:destroy() + self:T( { "Destroyed Unit:", CleanUpUnitName } ) + end + self.CleanUpList[CleanUpUnitName] = nil -- Cleaning from the list + CleanUpUnit = nil + end + end +end + +-- TODO check DCSTypes#Weapon +--- Destroys a missile from the simulator, but checks first if it is still existing! +-- @param #CLEANUP self +-- @param DCSTypes#Weapon MissileObject +function CLEANUP:_DestroyMissile( MissileObject ) + self:F( { MissileObject } ) + + if MissileObject and MissileObject:isExist() then + MissileObject:destroy() + self:T( "MissileObject Destroyed") + end +end + +function CLEANUP:_OnEventBirth( Event ) + self:F( { Event } ) + + self.CleanUpList[Event.IniDCSUnitName] = {} + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName + + _EVENTDISPATCHER:OnEngineShutDownForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnEngineStartUpForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnHitForUnit( Event.IniDCSUnitName, self._EventAddForCleanUp, self ) + _EVENTDISPATCHER:OnPilotDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self._EventCrash, self ) + _EVENTDISPATCHER:OnShotForUnit( Event.IniDCSUnitName, self._EventShot, self ) + + --self:AddEvent( world.event.S_EVENT_ENGINE_SHUTDOWN, self._EventAddForCleanUp ) + --self:AddEvent( world.event.S_EVENT_ENGINE_STARTUP, self._EventAddForCleanUp ) +-- self:AddEvent( world.event.S_EVENT_HIT, self._EventAddForCleanUp ) -- , self._EventHitCleanUp ) +-- self:AddEvent( world.event.S_EVENT_CRASH, self._EventCrash ) -- , self._EventHitCleanUp ) +-- --self:AddEvent( world.event.S_EVENT_DEAD, self._EventCrash ) +-- self:AddEvent( world.event.S_EVENT_SHOT, self._EventShot ) +-- +-- self:EnableEvents() + + +end + +--- Detects if a crash event occurs. +-- Crashed units go into a CleanUpList for removal. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventCrash( Event ) + self:F( { Event } ) + + --TODO: This stuff is not working due to a DCS bug. Burning units cannot be destroyed. + --MESSAGE:New( "Crash ", "Crash", 10, "Crash" ):ToAll() + -- self:T("before getGroup") + -- local _grp = Unit.getGroup(event.initiator)-- Identify the group that fired + -- self:T("after getGroup") + -- _grp:destroy() + -- self:T("after deactivateGroup") + -- event.initiator:destroy() + + self.CleanUpList[Event.IniDCSUnitName] = {} + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnit = Event.IniDCSUnit + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroup = Event.IniDCSGroup + self.CleanUpList[Event.IniDCSUnitName].CleanUpGroupName = Event.IniDCSGroupName + self.CleanUpList[Event.IniDCSUnitName].CleanUpUnitName = Event.IniDCSUnitName + +end + +--- Detects if a unit shoots a missile. +-- If this occurs within one of the zones, then the weapon used must be destroyed. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventShot( Event ) + self:F( { Event } ) + + -- Test if the missile was fired within one of the CLEANUP.ZoneNames. + local CurrentLandingZoneID = 0 + CurrentLandingZoneID = routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) + if ( CurrentLandingZoneID ) then + -- Okay, the missile was fired within the CLEANUP.ZoneNames, destroy the fired weapon. + --_SEADmissile:destroy() + --routines.scheduleFunction( CLEANUP._DestroyMissile, { self, Event.Weapon }, timer.getTime() + 0.1) + SCHEDULER:New( self, CLEANUP._DestroyMissile, { Event.Weapon }, 0.1 ) + end +end + + +--- Detects if the Unit has an S_EVENT_HIT within the given ZoneNames. If this is the case, destroy the unit. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventHitCleanUp( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then + self:T( { "Life: ", Event.IniDCSUnitName, ' = ', Event.IniDCSUnit:getLife(), "/", Event.IniDCSUnit:getLife0() } ) + if Event.IniDCSUnit:getLife() < Event.IniDCSUnit:getLife0() then + self:T( "CleanUp: Destroy: " .. Event.IniDCSUnitName ) + --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.IniDCSUnit }, timer.getTime() + 0.1) + SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.IniDCSUnit }, 0.1 ) + end + end + end + + if Event.TgtDCSUnit then + if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then + self:T( { "Life: ", Event.TgtDCSUnitName, ' = ', Event.TgtDCSUnit:getLife(), "/", Event.TgtDCSUnit:getLife0() } ) + if Event.TgtDCSUnit:getLife() < Event.TgtDCSUnit:getLife0() then + self:T( "CleanUp: Destroy: " .. Event.TgtDCSUnitName ) + --routines.scheduleFunction( CLEANUP._DestroyUnit, { self, Event.TgtDCSUnit }, timer.getTime() + 0.1 ) + SCHEDULER:New( self, CLEANUP._DestroyUnit, { Event.TgtDCSUnit }, 0.1 ) + end + end + end +end + +--- Add the @{DCSUnit#Unit} to the CleanUpList for CleanUp. +function CLEANUP:_AddForCleanUp( CleanUpUnit, CleanUpUnitName ) + self:F( { CleanUpUnit, CleanUpUnitName } ) + + self.CleanUpList[CleanUpUnitName] = {} + self.CleanUpList[CleanUpUnitName].CleanUpUnit = CleanUpUnit + self.CleanUpList[CleanUpUnitName].CleanUpUnitName = CleanUpUnitName + self.CleanUpList[CleanUpUnitName].CleanUpGroup = Unit.getGroup(CleanUpUnit) + self.CleanUpList[CleanUpUnitName].CleanUpGroupName = Unit.getGroup(CleanUpUnit):getName() + self.CleanUpList[CleanUpUnitName].CleanUpTime = timer.getTime() + self.CleanUpList[CleanUpUnitName].CleanUpMoved = false + + self:T( { "CleanUp: Add to CleanUpList: ", Unit.getGroup(CleanUpUnit):getName(), CleanUpUnitName } ) + +end + +--- Detects if the Unit has an S_EVENT_ENGINE_SHUTDOWN or an S_EVENT_HIT within the given ZoneNames. If this is the case, add the Group to the CLEANUP List. +-- @param #CLEANUP self +-- @param DCSTypes#Event event +function CLEANUP:_EventAddForCleanUp( Event ) + + if Event.IniDCSUnit then + if self.CleanUpList[Event.IniDCSUnitName] == nil then + if routines.IsUnitInZones( Event.IniDCSUnit, self.ZoneNames ) ~= nil then + self:_AddForCleanUp( Event.IniDCSUnit, Event.IniDCSUnitName ) + end + end + end + + if Event.TgtDCSUnit then + if self.CleanUpList[Event.TgtDCSUnitName] == nil then + if routines.IsUnitInZones( Event.TgtDCSUnit, self.ZoneNames ) ~= nil then + self:_AddForCleanUp( Event.TgtDCSUnit, Event.TgtDCSUnitName ) + end + end + end + +end + +local CleanUpSurfaceTypeText = { + "LAND", + "SHALLOW_WATER", + "WATER", + "ROAD", + "RUNWAY" + } + +--- At the defined time interval, CleanUp the Groups within the CleanUpList. +-- @param #CLEANUP self +function CLEANUP:_CleanUpScheduler() + self:F( { "CleanUp Scheduler" } ) + + local CleanUpCount = 0 + for CleanUpUnitName, UnitData in pairs( self.CleanUpList ) do + CleanUpCount = CleanUpCount + 1 + + self:T( { CleanUpUnitName, UnitData } ) + local CleanUpUnit = Unit.getByName(UnitData.CleanUpUnitName) + local CleanUpGroupName = UnitData.CleanUpGroupName + local CleanUpUnitName = UnitData.CleanUpUnitName + if CleanUpUnit then + self:T( { "CleanUp Scheduler", "Checking:", CleanUpUnitName } ) + if _DATABASE:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then + local CleanUpUnitVec3 = CleanUpUnit:getPoint() + --self:T( CleanUpUnitVec3 ) + local CleanUpUnitVec2 = {} + CleanUpUnitVec2.x = CleanUpUnitVec3.x + CleanUpUnitVec2.y = CleanUpUnitVec3.z + --self:T( CleanUpUnitVec2 ) + local CleanUpSurfaceType = land.getSurfaceType(CleanUpUnitVec2) + --self:T( CleanUpSurfaceType ) + --MESSAGE:New( "Surface " .. CleanUpUnitName .. " = " .. CleanUpSurfaceTypeText[CleanUpSurfaceType], CleanUpUnitName, 10, CleanUpUnitName ):ToAll() + + if CleanUpUnit and CleanUpUnit:getLife() <= CleanUpUnit:getLife0() * 0.95 then + if CleanUpSurfaceType == land.SurfaceType.RUNWAY then + if CleanUpUnit:inAir() then + local CleanUpLandHeight = land.getHeight(CleanUpUnitVec2) + local CleanUpUnitHeight = CleanUpUnitVec3.y - CleanUpLandHeight + self:T( { "CleanUp Scheduler", "Height = " .. CleanUpUnitHeight } ) + if CleanUpUnitHeight < 30 then + self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because below safe height and damaged." } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + else + self:T( { "CleanUp Scheduler", "Destroy " .. CleanUpUnitName .. " because on runway and damaged." } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + end + end + -- Clean Units which are waiting for a very long time in the CleanUpZone. + if CleanUpUnit then + local CleanUpUnitVelocity = CleanUpUnit:getVelocity() + local CleanUpUnitVelocityTotal = math.abs(CleanUpUnitVelocity.x) + math.abs(CleanUpUnitVelocity.y) + math.abs(CleanUpUnitVelocity.z) + if CleanUpUnitVelocityTotal < 1 then + if UnitData.CleanUpMoved then + if UnitData.CleanUpTime + 180 <= timer.getTime() then + self:T( { "CleanUp Scheduler", "Destroy due to not moving anymore " .. CleanUpUnitName } ) + self:_DestroyUnit(CleanUpUnit, CleanUpUnitName) + end + end + else + UnitData.CleanUpTime = timer.getTime() + UnitData.CleanUpMoved = true + --MESSAGE:New( "Moved " .. CleanUpUnitName, CleanUpUnitName, 10, CleanUpUnitName ):ToAll() + end + end + + else + -- Do nothing ... + self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE + end + else + self:T( "CleanUp: Group " .. CleanUpUnitName .. " cannot be found in DCS RTE, removing ..." ) + self.CleanUpList[CleanUpUnitName] = nil -- Not anymore in the DCSRTE + end + end + self:T(CleanUpCount) + + return true +end + +--- Dynamic spawning of groups (and units). +-- +-- @{#SPAWN} class +-- =============== +-- The @{#SPAWN} class allows to spawn dynamically new groups, based on pre-defined initialization settings, modifying the behaviour when groups are spawned. +-- For each group to be spawned, within the mission editor, a group has to be created with the "late activation flag" set. We call this group the *"Spawn Template"* of the SPAWN object. +-- A reference to this Spawn Template needs to be provided when constructing the SPAWN object, by indicating the name of the group within the mission editor in the constructor methods. +-- +-- Within the SPAWN object, there is an internal index that keeps track of which group from the internal group list was spawned. +-- When new groups get spawned by using the SPAWN functions (see below), it will be validated whether the Limits (@{#SPAWN.Limit}) of the SPAWN object are not reached. +-- When all is valid, a new group will be created by the spawning methods, and the internal index will be increased with 1. +-- +-- Regarding the name of new spawned groups, a _SpawnPrefix_ will be assigned for each new group created. +-- If you want to have the Spawn Template name to be used as the _SpawnPrefix_ name, use the @{#SPAWN.New} constructor. +-- However, when the @{#SPAWN.NewWithAlias} constructor was used, the Alias name will define the _SpawnPrefix_ name. +-- Groups will follow the following naming structure when spawned at run-time: +-- +-- 1. Spawned groups will have the name _SpawnPrefix_#ggg, where ggg is a counter from 0 to 999. +-- 2. Spawned units will have the name _SpawnPrefix_#ggg-uu, where uu is a counter from 0 to 99 for each new spawned unit belonging to the group. +-- +-- Some additional notes that need to be remembered: +-- +-- * Templates are actually groups defined within the mission editor, with the flag "Late Activation" set. As such, these groups are never used within the mission, but are used by the @{#SPAWN} module. +-- * It is important to defined BEFORE you spawn new groups, a proper initialization of the SPAWN instance is done with the options you want to use. +-- * When designing a mission, NEVER name groups using a "#" within the name of the group Spawn Template(s), or the SPAWN module logic won't work anymore. +-- +-- SPAWN construction methods: +-- =========================== +-- Create a new SPAWN object with the @{#SPAWN.New} or the @{#SPAWN.NewWithAlias} methods: +-- +-- * @{#SPAWN.New}: Creates a new SPAWN object taking the name of the group that functions as the Template. +-- +-- It is important to understand how the SPAWN class works internally. The SPAWN object created will contain internally a list of groups that will be spawned and that are already spawned. +-- The initialization functions will modify this list of groups so that when a group gets spawned, ALL information is already prepared when spawning. This is done for performance reasons. +-- So in principle, the group list will contain all parameters and configurations after initialization, and when groups get actually spawned, this spawning can be done quickly and efficient. +-- +-- SPAWN initialization methods: +-- ============================= +-- A spawn object will behave differently based on the usage of initialization methods: +-- +-- * @{#SPAWN.Limit}: Limits the amount of groups that can be alive at the same time and that can be dynamically spawned. +-- * @{#SPAWN.RandomizeRoute}: Randomize the routes of spawned groups. +-- * @{#SPAWN.RandomizeTemplate}: Randomize the group templates so that when a new group is spawned, a random group template is selected from one of the templates defined. +-- * @{#SPAWN.Uncontrolled}: Spawn plane groups uncontrolled. +-- * @{#SPAWN.Array}: Make groups visible before they are actually activated, and order these groups like a batallion in an array. +-- * @{#SPAWN.InitRepeat}: Re-spawn groups when they land at the home base. Similar functions are @{#SPAWN.InitRepeatOnLanding} and @{#SPAWN.InitRepeatOnEngineShutDown}. +-- +-- SPAWN spawning methods: +-- ======================= +-- Groups can be spawned at different times and methods: +-- +-- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index. +-- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index. +-- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively. +-- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}. +-- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}. +-- +-- Note that @{#SPAWN.Spawn} and @{#SPAWN.ReSpawn} return a @{GROUP#GROUP.New} object, that contains a reference to the DCSGroup object. +-- You can use the @{GROUP} object to do further actions with the DCSGroup. +-- +-- SPAWN object cleaning: +-- ========================= +-- Sometimes, it will occur during a mission run-time, that ground or especially air objects get damaged, and will while being damged stop their activities, while remaining alive. +-- In such cases, the SPAWN object will just sit there and wait until that group gets destroyed, but most of the time it won't, +-- and it may occur that no new groups are or can be spawned as limits are reached. +-- To prevent this, a @{#SPAWN.CleanUp} initialization method has been defined that will silently monitor the status of each spawned group. +-- Once a group has a velocity = 0, and has been waiting for a defined interval, that group will be cleaned or removed from run-time. +-- There is a catch however :-) If a damaged group has returned to an airbase within the coalition, that group will not be considered as "lost"... +-- In such a case, when the inactive group is cleaned, a new group will Re-spawned automatically. +-- This models AI that has succesfully returned to their airbase, to restart their combat activities. +-- Check the @{#SPAWN.CleanUp} for further info. +-- +-- ==== +-- @module Spawn +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Group" ) +Include.File( "Zone" ) +Include.File( "Event" ) +Include.File( "Scheduler" ) + +--- SPAWN Class +-- @type SPAWN +-- @extends Base#BASE +-- @field ClassName +-- @field #string SpawnTemplatePrefix +-- @field #string SpawnAliasPrefix +SPAWN = { + ClassName = "SPAWN", + SpawnTemplatePrefix = nil, + SpawnAliasPrefix = nil, +} + + + +--- Creates the main object to spawn a GROUP defined in the DCS ME. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. Each new group will have the name starting with SpawnTemplatePrefix. +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ) +-- @usage local Plane = SPAWN:New( "Plane" ) -- Creates a new local variable that can initiate new planes with the name "Plane#ddd" using the template "Plane" as defined within the ME. +function SPAWN:New( SpawnTemplatePrefix ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { SpawnTemplatePrefix } ) + + local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) + if TemplateGroup then + self.SpawnTemplatePrefix = SpawnTemplatePrefix + self.SpawnIndex = 0 + self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. + self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! + self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. + self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. + self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. + self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. + self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. + + self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. + else + error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) + end + + return self +end + +--- Creates a new SPAWN instance to create new groups based on the defined template and using a new alias for each new group. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix is the name of the Group in the ME that defines the Template. +-- @param #string SpawnAliasPrefix is the name that will be given to the Group at runtime. +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- Spawn_BE_KA50 = SPAWN:NewWithAlias( 'BE KA-50@RAMP-Ground Defense', 'Helicopter Attacking a City' ) +-- @usage local PlaneWithAlias = SPAWN:NewWithAlias( "Plane", "Bomber" ) -- Creates a new local variable that can instantiate new planes with the name "Bomber#ddd" using the template "Plane" as defined within the ME. +function SPAWN:NewWithAlias( SpawnTemplatePrefix, SpawnAliasPrefix ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { SpawnTemplatePrefix, SpawnAliasPrefix } ) + + local TemplateGroup = Group.getByName( SpawnTemplatePrefix ) + if TemplateGroup then + self.SpawnTemplatePrefix = SpawnTemplatePrefix + self.SpawnAliasPrefix = SpawnAliasPrefix + self.SpawnIndex = 0 + self.SpawnCount = 0 -- The internal counter of the amount of spawning the has happened since SpawnStart. + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.SpawnIsScheduled = false -- Reflects if the spawning for this SpawnTemplatePrefix is going to be scheduled or not. + self.SpawnTemplate = self._GetTemplate( self, SpawnTemplatePrefix ) -- Contains the template structure for a Group Spawn from the Mission Editor. Note that this group must have lateActivation always on!!! + self.Repeat = false -- Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning. + self.UnControlled = false -- When working in UnControlled mode, all planes are Spawned in UnControlled mode before the scheduler starts. + self.SpawnMaxUnitsAlive = 0 -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. + self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. + self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. + + self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. + else + error( "SPAWN:New: There is no group declared in the mission editor with SpawnTemplatePrefix = '" .. SpawnTemplatePrefix .. "'" ) + end + + return self +end + + +--- Limits the Maximum amount of Units that can be alive at the same time, and the maximum amount of groups that can be spawned. +-- Note that this method is exceptionally important to balance the performance of the mission. Depending on the machine etc, a mission can only process a maximum amount of units. +-- If the time interval must be short, but there should not be more Units or Groups alive than a maximum amount of units, then this function should be used... +-- When a @{#SPAWN.New} is executed and the limit of the amount of units alive is reached, then no new spawn will happen of the group, until some of these units of the spawn object will be destroyed. +-- @param #SPAWN self +-- @param #number SpawnMaxUnitsAlive The maximum amount of units that can be alive at runtime. +-- @param #number SpawnMaxGroups The maximum amount of groups that can be spawned. When the limit is reached, then no more actual spawns will happen of the group. +-- This parameter is useful to define a maximum amount of airplanes, ground troops, helicopters, ships etc within a supply area. +-- This parameter accepts the value 0, which defines that there are no maximum group limits, but there are limits on the maximum of units that can be alive at the same time. +-- @return #SPAWN self +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- This helicopter group consists of one Unit. So, this group will SPAWN maximum 2 groups simultaneously within the DCSRTE. +-- -- There will be maximum 24 groups spawned during the whole mission lifetime. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Limit( 2, 24 ) +function SPAWN:Limit( SpawnMaxUnitsAlive, SpawnMaxGroups ) + self:F( { self.SpawnTemplatePrefix, SpawnMaxUnitsAlive, SpawnMaxGroups } ) + + self.SpawnMaxUnitsAlive = SpawnMaxUnitsAlive -- The maximum amount of groups that can be alive of SpawnTemplatePrefix at the same time. + self.SpawnMaxGroups = SpawnMaxGroups -- The maximum amount of groups that can be spawned. + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:_InitializeSpawnGroups( SpawnGroupID ) + end + + return self +end + + +--- Randomizes the defined route of the SpawnTemplatePrefix group in the ME. This is very useful to define extra variation of the behaviour of groups. +-- @param #SPAWN self +-- @param #number SpawnStartPoint is the waypoint where the randomization begins. +-- Note that the StartPoint = 0 equaling the point where the group is spawned. +-- @param #number SpawnEndPoint is the waypoint where the randomization ends counting backwards. +-- This parameter is useful to avoid randomization to end at a waypoint earlier than the last waypoint on the route. +-- @param #number SpawnRadius is the radius in meters in which the randomization of the new waypoints, with the original waypoint of the original template located in the middle ... +-- @return #SPAWN +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- The KA-50 has waypoints Start point ( =0 or SP ), 1, 2, 3, 4, End point (= 5 or DP). +-- -- Waypoints 2 and 3 will only be randomized. The others will remain on their original position with each new spawn of the helicopter. +-- -- The randomization of waypoint 2 and 3 will take place within a radius of 2000 meters. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):RandomizeRoute( 2, 2, 2000 ) +function SPAWN:RandomizeRoute( SpawnStartPoint, SpawnEndPoint, SpawnRadius ) + self:F( { self.SpawnTemplatePrefix, SpawnStartPoint, SpawnEndPoint, SpawnRadius } ) + + self.SpawnRandomizeRoute = true + self.SpawnRandomizeRouteStartPoint = SpawnStartPoint + self.SpawnRandomizeRouteEndPoint = SpawnEndPoint + self.SpawnRandomizeRouteRadius = SpawnRadius + + for GroupID = 1, self.SpawnMaxGroups do + self:_RandomizeRoute( GroupID ) + end + + return self +end + + +--- This function is rather complicated to understand. But I'll try to explain. +-- This function becomes useful when you need to spawn groups with random templates of groups defined within the mission editor, +-- but they will all follow the same Template route and have the same prefix name. +-- In other words, this method randomizes between a defined set of groups the template to be used for each new spawn of a group. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefixTable A table with the names of the groups defined within the mission editor, from which one will be choosen when a new group will be spawned. +-- @return #SPAWN +-- @usage +-- -- NATO Tank Platoons invading Gori. +-- -- Choose between 13 different 'US Tank Platoon' configurations for each new SPAWN the Group to be spawned for the +-- -- 'US Tank Platoon Left', 'US Tank Platoon Middle' and 'US Tank Platoon Right' SpawnTemplatePrefixes. +-- -- Each new SPAWN will randomize the route, with a defined time interval of 200 seconds with 40% time variation (randomization) and +-- -- with a limit set of maximum 12 Units alive simulteneously and 150 Groups to be spawned during the whole mission. +-- Spawn_US_Platoon = { 'US Tank Platoon 1', 'US Tank Platoon 2', 'US Tank Platoon 3', 'US Tank Platoon 4', 'US Tank Platoon 5', +-- 'US Tank Platoon 6', 'US Tank Platoon 7', 'US Tank Platoon 8', 'US Tank Platoon 9', 'US Tank Platoon 10', +-- 'US Tank Platoon 11', 'US Tank Platoon 12', 'US Tank Platoon 13' } +-- Spawn_US_Platoon_Left = SPAWN:New( 'US Tank Platoon Left' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +-- Spawn_US_Platoon_Middle = SPAWN:New( 'US Tank Platoon Middle' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +-- Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):Limit( 12, 150 ):Schedule( 200, 0.4 ):RandomizeTemplate( Spawn_US_Platoon ):RandomizeRoute( 3, 3, 2000 ) +function SPAWN:RandomizeTemplate( SpawnTemplatePrefixTable ) + self:F( { self.SpawnTemplatePrefix, SpawnTemplatePrefixTable } ) + + self.SpawnTemplatePrefixTable = SpawnTemplatePrefixTable + self.SpawnRandomizeTemplate = true + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:_RandomizeTemplate( SpawnGroupID ) + end + + return self +end + + + + + +--- For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment. +-- This function is used to re-spawn automatically (so no extra call is needed anymore) the same group after it has landed. +-- This will enable a spawned group to be re-spawned after it lands, until it is destroyed... +-- Note: When the group is respawned, it will re-spawn from the original airbase where it took off. +-- So ensure that the routes for groups that respawn, always return to the original airbase, or players may get confused ... +-- @param #SPAWN self +-- @return #SPAWN self +-- @usage +-- -- RU Su-34 - AI Ship Attack +-- -- Re-SPAWN the Group(s) after each landing and Engine Shut-Down automatically. +-- SpawnRU_SU34 = SPAWN:New( 'TF1 RU Su-34 Krymsk@AI - Attack Ships' ):Schedule( 2, 3, 1800, 0.4 ):SpawnUncontrolled():RandomizeRoute( 1, 1, 3000 ):RepeatOnEngineShutDown() +function SPAWN:InitRepeat() + self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) + + self.Repeat = true + self.RepeatOnEngineShutDown = false + self.RepeatOnLanding = true + + return self +end + +--- Respawn group after landing. +-- @param #SPAWN self +-- @return #SPAWN self +function SPAWN:InitRepeatOnLanding() + self:F( { self.SpawnTemplatePrefix } ) + + self:InitRepeat() + self.RepeatOnEngineShutDown = false + self.RepeatOnLanding = true + + return self +end + + +--- Respawn after landing when its engines have shut down. +-- @param #SPAWN self +-- @return #SPAWN self +function SPAWN:InitRepeatOnEngineShutDown() + self:F( { self.SpawnTemplatePrefix } ) + + self:InitRepeat() + self.RepeatOnEngineShutDown = true + self.RepeatOnLanding = false + + return self +end + + +--- CleanUp groups when they are still alive, but inactive. +-- When groups are still alive and have become inactive due to damage and are unable to contribute anything, then this group will be removed at defined intervals in seconds. +-- @param #SPAWN self +-- @param #string SpawnCleanUpInterval The interval to check for inactive groups within seconds. +-- @return #SPAWN self +-- @usage Spawn_Helicopter:CleanUp( 20 ) -- CleanUp the spawning of the helicopters every 20 seconds when they become inactive. +function SPAWN:CleanUp( SpawnCleanUpInterval ) + self:F( { self.SpawnTemplatePrefix, SpawnCleanUpInterval } ) + + self.SpawnCleanUpInterval = SpawnCleanUpInterval + self.SpawnCleanUpTimeStamps = {} + --self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval ) + self.CleanUpScheduler = SCHEDULER:New( self, self._SpawnCleanUpScheduler, {}, 1, SpawnCleanUpInterval, 0.2 ) + return self +end + + + +--- Makes the groups visible before start (like a batallion). +-- The method will take the position of the group as the first position in the array. +-- @param #SPAWN self +-- @param #number SpawnAngle The angle in degrees how the groups and each unit of the group will be positioned. +-- @param #number SpawnWidth The amount of Groups that will be positioned on the X axis. +-- @param #number SpawnDeltaX The space between each Group on the X-axis. +-- @param #number SpawnDeltaY The space between each Group on the Y-axis. +-- @return #SPAWN self +-- @usage +-- -- Define an array of Groups. +-- Spawn_BE_Ground = SPAWN:New( 'BE Ground' ):Limit( 2, 24 ):Visible( 90, "Diamond", 10, 100, 50 ) +function SPAWN:Array( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) + self:F( { self.SpawnTemplatePrefix, SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY } ) + + self.SpawnVisible = true -- When the first Spawn executes, all the Groups need to be made visible before start. + + local SpawnX = 0 + local SpawnY = 0 + local SpawnXIndex = 0 + local SpawnYIndex = 0 + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self:T( { SpawnX, SpawnY, SpawnXIndex, SpawnYIndex } ) + + self.SpawnGroups[SpawnGroupID].Visible = true + self.SpawnGroups[SpawnGroupID].Spawned = false + + SpawnXIndex = SpawnXIndex + 1 + if SpawnWidth and SpawnWidth ~= 0 then + if SpawnXIndex >= SpawnWidth then + SpawnXIndex = 0 + SpawnYIndex = SpawnYIndex + 1 + end + end + + local SpawnRootX = self.SpawnGroups[SpawnGroupID].SpawnTemplate.x + local SpawnRootY = self.SpawnGroups[SpawnGroupID].SpawnTemplate.y + + self:_TranslateRotate( SpawnGroupID, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) + + self.SpawnGroups[SpawnGroupID].SpawnTemplate.lateActivation = true + self.SpawnGroups[SpawnGroupID].SpawnTemplate.visible = true + + self.SpawnGroups[SpawnGroupID].Visible = true + + _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnBirth, self ) + _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnDeadOrCrash, self ) + + if self.Repeat then + _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnTakeOff, self ) + _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnLand, self ) + end + if self.RepeatOnEngineShutDown then + _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnEngineShutDown, self ) + end + + self.SpawnGroups[SpawnGroupID].Group = _DATABASE:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) + + SpawnX = SpawnXIndex * SpawnDeltaX + SpawnY = SpawnYIndex * SpawnDeltaY + end + + return self +end + + + +--- Will spawn a group based on the internal index. +-- Note: Uses @{DATABASE} module defined in MOOSE. +-- @param #SPAWN self +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:Spawn() + self:F( { self.SpawnTemplatePrefix, self.SpawnIndex } ) + + return self:SpawnWithIndex( self.SpawnIndex + 1 ) +end + +--- Will re-spawn a group based on a given index. +-- Note: Uses @{DATABASE} module defined in MOOSE. +-- @param #SPAWN self +-- @param #string SpawnIndex The index of the group to be spawned. +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:ReSpawn( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + if not SpawnIndex then + SpawnIndex = 1 + end + +-- TODO: This logic makes DCS crash and i don't know why (yet). + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup then + local SpawnDCSGroup = SpawnGroup:GetDCSGroup() + if SpawnDCSGroup then + SpawnGroup:Destroy() + end + end + + return self:SpawnWithIndex( SpawnIndex ) +end + +--- Will spawn a group with a specified index number. +-- Uses @{DATABASE} global object defined in MOOSE. +-- @param #SPAWN self +-- @return Group#GROUP The group that was spawned. You can use this group for further actions. +function SPAWN:SpawnWithIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups } ) + + if self:_GetSpawnIndex( SpawnIndex ) then + + if self.SpawnGroups[self.SpawnIndex].Visible then + self.SpawnGroups[self.SpawnIndex].Group:Activate() + else + self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + _EVENTDISPATCHER:OnBirthForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnBirth, self ) + _EVENTDISPATCHER:OnCrashForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnDeadOrCrash, self ) + + if self.Repeat then + _EVENTDISPATCHER:OnTakeOffForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnTakeOff, self ) + _EVENTDISPATCHER:OnLandForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnLand, self ) + end + if self.RepeatOnEngineShutDown then + _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) + end + + self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + + self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + + -- If there is a SpawnFunction hook defined, call it. + if self.SpawnFunctionHook then + self.SpawnFunctionHook( self.SpawnGroups[self.SpawnIndex].Group, unpack( self.SpawnFunctionArguments ) ) + end + -- TODO: Need to fix this by putting an "R" in the name of the group when the group repeats. + --if self.Repeat then + -- _DATABASE:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) + --end + end + + self.SpawnGroups[self.SpawnIndex].Spawned = true + return self.SpawnGroups[self.SpawnIndex].Group + else + --self:E( { self.SpawnTemplatePrefix, "No more Groups to Spawn:", SpawnIndex, self.SpawnMaxGroups } ) + end + + return nil +end + +--- Spawns new groups at varying time intervals. +-- This is useful if you want to have continuity within your missions of certain (AI) groups to be present (alive) within your missions. +-- @param #SPAWN self +-- @param #number SpawnTime The time interval defined in seconds between each new spawn of new groups. +-- @param #number SpawnTimeVariation The variation to be applied on the defined time interval between each new spawn. +-- The variation is a number between 0 and 1, representing the %-tage of variation to be applied on the time interval. +-- @return #SPAWN self +-- @usage +-- -- NATO helicopters engaging in the battle field. +-- -- The time interval is set to SPAWN new helicopters between each 600 seconds, with a time variation of 50%. +-- -- The time variation in this case will be between 450 seconds and 750 seconds. +-- -- This is calculated as follows: +-- -- Low limit: 600 * ( 1 - 0.5 / 2 ) = 450 +-- -- High limit: 600 * ( 1 + 0.5 / 2 ) = 750 +-- -- Between these two values, a random amount of seconds will be choosen for each new spawn of the helicopters. +-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) +function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation ) + self:F( { SpawnTime, SpawnTimeVariation } ) + + if SpawnTime ~= nil and SpawnTimeVariation ~= nil then + self.SpawnScheduler = SCHEDULER:New( self, self._Scheduler, {}, 1, SpawnTime, SpawnTimeVariation ) + end + + return self +end + +--- Will re-start the spawning scheduler. +-- Note: This function is only required to be called when the schedule was stopped. +function SPAWN:SpawnScheduleStart() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnScheduler:Start() +end + +--- Will stop the scheduled spawning scheduler. +function SPAWN:SpawnScheduleStop() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnScheduler:Stop() +end + + +--- Allows to place a CallFunction hook when a new group spawns. +-- The provided function will be called when a new group is spawned, including its given parameters. +-- The first parameter of the SpawnFunction is the @{Group#GROUP} that was spawned. +-- @param #SPAWN self +-- @param #function SpawnFunctionHook The function to be called when a group spawns. +-- @param SpawnFunctionArguments A random amount of arguments to be provided to the function when the group spawns. +-- @return #SPAWN +function SPAWN:SpawnFunction( SpawnFunctionHook, ... ) + self:F( SpawnFunction ) + + self.SpawnFunctionHook = SpawnFunctionHook + self.SpawnFunctionArguments = {} + if arg then + self.SpawnFunctionArguments = arg + end + + return self +end + + + + +--- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone. +-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. +-- You can use the returned group to further define the route to be followed. +-- @param #SPAWN self +-- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group. +-- @param #number OuterRadius The outer radius in meters where the new group will be spawned. +-- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned. +-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. +-- @return Group#GROUP that was spawned. +-- @return #nil Nothing was spawned. +function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } ) + + if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then + + if SpawnIndex then + else + SpawnIndex = self.SpawnIndex + 1 + end + + if self:_GetSpawnIndex( SpawnIndex ) then + + local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate + + if SpawnTemplate then + + local UnitPoint = HostUnit:GetPointVec2() + + self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } ) + + --for PointID, Point in pairs( SpawnTemplate.route.points ) do + --Point.x = UnitPoint.x + --Point.y = UnitPoint.y + --Point.alt = nil + --Point.alt_type = nil + --end + + SpawnTemplate.route.points[1].x = UnitPoint.x + SpawnTemplate.route.points[1].y = UnitPoint.y + + if not InnerRadius then + InnerRadius = 10 + end + + if not OuterRadius then + OuterRadius = 50 + end + + -- Apply SpawnFormation + for UnitID = 1, #SpawnTemplate.units do + if InnerRadius == 0 then + SpawnTemplate.units[UnitID].x = UnitPoint.x + SpawnTemplate.units[UnitID].y = UnitPoint.y + else + local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) + SpawnTemplate.units[UnitID].x = CirclePos.x + SpawnTemplate.units[UnitID].y = CirclePos.y + end + self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) + end + + local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius ) + local Point = {} + Point.type = "Turning Point" + Point.x = SpawnPos.x + Point.y = SpawnPos.y + Point.action = "Cone" + Point.speed = 5 + + table.insert( SpawnTemplate.route.points, 2, Point ) + + return self:SpawnWithIndex( self.SpawnIndex ) + end + end + end + + return nil +end + +--- Will spawn a Group within a given @{Zone#ZONE}. +-- Once the group is spawned within the zone, it will continue on its route. +-- The first waypoint (where the group is spawned) is replaced with the zone coordinates. +-- @param #SPAWN self +-- @param Zone#ZONE Zone The zone where the group is to be spawned. +-- @param #number ZoneRandomize (Optional) Set to true if you want to randomize the starting point in the zone. +-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone. +-- @return Group#GROUP that was spawned. +-- @return #nil when nothing was spawned. +function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } ) + + if Zone then + + if SpawnIndex then + else + SpawnIndex = self.SpawnIndex + 1 + end + + if self:_GetSpawnIndex( SpawnIndex ) then + + local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate + + if SpawnTemplate then + + local ZonePoint + + if ZoneRandomize == true then + ZonePoint = Zone:GetRandomPointVec2() + else + ZonePoint = Zone:GetPointVec2() + end + + SpawnTemplate.route.points[1].x = ZonePoint.x + SpawnTemplate.route.points[1].y = ZonePoint.y + + -- Apply SpawnFormation + for UnitID = 1, #SpawnTemplate.units do + local ZonePointUnit = Zone:GetRandomPointVec2() + SpawnTemplate.units[UnitID].x = ZonePointUnit.x + SpawnTemplate.units[UnitID].y = ZonePointUnit.y + self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) + end + + return self:SpawnWithIndex( self.SpawnIndex ) + end + end + end + + return nil +end + + + + +--- Will spawn a plane group in uncontrolled mode... +-- This will be similar to the uncontrolled flag setting in the ME. +-- @return #SPAWN self +function SPAWN:UnControlled() + self:F( { self.SpawnTemplatePrefix } ) + + self.SpawnUnControlled = true + + for SpawnGroupID = 1, self.SpawnMaxGroups do + self.SpawnGroups[SpawnGroupID].UnControlled = true + end + + return self +end + + + +--- Will return the SpawnGroupName either with with a specific count number or without any count. +-- @param #SPAWN self +-- @param #number SpawnIndex Is the number of the Group that is to be spawned. +-- @return #string SpawnGroupName +function SPAWN:SpawnGroupName( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + local SpawnPrefix = self.SpawnTemplatePrefix + if self.SpawnAliasPrefix then + SpawnPrefix = self.SpawnAliasPrefix + end + + if SpawnIndex then + local SpawnName = string.format( '%s#%03d', SpawnPrefix, SpawnIndex ) + self:T( SpawnName ) + return SpawnName + else + self:T( SpawnPrefix ) + return SpawnPrefix + end + +end + +--- Find the first alive group. +-- @param #SPAWN self +-- @param #number SpawnCursor A number holding the index from where to find the first group from. +-- @return Group#GROUP, #number The group found, the new index where the group was found. +-- @return #nil, #nil When no group is found, #nil is returned. +function SPAWN:GetFirstAliveGroup( SpawnCursor ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) + + for SpawnIndex = 1, self.SpawnCount do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + SpawnCursor = SpawnIndex + return SpawnGroup, SpawnCursor + end + end + + return nil, nil +end + + +--- Find the next alive group. +-- @param #SPAWN self +-- @param #number SpawnCursor A number holding the last found previous index. +-- @return Group#GROUP, #number The group found, the new index where the group was found. +-- @return #nil, #nil When no group is found, #nil is returned. +function SPAWN:GetNextAliveGroup( SpawnCursor ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnCursor } ) + + SpawnCursor = SpawnCursor + 1 + for SpawnIndex = SpawnCursor, self.SpawnCount do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + SpawnCursor = SpawnIndex + return SpawnGroup, SpawnCursor + end + end + + return nil, nil +end + +--- Find the last alive group during runtime. +function SPAWN:GetLastAliveGroup() + self:F( { self.SpawnTemplatePrefixself.SpawnAliasPrefix } ) + + self.SpawnIndex = self:_GetLastIndex() + for SpawnIndex = self.SpawnIndex, 1, -1 do + local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) + if SpawnGroup and SpawnGroup:IsAlive() then + self.SpawnIndex = SpawnIndex + return SpawnGroup + end + end + + self.SpawnIndex = nil + return nil +end + + + +--- Get the group from an index. +-- Returns the group from the SpawnGroups list. +-- If no index is given, it will return the first group in the list. +-- @param #SPAWN self +-- @param #number SpawnIndex The index of the group to return. +-- @return Group#GROUP +function SPAWN:GetGroupFromIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) + + if not SpawnIndex then + SpawnIndex = 1 + end + + if self.SpawnGroups and self.SpawnGroups[SpawnIndex] then + local SpawnGroup = self.SpawnGroups[SpawnIndex].Group + return SpawnGroup + else + return nil + end +end + +--- Get the group index from a DCSUnit. +-- The method will search for a #-mark, and will return the index behind the #-mark of the DCSUnit. +-- It will return nil of no prefix was found. +-- @param #SPAWN self +-- @param DCSUnit The DCS unit to be searched. +-- @return #string The prefix +-- @return #nil Nothing found +function SPAWN:_GetGroupIndexFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit and DCSUnit:getName() then + local IndexString = string.match( DCSUnit:getName(), "#.*-" ):sub( 2, -2 ) + self:T( IndexString ) + + if IndexString then + local Index = tonumber( IndexString ) + self:T( { "Index:", IndexString, Index } ) + return Index + end + end + + return nil +end + +--- Return the prefix of a DCSUnit. +-- The method will search for a #-mark, and will return the text before the #-mark. +-- It will return nil of no prefix was found. +-- @param #SPAWN self +-- @param DCSUnit The DCS unit to be searched. +-- @return #string The prefix +-- @return #nil Nothing found +function SPAWN:_GetPrefixFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit and DCSUnit:getName() then + local SpawnPrefix = string.match( DCSUnit:getName(), ".*#" ) + if SpawnPrefix then + SpawnPrefix = SpawnPrefix:sub( 1, -2 ) + end + self:T( SpawnPrefix ) + return SpawnPrefix + end + + return nil +end + +--- Return the group within the SpawnGroups collection with input a DCSUnit. +function SPAWN:_GetGroupFromDCSUnit( DCSUnit ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, DCSUnit } ) + + if DCSUnit then + local SpawnPrefix = self:_GetPrefixFromDCSUnit( DCSUnit ) + + if self.SpawnTemplatePrefix == SpawnPrefix or ( self.SpawnAliasPrefix and self.SpawnAliasPrefix == SpawnPrefix ) then + local SpawnGroupIndex = self:_GetGroupIndexFromDCSUnit( DCSUnit ) + local SpawnGroup = self.SpawnGroups[SpawnGroupIndex].Group + self:T( SpawnGroup ) + return SpawnGroup + end + end + + return nil +end + + +--- Get the index from a given group. +-- The function will search the name of the group for a #, and will return the number behind the #-mark. +function SPAWN:GetSpawnIndexFromGroup( SpawnGroup ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnGroup } ) + + local IndexString = string.match( SpawnGroup:GetName(), "#.*$" ):sub( 2 ) + local Index = tonumber( IndexString ) + + self:T( IndexString, Index ) + return Index + +end + +--- Return the last maximum index that can be used. +function SPAWN:_GetLastIndex() + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) + + return self.SpawnMaxGroups +end + +--- Initalize the SpawnGroups collection. +function SPAWN:_InitializeSpawnGroups( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) + + if not self.SpawnGroups[SpawnIndex] then + self.SpawnGroups[SpawnIndex] = {} + self.SpawnGroups[SpawnIndex].Visible = false + self.SpawnGroups[SpawnIndex].Spawned = false + self.SpawnGroups[SpawnIndex].UnControlled = false + self.SpawnGroups[SpawnIndex].SpawnTime = 0 + + self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefix + self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) + end + + self:_RandomizeTemplate( SpawnIndex ) + self:_RandomizeRoute( SpawnIndex ) + --self:_TranslateRotate( SpawnIndex ) + + return self.SpawnGroups[SpawnIndex] +end + + + +--- Gets the CategoryID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCategoryID( SpawnPrefix ) + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + return TemplateGroup:getCategory() + else + return nil + end +end + +--- Gets the CoalitionID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCoalitionID( SpawnPrefix ) + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + return TemplateGroup:getCoalition() + else + return nil + end +end + +--- Gets the CountryID of the Group with the given SpawnPrefix +function SPAWN:_GetGroupCountryID( SpawnPrefix ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnPrefix } ) + + local TemplateGroup = Group.getByName( SpawnPrefix ) + + if TemplateGroup then + local TemplateUnits = TemplateGroup:getUnits() + return TemplateUnits[1]:getCountry() + else + return nil + end +end + +--- Gets the Group Template from the ME environment definition. +-- This method used the @{DATABASE} object, which contains ALL initial and new spawned object in MOOSE. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix +-- @return @SPAWN self +function SPAWN:_GetTemplate( SpawnTemplatePrefix ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnTemplatePrefix } ) + + local SpawnTemplate = nil + + SpawnTemplate = routines.utils.deepCopy( _DATABASE.Templates.Groups[SpawnTemplatePrefix].Template ) + + if SpawnTemplate == nil then + error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) + end + + SpawnTemplate.SpawnCoalitionID = self:_GetGroupCoalitionID( SpawnTemplatePrefix ) + SpawnTemplate.SpawnCategoryID = self:_GetGroupCategoryID( SpawnTemplatePrefix ) + SpawnTemplate.SpawnCountryID = self:_GetGroupCountryID( SpawnTemplatePrefix ) + + self:T( { SpawnTemplate } ) + return SpawnTemplate +end + +--- Prepares the new Group Template. +-- @param #SPAWN self +-- @param #string SpawnTemplatePrefix +-- @param #number SpawnIndex +-- @return #SPAWN self +function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) + + local SpawnTemplate = self:_GetTemplate( SpawnTemplatePrefix ) + SpawnTemplate.name = self:SpawnGroupName( SpawnIndex ) + + SpawnTemplate.groupId = nil + SpawnTemplate.lateActivation = false + + if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then + self:T( "For ground units, visible needs to be false..." ) + SpawnTemplate.visible = false + end + + if SpawnTemplate.SpawnCategoryID == Group.Category.HELICOPTER or SpawnTemplate.SpawnCategoryID == Group.Category.AIRPLANE then + SpawnTemplate.uncontrolled = false + end + + for UnitID = 1, #SpawnTemplate.units do + SpawnTemplate.units[UnitID].name = string.format( SpawnTemplate.name .. '-%02d', UnitID ) + SpawnTemplate.units[UnitID].unitId = nil + SpawnTemplate.units[UnitID].x = SpawnTemplate.route.points[1].x + SpawnTemplate.units[UnitID].y = SpawnTemplate.route.points[1].y + end + + self:T( { "Template:", SpawnTemplate } ) + return SpawnTemplate + +end + +--- Private method randomizing the routes. +-- @param #SPAWN self +-- @param #number SpawnIndex The index of the group to be spawned. +-- @return #SPAWN +function SPAWN:_RandomizeRoute( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnRandomizeRoute, self.SpawnRandomizeRouteStartPoint, self.SpawnRandomizeRouteEndPoint, self.SpawnRandomizeRouteRadius } ) + + if self.SpawnRandomizeRoute then + local SpawnTemplate = self.SpawnGroups[SpawnIndex].SpawnTemplate + local RouteCount = #SpawnTemplate.route.points + + for t = self.SpawnRandomizeRouteStartPoint + 1, ( RouteCount - self.SpawnRandomizeRouteEndPoint ) do + SpawnTemplate.route.points[t].x = SpawnTemplate.route.points[t].x + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) + SpawnTemplate.route.points[t].y = SpawnTemplate.route.points[t].y + math.random( self.SpawnRandomizeRouteRadius * -1, self.SpawnRandomizeRouteRadius ) + -- TODO: manage altitude for airborne units ... + SpawnTemplate.route.points[t].alt = nil + --SpawnGroup.route.points[t].alt_type = nil + self:T( 'SpawnTemplate.route.points[' .. t .. '].x = ' .. SpawnTemplate.route.points[t].x .. ', SpawnTemplate.route.points[' .. t .. '].y = ' .. SpawnTemplate.route.points[t].y ) + end + end + + return self +end + +--- Private method that randomizes the template of the group. +-- @param #SPAWN self +-- @param #number SpawnIndex +-- @return #SPAWN self +function SPAWN:_RandomizeTemplate( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) + + if self.SpawnRandomizeTemplate then + self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefixTable[ math.random( 1, #self.SpawnTemplatePrefixTable ) ] + self.SpawnGroups[SpawnIndex].SpawnTemplate = self:_Prepare( self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix, SpawnIndex ) + self.SpawnGroups[SpawnIndex].SpawnTemplate.route = routines.utils.deepCopy( self.SpawnTemplate.route ) + self.SpawnGroups[SpawnIndex].SpawnTemplate.x = self.SpawnTemplate.x + self.SpawnGroups[SpawnIndex].SpawnTemplate.y = self.SpawnTemplate.y + self.SpawnGroups[SpawnIndex].SpawnTemplate.start_time = self.SpawnTemplate.start_time + for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading + end + end + + self:_RandomizeRoute( SpawnIndex ) + + return self +end + +function SPAWN:_TranslateRotate( SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle } ) + + -- Translate + local TranslatedX = SpawnX + local TranslatedY = SpawnY + + -- Rotate + -- From Wikipedia: https://en.wikipedia.org/wiki/Rotation_matrix#Common_rotations + -- x' = x \cos \theta - y \sin \theta\ + -- y' = x \sin \theta + y \cos \theta\ + local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) + + TranslatedY * math.sin( math.rad( SpawnAngle ) ) + local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) + + TranslatedY * math.cos( math.rad( SpawnAngle ) ) + + -- Assign + self.SpawnGroups[SpawnIndex].SpawnTemplate.x = SpawnRootX - RotatedX + self.SpawnGroups[SpawnIndex].SpawnTemplate.y = SpawnRootY + RotatedY + + + local SpawnUnitCount = table.getn( self.SpawnGroups[SpawnIndex].SpawnTemplate.units ) + for u = 1, SpawnUnitCount do + + -- Translate + local TranslatedX = SpawnX + local TranslatedY = SpawnY - 10 * ( u - 1 ) + + -- Rotate + local RotatedX = - TranslatedX * math.cos( math.rad( SpawnAngle ) ) + + TranslatedY * math.sin( math.rad( SpawnAngle ) ) + local RotatedY = TranslatedX * math.sin( math.rad( SpawnAngle ) ) + + TranslatedY * math.cos( math.rad( SpawnAngle ) ) + + -- Assign + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].x = SpawnRootX - RotatedX + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].y = SpawnRootY + RotatedY + self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading = self.SpawnGroups[SpawnIndex].SpawnTemplate.units[u].heading + math.rad( SpawnAngle ) + end + + return self +end + +--- Get the next index of the groups to be spawned. This function is complicated, as it is used at several spaces. +function SPAWN:_GetSpawnIndex( SpawnIndex ) + self:F( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive, self.AliveUnits, #self.SpawnTemplate.units } ) + + + if ( self.SpawnMaxGroups == 0 ) or ( SpawnIndex <= self.SpawnMaxGroups ) then + if ( self.SpawnMaxUnitsAlive == 0 ) or ( self.AliveUnits < self.SpawnMaxUnitsAlive * #self.SpawnTemplate.units ) or self.UnControlled then + if SpawnIndex and SpawnIndex >= self.SpawnCount + 1 then + self.SpawnCount = self.SpawnCount + 1 + SpawnIndex = self.SpawnCount + end + self.SpawnIndex = SpawnIndex + if not self.SpawnGroups[self.SpawnIndex] then + self:_InitializeSpawnGroups( self.SpawnIndex ) + end + else + return nil + end + else + return nil + end + + return self.SpawnIndex +end + + +-- TODO Need to delete this... _DATABASE does this now ... +function SPAWN:_OnBirth( event ) + + if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if event.initiator and event.initiator:getName() then + local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) + if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then + self:T( { "Birth event: " .. event.initiator:getName(), event } ) + --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " spawned." , 5, EventPrefix .. '/Event') + self.AliveUnits = self.AliveUnits + 1 + self:T( "Alive Units: " .. self.AliveUnits ) + end + end + end + +end + +--- Obscolete +-- @todo Need to delete this... _DATABASE does this now ... +function SPAWN:_OnDeadOrCrash( event ) + self:F( self.SpawnTemplatePrefix, event ) + + if event.initiator and event.initiator:getName() then + local EventPrefix = self:_GetPrefixFromDCSUnit( event.initiator ) + if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) then + self:T( { "Dead event: " .. event.initiator:getName(), event } ) +-- local DestroyedUnit = Unit.getByName( EventPrefix ) +-- if DestroyedUnit and DestroyedUnit.getLife() <= 1.0 then + --MessageToAll( "Mission command: unit " .. SpawnTemplatePrefix .. " crashed." , 5, EventPrefix .. '/Event') + self.AliveUnits = self.AliveUnits - 1 + self:T( "Alive Units: " .. self.AliveUnits ) +-- end + end + end +end + +--- Will detect AIR Units taking off... When the event takes place, the spawned Group is registered as airborne... +-- This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups. +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnTakeOff( event ) + self:F( self.SpawnTemplatePrefix, event ) + + if event.initiator and event.initiator:getName() then + local SpawnGroup = self:_GetGroupFromDCSUnit( event.initiator ) + if SpawnGroup then + self:T( { "TakeOff event: " .. event.initiator:getName(), event } ) + self:T( "self.Landed = false" ) + self.Landed = false + end + end +end + +--- Will detect AIR Units landing... When the event takes place, the spawned Group is registered as landed. +-- This is needed to ensure that Re-SPAWNing is only done for landed AIR Groups. +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnLand( event ) + self:F( self.SpawnTemplatePrefix, event ) + + local SpawnUnit = event.initiator + if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then + local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) + if SpawnGroup then + self:T( { "Landed event:" .. SpawnUnit:getName(), event } ) + self.Landed = true + self:T( "self.Landed = true" ) + if self.Landed and self.RepeatOnLanding then + local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) + self:T( { "Landed:", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + self:ReSpawn( SpawnGroupIndex ) + end + end + end +end + +--- Will detect AIR Units shutting down their engines ... +-- When the event takes place, and the method @{RepeatOnEngineShutDown} was called, the spawned Group will Re-SPAWN. +-- But only when the Unit was registered to have landed. +-- @param #SPAWN self +-- @see _OnTakeOff +-- @see _OnLand +-- @todo Need to test for AIR Groups only... +function SPAWN:_OnEngineShutDown( event ) + self:F( self.SpawnTemplatePrefix, event ) + + local SpawnUnit = event.initiator + if SpawnUnit and SpawnUnit:isExist() and Object.getCategory(SpawnUnit) == Object.Category.UNIT then + local SpawnGroup = self:_GetGroupFromDCSUnit( SpawnUnit ) + if SpawnGroup then + self:T( { "EngineShutDown event: " .. SpawnUnit:getName(), event } ) + if self.Landed and self.RepeatOnEngineShutDown then + local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) + self:T( { "EngineShutDown: ", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + self:ReSpawn( SpawnGroupIndex ) + end + end + end +end + +--- This function is called automatically by the Spawning scheduler. +-- It is the internal worker method SPAWNing new Groups on the defined time intervals. +function SPAWN:_Scheduler() + self:F( { "_Scheduler", self.SpawnTemplatePrefix, self.SpawnAliasPrefix, self.SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive } ) + + -- Validate if there are still groups left in the batch... + self:Spawn() + + return true +end + +function SPAWN:_SpawnCleanUpScheduler() + self:F( { "CleanUp Scheduler:", self.SpawnTemplatePrefix } ) + + local SpawnCursor + local SpawnGroup, SpawnCursor = self:GetFirstAliveGroup( SpawnCursor ) + + self:T( { "CleanUp Scheduler:", SpawnGroup } ) + + while SpawnGroup do + + if SpawnGroup:AllOnGround() and SpawnGroup:GetMaxVelocity() < 1 then + if not self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] then + self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = timer.getTime() + else + if self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] + self.SpawnCleanUpInterval < timer.getTime() then + self:T( { "CleanUp Scheduler:", "Cleaning:", SpawnGroup } ) + SpawnGroup:Destroy() + end + end + else + self.SpawnCleanUpTimeStamps[SpawnGroup:GetName()] = nil + end + + SpawnGroup, SpawnCursor = self:GetNextAliveGroup( SpawnCursor ) + + self:T( { "CleanUp Scheduler:", SpawnGroup } ) + + end + + return true -- Repeat + +end +--- Limit the simultaneous movement of Groups within a running Mission. +-- This module is defined to improve the performance in missions, and to bring additional realism for GROUND vehicles. +-- Performance: If in a DCSRTE there are a lot of moving GROUND units, then in a multi player mission, this WILL create lag if +-- the main DCS execution core of your CPU is fully utilized. So, this class will limit the amount of simultaneous moving GROUND units +-- on defined intervals (currently every minute). +-- @module MOVEMENT + +Include.File( "Routines" ) + +--- the MOVEMENT class +-- @type +MOVEMENT = { + ClassName = "MOVEMENT", +} + +--- Creates the main object which is handling the GROUND forces movement. +-- @param table{string,...}|string MovePrefixes is a table of the Prefixes (names) of the GROUND Groups that need to be controlled by the MOVEMENT Object. +-- @param number MoveMaximum is a number that defines the maximum amount of GROUND Units to be moving during one minute. +-- @return MOVEMENT +-- @usage +-- -- Limit the amount of simultaneous moving units on the ground to prevent lag. +-- Movement_US_Platoons = MOVEMENT:New( { 'US Tank Platoon Left', 'US Tank Platoon Middle', 'US Tank Platoon Right', 'US CH-47D Troops' }, 15 ) + +function MOVEMENT:New( MovePrefixes, MoveMaximum ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { MovePrefixes, MoveMaximum } ) + + if type( MovePrefixes ) == 'table' then + self.MovePrefixes = MovePrefixes + else + self.MovePrefixes = { MovePrefixes } + end + self.MoveCount = 0 -- The internal counter of the amount of Moveing the has happened since MoveStart. + self.MoveMaximum = MoveMaximum -- Contains the Maximum amount of units that are allowed to move... + self.AliveUnits = 0 -- Contains the counter how many units are currently alive + self.MoveUnits = {} -- Reflects if the Moving for this MovePrefixes is going to be scheduled or not. + + _EVENTDISPATCHER:OnBirth( self.OnBirth, self ) + +-- self:AddEvent( world.event.S_EVENT_BIRTH, self.OnBirth ) +-- +-- self:EnableEvents() + + self:ScheduleStart() + + return self +end + +--- Call this function to start the MOVEMENT scheduling. +function MOVEMENT:ScheduleStart() + self:F() + --self.MoveFunction = routines.scheduleFunction( self._Scheduler, { self }, timer.getTime() + 1, 120 ) + self.MoveFunction = SCHEDULER:New( self, self._Scheduler, {}, 1, 120 ) +end + +--- Call this function to stop the MOVEMENT scheduling. +-- @todo need to implement it ... Forgot. +function MOVEMENT:ScheduleStop() + self:F() + +end + +--- Captures the birth events when new Units were spawned. +-- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. +function MOVEMENT:OnBirth( Event ) + self:F( { Event } ) + + if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if Event.IniDCSUnit then + self:T( "Birth object : " .. Event.IniDCSUnitName ) + if Event.IniDCSGroup and Event.IniDCSGroup:isExist() then + for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do + if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then + self.AliveUnits = self.AliveUnits + 1 + self.MoveUnits[Event.IniDCSUnitName] = Event.IniDCSGroupName + self:T( self.AliveUnits ) + end + end + end + end + _EVENTDISPATCHER:OnCrashForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) + _EVENTDISPATCHER:OnDeadForUnit( Event.IniDCSUnitName, self.OnDeadOrCrash, self ) + end + +end + +--- Captures the Dead or Crash events when Units crash or are destroyed. +-- @todo This method should become obsolete. The new @{DATABASE} class will handle the collection administration. +function MOVEMENT:OnDeadOrCrash( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + self:T( "Dead object : " .. Event.IniDCSUnitName ) + for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do + if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then + self.AliveUnits = self.AliveUnits - 1 + self.MoveUnits[Event.IniDCSUnitName] = nil + self:T( self.AliveUnits ) + end + end + end +end + +--- This function is called automatically by the MOVEMENT scheduler. A new function is scheduled when MoveScheduled is true. +function MOVEMENT:_Scheduler() + self:F( { self.MovePrefixes, self.MoveMaximum, self.AliveUnits, self.MovementGroups } ) + + if self.AliveUnits > 0 then + local MoveProbability = ( self.MoveMaximum * 100 ) / self.AliveUnits + self:T( 'Move Probability = ' .. MoveProbability ) + + for MovementUnitName, MovementGroupName in pairs( self.MoveUnits ) do + local MovementGroup = Group.getByName( MovementGroupName ) + if MovementGroup and MovementGroup:isExist() then + local MoveOrStop = math.random( 1, 100 ) + self:T( 'MoveOrStop = ' .. MoveOrStop ) + if MoveOrStop <= MoveProbability then + self:T( 'Group continues moving = ' .. MovementGroupName ) + trigger.action.groupContinueMoving( MovementGroup ) + else + self:T( 'Group stops moving = ' .. MovementGroupName ) + trigger.action.groupStopMoving( MovementGroup ) + end + else + self.MoveUnits[MovementUnitName] = nil + end + end + end + return true +end +--- Provides defensive behaviour to a set of SAM sites within a running Mission. +-- @module Sead +-- @author to be searched on the forum +-- @author (co) Flightcontrol (Modified and enriched with functionality) + +Include.File( "Routines" ) +Include.File( "Event" ) +Include.File( "Base" ) +Include.File( "Mission" ) +Include.File( "Client" ) +Include.File( "Task" ) + +--- The SEAD class +-- @type SEAD +-- @extends Base#BASE +SEAD = { + ClassName = "SEAD", + TargetSkill = { + Average = { Evade = 50, DelayOff = { 10, 25 }, DelayOn = { 10, 30 } } , + Good = { Evade = 30, DelayOff = { 8, 20 }, DelayOn = { 20, 40 } } , + High = { Evade = 15, DelayOff = { 5, 17 }, DelayOn = { 30, 50 } } , + Excellent = { Evade = 10, DelayOff = { 3, 10 }, DelayOn = { 30, 60 } } + }, + SEADGroupPrefixes = {} +} + +--- Creates the main object which is handling defensive actions for SA sites or moving SA vehicles. +-- When an anti radiation missile is fired (KH-58, KH-31P, KH-31A, KH-25MPU, HARM missiles), the SA will shut down their radars and will take evasive actions... +-- Chances are big that the missile will miss. +-- @param table{string,...}|string SEADGroupPrefixes which is a table of Prefixes of the SA Groups in the DCSRTE on which evasive actions need to be taken. +-- @return SEAD +-- @usage +-- -- CCCP SEAD Defenses +-- -- Defends the Russian SA installations from SEAD attacks. +-- SEAD_RU_SAM_Defenses = SEAD:New( { 'RU SA-6 Kub', 'RU SA-6 Defenses', 'RU MI-26 Troops', 'RU Attack Gori' } ) +function SEAD:New( SEADGroupPrefixes ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( SEADGroupPrefixes ) + if type( SEADGroupPrefixes ) == 'table' then + for SEADGroupPrefixID, SEADGroupPrefix in pairs( SEADGroupPrefixes ) do + self.SEADGroupPrefixes[SEADGroupPrefix] = SEADGroupPrefix + end + else + self.SEADGroupNames[SEADGroupPrefixes] = SEADGroupPrefixes + end + _EVENTDISPATCHER:OnShot( self.EventShot, self ) + + return self +end + +--- Detects if an SA site was shot with an anti radiation missile. In this case, take evasive actions based on the skill level set within the ME. +-- @see SEAD +function SEAD:EventShot( Event ) + self:F( { Event } ) + + local SEADUnit = Event.IniDCSUnit + local SEADUnitName = Event.IniDCSUnitName + local SEADWeapon = Event.Weapon -- Identify the weapon fired + local SEADWeaponName = Event.WeaponName -- return weapon type + --trigger.action.outText( string.format("Alerte, depart missile " ..string.format(SEADWeaponName)), 20) --debug message + -- Start of the 2nd loop + self:T( "Missile Launched = " .. SEADWeaponName ) + if SEADWeaponName == "KH-58" or SEADWeaponName == "KH-25MPU" or SEADWeaponName == "AGM-88" or SEADWeaponName == "KH-31A" or SEADWeaponName == "KH-31P" then -- Check if the missile is a SEAD + local _evade = math.random (1,100) -- random number for chance of evading action + local _targetMim = Event.Weapon:getTarget() -- Identify target + local _targetMimname = Unit.getName(_targetMim) + local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) + local _targetMimgroupName = _targetMimgroup:getName() + local _targetMimcont= _targetMimgroup:getController() + local _targetskill = _DATABASE.Templates.Units[_targetMimname].Template.skill + self:T( self.SEADGroupPrefixes ) + self:T( _targetMimgroupName ) + local SEADGroupFound = false + for SEADGroupPrefixID, SEADGroupPrefix in pairs( self.SEADGroupPrefixes ) do + if string.find( _targetMimgroupName, SEADGroupPrefix, 1, true ) then + SEADGroupFound = true + self:T( 'Group Found' ) + break + end + end + if SEADGroupFound == true then + if _targetskill == "Random" then -- when skill is random, choose a skill + local Skills = { "Average", "Good", "High", "Excellent" } + _targetskill = Skills[ math.random(1,4) ] + end + self:T( _targetskill ) -- debug message for skill check + if self.TargetSkill[_targetskill] then + if (_evade > self.TargetSkill[_targetskill].Evade) then + self:T( string.format("Evading, target skill " ..string.format(_targetskill)) ) --debug message + local _targetMim = Weapon.getTarget(SEADWeapon) + local _targetMimname = Unit.getName(_targetMim) + local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) + local _targetMimcont= _targetMimgroup:getController() + routines.groupRandomDistSelf(_targetMimgroup,300,'Diamond',250,20) -- move randomly + local SuppressedGroups1 = {} -- unit suppressed radar off for a random time + local function SuppressionEnd1(id) + id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) + SuppressedGroups1[id.groupName] = nil + end + local id = { + groupName = _targetMimgroup, + ctrl = _targetMimcont + } + local delay1 = math.random(self.TargetSkill[_targetskill].DelayOff[1], self.TargetSkill[_targetskill].DelayOff[2]) + if SuppressedGroups1[id.groupName] == nil then + SuppressedGroups1[id.groupName] = { + SuppressionEndTime1 = timer.getTime() + delay1, + SuppressionEndN1 = SuppressionEndCounter1 --Store instance of SuppressionEnd() scheduled function + } + Controller.setOption(_targetMimcont, AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.GREEN) + timer.scheduleFunction(SuppressionEnd1, id, SuppressedGroups1[id.groupName].SuppressionEndTime1) --Schedule the SuppressionEnd() function + --trigger.action.outText( string.format("Radar Off " ..string.format(delay1)), 20) + end + + local SuppressedGroups = {} + local function SuppressionEnd(id) + id.ctrl:setOption(AI.Option.Ground.id.ALARM_STATE,AI.Option.Ground.val.ALARM_STATE.RED) + SuppressedGroups[id.groupName] = nil + end + local id = { + groupName = _targetMimgroup, + ctrl = _targetMimcont + } + local delay = math.random(self.TargetSkill[_targetskill].DelayOn[1], self.TargetSkill[_targetskill].DelayOn[2]) + if SuppressedGroups[id.groupName] == nil then + SuppressedGroups[id.groupName] = { + SuppressionEndTime = timer.getTime() + delay, + SuppressionEndN = SuppressionEndCounter --Store instance of SuppressionEnd() scheduled function + } + timer.scheduleFunction(SuppressionEnd, id, SuppressedGroups[id.groupName].SuppressionEndTime) --Schedule the SuppressionEnd() function + --trigger.action.outText( string.format("Radar On " ..string.format(delay)), 20) + end + end + end + end + end +end +--- Taking the lead of AI escorting your flight. +-- +-- @{#ESCORT} class +-- ================ +-- The @{#ESCORT} class allows you to interact with escorting AI on your flight and take the lead. +-- Each escorting group can be commanded with a whole set of radio commands (radio menu in your flight, and then F10). +-- +-- The radio commands will vary according the category of the group. The richest set of commands are with Helicopters and AirPlanes. +-- Ships and Ground troops will have a more limited set, but they can provide support through the bombing of targets designated by the other escorts. +-- +-- RADIO MENUs that can be created: +-- ================================ +-- Find a summary below of the current available commands: +-- +-- Navigation ...: +-- --------------- +-- Escort group navigation functions: +-- +-- * **"Join-Up and Follow at x meters":** The escort group fill follow you at about x meters, and they will follow you. +-- * **"Flare":** Provides menu commands to let the escort group shoot a flare in the air in a color. +-- * **"Smoke":** Provides menu commands to let the escort group smoke the air in a color. Note that smoking is only available for ground and naval troops. +-- +-- Hold position ...: +-- ------------------ +-- Escort group navigation functions: +-- +-- * **"At current location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. +-- * **"At client location":** Stops the escort group and they will hover 30 meters above the ground at the position they stopped. +-- +-- Report targets ...: +-- ------------------- +-- Report targets will make the escort group to report any target that it identifies within a 8km range. Any detected target can be attacked using the 4. Attack nearby targets function. (see below). +-- +-- * **"Report now":** Will report the current detected targets. +-- * **"Report targets on":** Will make the escort group to report detected targets and will fill the "Attack nearby targets" menu list. +-- * **"Report targets off":** Will stop detecting targets. +-- +-- Scan targets ...: +-- ----------------- +-- Menu items to pop-up the escort group for target scanning. After scanning, the escort group will resume with the mission or defined task. +-- +-- * **"Scan targets 30 seconds":** Scan 30 seconds for targets. +-- * **"Scan targets 60 seconds":** Scan 60 seconds for targets. +-- +-- Attack targets ...: +-- ------------------- +-- This menu item will list all detected targets within a 15km range. Depending on the level of detection (known/unknown) and visuality, the targets type will also be listed. +-- +-- Request assistance from ...: +-- ---------------------------- +-- This menu item will list all detected targets within a 15km range, as with the menu item **Attack Targets**. +-- This menu item allows to request attack support from other escorts supporting the current client group. +-- eg. the function allows a player to request support from the Ship escort to attack a target identified by the Plane escort with its Tomahawk missiles. +-- eg. the function allows a player to request support from other Planes escorting to bomb the unit with illumination missiles or bombs, so that the main plane escort can attack the area. +-- +-- ROE ...: +-- -------- +-- Sets the Rules of Engagement (ROE) of the escort group when in flight. +-- +-- * **"Hold Fire":** The escort group will hold fire. +-- * **"Return Fire":** The escort group will return fire. +-- * **"Open Fire":** The escort group will open fire on designated targets. +-- * **"Weapon Free":** The escort group will engage with any target. +-- +-- Evasion ...: +-- ------------ +-- Will define the evasion techniques that the escort group will perform during flight or combat. +-- +-- * **"Fight until death":** The escort group will have no reaction to threats. +-- * **"Use flares, chaff and jammers":** The escort group will use passive defense using flares and jammers. No evasive manoeuvres are executed. +-- * **"Evade enemy fire":** The rescort group will evade enemy fire before firing. +-- * **"Go below radar and evade fire":** The escort group will perform evasive vertical manoeuvres. +-- +-- Resume Mission ...: +-- ------------------- +-- Escort groups can have their own mission. This menu item will allow the escort group to resume their Mission from a given waypoint. +-- Note that this is really fantastic, as you now have the dynamic of taking control of the escort groups, and allowing them to resume their path or mission. +-- +-- ESCORT construction methods. +-- ============================ +-- Create a new SPAWN object with the @{#ESCORT.New} method: +-- +-- * @{#ESCORT.New}: Creates a new ESCORT object from a @{Group#GROUP} for a @{Client#CLIENT}, with an optional briefing text. +-- +-- ESCORT initialization methods. +-- ============================== +-- The following menus are created within the RADIO MENU of an active unit hosted by a player: +-- +-- * @{#ESCORT.MenuFollowAt}: Creates a menu to make the escort follow the client. +-- * @{#ESCORT.MenuHoldAtEscortPosition}: Creates a menu to hold the escort at its current position. +-- * @{#ESCORT.MenuHoldAtLeaderPosition}: Creates a menu to hold the escort at the client position. +-- * @{#ESCORT.MenuScanForTargets}: Creates a menu so that the escort scans targets. +-- * @{#ESCORT.MenuFlare}: Creates a menu to disperse flares. +-- * @{#ESCORT.MenuSmoke}: Creates a menu to disparse smoke. +-- * @{#ESCORT.MenuReportTargets}: Creates a menu so that the escort reports targets. +-- * @{#ESCORT.MenuReportPosition}: Creates a menu so that the escort reports its current position from bullseye. +-- * @{#ESCORT.MenuAssistedAttack: Creates a menu so that the escort supportes assisted attack from other escorts with the client. +-- * @{#ESCORT.MenuROE: Creates a menu structure to set the rules of engagement of the escort. +-- * @{#ESCORT.MenuEvasion: Creates a menu structure to set the evasion techniques when the escort is under threat. +-- * @{#ESCORT.MenuResumeMission}: Creates a menu structure so that the escort can resume from a waypoint. +-- +-- @module Escort +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Database" ) +Include.File( "Group" ) +Include.File( "Zone" ) + +--- +-- @type ESCORT +-- @extends Base#BASE +-- @field Client#CLIENT EscortClient +-- @field Group#GROUP EscortGroup +-- @field #string EscortName +-- @field #ESCORT.MODE EscortMode The mode the escort is in. +-- @field #number FollowScheduler The id of the _FollowScheduler function. +-- @field #boolean ReportTargets If true, nearby targets are reported. +-- @Field DCSTypes#AI.Option.Air.val.ROE OptionROE Which ROE is set to the EscortGroup. +-- @field DCSTypes#AI.Option.Air.val.REACTION_ON_THREAT OptionReactionOnThreat Which REACTION_ON_THREAT is set to the EscortGroup. +-- @field Menu#MENU_CLIENT EscortMenuResumeMission +ESCORT = { + ClassName = "ESCORT", + EscortName = nil, -- The Escort Name + EscortClient = nil, + EscortGroup = nil, + EscortMode = nil, + MODE = { + FOLLOW = 1, + MISSION = 2, + }, + Targets = {}, -- The identified targets + FollowScheduler = nil, + ReportTargets = true, + OptionROE = AI.Option.Air.val.ROE.OPEN_FIRE, + OptionReactionOnThreat = AI.Option.Air.val.REACTION_ON_THREAT.ALLOW_ABORT_MISSION, + TaskPoints = {} +} + +--- ESCORT.Mode class +-- @type ESCORT.MODE +-- @field #number FOLLOW +-- @field #number MISSION + +--- MENUPARAM type +-- @type MENUPARAM +-- @field #ESCORT ParamSelf +-- @field #Distance ParamDistance +-- @field #function ParamFunction +-- @field #string ParamMessage + +--- ESCORT class constructor for an AI group +-- @param #ESCORT self +-- @param Client#CLIENT EscortClient The client escorted by the EscortGroup. +-- @param Group#GROUP EscortGroup The group AI escorting the EscortClient. +-- @param #string EscortName Name of the escort. +-- @return #ESCORT self +function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( { EscortClient, EscortGroup, EscortName } ) + + self.EscortClient = EscortClient -- Client#CLIENT + self.EscortGroup = EscortGroup -- Group#GROUP + self.EscortName = EscortName + self.EscortBriefing = EscortBriefing + + self:T( EscortGroup:GetClassNameAndID() ) + + -- Set EscortGroup known at EscortClient. + if not self.EscortClient._EscortGroups then + self.EscortClient._EscortGroups = {} + end + + if not self.EscortClient._EscortGroups[EscortGroup:GetName()] then + self.EscortClient._EscortGroups[EscortGroup:GetName()] = {} + self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortGroup = self.EscortGroup + self.EscortClient._EscortGroups[EscortGroup:GetName()].EscortName = self.EscortName + self.EscortClient._EscortGroups[EscortGroup:GetName()].Targets = {} + self.EscortMode = ESCORT.MODE.FOLLOW + end + + + self.EscortMenu = MENU_CLIENT:New( self.EscortClient, self.EscortName ) + + self.EscortGroup:WayPointInitialize(1) + + self.EscortGroup:OptionROTVertical() + self.EscortGroup:OptionROEOpenFire() + + EscortGroup:MessageToClient( EscortGroup:GetCategoryName() .. " '" .. EscortName .. "' (" .. EscortGroup:GetCallsign() .. ") reporting! " .. + "We're escorting your flight. " .. + "Use the Radio Menu and F10 and use the options under + " .. EscortName .. "\n", + 60, EscortClient + ) + + return self +end + + +--- Defines the default menus +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:Menus() + self:F() + + self:MenuFollowAt( 100 ) + self:MenuFollowAt( 200 ) + self:MenuFollowAt( 300 ) + self:MenuFollowAt( 400 ) + + self:MenuScanForTargets( 100, 60 ) + + self:MenuHoldAtEscortPosition( 30 ) + self:MenuHoldAtLeaderPosition( 30 ) + + self:MenuFlare() + self:MenuSmoke() + + self:MenuReportTargets( 60 ) + self:MenuAssistedAttack() + self:MenuROE() + self:MenuEvasion() + self:MenuResumeMission() + + return self +end + + + +--- Defines a menu slot to let the escort Join and Follow you at a certain distance. +-- This menu will appear under **Navigation**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Distance The distance in meters that the escort needs to follow the client. +-- @return #ESCORT +function ESCORT:MenuFollowAt( Distance ) + self:F(Distance) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + if not self.EscortMenuJoinUpAndFollow then + self.EscortMenuJoinUpAndFollow = {} + end + + self.EscortMenuJoinUpAndFollow[#self.EscortMenuJoinUpAndFollow+1] = MENU_CLIENT_COMMAND:New( self.EscortClient, "Join-Up and Follow at " .. Distance, self.EscortMenuReportNavigation, ESCORT._JoinUpAndFollow, { ParamSelf = self, ParamDistance = Distance } ) + + self.EscortMode = ESCORT.MODE.FOLLOW + end + + return self +end + +--- Defines a menu slot to let the escort hold at their current position and stay low with a specified height during a specified time in seconds. +-- This menu will appear under **Hold position**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +-- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. +function ESCORT:MenuHoldAtEscortPosition( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + + if not self.EscortMenuHold then + self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) + end + + if not Height then + Height = 30 + end + + if not Seconds then + Seconds = 0 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "Hold at %d meter", Height ) + else + MenuText = string.format( "Hold at %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuHoldPosition then + self.EscortMenuHoldPosition = {} + end + + self.EscortMenuHoldPosition[#self.EscortMenuHoldPosition+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuHold, + ESCORT._HoldPosition, + { ParamSelf = self, + ParamOrbitGroup = self.EscortGroup, + ParamHeight = Height, + ParamSeconds = Seconds + } + ) + end + + return self +end + + +--- Defines a menu slot to let the escort hold at the client position and stay low with a specified height during a specified time in seconds. +-- This menu will appear under **Navigation**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +-- TODO: Implement Seconds parameter. Challenge is to first develop the "continue from last activity" function. +function ESCORT:MenuHoldAtLeaderPosition( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + + if not self.EscortMenuHold then + self.EscortMenuHold = MENU_CLIENT:New( self.EscortClient, "Hold position", self.EscortMenu ) + end + + if not Height then + Height = 30 + end + + if not Seconds then + Seconds = 0 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "Rejoin and hold at %d meter", Height ) + else + MenuText = string.format( "Rejoin and hold at %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuHoldAtLeaderPosition then + self.EscortMenuHoldAtLeaderPosition = {} + end + + self.EscortMenuHoldAtLeaderPosition[#self.EscortMenuHoldAtLeaderPosition+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuHold, + ESCORT._HoldPosition, + { ParamSelf = self, + ParamOrbitGroup = self.EscortClient, + ParamHeight = Height, + ParamSeconds = Seconds + } + ) + end + + return self +end + +--- Defines a menu slot to let the escort scan for targets at a certain height for a certain time in seconds. +-- This menu will appear under **Scan targets**. +-- @param #ESCORT self +-- @param DCSTypes#Distance Height Optional parameter that sets the height in meters to let the escort orbit at the current location. The default value is 30 meters. +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort orbit at the current position for a specified time. (not implemented yet). The default value is 0 seconds, meaning, that the escort will orbit forever until a sequent command is given. +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. The text string is formatted, and should contain one or two %d tokens in the string. The first for the Height, the second for the Time (if given). If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuScanForTargets( Height, Seconds, MenuTextFormat ) + self:F( { Height, Seconds, MenuTextFormat } ) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuScan then + self.EscortMenuScan = MENU_CLIENT:New( self.EscortClient, "Scan for targets", self.EscortMenu ) + end + + if not Height then + Height = 100 + end + + if not Seconds then + Seconds = 30 + end + + local MenuText = "" + if not MenuTextFormat then + if Seconds == 0 then + MenuText = string.format( "At %d meter", Height ) + else + MenuText = string.format( "At %d meter for %d seconds", Height, Seconds ) + end + else + if Seconds == 0 then + MenuText = string.format( MenuTextFormat, Height ) + else + MenuText = string.format( MenuTextFormat, Height, Seconds ) + end + end + + if not self.EscortMenuScanForTargets then + self.EscortMenuScanForTargets = {} + end + + self.EscortMenuScanForTargets[#self.EscortMenuScanForTargets+1] = MENU_CLIENT_COMMAND + :New( + self.EscortClient, + MenuText, + self.EscortMenuScan, + ESCORT._ScanTargets, + { ParamSelf = self, + ParamScanDuration = 30 + } + ) + end + + return self +end + + + +--- Defines a menu slot to let the escort disperse a flare in a certain color. +-- This menu will appear under **Navigation**. +-- The flare will be fired from the first unit in the group. +-- @param #ESCORT self +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuFlare( MenuTextFormat ) + self:F() + + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + local MenuText = "" + if not MenuTextFormat then + MenuText = "Flare" + else + MenuText = MenuTextFormat + end + + if not self.EscortMenuFlare then + self.EscortMenuFlare = MENU_CLIENT:New( self.EscortClient, MenuText, self.EscortMenuReportNavigation, ESCORT._Flare, { ParamSelf = self } ) + self.EscortMenuFlareGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Green, ParamMessage = "Released a green flare!" } ) + self.EscortMenuFlareRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Red, ParamMessage = "Released a red flare!" } ) + self.EscortMenuFlareWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.White, ParamMessage = "Released a white flare!" } ) + self.EscortMenuFlareYellow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release yellow flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Yellow, ParamMessage = "Released a yellow flare!" } ) + end + + return self +end + +--- Defines a menu slot to let the escort disperse a smoke in a certain color. +-- This menu will appear under **Navigation**. +-- Note that smoke menu options will only be displayed for ships and ground units. Not for air units. +-- The smoke will be fired from the first unit in the group. +-- @param #ESCORT self +-- @param #string MenuTextFormat Optional parameter that shows the menu option text. If no text is given, the default text will be displayed. +-- @return #ESCORT +function ESCORT:MenuSmoke( MenuTextFormat ) + self:F() + + if not self.EscortGroup:IsAir() then + if not self.EscortMenuReportNavigation then + self.EscortMenuReportNavigation = MENU_CLIENT:New( self.EscortClient, "Navigation", self.EscortMenu ) + end + + local MenuText = "" + if not MenuTextFormat then + MenuText = "Smoke" + else + MenuText = MenuTextFormat + end + + if not self.EscortMenuSmoke then + self.EscortMenuSmoke = MENU_CLIENT:New( self.EscortClient, "Smoke", self.EscortMenuReportNavigation, ESCORT._Smoke, { ParamSelf = self } ) + self.EscortMenuSmokeGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Green, ParamMessage = "Releasing green smoke!" } ) + self.EscortMenuSmokeRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Red, ParamMessage = "Releasing red smoke!" } ) + self.EscortMenuSmokeWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.White, ParamMessage = "Releasing white smoke!" } ) + self.EscortMenuSmokeOrange = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release orange smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Orange, ParamMessage = "Releasing orange smoke!" } ) + self.EscortMenuSmokeBlue = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release blue smoke", self.EscortMenuSmoke, ESCORT._Smoke, { ParamSelf = self, ParamColor = UNIT.SmokeColor.Blue, ParamMessage = "Releasing blue smoke!" } ) + end + end + + return self +end + +--- Defines a menu slot to let the escort report their current detected targets with a specified time interval in seconds. +-- This menu will appear under **Report targets**. +-- Note that if a report targets menu is not specified, no targets will be detected by the escort, and the attack and assisted attack menus will not be displayed. +-- @param #ESCORT self +-- @param DCSTypes#Time Seconds Optional parameter that lets the escort report their current detected targets after specified time interval in seconds. The default time is 30 seconds. +-- @return #ESCORT +function ESCORT:MenuReportTargets( Seconds ) + self:F( { Seconds } ) + + if not self.EscortMenuReportNearbyTargets then + self.EscortMenuReportNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Report targets", self.EscortMenu ) + end + + if not Seconds then + Seconds = 30 + end + + -- Report Targets + self.EscortMenuReportNearbyTargetsNow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets now!", self.EscortMenuReportNearbyTargets, ESCORT._ReportNearbyTargetsNow, { ParamSelf = self } ) + self.EscortMenuReportNearbyTargetsOn = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets on", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = true } ) + self.EscortMenuReportNearbyTargetsOff = MENU_CLIENT_COMMAND:New( self.EscortClient, "Report targets off", self.EscortMenuReportNearbyTargets, ESCORT._SwitchReportNearbyTargets, { ParamSelf = self, ParamReportTargets = false, } ) + + -- Attack Targets + self.EscortMenuAttackNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Attack targets", self.EscortMenu ) + + + --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, Seconds ) + self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, Seconds ) + + return self +end + +--- Defines a menu slot to let the escort attack its detected targets using assisted attack from another escort joined also with the client. +-- This menu will appear under **Request assistance from**. +-- Note that this method needs to be preceded with the method MenuReportTargets. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuAssistedAttack() + self:F() + + -- Request assistance from other escorts. + -- This is very useful to let f.e. an escorting ship attack a target detected by an escorting plane... + self.EscortMenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, "Request assistance from", self.EscortMenu ) + + return self +end + +--- Defines a menu to let the escort set its rules of engagement. +-- All rules of engagement will appear under the menu **ROE**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuROE( MenuTextFormat ) + self:F( MenuTextFormat ) + + if not self.EscortMenuROE then + -- Rules of Engagement + self.EscortMenuROE = MENU_CLIENT:New( self.EscortClient, "ROE", self.EscortMenu ) + if self.EscortGroup:OptionROEHoldFirePossible() then + self.EscortMenuROEHoldFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Hold Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEHoldFire(), ParamMessage = "Holding weapons!" } ) + end + if self.EscortGroup:OptionROEReturnFirePossible() then + self.EscortMenuROEReturnFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Return Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEReturnFire(), ParamMessage = "Returning fire!" } ) + end + if self.EscortGroup:OptionROEOpenFirePossible() then + self.EscortMenuROEOpenFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Open Fire", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEOpenFire(), ParamMessage = "Opening fire on designated targets!!" } ) + end + if self.EscortGroup:OptionROEWeaponFreePossible() then + self.EscortMenuROEWeaponFree = MENU_CLIENT_COMMAND:New( self.EscortClient, "Weapon Free", self.EscortMenuROE, ESCORT._ROE, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROEWeaponFree(), ParamMessage = "Opening fire on targets of opportunity!" } ) + end + end + + return self +end + + +--- Defines a menu to let the escort set its evasion when under threat. +-- All rules of engagement will appear under the menu **Evasion**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuEvasion( MenuTextFormat ) + self:F( MenuTextFormat ) + + if self.EscortGroup:IsAir() then + if not self.EscortMenuEvasion then + -- Reaction to Threats + self.EscortMenuEvasion = MENU_CLIENT:New( self.EscortClient, "Evasion", self.EscortMenu ) + if self.EscortGroup:OptionROTNoReactionPossible() then + self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTNoReaction(), ParamMessage = "Fighting until death!" } ) + end + if self.EscortGroup:OptionROTPassiveDefensePossible() then + self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTPassiveDefense(), ParamMessage = "Defending using jammers, chaff and flares!" } ) + end + if self.EscortGroup:OptionROTEvadeFirePossible() then + self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTEvadeFire(), ParamMessage = "Evading on enemy fire!" } ) + end + if self.EscortGroup:OptionROTVerticalPossible() then + self.EscortMenuOptionEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._ROT, { ParamSelf = self, ParamFunction = self.EscortGroup:OptionROTVertical(), ParamMessage = "Evading on enemy fire with vertical manoeuvres!" } ) + end + end + end + + return self +end + +--- Defines a menu to let the escort resume its mission from a waypoint on its route. +-- All rules of engagement will appear under the menu **Resume mission from**. +-- @param #ESCORT self +-- @return #ESCORT +function ESCORT:MenuResumeMission() + self:F() + + if not self.EscortMenuResumeMission then + -- Mission Resume Menu Root + self.EscortMenuResumeMission = MENU_CLIENT:New( self.EscortClient, "Resume mission from", self.EscortMenu ) + end + + return self +end + + +--- @param #MENUPARAM MenuParam +function ESCORT._HoldPosition( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local OrbitGroup = MenuParam.ParamOrbitGroup -- Group#GROUP + local OrbitUnit = OrbitGroup:GetUnit(1) -- Unit#UNIT + local OrbitHeight = MenuParam.ParamHeight + local OrbitSeconds = MenuParam.ParamSeconds -- Not implemented yet + + routines.removeFunction( self.FollowScheduler ) + + local PointFrom = {} + local GroupPoint = EscortGroup:GetUnit(1):GetPointVec3() + PointFrom = {} + PointFrom.x = GroupPoint.x + PointFrom.y = GroupPoint.z + PointFrom.speed = 250 + PointFrom.type = AI.Task.WaypointType.TURNING_POINT + PointFrom.alt = GroupPoint.y + PointFrom.alt_type = AI.Task.AltitudeType.BARO + + local OrbitPoint = OrbitUnit:GetPointVec2() + local PointTo = {} + PointTo.x = OrbitPoint.x + PointTo.y = OrbitPoint.y + PointTo.speed = 250 + PointTo.type = AI.Task.WaypointType.TURNING_POINT + PointTo.alt = OrbitHeight + PointTo.alt_type = AI.Task.AltitudeType.BARO + PointTo.task = EscortGroup:TaskOrbitCircleAtVec2( OrbitPoint, OrbitHeight, 0 ) + + local Points = { PointFrom, PointTo } + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + EscortGroup:SetTask( EscortGroup:TaskRoute( Points ) ) + EscortGroup:MessageToClient( "Orbiting at location.", 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._JoinUpAndFollow( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.Distance = MenuParam.ParamDistance + + self:JoinUpAndFollow( EscortGroup, EscortClient, self.Distance ) +end + +--- JoinsUp and Follows a CLIENT. +-- @param Escort#ESCORT self +-- @param Group#GROUP EscortGroup +-- @param Client#CLIENT EscortClient +-- @param DCSTypes#Distance Distance +function ESCORT:JoinUpAndFollow( EscortGroup, EscortClient, Distance ) + self:F( { EscortGroup, EscortClient, Distance } ) + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTPassiveDefense() + + self.EscortMode = ESCORT.MODE.FOLLOW + + self.CT1 = 0 + self.GT1 = 0 + --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + 1, .5 ) + self.FollowScheduler = SCHEDULER:New( self, self._FollowScheduler, { Distance }, 1, .5, .1 ) + EscortGroup:MessageToClient( "Rejoining and Following at " .. Distance .. "!", 30, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._Flare( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local Color = MenuParam.ParamColor + local Message = MenuParam.ParamMessage + + EscortGroup:GetUnit(1):Flare( Color ) + EscortGroup:MessageToClient( Message, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._Smoke( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local Color = MenuParam.ParamColor + local Message = MenuParam.ParamMessage + + EscortGroup:GetUnit(1):Smoke( Color ) + EscortGroup:MessageToClient( Message, 10, EscortClient ) +end + + +--- @param #MENUPARAM MenuParam +function ESCORT._ReportNearbyTargetsNow( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self:_ReportTargetsScheduler() + +end + +function ESCORT._SwitchReportNearbyTargets( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.ReportTargets = MenuParam.ParamReportTargets + + if self.ReportTargets then + if not self.ReportTargetsScheduler then + --self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, 30 ) + self.ReportTargetsScheduler = SCHEDULER:New( self, self._ReportTargetsScheduler, {}, 1, 30 ) + end + else + routines.removeFunction( self.ReportTargetsScheduler ) + self.ReportTargetsScheduler = nil + end +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ScanTargets( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local ScanDuration = MenuParam.ParamScanDuration + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + self:T( { "FollowScheduler after removefunction: ", self.FollowScheduler } ) + + if EscortGroup:IsHelicopter() then + SCHEDULER:New( EscortGroup, EscortGroup.PushTask, + { EscortGroup:TaskControlled( + EscortGroup:TaskOrbitCircle( 200, 20 ), + EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) + ) + }, + 1 + ) + elseif EscortGroup:IsAirPlane() then + SCHEDULER:New( EscortGroup, EscortGroup.PushTask, + { EscortGroup:TaskControlled( + EscortGroup:TaskOrbitCircle( 1000, 500 ), + EscortGroup:TaskCondition( nil, nil, nil, nil, ScanDuration, nil ) + ) + }, + 1 + ) + end + + EscortGroup:MessageToClient( "Scanning targets for " .. ScanDuration .. " seconds.", ScanDuration, EscortClient ) + + if self.EscortMode == ESCORT.MODE.FOLLOW then + --self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + ScanDuration, 1 ) + self.FollowScheduler:Start() + end + +end + +function _Resume( EscortGroup ) + env.info( '_Resume' ) + + local Escort = EscortGroup.Escort -- #ESCORT + env.info( "EscortMode = " .. Escort.EscortMode ) + if Escort.EscortMode == ESCORT.MODE.FOLLOW then + Escort:JoinUpAndFollow( EscortGroup, Escort.EscortClient, Escort.Distance ) + end + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._AttackTarget( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + self:T( AttackUnit ) + + if EscortGroup:IsAir() then + EscortGroup:OptionROEOpenFire() + EscortGroup:OptionROTPassiveDefense() + EscortGroup.Escort = self -- Need to do this trick to get the reference for the escort in the _Resume function. +-- routines.scheduleFunction( +-- EscortGroup.PushTask, +-- { EscortGroup, +-- EscortGroup:TaskCombo( +-- { EscortGroup:TaskAttackUnit( AttackUnit ), +-- EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroup, + EscortGroup.PushTask, + { EscortGroup:TaskCombo( + { EscortGroup:TaskAttackUnit( AttackUnit ), + EscortGroup:TaskFunction( 1, 2, "_Resume", {"''"} ) + } + ) + }, 10 + ) + else +-- routines.scheduleFunction( +-- EscortGroup.PushTask, +-- { EscortGroup, +-- EscortGroup:TaskCombo( +-- { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroup, + EscortGroup.PushTask, + { EscortGroup:TaskCombo( + { EscortGroup:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) + } + ) + }, 10 + ) + end + EscortGroup:MessageToClient( "Engaging Designated Unit!", 10, EscortClient ) + + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._AssistTarget( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + local EscortGroupAttack = MenuParam.ParamEscortGroup + local AttackUnit = MenuParam.ParamUnit -- Unit#UNIT + + if self.FollowScheduler then + routines.removeFunction( self.FollowScheduler ) + end + + + self:T( AttackUnit ) + + if EscortGroupAttack:IsAir() then + EscortGroupAttack:OptionROEOpenFire() + EscortGroupAttack:OptionROTVertical() +-- routines.scheduleFunction( +-- EscortGroupAttack.PushTask, +-- { EscortGroupAttack, +-- EscortGroupAttack:TaskCombo( +-- { EscortGroupAttack:TaskAttackUnit( AttackUnit ), +-- EscortGroupAttack:TaskOrbitCircle( 500, 350 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHDULER:New( EscortGroupAttack, + EscortGroupAttack.PushTask, + { EscortGroupAttack:TaskCombo( + { EscortGroupAttack:TaskAttackUnit( AttackUnit ), + EscortGroupAttack:TaskOrbitCircle( 500, 350 ) + } + ) + }, 10 + ) + else +-- routines.scheduleFunction( +-- EscortGroupAttack.PushTask, +-- { EscortGroupAttack, +-- EscortGroupAttack:TaskCombo( +-- { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) +-- } +-- ) +-- }, timer.getTime() + 10 +-- ) + SCHEDULER:New( EscortGroupAttack, + EscortGroupAttack.PushTask, + { EscortGroupAttack:TaskCombo( + { EscortGroupAttack:TaskFireAtPoint( AttackUnit:GetPointVec2(), 50 ) + } + ) + }, 10 + ) + end + EscortGroupAttack:MessageToClient( "Assisting with the destroying the enemy unit!", 10, EscortClient ) + +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ROE( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local EscortROEFunction = MenuParam.ParamFunction + local EscortROEMessage = MenuParam.ParamMessage + + pcall( function() EscortROEFunction() end ) + EscortGroup:MessageToClient( EscortROEMessage, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ROT( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local EscortROTFunction = MenuParam.ParamFunction + local EscortROTMessage = MenuParam.ParamMessage + + pcall( function() EscortROTFunction() end ) + EscortGroup:MessageToClient( EscortROTMessage, 10, EscortClient ) +end + +--- @param #MENUPARAM MenuParam +function ESCORT._ResumeMission( MenuParam ) + + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local WayPoint = MenuParam.ParamWayPoint + + routines.removeFunction( self.FollowScheduler ) + self.FollowScheduler = nil + + local WayPoints = EscortGroup:GetTaskRoute() + self:T( WayPoint, WayPoints ) + + for WayPointIgnore = 1, WayPoint do + table.remove( WayPoints, 1 ) + end + + --routines.scheduleFunction( EscortGroup.SetTask, {EscortGroup, EscortGroup:TaskRoute( WayPoints ) }, timer.getTime() + 1 ) + SCHEDULER:New( EscortGroup, EscortGroup.SetTask, { EscortGroup:TaskRoute( WayPoints ) }, 1 ) + + EscortGroup:MessageToClient( "Resuming mission from waypoint " .. WayPoint .. ".", 10, EscortClient ) +end + +--- Registers the waypoints +-- @param #ESCORT self +-- @return #table +function ESCORT:RegisterRoute() + self:F() + + local EscortGroup = self.EscortGroup -- Group#GROUP + + local TaskPoints = EscortGroup:GetTaskRoute() + + self:T( TaskPoints ) + + return TaskPoints +end + +--- @param Escort#ESCORT self +function ESCORT:_FollowScheduler( FollowDistance ) + self:F( { FollowDistance }) + + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + + local ClientUnit = self.EscortClient:GetClientGroupUnit() + local GroupUnit = self.EscortGroup:GetUnit( 1 ) + + if self.CT1 == 0 and self.GT1 == 0 then + self.CV1 = ClientUnit:GetPointVec3() + self.CT1 = timer.getTime() + self.GV1 = GroupUnit:GetPointVec3() + self.GT1 = timer.getTime() + else + local CT1 = self.CT1 + local CT2 = timer.getTime() + local CV1 = self.CV1 + local CV2 = ClientUnit:GetPointVec3() + self.CT1 = CT2 + self.CV1 = CV2 + + local CD = ( ( CV2.x - CV1.x )^2 + ( CV2.y - CV1.y )^2 + ( CV2.z - CV1.z )^2 ) ^ 0.5 + local CT = CT2 - CT1 + + local CS = ( 3600 / CT ) * ( CD / 1000 ) + + self:T2( { "Client:", CS, CD, CT, CV2, CV1, CT2, CT1 } ) + + local GT1 = self.GT1 + local GT2 = timer.getTime() + local GV1 = self.GV1 + local GV2 = GroupUnit:GetPointVec3() + self.GT1 = GT2 + self.GV1 = GV2 + + local GD = ( ( GV2.x - GV1.x )^2 + ( GV2.y - GV1.y )^2 + ( GV2.z - GV1.z )^2 ) ^ 0.5 + local GT = GT2 - GT1 + + local GS = ( 3600 / GT ) * ( GD / 1000 ) + + self:T2( { "Group:", GS, GD, GT, GV2, GV1, GT2, GT1 } ) + + -- Calculate the group direction vector + local GV = { x = GV2.x - CV2.x, y = GV2.y - CV2.y, z = GV2.z - CV2.z } + + -- Calculate GH2, GH2 with the same height as CV2. + local GH2 = { x = GV2.x, y = CV2.y, z = GV2.z } + + -- Calculate the angle of GV to the orthonormal plane + local alpha = math.atan2( GV.z, GV.x ) + + -- Now we calculate the intersecting vector between the circle around CV2 with radius FollowDistance and GH2. + -- From the GeoGebra model: CVI = (x(CV2) + FollowDistance cos(alpha), y(GH2) + FollowDistance sin(alpha), z(CV2)) + local CVI = { x = CV2.x + FollowDistance * math.cos(alpha), + y = GH2.y, + z = CV2.z + FollowDistance * math.sin(alpha), + } + + -- Calculate the direction vector DV of the escort group. We use CVI as the base and CV2 as the direction. + local DV = { x = CV2.x - CVI.x, y = CV2.y - CVI.y, z = CV2.z - CVI.z } + + -- We now calculate the unary direction vector DVu, so that we can multiply DVu with the speed, which is expressed in meters / s. + -- We need to calculate this vector to predict the point the escort group needs to fly to according its speed. + -- The distance of the destination point should be far enough not to have the aircraft starting to swipe left to right... + local DVu = { x = DV.x / FollowDistance, y = DV.y / FollowDistance, z = DV.z / FollowDistance } + + -- Now we can calculate the group destination vector GDV. + local GDV = { x = DVu.x * CS * 8 + CVI.x, y = CVI.y, z = DVu.z * CS * 8 + CVI.z } + + --trigger.action.smoke( GDV, trigger.smokeColor.Red ) + self:T2( { "CV2:", CV2 } ) + self:T2( { "CVI:", CVI } ) + self:T2( { "GDV:", GDV } ) + + -- Measure distance between client and group + local CatchUpDistance = ( ( GDV.x - GV2.x )^2 + ( GDV.y - GV2.y )^2 + ( GDV.z - GV2.z )^2 ) ^ 0.5 + + -- The calculation of the Speed would simulate that the group would take 30 seconds to overcome + -- the requested Distance). + local Time = 10 + local CatchUpSpeed = ( CatchUpDistance - ( CS * 8.4 ) ) / Time + + local Speed = CS + CatchUpSpeed + if Speed < 0 then + Speed = 0 + end + + self:T( { "Client Speed, Escort Speed, Speed, FlyDistance, Time:", CS, GS, Speed, Distance, Time } ) + + -- Now route the escort to the desired point with the desired speed. + self.EscortGroup:TaskRouteToVec3( GDV, Speed / 3.6 ) -- DCS models speed in Mps (Miles per second) + end + return true + end + + return false +end + + +--- Report Targets Scheduler. +-- @param #ESCORT self +function ESCORT:_ReportTargetsScheduler() + self:F( self.EscortGroup:GetName() ) + + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then + local EscortGroupName = self.EscortGroup:GetName() + local EscortTargets = self.EscortGroup:GetDetectedTargets() + + local ClientEscortTargets = self.EscortClient._EscortGroups[EscortGroupName].Targets + + local EscortTargetMessages = "" + for EscortTargetID, EscortTarget in pairs( EscortTargets ) do + local EscortObject = EscortTarget.object + self:T( EscortObject ) + if EscortObject and EscortObject:isExist() and EscortObject.id_ < 50000000 then + + local EscortTargetUnit = UNIT:Find( EscortObject ) + local EscortTargetUnitName = EscortTargetUnit:GetName() + + + + -- local EscortTargetIsDetected, + -- EscortTargetIsVisible, + -- EscortTargetLastTime, + -- EscortTargetKnowType, + -- EscortTargetKnowDistance, + -- EscortTargetLastPos, + -- EscortTargetLastVelocity + -- = self.EscortGroup:IsTargetDetected( EscortObject ) + -- + -- self:T( { EscortTargetIsDetected, + -- EscortTargetIsVisible, + -- EscortTargetLastTime, + -- EscortTargetKnowType, + -- EscortTargetKnowDistance, + -- EscortTargetLastPos, + -- EscortTargetLastVelocity } ) + + + local EscortTargetUnitPositionVec3 = EscortTargetUnit:GetPointVec3() + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + + ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + + ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + + self:T( { self.EscortGroup:GetName(), EscortTargetUnit:GetName(), Distance, EscortTarget } ) + + if Distance <= 15 then + + if not ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = {} + end + ClientEscortTargets[EscortTargetUnitName].AttackUnit = EscortTargetUnit + ClientEscortTargets[EscortTargetUnitName].visible = EscortTarget.visible + ClientEscortTargets[EscortTargetUnitName].type = EscortTarget.type + ClientEscortTargets[EscortTargetUnitName].distance = EscortTarget.distance + else + if ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = nil + end + end + end + end + + self:T( { "Sorting Targets Table:", ClientEscortTargets } ) + table.sort( ClientEscortTargets, function( a, b ) return a.Distance < b.Distance end ) + self:T( { "Sorted Targets Table:", ClientEscortTargets } ) + + -- Remove the sub menus of the Attack menu of the Escort for the EscortGroup. + self.EscortMenuAttackNearbyTargets:RemoveSubMenus() + + if self.EscortMenuTargetAssistance then + self.EscortMenuTargetAssistance:RemoveSubMenus() + end + + --for MenuIndex = 1, #self.EscortMenuAttackTargets do + -- self:T( { "Remove Menu:", self.EscortMenuAttackTargets[MenuIndex] } ) + -- self.EscortMenuAttackTargets[MenuIndex] = self.EscortMenuAttackTargets[MenuIndex]:Remove() + --end + + + if ClientEscortTargets then + for ClientEscortTargetUnitName, ClientEscortTargetData in pairs( ClientEscortTargets ) do + + for ClientEscortGroupName, EscortGroupData in pairs( self.EscortClient._EscortGroups ) do + + if ClientEscortTargetData and ClientEscortTargetData.AttackUnit:IsAlive() then + + local EscortTargetMessage = "" + local EscortTargetCategoryName = ClientEscortTargetData.AttackUnit:GetCategoryName() + local EscortTargetCategoryType = ClientEscortTargetData.AttackUnit:GetTypeName() + if ClientEscortTargetData.type then + EscortTargetMessage = EscortTargetMessage .. EscortTargetCategoryName .. " (" .. EscortTargetCategoryType .. ") at " + else + EscortTargetMessage = EscortTargetMessage .. "Unknown target at " + end + + local EscortTargetUnitPositionVec3 = ClientEscortTargetData.AttackUnit:GetPointVec3() + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( EscortTargetUnitPositionVec3.x - EscortPositionVec3.x )^2 + + ( EscortTargetUnitPositionVec3.y - EscortPositionVec3.y )^2 + + ( EscortTargetUnitPositionVec3.z - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + + self:T( { self.EscortGroup:GetName(), ClientEscortTargetData.AttackUnit:GetName(), Distance, ClientEscortTargetData.AttackUnit } ) + if ClientEscortTargetData.visible == false then + EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " estimated km" + else + EscortTargetMessage = EscortTargetMessage .. string.format( "%.2f", Distance ) .. " km" + end + + if ClientEscortTargetData.visible then + EscortTargetMessage = EscortTargetMessage .. ", visual" + end + + if ClientEscortGroupName == EscortGroupName then + + MENU_CLIENT_COMMAND:New( self.EscortClient, + EscortTargetMessage, + self.EscortMenuAttackNearbyTargets, + ESCORT._AttackTarget, + { ParamSelf = self, + ParamUnit = ClientEscortTargetData.AttackUnit + } + ) + EscortTargetMessages = EscortTargetMessages .. "\n - " .. EscortTargetMessage + else + if self.EscortMenuTargetAssistance then + local MenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, EscortGroupData.EscortName, self.EscortMenuTargetAssistance ) + MENU_CLIENT_COMMAND:New( self.EscortClient, + EscortTargetMessage, + MenuTargetAssistance, + ESCORT._AssistTarget, + { ParamSelf = self, + ParamEscortGroup = EscortGroupData.EscortGroup, + ParamUnit = ClientEscortTargetData.AttackUnit + } + ) + end + end + else + ClientEscortTargetData = nil + end + end + end + + if EscortTargetMessages ~= "" and self.ReportTargets == true then + self.EscortGroup:MessageToClient( "Detected targets within 15 km range:" .. EscortTargetMessages:gsub("\n$",""), 20, self.EscortClient ) + else + self.EscortGroup:MessageToClient( "No targets detected!", 20, self.EscortClient ) + end + end + + if self.EscortMenuResumeMission then + self.EscortMenuResumeMission:RemoveSubMenus() + + -- if self.EscortMenuResumeWayPoints then + -- for MenuIndex = 1, #self.EscortMenuResumeWayPoints do + -- self:T( { "Remove Menu:", self.EscortMenuResumeWayPoints[MenuIndex] } ) + -- self.EscortMenuResumeWayPoints[MenuIndex] = self.EscortMenuResumeWayPoints[MenuIndex]:Remove() + -- end + -- end + + local TaskPoints = self:RegisterRoute() + for WayPointID, WayPoint in pairs( TaskPoints ) do + local EscortPositionVec3 = self.EscortGroup:GetPointVec3() + local Distance = ( ( WayPoint.x - EscortPositionVec3.x )^2 + + ( WayPoint.y - EscortPositionVec3.z )^2 + ) ^ 0.5 / 1000 + MENU_CLIENT_COMMAND:New( self.EscortClient, "Waypoint " .. WayPointID .. " at " .. string.format( "%.2f", Distance ).. "km", self.EscortMenuResumeMission, ESCORT._ResumeMission, { ParamSelf = self, ParamWayPoint = WayPointID } ) + end + end + return true + end + + return false +end +--- Provides missile training functions. +-- +-- @{#MISSILETRAINER} class +-- ======================== +-- The @{#MISSILETRAINER} class uses the DCS world messaging system to be alerted of any missiles fired, and when a missile would hit your aircraft, +-- the class will destroy the missile within a certain range, to avoid damage to your aircraft. +-- It suports the following functionality: +-- +-- * Track the missiles fired at you and other players, providing bearing and range information of the missiles towards the airplanes. +-- * Provide alerts of missile launches, including detailed information of the units launching, including bearing, range … +-- * Provide alerts when a missile would have killed your aircraft. +-- * Provide alerts when the missile self destructs. +-- * Enable / Disable and Configure the Missile Trainer using the various menu options. +-- +-- When running a mission where MISSILETRAINER is used, the following radio menu structure ( 'Radio Menu' -> 'Other (F10)' -> 'MissileTrainer' ) options are available for the players: +-- +-- * **Messages**: Menu to configure all messages. +-- * **Messages On**: Show all messages. +-- * **Messages Off**: Disable all messages. +-- * **Tracking**: Menu to configure missile tracking messages. +-- * **To All**: Shows missile tracking messages to all players. +-- * **To Target**: Shows missile tracking messages only to the player where the missile is targetted at. +-- * **Tracking On**: Show missile tracking messages. +-- * **Tracking Off**: Disable missile tracking messages. +-- * **Frequency Increase**: Increases the missile tracking message frequency with one second. +-- * **Frequency Decrease**: Decreases the missile tracking message frequency with one second. +-- * **Alerts**: Menu to configure alert messages. +-- * **To All**: Shows alert messages to all players. +-- * **To Target**: Shows alert messages only to the player where the missile is (was) targetted at. +-- * **Hits On**: Show missile hit alert messages. +-- * **Hits Off**: Disable missile hit alert messages. +-- * **Launches On**: Show missile launch messages. +-- * **Launches Off**: Disable missile launch messages. +-- * **Details**: Menu to configure message details. +-- * **Range On**: Shows range information when a missile is fired to a target. +-- * **Range Off**: Disable range information when a missile is fired to a target. +-- * **Bearing On**: Shows bearing information when a missile is fired to a target. +-- * **Bearing Off**: Disable bearing information when a missile is fired to a target. +-- * **Distance**: Menu to configure the distance when a missile needs to be destroyed when near to a player, during tracking. This will improve/influence hit calculation accuracy, but has the risk of damaging the aircraft when the missile reaches the aircraft before the distance is measured. +-- * **50 meter**: Destroys the missile when the distance to the aircraft is below or equal to 50 meter. +-- * **100 meter**: Destroys the missile when the distance to the aircraft is below or equal to 100 meter. +-- * **150 meter**: Destroys the missile when the distance to the aircraft is below or equal to 150 meter. +-- * **200 meter**: Destroys the missile when the distance to the aircraft is below or equal to 200 meter. +-- +-- +-- MISSILETRAINER construction methods: +-- ==================================== +-- Create a new MISSILETRAINER object with the @{#MISSILETRAINER.New} method: +-- +-- * @{#MISSILETRAINER.New}: Creates a new MISSILETRAINER object taking the maximum distance to your aircraft to evaluate when a missile needs to be destroyed. +-- +-- MISSILETRAINER will collect each unit declared in the mission with a skill level "Client" and "Player", and will monitor the missiles shot at those. +-- +-- MISSILETRAINER initialization methods: +-- ====================================== +-- A MISSILETRAINER object will behave differently based on the usage of initialization methods: +-- +-- * @{#MISSILETRAINER.InitMessagesOnOff}: Sets by default the display of any message to be ON or OFF. +-- * @{#MISSILETRAINER.InitTrackingToAll}: Sets by default the missile tracking report for all players or only for those missiles targetted to you. +-- * @{#MISSILETRAINER.InitTrackingOnOff}: Sets by default the display of missile tracking report to be ON or OFF. +-- * @{#MISSILETRAINER.InitTrackingFrequency}: Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. +-- * @{#MISSILETRAINER.InitAlertsToAll}: Sets by default the display of alerts to be shown to all players or only to you. +-- * @{#MISSILETRAINER.InitAlertsHitsOnOff}: Sets by default the display of hit alerts ON or OFF. +-- * @{#MISSILETRAINER.InitAlertsLaunchesOnOff}: Sets by default the display of launch alerts ON or OFF. +-- * @{#MISSILETRAINER.InitRangeOnOff}: Sets by default the display of range information of missiles ON of OFF. +-- * @{#MISSILETRAINER.InitBearingOnOff}: Sets by default the display of bearing information of missiles ON of OFF. +-- * @{#MISSILETRAINER.InitMenusOnOff}: Allows to configure the options through the radio menu. +-- +-- @module MissileTrainer +-- @author FlightControl + + +Include.File( "Client" ) +Include.File( "Scheduler" ) + +--- The MISSILETRAINER class +-- @type MISSILETRAINER +-- @extends Base#BASE +MISSILETRAINER = { + ClassName = "MISSILETRAINER", +} + +--- Creates the main object which is handling missile tracking. +-- When a missile is fired a SCHEDULER is set off that follows the missile. When near a certain a client player, the missile will be destroyed. +-- @param #MISSILETRAINER self +-- @param #number Distance The distance in meters when a tracked missile needs to be destroyed when close to a player. +-- @param #string Briefing (Optional) Will show a text to the players when starting their mission. Can be used for briefing purposes. +-- @return #MISSILETRAINER +function MISSILETRAINER:New( Distance, Briefing ) + local self = BASE:Inherit( self, BASE:New() ) + self:F( Distance ) + + if Briefing then + self.Briefing = Briefing + end + + self.Schedulers = {} + self.SchedulerID = 0 + + self.MessageInterval = 2 + self.MessageLastTime = timer.getTime() + + self.Distance = Distance / 1000 + + _EVENTDISPATCHER:OnShot( self._EventShot, self ) + + self.DB = DATABASE:New():FilterStart() + self.DBClients = self.DB.Clients + self.DBUnits = self.DB.Units + + for ClientID, Client in pairs( self.DBClients ) do + + local function _Alive( Client ) + + if self.Briefing then + Client:Message( self.Briefing, 15, "HELLO WORLD", "Trainer" ) + end + + if self.MenusOnOff == true then + Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "MENU", "Trainer" ) + + Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) -- Menu#MENU_CLIENT + + Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu ) + Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } ) + Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } ) + + Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu ) + Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } ) + Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } ) + Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = true } ) + Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = false } ) + Client.MenuTrackIncrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Increase", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = -1 } ) + Client.MenuTrackDecrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Decrease", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = 1 } ) + + Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu ) + Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } ) + Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } ) + Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = true } ) + Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = false } ) + Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = true } ) + Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = false } ) + + Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu ) + Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = true } ) + Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = false } ) + Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = true } ) + Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = false } ) + + Client.MenuDistance = MENU_CLIENT:New( Client, "Set distance to plane", Client.MainMenu ) + Client.MenuDistance50 = MENU_CLIENT_COMMAND:New( Client, "50 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 50 / 1000 } ) + Client.MenuDistance100 = MENU_CLIENT_COMMAND:New( Client, "100 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 100 / 1000 } ) + Client.MenuDistance150 = MENU_CLIENT_COMMAND:New( Client, "150 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 150 / 1000 } ) + Client.MenuDistance200 = MENU_CLIENT_COMMAND:New( Client, "200 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 200 / 1000 } ) + else + if Client.MainMenu then + Client.MainMenu:Remove() + end + end + + + local ClientID = Client:GetID() + self:T( ClientID ) + if not self.TrackingMissiles[ClientID] then + self.TrackingMissiles[ClientID] = {} + end + self.TrackingMissiles[ClientID].Client = Client + if not self.TrackingMissiles[ClientID].MissileData then + self.TrackingMissiles[ClientID].MissileData = {} + end + end + + Client:Alive( _Alive ) + + end + +-- self.DB:ForEachClient( +-- --- @param Client#CLIENT Client +-- function( Client ) +-- +-- ... actions ... +-- +-- end +-- ) + + self.MessagesOnOff = true + + self.TrackingToAll = false + self.TrackingOnOff = true + self.TrackingFrequency = 3 + + self.AlertsToAll = true + self.AlertsHitsOnOff = true + self.AlertsLaunchesOnOff = true + + self.DetailsRangeOnOff = true + self.DetailsBearingOnOff = true + + self.MenusOnOff = true + + self.TrackingMissiles = {} + + self.TrackingScheduler = SCHEDULER:New( self, self._TrackMissiles, {}, 0.5, 0.05, 0 ) + + return self +end + +-- Initialization methods. + + +--- Sets by default the display of any message to be ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean MessagesOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitMessagesOnOff( MessagesOnOff ) + self:F( MessagesOnOff ) + + self.MessagesOnOff = MessagesOnOff + if self.MessagesOnOff == true then + MESSAGE:New( "Messages ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Messages OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the missile tracking report for all players or only for those missiles targetted to you. +-- @param #MISSILETRAINER self +-- @param #boolean TrackingToAll true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingToAll( TrackingToAll ) + self:F( TrackingToAll ) + + self.TrackingToAll = TrackingToAll + if self.TrackingToAll == true then + MESSAGE:New( "Missile tracking to all players ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Missile tracking to all players OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of missile tracking report to be ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean TrackingOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingOnOff( TrackingOnOff ) + self:F( TrackingOnOff ) + + self.TrackingOnOff = TrackingOnOff + if self.TrackingOnOff == true then + MESSAGE:New( "Missile tracking ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Missile tracking OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Increases, decreases the missile tracking message display frequency with the provided time interval in seconds. +-- The default frequency is a 3 second interval, so the Tracking Frequency parameter specifies the increase or decrease from the default 3 seconds or the last frequency update. +-- @param #MISSILETRAINER self +-- @param #number TrackingFrequency Provide a negative or positive value in seconds to incraese or decrease the display frequency. +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitTrackingFrequency( TrackingFrequency ) + self:F( TrackingFrequency ) + + self.TrackingFrequency = self.TrackingFrequency + TrackingFrequency + if self.TrackingFrequency < 0.5 then + self.TrackingFrequency = 0.5 + end + if self.TrackingFrequency then + MESSAGE:New( "Missile tracking frequency is " .. self.TrackingFrequency .. " seconds.", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of alerts to be shown to all players or only to you. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsToAll true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsToAll( AlertsToAll ) + self:F( AlertsToAll ) + + self.AlertsToAll = AlertsToAll + if self.AlertsToAll == true then + MESSAGE:New( "Alerts to all players ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts to all players OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of hit alerts ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsHitsOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsHitsOnOff( AlertsHitsOnOff ) + self:F( AlertsHitsOnOff ) + + self.AlertsHitsOnOff = AlertsHitsOnOff + if self.AlertsHitsOnOff == true then + MESSAGE:New( "Alerts Hits ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts Hits OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of launch alerts ON or OFF. +-- @param #MISSILETRAINER self +-- @param #boolean AlertsLaunchesOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitAlertsLaunchesOnOff( AlertsLaunchesOnOff ) + self:F( AlertsLaunchesOnOff ) + + self.AlertsLaunchesOnOff = AlertsLaunchesOnOff + if self.AlertsLaunchesOnOff == true then + MESSAGE:New( "Alerts Launches ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Alerts Launches OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of range information of missiles ON of OFF. +-- @param #MISSILETRAINER self +-- @param #boolean DetailsRangeOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitRangeOnOff( DetailsRangeOnOff ) + self:F( DetailsRangeOnOff ) + + self.DetailsRangeOnOff = DetailsRangeOnOff + if self.DetailsRangeOnOff == true then + MESSAGE:New( "Range display ON", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Range display OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Sets by default the display of bearing information of missiles ON of OFF. +-- @param #MISSILETRAINER self +-- @param #boolean DetailsBearingOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitBearingOnOff( DetailsBearingOnOff ) + self:F( DetailsBearingOnOff ) + + self.DetailsBearingOnOff = DetailsBearingOnOff + if self.DetailsBearingOnOff == true then + MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll() + end + + return self +end + +--- Enables / Disables the menus. +-- @param #MISSILETRAINER self +-- @param #boolean MenusOnOff true or false +-- @return #MISSILETRAINER self +function MISSILETRAINER:InitMenusOnOff( MenusOnOff ) + self:F( MenusOnOff ) + + self.MenusOnOff = MenusOnOff + if self.MenusOnOff == true then + MESSAGE:New( "Menus are ENABLED (only when a player rejoins a slot)", "Menu", 15, "ID" ):ToAll() + else + MESSAGE:New( "Menus are DISABLED", "Menu", 15, "ID" ):ToAll() + end + + return self +end + + +-- Menu functions + +function MISSILETRAINER._MenuMessages( MenuParameters ) + + local self = MenuParameters.MenuSelf + + if MenuParameters.MessagesOnOff ~= nil then + self:InitMessagesOnOff( MenuParameters.MessagesOnOff ) + end + + if MenuParameters.TrackingToAll ~= nil then + self:InitTrackingToAll( MenuParameters.TrackingToAll ) + end + + if MenuParameters.TrackingOnOff ~= nil then + self:InitTrackingOnOff( MenuParameters.TrackingOnOff ) + end + + if MenuParameters.TrackingFrequency ~= nil then + self:InitTrackingFrequency( MenuParameters.TrackingFrequency ) + end + + if MenuParameters.AlertsToAll ~= nil then + self:InitAlertsToAll( MenuParameters.AlertsToAll ) + end + + if MenuParameters.AlertsHitsOnOff ~= nil then + self:InitAlertsHitsOnOff( MenuParameters.AlertsHitsOnOff ) + end + + if MenuParameters.AlertsLaunchesOnOff ~= nil then + self:InitAlertsLaunchesOnOff( MenuParameters.AlertsLaunchesOnOff ) + end + + if MenuParameters.DetailsRangeOnOff ~= nil then + self:InitRangeOnOff( MenuParameters.DetailsRangeOnOff ) + end + + if MenuParameters.DetailsBearingOnOff ~= nil then + self:InitBearingOnOff( MenuParameters.DetailsBearingOnOff ) + end + + if MenuParameters.Distance ~= nil then + self.Distance = MenuParameters.Distance + MESSAGE:New( "Hit detection distance set to " .. self.Distance .. " meters", "Menu", 15, "ID" ):ToAll() + end + +end + +--- Detects if an SA site was shot with an anti radiation missile. In this case, take evasive actions based on the skill level set within the ME. +-- @param #MISSILETRAINER self +-- @param Event#EVENTDATA Event +function MISSILETRAINER:_EventShot( Event ) + self:F( { Event } ) + + local TrainerSourceDCSUnit = Event.IniDCSUnit + local TrainerSourceDCSUnitName = Event.IniDCSUnitName + local TrainerWeapon = Event.Weapon -- Identify the weapon fired + local TrainerWeaponName = Event.WeaponName -- return weapon type + + self:T( "Missile Launched = " .. TrainerWeaponName ) + + local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target + local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit ) + local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill + + self:T(TrainerTargetDCSUnitName ) + + local Client = self.DBClients[TrainerTargetDCSUnitName] + if Client then + + local TrainerSourceUnit = UNIT:Find( TrainerSourceDCSUnit ) + local TrainerTargetUnit = UNIT:Find( TrainerTargetDCSUnit ) + + if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then + + local Message = MESSAGE:New( + string.format( "%s launched a %s", + TrainerSourceUnit:GetTypeName(), + TrainerWeaponName + ) .. self:_AddRange( Client, TrainerWeapon ) .. self:_AddBearing( Client, TrainerWeapon ),"Launch Alert", 5, "ID" ) + + if self.AlertsToAll then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + + local ClientID = Client:GetID() + local MissileData = {} + MissileData.TrainerSourceUnit = TrainerSourceUnit + MissileData.TrainerWeapon = TrainerWeapon + MissileData.TrainerTargetUnit = TrainerTargetUnit + MissileData.TrainerWeaponTypeName = TrainerWeapon:getTypeName() + MissileData.TrainerWeaponLaunched = true + table.insert( self.TrackingMissiles[ClientID].MissileData, MissileData ) + --self:T( self.TrackingMissiles ) + end +end + +function MISSILETRAINER:_AddRange( Client, TrainerWeapon ) + + local RangeText = "" + + if self.DetailsRangeOnOff then + + local PositionMissile = TrainerWeapon:getPoint() + local PositionTarget = Client:GetPointVec3() + + local Range = ( ( PositionMissile.x - PositionTarget.x )^2 + + ( PositionMissile.y - PositionTarget.y )^2 + + ( PositionMissile.z - PositionTarget.z )^2 + ) ^ 0.5 / 1000 + + RangeText = string.format( ", at %4.2fkm", Range ) + end + + return RangeText +end + +function MISSILETRAINER:_AddBearing( Client, TrainerWeapon ) + + local BearingText = "" + + if self.DetailsBearingOnOff then + + local PositionMissile = TrainerWeapon:getPoint() + local PositionTarget = Client:GetPointVec3() + + self:T2( { PositionTarget, PositionMissile }) + + local DirectionVector = { x = PositionMissile.x - PositionTarget.x, y = PositionMissile.y - PositionTarget.y, z = PositionMissile.z - PositionTarget.z } + local DirectionRadians = math.atan2( DirectionVector.z, DirectionVector.x ) + --DirectionRadians = DirectionRadians + routines.getNorthCorrection( PositionTarget ) + if DirectionRadians < 0 then + DirectionRadians = DirectionRadians + 2 * math.pi + end + local DirectionDegrees = DirectionRadians * 180 / math.pi + + BearingText = string.format( ", %d degrees", DirectionDegrees ) + end + + return BearingText +end + + +function MISSILETRAINER:_TrackMissiles() + self:F2() + + + local ShowMessages = false + if self.MessagesOnOff and self.MessageLastTime + self.TrackingFrequency <= timer.getTime() then + self.MessageLastTime = timer.getTime() + ShowMessages = true + end + + -- ALERTS PART + + -- Loop for all Player Clients to check the alerts and deletion of missiles. + for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do + + local Client = ClientData.Client + self:T2( { Client:GetName() } ) + + for MissileDataID, MissileData in pairs( ClientData.MissileData ) do + self:T3( MissileDataID ) + + local TrainerSourceUnit = MissileData.TrainerSourceUnit + local TrainerWeapon = MissileData.TrainerWeapon + local TrainerTargetUnit = MissileData.TrainerTargetUnit + local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName + local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched + + if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then + local PositionMissile = TrainerWeapon:getPosition().p + local PositionTarget = Client:GetPointVec3() + + local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 + + ( PositionMissile.y - PositionTarget.y )^2 + + ( PositionMissile.z - PositionTarget.z )^2 + ) ^ 0.5 / 1000 + + if Distance <= self.Distance then + -- Hit alert + TrainerWeapon:destroy() + if self.MessagesOnOff == true and self.AlertsHitsOnOff == true then + + self:T( "killed" ) + + local Message = MESSAGE:New( + string.format( "%s launched by %s killed %s", + TrainerWeapon:getTypeName(), + TrainerSourceUnit:GetTypeName(), + TrainerTargetUnit:GetPlayerName() + ),"Hit Alert", 15, "ID" ) + + if self.AlertsToAll == true then + Message:ToAll() + else + Message:ToClient( Client ) + end + + MissileData = nil + table.remove( ClientData.MissileData, MissileDataID ) + self:T(ClientData.MissileData) + end + end + else + if not ( TrainerWeapon and TrainerWeapon:isExist() ) then + if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then + -- Weapon does not exist anymore. Delete from Table + local Message = MESSAGE:New( + string.format( "%s launched by %s self destructed!", + TrainerWeaponTypeName, + TrainerSourceUnit:GetTypeName() + ),"Tracking", 5, "ID" ) + + if self.AlertsToAll == true then + Message:ToAll() + else + Message:ToClient( Client ) + end + end + MissileData = nil + table.remove( ClientData.MissileData, MissileDataID ) + self:T( ClientData.MissileData ) + end + end + end + end + + if ShowMessages == true and self.MessagesOnOff == true and self.TrackingOnOff == true then -- Only do this when tracking information needs to be displayed. + + -- TRACKING PART + + -- For the current client, the missile range and bearing details are displayed To the Player Client. + -- For the other clients, the missile range and bearing details are displayed To the other Player Clients. + -- To achieve this, a cross loop is done for each Player Client <-> Other Player Client missile information. + + -- Main Player Client loop + for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do + + local Client = ClientData.Client + self:T2( { Client:GetName() } ) + + + ClientData.MessageToClient = "" + ClientData.MessageToAll = "" + + -- Other Players Client loop + for TrackingDataID, TrackingData in pairs( self.TrackingMissiles ) do + + for MissileDataID, MissileData in pairs( TrackingData.MissileData ) do + self:T3( MissileDataID ) + + local TrainerSourceUnit = MissileData.TrainerSourceUnit + local TrainerWeapon = MissileData.TrainerWeapon + local TrainerTargetUnit = MissileData.TrainerTargetUnit + local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName + local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched + + if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then + + if ShowMessages == true then + local TrackingTo + TrackingTo = string.format( " -> %s", + TrainerWeaponTypeName + ) + + if ClientDataID == TrackingDataID then + if ClientData.MessageToClient == "" then + ClientData.MessageToClient = "Missiles to You:\n" + end + ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. "\n" + else + if self.TrackingToAll == true then + if ClientData.MessageToAll == "" then + ClientData.MessageToAll = "Missiles to other Players:\n" + end + ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. " ( " .. TrainerTargetUnit:GetPlayerName() .. " )\n" + end + end + end + end + end + end + + -- Once the Player Client and the Other Player Client tracking messages are prepared, show them. + if ClientData.MessageToClient ~= "" or ClientData.MessageToAll ~= "" then + local Message = MESSAGE:New( ClientData.MessageToClient .. ClientData.MessageToAll, "Tracking", 1, "ID" ):ToClient( Client ) + end + end + end + + return true +end +env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz b/Moose Test Missions/Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz index c30a01530d09674af9a3517586e45b382cce20ff..bc0f5b2f8908d495c6c8bf12fb4afa61c185dcd5 100644 GIT binary patch delta 106521 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

VVGY5AB&LPT$L$J1H@x9V;+ zv|gR(&?~n7&b51Gm68q14rJ%TtMOYQV5r+5`MjJKlf}&zP=J!4XZ*f@sVklb(PZ7+ z8K5+k_;U8zo42Gtd$3WdE!50#o7K*6p;uv+1&KK*-!t287UtdhEytvynu++Q$GdChoqr=wJVYLGEX()Emv(CMgq ztTFj3c&8#Oyn|Dmo9Y8Ji8IU&r&;zG2&r7(ni1qWM~_=OavU)8u08~pq!eWhNA>peAf^xLblfb@*fgo&}eSIDRIMuQsh^ zoiz=(B!daF$uP=)j_6l&?yFKP73`&c-SZW>GY2LK8vzYm8ps z&?KeT-~m=*qGe(CIG_&547l}HDn?}KHR$C*&Ee;3{ug#R2gl^5b~Zfztj16PdrPM- z3nz!r+vCW8Cg;uj`D!s11e{Q7 zsh#bgeq199BObldv;ySf7j@G1zOR;#$=EO>XX^ zhb!R*FdmzCz=W(_Idn#KHxv@+7KtR#&X?a@O?+lDUToj?cblziwg%o>HK0Cee|Xql zmoY``B={R#xx3zLHCt@GOv4FOwEO6NG(4-B89$p=#%$@*aa4v#9-3arv6q=iSSI#R+NhUB$foC-y&kW{l~%($pd56On~M0uh9W<4gpaH`1eMve8jf=zTlsOK2V78D($*<911 z^rotcF>G5`DOLC#mEpuKsVl83_=-!SzDNRBNnt{RW!ctr7}pR$f2Br2loqKmZQHY< z$(o4%J9HV>yQwmhvZ~D@oa?GHw}d?qUlir%xP*p_R7>oS@<;TXan~w3fh9U8yGMP~ zr$5GnX1AB8yn|O!%{|sx$|5xF9o*2IP5T^lJ4`A8-6~yAC}7an>!qMz;DQdg)eraB6KWM%* zFTG&%(v1&>h&Q&IvwAdqX{Wl;QStJ2s_$oQELE)s#+QbwHez<$hAQlI1F)-ss{H**Zqz~*-IRff=gB_)kEc7=NCoaw|5`KEe=|lj^W|2x|9Bzf#`= zF*was5->>Ts@pe`BV#qskR0{|J*__EB$d$H+}xsndz3B{>+Cal_@?rfF}*i8-$_oO ziSY3}Ihhtk+1FU#e)oe-2t}(9%pT{nj`cs-gkI}2=C?ioP#PAN=mrY_DL6SXfLzl+)!I~z4t8}QyXio9skn5b&F*uzHF$Lf{1(ri%__5I? zl-P0ZobYndZZ?M;CmNo>If9oVW)z{RF5;JoOINS3g`|_4qYFG3#7+tepX^)ne!5bL z=}E=!_!RV~kRZ{NEw%g?2CcjYRzY`GJelMre`EuiiZw? z;W`fU0SK86KAFc4?VUs;JX zehfy#j(K7TpiC$F&H{jqZsV*?r#Z?jn7!qD- zVqvOXH^L_@P|b`U=+1_b>zw=gC)3vh|9MJ@i^xL+y|$9(Gx+K1sUI;h>AAC*z-4_I z0@y6`tUsb7vL0I^9NQ8Z*TgLj$xj@R1)X+7cMCQ)XbyqFFrCAIksrfs zL@PnQfmzVFC97oJI(@sSzObg7DrEv_u#lR>LQm7#FAVkgg&}!*y~ZmV5G6@p5MN*S zo?w?k>huLE`GgEk{Tc*~t%fgjf1}#(6sHt2(Jul7gbz~vXBmE|TT|Md$TmFK@Pof> z@S75Tby+BAd%zrcyrLz36u}^B?+`ig(1c*{Cir?cqnt>V$6d(|HeK>P`XtL+4uok~ zNkKFIX6(Xc=5S~<5H^Q$+d%Tg-p_0S2MPCJbZ8MVQ|h}JZv7S;mB30`fAusDNqU1J zk+%6CNY~lxG5+!E$l`Qmo%KkJN2-F<;p{LTdrXa1gcw@vlSZp*qo-QU?0-%uG0~OpIi1zY6NvkZB z&Q`}@mI>=lnTjkEt2-@mL;~s~dO4_yCfNxfpV&dXwPklW$>#+>&_mB`Q)Y!Bm8xuR zDyCJ`W9YpIN~^6l8;5Wm3#g6-`7(U_C6Es5VP4Dalps^T!&_2OfB*6R4mE{1I96|> zn1r9c-QOEx;;XN$5#Lc5AM_-z7h?{{YVmC`%goqoQa>vyEyR*D9(@Y8`xV%=!*8Ap z_3yRu~0@e<=&BUC)2dVa#)NDKiuEl zKftnURQ1z?;c(AIe{nGS^wZ&iE(g1YXU|~eN*Es&)1pj1En$}~IJTo_m|&=Zh~pM5 zZ2%r*6B}HaO$@N7a0l6H+PiJQJ$(-9X#@Nn5`96t(0Mdn2)u8GySw{O1>y&d5UGW$0)88LH`K1s?#Z0P_qfD-6T7k7U$W-s2x|+V;;;L^kzMpWlk1T z+$d3lv1&e>Y`{fj_`r0LbU_C^Ni__aK8+BS*b%KY2D>*B}&urbIeP5XcI!n zcD;)&+y-X+#=}bmsW?(b@H;@M@XLQn0^nOnq#EviQUdkb!{)1&glX<-z; zrku}Bw5C*zjzsy{Sy`mV_`a4Yo+x0CvNM=vFb8T1f6_T^v2%qfg$7h}-JVH?LI2Bh zm&~K{Xj10C5e}N?^n><#oMw!UkwV7OCZn5lXx$tm4Noh#Pikz>Xu3&)z@-m-;N0EZ zB~Z90tfP{g`}oW8VYIh@h>DZ4_24+h)|1JUQ+uby5p;cz%`B0%VvzRJv4-2&xJKT9 zH}}LTe^B;Mw#UP*(G2t#UUQ?wIBI|tk^Ny!o&avdBVoq4cv7FK{Tyhh($=RLXXBfJquC_;qdy=Rh{Odz0`DemjjC-NCi(*l zxwZ_zd>2A^kTIJf){DZVEDBad<1LAf^Eu2ve`b*bMlaGsD9Hcf$@bGdRFZHPZtdm} zf5!tzh&2^0X|+%EI|vpqS+5g4@nV6JJ`E}a{)baqggJP!LZ>P$HgQyuYGPrOHQ44{ zT>?A^{2J{g#R5dZ0R)t|HGl}_&V9hmA{4AOrm>e#f5qI{q^B%e%s$muUW2Fv77+i2 zrCrIFa0m(-f@#w0s~wUWWZB>>-OL@#fBfW8RJ8{49oaCVAjNDE@L))MN=fw0hjvxO zZeON<_zJ&J~X=-cTtotTmC0M3_MD99F+bifN4$2VucpT~vF; z%#s-V$E8+%$*s8!I!U&XLX#Wwz#ZvU3%Q@r$)^b92Y!NRnqs`TxKQ$Pe0AVc1W8qXmU%T)=r!55L( zPvg2<>Ry>yD)lg=F3GQ$Cz`Z@VfL2_`!t(~Oj#ox=ZaL27Oofvu}H^}kgBxRK2_XT zLBTGw)4FOOat_O_6VqzQzRF;0e=*IT6qTc-i1-NxzW6FTez&jc)oUblu;M4)!_^m8 z@tK+6&hmlPNeNpc5;Q|3WPZRR+$JUGdexRv2lIBe?_rK@RJ=EJcCP~kO}bs{4QBAD z-j!Z7gRG{PfbGEM;1X1mSGG{@3#=%;{FO<{kuO|$nqCzVvwAx6*U|%Ae=tI!z$Wh= zrA=XmeNJVu=ObDiR)7_qM6OE&f)e1iXB8uvi{b9Sp59;D^&QETZg1>$8Q}x#1YHSI zm#!Dca5WZ%l5Ve$ne{<&c?X&b(!O8~YHUI#H=>`1HlahaHVSO=oPtoM>#`SYVYlCO zwBhlVE!1*MZ_)JbOMb9_f8Ki2!D@R8Ehn?;?e{yGgm0tg$&`NU&8I_v8*crQ5f4Y? z>uW#G10CCsBi?QFKIr|exBYhXp5*@4+x{ZtKGb?XrMdOy^9j=px4+TIMVq$HmM*bg zMprgn-5*@VNX4i-nW_{nsi09wN(fWf92H)5wl_|37l;Ae-IxoYe}Jvrz$I|?6LI+N zQAUrBw-2`uzZ~l$?L9t0-;D8NcYpiQkWQWH^UFPx@Q%p`_X#}q#dAx2jLwEM9bQik zGq)#-mvG!<0Dw*g(GfoKP!$|_8UC&2c;K}Fi7C+~zJhHE zZzrM=fj|hSDV)2df3`~oAg#0AI)@>DRsLxmxUhYx&9M%q5xCkpP7CPjFh|w0?Qc@q z$+S;YYSHK|xL88I82tEkB)f1_C!VzS9i(DLOBVM{Nt zBbS`HIh46FgH@TVmUHXY{_K+?EhlaIJc>-Oe+8p~m>(#k-fqa{AG#8M;y5gMG@wfG zcol8Wp`LNAAU|u>07HqXKck%VwTN5ilIFUg;!YKyy9eVb-j{GcuGrfE^9xe*;;S7*oGMX(SjZ|U0SEy zJt{3>G3o~&Qzi#yFfGINvO&@2)k6CNb4P-1uI8 zkCwPDeUjU9QK>#ih!3+bY$J1$~7E=*TZ=sO{K{u@uh)eAOHY1MCr zCCiSQH;|+~{H|VLJuzWnABrO=+8UxhqyrlE zFB`;sHGvPzp*)LnOmuK5_V1h&8C}}uT`=#Xe{U8CE7Ds}Q7#zlo&#=I?{7wyyt`&4G1hjnF)vS4Yy=;PwItV40tuwV^M&Q&_!t*uxf z#Q>F<@$Hh-XsP6pB33Uoa$@@X{50Mzj>F=7I-5@_l&h+T+pf=tTd%r91D=^&A- z%3ixjV^19I>Yflpak9f)G5gyys7^aw@yyRpV7bt;)4v zel~&?0-5UXUgy8}?!zuY1`_P3f7v8CTIAEo(z9xHdu9cxN|6| zYM%Os;Pp`%*JuT73!on150pEsZrt`g=0EWJV*^IrdT9k%D%h!1hpTk%e?bei+mBZQ zrwDT)3j5SLt_APGbL}&W`Q5pX0J^dN-X++7??1}^PqrU^eiiOx{U+w)VBjS!k$tJ) zrv7JTf9GI-?@F>y06MY%-X+-oUzL5FF|NY>hXC+kd$)JR_5>Ru^Vmv?_@#trG`j}Z zj51?yY#4ef^&rBITDkWve^LtsnZ-?eE^gmN>^&28FM3ZkVEpj2;iE5ihX-<1ExrT- z1)IX<$>PJj?Cd6?Pn({=!U7(Z zZa8m}0^t)U$!~cEq&|rGt-P9E$N`g_w=^BVx(+W_I16gx-_r9SW`#>7OfqD6cU;zB zvN;BiHOMGHn4UeKf1Zn;*lqB&C1gOCVbZIr4OyJ;!J)>OLLNi?Th?t4*`15mV%_vm z`1h~1x$~+gYAesOigKwVRm~*X{@g|%Gxm_;PhQdK7OI1Sme?WcfGfq=_^|4Z6j9GTs z+T{LC7^PK5yfjOU7%I8+&d$ zb0S-`x)>8TeiXqwb;k{JmE7P_>J!8gHN0hnsYwZYTPbO5sGbg<@#AsMQ5?Q*Q# zrO)qm?(=)y`~2SjuFu!Hb~>7$FWcwFbluK!%4*)lZrZHoQo~LDU#fYh4o8dkrL~+Y zcj)qaoxA*A_b&hcX?e#k$LarNkN?Yi+!#5e_ndQ!f520O-A^kFkap)3?N2F!fFnGh zxZJse+KOK9$-`Bx1J|>umy%1i_s;I#xR}!0vzCXY2TSh$M0ihjm_l)J4Wh@m3-COG z|Cv`?qj5p+zdqBUq3H2o&cru;T^FQmhQ>*8ifq0NBxG-+UlExO3L1ByBmtG%y^K`V zX5i9=e|57)_j3&;OfTSM1Dfkq61|X$c8*l0`t@TFJONRoM?dH+U2jJmgx}_vfvR}t z4C7t6yMs4g8c!OeNYhz^lxTS%Aa_Na_iLrtLwwaABZp(t?#OMIHq@#!fL8C^l00xC zdFOd9`83Hm9?bHBShD<9j5st3fq0eQN#!>;f0?*I`0Ll-+UcD!UG3%*MT)9zJa)uKrF}ltAA# zT4bd5i)WRvl3NuRlWHj-8TX;!O$}4Fe*s+IHdHeo{PSH;#~tYJBPWZY-DL-2u4!+1 z^L+`k&o%Vtb#AN-FJHvg>Z+bvowh%CT~I&VJwC7I*(pv~lf1(CvO0%j-f)vEofA zDuAMTUi>}_BB09Y%nmuskxl8EFzqr(RInC=l>xO5fX^q;;QSW19m7`3V+;ybN13=Mn%xe>W)1!Vt%g zDK654sd_vdkI@+L@n5hTyyy=?>~kzBRlT0R%D$qqh=Nz&o zuV7SQa-^%2B$rurmH|xC(&PM$WX29h)D-(jLpsde@ zDP*Z(JjS6J4p*E38S1fq;%Lh;6Dg==uZ{!WeGTJa8HH?(hYY}s?EdB|WJ5?TPIT0X zUQELfa<2C@pLs;Ee>UB3Y^)kkyR}qsa>A`*wR-dciK+3Q?i~Uu8Lzh@e0-eV-1xni zy~dV!?g3yZWda5mg}{%GEFRTsz1ZhB&>Iu4Y3z2o+b2M}S`&f89}Y?x4o)ek@hqLr z&w)F~DUOHd#bO;YFfu1;eg?QPv5ZjL7U=GUL_OhZOpW4)f6!z1fk)FrP-)Qp#WbZc zH`XYB#v%DRzL=^))b}*t)mYx?hJ{<#29cf`9O(8S9oL85xIV&}gtm6+rl&tIkM_d4 zW&RXba?vTEmkiCs@dS%{KM0hJ5 zuJ}6pEXYGeLXVz;Iji*yjE$#y@5r7*t@4F_Ug4|2f1qk6bUCEJxs1|%i=?>&4^VD) zD7=bjE_|PX^GD+?x1N=+2D=wCtZqpFGmC^5INUBJpeXTA7qr*V==R92wT(C3(=V(? z1I_6mW#OWsX<178r(o`bwvErsSr|r-Lic+lA7_l_n% zm8jFqkm^~X<)lE%aiPK%Pt5X{+EVSsthGVrkyCwp=(w9S-6gKoDH4jkK}E8HhH9}4 z^({H6axkz_a|V|Z{)5c27$;Gq@ZYHH<9<<^e{|P2nZSDBQVY4iU5f4w!)o*hwVuRt zPSjoE0qi9NKJ6gtlp*EuK+xH^oG9Kb=5PQ3{FSW?#q$7~kZJmf&DkU^A?LWv&uH16 z;XwpygWIl)92N4wGy2v}s2`ZKY04MMRa|9C7$@lWE<1_m;3t zf9<=Y%UH{Xzj9!^^w8qsxqV~w79EW_v*4W|;TBm^BS6UWRG4xuvDBm?p-n*|zxf53 zz$x$-Uk<+v90f}z$g1^a4uxf#$v&bnBsxmV$?Ei1I3b`^{~Tl|WmY{O&E{G8TROd> z^}G)4BC?-wt>-?dmsj45RQM5}HtKsde^7YIog1q0ld7W61NAFjcpYXl4z)Cj8c>Dq z-!vj=1m8TKv2UyC7J3Yxtv!o*aSG!iexB1Jt1c_L@nzD~uXPgp#t(caFDvk*m7`q1 zB8FTt#HJ$Cvh-8)GG1-jo>EY^qRQZ*+=6`q_<7t^UtZ}y+>Y2WLZwttae#iNe|Qq; zNGaGz+=NHzJVjtkL-~-pwkHC?W7E?eD6V!=-xN!j+ zJ5QiB@5eeoLGls!tO&DhqB*8dbG$|#e^+N9-NtD|L>px#!>J|*-@M=Q$pYGUY{d*nNvb*a z0z2?bP_$Xlr88ZCa;#C2F0ii^@3~}RVA4KO>sYBHu+Rz1oNr)}AjUqUOy{b;D3tr= zQ*0*$)k(6uDwEXgq)Jr7*QM3g)cUzit*P|t3YvrOrg{;b|9bselL#pMe^^=sU`32c zb#OiB&Lg4>t~|TvjvVIUdZ&e!qTFI$;C_;#ji-qp@`Ku$jCsUajM~aX!X%AUbevk3YY#6CRJoEn+mu z@M?8dI*z)GkyFwIKKU5!O!3+dpoCjh(|`l-f!cK7Ml!&Lke?nQTTcI3$#nkZ> zMrwUOVd!{D=8a$!Iqt!f(~B|v@%U3L0-ki3vBxhS9F87CMf5+sph7zb*r$6BzoDWg zs&ur!_mIlPV4{06+&+Zg8~0Tm{15RlSn7JlNIz8!7YK_HmT<8%n;oB< z6eVfq9;}@x8%20`f6vYslUpk9d)-v+!egiJ0E?dM4DX^eahaw13VYu{Xs_pE8UB$S zFXmZai)kzuH=z3wVDP?8i{Q5cpWd!miXmK=0H;fdi=yVcKtb}9uzqqd8t#Pr*(rmr z;fcIbI{5dVh`_S!tzj+6#T1e``h+$sN!#=?^ni_!>J|~9f3Lj=U>#ou#AVIV1opvN zUt$YTLgAP&g)HxQM)l6?YDm@JtK7e=eCp5Fag3&4u8H)hD5hCD3$mz%{5sO>vJXzZ zuq}f&P%M^m-WF=NDzE$107z;Xk#vPGAl{Vis+K&C5@0|ZC2={>Ub&QcQG$!RbmC$o z+$30ANRB7;fAwhOo95NowJt1D)lq@;3+i<(hyNWM2InQp3C&A@yPUgvuICrYmf3~A zMa`Y$l}b)T+=`M1=;){e*P~SV3H?s+f4al9cxW|Kb7tQ!$&vny%9$Y0Z}S>}-c>q1 zg_RksVnoI~xa$a$ZVd{GJ-V7gTZm+x@U%x`o^DD+e-^H!=+r;$6?Uh81)X25=(;_k z<&xY@#i>d+{gy;gcctt<@l8~DpT<*pw@}a5Nw>fq&`gV(HtKZU`l;-Bctw`uYdnhO zLu?nUHk4Q;CSU9pCTYvQ8Z62}GFP8D4>EkMj#kRH&*rEyFWJd^6!wfvi24e4+hwZ7 z=Qc`me?598qD(Z^1$neLI$SBpSST#WQs6F3F+$C)Of*W6N8puVU4{p7t|!%n+RCb& z4;F6mnD7A65LQc6Z}!M6VV(B6T7(s~7Fon=EtC(}iWr9B6Z=;Uz=a`K5^E0(3DGSc zSg7^+3!J>_N+oIqA#D!BMheLetqAF5Ls=2Ne;-|Vh64hS7~4g{HVRodYABwj8q6KG z`||vu2ZPjz@TzwsoW7ISp!*)%(c8$ra|2F9bVG-8wQ!jcG;tJR=;4dXVy zcNsj)%PSq|c*@d7!e`X0oo+yJo){Npe+fYAa{r+Im@7VFM6mRmt}9-0Z9zl~{$ngm z+_lj%g5(xbxD=4QVtMl267WCB3x9PKlyP+gCh|=fwwxdGTSi=L45uUPawLaRwTuU0 zfLmMwgx@=xkX$y+`oaQNv0?3WU}Yicx`s4~8Hme<)E} zE@uTbO%;4MzJgd`Eq0XjxF|~ak@|PJY?5F6l0hMEF~?h6A@Nu}4S9y8-qVaWnIO zdKA|H?QvpucXj&;KWu9|HE|I}!~Be_?mkDvWPXy{E)qfYR6bP4BlhuL(fe*cDkbb29vT_%OkC5s;YvFQGPQ$rjwQ2#8iY4*NyXJGDK? zPg-mZlnbQ0Nt)EAbj#qk3?wu5l10n|3>#=jb7?|4-!bBwXyA0RQjEeZk>kI1(0P@KKp zIwfcXBP@BCRda7GiG}QgVUb5^ZmsWQmw&OvsW_}~N_n`9Ix$(=`Z`MTxJ@?S*Li{+ za@yd$9E(uTJsz>jwlI5`iFMd;sxJ9W29Fiij%>meY1G-Ce@t3fJBD}RY@P_|cr5?w zD=XK{P^5XyxVCi3xOQDD#)J>`qolk<=h-PDy}&PJf#2V`zd6A5{kpeS zry~U{FL|;lmCyqZVmexi5&dH-jO!9P6I!e8UBL^Fl`_;kDK8xZFvMr`=%+^ zFbv}+PHURPe;qra6nOl0_K>`iB`40&mgB)dV;!rNv|6oJt6h>?D`Knhzvx8R7c!R} zT+k}F?FPHDDFeX#0v)Y1z=z3?B+9-kKGzWSvNjO#!9CoJpd6O-w1jMvdZ`T%F&L0Q zqx*4|C!u?Tj)EaRkNa2T$r)EZ-{7zd*c=C&&wfl1OKBnVHQlB=8<|_T_;CIzvmwa zOp2juR|Zq+ZiTRQMv<0rP*(f+BlSi=Q2TgAL9NwA_MeOk8sRx3k8RS^TS_>`ux@dF zt48TKf1MVaofdWs9D@!WUb>_s3GE0Vl0Izl6j>7SAZ8dX6khD`B(kNI+gw%F6zfp$ z?X)Z5idBy*mVR?wYwRicL9z6k321|B1yd>DNuUh&!K_0mWP-U`OB6*f!D(=B*aXS@ zzhL|3cm-qCMphmHyX`q*9X^)lC?Qp;@Qt6Se?Yy2DNCZNtxk(7us45NUx>u%r% zi^6$rTfyW8M#3E7uTGw*`YOpEg$j!r(knhsyslVW3Hl2IItg}IM=yMwO>FV!(lp7= ze~5bD?C--1UZ^$S%&CMOHfNGe!{Ly0diiJb$K?)KHN+@T+S|NNSQ@&&W0=jKmYDv} z_qs=i2V8C8qHeB(SZ0H0k+uQj9h@f#?6R|dAF2&!_^`VbWNxaCRdQJp+{QeaKhEM2K)oI%F@NdcS)Ei02}W+Wf6ZtL z@{dbO*$b$x`V2oAXvK$FM$ue?4l4oXs{ra007vtW|3|fl{|7tzyJ)O@$i}VDvwhRc z`Tt7bRz|JYi8A|F18B)>0XVW3R_mD+e`b9${;UvdGt}&|@ zu{o>=)yYl(=Oqt^We4?9cAe^zf5GAf)L18=1KaEODOy`fp)YUQ@00de)uF#CMJJ?A zu&D@P)UU9G>uVFM3rBRB?cG~f_0gZsCXiEu1j(=YVHsJGtt)*6#rLoystdQYV>kq{jS$2g(S#LfolO^2_%jd0H z#@pH$57h%01xAorE6Ewgt+20VZ zs7g5w&d;hy#~3~=%f;BHl*8NS!%mW<#MpH?*!CWX< z>QlWqdQ1%kY zp7UgNnNjAP8u@2mIGT4pzJz6)3_?rOgwCC0H!LLaTMNSw6+VcDf004&iNS*pqs0F- zxFZNKx9AOjZR(L;ox{OD=diC|d5$}ovHA0Zd*9rppxTSvX{tK+KPxDV`GfJRQ|1cO znQtBb-;`P4$3l_i-i?|XSQ9Nr(?$X5y%=IUGgU9JwCc2I`mRwpMGQ;{rhp^t4@b$3 zv*54O{?+d68W%kJf9D4cnSlVnaQ&~g_`lsd>K^Q!9Y(K*jyOsMEY@9cWZ#Ph6xsTbMt0c>zEL&Ziv-TNw@NigHpjYZ!$Nv>`#;30v)+w&*~)g z>pVkgB2ot!VjQ2`1(}3M?@L<`tj8QUP56V^E`;dr-imD^xHQ<^|`&yDeGcY`?P1@TNc11atG(A=MeINFpMLXr;*}X0X}$ zpPHyu0{A)rn1iY?%sJf&3B%4wcdpDU;_f|>5;PC182q!B>o^3R2c4 zNh?fXK8Xp9fBDBv`^4GI^$qnFZzF>@ZDnrgrtKi?=%4Fyws+HJ0N#~XyuEI-TQ)#p zN&j;7fSNhNvLP`q#sOlny!LtC-sx%g+wjy#esFTwnM?ijZ~=dU1ngZ+k-iLVP;{G9ZEyH%eX^z*^dow4ilpMLKjYa!wetaJ9{8pzjN&F&cUbAJ7M51 z_`k4!fBN@9l1oP;T1fsh@XguKl7Q?Y6v~FngbRpV#n;#aGt@6Eu_Cz(_#ceO;`v!} zDe?`oCq{J(6p~IclA^^X9pQ&piu2fr5Nw3y;#m_UJ?CZRqSEWVq+snm07gpex(|N^ zuu$%Nlu&8&kYJiYB{WgM#I_YKC;Tsy;*USVe~?wJ%H9XM86vadIQi*tnB>@Iftdx6 z59(+8mn0pVipDYv!@*8C7-htvVyA>@T9gs7%vI2=;3(BPf)zDZFmoWudtAn;yMoNzVpcK>f25y%kt8@Hy^qEk|ac!zoaYjjmXoN z(}71}+#4YN_9DDpv|snIep`^n55`$Oe+A{&n_#?0E2YF)VxUpO5+@Bl%1~(lNdmW_ zsLGo>tn>k~0X2?)$#Rq!cBdKgY+8@Mrqk4poTp{vr~(BRI*0CyG5#H=;iAv-{v~p` zm~G37!~zPp!Tg>yEjWZ+2T+*YBBSU7bJpPdj3k-erN%S29W#&1J!D`!+3(x|fA*rL zVxYOUyMp+)6;*H6fUh{h@2N4S-FoN><^ziUl;Jh&x&f^?3 zGB%_OOh8zS5(c9eSZ~gS_1S2af7qbT;k(4@yDz$D7Noc4Li+A9ojRayFhQ_7Io&&c zY(aZ_F0>O^mlrlT&?;dP0wj2h;@J;R2qd-8`}*W7tAW?0HUgGzeSWledT0%{lpBuX z9Lr%b_#Zdo$m~c>Elg#K*0BiD9Q)*E0^$R0I$k^e}0-TRx47b z6DdN9QEm~Tqkpknk*=PW%@E+fU^^6n+fgHyDgxOwXN2{aSB2?0+ zIf^K?@GK&s9D_$uXeTa^e%HNuWUYF+;XK%h~lZ^eLZF`$oCvgv~;7;UmRy z#=N8@<$}?eOm@SI9o&xiZoN*$CS%h}c!%53fz!00*u^bj3=Gg72lYo?p{HJ;%5wVY z;80iZFFOV<_0T0VFX`19NLq3Ky819s2}s&Y#DXu%`LZanU^Geuf272ZRS-W>aXE8H zSvs5Hpa?)YpW8qsnM%4*G%a%{8BvoWCzqBxk8Q83 zqgYHRxx9rBf(n^ge}UnvtM~&9%zL82SY3Hz$66l(fPGVQFcP_JFuy_}&V`X`i&h(? zCN09lz1t{Zsy43_u0Sh;fBl81Sk5{P!0jD61=AAwge^>2ElJ}Dd(UV*E<@N`v z8WF|nTRCvmKDTH@T7KLnsqH+QM^o-F4T|2|sLV?-1Dd2j^0egua8e%i^Yq;KqtFE% zD6Cf3imt82Ft}h;rFTTwCU{RvqwZw|hzA2uM`@xLWt7nBYHOv*VlfTKYH01Ytb4!u zwIE2?m+YQ!M#p)swVxsvR*znf9a|;9Ox`(dfk<*ntl5;DU#{J z#lN+*1nc)3Ntwx3_@mS7Pf0DxMQXO^!WKtdmNK8DaHt9LPSJK_s$edGa#BTHAa-I@ zHWOG#fPL8&{hOLtJcZQ0z;q_^4@qa)lMSdPRdy*(FtVum=9OD2(h;OPKtGz2KS>L9 zC6Hg%e`ZGIMhy=y9#yUli0r+a0~XuD%!NmGO7NIG_#y?aCDH`0K%MbMPG(Qkgkud0 zMm$j_J>zh^lqN$tNs>Xe6^AH3S!Me5<3_s@&EQ1}w-X#Mf%5gqlPc*B-@xsZIV1Z! zwJjM*PdjylRs)L;}1bE&0hRElTte;ItIeQh4?;t!-3sSQV|7jZ zlZax08m(ua&ZOTpOymwoq@<8$E4uv6VCSrFqej{koph)GCh;r?D%4V3BmqkD3waw6 zf9gm7JM?6_86ql^SHDB~MemqFElGV13cc!gVj-zMz8hxt&!!YdFLZD0X2~6iuxqv> zm6Lc~>YV;xGby^Zhn&uFJiUy-@FmN4eEp+S@ikw;=;Xfw3Y15%o};%_+am$YW87-b zm!pw$vXz;>Npd4#Hap-u=2(1h5{f=akzvGz@limGKQw>)0FcuoX07~g{o z@R~p5yYr@u+Z5bd0+w$x%y+5dlavqTPRdj5$)L$ijJ#CmDV92%6VTN-37*I2bf5};b9zu-GC{#4(n7RtL2-at;Io{(Gm7AhNwxKja$`Xide_1Ft z8RxfbDkp$7n6Zh*#!B-9-DyBO?oQ_p9tGdo>+`5R z!AS=q$jS6xKEWJ{Y_Iys5^q^c)4y6!;*3S|IR*1-G}{DRH&oHqi#>_XmrX&xB%pt) zm;ZIv`SQR-;L*-(9vh^?Ccsc}E}%Tr>S28>yIvRvzx8UuZk@+S1_n?Zf2Q$WmS3rI zxThI_E6wc^G{zPyNScfgC)cqc75_D^O^S|AK)ZVLo6N`XL*7?=Ha?yO3wNGZu1*x^ zBxDrmwXNE8B~14aE!V2VesEH)^-&d$5hNPc{=>uLsR$l5_4T6)`3M%3(ZjOxRTlQ+ zGV%DhWBnJsD4#nZQurgMe{O@JDC<2^(rslB@lCMg?lxqe<)z8v4SNLWnX6=311UM> zE;CGXJjr3Z2^z2=RR0mICoKAgGqQlp-p1GYBq3dc{Q$^9A>bWYM`)DF){rh*=eHwZxnpaqCYu8C)<=y|OO(NDT<_d~^mVxrf207Rd(^Q?xp+!I zoIZ_V@FB4;NVf~*b8#-b?5anNEE40gSBzks#i?|B@HSsYsw zM`*no(LA~7WEUI3Bvu<+moCW6_!(uaPZ?x_{eZMV6B(oqd8xiKm7x9jGa^}^NYJ+a z0cixManlS0Uj#g(e~k^$2ELYfNaDbW+%$De6ut3yMjsoX4|@OdkOV?gxoHX^!4#k0 zJfn_PsRQgl^ZOA@ah~p1FnvZDYg5KO38pwx4ah6rs{zJM{?Dca~hg09D= z)w@+`UnofufBCVt+i0_=+w#)eeX{JrddkrJTONI7Wzxj4nDLW@^#i3+LoVVF57wRO>?>Stm?^1vqW)HykeoY4n78PUE z0jy!|^JgbF?u&;bS}Cx4M|7<`NYHHrPT^#rYZcQNf1L;IKuN=1>{V$&oej9fcs^+wpu7%3E-+@M{G1P$RZ1N1;uO$ff%aUAL;1LM9&j55SOo>Npz7s+eUqk2wTY0!N#=4RHv9`oG9ods;GE-<(1 zJ1$bg2zWya!eqobJK7kHVp{!Z&C$C|uj$9Pe+leuqolB0I;wpVC5l!w2PFVWK(@c6 zz*>xEkjYMS>d@-#?Y@Iep27oF2s1XN_Rr$U75@MPs?Cpp4}GYS_}CekCpj?7-|YR# zq&R|?hYNfRGnBx{a;?rT=|z^90t7IyTn4?o3rQ?M(c>_$G5lsTH4|^MjPety$_4D1g)eT8#nw_insHERGFMNTWm7S&3PyawFeClk~ z-ZGQ@T5@F5_DHo;rIb!^(mH{GZR9vocKkr7O=p+Y4Q!iqXVpuhj~nENl0#LrF-0{= zipo$(Nh^hRP=6>&!GXbqn2?tyfdT8~2~&$L7k`4zD5KVzTdL<0w0_}9ex3< zYQ*&0`}y!&IP?8{aJY9s)ywk-VKiq6QJsS%9_(;+SBm8{+mMh`qV6QsZf#u~LYutQM_%DzIb1GYSx%Pn zHh-y93R7CRWB_!TZo&ZV?w*|-oV>5P#6NNRV6iD;g3#SJc$X_GA&a%AV+{3`!ZDQ2 zA}sJ)D^>w>j7OS#rutATPTtV_6cPfT^0*x+%fXV#U^QpU>lX~7T{VtxOEjm@Q9uzv zl+}La7Yp%}!Fiw*lr1ti;$KoIreh5XKYy<68OEM^Pk0OVXdq#n@0Z zz^>42)K7H{NW|doRhvUPo1}3+SCkly_ z=nVu_C*K#YOAV*}jEI;0C8RHS}bXX6zK9!|Vct-8aA7G+xt&m98G+sq_;xwFSsk20DaKbjmJ z1fX|%sKRS{7GS08R(TTOGUN?8PJbux(|c2J@$78S_-wE%X9I8L$f~yURz4rVM6Pi- z*u)8?9s^I09XfHyVl59I-g>SRz@Y+p5NDaP+k3Kiw*ST9DTL%^5s{#kBBSc?P_%36 z?B{WDSyO3&jLjUG-`yCVyevO4!rqJYe^-KBdq2`b>Wlb4XLnd>XOh#eS%2Eh=NT?P zjsoFj1Zq?RDIR00oG4^n@tuJ5BdS{?>+OB&kNR>Q6+Sk~NrG3BA6UXk!T^<+ywk>4 z9?D#{#Y)awD(l0`WoAQ)i?ioR3Y!3mTHEm?7LtLYfs2B;bRj2=M>Qx}xvu|zuRony zsJm*XHt&_X(R+>F`|9|WRe!{7k22}d0dBn>@rV4wkM0J^Qns$(_qrc2-Y?-lT6M~_ z?KcWemL-FokG{<+iCoRJ@sXVCp?CLiYzbq zI34j9J-j01JDiMj&Z&Dn;e!jHh>-PBx=^>y3-lr3al=Zmd{ts;#{ zqh?@=dFNt(>k?`S?p~6;sY9tQv*fO~{+U!&Y+P0XQY|CaF@IZ@HAl4!*>h|Yp>4bN z93C|9ic9P|>Z|+_z)Gah@aE1N8x~&ar2R}Ha6#6un+FvN@OHxx1>9+rziVzXOg7(Q zG~4&FJcVaQDwhT{nKywDlpK7)!1;VtVgxTIFYKu&-Tkk=c@i{eETgbz5Yu$;^zn&` zrdQao%oLHtuZ8%`sQL%tiwueu-QL zzsP#A945g`qNZWG*v~}_cAk}}Z`rx!?o3E#vup15Hs;Q^>@-NEKucsZ>nu;U_`4>M zyotHd*nc0w02I?1Bk^3pofOy~caOVbLSv<4;6k0=-2A3u(JJxsy??Yr7dW=IqS>o4#9bJC%3=^0mC&=U z_SU&?2^>|UnEhxaFd3RG^pjSbxd8SOa9Koc+V3)k+m0%K78Q9(GPHmslDXu~v$Ey_ zkrOXYK13j|FYO{>rg({d;;Pa8&CByG00;}~6+dub=gF3btw9g2DfgQCboVh0&Op2q_&Equ9bGT`+L^!BxZpdk{@z z&O0?I@utN?542)Rnf$Yiv!I;l11;~PjRXyEY>@Z;-0iR@6NaVZajrGFAl+JBnd zy#dOxf~$^3)~p59wg$D~ry=8D?UGLPO$?(g6BHIW8l$L80bzoWj3phY*VL2}(w6 z+b13F;QQ3Q6}zt5bxMP|o78DC&VPPQ{C&!kw`eoMBCr?HUpE+=L*}Am!AjU|u17!p zswSyISYmEkrL3Hg?oN|&Nm;6vrrcKB&dp7Wx?i0jWd_r(Nb6FD7FV{(t1`q*;2eNG zA9n}wKyB%OO&be^3_Nc1XeRzGB1Sq~TNWrMk&D;}R|im5SKSKxA~sRhsDEu%9J|X) z^qk02$_lpUNlFnFpj%MmAkPS&9G(0S)&dTa>rr-#ez8Rn$aYE1lz{>}5b+(6LJ|~A zs5ML$^_~Mleg`#uoE_5iF=W*3agUM#{+>t!tgnJ=Xh1nf<+e3nF*Z*x#+WYBi)oEmHo?JIs2F2{_$MjGWYOJ&a_k?iO8Vw_ zBg&+}89YqsXW4&UljQaLKdVdfditN$CW-$VSAlG{w~k6R^Fj&GaDSO86ibN1@KsaD z661`@7$S3g(Lf@C;`=GtarEmrZYds4lU$<#;G*!9^b(#@x3Qf{@0$0uy4PzrK0V8>X<7<%e8zbv+k zb!}XJbzPfB66UG*K5V6h zcs2A-TMk|97}ud~bwDFn7a8$f*MPQ5S2T{^PkJTmLx0kIkBJ=zkxlwfbRn}mzv40O zZu}_{eW#g?nROfH{dKq3>z*8&u$W_f7M9&i*yXQm@WR>gik&)jKGiaK5`^5g;tBFUXC1IlXrpTZ|_gA1lO z!_OceBz%^uo<;zho8A~?Tp>^GO{*M-z`fR~W>z4fd3pGTE|kuwOHSP_8BYNtT-g}Q zbWVY-BAGznvBejWWpgsDY*5d=sEbD2ZlQkGKYyG;yf2xa8jkV&bGkC`zFW@btF!3v zXVU0H17U3qnbIH96#!-G*7-P23D|4vbB{QHn}{3x=X#b{;k1qqcXX!ZU;=?+43{!!+56Gs7X*nRhZ}#^Odp&&TiJzbE zb$^cz@kI9qesNS!_Qsd*sX^`nXXaa?*>u(0U)+$52!4{jZa0jFN7X zdp%66^_p16eAvyb@ST!?2MLg{W;N){EE`1X5MJyVk|TjBy-IXVT)e<-YPr>UGQCMK zZZG#*%Ny{Am?rZcU+yx%h+O@k!KExt-GAU5iT%rV;ki*wPz5$k#Oew3h3XS_w`}%4 zif@y=2q99^XPUu~-}3Q{^UM{dk@{NKx=>4_X)2r7p8#YW=XB-WOW?WW06%c>TA!zR zF_rXIq`D-T4)cWk*o|X;o5at>1T=2l=t4fpF};78WkmvmQo0hFz&HS7EMQ#NUH=JZttP?u$PPAAg|hs2EasH$JGbOL~6YpHKqmgKy)`=$^M9YC3)j8r~r zO$$LT8D*0T+-mB^vmawA9JnHxQ10l~5XHDM!jXb=qjvcu<7lE&bN^xThO za`yqhvh2E0=nxp4J)B(Yw@dK|Kc(E1%SpV0YywFm9rwUB7$9iyzpqu1(timzWBrKs z1)2gEGR;KT3L^#D-4#0YBnHCErUk;$iP@(uNvsMd&?nSP$4TZgkvI7rH8asPFIQeNxk!Ox zbLKCE?RlK%KtKfq)_=%GgBFcZ>nw$#ZUIfRXmHJoSTEdLk0%M+L6CNf1@xXfuo~Af z3~pJrgY}y7oP%^Qo?TtWz;-SZkicf3GoWGkECE3QXy|a1j?;-|s%Cl-y7X?HnWaZ} zWJnR1Q`UBf!G!%B5f}Br@5#llDen4T#l>~nA;b%WD0L7(FMqp;C!^T~P7VgMSaV)z z{kz;on80SZsa~kD(}?VgH(53)WjI)Aa5pd_)tlP;HA@HfRJk0K;bK06jMP`<@&-OU zO-DcnF)#)mOj`V`?M`l!0(aC2ic64pOB8ku0D%OV|1My>uy-@4E9fb`FLo%%KlIQU z#+Lj$Rq4A^6@O7XzThYZVR~ZaI3@RQf2`fiQ_}Lxv7FpmXzt>m(6YWnPr3vcLB3T< zSqYqUy;VtB30ygFB|J$IfO_QS8JyaqR%TT?Y)VN=wWOtKt)xgvUrA6+V#VWp$03wn zsMHqlFJs^NtOjtNWuw5#=ob5?{EmIbcUz7eg$`+6_kZ^HPriO~)a?OhYdM&K-qJ#8 zn%Nln2-G$oXxDF+D{!_k(l2(}i%05j_KyC!jh*;&{|n*5#0KYHlD2$g2t(S0*8pug zaYA_%rgM$Y=~3Gk?(DXKDStcrp}mz(I{VzDZEpUP>>h%4K zb!0l_+JBo7>Gb)xr(pJ4O&>)h?AP|%jW*gF#8KXYFxOD0J7Hcx?Trb8_Q3UoQAC1% zvDeOovAx}fUvOnjD4?PvS!`U#z-&Smv3@90vaCKO`~i09s-l~exByNPvt@ef zvL+rtTRo2Pj7%35|G@OMJlHD;s@Qr4W@`vJR)?n1!#50WOLs40y-D`#Ip-=p-_6FdU6Whu`YkmS}S$jyr_kUy#i$I=PINL?JU6<`imAN8k+9V0&^6cRG-3=?=Q)J${>swjo7;4RyrMru!-F;Ou(Cdw*a`hkaI_pBcB9)a zo_P8O(@y{Tj)3$@CtMpV9P+1-Kil-3Juw+7yKU+hgijJRRsab5`R4{y>(6s_Fn?gV zM>kz}y+drUK~Oz^iWyJ*S4gveRW0B2;p-23!(MN&YS-XZ+grKo4EAMJ`{5;+Wg_Kw zh-zuDD0IgFi=bP^<{)4N&_3)Pjois=0I5F0ga(If9)Bf6`}1ym*+{5`*3Yc%Mg@?S zB!!y5DV3d&2Bvt(D@z=}qL@Pud4B~Lj&c71m@5xOPO+9=(oM{sKFVCxGh$_+M2$*X zQy$qR=LQi1vm*>$C3(es(Iut8&)4iOGrdWin;800E)D25os2`|w}NHpVBNbIq2Wbp znLhz-^4`$yE1!n#^{&t(qEp>(-}@D*9{o)}$!uCjSKEpWvq;*0lX7MtZGX8(bm@DW zUA_ZV-3x}IeNAG2(aaQ02zxIQ;Npua=|6exM7v;9-W^EH;->%jh9s+kNa!bh&5ZXX z+wz_knuAS%PF3SvO8%Fw?_{2NYE_5mx9xB3c)A?7lFge1y#ljZ4Bz-}`*%ophwEb1;^yFagP7hb_8{6w|;GRr`^A>137f-i$pZ@si>G?L#oH(fL z{^znHNR%3}zTGu89`V`XvlopaKlmRXayZF*|KlT$O!CA3rXhzCQwI+J1`j98$4{m` zbxqqXqMEW^@qfPw|0DT2__y$0kH34u7bnA{ft-vVL-7QRk6&nSF$t`tuKObrPoLG` zIyQlKTE#=Tx=393Z$#6n20+l$3KYOS3oVqnOlz*iZS-0c*;6J?Aw?$GtEgjc%yMJ4 zbeeGDb!J+t*~tp_O0^s`P5|+l^SwT^G83QC*>bwbp?{@-tK3)yAGCN-V?AjOM+!A{ z&>o+-aRg-DN5@hR4!dli9!o7q0T#oE$55P4O3!T;$_UV{ zZhFGwIscgZ>9=&lr_TtYo&}`^dwEOUagkMot`PYxoHdGRafQA(9^(_dknK5k&-%U6 z;g;Tv4}X~b9%tUusG}Y!w#eaxxzvsmQtw|5UeUMLC+JX*7kNLafw?3UjzvfF8nT`B@6is3oW(#jL+4Y7&DB zIe%_FZTdt@=VN%g@KaP9;BGT4EP1E#lIuuqQvc>Ltz z9DKx9*0NEYE9T}{qK3psi9QS80x&zb{PD&RT+#62P)fJ zU|3)I7~2F>m@XH^EG5_W=?y2OwfDu|0+}vBfzB-#aCr1M(ZJ_mkdaVlEq_epgMbH~ zZq~7hMWluV9qX6+X*v4ndh@iGSkI;1M_R-om=%6~_;5$R+p3R(P~XjH6g+#{LDT4>sE#xFOE(os0J8X3;RLlTJ$1I4u$%{7x*;>}kVK1nQgKZ!cw`**t` z0=8Q1nqmz76IJ|>5#1i zyvVHAREq8*2|bx2aP%F0zQ<(i0_s&(fgy?xT~b;HG4=b)DC*R@*qXi_kWD-eXw?H6 zB>EtVc#x3`i=z_ISmXYi@!R%@8>cb$AGfF4swPw6g}+mSrWe==V}IwRgp_&6N;Zzc z29l-Kf&xUj8QW-bA$O9Pk=`08{h)@B&bnGMNM;lHj7hA#}_ zO$OA=_Ow_58V)_)>a^=Oz@F4e*ZXZRl)i|2#aC{_wbD@ZT~irl%!q?SchDdn?L zj6Hn^HajlQn#ZZuvh4avaec!!I$pDC6su#4KQJBH&4_;G1O{+z%;0qlq2la1YQR6! zDv@3l-$<*0gSeN20V^?z6l>Ks^T~S55*OmZ3S>HfVjfZ`?SFMT0CPQ36y&;^0$7uI z>UF(FY3Pckiu{u+W*{vfUv-Ep7(0|q!QRlRKin;vktTa8t1kX5Nbv+ZY#tmubG>dksBh0{e?!=h!%ZTz@oqkp5ZiVC}(i-AF(_++r*? z_)%_bBu7b^L0Es4@dauLFiSpgH>sY`I{Aq^eMlYp`pW}(d#R;M6*-mKEU= zJGv_GbzCu9vE@P#qicY$UcusHz#(afL9Wi%rHM`N(g)K@)f;*>`8pfb4o1L(nGG5oN8RTW=Ke4K9yO$!PeZ`LI1%HyD(UEDbxc^#R`EX$PIqR+RoJPxRx0&esUf4tPb*c$Q<`DT>8*QHYNuGsvNUQRK+agJiCZR(lT#) zet&GBrxZ}s{Q&gMc)lCQGq*Rmd3R^0q3H(1jY|QQ>Sq~}1i5Z*-3>S~u$XZ##pS5| zpscgS!1RrCf>#9;4$d`-Go!rjxE>ef;w7{~zwNOhk;j&hBkj6zHO~&NO|*n7{~NNL zeE`-<(Pr`Y%s>AF)te52UXNDEt| z5$PwAC2oMZDXbD>dlD5z)f1kAh>gxm5qrHvSHnvb(rWIs6%*SvrN>vzN#T8P41ZSU z1XY+S^D5{;n~kPyJ{`u8nx!|jN7h@&os44egwU@t0$gFUTxB7danVRwF6RL?m~Yg$ zpJ>>unjxEkF22BY^Id2KqKA(<(@#@1D2v#7ny8^Y*c4Z&HV9G$NCidDk2qHp6^IwI z96oI7#$S84%+NUpO$U;F<=q7}<9~aL$ll@WWfar8-G2RX;$^+5>}OTn+FK6IKOh*- z?2tDIceJLP`a5~wP*&Yd;3MID>J`_YL%ibJW`S6ZugtO#ho9R}(yVGsOt2C<%@Om+ ze?>l9?S(q<14n&l%QrXbqC(!5pOMPbi|>EszD{Zz|Kr8+tgiZ%@_&4;!obe~ z8gT8t8@VL38mw9aEe-CqUQ)ht)yco89lN!S-eRvT$5*5Ph6K(4lY(}Rd+*_iWlV8t z#V@QRCf0XDt9;=5$IE=0FC^n1yNB7`iS~`F5_%l_#_z;X?-nJ%Arh@19@qHN(+SLh z@iS7}w%#Jzly}|DsKNi{zjZX1h|GqSk4Bj>53M`t_(lz4tvwH|L4?+8gd`P>Bh! zmQD>~c2D5NgZZ&H)(9ZCc&$M8p%L<~tFI5LXY@We+8x`#gy^;U_O*H9X+Fl_h;sII zRtL^|$K??@&2gwgg@3!?@$(Cix(hX#;N{b7InOx}c|~-fobq72+1+uSkHb`mY?t&O zJ8=Ec)!zL^G9|HD3Eys@yD|hwdHXg$LEHHNbe*hR`VkNM7msngcB{16pG>T>r7~n$ zeFjhTJB_G->&cvA{snD0G#x}Jm=B`e^1OxpZc)MQ`Xvxxa(~~8ca8iT9WfT%u4jZm zBldWZD9NcBXDJ2X3g3_zS~b=C;xDXWHZgbPNP!B6e9~6_E2pIujf^WBUM%IX^jQTN zj{Td^e(y&+JD7%~FF@4e`5Q=of(b`VKM=HBG>~Ly^ChZB(`+KH8$y{fLx=tZ6AO9? z+XNj=g+^WUhJT6$^WD}rwkAf3t7WjAh&!J6ST`wvhz@udxPtQ+{7LhOw|5&5@W6#0 zYt73x=+=X!Rj5c=k`DWob01&HWmjRZAl7i@i0k)_{ej15cnaj(fs{7PYZ;vDj}M<; zyx=F!C{;WlLuUOHzGW%dxGzgs#R#V;=`JKEYd!2J@P8T*WvoBJ0HLbDRPtnM&@$H1 zCpmWRMlw(j{zGq1u)B+E{+2>Ad$iosqlQ-Y-_a9rmRE26I-Ey3jgqJfTAzor<*{eo zY!N+NCLxsi5?ez{c|d^-_blCh4~7}889uwJ7F4!T+BA4M23^m``q%r1Xq-@0=%a(F#+h@6%hJl#Tj z7K9Rkf1OtKOHBY(LHmeuAepyhX-aeX1w(Xr#gl@d)T!TZ2K3(n!ocPHasoZTn=Ys5 z=7}?7+tc+C=qedK0`o}3tbY&}!UcH*;r}?he19Ls1mvc&SPt`&pA9(>u4Bpk53@zT zoAWnd2(0q0p?vt=a*^T(xK6+b8GDp1N*Aha)BqZQl=j+?fyWza*O-xO$33QcwUteV zjl<68zM5zL(F&8(PH5Dn_HLg!-6AgC^7D;2D^u%hQskhLBA`#3QlB0&eji?mzq`1% zX@9Se{{VK`qm$8#!*kdZ&cGr1ab7OoN|N8xIT?TH8}G|JV#!mV*qPIKq?I>d47Ay1 zXj6M2Plczs-R3;v_7v?qxEAASZSNKO3!t|@k;o$P2=9H08<0SpK}W4fRSx+-(nSG~ z-z*pGA70r@{v4BIXn;@lF|Y8z@PkhBPk(YL->1I~{e8-USaWvRoAEKD=jZ;ACqiYN zX=X}j&%+=gmn4xz_1cb@(>c4n4+D7qvRPf17Z35VTanlpB^T^0?)Uw?I!3DLoiVVW zr%v`PqTGr?ZG%ojG=K%dkFK5>WPTiHVgO{4I7ni3c~1tjH8@4WIF#?t`A%d|b$>Nv zGcdtg&$|2g*Qc+;aCLt|8~FKi*$tc4+=jof5qdSdkt?AKVd(x6GTZ8^%4=@XT24|P zQdj|SVO11#%tTIm>i~di;_1<;T+F>$;-i-kFZL*Tz&;foKwK`~ zhj6{b@UWRh^qZd@R{T%yN7_Ivtbamg(BV1?Av>AO<*gIeGHIiEf=7kmsOgc{*v1}U z%ZCiuTY~knGhDORCW$LwjxXbVnI0LGr&{$5{mi2r{AP}z2_I`pbO(0`nKas6ewc$zQ14B!{}6muh|H7C$|J$ia^esucsdHYnE!NxGp56{jo zUaSJiHiZr#pPrnrf`glzR}L(>c_&ZK4o6SJdFlkd6Jd^y5066l8-HLpg1ocAtV?@^ z66D~5|9K|?N@i{!HM=Ans2@{YUM}T%#_py7yHm0nOTFE}&u~m!ZWMZStBpr0cO>Owp|4LbAA zAAuIn6V@BrpZGx)`G3XJ&|%DWNAKCt0a46*wwU$X*H>kzy7R14@&weD26$~dhEMr~ zZ)w>~z|na*W`poMB!B*(KkP|Wj#vvlhI$Pf*tjsd@0H(c5btlJK^W7zf{BCCEL|)d zr5m_c^N8@m7Q4B+BC$ETav~%?kp9dr0kdW0uZSdv$G3=JZ{9Gh8{q_{fGbM^w!9 zc_tHv{CWgikA_Kl+x;Atah=1_bNI8QRiu(3boQ+3RT4Y~<|5cOdvI_D^z;D7nP<9I*^`laJlLS7A zw~u>XTnF94Q0SovO7%58*dV{r=0Sy>{(uL_hM{&i=9jBrDDHZcwxr#cQ#3yZ7aa&A zu;F^Z#=01qVAm~(&Wl322|LhL5kA@HbIkeGVq=bhHh*`)F$5;$7%hx5j8^EvFjy^Q z7%jX5h5;yFf?*VFE5n%EaSZg(kz;%>5TsCWSHNx{!7;%89<{%Fr?tDcz<05L{^L`Z ziVdyP`EAqIYN~d>Yyzc=QGY{d_+=%;+M2!*>@e@rrVyS%l*HK0Go{i**Ccaf;c^}d znNGuLGk>EK$8VrUG|VNYC~vJ~q;{PV`n1p6FJHerJU>2@kKQk5r-w)N&wm%sUmkwfgI_+?8x0Xzo|y4pCa>46 zE)m!JOG?)*lW-aMt{dJ<<*v{%b%mZ-pd!W_bzT>Qz;Z5l9=CYkkt>aXgs>$wB8 z_eR+2J+W33`L7R4N|WaH<+Tqt5pCs{MSBez1^Z&lJ-QAyIw_zj;uEK6;%mPvCD^Zz z4u8)N(Hjd>46)BUZy4d=IJ^B>Ho8tf%zKJSIIKTpmk<11p5E8SY?*o?Z3hsv8?*!6 zBaMa28zsp{C~JU9KE|uwM5_LMHClU$R$LGO$SD{wkbj)7{RWh9@F5_s6PQ?Sm8hcx ze(Fii`?!#L6@LCp%)er1je~{e3wG=q1kkjnYY*-Gr%~VrI?q6_5{CM-`Qx@@qcBo zHlNnr4WpQ2a+nY4O$`0pVIL-g(jRJPVQf`d7w@!0t7g6+KNL!VL5|4N0)D5x-{0C% z7fKjhe1~X}q3{WOqC?>U8$#TfgH(mQcfq3{R;bA)f8gCSoPTf}>2u&Mi6JL>*vMzD6Z=fUb!Pk%=@;6IvQ znhI4ujyI9lO#A8FUV;z!h{5NKf7}OGjhD|qaj*@2JMjP5sL!lf7qgcYA295nyE9|% z96sMr_CD?yT;$S<0z)x~Y1nuANod8ZwkLVZ-`TB@*ZMLN&j)Y zWDa3S)a1v#5mDqkn_Xk;-jC%nj|eF5O7dIIz)tk8&?U+qhUB;Q^ShP6dSiK<;kZBQUJx3&}*s zPcX>~FgOls{rh~DFQAbugM>bO8pNhnviH@`jVhwZE_ua$0RJiC)V*?`gtF^ew#28* zid5p0)waja2%(PF+JDvA!gpQMa@=4BLO}>7i#9c{i3?u+sO zJTY=-e^V@BzWB)nc^<-NZbpK6n{Vs+4KlxXsx-uMDywGz(|)=9$s>JQe88ZvAuW-h z0WvIP3rs7oC9)Ou&)3#efqLbEv(#!qjC*CH4p*NPC>p6c|9=P+$Exs;W}am9gzhQj zJ>14!eP8Fx;43I2nHudusR>XUINiUxx*FPeKlqU!N4~_(L!K3+u>W8D;uneSV^90Q z4We5Y+smc&vRt-z;`2%6bVDm|ex)I~JV1wAN5w2dyK>H1Y;Zwk6-f^giOe;)8)q1F zn2kNc{kUc^-hVGrAUbYM+>1U1-M%^K7Jw2Ttc3u}eWR4OfI|>R%geVz8%d};luZJ> ztfHNe=Qvi=v=!bK%b~l848}fTmCrCJkylhbg2%_dIXyeZ#m4mYHs2I?jO(myY`DJA z;>3EFD6T1Kx{jQ4NmSlSURH`1%d~NZLV@&U9p7`fOn*3I=3!)@Ay?_$*Eh4Hdy+3A z`W1-hqEvh>aST0UY(5n8Eq0I-txB-Nf4GG%bxmwoF}obJ|6u?egTa#86Y?~Mh(IdJ z6+%ZlcX`!^uy6aUBAsG%Z0lyuYeP3UmZdcz6Umqq;U>-rf^0B0Ha!CO%gP?nS06B( z-cV$&kAInJPSYt8oZjlz7AB<)TvbxSmTRlFhMOA|@S>dp%<+w<>`}))H|vlY9P5y* zOZk1uYXCNrKYvAyp;C1b?g0QkCxGB&l!6Cpuwa-M?MrrMP8BGNha?`XI0Qh83OD0A zeafgH19}OYG`@#UV#8B!lz6Nw&_zH7M5HIIuzzThUoFej&hTUrtZh;d7(>;FRQ}00 zi9Gz9#(DDy{{` zv>T0<%JbW(+NTW5?$uK{6Hs(ED zy%Mzx*@lt`*)QgtU;;A(0jez4q1jxw1g#Mx-CDkR<~ z>9cP0q6wCXMs87t(}gT~zNIfdy~MaZv+$JWX%kq=-U$jLh7sHPln2$007ys~>3?IT zET(aNbz3FoyJCs-LB%Hynd6dl+F})oYw|g&uqIWkB(b!hV9Knz&M4>B^rmerzkzj# zHYGb0Z&ACt!F5sPqUfanDpWs1X3 zM59l9wMKHctWg*16AP^twI`6vI#`xVPd%;=dpv9+HpwbOJdm>>%S(#{ZQ*j^p-(HI z)r2G=z{b+6OxY?gC8J7?=x|L<&c)Au+Dv+Mg3+Y>zFx;Y{S}?)fu-24!+#j)TVyl_ z)uq(co{u@Rf^;wf&37XUR@*r%C_;lz^ke{&i_dt4@*xY&q738|2y@)isob}=oYz^C zNYeqTDPLNX>ZiCOf!09iB%90L=4h%_K4ry3UbXep<{<*Qk1JoD0vo%=M!YW4yPX}H zQtj5iR}v)DnMBFWNNExuBY%-hvSkaO*~Owy!U821fa_Z}mYDtR0li2eOs1&Xwae%2 zbdFq!;@3UFT^8w-q)mt#8PUBLv;krd-vjAkj%|+tQ({52+tg2^sLsN}j2O;jkAOn| zHRpQZd4=bKY>GL(2~8Xvc6^ytlO@!22g)l*#yW&AP|C8KOD>BUsDBU6661L$FAl5{ z@*2*jh#@*(PzzO;-IQG{h$9KRp4@4|F1#pu(^5u4F;;+EMeI9yYQ+lls!h{;v4Eir zU7FvEzqV%g(ihR|%wEn%Nv*-869t(KR;|_OOfGe(cX1B$l7~?Vxqii<^UaQyDo`yV zFR?Yb!}KO4HME5}D}P_MD#-BZJBSf#ffwZpTEwzl(_GtLpa)(Z+^^9@af zn)4GSL<|KlM;8wvmMi=D;rXd~n@#h};+oFC+59R+d!gprUo2p)(7X~%?(FsB}pg*5goG z-$=u4-lt`bF{^q^wDE?d3iH{Al@FyC1HC^Uk9&Gqp{FqEGmY6Si67K2P*IK19S3=f zR9_K@nt{Q>m16PwrhnB*uN|#?;L`l-t*Wjus z-z=BK`5;CMT?l$}!g|rSYAYsP$9sk9m~8lo9#q^rT7P}79099IA4m$$MU^S${7^ZM ziO=2vJ;jfK%+Dp&Q4RYV5|k@3FXm5b<4C-F zzEdRQtd)yy8`5`%XhmefLkuKWJ<-Z)RMAN;S)f;qNq&}oByN`1>2@M3X_kJ>XUka^ zTN{)`Sbrig!G%b${eltrTolxH=K@#DS_|z*8QT(Tvw`{t$hE3}ueK-{P@|(ikVUJt zo8JIDMpvFf$JI;Is@~)xqzE8=a_-2)X2zQJs2;741_L6O-GG#2h_i=tk$iZ{yDW3M zA=1MSLE&z-C(YoPm1R+)QYbqWWIJ$Q)TGw@*nb9KAHA4s)hjR_4?TKfW%#)VrFGE8L>c zPVJ30F4}*CzE@wktyBDlkP^M_(i|=pAeeckp1|3>T`#OVi1#X5+Yk<41>R0?s52t7 zt$$M+8SvfejXHuDhYcN$_);pR+sA)}lIb7!^wakW>Gulh_X_Fv3hC#d@V!F%|EG|y zOs?&EE<6i32>HH?1A}!P-JA;n0bg#(O$q#zeZ0(wc7q>ZKXtMGp+2Pk-BGhA!ygK$x?gv{9KKid(0Hs@?*kd_To^ zTJm;(LB-^r&x9>X%hNKN$vP`)cN1<`wbIwQeNs;@0E%n?mrm-&8RI8?>}4ny#QZ+v z&^;y%fw}T)dP`Xp{M1y->uc1=0QWcw=_RgO7AUYPmKk0`vJ<`@4^vqh?9MJ2^3d$X zE3Y7}#$Rq zhS>igI1+MkWaSQI2T|j9H*YW%hw^HU)6Jn!QNLP+!8zHDs}eqUv)Yy{>#KllsGANNgzT;BL1} z$?T!N=x(f+(rV+~1<$ygxIk=GaDKYR-#Jzx)Q+KB5Exa`@N1%q3JukHll=`OzO2Xw z(7>%SX~pq)KHdyNya?wLIDd3bC$$f0Ij%bFE$RCrAN$bobH@;pOq7TQIt8%Q95-Hns^0zCPxd= z!d2AA<0*!8ei0j_aU?p6Sv0=r5SW21tMtvm4j>GI)eP`q43xPKhJWVa&;Ub7odfd- z>m0opDDamxxIIz`AJEppitrnyB(NOeQQ%(88j1DyveTEBN-uE_WE%VNIYL||gYI0h znUmpq=+P@){D_xoCCn1oW^ZR_$MVIkZ|?Vf2W#HUhSWv4qXm^4Vq@s9(V@fH8}4x( zVTPNXkDa?*$Z>Bg^XF=kPQ3?QhM5oTu}5ct^A-iaBn209`<$zwcABYl(S z2V<)d^W&49Q1KJ*Dc*lrmC9_t0c`X8Y_ixIhTosjzPW`=78ahNC*oFY*0QP|;<1k* zZ%1L^i{0hZc-}PHD)h-muKRH3M_fxa$iBBJ4G3*PgyHkKR2W-y^W8mjp*9qIg3IIt zhhXR_MiyX9+qI`NcR#xry|zR{D`rT^-5BlnVjmyGK0b_ne6)XMB}(j1SpBCl7(a`B z{CVu-FJd2ecQ(UeH%14ToaomF@WN)4#IKQ=J=G!3?|SToF6>*I`*KayM}EWPvJYLw zLNAM&ordZMD0TQBs~>Shd3CKpl`H-Gk)_qX23M@}mFXI)bs@<3uCkdL7Xc9HZ1GwL ztpL2HP0Ur}`)q%UKpQbO(6Ut5g4`-{TL)l0%Oh=^erVlQL9uUC6&j88?7^Sep`Jla z(h_W$to6+CZeWULGcuGfKtPK-$#u$?iPbed4Fs`o+vDPcfXyf(uF{AUAQ?t9uwmPE zf~hz%LZj`iEg3+(&&y&y;~>|VdbzAv^DAwTfgfUE`W1gBGqQFK`~+=CTg=81lRi*2 zjVNU!cR4jLQ3}-z?Va|^Y)*`nYD9_d@q`P1R#*t95}Q6-uhmkY=ta)Hnz^r(I2N47 zE^!xno2>_KnMk%-U;|jRn8;-!Hc7NHRLhdBDZ1a2`r=x`q~D?3bxUreBHH25FgxA= z|53mYxP5<+f<#l4ByDQv21ezx3o}}7KX_=iF;Zj%#&zo#R9DEh8)_G%DBww8#cb+a ztaHSs86n$Z%w{w?g$2RI>(K>t>xbv@);n?&8xrYhuUJ*q}cm$+e2 z0WE*^96H0o8_KiiUQGMPT-g`XMG$OQ>5Ki{tnu!V-csen!cu28{AE$_!>PC-=(rrK zigw)PO3-SM>dd)sdq>UF42;oP^8Cy~YbWqH-djL3>0jrwIS+vorS=-5z-Fpvqp>e2 zqcskq4ZS9sMG_5%GwWXyJX?fO=(L$!4aYTWQV$Q;hE09pHo z@JaCt0v%^pWrlLR_@FqD8cjM3UDqpqDlHWIRd-x3^YP;Cy?flP=d<#ys(t}P^`U?N zqk#iJ)eiqCgPZn0>cD6{U#dk-J-=#*+Z`Z&ckfFrL+6Xcbmzu zO#p}TjRz(t;=s*RmkZSvzo}~2@I`-gJr8H;IEyZ0zJq5MbB6avy!G`zeHVWEBWtl? z)%yD_F83*EF?TbxV25tE@=-PEs1M~Ux8uJgK3O|7px@l5Z8)Q^KYr&ol<@X31f6-5 zE$*-X1k$+Ai+BKjb>LLhT8%Du^rO;Sel9%*THSknc7H za)UtBYI6=o>l!TchQ>pl`?|HI(-rk99=EXH0&k zB>Jc{y$uhRsoKD`5#>c~U^w18+pW)H-$ifuV)to@(AM{fb-z@X+$pR$_sGp_%$OE@ zFg5@}1MUDN3rW#w>5~p&cR_yx1mpLHazJU&el}E^bbI*zwwU?=1DrdqB8iLAw_>P# zGo-LvmGKSn{$qC&uWNm$!Z)b(T^Ez{Hg4>w6UMWBMUo!7Ce4c~tH7691}!;M-7Ff< zPESY2oop3E6wXp*&fWZ)eg9E>ubxXn~FIuHQ~0jgCIv=sD7ma#fvxy(7S7sTplDed^jW~3%UKtw1D6i8x?=CA=Cef4C|BSj(i(E zta!{!@G!WN8-;zY_?r(0;f7QbSSyWCPXO&rn02fM3+AR+CXfz22fLv$+bg3r=$q)H z+iIj;yHpLaOULbM>7Dweo||>kyJ@FgF^educTiEg_8MrZs;6$Ksoq&v?TWGwa}DzH z=N(qxCX2t5?%RLfrQ|KLk%anmBGp`3$gkk$Teg6qz5XX_l8QL5!ADSE<(X-y(FNlV zC4>)5mCzsrG%BAg(5;~|13zi%Q!7Q{Q)?OnVNcr&I!D|r=5xNkHoeoHX?&;uC*O&H zW6rC@b`V>`T=JANJGCs9z7c`*erOKMfdybku{siU;S7KJyO#@#H{z~z)|g?*2YIx9 z=j?rILj~1+km~LCy6&pJrh`ujy1EPlsk}#0=jarP*^_)f%1ZrOoB)wL%+NyjhWTuf z&n18jtCZy1C{fjySxK+c_eaMA?pTu(WmSe@40L%ph(YLfiRc>UDc{+75XLJym);Vp ztv>KcRuX?DYy0^^JW8oU^)Kb&r4Un@hwuFOc*T*RZhfFEN-PG_>H+(lVvaFOOz|;& zVRz1t-?yOUqqE8N#AdNC(khr4em0&sin=2rDA?LGy`kQ{;tEXQ{P3{XAG{EB=u(nz zwek5_b?%mKUVDAj0}=O4{hb&uB$OabFBhLs@o;wFvWBlN|)ZvIojVY-z**RPjqGM>P( z9S#Yt!9Dj7fTONQFt8zwD7?*pvcKJZj6zKhSf`+h^NPNni7Z9^P z4o{BZ^Y(lQZ$C21bVO;oFQ9^92hZV;BZF_nv$)v|O=B7nWmvwO&qz`pa%3C65(d=u zG{GR4gom-(fi;Dn&YUb;ovP+!9XUO&Oj3V&Ua@sfqd%n=xfj(EFMRg{Wf^%gUyTvB zH5)|7Hy(6e0$rETk>Zdk(~wRAwLzI3g%U88LN8CEyydO^>pJi|4Y$cStEulxFwP;m zpBk6_{5syU2&r@sLe$zZI*8|vF*%K2rP=yMSl8OojA4{Qfz)i0*Vm*{VE76Z6mowS zNkVaST~zcg*cdJY*)dIn$9(0JLvPZ#N<7;|UdpQ~=w#!2pKBuKaS39KHI)efESIQ_ z6i!r;xbsmOW63mzcOHUj_Y$vJe<9)Qor$o`3awP>KX4Q?7zjr7#OLMv~7VJ?ar zbK~Muh081lOgZzh)@s;-HQ!5rHK9Xy8ip>>hTGV8Hw3%d-1Et*DJfaWS5XPw%;C5hd2)h>Ja{~Oq;)p%9A=g?4{ z4%P#&g<_(E)KZTE+9wc90=$)wfIfZuBD;L0KhP%nH#hA$Khmf|syAH26WZUci9v=* z#ghe9LDv+no1-EET1VZ8!>@lvK+kN48W#vhAyMN5W{|t(U$H7nugWr3C7sSWud_1*6c0d>!bCLEo%vys`uE?bEWz7!;eM(Rr(6KS-_e>cVuCd+WV%X)P^$3aGF(Y?8LzBBnd-I zk{!lo$0W&ml(7PY^0tFpb^*6EgH{f8MD-srNerGEkPfaT%tKbn^v)M0DvbQKSFg45 zRjkdVOkjdiq!@5~e&=fsrokJI|p zO~3i!rvaY~$UwmTt$Kq_3QWHalvqWXUl2z^1;(SFb93`4gf zwNsh@V1p+1VH!AO{5$K~bl{(LR=7DAVxP!0^oh2We%%H~%}_vms^{!`e;-x&4^VLsCjzldifcPHHb3CozCe{wFbDK^)TX&rpi>K_+nR?Bh2ULP!=Ej*Ei_7Pw*0d+ zw%U9^>yE^1S8#t^pg@SOO_xE_<-b9%`BQh?xYf^1+Kh4^rXw_FuYbcnNYryv5I%|BZBmHdT5zQ59FRD|1!Yqf6 z{04c=mGP1vjg&j)f-8aaz>r`r>!O83_VZ)DH{b$4*9?EZ3tz2s)fInVe;~mO`^9&3 zUgWv={a@vg_C^5W)flGwP*2?eQdrly`3tx5S|E{4Imr}CCM2mrWW7*5_ril$$0BVa z;~Tg!V+v}ZjxPFDU0Jk+f(_gF!+6S5&p!ZVP6P2cY<+_l;9TAUBUJ@VIugEuSGCwE zEh;1335b98TbPO8wcboL>Wf3^(DAsPpiO)z_GIoT(6B*o-3db8``(8J6HoSm~XW7qx920-zqq@u&=qiP89aqe6|2T&IH2e8a z<=22G>r&U1s*fEJ*K^dVyM})V8Wu@>NL8pI^;a=~8Be zl_!6>^(|2Y8KV;Hx2(D&lx>yC=2$Q8vQaqJS+;$qJFsscm$nJu3M?{vj`9=>d?Aht zj}U4=QC%_Q@~~a#yX-4;@=@&?%4mWq{4dICt}2#d*cl#R;}4!xSz2CR+3aY~?Oww} zew2bJU?>8K2>?V|ab;l$uajfTkBTvQ_!fWi{ITqOo%|&%WOL5FuxkV#T^RX>vkNug z4jXUx8H<2PFN8~Jf{;}$5`DquuAC}h)Gty#A@T9=auZJnt3i#o2(L35rk+IL7;<^l z58Dn+@44i~-5z*>R*T24@78}B z8h5P<`}0SQ9pL{ryV##9k6QLBCilkmbJR68!JV!9@8NRd$G;Qxsg}l2Lx>(*XiO`*(%@VI+?8z=(u#9C?3`{q zyuW!qubU@=>%0ZRe=@t_zK1pHdtOXr$k9-q#OFEna#Ss$2*>ke{gEex)d8WKX1}fyxtX+8N@{sqTkG49$j+0CT(!7h2egkkT`3sFfIm-H`d)uhhT{q{J$Jez%m;xtKX?Hh#6)Xl!m(99?#HPl|GR{Jw}|^|4Vm40nHzYgQ5zR!ydI%m{5d`dm_rx6x$|uJC2wm@f_m3g22U7CphqR`GzN5*zO~_vZ zYY{27Vo*j(U^;2$kK8l{97;lSu94qzNX7je+jtM!@JlulQ*$Z#?ni$Q9~uIbQYfXy zkpc*A((%!o)`U;q0rOpL9_6QoBp>(4Q4NoaN8O)r&ZxBZUA<1>k7<>RvkVr&&9bkr zQzTNmN zu;VaAh(|z5(WVeZ{seyjr6dlou5ABWqy4R;Yx_ms61ECQB^P(KrF<{Tr^&|N*{ep? zqAr@x){9Ifb+bQV$Aum|7$WW4{6~VePv`(Wmi7G9x>r$E`{mWx!oafk$hQRVFFt)= z)~oua^*->!^s1q}RZMRfi(3u#og|61O2uDZ6%<87-44@_jvjv=AD(=6espSza^u#c z>*da5SH=vB3P7D@4N0AxD)wr_M1sGekf3Tp8vA9-4ploUF}tG#~8xe5-EEWn)#lz&3EvZan6?PzW|{j{xGiX2x@!wQ|!$IqO4Z2~sY{hQ*hhisB zfI$~CN+L6z=kvul!wIBxTLq|#ybIyW2Hgg=ion!fl<9wh+VPM~b<}R|id5A({?BpO zZk=p)*zO8;*$u2XZZ~@7(16xSQO<)VljSGeWm&kbH`<2UUq{uO zVpE9mat41LsFfS^$<30;U;S%M&0D9R*i2q* z)s05b(UvBIfZwdd=%=y1V;?Kk_v;;aObh!1?-L;&(9(QU zEMIyB7i*OwGy@{(uq`%}6Nty!^Ynv+; zLR;fv(HTq}i_U|vq#NO5KCs1Xv|>@zDMOmw6-hUQgOW~}83rOmp}kT6QL0gG6cwU- zQ_z1l+OB7tY%W$@t=wrBEbx5jB+aDza1E_nMbu>7LIRrY@l%Hj{HqygPqo!`FI>xj z@5;FM&$`<(FH=excw-&O?j(zEn|XPAkd17;JxIIXZFF7@Tffvm)Q;LY*c~+%Bs56W zW81=a&n^qVEWbor3{6_uOw5alQ*2h4UNV23a)P<=(SD7_-rj||<$2-SN0bEY;cg4) z@AOrbqk!P5+gtsP9y2hrNv%${h>d)gP zGkwq>n78%Q=y3&K-M7!iz)7q0gXx&9`uZFRzG5=h$2F{+k;k%Ovhc4YJ@AD-Zjb{6 zGlgRwyEig^3E$GrixT;={w?%`l?#9EBdplTv$EdJKwh}_K*WwS-P|h!FtLh?zvlo> zGsPJ0n;y((GXaKN#L|nCNj}Odd^5Zk9IW2li~;pg6JFX)+} zd3|V{!LZTkW%{sVyQ~YWgFu9V6z~VxV*y5`Jj9@lKJf2*a(a8)$>Zv>z(s$-Mxl8z zF79cyXg&{FGyYqs&AXMm!nSAVd*SE5j-4HDMoMnM%)7e)M(AKOCuL*%E(iYMxW0Jk zY1@3_H^h0dBDxU5+DC;1k4p%iWVYVbP`xH|4jD?}6KxMK9_`WYzIAJF#`a(zo&U(;1pe9u-YNNIvkGH=PbE5KcOmbuBYEOM-Z zXy#SrLwTMi&ca&WQw`89g#Y`As_?rL;@1)w(=~o0Hst-D<_dzp$3rfHes4W^ws}9O z29>tk52`DhO=)cNbmf1g$tZDFWkjs6S+_*c`6|Q^oHpYbz-}odkl)o07Q4KVEz6dB zeQz=6l`C)J6UGEb<$`1e;#J)eZdhfR(QQG$*#&%eG2oB+j}{2V{5vFqPc_-hx{8Ky zfp^G6_s6VrzpH)o7ccnG@W*K_(#5>M7xwVy5)-O%oKifM%Q1f*@BP%qKNaQoSt%=C zHd=KWt=6WXikTG8q|aKUR!>WM!%e+7?dNTcjp_snRQLj{N@M8IG`lp#&z)q8a^w@`U+X?-3HfF(ATT?KBUt}h*PbqS z->|6E1%nv6d|i_XKU|;RIs#+!wgb!-iXErj!5iUV}zb=BxQMCsT?g#etlB{G=B0SE6H1U zc8St;mBNs8GP(pR0Wey1bAH{}lo^Pz>Y5Z9>*D=m1`#z=@rnIRA?};w2|(rO`_uCy zN9?7boZx?0a9q%XfMSPmVmNMy6v$CeTxO+UH)KQIm&Xvfb6I96Qt_qDoU}1kB-4C` zeVXj&>~b+@15JsJW}K<<@Uzbi?Q6JsK{=ZH$Dk<`7WCybt?V10Q<)CU#NBvD)95#hiy8_mj ziZ?V58@b^!Qzms)Xuj9~wc^li*wAi&f1+7S$%7-0!jxSmYeHDY(>`h79EiMY~@{ygEi_gz4K7;MNz%-`^D-1aE->+up z^D}dv&b~Lcj(G^`$j&hQ{wN=hr&+Az6jFacN|VEnc3*q*eREzG#Z9$iFoPf^O;k+6S{FP zxfkj{g=vZabur3R`+YR49Pf*vLW-`;>L40sk~VlC;nD=oR8hSwE78lsPjI7_9eIdcKbK>Odt#sa2lz<>ZEpM8lPxUY?BI_=|k3a zp!!;8@Kx<|+A9SVsszK-W%_^1$zK-kOdNA0ccc+gD7C(`7%bQH0Y#2=2}E4&ZO%Bou(Xhb^{HuHr6(SvWGp#oh8JfDT8~B21722cu zi0MAw7f|aR^PqOc!Ce-Q)5l;|n4<%6Kj_%J2tMQJ-1%}Hpv$s5*up3*3Dyg`peYl! z737u4yy4)dkb}8*WnX_8i?)nDFB5{+O-zb(1CuY!o0s-_Qli#l4ua4&qMOgbJK8`f zq+hr)W27J7J_v}YSSVn|UGk>Mxm!C42hRXt;Xiqjl{SYRKf7>fq406TCmmy{X5A18 zQZ(;|01mvlb6N9>L?~0FRVYtFff2i;;J{E$TTT|qY*qo|$*RIAw;2zdUGE@0m(YtO%modnj%;@Yd%zbppkgDILWto6wB9~I+#lH0q$ zY*yw7f)H7WtrXd2u---&l#y7D6}*>LS?s$VYOLsRnl}JDPpj|MLP#6++0p3znstyr z@=q{*!wgjh(RhCjxAJG6#=@A@5Wj<=8$O?>CCGxa?{T;1icgKes)>=-#vIT#4SF+W zTpfZ=0!Cc8GN*z)`0&c>=2kw>R$pIzU~b{xAp-lbD8>M(2JF>3u(tr#gF38Npw?>+ ztdC%NLs)yS*I>c#y*F#HsK?hGSVuo!X45Iq-iKAk>s5c0Rxwy_Ff0IdOLRnv(n@sA zM7L%uqpYqfUi%e4hBUHEsVJ=sflq3^;KRei&v?E-uK z5&Cj*`uPRO)(e4a4(RjB3VixGfZKh;e6o1FGt_^dQr&)gbiDh@8*JQ_Pb2Edd{~tE z4l7L}Dz$@<=65pgMxZ^V*4&^xYSLxBNvo>Pub+IyKMr?X=xt?C{&npOY@Kx=x_#OW zSV74KuW%G{1QPNJf{I%v&#nqf)`WH={Oy`1n~j9;XLB)}rZbT#oNyFi(C*kQKoWC2 zv$ub1u*VFe3mu#uD&46o+E}J=d_~q^`1Le;RVKTb&ugoZbvZv0_fb1`lL`)NK^@); zqlY@L?w47511L#N`x9Ma#_&6z@Db@J`pn{$4H*$2UYGg_E!sR^0*3GX;CoF81g+#8 zw)uYTl_+o)&q{pgXN(U!%w@XhgzVS!aT$LMaN8ZgV8+?w#S?Q)j`7^HIdctauYhcy zf}Bvt4peKnmxt+MMyk~Tbyy$ofEIH=1*lA$P|p-)tWdV1rt;B;k9OZ`Y|R_m+S1Q@ zY-FTODFdO$cM0xhnNnjt7hYtjC-^5C)88BJJs=_){vtPzD3LB{yF)5sQ+mqBzn zlKF^>^U5x&AuOe$s4|msiRZhCANXFjXAdvv#)L-?{1cB2_~%OH@0nX}?qg!%_)qcd z4PV2jc678#9IrJkQBR7}`scz+lrNr_s&nl6+J&QjW>mLtCC)o7tr9xGM7)2zf}H{@ z();_|+#(p+DO~u2feAJV>Lx10)(H=4wUyv{>fU76Q+JR;@XzY5lPWRqz7JNgGaz`s z24eW?g9pQ%_w)3+fCV&s1rE`?-_mWmW$o$G!|H5tb5jD1voRl0_UI%DZ8$EiS{3uT z3q!d0Ei?;`ZqrTaXUQYKxN#iW|{n2s4e@ocYGJz_i zhj1*sI6EJm9}RipWWTMzOWkM(;s8)eH{69WOfd^9v&>%Q{sKyT(+X`$~VcPAgxN9%v;G~D`7~$bdeZ; zu)sJydcRRzY%49gh>L$s<;6DQV%A++%+?Ew&1J<#qM}(+Gzy9)IdNw(vC)c+FWA=g z`o}NVS<`Ce#oEoW0spTTFc7-7%GOMG;u8>(Cab_hdJYBbAw8k%5H_-~rRCS>j?NBG zPS0KL3VWt%b?Gu2*4+GxNdT1NP9C@ztQP-TB9~T*3(* za2gAJFKsBC|H3Ijpc|!XE@%lTv~4rqA7${qQgJiStaW^pm*8bP%fym?gNpiRwO!}@<=2li}?9SzOn1sTkjM5`OVi6gDBD6s$_J-K2xvf}zN$M{=iAMfk% zd9HM>p4A2V^V?~tlt8DW_m58u+|GYqd0DpDSAV=8Wu1_fB(-x22wqrrfHZJ-|Kf|ikBfY^ z`#Ilhe^4NEqc7Rdz(_b@z5N$oq*=~fz!RLB2~|c$!v^W&Vxi4eEC=zbe%-|F`-3Sk z33VZNsm#AJeq3Qwe&EYTpn_8{^l2stKyEM6yd+OJbkZqGucNc;;`{A7!iF*Em{ODD z>#2?#Td#lfIMD8Gr^;|a2STsQf;CH-lA9Gi2aGX zD!`I}SD8GoFwGKgBjaMC3I5!)0?_cjW>QCEn*UW;*d*H|9YhQ?lR93X@8n2?E4rHh znk%O>F-O!3wT)izNkwPtd z(c$%Iy-MctW?Uu{MF!{J_6XGThQb>UP`Lv$aNr4TtMlxdM8!>Uvy0;j_~wN42~CLtG`FZ-1x%u=X76=fHt$2kAwO2Z>)l?j6%*SYiP!%g z7=8BgVn%;*jO>qjwIGKVnhEKH?wS}6uvvfO4L9NAOOGEG8KMXi!-_oLP3vga{Bu8} zrUxp8MHCXup`C$qZu{bkNvuOwU1>SWSg4ukO*9@~7m^~RvkC|iu zU(IslES>wHe+gZ-ah7sm#CucVoHU%B52$yuY-OyiSZFR7RGP(60wdsxZ1I01RVgzY z-(1rf*&!{PW!FnHak-+5Ok%CBBG>qmh z*_fy2MR1B>Zd#)`ucOcGNiYVVb}kn_9n&h&ZC0nqb-g^yKwgxa_F_lS z-U({m5LIQ>xd6QA5(8x{i>5-L6s$<)Vt`}|+vdJw zBnIx6-GgOqZCmpKELcXkp%WZ6A&w3khC(z&JiMQRcWy%&?E|rbuZmgbL_9b#4osWfpYU&Al6yS^a=JFFeNZ7am>k@x1a4sWE?E$P5?thFG9n!57g(!^(uH zvdk~WV?eIS%@t4m>hh6(L=F>ljQQZ?;lqkU_ANvuX`x4lqGTm}2J^s26DQtAP!7^IHVasD zt|}ghKGulCg{jb*1TlhQl>A$52BlqkutJGV%P@c3@-=M7ALNS2{FNeAyzYiBjzgy- z`TKivR-s1&HjIZcW)<4dtyd0xkcNpbYdjDj0{n^7My@1sJAx+e>}Ug5^63vP_X%-O zqm1Iae=fvbz5KTlx1-q@lH3nucx>zQup_HBXp(hy@Ds;)g%?iyO4G)))+Fg730}JQ z@U?&Z@Sip8-f;r}!sjjk{5cQU;2uCTchvdiPJm?_3I?xRrYqYM7UVi@x=eKIhbF2M z@Ny5)8wPCeuQ|o`%XCTmktQGN?={txE%f{gYe(x3*48^h>o6LJ`xc^GX_d`_F%FiM zyyeWaFc3~d;p9<3GT^50HXqx7 znm595^9c7198%SHCHlY-d#(wnFE1fP%U)Si_Uf9l*SJhe1FH)5%OT8uy|^I>dUJm} zi(7)UnpPCMi$jZ*F(sghr*8HcHz^NI4>gdmLfkKUig&&S+J3*0K|&UhbNIBFM;vC* zk%*btcMLL@u)I?!8(XEWemBVmY;e^`OJ;Pi(W}1`++}uA$>fBkilqF7^eE}uw)AHMd@Dt5sG}IyntYYu#=_zo#vF z!#Yeak@`ABkuN^K0d0n96X4lgRW>^9rM=D9&#fnUNLzY*iCQ3veAb3Gumjo)PA$>b@WsERi)>gq%-u;me8ec7$Q29LBgtT$`s7}nQCGPU zAx%*}&egu}`P%V)o$jn~zF%Natva(MQ8dX1{fueSgd?I+wc??c?V=1QpO`+ZSbfV8 zJ}_1*o}w@vnrzL>*o_5Akgy|MI&P)!ydXS7Zow_9@B0`7ifRu_|7A#GvQTo znK&fqPU>O|8LJ*Q_N8Q3Ri1 zeIorcerxqx(|N0G+Jgkw_{O8#s%p|aafY1b6h;cd%dBIjEEsgWw(NbYYKmeQ{u4BGYuJR z?>Z=-PTLR2htmoB*|?pXWyOVD9k16(mvS43A{8xc)S?6vT0Tmia2@-OrO$1!-XfXK{XnG!s@GK%6|zf=z_F=(;Bz(*Fmc?wxxeMhNqOjN*B9_bK3uk z*#C-HO%W?*8KC~ZKDLEE#^$L1^|Al7K6aXYC&sv|dsNL_u>WgmU9>b=k6pDjslTz- zCJj}4>rm<6s>LyKf0-KBU5P`VO*f*-x0kcRgXQ{h8y(FJ@A_X$`(I1@uWD(5(iB_? z{*~%dd?OJYqZ@yRmUq6E zGvo2tGq%U$7Dd*<)~3=58RZ4JRn-3p7C&9j2Wba9AN+r8`RVBRV9osnKRiQYXd^$R zo3A2QL@HS~)Ggtp7%|R>w_!vkf-%ZO&e_@da%;> zW`+)DSvG$)T|*WgXOk=~VW3d$F$r=QCJ@2lkiUF{V;mEWJ~}#02$;Sk#NyC6QP%(_ zOpHug<>UFDG3%TB7^;|!n+#KjHu$cZ3@j4%<|ZQ_+TgY(!_|&?wsDhx#oBk>%f#Z^ zUS>XGd-vUV$&~BDlc#D1!-@S1|k;4hpLh&u&62KmP$3ql1 z(V*`~1B{WB8&*>IQ~hL8+E%g zl(?Qq$ABQFBbrMcKN!QU#869$Y1B-D3%F zu>0HVT0@hXp33d_82%q^vQVow1ye;m-y24d(n%`JN0X-%*O24sE!$B{JGSBkW}$!c zix5cj^czY#(4mdv@ogJ99{&xkq{pI$IutdpXtS;|z(!+@tF9kw!Uz>P{8n>C$Wu6e zYJSG~W4I=YhP8JXcxzy%cG9w*g%fxYasSKD4jyZJhi$}xY?a71?6NgUu>SXK04D_u z=RZoP)eJ}mgNzVjQWo`ONO6`rn5Tc$H`#MU!^zV0@*mjGt66rQjer9oEw$kZDk1@e=_a+zN-y5o)ynj92jtN9u~MttEl{x1sX^Ro%eck6avv_j|gpk}ch z2C%C2!XM3cN@jEOUPPPv1Aj$`WjK2HRnzkMp0g~95E$pw?Ibd;vWd{R=2H@zuo)H{ zmxAbM+qk>jAYVi`sX>K}WCnlro|eRz#jw1vOr#Y~j{JOgA#w_3$ecrO4;yGy$JFU9 z$5f@I{+ME>(2=b2r6b6Wp(u%d!70b>Q~n*L>QwGLN3G42{&b}5HXtNvDk86g*Imq> z!!fsEGx1Ymb}&O-B~SG>v9R?_@J~n1!fsH+P$B5lfo z{}kmbtVfHNm*jrleP4f#<4tmuLFUxLWRvA(o?4n=U=)jKHz>P>dFJd)4wbE#YB%ds zROEqI&0SQ=N6RtU!^cITE6X6BE_OE{i`Gr?Ca+7yr)f*EI_aH?EO;-euaHQsp4U=K zlhtTYnD$JA0;g>c-Dj%O)tgT~bt&`HSGv{ly>RoMpyD)l^bvnD_F+x@>kD`SSgXf@ z;67dcUIUixMGsmEa7WI&Qp0W4jn!EO4~5saRclFm-HxFogdc;xaO}8zXK_HGW(W1! zj(;VHud?$uXrTDm^h@#^d{eB+Z*J+*ExmS2;Y2LMd#>;zx?6x*bU8OLX829MwsQ;~ z)Fr21K7Mrc=$OgY1*(#d}to{`pOp_w7Z5Yf!;7^%gz&mM7fJTwv&Hsjt%I0O?r&htS{^h%%C;z zW{;Xld;OJLeK2kB)Us2W0nN{w&CazfYWHY@rq6P1(kCq?3cTyJr9#~m+0eyalOWBN2h-~l!-uoAL{SdUaK(Q=?s&rc!!rN+QwtdvN4rBAa;jd8<&J2A5o z=Ptl$Nrwmhax*z{N?i<9cw?K>6$O>wqe+TkDX7aQOrI6X%F>6k1%$E5m*R#qrHF2_ zAGT~PFoNwrDSd4CmZiUm{6mpE_s(YTHbhF$B+P%U*QT`xzTC6cxuGLIeWzG0q+c_< zH6IpT1^DlaqLH-S#@t;HjnV);kqe74UPKr#B5P-Nnoq3Hahs_TZW7-=jb+&CEoYy8 zwe)GYbn;xs@1|D=7X?F*P9iI z9sbKe29wH44+`mB=KCb6od+nYw;ueRvYL(}-p1%5iK#w{&(FG}AM6k(Uw9RJ-E%o} zJp|Qhf3*@?uB00Rex_`zl)B6ZnxgsU2;TzW61{r{kh;Uba9l zV?li~bT^W$x=+hbQu8DIl9=6bf3*^b}6+2+NSGy#;B^ni)eNOxO-kv2O|VdvF%NJS!A&gB{V% za63j(H=x(9-vRSGG(Fqu9!zt+mtXFI8{wk3ss7Zm2FLh;01R49Cj*%77L?_)p>%F7 zn~G$D<`ZS$IvMv^jc^?9(LsVr%0GXKLFeP&pcdU)+p(jkqjvv@!lcnZ+Sd?DBI0}8gmo~0aox8zjp#pMmZDSYf$mPC`^kJebrGWY&FB{G_jIediVK6BTBZ-@T zEbOMnjN!b+5-yWqyusCtuLRcNAyUp#|->GTcEWm$O_2=OJ zC{Q;kbW{wsgFa#38nS@`bEr4sMp+5lBTIgdSOPN_jTZ7&_7Nu7dtw&ru)vuNA)g5; z2~>(Z)VYE>lfDso^amBH`VGVyakR6l8FR+7Nf({o+b%lYq>D~(+eN1vchTt`bm>Zd^~zGEhyf7M*+>K z;F)-yLbSJSi()K!SJF+~&}_V&6_^2=9%SK-g6@ATSskH~3mYuX*QMFw?GeM8MhO>`7kQmteCMuE=MPspI@GCc#OKtp{0u$BrN` zY*#CyAfwc@qNrM_e#>7AR50tJ#QgTwx8VDRKQx4B)k|;I-vyiGFe(NZu;Wi2QtmuA zBVu9@UVi#jL0J4Zri5VJRZftwTiXw>P}L>=HS!8Vt(4_M`QqJ}{OBtvsc`Cr9W$)r zbw_6n;t;Vh<88r_Yd+TKnI|={@hD7)ke66A0hwpvU z$1;dMehvA6{||n6XkN8nm-g$@`Fd@?Uenis`N2F$-m15nIRQxE%A3C3eM#kquI#RZp*&70eA%Mewr$c0Ei2MwZ;1KEQ>9Nv(8=!6HKNT#T2gtPdKNDOEsNbU8I2f60V0PDVU0f*!9UZN*bi$ ziuVz|ahRF&DoxHUR-%ZfPppXHvfKREESpmKIqj>Ml#vT`S&Hh)Y0(zFm0|C6Y40F^_ zn^N|~&QkcDa<|xjZ;H;9zHCNG6L z6abP@e$MBmBGv{*d3FjLM3b&>vJhdd0g8AL@Hz($#au(bR&zsk%c8x!mdC!Hkm`g5`B(0v^1 zuh-NOI+lx;fud_Jy7r39O?b+f!hhc6tc}+0J_NM2nNd{_xdv8W0n-hCyklOi=%DHz zgI!m^L)JJ>54M>kCnM+|Y)1OY?= z0%?1O?ei=x7c*5FnPKHUT1gXrRhzz2h?xEIO8Q3J0P617*vhEEr=I4oOXuq~f33R# zu0Bimq7+4?Pv}zFucXCgekq-w&Q$|!={)^8)8vzXG?HMMK7;qTG9^Q`W}L(d@Jg!& zHFZJ9i=Ige%7S=8L3qM>&GfClByZyNEAu*`s{1s806<@Lkm~hw3-hk`l#tYY;M|^e zb)n*;GQ3?`%P;xg$CITFM`V;eTJo6$#sx4pzCGtV)YS=XUdVJr`Qv#i;we@?>y)Pc zXK)vP;}3dd&xM>Y8~y}_ikQ-H;1k3$~(A9s*e>cNXERkh6BHzh$CEU z-)5(?P>8@^`!^s`=93>QXv=SF41b?!D0~Bddv=qm)O_~1?dO0T?GK&bs7Y5~8_RyJ zp##|vtWi2X`w5zA-gCf{g1*)Us8gewmc}W-j&wfk=Hdel+jG*%JTb zY_kMKA{#Dvroa1fJ{@^XwbW%*@jh2oMNacq(}ih9c~pw34E-wlk6Y!doHB4k*Z3@d zEpb&HU*S{mG2vQdw+eR7jIV@jLH2@9@Ly#h!+gG6SLeOZEWs#5*nY1ox*%$`G5>ep z7P^luYWql)-lYHn*QFRsOV#d zy851D#pB!nQR2jz)j>8x`3uh=HGJ}UGn|xL!bOPRHpFJvTOLOFE?9LxUpqOT%q=^Z zZ>RY^tUtn!hq_CS6PtM0QiK1WO?XY=v%*@hr>Z3s^+SL|J+C+E(43ipxaetrqT|Gz z=?^);_nFH^9eC4pyma8p+e3>pe!@Z4r+fOWgM4CC5)AJgxFX7!tmwN;@?>#_02QY> zAGc<5Rz+yd`s|aD&ehgqGqCh%I?8_IbMY5~4G`Il3aRRdpGgral=?ap->&F=Pdy>% zqAR@@3uy(=U(wJA)W-4W2pFY*BQXBR3Mtng^=)w=(@)_&36&EETM!* z>vV%yX{`}1(kb0vUn=gkOEOxKwZXzBN%o|eEqTom!OWpk2bhYb0N!FW1%y@X5t3xn z;!o8kESTWeBx#fk-vI3Q6vk^C!we{qhVY=)=T=uz#HHLwrSV{hdu^5Z327>D)u5pJzP>3e>XL+QHWm%q+R*G?v|@sN*WvmcwafWgJK zZsRr+(%@(%rCYxd3+FnTQBg+@>g+x@k;k8?1u{z9lZWZrDdc;UU$Yfur}~+ixY{jk|g_0>$WJ@5~0Dd z9IhQ*!|;`sHM!{Za!HjnH(z|jS-vsB(|kV3|6*4Bl8-W*9v)rWS<3k)WwViAi{pd+ z-(UFr=;Y++vxC#edqH>T*Ws&LZ@oP6!B z1PlQ)r!z2r@dWL*&ZN`?Y9qg&hmYmb+Zb2WhxCjwc-)dJlo*AHfYnwbi4^a=_%)r4 zN(p_Vh}JR@Mp!ef%xRlfWHL#C`-`j`0`~LC0x6>jOQCEOAV~KsOIr(IrCNpIq2>0^ zF!5lga@gL_`2?tXvTwvvl>m)3?)Am_Tw8uH#Vv7v^E!@j{2Ook71MG4WHICI@6RoU zQyeYXj9)9El3$=f#iFzu;dFgoF!P^ZBNwv;<+0*6$x}&y+Z`Y#r@=8Ay4pkWz6DcY z-jS`odHFGY$C>A4^V<97M8H2K>RYZMlBg41`0I&N5JF=t69;Y}t#7?N<4J z1s;2U5GU!CS9XaUg?x&DK-?2MfLH2d+G{$eP0wfeqB|ntzw@l#jLM9Er83R3AcxFGs5Q~p&y>b~wiOykU=OE< zCSAs|NL?Y=jTMAych`#kuW310qZ^;#-0SNFnM9YQU$3SV(RDv#1L4tC~(0v1g8Sh z-)e|8-Y{4|#U&i7FXraLUf!7H<4u!jdYoht&qGXb*^s;&bCtdEO&Gx7Ci4nZF! z#_5E&9`MZy>H%)CJG}`}MK&*7f_Z6wU&ktD24=o=f)Ik&?ed)mcSMd6`}FRrc{}0u zJ-n;-J*>A+{P&vshI&r^87Ub*#%+D6_agowz>n}bNMHz5{?|Hs3aHh1a({u9z{2;& z64pfqN+%4uYsr;s>CICdVJyh>H@J#$Df07|LGS@zXPYe2dEEF;8f3{s`5at-U}OP@ z8Z9fJA}ru$wC>QZEv77#)RaGCwMq6%Hj#?}ywBMCf+mh0EgBj5WdR6_nX^X1dqZ@9 z3nDDDM&@#;nZsJ{I^C?RZD;R=B~I*tlxV>-%Ey#taz0tom9vp4xaA8nam9EYGx%S) z`;VZK_}j-*umYeAC%89xwgee}k5jlKCL;x>+|>%4tJq#VeuU%X_~Vb0^@POfJT1U~ z@(G1Kx>tg_>0^RYGII_W9q4PnUGT`W4gSc7>FX&U2#3aw80a9jaA8&V_HUc z0MlT{Gg|f85A8~doWe*7zOSe%#}vmA6w#}T*J$hP-I^+$9th1ndeF)9`efq)--X7z znDkBeH7a|Kmjzx7GVay|7o`gr@iVx+g_kmI=5vl(JE9$?EcqC!^mXPRcqOZgM^uPt zd9%`OR%M&>1BzU7i@5-Qo{G-!zTJl~USIfd@8saQXI(IiAI7cNj}Vy+;Oe;`J=mDM z5kABiv!%_a)*R@a+zYT>6X-E-V&D$?y1`LTH7^c)q({4p@t7|Y@+Olr-6ViWd~V$b zP35|zc;J;9VzAV#yBEXUHq$noQ$Af>o@F!LV0W(g>h)vxC%Dmn*(he+a6SP8QC&E= zeDOxV`EZtJWBg11_=-1a2j**N5zS~w5PI5KnhP&-Z5T`PnfM}!`6!(NGqjaQcIr$B zTrFl-z)_hPH%*T#pvvVrw}1{dG)hPrA9$IuP#<@Xrm%yM&*hB}{6;7S)qFRKQ193& zW;x(v=w$W%y%mUmm)kp8jj@s<=>6|U`*e>}YgkX@NURmSrC2YM8!&#FknnqU@>eH% z>&Jty;GAgx=;VvN(~mv@fgVp`O>G4PaiYI~g5!rFi_t;-AtK#7-BT&>OooDQRtJ$a@;!P#gYWfX-4`k~ zgG3NW-1oJAgaoKJ^!OVDu^z8|!e8;~&OV~{xsoS|+;6{A^PHnkXBA?sPTVwb2Ou5U z8;`flADyTQgFz<6$6wnq0u|G41&$V{h2NG)8C@42gwIFU&le06KVevSSy@H) znw+$;^T^5q>q-szJKTn3Z)&1dX>;qJ%9>;TTuxnkcI8qK6`QNF<1Ykvut>?!JIB9~Nu zU$IG&#H0jO;@_)9f(AL`zgG8FLt8+V;^4yGD|ISsp})?0qk`IBkZ6(T%=*RZn1wlS z@LCj0v*8sBrn{ydjj%qk=J@52Plyw^;G&nq@!AFc@c{pHQ}a`uN>YAv6pTekG?U=T zEn^H~kCe`eVv?m(clVA&2k1nD^av(@h_Lw_#*3clyM(IeD_&8v;=7Q16ypH~cg{aQ zI62un*Vi9K8Oh*7r$HH=mTn9TP) zALo|!oZCbSCXM1(h2|B?LJB8KDww2Ym7m4cD4l2Bl%0bz{GDpOWo4$>6R`8Y5OWaM zkkj8W`V;xCegKR2z)kh`6EnMMUbggv2 zH4;QH83F4M#*f{qs`91RFh;%@D;j_MA$oEb@r1D&Ez>uvVw_8U#sP1w( zxoI$USJkQR>1eu*uE`-!IR;}37rr|a=ArI%wWEn7jOHmq!5vE; zgQ}Ihgarg?YVmu24HbjaE_6O6Eu=|NLu1N}Hq>SRNU`&_5hISBpet6G6FHXHI+|k`Z1N;@{1NTrV8;8MOWmIe)xyEQ{QK896Byv-1p6sL8V;2#fbI z?WZ*r^bISmq@TTtUuWqRFfY*dCvLcp;CDV=^2_w}nXeo+pm2!lr)K~a8)rd+cP^dB z;dKj>X90W(ko3+c5EK^21*@=}TDwrh0R4g6Ec&9hrqH`2vzy7w1~pI+8r?NIlI!9n?1OsWrFQ z5lv7yK7tTq(xkQnbGSbnyD8!ZHfe(I>cl88#!ne3`S0lZ?MpBTDy(s3;J>L5f>r(2 z!hy`YyFc!YMr5Ki&djM-1GNUF5qN0hmw9UmCT=@_Z>yMtJJN2nlgLb`dJRkSfizKW zOa|PjXfp;1##B|mCLx9OzBN_T$b)?l!-EQI)Yb=?yV)&P#7X zwp>b%%Z&`J!4*rC2H5E;N(U_LdM&U(f2SVk+tsy-Ly!DTO?md^k@v6Y(QkR)J4%u0 zvF|ALp|`-}l;$SL-D7mj!PS0`ALfVYVG7NEtudcm54}&n=``Xa^YOn*&oD#xl;nRE zv-!nG#moZrYupOzeC#3eo}7*&{?NR_4ZO zwwFd`#7NhgTazCA_qM z539b4&l7>LE~EY{*qD|J0%K24%olr)`SLw~{j4aiR z9vIR^>5OinHQAh@XJ1096s|jnde2B3tyjSM9VSPf=r$fSErC1LL2Q{B6Sz`9l8R6hzegya~M^xp1sRerJsC8h;5a~Xo{NYheuJaEX9Dj9p1v?GHF!Wa< zPEesrToJczpb1zHzyXO15*&J9MXTWZXUDNzFU{huktXff#*SM%N&OnfR+q+EGI@^B z3`x6mhH}_?KT12;GN?^sK7Aws2Y7>l1z#Opw_M$W=yf2EBn0G`AD@wbQ0iI(zL`BP zR}bRibIW~*pNIV5m~%JeJXFaJeRLT;GDi_no_QaaAOhWMhin=u)R82r?Lu<;NrI>+ zjZ8!y5W(Tk7B;!O`mQmdfQ6`kOC}%mqied+|D`k;ttU()HNcc2`&cQY7Jgk;3|}9mngfuX z$VpGd3z_lWt@OAM|bBb=7CDU2uoC4BGxZa>yxwTfJSkAwQ%(^%I7#gA@I z3hxp7lsUc&e#4AgWTKTcL$ygTLw6=<{$9REQptF%pr7wyBly2YFA}QSRaNDlo91QVmaEy*+k63$ z#dC*up@1EjW(!bD0|b@Z0~&|mrUAF$rUIE+4|o8@NQsk0P&uCg018_Pm52j17CX)^ z_^iIs0Shp1e|){s0Shp1e|)`_(*rC5!?~9M0RvA0q`H?<0RuAv)zz1W0RuAvDBPF4 z0Rub&-r<+}0Rue(^W&E}0s}t+Ve*%H0s}q*Dg2kZ0s}w;{}KY1{Q?6)0(cmgKm!9u z0!tm2i30;k0;wRE)B^)a10^E@mq8E$A(yBF0}z*Z69Nzn000000RR91003(ymu&0+)E40v?yB0|OA3 z$({lb3;+NC009610002Iv6s#V14{xaw3izQ13dys(3e^W13d!9;Fp;Q149C}=$GCI z13UtB^p_k713d!-`2v?9<^mX(g#-f-mxKue8Ul3sm!Js)MgzMG1DELu13?3G4+EDi N3IiJk4-x|a004o2bHe}t delta 101621 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 BvLyfj diff --git a/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz b/Moose Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz index b5df147ee06384522c45b7958812005951e19b64..3c3d95c9710ff4a5bef2c30a593d2800000c9ee4 100644 GIT binary patch delta 106319 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 z�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 T8Upqzm(U&p90uzx0ssI252aTY delta 101455 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�Z!7F9J0lY{t!K61dR;FmMjZ54h0* zFmMjZ54h0*P)h*<005WX>;W1K000000RR91007z9mvArwPy#UBm%=atGXpvN0hjnN r0$Kwg{{fd(F#<9JeFXxSn-~Hcm!&ZRDgyNvm(ei-90uwd0ssI2sy~|T diff --git a/Moose Test Missions/Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz b/Moose Test Missions/Moose_Test_DESTROY/MOOSE_Test_DESTROY.miz index 084815a4da52940885082db23e4def6655723b28..50a2d616a6eb275b9139410d433db11b6fc5d776 100644 GIT binary patch delta 106372 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�&7PFaJ*l;onvZWADgNNwZ) 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

c+DlV<{ZCBAHO`=++R$xH7_#f^(yG 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

my!p0J_v)QMN6vAYRs$IK$-p(e- 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�&7PFaJ*l;onvZWADgNNwZ) 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

c+DlV<{ZCBAHO`=++R$xH7_#f^(yG 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

Ek|!KG=~Pp%p_9w%$z}~<#T0aWQj_o3QyKSe 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 H0{{R3DKa!^ delta 101375 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

VA+=9ked~K8 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

nfT32FzB$>z?l5f5%h(F2#8Z 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�ZxPY6CSEY{t!K61dR;FmMjZ54h0*FmMjZ54e|AY6C0+)~c6-Y6DgR!>pIv zY6CL@<2jcQYXdU^Hb9p}YXd_9ra_mAYXe3k?NS2(cVTj6Xm53MWphwV1qJ{B000aC P3;<380056w0{{R3+E8o_ 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 6d633fe1e7237329c4f8abe5c3fcbe281ddfbf70..1254f21401114d73b9e6ca9d2ba58f259a42657d 100644 GIT binary patch delta 106284 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

3|K8wQ# zad2^jDm9B$Zqb9SuoP=L5yr9}ZM&!CA!N1mXg|yi^@b(_)2_4>m>1(7ZkQuCG-~Ol zC#nG56Ma;pDcv2le+z%GFqTf3$UT(@BvgfS^{NfR-M#UEZI-H>mIPo(9d~i}BD4kP z5S9CJX4fs0aSPMlagwuVq6KA0y0HICw;I3H{TNBh?3q=}>96YhNTd*`$P^peLvA)8 z9g-~0Bz@fP1uQ;q!a+dTYf6Y&iHAMn{cgE9O-WgYV7us9e>_Mp;=0l&-Ih9t@Hw6Y zs=Q|BHZzQ^?72LZK*8B6Iy~90>!=EAGhYRvV_^A7(B3P=ah4v;#x?p=UVZR79uz3i zoYgKN3VqlzV@&*`vjAqo@&QQl9>dG_@J*6+`Y}hifO;+CJODkw>AeGb(P59LLdCjS z{p7zH5K9M5e~pJk0Lw`eFWh&EgE1Cv=%eQpU?+ae8cXM=#f9hY&xPe&Y}OI4iHRPSJ^?I@w4OEs=r-FcQuv5X0Yk>cTj~_xbkiMX?G!F$> zgC0Dpf1)W>(kd-hT4rOYhANYy5(tysi70OG;zJ(y#(n4{rh}woPAKx0jRE%HX<;_* zhHkB@_2Dl!7POaK#odpfxN^dI+)o(h6XC;%AK!ajMOZ|*0PjrTz%2Bt&D-G!BA`8C zdO1?f*5xR)OjdfU3a#2Qmyt#e~28JyMz%$tpbJxS4xYeL|eBrmG%NT zS)GlyRdfutp;SVt+bh^yX|v6iN`ggH1#y(G`4h&vg)SMJG$)@QH4(`!O{9hi4Y1j` zQ6gssR{iu6TnAxl-xH@pM%d?elEFfM0~$dGDhR5$mDue=`T?e^ag#%GSVeI-o#3#Z ze;%}gpIu^jWbY(8#WA*@AnFn%yjp+*U{cAw1DZ8b`&zHe1d|zqbXZ&3O-`=NdJ)&M z`#G-W7Iz>-fY$qQkBaT3h}x8X9j`4;-z`%l}A&M@8!s1ioIavlFr*rQnG_abY`qgaXnErbg;3x zy{~J&MC3He6pefejn^9olEl!&^jc1S1kasTr?ScMGZnUeKE9V+Oqw6X4V!sef1FqC zcB{IPqQ5>1mZP$%@SMTW#aw>nBGl9^zwsfJ{sfyVte6s5)WA;&uEZ+K^%gSj1A-BZ zBy*V-EIjF#IQVH|TH*;MY8htgrZNzf@op7+?8rmtrLNxpRmgeuJ>opch_muN;yg;k znK$5kwTMF_-lOz@W|}aAyU8@lf2p6i*qa!y`M(_*+#h0LCzaOeeC z%os+RsEsR=I0VYIPcb1_^MXS*oTP0?;Q}|B)G!`pQrsy}Q$0{b**p*@f47W=g;rV# z!8%h}3f(HlAFMggdU9gPV0l8CX|(%H#42*~Fc+8Fm}!1kL|IW{u@gtYBG+?MfX}(Z ztGZQBJwa$n)>KMbfdkvmp_LOabeV8AaJ6OV)~@NQ`AJRp#dNw8Nf&GQ_!<6IN4IMx zjhadafjvJ1Bvg$WV`4j_e+IuvO6Ns4NdR72w3AsTUE4|5ExEN>{6W?eNDliclxf^T z-Y>_Es|F$%zL*8p504wyZo)Ms+yvGPhbrIgcxoNt9L9YJadrD-R6Bb+YSpS(c~zwf zO1N<=S-IS;?1hWq5W1bgDO>doZlOHqU7G0DtyoPH#tj%AQ96W0e=%pme6$Hm$-JXN z@s%EB1TaCNIvz+W2D1mpx^P#t3M%S7R1F*PE4MMLxSawwRkZ9Z4E`-wI-q30PXUqG}&3gKMLe^ zaU?*dyZwF%)D~NNo>*xfGEC`eQvY(gMZz)+?0tYO06)Xc9L~wF4hNEglX2vh<08FW zGo)IL@#vhoDUI%cgAE=ddQA^Z>H}BgBMsdk8{3i1|~H-pVhK^2bPtJ?QXyiSlxQ@ozI6Kj%DX$R zl0;AzC!r)Muyay1%UK!CGCrvoy6ZWprfI7QN}!}Dt=&s6tydn=tk507>s3eOKy&oh zQJlj=D(xQHf4+sfr6jjgH5EfE`Bqv+{d(%=-&EcU^sQ~WVv?VoBDA zI%Tbie<4Vg@u<~Bg+aT$b%pl@FubKT0zyydD$IUT6m%zA3X(zxDowB#b{U4D*|8z1 zVlBLvC+C{2a8$9MoZSU=VA~O%^*bcvfTMF{$6UKhrbmDPG8NcFzPEow?`R%Jh#;lq z>dDX3alb3Cl5T~PAoM6`cT^EWWYBjkv`G;#e;7;fLhKwa5isZUeBrzqH_sT2>^cb; zs|0wYBcmqm;_SUQlG#9@G69ksW;$-gX+1cUpKT6#M zg4ZU1uzbp^?sAY>@$??{G2{gYAoOUAUge+U)2H}^*hja%O!BE2Xe*Gh2BV7ywS`rk ze+DH{Y4CVo6PdE{+t|T0TLLWqG-{Q}P(^SHW7|YT!y2**Rn1x40}SljSQN>`m0y{wp9srhrgN5$p)A0Ql565`Nv=5c(*z+a&-$1tLF-c?byl;+f5!vX zh%?q0UD-RusmQ?}Fwp*wc;KC4@00Sg2Z-&)DP_9jkQ(YZqlP|)BQmF1PRLjf;D)7( zi^Ks@A+1sUaSNCXBWT;zB@Pjod;~X}sp}pT9B<2wVbgIWfzqx9DINGh6g5^e_rHZx zdr*XpC7q*#D>3vcmEj>%)MkI#e?J1KKb*9kEx$}~>s_veE>hLqF;3=-dM7ulUc;Tb zoJ>Z}fSGHYH8;#QD{@y48KGQ9r+qnK=fN1f;EXVpLk_?UJ|upCKh}7Z2b0MsWz_hN z!w7mqboLqC2I^@PKJ>vN}`aL_+i~j8A&=$->L1|Gs2~)lzDY0=1;VWb|8x`npisbx{=9H=gjWVfwssQ_XJT+< z+js5ZTuU5XTz)|Jtelfw(5?0tp@duJJi6VTXnwhb1DvDO+|AMO z+-id5aoZm?8rI|jzGd`PSlc$uGb3YGi2a6*QPoyGZE^JzHusuz8Qo>Zg=O8@d4Nh& z6Dp5Vc_0*DgjJrj;fd*H2X2EuHJ5z0oM{}*lxB0}y%2mO1R&Jg!|XYkhqQ)OPW0z& zX3x8f9%9mEF3Wj+fAHU6Io`NX&*b6I(jO9q8fx zt+L**W)C>;Zdg1XRq|=LKaiX{lB^sLj{L#k$R7!g9%mRhnmq;_J@f#u#ytl7DN8tT zub0z`_zERxyn}g;RD8r!?G0cWx>4{!e)cw{e@g^9X@q|ouwk}wgKN3t zA&3*_1pM$B7p>z4>?HdshAWSg2yn>nV3k$kY%INOziHgu@J#bG(Q|5OW_$D9CWhu; z9no3?eE6dW5v*H4D60|W^s-_ z4oC*_D;fgG+~pg3WagY_w0Qpk(y*sOXoAbFL30rrJ_PdnNuv?o3?gyiF?1OtE4q2g z8g*AW9vx(tH6e2c2y*MddZSdWdVT=V%}i&{p*ekMe}56pzsC8KU$=ThAKlrxjfe8g zDx5DJCVPDvttVmD7Y0mC<&AwF(*x8v8 z0Rk2je}4}K_X!3v9DH9uF}-C!5J1B8KrpA*zdrcZUhnpv^>$LM7{281G?v#Fbx}7} zt4Q}+f4X_(I6^Y}aYU+t)~)pM%|J`e58rzk4;NUz-Vaj8uOG6DNOi!cES6~BGdiy8 zfFWuD)~~SF)Bj9^OS+E ztn|WrA3-H%qpC`>y?paEaNwJuaNlTnDp>&@e+`P=>SwOfi>7nNdblHN%v!_y@pmmK zGDx#Lh4a5)XXPe#quR*I%aNwC{VJ}-typk$4zoIwG#avQ@Bg05E|$LH&y2C3St_{K z9O%Q(eTt^KnX)xy_2Yq!%U8{`)N!GNzK>K40)%o1FZx35P0Qw ze*xd8mmaR;M?q|kAhWY`uMqR~mRYP&^T=y;7U!=X$iDp?)VB^}Ph_%7RmWq*w(k>X z4;JRE9{dvxV^%b|w~Wt zLrc?x_SB)7Q2ZWL?-Nvsjq`Q;TprQJe~(7uK}-6C4t-4tZ?^7G;qlV`oD)d(_|9jG z8A$i~TgScexG3QqKf~WIa6d615OYmG=`lwgFKA{111{WnjT>!Cpc}%oBlZ`sEN3?uq>=9f2#0W zVvOUKTv8ISEvE?So_JRQc(>lg#g{;WBK@r z@wB}9!8aOhrQ7*?xFKl2M`xqAhkr`}*c5M~>?|cvAa)}9>@}r`7PjU^h9A`GIVYmu zj5BDc=rr2)rutR`d$u9wZdBrge-APa87y<;T77fEU~X>)=EWGSP0Bv%Y*3*P<_$UQ zBt86s$RA+4aoD!D2A2wAYYMZvDndwELwd8aL&@HJd7)57IvA7t}|6fW( zZ-lv?-c2%0SI-6Krju%$X=GGS}3@s`qFs3E0<>*-1ct&Xsj#ngA! zdDz!g*yb9$->-YAvS50yoPH`jz^z6`H8H^i1wT4)Lv@#mBrkqK74?*=sk)M0dSRKQ zu0S@VRG3VfCPresbTX|iLXWYMj{XGQEr>x#gz$BibRhcr`&@l4f94A2+i*CKvMw?( zlmTij$4qNu_TWp1WP)@l=k&HF5cr1>@6hhdY;`1xXA~y=>9spTR5m;;&0U)w%sY4E zBk1S8?T?T@w+>z01{nf1?U2wvPa?({aULzy*{)MDYM84nvNOmQ$pFaF{TK7df#r_% zOb-9#YVax4UQGj4e^$SFn9@$EO!LM5`liZM`0Xg#?Nv$YX>FEbbvs6~+2U+=!!^&a z_^^Q3-0??944*kH{vRC%>0*@?LSmPJe#>*4G0%OQoV#?CRcli};CWKx9T}d=dY?Z) zG5&lZYL342Ek-;uCqc;J?@)#0jZdbIo>&dlv?cS+Jym4Je;KIR;Twp~nuwyd&z)8~ zP>WwGgaD{wXyEkzYVjy$2 zzJ-k-$N49~e}!--z`Ju!fD7SqnQ4rm2l%n>8=GFEYYu7rJO+I#zXU}{!-ZW}VqSA7 zncpLBEv}|Qa9ie5k`dfXFw$2gDT~ssYKl0;Up3Bceb#twh2NHjapcCcz1jG)?^V2X z+=LwL8G(ADev@)4-+@UR)bBHSWuK4NZp~Z+qG}w%e{kj@=$<=llxk$t7vbU1#gPu) z0XV>w#nTww9oOiA$S-+>;49G8837(Z0CmfoTC`T&ecn@AVn)Wc_ZC4}$+<_nW*)Q> zc_R*2)STL4DdyG|b9i`d&7m)H?%S(t!Lef+wdrn{(n>Y2Ig}C+xr+!+QT$R)%$78= zFsDKme{N|#es}ve3bFHjL!~_OC^YHK9<}hmv#gW3wSpvAHHN0q4t^McJt@X3dvZ+rU0_bM?|)} zOw9cn1A(M@`7Nf-V7HqtGwwsr(?tN%Zr1u3f8WqUKU-I`L;D3{lRJhD8}*?>eO=X} z36l|8AD!Cn#(4U=!0-R_G+PdWe6biZ_=KY;`ya8qj|YA=?APc}D>HePQWZiPqj0Jf~*-4LXd{Mh9B6!NpVYZCtP zr&XepA-V}YbsfuwzPvgw7(!~Fy871lMw%+KIr(T&G=~yf=EJm#iT4Q^2puXqE1Zz; z*_o*CNLU|fP$@)!@^N7hc#?Djekv8GI!srVL}gA-|4CnnWp(J+5)ngKXD6xM?9_DO z$Adetrx^QUW%}IPK2Jt9Nq9d;T$6SYpC=vFC@#>G4n8XZtCKoDQvq4Cjy^~Me}XN7 z83KvY_s5+?&BTG0#iVw#7Rv!DVeFRweU@G%-B^$MN&;oJAed4u;ew^_y3wAKv*k~B zn7T2nF=5V6h%0>?LdSD{YTCk=?UD;K-=B6grbqU&99AXMEn)|NbXfV7`bHN(l!df2f*XI`py(>vAk`m6ysU&4D|zx^{Kf^)B@y|2OsX zOjr5bp9Qx{9=KX=mA*S*gmynWfMBT@jd7f)nlB*|B zO>j7io>Rk({h`3uMww32{i>xo$QcQU;e~E&Ek7LyA z6cm5yXzdsUv*u|Qw>C`OIvE_g>epRN*49IyjgFs;y&6tb0Q7uvIaj9y=Av}dF*LKM zQRj1`{H2J_I3tGsJ5JgS%1A>o4fzXVXw1U{$##qNnQuk!>~=oj!IYewPW}AZ`Rv-1MBdf-RL5#TKP*xQsbK`R?E<=3lC zR?rm#n=KnrZ`4s=hhd=Jp6CFsg$Wl%J_luDH~XM z;9~lW@z-2pw4P%iyrITqFi0g}OEL0Qh$}s$VwIoPm+WFLf7u)zXQ{)|+W`2#!}02` zao6RTV@0kXZ&0tNDeNlW&Cd?vu9XY`6lKxI*y#5OqksebcKYEcx*Q(zO`1%XdG5x; zF+|4m5(rV+rJXsLwow$&;)3G(Kf^5t;NW^m$g;ix5a7d8Raq8|jZtRAsTej|i%lj2 zgk$uXew=YGe?tLtzR{^o4KFb>VpOnP{BS4`K}d{e?eBV1KI&g|$Znhx_lh_DQA zbIXX3^gJc~+gVXB3ppC+=h%WYOCo;ZR*h?(v<$7Gf7KG|#fUOL3`E2Qm{;l|DmT&Y0h|58kLl0l-bbG*4R@!t4U$PRO?ZR(TUfV|81WgMm8 zSW2A9y8HB6xtB>%7Ipa~~ zvxti>f8sawqeGZgL?K?*xDlocL|`YX$-Od9?v?*X7u5QF91qm&9@YWNrCE90(yTme zX=a3zm3xMhWO%{1A>oXDu0C>c3FWwFRM|^m_xRL?da;E3%|i=GF*UXjMs0AR)RnpN zuhiyWoh$$9|7&<64Lo9eB7XM_P&kuoe7dSYe~%cVh~GV9)a(MSK5~IpAGkm>qVDQf ziMm59$(_UQes-D^vjZ-oeWhO9nj32G8$IeH)W@xj_Yf`K?eA%EuczFQWv<|N1;xG6Wi9GTi*m)_w$&&HKIHY7z)Pd4^8Pqq%kCTo^2k0v^Ymee}24ENe<-2nyL767UjdV8)bJc&1MW7(@8vs z$!pYkO7@#Ol}xjs@~qynJmh#A{p6zLbAE9QX4!|2K!TY*>}J`*gEqP93d)mHhMMlj zI>;t{Ey)RJ)_ve_)v*nmn{zD3PN=Ts?R*n9bu`PTY-)Ogu&REM#Fwo0W|jVYMl?&0 z138OtVjW+(saFfyI^{p?9cxn~MesBKVk%b_i7t`5^LZtf2tiRekOW`U6}6Wvuw}?% zcB7(&zukV!b7wZY3E}XQjz%j17n8b1H-BdjB8c4Y9~=a#lj!+_NHpj3s7|2wRw&RS z-Prk3y}v@K>?W{5)*q}e>p+`Tm;Hw;%w9Jvb(wy&!c0w9v=uy{^ic}Uh*eF0~Mw$&;cjE?CBw z!pmQ6&y5Mc3y7zAGTj@;m+g<=kANh=^ca_)Z^QF1P&A{oJu*pz`FPo=Zh~oXN@M}k zK6z{N`KT3nJBYP_m{Es232rH}S%IhK8_}Ytn|@*G=NFU6M=gKW81s2!%=a2&zHhJ6 zw%0f~c+Q|Gq0)8;h3g@#m6C;AvA@G>vvRz0p+9?#2;ho4Y8ii9E#XptZk~=3_;%Zk zWJ;@lx&bzdCq=q}tt>b`t`Esu3IW96Cnub&Rg`Q|$tneF?U5X!<@i|?PzHcVIQk7_ zE}s|5oVy^Qt{H#nrMmn&)n9oclQixF%I$UE7L^+3FCR-@>fS9XFb)2{35l`Sg=_68 z)pQ7*USMU1VI8us!drCXynI$;m!^)4ze z^&rb`cyWJ)Nt5NNEQ&&O5lEtS65!XXbeyPn?Og|QpN z0jgIG@G2@+wYV%tMcu0Nc7CX>UX-L5R@E=V&(G6W+#+@C*-Gk|)zk6YJZBJmJy;W2 z=ca!m`jnnHRbv?oxopSkCx*o}rE;`c*%R?b{QZPZr;ZuVwXApST`xW(-KnG^B_l=8 zj%_-Ow6Q|&=MZfnpZv?@SVjK$mFqLS$9Iz$C=)~kMSI4{17Z)u~Jg7qesFnA2Jl*MkE7x8469LAbp5KqBPa5H~g zURRx%z^+iWIQOekE;FaRl9__}6-s5p@vS0LgDx2z^2asRgEA*4t(uU7x_sxcrJ)e4rf+lsU1Tqx7B^Z5CNC(MvetK9>?y4 zS$f&{m}-qG6~Rv)$Ay}IfLGPa@bG_VzidCjYi*N}Gr8_qQXQ%O#3h~~Se?i)qZ1iy z0@bq)5S`6lbtj9ePrSAHY~<=Nf^0i;GNA`sOESE8if~R*JA0}(604Bdg0ZF78AeGQ z-x3S{sX)3oi z@uL0}WMCJCW6p}1qJAuetd;%}yH~>ln{)d+K8M2U`fT~#p%oP8CcC%Ot;q5458dn8 z<_e01f4{Ag+3&z?6};}~4t{?;)$c-_wLtr=SNCJ;GNdqaFP;v+r%N(&g~H}IdLwcRi12Xi>WsX=;3zGVrY5V3rN5>!#kpm)L*fjjle zK&)zgyvsE!8mF1trWk*n@=&K|5aq^sGNCC}v_idTG~&7ODPb#}m??#7{{v=xP75(w z-2D{g<6BQjvMMXh*Bczq(q2qihrND(`-|R-m&vadWlM5wg_yh;WM)2J_!Igy7@r@U z_CkvQ?Zt$vDa0TXz)NURmMqO2Q9mEgl9kDd%pO2ksEy7^L~egWvP8Rt;hkIb^v?bHrA6c34B}8V)7HE_#RZ)VA?3V%n<2!vK~U#5A1z2W|3bdp>|_=`03Fi68e z(N>zn=7nUVbir?+gjyoZQ&aJ46Ec#J$>b}Ok(gmUcu*dz4pQW20c@UqZ;ah#eXuH; zQ?WvnE}GM^Mx-);&Kz9rpi3{%5kHh@pQM=&uaePhoTz`aHv3Osf~UBJ?k=K(=B8Nh zF!Oc?6}uV1|8u@#IOFUXdTX{H@;mh>5e8ovAPBg4?UHzlU!_C3b3BYHN9=jynFYd3 zXt>_M_D8=d0o^-LHB8?t;$^{8AR53S(-f9+n_D7}7njV1QVF^7H@vZpchO9PPjGJA zJ?RL_f*F5?1l076L?#kfUVr+Ixk-9TF8c%lJ*O~hK=}SRXN^X^o6u}3W$$}vNEphW zAj`QYk=A%;dV!FNPMuwyai%U5*PLU?ZFXi`th?rlSnR|TI#s;Q*rv1Be%dKJt4%+* zphsT|tV4Y|>r`sm+_r;)L8USalvr5S4K7Mi+0=jLBZ=Z%B-b~^ZC6mkh$9hkA$a=V z$$pJ<_Lu1f^+{Cj(j*EEib)k6hXPeFKaw-OY${Y+VVBu>wRgV?KdPq&rqIH&)A1{4 zqyec`CV`2*x-|609VOHev0xI+)0s#xx%->0$YtP5ovWWm8r2EFoc-}RQ-9adqoGty z$|HX_$Pvy4;WwxyC_~xZNtI;pCLBzy@H%~G7Bg=r6aLjuaA(H&PXn5+yxE}K+&3dO zu#@!5|3tuvj)O-(6ePf#L|zI-l8FaKR?;-KfbUqjed5J6%S77i**<^% zmIxom>xpvSjML2PkquWr%B2<`-JJ#D$gZw#OHXsh^?x~VNfV^ zJX~}z`H1i0F`ZP=C(mWChgHQZuF5KO&+R<>^}e#R>=ncAb+P#PSNc+3Uynl3CE}Ik zo%yYVGvs7zbRR$Z1Ybdsi-Ro2Yma|^dD?x-HslR`c=N6pj^jK}@-Bh|{qxx$PcY?< zlL)ls{1IqymAIJt#?gFslT0ND&2^pSg~+HQta1~hh~-W_6uzoE4 zo6W?p*=)>LBhPs6j-`Jwn?PA}!i%Q~NKquT-Wc&%J7!lUNruzR=nq7+#5P{K{ z34^%A@q}$+JVa~HDso!nrf^2*Qr)p80e<5#rEG-$l(we{mGpHC;edaf9cvDDx^atiQ$R7D5D#8JMjx&z>YxCPPCx6mAp~k|}z&hX^cm>?<;`YnFnG&&EI5W``7%^D>zv z(^%GlaaQD3*kb7&zbA9=kzohQarioIn9xpbg-r_M)hwBKMs&{wROuVwp91Wb{L6Q* zXZP|i(v?vQXWsR5dA{;oo(Ej}*{XfJVetmf-$cgG%MHW6X()fyxn#{6258{M*{@DS znkH6MDl)~-Zj37el#~KAAfIF`jyW)Qs|b=2knkZ{+|js+aWc>f=cbEcm3(go6p2+% zhO*jqd9LGI@tUd%)lAmcuUAk7e*rA(irGm*2z(z~D}z)B-Ysn}FIM}V8#RVUrSK#ob z3*G^R(PSj`|97_s+f;bw5D~E7+un5myS@J4|MUJhIi$J^h% zbRmQ7FWg*yJbLK@zBoBLJ$4|cFZV6J0^;<}!G1Zfo$Y^0~q9H zKAo_a4c}6BOqGVAz%M8~iaZ%#Fq8)e7>vcC9HD;`uRo34uMWv;h6C#OXc`@?)3jKs zWAy=qAP=Pc#1?l!WoT{_Fd`V!38EC56n-Gb^b&aE1|xarE3{_gS)x9|oG&{?Nu0Y# z^!YSJ71PP7_>SLK#I4(MkZEkpAJ%qpdeo6m;4A+UaH&>Ja%{ltgzihI<8C=v#YX4& z_050YnT;~tIHa(UHZRi4xJX3GYFF2kqAyJo?C=vdbVR#dv71fS3xR&~lgP8K8O|{p zwRQ^9_ign(sB9pEe@xA!njy%O0@}Qo7L&D^S0qu0h9KSZ^OW~;Fb2R$Yo-P}ue?c+ zFe^|fs4)U80jG+uGw+}GzQs8B`Toh^%SeAP7NLBeLL+UR;!A1Hp+rvg#E)auq_Y{= zJ7xF6=`U2(BLn5kByWCUQu=aLyhDswn~IX(Y*NE7wL3svzY;T=aR;Z;m94jchY*7A zBGnXj9_a4<-& zeF~_iDRiXRwu^ZbK`Z@=1%`uKhF2DIzs1lZi~=50;Va2#j?piD!*TdF%eIVKb>l~> z4O$4wR;72Nc20Bj{zbxd!{EQ8`V3BQLpNz${y_yvn#;}rN*#kpZ{={-#>b=eu4vMT z%B>HB1qE`|4@J_%+mjK`OX^m{-2#7X1dK==hq&D-0eQlGzWzKRn|C2p=^L@DF0)-+ z%EdTCNc39mE-v`OrgClMv|^6PeGoaO9@aR`3mmIKcQZNJ(t42qMwDq^;S*}-1pVuj zPRYheYQ0{4eb=ok6Gkq*=%`S+ClL@LVO;{`XHTq`cb@Xnf;lL!_!rRVw;q4fTA1j( z*HiX*pR+SpZJEh7k26q^kbt|Q5`6mPo zbdAH`th!mZSarXoIh`q>K(l`e%|ZxzR&ut))ckzG^#}8JJ~47)n~A1sXllA%cDUna$#TYd!WJg*S({?y)yU! zhAqmlos;eUmt|n@s~%lzQ-+`P_D*{^#!^n$?QMIUkM|Fb!YOF9bGUyRXK;Gb^AZpD z`+dmz9LAeY233hYzaWF7qpx9X<|T}C9aPE>hph($mYq_7A<2b9jV*ae%A>0fwi(?ae`;fhc&TRM$t222fTK zuQD~H!o%(F5p)MotaN|bL^e%-z;2_hvbxTmz1sTYtd-AR!z}nPX}#KdKZ0$<=`}uX z!ecr~i!?5>X^Rlk(K$Rk{otdI-g^K*K)=85qs{0JFm9O8q`toifA3);LJ%E!!sNJG zIt?Ja{&R2R>H9mMoopW-Z)~Si(U)V{huMs0LGez~4Y-yR7~N6$P)*){ANZzDx=3JT zOhz_}OOZ@0csv4!ArwfLg)h_BsC*1T2}s2%!IYZZZ0UoU;0o_oy2k>rzM}_%>Y=us zX%d^6S|a9>HTag%Js2z&Q{fX&v*SZv#Md{#*~IB?iT;S@vYzmd*jFk+7D_=h^+D;C zoOGAZGHaQ|3?6Ba(d#uGb&SFu1et zRkA&BZ4KSe_Pnk;rh+K!geG4CT5f2>pcGq~Tee)3syq^Z8KR}!(gGtGTunEZy86?P z`F8PL5#HkbpW}*^&Vt3LaFzz{u#~~E`CZE34J{=GN4rOORKWFr4V?w?-Z-M-N07xOFIQ7M5EJ3QHB4CZ#M z&e#a)=vBnbwC&Oh%3KeU`Q1YDxw_6F@-f(MmoU72N36>Nhyh|*)ZEF`ODi)DpY1Y2 zM|9>eRR#9gsD!zHBmZ zdZc=Hl)vG_|wxWu}xiBS@JI{EYs6r9bn9KO=2W{tE0+n!;PPg#eAti=7&@)7#U_*)=tU+u}(<)s`ajt)Pj2ukW?j)+8h{8%eK< zp}^X9yxAR-eg*7(&3Z^2hKaqN72i!>&o1|&m6KZZc-BiGO+Bl6%LF-e8wM=tr2(YRU3=|k7rxWa3JX#0xUw<0&PJg$?i zUmJhpDVVq_vNaBCN~R?uT3xrZR~yyt)9sXUD+fQ!M#(tmF?k-trS29K#2N^;$AR5# zseM>kv3q*ZJ8`$BR&QJJNyK%f2)v2NACdMY(M;`?;+`;`IEK#bm;HH`79dER-{RW7 zS#Ix{;Txneul5XJF1YY##h);j> z)Ao!+UwaQk8QB&c;)P#44MsL$$3aid(J#AV|3bvPs$XOmxQqqUZl>8U=_naRA~r@* z?HW^(qkwk7eH8m?aslm{x9(5XNF(o_hUgVR3W-R0aCN% zHXcHQ%*8eJ$f{gvKo%VeyS}F9V2ghvwa+hBAYL=hl}yH{I7dNn9@40jieRYJRs@GA z7M%YdT#ly^|6-erGj4a?(AYLrt9~-fz&*83fK-^80HUzrf^wZCH%Y7n+s7T@;C3YeQwfF#B_cTiCAywSSp|Qj2vh>H_q!={ArX=f@L-AHw zN*~ke*?KS!+b;)@RVQkCCl-HfIYn3BLSYS*K8U(uq^&S9(&2$Q4d^%Jx0R8`SG*@n z0A(vgsN|@n^`x*YUC!N3+OiRyuSBQVW(}xon5unmhQSNMbJs5WOQ%h@D|Z4%gAT<4 zF@!~NYGc^>I{_7#X)P|Uf3huOpPQp?2@p8j*7t0HbvK`KzH{_M#(IBP4P`g?P!RdZ z{4$8+Dc+Qq=#M<`x}YdVkFG$qVMWU(7cotz+0-lpztGl7rqk>El7pZ-!O|icky_$t zx)(GmrZ-)^v1 z(KhAm$eb(m7B+AsW|My#C_n>kiw>3~a`oI%foo+_u0kFY+RQo>S2S)EwemSpP5`uV z=3U`+aI~r|-w;7P{wZq#3Zm^q%uH1w0_NvMWa8^Vk-&>1pKO&Q@jE`DD@JAPQpv&# zVs46g^~2h{cGA5^S3tzCZq44F$LL-0Omw29$(dfDw3`rdWodsx^OfFy8uv4s);>BT zJT#Dcagh#FaKzG}4t|dglRVcw@(j=SP^W3BLuL3rnMkgn&b!X=0r~qw3>`QnGRrB= zzyYV&ryo2ah*~j7KM=+V7#umEl+cL`ch)%~gtT)6=Y0IXY2^P+BagFbMArs(>gw8n zXV%y?A{|+8X0LyR4dexqHiYZB1;GWM86K{twWg1%9{v8(oiM2UE zl_0SCk&~>oku0yUI>vsY5uOW!rR^TF&V+v_50IPrtG zHnSeLlm+XkmaJrI-WP)XlB3CP5|8XoiQGFL^G&@C%*+GH%B^582C#0hf1Ijw_1HKn z#Tge@?ni%pA^Y2w+2S&KWJ%(A2Muv|%*-7a=4l=r(nrlW;s#vO^F>9HO_d(nu392j z1(6XwD(C0M7nco9533lUcX2>)GgZL3MW#%S8sz;P%9Q0xQ5OXp$r(M=6nSgjW+=q-eE^t*p-@iiQV>?p3a*MV1E}+g2094 zZ+qH^7WS<&hm|^*Y*%~sRwvVlx^TC_EG3?m#pL$20bW!0u4J%`qcIC^v3{5#@fZKXu@gs9X&j4EomwLi&HqhU20njs zoQ|{NALuBSf!|~c|1X&*tMiJ3c=B-V`$}7Plyrq-ZLpZ=|A^7ZHx{kNj~Oh$s{eHUDG;to>O>=s)gjN3z zzQcxIh3nv!iv=9!-{uVctE^aH_;W>rpQ!ZJ8jn*@pUv#}U#$3G>t$-lW%>wp{LB4Eu-t#KT7Q`?Q{Nu5R`YZD}(XW%SHN8P;JDxc=APC{}(q z9NgmxdV$MGdj5?fJ8_X*X4Bht2X8o$cXB9Tmr8Hg3dzB2U=>?srXHr+S4yZZH3~p! z?T$}o!mdwg-AhuLpW3Y6GUtD|`$(u3AL`wfBE;NGe7G+kd5eB<hZvycDy`&`>|GhG*pd&)>^PKBOmTb$;NA7P~Pqq zs5swo!j_E}L}8g65Q>9WPPrm&Y}hzP#UWy{GLago)ukTI;u4@!a5sNPy~;jPT*Tq~ zrwk*#b5X0xujyz^!%=O+2}9393^)i1&c+;`OkuaR-z zQX%};RJzh_M~jhJ8@E)}=1`t0wX*UiS>flU{qx?sQo8W8QCVKUM9nH$`H=J8WEkJ% zv$4MU4@xa)`?@$xCNqDL-{wVfjjkC(@e0I%vnEct42gRr3sKzv+!f;Qp4H00%41qF zF?h}jCeYy)B-(LYT=B)e8YGVoXxT_p(568($6%OV3Q0rfA!sI1nV65{27$My(|B^3 z;F-Jf@XuTwZOvErH#&0xNC>&>7DO1hDUEv6XBX{ znTN7?!eEJ0X(cONo{5uPUqh`!7RvRxxaCxJ%$02_Vz6+T`jK@<#5{#6_zd>pIPI(1O%Kj^}vD=W1??=~3nxHgo{$ zQ253VKBuszRdz&x&v!!6C|dj*{i;8EjR^C&Ra=rTC?%QA zrGfyN<$Un+FdkmmVDShlKJONUP zQIZ$a?6!Q&I`imf*x*lZDMKElki=q0D<4MUdX^XJE{T7i;62ay$mW}Ab~%l&|8;?o}V*`Y{98a=2*4@ z6w3H?8aTac)pqsKWatDt2m8?3?bFWja`S!8iC*Qh(kd&Mg%hk~RytNRcVS7+<3wD- z6nZWdD@uR7QJ@_%(i7%O;xL4YBp+c0opr<-4BddO+?eSKct8OvNT_;S6_RLf=#{bE z@gA$-S&b#2P{25-UzW&z`^3&Gv1h+oa+nkp7d-C!KH42-@ZnOlU4?dDm3_lF02|$xm&`ejCtb+-ZVP@iFV?XUNj*6F z^jf=Va-IE>>_bq3`4K9c{Lr84Oi?%+bM}yQ{bud#;yG8g$sw^IZ%3Aet?W=6ler-W z%2a=jD!I|SmvrVZRWfS*tyRrBoRGbUGhV2#`w%$VpZ=1JZ+Xl<&F%1OM|eMEFBQ;P z4r##LKK!}u>dQVF3t{`aY`F5k67eykNrWSFX&b-#8|$Kh4iM;R?jIH%(~F9zM^u$z z%577uGOUCfHTO;#R~P9#O9}?n*JvpddlP@Zk$e>$({njA;CE1coF*Mrg&Xd$`gqkH z*J(UTGcjaMzR@1+0zKE-E-RyjzV5g6P$+-(q`5b%ihRUR$t_=7l;pX4VoPvHVS6HC ze%4~^jNEQC8_+k27j=A;zt}t4<+y3!6Yvfq`N0L;+j)h-+f(GseW#`>B*oKSS&DT0T%vUZMrdm zVM9lJxjydi4Zbl0dgJolgUk19@4J5^e8nK}_WbM>j-COF`glG_w|h4!(^-!4EGv}3 zBuVOtT`j(EYS^}Qjq7~Mo3A#LdT#+}FBYJbTGtAc8AIcKI^|Zw^G#fhdN{iDpht9NYNbhCD&TiEqXP};iscgn)^i2L zfcIELF`(;QN7;^7{UEk?fX!WLY+vIwm*ph3$i<<0I|RdKO3Ph`H`#r7oqU0QMt=b3 zhPVg%d$sml)7%@;8ak;~YUqEg8W}vq$LQl=q@DUw6xlGHxt5XN+ot}9rZX^{Oj)|o zl z7-v~!p}tRx^qleDsv9ucTi~zxH4`lVXNg&5XBn_$LdyE0oCX98C<)A08N`4EqJ&%op^~Ngvna2CzU+VHa4)zi><9H?OLt={ zI%>u~2@L+kYr!^JRK2)X1z^X#$jQknvTT}7bx}6UQ(wl#=;;JGLylu)Iqlny$c0N=1q0&|vdI5_ElNm~eI4mb=$h>G1Utgol ztf`^G6ThSHpFcZ3-GitE_3Y`Pf*S~a{O&+Kg)>0M>SXWf-s#aVhgfrM$ouSTd`?xt zBczANhfntpPu^9dOStSyxEhQMV*8GF%7SrO|HHSf^zVPOx=zodS$OuvKeNHu2h%}H z?L4(1PgR-&W83t9`x9%%A3SF>##G9grAyHbSc15ul_{5mGK5KVVo5oC?7%-YCrS2o zUgcObIglXuO485i_46{9lRLZ!=Dw-AXNw8JY?A+y>hIJoz{2emNHBu?vtOS4GTlkC zS$xAg)d_zhoZ|X?@X6{A1JBFj>e@~nC4P3SW3ER|b$5GoR4S76vBNvbU-Ihyaod>~ zYf6%ukP+#7T~=+xtkrlpg#$_FiXz07Q8o@pOxD)cabP3O8Drm>KfxlJkNx1-0 z?22ZjmMAM=0we2`V`BR>wcZjV9yR$`WgkjL#(sZL&us|F2BX!#dm@aWYt4DhuDX@R zV=7(`ku+{mL@gp=LDz9_&J=Lp1Qyk%3xenv3i;zsR?4N2tcSF4lBJLM!lU2!yzM6C zH9PQ3ho7Mp(TnUe0YHOZ{UdyoKjF1tCb8!*HPr%g$&0+oYj6hAS)KKw?)HnaoMkCj z(T#s$Na&+_4>Lx-N(*Tj;{k#Btm-DZC$YL!s3JVz?VMsheLV8vcU<;)Su0pb3_ReY zGA-#v7nP=>Ew#Z+5ui;l>b`JUswiah~Zy$oQxHNxrR7|s12~o~JJ?`mwBJ60#?yp!@v%^3~ zhxL<0NVf_H_-T%|!Ku1+;$0e;x?OHNLVYB}4DpG+bpgnKXH{pfa6p|WH6I zExVlzx?6L6jZ1rj&fk*5Bx-4;Ph@|qeJDAkRNHEcS2jIhmR~HUB4p!dsEz;;Z0?|$ zb@^@mcbrevsZ%YTa?N3?TeZA(z^UcZ=gy)SEtpp9WW_m$^*^*;*L~UzOz`OA9sJY) z0sFktA@ewExO%_4Ru3lrabmAmQ}?2E=bSbqEdvL1<@8>TY;+dph;Bcc7K?w&7g>iqA}d|C;q%ge0IpgI8euMEMw zc(oLib%CKs)4|5XRzg)r*?j^TqviZXp016fl!}eE*a=C2i56g=e>Q);kBJUOy14}9 z9=MpSuAgq9Delftw~@GGzySXVe@)vVn{7_W?VxDDbjj|?`@oN=jWMlPv$h{|_`t(y zP=BYLt{;*cTG7=$7X%OAaPwYd&xJ%P;H@4~%CFn>=Yx-b^E`m)l3{4{>xeb4-x<7W zus){Rn!0S|Ysu2K4Xl4d``3%INLN6QXZv=88)ZZGL3>dY*I{h=ZTSp{`a3iy*$+uq zN|mNttvMuPjp#jci_-P%pDZQeL6U2TP0-=PvS#vi!4l;>~QKtMqz~ zK?hhsM;QHBXReF-)j!T|?`Q2Gg&S;anw{kZ6{3c0vveuBjR}9WZPm-#`O0tSkfNWm z9cYGQ*{DcHsj~Km5e%kF+!KFWh$F0YoyO9Dp^&h4w$I;l6<*K;!W)K2&C^a&2 zJ5+uLFynulx$oS#!n(v58`8RB@-zAJ(>-RQWA^oNf`gJ<)LF{!i6CcOf}IxoA(h!H z-h@TNGX*Z+31P7a+H}@dnfrF$f2`y@!}u2qCdwpXg?(KvKxq}EESu6?Vd}XO0F_!} zZ)=KKVk#CkWv*dOtVyRv0$;^5&&H~OnYgW;GCzMP`VkSVu#d(}x_unS>&hwof$B;x zaoYvj1y*wu`xRsZeqeXZ{2w=>+*${zYt2<(aWDe@%@r0vMx-R|s*gPp*CA0v@HToT zD0Grl6wOaOU>>35QH311u8rF?n*lqgy3@?69D+t%nV@N;l&7tOj}t-gk@}eCk1}@n zd`^GcN+bYhPyG7h#Rv3;(+Rs)BmQN*tgwtj+?5^}Dub7NoRoRiI|@jb?7JERdh7fg z{3-TF;18E3xKU(=CIm@fMv1@-0w_Ln1T)9>KA-k}SIzL}yoI@{m8PvPk zC5VOWlJY*gyu9H74|@5Z?bGO|Z1RbEnN6Cq+KEy)JQo*i%%I@Z+f>uOt{s1H6L(=7 z={Brt0N*It7PQ>6R1fPFqWfh%W#nfKpzhDVS;SQhLX3pWHuyPj-%Cs*L}DzZiIVu zEau*_7)b`O20ChkLd_nT50|P78^fsRggA$G5~}wZXus#6rr@06Y{9P^R9Ov6M6p17 zC^2B*-qD;W6Z*5<~qVjft39VNl>Y86I~>Hi|FPIv4_FI27P|EcH)0~>tTG< zqkeUr0Y7c_1G05^=Ttoe}yCHuD55Lt;Hw56H756>*oJOn*!k%BxFpnkY#js^t>a)B6 z4IexT8)=_u8-Iq<_gcczz972!!#x;x&Uu->$}bm}Fy92S<;`_uG3+p%To8Zt>_hTt zS=~6ExUik_ndY$8(XM?6T)*Ot(ps9O*t4|8$+*}$(|U`}%}PG8g`n=^g|?R*f+xbDjM8wFBE zL#vT5Tmtw5!zYbjZrRXahC8JPAN{Z*pBE%67a3j=vL=D|>Wqpzr9k)!$hpE>VX%Tb z2)y55x3~k~Hv|(1`)YqerLWdcsPt7YLR~=inkbdN>Pe~e)oM!7o{n8mdS1@wpu-Hs zD3kV+25u+np||lmWuPp;=ltCf0=V{gAG0{9iPBaNjh`7qBE2(ZokN z5d;&9N#eEJ)+l$cFjPe+O*ywHn^?pkW8Cl{z(3J^g9*Tx&nTRSF$2r*Xo-n~oc)eM zQlA+RKRbWnJc{i4oc5!X{s}2`MD z53g8&c{_oj2Z*)qgP6Xc%0OVdAwx;@TcOM_S#EO4@%uf=LAdu4&La|dx4twKBWm$6 z$+a*20h-R;D>s2`1jzZq5$1PE$K{LC7Ysx8`O%yfo3^~nt;D!S7z;YpOVv72o6}uJP$#B~rZg+c zoqT^zb<1uyHLsH>v!j>?Obk9qTJ*{!pbMT$D8rsp1|x+?0T4gTAJMcgHZSGgpf1EM_yBj zQ*pZ6W93uI%ck*@1z9>T z3k+3MBc76`vmNzy-dxf;#F@Gx01C0jRpGME_yj10;-lj`hHX&)fJIR@`n=|p4`hE_ zW@&-RYL;K}7Nx0nftPu^h)Lk&-q9F^cgz?b!Wcbm+4SZSyN@>HdFECwJpl=q&KXi|ROfE{KL&j)88`P<*LQV5}0%Fm1jDxxKLv!t* z&aW>B0!$)aqfckB1e6vH?+F@&`4E3dKB>~P=0m}X@TPm)FU!hs9qC^fhS61`Cf=Y) zD_kU@@>o>vk>GuTppCl0MlRBqka2lg65WJUrbHE>#fX^p76nuT^s;P`X3L6mJ8P;I zg(?@g3Bnk}#pZ8VP5ReMb$D9W!SfNb$ z^$95)C(}W$Zw%j?fp{&ZS&U4KkUk=nYQUicFy&BSyad{2Dofmt1K#5&?Ko+*qK9uN z2-4Nb4E|pWW`=3gIQoKy4<&!-7+H?e7wGD7s7}wE&czmYWW0ZegW91mAB@9=hN-W( zni6CaQsz}gt#NTt4~)GoOa!c0Gzx*nR@&LeQ%*kdGh-EX#Q!$h6K#RD<>Jp80XlG!0AVr}dTkCo!+YZQ}ju;T+8a?P` zdt{GQaihO(yh%%dzqx;IIzN+4nXE(#&~OeP;IkqTsoCa9#WrbWy?TuKCy@W?kfA_; zeCct(&DD@tDwHA_518+ZQ6M=jv5_G`xpA=x2pht>K$shsoi-r@NCyP-;?m=fVt>Yw zbj|+b6MmXj#AgnqqCsunf+U+=YuO>R zsB1MIS7vRTa+w6jCI7CWBQqIIYxTtWu2lKHg-7gLP?w%PUGep|8#v?Ki0@ppBPF@k z7w>Y$$%v3Uh2VdVFW$!)@8OMW=pNqqGDo|omyGVAP%H{@V?J*Nx}}Di0VRDZ3h;m9 zle&K9Ko7A+JXiSE??WDB_+kMDoEUeAbrBy{_s^7!RSyr-zg<9%=6`bVXi}EdG%rZ! zm1oilUGv9ySR^*i=8V5<-PQ<6Kvzpw_05`&^h9rNL8=pcR-I76S%=N}&yS>Nu zwmKWy9UFNq`Lm5V$Y53#?GgK|%3n0kIWJ+@P$_@-$)AMjOrCIIJicu14%F|!mh<5) z0GPoK3hMD>P)ov0iRb)knP1wtB9jQ5X@_rE)&Vu4QJROvR7d-*!A z`oO{258AUF;vN7t(t&uGCxZw7xSea_G~kl`{<#&Yde_eXgrvQ7EgmawT}vO<4X^iR zK(T+DUbxro$aSl8ahU1PJ{8>pRSnWJ9Y*Ic>*JhbHG0**43K6io@d!I%--q1+^eU-pHDL(s`(MNg|0?=|KLe5XnKT;hKu z1;Bccb0<&2RHp)ZWHB*?1=#?_}ehyw%=`7qT@nO7d?Ea|(a5mmN*t4(G(9(+bzbFwq1Ny)6#Padx)IWX*^`xwvHxX*o!M!}nrTew^=`!BnTe*bVv29rqJHf-$_yX=2&wAyA@ z>f;u?D=b(oa!bSnxQdDIC82z*oYg2z$c^ioEP_(<(8!H&!#5_Y)riL%xU$Bq7-dyh_nB{wh|WOIsIUTcGBw*>rW)f& zW7U^gQDfE%$l>&w%F{)6d9lcJMS4Rhuc$^e)GF`s6eyNmQ{#ViJjMlTqDlrhtoTaefM!`@dOZ>Fp$Ig8~72qDTeUb=l&SgD@QFVn8iL1Bgr4hjnag^!dTr(qoZXn`2;`j1c? z)|0YoUSoA0Zyda&5-+=LvPnZLKAdSLe7KR0tx8M|F9!Eq3 zUMuxOK_;+9Rr?VhACEs(@2kwi7%=TRN76J9DZ6Os&0M}!@{|@hDO>KD^x&W&>VUkb z#C`UBUuFtNnZptyd+>y}ma{B9IcqKoSDmOM- zz#8c=0HjeFN;dZVzU_IOU!jB|c*r+bY}e-?D1H-;ZvnJE11G{nFt0LRKltfzpPydV z`((JywJ6BgiMGD=nG5{#&t05x%PZ~&J5HzhqNb7+eX@Unl^1oV*?d-BQxey>uFV>x z%pT3zy)Y8SXtf3lN_dAToXR8DCpoz*u21SZUSWtO$|ATuXu!&H8=nA~&M*oe7bZl~ z=dR&ChmBZX03(v{)M7n zKRbps#Jzu~2S(B0#Xct=@-?I0uE7V&aO_lX#M0JvEe`XC{Iya`>~qck;+=`&zFn zFWB*#@H1BiA$bcrzOgJFGtRrj9&j%QuTpt8t#W_=DPu)^%|i#(sHIUg2N{xx*D>vP z7%aibjA=ZO0N=fX9WO76U=RCJ>#nG&hQQx7NU$q7d4bm?a~l!?A+Z+bBCZ$L*!grZ zYu4pa1LuG5cTb>0hs1QZ$EN?V>KqN#!Yrb!S`cx))zfc|?e9zORFJiM{GkL%0n2Rh zv~Pc}Ke3w+cmNwpI14+H`l1F z0Fb)EmrqcP8=o{G81L#T4%dT!Q>7~!%`ktG>?OSe^N3$etZd00($($-St&mX#p_ax z<`sZY)0Q@KzCIqZ@kG;Fblzccj9tVsJQ-qg)*}_2vnQ57D>dDU@~&$0T2{Mlz2;@F z&}tYVi7i8_ATV$?F7TFNRtet0@AJA5(^}mfSUo8v5FcY9^%|5>RLi8DdPd;_7@dDU zdsJVfb4bQn;UMkP>%*{Pn$$08_C=C?g>lSgDg6)<&Nn$>fMv*yl;K67WeTc3Z`u)P@4(VW&(e;nLxea z6R3aLJGSk{Y2Y&t{Da6okU}sEJ@BwxLz{&F+xD~t4sf8yo48v;Y8N}%C2*D><|mko zq>&;yaay;_4LCH`Wi*-@jYiUF^uKL?BisJ}C<@^cW%YHJ8!ZqzdgtYKFo>*DnqGY2 z-2Y#E2}(rQ7dLwkhH3r(doX`@XIp#o4!Y!lio!YNo8jIGY1H#7hkCOm(Y;oEDtJ|a zJ18&LF3E|{bN@;ogIX~@e)Z0s#g%aM8R6eo?VU-fLgXls(z|viC7`$BPr8}6I@m{q zw=aTEr-aNljN%#*PH{%ptYWCQ#w#`QmYT#B_Pu4Eu+3ZtUfQ2Z8P$Iuee*_@PSa{< zbrg@jIsONaVZeSH!GPissesh3MFK$HsXUn5r)bi~ghSoXFMO8GJ+E+HeQb0J-+cJ} zpLG@gcWox!@eb1e-tKLbBYISCd#=>6`@3nRr6at9t%@jWDe@2SgqO_73h4SX3)0{Y zPb_ZYCLdj&bm2mO8&iLoIK9SaGWz-tOlXacw(>+qa8p32Y03ESne)0+#(gH`HvX?c z1z%ytb>s%U7+zIfr>btGsY314cty2YV|1c0jM8{iYB3WpPbDtt1NAJ;=WJ11i)88s z-^(r^rxncN?Vp-y8D9|_zIO08t{mbrLTvFoqahFrWnUxOQ}ln1oo%ckg4$pOosGi3 zp?+dsHbUlalu9d>7DyR03YoJfFyrA@=RYjgBNUT{4uE87r(_HpNKj`wMYt})=E zUX;{_;~X&2M1jF(b|gEv}aL^$UW{B%}YRrymWj#F4(NPQmgt-PLZI&vCA z8DxeRpm5<5NQ3xY#bPfh`>ub=X1|G@JBsfX@vE0Nn<- zohSpxoR!kMOl3i&W-}vIm-?xud3JdPGkL3VhhwtMh^`zas z1*W~OV98#dYnWG*z9p&2qB7*X6&e$A^otQR@?QhFZ%p(@=sGZGH6nL6&S&TnU`Z~I zo?U?ct=f<}h@VEvk{vE`Ua~P*G##i6?@qLO6A@Pz6&UEV?PAKZ@msoDFaGkOpD8-7 z`JF;OhJJrb?f7wC!}zifL37ZI2JHB7`DJ*; zv8j~z^l2pP3_9|&I5v6(uBsANEb}~b?CS4(PmA&6|tWSo=hrR!m zSl3GIH#eF25o))P5&x^c7p3|F^+yZVxXruO>f+Nfv~dY5jZ}M$#eETgu8xxAP9K6c z^rwGb<9=xZe`a+u&9bY#@@nZfEA_PT+?7c!fbF~amFdwLbV*YCj0UWFB`vA5Ibzax zY7aaVZ6({y8pGx;X4yl{0;wzT27q$|L_m9;b{dUYZH&1@77 zc|O+J3>W9~pD*9MFeNxq4nW5sNf1_FQB z(-2&~1MRTgL-A5NX76mWcs8xP+L)x$-c*_y~blc?gSLIpnd=3@J$^-L5Sw2 z%UmaWm?WFQ=CI!FZ*x+|&DgDCsAMK%4J#lW3`}?5*Vn=R7QSzgHXB)I`@?_JAwKGx zm{w~BQh)CQ{J|DbJ4}vdVnCf6Qi36c+rYAW8W+Kh3O~xcbpR2#`{o!p}vl^x))a>)j${ygpbN{~N2w9`J|A5A3m+tbU@S$$CbFL}QD2!`^#K5L}o!2=SAtnKy0KtD<7W@50Q9ffQWBHcg zi&E#PtliJAGicX(m8qr;rX&xD6D>Conhit{r9^`D`C|6h1^oqs}Fs-(~9D;5|JkkF%6={(Vx;bUY|k_B6$#F1sTrILfgGn0SX^{4>GPBVQHc!hVYpVG-^R@7NX zcHrp|gWV^n|I(>o#N%UygxyUGJ`wMTc>km!ax^?S8Gk)G+aEm~9qe^JdC)Mqjs23- z5kh|P%cR>F7ahmqOPa3!|@x`=eV~HDnGi&8+bhz3P!T;Qmx*i>Fm* z6UTqo8uEW)WHeHj_epB&w(SJ@{*L zkxV!abnZ@1kaR$xcN~@)7E_Efr8fE`pah)2Z-@Q!QUNBye;(@|8###O)m4^OihP75 zE3L9L2@5|)Cm#u@G|_$aTqA8LeDaFs91aG=(UfYy69r3}Yj;QJF61#TbEhSQT6%wx zf`?_-4uA)Q;%48KsGML!P3-h3Iub!v#tjCfkaCK4nKNGTo-M}hC951u^ML89J z>V^MMHN3pWZ$$aTK{CMZqJ%K376o|-U77$)DYaub~!@QU}#YkSO4AfS}ks39Y!d5~+u$10Z-Z!p75)tkpJ(Pq+sA8#p2A@-v^Lstq z7j6g%Pd(}BuJmH#Ch_TDkSB%>BZaVWBE%8@1kIT|k6ui0dOAx6sh zJPOKC9g62QQhWG5@E0miGTIAp25y3R=lLva=DKhZ>u>-CMBiv} zpOe2V^2yJ$rMB2-uxD0ivYXN3X(AB5dzhP`csvJxcZEMxDpkDjvvT>wkcI^$4fqy= z|H%@CrIS{GvmVLDkB$zHPlpG8rwRDkw-2*!p%_+cW@20A<`l@83g=J7{H-4!8F-}J%#jS*Y5{taP0629H zZ9;p?a!~;Yes}`Poa?Sa&H1wogG<^DqBX_BEKIQJ18Pw$saZCkXO&T*j1|q8v$})| zSNS}hQJ4dDQVw980xeRwijxie!N(Orf*=JG?&1G12!xg*Y87=j*1gOMQ2aEqeDbBW zmBCMKRaaq6r#T0mk8?AB&Qxgt2nd!H&(o>E()u7FNe6;*)RTGv_jIeJ)BMS0`ExeF z$IYsYy3LKh5&W}GGq^gvMu4cI&I#lKL290hGPNY3=D~nRq73}hPb&}sO!iU_tF(9$ zDGe*erbO31ApOWV$}5n}G+&tEYgShH*2z4hxq~XP7T`+$%sp9uK;;7OPS(VNz=)x~ z^G!!z%F3r14KNB-onhRc3dp4|KiXCq?>YRRrrx|*WUmC&L@o;5ykw+BnE1^_KF`AB zZ!=W#kWNT@a|>_Rm*?jyWeywarFlg{*oKt4DqFEY#5WLLeNl20vV3lz#>>e$3uv;$ z>}qaTCyoRkX^QKAi~W>#P1!9UlTG9EGcRz)ZDwr11vi)j(>Bc5g$$-=*d`gwK~pTK zCX99e?fo6zFGpaizYCvFfntz^goj_G*^O0!s#ZONsd%-QCF(9<%kI8(FfS&v1u?Fy z@;{5YM8%f(&bY05fWlZWW&n4U01OPVlOec*o9IBazlCvs0Y%3(m0)5@8UbZcm5J(5J)2!w=;cQj1Hp>fr?>LmTxY|4{GK!2d2WWtq zdCk+qj^|*BOeK+wMKWxKf!tts34e%CF@Id}tw|w{)2Byem5KExZwE}lHr?1GEP(4^ z-89<_KzQJPXnBQ`AP{&B{6q~!=w?9q)gDT{yyj_(F^~Q4kXn6J{x^G-h&&AqvIcRh0n5CKEW7s4K?`n zjx$8;2d=?B#>BgZIwzlvj|jd+3q6gS3ZEW-wFkEas1sb+gzfHmu}Fl-62OF}ObVNq zKY5aWRmr(6lTelh08?nZ5M<~gG@-@|QI;;o6KuR3=eZ~g!<$h?J7FWrSZE{4R47E5 z4X=1P$}6f&&@y*maGh-BswCv?@j{t()}c~-2^77ZcfM17IG)Ls{ zQn=@s0+pYD+Ot;7OWMwLA?R)xfl2afl3lx}F%yXEls;*f^ z@b8vk)TGBQlNd5fDy*_fayBwbt?(+C15h_Qn_q@ZvImh)CK(^$6=m@TtwQmC9EsMO zm|V7HwNay|qLICIaJTG5{@o>SdEWEe2)Krc8(HRa%x)Jf+^vGvG-qF4_KXEc{)R(` z6z6S_JEb@`=^7h(JwjCb{&119hW23C;(xwlFr;swyp{c%Q{O=9mIIUd9k3u^1Gnq* zfs;Z;Na;2{F`5saw%~^>d9PM~zh)^+Dl3Gs!Z%Y)KXf}x#;y6MHP#Wgi4^RPUqEh# zdl#C@Wtz0=PDCL#2*@k^0TS2s{`NujdeLxaQfQ<1y~A_Mz*lSh^UET041u=%^A5+x z`^=*8ey2Pf@834>yur5b@eICWV{G5(xos(}Lto~Fc!h~=U~{=jonD%MBnyHLWOH=# z*44&yb(t=ap5%gZ0h7lO1s0)AbtM zLSHjbS>N$@qB@nB0|I)NQo}9!lEY~$(j$ehIaG;Th)&Mr;8Qas7_sPCUbi+~oM>D~ zZT{A?z%AH|1pY3WLJfL0^l$vDqKD>UD+;7bvUwH|5 zdZW5aTOUaKWqy9^HjBd=YR_W}r35VDg4?r0(<_HRc{UHK1E&!2P@C!2OT~ z_kA8n(e0RkucFhkAiczm4b&^=i)^O)v_F17xv%CW4u+k;)Zjz!c~+rk(L61Ft`qI5 zSdllp<9I|MxeVqrThKnCXJPP^gBKRXb%$N+UUVx9521~_6a{S0lLSf$1c3`~CkHYZ zfrgihf;iWf6`r|&KfJswJEbxLyh|!$dmfc3C7?1F+@8wjN=IE*^|c6m!gV{Pv4(k< zWY$f3ls1X0#FpZ1=&cU;#YogZiq(;`y_!{;`gp`k#fc>kK&_e99WtLnAsupAQ8M_@ zq?|fD*$MdjtYqc3a<$?ix}b6n=*($8N$2d2l%iv53VCIJ!5b}NqEy&Wzuw_j4-$Jz zgI@kOuxi&!p6hePSG97^>Nz>t@lv3eErV96xZ5^Ct+l~eoip-rZJE_6LVjv$(K5wjXMljNvYc~$P!N&3DT??38WRstv3(N~< zJFQlqUF4I03&Y-QK1o)F7xQbH)$|w;dXMhg-*k5l@~!|21juD4+7qa)^m=+0fm_>B zn(g>B3|qNN*}(QZIiQq447lKCZ5zyQ$cW&WX{(b-yWVX9tRp5!d;>V0Xy(I9T{6P7 z=`q8m#!e-r$||=c%W@2`4cHZD*cEuAyj^DRjR^$M6LzAc8i2oPvyTo+JHl%JAe9>fy1~wMF|iw^X~FA! z`(0(GS$j24dX%2?iX=mX6m>~mLwavtaF2*NB(^tJA1^fs?MouF++6I{B5Bb+S`<7& z^pXgFv%umUO%6$Kqj`K$X1TH#naR;!yQCXY(tF?X3i;dntLza`;4Sj)RzcDzpI(g&Iv7+@DAfm zRM#L}I5=9xBwVQq5)ZUxmmjs@A9xTZX|vByw&QA}<$wr1Xc zsuPlc=yC};E{6G?ZZ1%RuFsJmAWV{yK6fO2TecwKX7hZ$m|lBfX-AWJZcLqShS~*> za1&d%;&ZBF*2E`BN(LZsh0oI`0bj(BTCV2~q%{s2eS^1v@E#?8zV=!$pQZ7OjMiM< zn!l?#!)Iwe$4}xIp%Dqz;=|>;kyychUE4k z>=U7}^IiJD1Xn@(LaKqGfVYJ?Wfr(sFk4E~_&Pvr1BD?5uJK1og2_AC7sz|1}Whf#0fwuc;sDka|z+} z-5aW_Gl;U+DpRVL)Pw_9jE$dvfeUS*?yH@67oOoA#%?=8*CP8J^q}c3?YjOf>BeWb z9pYQ0x6~sBzOGA8@EU5jJ))bfx6~nmy{WnQ z;t)O*Y6Gz0*igA?kG(TzA5C2P)_A3)z$cAHWXwcV&^? z!!l8qNmcS4Q#~g?UnT} zRacMk?tEJ1S)JI5M|=a;DU@BLPxEq7VQ{`nPSlZ0F%Z>cfTrq9FSjX!BB)`Y!9;Kp z-yuyFDk;$l2&~PTmlT;PhUtJkRXBQ6`ZM~oR)8G^Y`d)ERImY#X3JF?Btcm`VGqlx zKEMagIrlS6@Ys5PCjdg50?}6V?w1XWUSw%Sbqd_<0BArDyBE=-{v^YS@v=$cFkqAd z(YRRc%clbVg4|JMTBTA1TZt}=%8d77c1iyzy0QxeQ4-c!0(UD z^tBmJB$6m_@C_V)bz;CvirWC+fAqU20o|adW=kyIh5*-pXb&8)LWec0`$sxH@MxNY z?uvH=6}+^>-;JF}IZ#sy5bVytb82yYSI&+Ozx?*o!voupBt_a1FOKqjRq&ssOOnyL zxt{|XknGoYRnC@A{1AbVa#>baFqAh1ix%m{&P!}hcKEy!KvqLaKk_0Xi-HAGM{<&J zZBL}f1=a$8LWyPJN=>Lsll1_1;{b_>F=$~(HLSiaq}r_nRnt>pZ1hT`CduKnQ5a%P z>Tt8bTARyp!N@5=j2{6{A&ZC*e6(_dSVuk>lb+bb4{Sc>H3vL;V@m;9Gi0*%&gm zG;1I9OtOkqhnT6g$qT1AJk|`md;IK)u*i2lffiQmqwS8ODFAx(pF<@>;Z#(`z z%WzpiguCFMe3uCRFn?iwGda&_$11)Jq4Juko=qDV%s~nODCwns_=w&*;NEjo~MX&MqRsP!B z??F+jiMKt%;qf|`oRoE6!?LvnnmZZ<-ZF%@H1O)Y*aDt4O{``N3=&FRy_3}OcCD}W z09)5!CSQrgyo9dkx85cgac^Rddi?j{vN`VV2Mg->LROY!@FDwV-Xc~u%+@S_VB;&- zP{6T#=5;_i1p^>GpjTDW=+Pw(I6P`FD+bcH!K-I^G2l% zjjqoZNQMQVyPIPx5^ngTjhHikUZJepJZFbE5O})YZld;^8uFN2(+&=Inw$PJ`-{xjd%!|Wjtca_{)9k^t+;?|)+XQjNSmp*o!T)`Ws?USb z!4hRFno-hjC#Yfb(i<3?346Jb*M>OB!#nm8?rfb(3UU_0&Q+=_(ua6I&eq#JfU_7DkM5!DuEU!@#?A-{+q11hU zZ;L6yOAgM!fkq|Y8mN123)2#F{fgh`KTzFh4lYMr94RSYav7GCi&O11{57^rG)we^c7bG5`4cO7Dj-aJMOx zXMol9;_4ho&9?ZApX?8IREJP{CTwvt}k^4*BdFe z&1tFoG-3!neUwJk9!F3{E?(3CB1hFDJgCJ7x@@R$Ql zOEdUnuMw=DU{Epj2m0yujA>2LXz`)-d}1qpM)a)JB|AA0jTw$$_$VzPi!kV+gKO4{ z--rz)^KpiM2Fs#myNAuRN8^)|F*w`_OZl~S(<&KMm43(#>*STH7n4aQE|1(0ON%^R z7COy^|8UKR!9(F7G=Qng*np!0m2#7-w{}(En5#SH8BsQC{ULbv@$cphFXJVfh{N>C zL(Pw&{{{MiGNEPjsE-fzdnwR#CH}SyQ4|poS$1-NB(N3xe`%TxRF#r@X+D?de(0q! zTf~1r9|{Lg$5GSbyevbf^1jg;b6?e^ko{PMDwgW!0%RfQ!EAcLO<_N%7d_pLUTlme z0S(-jp#|MoU64{ z@;h~Zlk5sxbCf`WdFNnGtmC?H5^M1w!!8(8$>-=Vi+u9)j0Pzr!VpLcOMWBYo|cr! zDgi;kXS*NhSNK+|#hx}~BAFKs10IHL$b)$uwIn;firM(+=%U22J4KO3D8F!S1u1oUOgg4iElf@7kN&sDb$3e2c>j69=xQ zJckJsCQSl(cm$I0n$XEy;|n#ocE)D|fq~D?J|z95lg@W`94HTlwmxaKTCG;A*Y4_n z;qm^-;py=3$fP{?nV#R@&-vq%qYoJLRrxp>e)ti8y(V7|_YXd%kJshngOg*y`39S( zaY|q@t5xF|Bx-jd?1-n_( zrf~0>#mDKvM@NTWesXj&*dL8dZa>>OS<wQmW-k;?2FcKRx^EwU<6RKD(z_EdySq>i1l8 z*@k0d&_}--xl}C_?eY&*WOMlzKZnlPhrPmta9VaCx_W zeo<_G{nWh=;<9#o>%#?B9Jo5vCdxABioy8UYftYIL#$Nxmg-OO)nD7)uf(12T1O@P zvS_sqy|ZA&bXiR0b%*g!taT>U?0-GlRgXURZ&Rbst*1qw+dx@#Ric}J;O?wLH$mQ2 zg>HiT78=yz!$8dIa~*~G+X^c9s4yzTJhA}&i0lY_U{;T(q(&~EPy^JCPQotT znQ9K1j<@tJy=(ZF(H@|wynh!R&pnzx2qs2+*!(1WP#6pS*J_9Kq~ZibG7mWF|0%`( z=k3>=Am?T~HKP1ll=@U3!NFmbJ4=in;Xpku2OyHL>Crt*~V;t@5qT}URO)Rsdgoy zylc)I)G{8_AOY97wQcq7WZ-BuVi~@cs5EeaD{yQGZ*%L~A#ZGrYGIhZH3CA(H-kVP zt?sk=cNxfp|0q4o8|Ha-g9# z!#8l8hE2DB@I1u(2=zvuD5_Pvx}>NiXap8}m#-J8bYr5S^Yu+#|2;Rhh?kw~c)FY| zE4E!6SKWpc1c8t~q$j|fa1OeywUqI$c+TN&0(B+7Ys&yv*#lRw2JyLzc0(|QH$u$*4=SF-1v1#z&jNN<_qu|h3g#S|$L@g%twYZ-)sD0WeD z7oYCw@51N;T%ltGYWy)WpwLI(MrARvmim`ed?FLoEF#8An3Pb5RZzjbfsE@VPgxj`*6{NH@dVP|guL zT{`aR3+;L~@O)3}aABT-S&~@*G#_`=@{JA*8fGFU^FOQG1^=vr8EICThYeSL%S3SW zRI{RRmy~vCff%dF>3gZwcvKEfjt;ZkJSfe7@e;chfB4Cl9AfWxqKp(j=o*f4d@zkH zJ=evUP}GUv6`MZ9(q>b#py*z&j!WIRxJKa`RVM#7)#Fza)}y7g3jGc2EJB*50>mF_ z@qxb4Ba^+Oey#JMk}xrcfz#7GuNd?Nz>q1*K|e%;AV*9Hf6jg`#kxlAP^#HP4U6iknHMoAYFr3t2`I25 z;<^o!=K`2IXCEcYDA=rDYmC?@QV(f=8`Lrb6``XZF283w;+~4-`>dq>HZ4s3L+61_ ztOio!d97C;4T7S;zPcAtV(`7>g4wCg+=L{1=(@I4a_>D>u9=>d@N~*SE3&NuB=W-= z$O;g?p0lUiT26F8k}jNoyJ~?sluPJ3QKX84m$lKf zcC(b1)}Cvs&IY}?nbHiArSxG3J+_9lpl2GS0Uaj);%&6#5aDs0$YQo>rWQ>-A)|}Q z1`P#2{imeNzE5kvP-n)Yh9Q-KI|ay1#W4dFN<*%18U@>5|U(+OVf zQg(L8`-7)8He`STY>ErxBnd2kfln6Lvk7m^0aG(apw>3wNxU!yzFY8wi#G+Nk&Pv> zqWh7iRsy5CHfFeIGK06Ad_BUASZ8IPWEAXJtm;A{FR8+mXki)7nG6!$&vIgtqUR8o z3B@JD_6U+y`8M{3A#aloapRT|v~>yrr~4(#HtrbRZf(H(EJI|S5Hz-b`$3-7x8ZO< z($MT>@|<*GuJXE$cK>`d#t2hhrkVQ) zJAoHWraDbnAC?&1SnpA%uxBC&bLjuVr$?u!`yU>Wuj-i9-Q%S+vbw1jCRSv)8$}Ie|q~&A^+5EFwLnC?Q|59y5N&pL00j@sc_jJ-p`>r z)I1pI?}7Y{WdIMPJz0wQ`JAfxUrU%MYqbCfO&6H&roGyFE6Y?hfe>!EBhY6Dt%4Uf zy`W%lFXM2~mHV4{aw+qQT2$w}!@u|Wcrqh$m7S-HVzI0!=XH61ltl#)ON^}l>TWj7 zmhpG3H>yd1IBSRFt^=CSGb<1j|p6Ac$@U~Y(5!fe8*t~h%r@aA2GYSa^5}h za2lu;g=sPM{pa(iXB4PjHLm?QfAvvhb>Z?}dlb3BJ*7cpE6ql8I*FOP9h%mgIJo11 zz@w|O@#`JgcI?4_#O-^TnS(1r`bjGH`zH}o7zYi%_Mw%yNmK&D`+habGXvVv7^2lj z-EHy1r5d7HG$Z%Tx{7qp2&Ngf3@eW1ggUvjY$->B6(kNvqB)hs@rd6_xVkYkq8U^F z^NVGw(hPEYJHpvt4tZ2Ech*_Ri}58q&E$AXYKUszWB=S}YMG{kUm zaQx|~`=1?uCNX8l)15qSL7rAz))Fh%RmATr$+)^|r2}LT^hR{(MUfJM`N{T9Y{=&B zQP4%vNO~X}SoBbopY<#u-n3Y+uR3=k^(aEw1SogsD{{n;q0=uBby zZP~LXf2yux_z&V@bd*Ye$r=+L=`bR*Hvxkzh^JtW7NUp>aZH6zEvAy+U*tRU%YwIV zT8~A41iy80>ZBimTdW-PoSF}fwPU}mhr9h$Q<5;zOe&`VOpvG*9Z#v^Yl-Ki3!y1H zXdE9CeZ`0lu6RqSqH(>PU(fi-E!zre1c0b!Nq0vGAI_IEIzTq}1Kpwn4Zwg;XH=KC zGlvn7Y@nyvw1l_r>?*-oEbCu->HEp-aWQ#+=_Tt%iwg`?rrp3Df^47EE4G06c{cws z6F=38_&Fh=rtNliGh0d*(?pHlOuG*&LN0;89ohJbN|EFAyc~fAXwI0pTM&Dyy_N6y ze5+I#@G`j8!m7LYsTfaqyXDYY=W)A}igUCdel8|IhJ3EdMedB3vMU=6q0~o&JmxWf zBy5{FsSvJN*K$-1_wtB{V(x;*O>WQ*R0GPwr^@`{JD~fMBO;RJ^mpE2hgMgv5mZJ) zGmd<}c%1Tr%+_nlaf>>3LDwtc>CUZbr$A}iYP1k5G zUE8!?g@H5vp&5R6?vBqJid4D?VJd@v1 zlU1CF7pvS2vxUuMjxiqcnjozVQk2?CPrs8H!$TzN-?BOdW=*M~)>#>!Ixpj!9@hN! z=p;_q|77^p5mL=O93|AiJ}Z9G2yB{UT>s?|4>OCi<;fmU8OtL&Xk%WIxl=EHHz}`4 z3Y#!#QVN+}tcAGJ?}rLHQV-M8RnhcbsDOUt9)fLvXJ&qOC?Pkcz*i+%R8E?(pMEs_ zT)gs0wKiw-96z3nH0(!J%4LsQhdeGP zv+4KNSqKJTRc_Cy#wGurEvE~A{kafJ>e*a0h+7a{&*{f6a^+dG@U^5wmmSDTxZfTM z-g;|}H6)6jl^#CSPnp^g&IbWTq)8JK)zH~EVK^pNb4Ltl&rMIxR4Jma2SN;9jl;=U zkbx`b%s2!ZUtR|2%Ppnseo@hRkmfKB8 zy4+z|jDljCbUZ(p7gbwff$3J-{$aBZSr>&%eP%WcK$4Z|?0v)wd+xrV+9(%QufX+5 zNv;)XT*wV^xf|dM>&xk+sJ|O$+DS8&r?r@3&Bo&h4ZySnVSnNH-#XHQ!)O2^9j_W)Q8n@^Prv@(RMyZ(ligl#@7*)z>HTQo(`!cDqAZn)MWZC|^|d`h@7 zbOlI+wP7ob4SrOykZQ8MqJp4mf-kBa{o511@yYGH7&Lsm~nf_ZEjIa zz3seqH+I-XrE%~fs9WIfPe*(=(iF->7nA`9bOzo)8l+q#41PRkh=P1KN`hJ}0bwHU zaUce|Dn3_u2m$I(%RnmwZZ84a61T9=6?Y^FZsBj*0M%t}38RKOAW4I`pa%50-(H=| z(O_IpZ%JJ%GR!%Dxj`QWtnd?I<>Q&L5+JUT$VmN1-0-|Qcpeex}TtN|*!Lld(oe1@A0Idc>{ z7m6vvaT~@aYLh&V;&vu_2zYv3{5(C79T@HTbN$v0A}2(&jjJHeEUkaP)&~^YcV;GM z!Kad14{Y(FfjfwZlHa3MX9m-X+En-k_!M7^_!V2i0r5s z+Mh0me8-#5v~l#+LLr7yGeHqlx_W>$Z>^Hz0~fWz&V?%nNGvCwRGer}c4~P&sRJ9r zgf1LObWyE;rOELeogPhCv!HDKT~=07VxFfbKmr4QWrYLaJfkE5x)gta%lWKgQ%-dN zuk^_Imx2f=ldCYQO3eW4OR+rD^iVx`i8k4D)rpoi0|WlRlnYw<;a}Iv51U%KvUTID z)&@o|O173TEP>auSGLznPl%t-HEf*DBy!2+0+3gjB5{Tm@Gv~4TW_)vyc)5>L4HvR7|;ckHeg z)+mGK+4Y*+on4UCtM1Qi5g6vDS|C>Xio!pT>@?N^h@l>jKINaBXLcN}4Fx1!35sZ3 z3y=K@@vMiVb?~f*sXl@>r)k9q3OAHJd9I?D2fZk1zawN$oGEInAEmQhB(94|7#kpe zbeGwKQ&FOQ!8LADaQw73B*R0C0%AWLrLmOLI+x6ydET`TIK^(sH(4+6oJTFvZVoK#eTBT|^D;*9{_MsC0D;lA*Aj<76nfWjWLvN+4)L4OrQg07nK2 zVfEE;G8fRZjUzx{>2es!uo!;$8OHj5X@6+6eQ2>|T=2~0-48FjO==xqqO?;ZOEMY< zmgLHi>R4|3Bg&qT69V_UWmI9TxDu;}hXX^z`$Sw3`V&jA?TJha^gtwjL417#xIAbo zvg?`xUKj;qe}WSr8u3FMEBQ~@VlBTi#Q&<+eyJlhy0dK>sqMGC(Ky96IU+-Ug&=&! zXfGpj921m=2xC0#t)RwXv*R`H%C&^yb*$iUjmiwuU-7|u(`8}@{iIIMOo{ojFQ~VVB$O-bs3JTtG^^9*a9dZE|?|YAklpC4W_Sz$j=tokF>xl|rf) z9!1OX!1AHF<21$>-^OSJ7dZu-&FAGMTWinh41^=H+E5?l{#;kH*(ZVL>)b>AGw}!w|k6CM~NqSI$y+EdR&`q6kIlZ z37t{!;HHE`a30-rjUzID4c!}*M0kp=xgjuK2>pnzoP*-#e6JKr87FHBwhizppQ*!u z6BW(3ho1MbI9IOom7e~>T1l$JlE@G6Vqvl9i^#Sxh#V{QdPOWX`Y#@&R>?N0FS2ju z1EM(EgVH>rO&r|t4S(ObM2G9pXvG-CY>tAAUe1UlAXnG2J~-Nc$a5QNSXu6~UGK?q zzUB^a)Ay1_Go>g}|E$MmH6w!cQRo!)2r;#%)Z z+Oya7Ox4<5&xLN??|0tmV)@W!Mum8mL_lcYOc1uD z>peH`zd{_;(Y4i!>oyXhCe5B4#4#9Mseg?uNb_zl4RWS^w{yQxde^hRh}lao{ljHJ z=v;pdxK&xWd(GgxAgq##PBx5HKcLCCgC(c>YdF=rWH|P#$=^fv`NmtGqsM9`CDIY% zv6oVpv*Ln(=i*#`je=WKHk+~+%kB~u_n)#`?^^`CXWyBZqn%8#BJnZZ?e0j3E%7Ap z+lqE2S58BB+(sX-ZWtRCMFoQ^2ej6ID5ZY!*|hj6GaNm9sJS7lqpES`>sU1)EEfuF z-&LC0(&4o#1CFPoTz-UHP9XDnY%5jX5zK1dt!~JFxuJtv1Sz3^CL}9mdCe{pt_l*r zHIbh0@b?ZQw@3!8BsicHg)tEBGla(KByn0y%Iq;MamduP6!iDXUuYyud9>XO)~;Q$ zcC@#oGD+~AV@^+xXy7id<)zi}V&f{#cYX<*`OD^*ZUoc)%@O<>l5*o?67`e%x!EwH z|5C$$;8GnP>=?jgkl7rO)Nn{#a>m7YlO?xApaZl)09xO= zbCrrY2R1Y4*DQ11Ghf3|j}dqzj7RAa4UlL|bCo|VD;gigj}pRnIWK_(oTP{!7mQ04 zIX**xXhbX}M6JKWjpy^@#a(XnqR;N;VFX6tgr$#BEQRaARSR$V`q233ujH((- zEC}6PyVfyvQ1@I21vZ@`eHn7evtr0jv_n}Abpy{;HR=Io>be-W1HfgMOtTS{EOGOI$8x zJ1t~9u~Q8DaOg_|))I%;RnAMl$g1&EE;pXBfH`w&P%!pzkIbVcg^MUwOlX!RR8O_g z*YuNdJ|&jWLZz6>0|Yj7?CIrve7%sR>avj7w6+ll$@;j&QxAMFa{86Xb1qF_Fd0@1 zMz6ZcgCtzBI=iB?=JfS&NU5`b31?j|A5X^Blc2_V$qx!v;S(?Xc>YtK!fpnBa7fFH zRk0zrG`7}`4v7H=h2RK|!abfI9G?t7`%qIP21E9_5sQ6lJRNPxagB~v8^aZ%!=0cH zw*N5W{#Vl>TxulZN17Uw;Ui66FLycO9DZNEm9AtwMN@7o;S>$7|6DYG#WD5_)TI_PJrBH>c>xmxFtq(nA}5ZoP=P2) z&lk~UJa90f&%AwLb6@&@L3`jS@5CQl`@qG_x#pylX)iLX|C^&SCQ5%4g+rtiErTwR zd}kds9Qg-_l}Uz4o$24fg+_ifipv%s+2=trHlfP1H-CP@sLTj1+gF=p!$<##m)!N@Ny#fxDMLkk zX<~N8_;1X=P7@;m% zL5yV?b;*loDqvNAtiF~%)z$SN8=4z0n!0EXu-AH4_W3F)(Txpa8a|7k^%}rLdo(;N ze}5ZJuCXiL8ZNF0e>`%>16k^!9DXx_NbzcN!K(?uc0Bsv>e|TP)C2U}aIn2_ZU!IF z{Dr8g3f=4w3WML!w&ZM1hRIoWc(i|*F<(yhPd`FfnqcC88FX59w7Ce@W85j4l=c^qLUC7xWst)~^awoaKEDJqY=IW= z!?L>U?+z}1ZGOgkd3rykpvKu-Gl)b~oD-uK#ZnS)+|Fw)e-xE=6h}L?^RP`(QJ+%z zP}=aq@ozOr$?H9xN4=TXyDG17Hb;GaGzn;VAD8|Pm94HwjOvE2<#7RUUD~^YAiXG> z%A4$y8~VX}^y}+#s!!gGci6eEq; zFbDyt8Foa|VDN_=XdT$p2p+u@!fR>_53WZAkQJAL2!(}^6P4*8xB)$nA`Gp<>r?g! zT!w7=49x>}c1wVwU@Ng);kdUD7|bnoNFyRJNNY99+`F&+6_rma;X zsXlUlJAjz)(DhX)FDhe(RWRvhfxzdpQ}4@#?ky>$bbHux^#1#

VVGY5AB&LPT$L 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 ZS^4w}gs^UHMnf;yZOPywe8 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 z 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

pR!=ryTx4x>Yds9eBt2Jyo{`ljnqH@gA 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

my!p0J_vwzvAj1 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 c0z(3-*Ozhu0!9My=$Ej3}&0I%$RjQ{`u diff --git a/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz b/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz index 61037a118f5504154659d6d069ba4e8c92233249..e71b914fdd0d9601fd097d78005cbcad0c329881 100644 GIT binary patch delta 107439 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

9X`vP@W0H>L4&cjZh!`{#loYMd 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

}`2 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 delta 106025 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

Y111YNt6^nTUmi&FZd;{sLIWtXCObw9Cvc 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 diff --git a/Moose Test Missions/Moose_Test_SPAWN_Repeat/MOOSE_Test_SPAWN_Repeat.miz b/Moose Test Missions/Moose_Test_SPAWN_Repeat/MOOSE_Test_SPAWN_Repeat.miz index afbcef4e9549e3adcd506eafad19d2ee0c188043..10eca726a854b3795ed1f64135a2e367d0342836 100644 GIT binary patch delta 106281 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

VVGY5AB&LPT$L$J1H@x9V;+ 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 ZS^4w}gs^UHMnf;yZOPywe8H^W;j$+OHf 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 delta 101395 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�Zyy{sA=>Y{t!K61dR;FmMjZ z54h0*FmMjZ54e}j{sAlk7^Ro{{sB}1Q>T|v{{b@s)6bWN{{b@sCf1j`{{coMZRY_1 jcVTj6Xm53MWphwV1qJ{B000XB3jhZL000N-0RR91#L$7c diff --git a/Moose Test Missions/Moose_Test_TASK_Pickup_and_Deploy/MOOSE_Test_TASK_Pickup_and_Deploy.miz b/Moose Test Missions/Moose_Test_TASK_Pickup_and_Deploy/MOOSE_Test_TASK_Pickup_and_Deploy.miz index 555e364361f3b61a6d102b4a5e93e0790e69ea1c..0e6c7d84a4173f3434571866f21a5071109e47c0 100644 GIT binary patch delta 106280 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

VVGY5AB&LPT$L$J1H@x9V;+ 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 ZS^4w}gs^UHMnf;yZOPywe8H^W;j$+OHf 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 delta 101393 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

my!p0J_v)QMN6vAYRs$IK$ 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 hmq8f diff --git a/Moose Test Missions/Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz b/Moose Test Missions/Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz index b49e9ecc193176bcdeca6d7b66ae1fdd86ff93b5..5746543f10612e2781fc0a95fa41e3455e93a8d9 100644 GIT binary patch delta 106267 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�&7PFaJ*l;onvZWADgNNwZ) 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

c+DlV<{ZCBAHO`=++R$xH7_#f^(yG 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

my!p0J_v)QMN6vAYRs$IK$-p(e- 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 N@dE$=AtnL<001hLZtnm9 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 e21003e1aa02a410d58621c5b46e7c762bd0e84a..1fab8ace3a85f6fee8609fe2df5e501ccbc85050 100644 GIT binary patch delta 107548 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�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
|oyCAb~dd6Kd$PQ=I9X5X?SzbQjr7C>>xmd|4 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 ASO5S3 delta 853 zcmZp>#lB%a#6JfoO=qs(3|%<(SFxoLPKXyTK-I=}CS zPnz31X~*uyIHxC-pYP4Sm?81svv?jCkNI3b_G$e5uPx8a3!nTniL3kSmw%aN?O)SA z)iRsaF|({&e?u`-vn8qExW(j&=UCf)*HYS|v~z za=^?eGPz>+=Mxw9c1)U+-pk1{#Y*OCThOJRmnXv_t9%+FR$n2oIW{b(fmfY26jI16eieHctT;-yg{OrJ_mtIBPe5XB*TlW~e{lcNN zaMiYo3xADN64U-Ks-G@?#nsj&N3rw$BQyOO@0n&b{LXveIFCtOs%Fox!j>x5y~%eR znv*BASDFglyO_kky?K_$i>jB#vz41dx`h4+)J{>F9QaZyLzk`ea*(o+=Fug`zV?bd zTNZSkND)$?s${IUggp~)ZQt;$wE*wYsLivQ1~Yj=`&_W$zso4?yC+I4&0 ztqH5y4{i+I{{BW?(6`e$=QhtVc8TD=opewC$*LKmXjP8OP`Tny`uYb*`!OZ{!xtYbqnfZCsZC){IF=dNP zUMMO#y%EHY6Pv#F6{FnrJ#QG*_+E)IFq9`2rDo)p7N-_Z-}IVMi@8dYVfy{oj1n?P zDUt!G4h$H<nhURGZ%N1}Gh6!Z3Z|8%Fi%HXz;;ATRO_qxSR) dkU83J6J;dC0=!w-Ko;`?VG1(?gP9MA2LR&KaBKho