From d550180e58477e48df37c08c333dab88cc17954c Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Wed, 30 Sep 2020 15:33:47 -0600 Subject: [PATCH 01/16] Fix for checking CA slots -Fixed bug due to mission file adding a string value into a table that is normally just a table of numbers. Added a type check to handle that. --- mist.lua | 18 +++++++++--------- mist_4_4_90.lua => mist_4_4_91.lua | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) rename mist_4_4_90.lua => mist_4_4_91.lua (99%) diff --git a/mist.lua b/mist.lua index fbf4f6a..6e2d5e3 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 4 -mist.build = 90 +mist.build = 91 -- forward declaration of log shorthand local log @@ -2859,13 +2859,13 @@ function mist.getBRString(vars) local metric = vars.metric local avgPos = mist.getAvgPos(units) if avgPos then - local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} - local dir = mist.utils.getDir(vec, ref) - local dist = mist.utils.get2DDist(avgPos, ref) - if alt then - alt = avgPos.y - end - return mist.tostringBR(dir, dist, alt, metric) + local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} + local dir = mist.utils.getDir(vec, ref) + local dist = mist.utils.get2DDist(avgPos, ref) + if alt then + alt = avgPos.y + end + return mist.tostringBR(dir, dist, alt, metric) end end @@ -5288,7 +5288,7 @@ do -- mist.msg scope if type(value) == 'table' then for roleName, roleVal in pairs(value) do for rIndex, rVal in pairs(roleVal) do - if env.mission.groundControl[index][roleName][rIndex] > 0 then + if type(rVal) == 'number' and rVal > 0 then caSlots = true break end diff --git a/mist_4_4_90.lua b/mist_4_4_91.lua similarity index 99% rename from mist_4_4_90.lua rename to mist_4_4_91.lua index fbf4f6a..6e2d5e3 100644 --- a/mist_4_4_90.lua +++ b/mist_4_4_91.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 4 -mist.build = 90 +mist.build = 91 -- forward declaration of log shorthand local log @@ -2859,13 +2859,13 @@ function mist.getBRString(vars) local metric = vars.metric local avgPos = mist.getAvgPos(units) if avgPos then - local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} - local dir = mist.utils.getDir(vec, ref) - local dist = mist.utils.get2DDist(avgPos, ref) - if alt then - alt = avgPos.y - end - return mist.tostringBR(dir, dist, alt, metric) + local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} + local dir = mist.utils.getDir(vec, ref) + local dist = mist.utils.get2DDist(avgPos, ref) + if alt then + alt = avgPos.y + end + return mist.tostringBR(dir, dist, alt, metric) end end @@ -5288,7 +5288,7 @@ do -- mist.msg scope if type(value) == 'table' then for roleName, roleVal in pairs(value) do for rIndex, rVal in pairs(roleVal) do - if env.mission.groundControl[index][roleName][rIndex] > 0 then + if type(rVal) == 'number' and rVal > 0 then caSlots = true break end From 4e7b4158f450026182d46e3825c730443cf4cc59 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Sun, 1 Nov 2020 23:19:22 -0700 Subject: [PATCH 02/16] 4_5 build1 -Added some definitions of static objects and model names -added mist.getPathLength() given a table of points it returns the total distance between all of the points. Distance by defualt is "2d" but can be 3d. Can also return the nearest index after a given cutoff distance. -added mist.getPathInSegments() sub divides a passed path into X number of segments. For example generate an on road route between 2 points, pass that table to this function and you can get the coordiantes of points relatively equidistant from each other. -added mist.getPointAtDistanceOnPath() Returns a vec2 or vec3 point at a set distance along a path. added mist.projectPoint() Returns a vec2 or vec 3 based on the point it was passed from that point at the angle of a given theta for a given distance. -added mist.utils.getHeadingPoints() Returns the heading from the first point to the 2nd point. modified mist.teleportToPoint to have 2 optional new variables. -- validTerrain is a table of terrain types you wish to force the function to use -- newGroupName is a optional value to define the new name of the group. --- mist.lua | 209 ++++++++++++++++++++++++++++- mist_4_4_91.lua => mist_4_5_92.lua | 209 ++++++++++++++++++++++++++++- 2 files changed, 404 insertions(+), 14 deletions(-) rename mist_4_4_91.lua => mist_4_5_92.lua (97%) diff --git a/mist.lua b/mist.lua index 6e2d5e3..3fba303 100644 --- a/mist.lua +++ b/mist.lua @@ -34,8 +34,8 @@ mist = {} -- don't change these mist.majorVersion = 4 -mist.minorVersion = 4 -mist.build = 91 +mist.minorVersion = 5 +mist.build = 94 -- forward declaration of log shorthand local log @@ -443,6 +443,42 @@ do -- the main scope ["Small house 1A area"] = "domik1a-all", ["White_Flag"] = "H-Flag_W", ["Airshow_Cone"] = "Comp_cone", + ["Bulk Cargo Ship Ivanov"] = "barge-1", + ["Bulk Cargo Ship Yakushev"] = "barge-2", + ["Outpost"]="block", + ["Road outpost"]="block-onroad", + ["Container camo"] = "bw_container_cargo", + ["Tech Hangar A"] = "ceh_ang_a", + ["Bunker 1"] = "dot", + ["Bunker 2"] = "dot2", + ["Tanker Elnya 160"] = "elnya", + ["F-shape barrier"] = "f_bar_cargo", + ["Helipad Single"] = "farp", + ["FARP"] = "farps", + ["Fueltank"] = "fueltank_cargo", + ["Gate"] = "gate", + ["FARP Fuel Depot"] = "gsm rus", + ["Armed house"] = "home1_a", + ["FARP Command Post"] = "kp-ug", + ["Watch Tower Armed"] = "ohr-vyshka", + ["Oiltank"] = "oiltank_cargo", + ["Pipes small"] = "pipes_small_cargo", + ["Pipes big"] = "pipes_big_cargo", + ["Oil platform"] = "plavbaza", + ["Tetrapod"] = "tetrapod_cargo", + ["Fuel tank"] = "toplivo", + ["Trunks long"] = "trunks_long_cargo", + ["Trunks small"] = "trunks_small_cargo", + ["Passenger liner"] = "yastrebow", + ["Passenger boat"] = "zwezdny", + ["Oil rig"] = "oil_platform", + ["Gas platform"] = "gas_platform", + ["Container 20ft"] = "container_20ft", + ["Container 40ft"] = "container_40ft", + ["Downed pilot"] = "cadaver", + ["Parachute"] = "parash", + ["Pilot F15 Parachute"] = "pilot_f15_parachute", + ["Pilot standing"] = "pilot_parashut", } @@ -2985,8 +3021,147 @@ function mist.getLeadingBRString(vars) end end +--[[getPathLength from GSH +-- Returns the length between the defined set of points. Can also return the point index before the cutoff was achieved +p - table of path points, vec2 or vec3 +cutoff - number distance after which to stop at +topo - boolean for if it should get the topographical distance + +]] + +function mist.getPathLength(p, cutoff, topo) + local l = 0 + local cut = 0 or cutOff + local path = {} + + for i = 1, #p do + if topo then + table.insert(path, mist.utils.makeVec3GL(p[i])) + else + table.insert(path, mist.utils.makeVec3(p[i])) + end + end + + for i = 1, #path do + if i + 1 <= #path then + if topo then + l = mist.utils.get3DDist(path[i], path[i+1]) + l + else + l = mist.utils.get2DDist(path[i], path[i+1]) + l + end + end + if cut ~= 0 and l > cut then + return l, i + end + end + return l end +--[[ +Return a series of points to simplify the input table. Best used in conjunction with findPathOnRoads to turn the massive table into a list of X points. +p - table of path points, can be vec2 or vec3 +num - number of segments. +exact - boolean for whether or not it returns the exact distance or uses the first WP to that distance. + + +]] + +function mist.getPathInSegments(p, num, exact) + local tot = mist.getPathLength(p) + local checkDist = tot/num + local typeUsed = 'vec2' + + local points = {[1] = p[1]} + local curDist = 0 + for i = 1, #p do + if i + 1 <= #p then + curDist = mist.utils.get2DDist(p[i], p[i+1]) + curDist + if curDist > checkDist then + curDist = 0 + if exact then + -- get avg point between the two + -- insert into point table + -- need to be accurate... maybe reassign the point for the value it is checking? + -- insert into p table? + else + table.insert(points, p[i]) + end + end + + end + + end + return points + +end + + +function mist.getPointAtDistanceOnPath(p, dist, r, rtn) + log:info('find distance: $1', dist) + local rType = r or 'roads' + local point = {x= 0, y = 0, z = 0} + local path = {} + local ret = rtn or 'vec2' + local l = 0 + if p[1] and #p == 2 then + path = land.findPathOnRoads(rType, p[1].x, p[1].y, p[2].x, p[2].y) + else + path = p + end + for i = 1, #path do + if i + 1 <= #path then + nextPoint = path[i+1] + if topo then + l = mist.utils.get3DDist(path[i], path[i+1]) + l + else + l = mist.utils.get2DDist(path[i], path[i+1]) + l + end + end + if l > dist then + local diff = dist + if i ~= 1 then -- get difference + diff = l - dist + end + local dir = mist.utils.getHeadingPoints(mist.utils.makeVec3(path[i]), mist.utils.makeVec3(path[i+1])) + local x, y + if r then + x, y = land.getClosestPointOnRoads(rType, mist.utils.round((math.cos(dir) * diff) + path[i].x,1), mist.utils.round((math.sin(dir) * diff) + path[i].y,1)) + else + x, y = mist.utils.round((math.cos(dir) * diff) + path[i].x,1), mist.utils.round((math.sin(dir) * diff) + path[i].y,1) + end + + if ret == 'vec2' then + return {x = x, y = y}, dir + elseif ret == 'vec3' then + return {x = x, y = 0, z = y}, dir + end + + return {x = x, y = y}, dir + end + end + log:warn('Find point at distance: $1, path distance $2', dist, l) + return false +end + + +function mist.projectPoint(point, dist, theta) + local newPoint = {} + if point.z then + newPoint.z = mist.utils.round(math.sin(theta) * dist + point.z, 3) + newPoint.y = mist.utils.deepCopy(point.y) + else + newPoint.y = mist.utils.round(math.sin(theta) * dist + point.y, 3) + end + newPoint.x = mist.utils.round(math.cos(theta) * dist + point.x, 3) + + return newPoint +end + +end + + + + --- Group functions. -- @section groups do -- group functions scope @@ -3272,16 +3447,24 @@ do -- group functions scope action = 'tele' newGroupData = vars.groupData end + + if vars.newGroupName then + newGroupData.groupName = vars.newGroupName + end --log:info('get Randomized Point') local diff = {x = 0, y = 0} local newCoord, origCoord local validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} - if string.lower(newGroupData.category) == 'ship' then - validTerrain = {'SHALLOW_WATER' , 'WATER'} - elseif string.lower(newGroupData.category) == 'vehicle' then - validTerrain = {'LAND', 'ROAD'} + if vars.validTerrain then + validTerrain = vars.validTerrain + else + if string.lower(newGroupData.category) == 'ship' then + validTerrain = {'SHALLOW_WATER' , 'WATER'} + elseif string.lower(newGroupData.category) == 'vehicle' then + validTerrain = {'LAND', 'ROAD'} + end end local offsets = {} if point and radius >= 0 then @@ -4046,6 +4229,13 @@ do -- mist.util scope end end + function mist.utils.getHeadingPoints(point1, point2, north) -- sick of writing this out. + if north then + return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), mist.utils.makeVec3(point1)), (mist.utils.makeVec3(point1))) + else + return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), mist.utils.makeVec3(point1))) + end + end --- Returns heading-error corrected direction. -- True-north corrected direction from point along vector vec. -- @tparam Vec3 vec @@ -6430,6 +6620,7 @@ do -- group tasks scope mist.air = {} mist.air.fixedWing = {} mist.air.heli = {} + mist.ship = {} --- Tasks group to follow a route. -- This sets the mission task for the given group. @@ -6861,7 +7052,9 @@ do -- group tasks scope end function mist.getRandomPointInPoly(zone) - local avg = mist.getAvgPoint(zone) + --env.info('Zone Size: '.. #zone) + local avg = mist.getAvgPoint(zone) + log:warn(avg) local radius = 0 local minR = math.huge local newCoord = {} @@ -6873,6 +7066,8 @@ do -- group tasks scope minR = mist.utils.get2DDist(avg, zone[i]) end end + --log:warn('Radius: $1', radius) + --log:warn('minR: $1', minR) local lSpawnPos = {} for j = 1, 100 do newCoord = mist.getRandPointInCircle(avg, radius) diff --git a/mist_4_4_91.lua b/mist_4_5_92.lua similarity index 97% rename from mist_4_4_91.lua rename to mist_4_5_92.lua index 6e2d5e3..3fba303 100644 --- a/mist_4_4_91.lua +++ b/mist_4_5_92.lua @@ -34,8 +34,8 @@ mist = {} -- don't change these mist.majorVersion = 4 -mist.minorVersion = 4 -mist.build = 91 +mist.minorVersion = 5 +mist.build = 94 -- forward declaration of log shorthand local log @@ -443,6 +443,42 @@ do -- the main scope ["Small house 1A area"] = "domik1a-all", ["White_Flag"] = "H-Flag_W", ["Airshow_Cone"] = "Comp_cone", + ["Bulk Cargo Ship Ivanov"] = "barge-1", + ["Bulk Cargo Ship Yakushev"] = "barge-2", + ["Outpost"]="block", + ["Road outpost"]="block-onroad", + ["Container camo"] = "bw_container_cargo", + ["Tech Hangar A"] = "ceh_ang_a", + ["Bunker 1"] = "dot", + ["Bunker 2"] = "dot2", + ["Tanker Elnya 160"] = "elnya", + ["F-shape barrier"] = "f_bar_cargo", + ["Helipad Single"] = "farp", + ["FARP"] = "farps", + ["Fueltank"] = "fueltank_cargo", + ["Gate"] = "gate", + ["FARP Fuel Depot"] = "gsm rus", + ["Armed house"] = "home1_a", + ["FARP Command Post"] = "kp-ug", + ["Watch Tower Armed"] = "ohr-vyshka", + ["Oiltank"] = "oiltank_cargo", + ["Pipes small"] = "pipes_small_cargo", + ["Pipes big"] = "pipes_big_cargo", + ["Oil platform"] = "plavbaza", + ["Tetrapod"] = "tetrapod_cargo", + ["Fuel tank"] = "toplivo", + ["Trunks long"] = "trunks_long_cargo", + ["Trunks small"] = "trunks_small_cargo", + ["Passenger liner"] = "yastrebow", + ["Passenger boat"] = "zwezdny", + ["Oil rig"] = "oil_platform", + ["Gas platform"] = "gas_platform", + ["Container 20ft"] = "container_20ft", + ["Container 40ft"] = "container_40ft", + ["Downed pilot"] = "cadaver", + ["Parachute"] = "parash", + ["Pilot F15 Parachute"] = "pilot_f15_parachute", + ["Pilot standing"] = "pilot_parashut", } @@ -2985,8 +3021,147 @@ function mist.getLeadingBRString(vars) end end +--[[getPathLength from GSH +-- Returns the length between the defined set of points. Can also return the point index before the cutoff was achieved +p - table of path points, vec2 or vec3 +cutoff - number distance after which to stop at +topo - boolean for if it should get the topographical distance + +]] + +function mist.getPathLength(p, cutoff, topo) + local l = 0 + local cut = 0 or cutOff + local path = {} + + for i = 1, #p do + if topo then + table.insert(path, mist.utils.makeVec3GL(p[i])) + else + table.insert(path, mist.utils.makeVec3(p[i])) + end + end + + for i = 1, #path do + if i + 1 <= #path then + if topo then + l = mist.utils.get3DDist(path[i], path[i+1]) + l + else + l = mist.utils.get2DDist(path[i], path[i+1]) + l + end + end + if cut ~= 0 and l > cut then + return l, i + end + end + return l end +--[[ +Return a series of points to simplify the input table. Best used in conjunction with findPathOnRoads to turn the massive table into a list of X points. +p - table of path points, can be vec2 or vec3 +num - number of segments. +exact - boolean for whether or not it returns the exact distance or uses the first WP to that distance. + + +]] + +function mist.getPathInSegments(p, num, exact) + local tot = mist.getPathLength(p) + local checkDist = tot/num + local typeUsed = 'vec2' + + local points = {[1] = p[1]} + local curDist = 0 + for i = 1, #p do + if i + 1 <= #p then + curDist = mist.utils.get2DDist(p[i], p[i+1]) + curDist + if curDist > checkDist then + curDist = 0 + if exact then + -- get avg point between the two + -- insert into point table + -- need to be accurate... maybe reassign the point for the value it is checking? + -- insert into p table? + else + table.insert(points, p[i]) + end + end + + end + + end + return points + +end + + +function mist.getPointAtDistanceOnPath(p, dist, r, rtn) + log:info('find distance: $1', dist) + local rType = r or 'roads' + local point = {x= 0, y = 0, z = 0} + local path = {} + local ret = rtn or 'vec2' + local l = 0 + if p[1] and #p == 2 then + path = land.findPathOnRoads(rType, p[1].x, p[1].y, p[2].x, p[2].y) + else + path = p + end + for i = 1, #path do + if i + 1 <= #path then + nextPoint = path[i+1] + if topo then + l = mist.utils.get3DDist(path[i], path[i+1]) + l + else + l = mist.utils.get2DDist(path[i], path[i+1]) + l + end + end + if l > dist then + local diff = dist + if i ~= 1 then -- get difference + diff = l - dist + end + local dir = mist.utils.getHeadingPoints(mist.utils.makeVec3(path[i]), mist.utils.makeVec3(path[i+1])) + local x, y + if r then + x, y = land.getClosestPointOnRoads(rType, mist.utils.round((math.cos(dir) * diff) + path[i].x,1), mist.utils.round((math.sin(dir) * diff) + path[i].y,1)) + else + x, y = mist.utils.round((math.cos(dir) * diff) + path[i].x,1), mist.utils.round((math.sin(dir) * diff) + path[i].y,1) + end + + if ret == 'vec2' then + return {x = x, y = y}, dir + elseif ret == 'vec3' then + return {x = x, y = 0, z = y}, dir + end + + return {x = x, y = y}, dir + end + end + log:warn('Find point at distance: $1, path distance $2', dist, l) + return false +end + + +function mist.projectPoint(point, dist, theta) + local newPoint = {} + if point.z then + newPoint.z = mist.utils.round(math.sin(theta) * dist + point.z, 3) + newPoint.y = mist.utils.deepCopy(point.y) + else + newPoint.y = mist.utils.round(math.sin(theta) * dist + point.y, 3) + end + newPoint.x = mist.utils.round(math.cos(theta) * dist + point.x, 3) + + return newPoint +end + +end + + + + --- Group functions. -- @section groups do -- group functions scope @@ -3272,16 +3447,24 @@ do -- group functions scope action = 'tele' newGroupData = vars.groupData end + + if vars.newGroupName then + newGroupData.groupName = vars.newGroupName + end --log:info('get Randomized Point') local diff = {x = 0, y = 0} local newCoord, origCoord local validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} - if string.lower(newGroupData.category) == 'ship' then - validTerrain = {'SHALLOW_WATER' , 'WATER'} - elseif string.lower(newGroupData.category) == 'vehicle' then - validTerrain = {'LAND', 'ROAD'} + if vars.validTerrain then + validTerrain = vars.validTerrain + else + if string.lower(newGroupData.category) == 'ship' then + validTerrain = {'SHALLOW_WATER' , 'WATER'} + elseif string.lower(newGroupData.category) == 'vehicle' then + validTerrain = {'LAND', 'ROAD'} + end end local offsets = {} if point and radius >= 0 then @@ -4046,6 +4229,13 @@ do -- mist.util scope end end + function mist.utils.getHeadingPoints(point1, point2, north) -- sick of writing this out. + if north then + return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), mist.utils.makeVec3(point1)), (mist.utils.makeVec3(point1))) + else + return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), mist.utils.makeVec3(point1))) + end + end --- Returns heading-error corrected direction. -- True-north corrected direction from point along vector vec. -- @tparam Vec3 vec @@ -6430,6 +6620,7 @@ do -- group tasks scope mist.air = {} mist.air.fixedWing = {} mist.air.heli = {} + mist.ship = {} --- Tasks group to follow a route. -- This sets the mission task for the given group. @@ -6861,7 +7052,9 @@ do -- group tasks scope end function mist.getRandomPointInPoly(zone) - local avg = mist.getAvgPoint(zone) + --env.info('Zone Size: '.. #zone) + local avg = mist.getAvgPoint(zone) + log:warn(avg) local radius = 0 local minR = math.huge local newCoord = {} @@ -6873,6 +7066,8 @@ do -- group tasks scope minR = mist.utils.get2DDist(avg, zone[i]) end end + --log:warn('Radius: $1', radius) + --log:warn('minR: $1', minR) local lSpawnPos = {} for j = 1, 100 do newCoord = mist.getRandPointInCircle(avg, radius) From 7829d380b0be09159d5bd183b4c8a593a19c7cbf Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Tue, 17 Nov 2020 20:43:01 -0700 Subject: [PATCH 03/16] Static support for makeUnitTable -Added support for static objects in makeUnitTable function. It still returns a list of all objects in a single table, so be careful and know that it WILL return static objects. - Added optional value to mist.makeUnitTable to exclude categories of objects. Can be used to filter out statics or any other type. Input is a string or a table of strings. -Added/fixed getUnitsInZones, getUnitsInPolygon, getUnitsInMovingZones, and getUnitsLOS to support static objects. Change was made due to farp objects returning via Unit.getByName() and not checking for object category. --- mist.lua | 106 ++++++++++++++++++++--------- mist_4_5_92.lua => mist_4_5_95.lua | 106 ++++++++++++++++++++--------- 2 files changed, 150 insertions(+), 62 deletions(-) rename mist_4_5_92.lua => mist_4_5_95.lua (98%) diff --git a/mist.lua b/mist.lua index 3fba303..6d6369f 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 94 +mist.build = 95 -- forward declaration of log shorthand local log @@ -2250,9 +2250,25 @@ do --- Returns a table containing unit names. -- @tparam table tbl sequential strings -- @treturn table @{UnitNameTable} - function mist.makeUnitTable(tbl) + function mist.makeUnitTable(tbl, exclude) --Assumption: will be passed a table of strings, sequential --log:info(tbl) + + + local excludeType = {} + if exclude then + if type(exclude) == 'table' then + for x, y in pairs(exclude) do + excludeType[x] = true + excludeType[y] = true + end + else + excludeType[exclude] = true + end + + end + + local units_by_name = {} local l_munits = mist.DBs.units --local reference for faster execution @@ -2313,12 +2329,15 @@ do elseif unit:sub(4,12) == '[vehicle]' then category = 'vehicle' country_start = 13 + elseif unit:sub(4, 11) == '[static]' then + category = 'static' + country_start = 12 end for coa, coa_tbl in pairs(l_munits) do for country, country_table in pairs(coa_tbl) do if country == string.lower(unit:sub(country_start)) then -- match for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2346,12 +2365,15 @@ do elseif unit:sub(5,13) == '[vehicle]' then category = 'vehicle' country_start = 14 + elseif unit:sub(5, 12) == '[static]' then + category = 'static' + country_start = 13 end for coa, coa_tbl in pairs(l_munits) do for country, country_table in pairs(coa_tbl) do if country == string.lower(unit:sub(country_start)) then -- match for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2376,12 +2398,14 @@ do category = 'ship' elseif unit:sub(7) == '[vehicle]' then category = 'vehicle' - end + elseif unit:sub(7) == '[static]' then + category = 'static' + end for coa, coa_tbl in pairs(l_munits) do if coa == 'blue' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2404,12 +2428,14 @@ do category = 'ship' elseif unit:sub(8) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(8) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do if coa == 'blue' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] thenthen for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2434,12 +2460,14 @@ do category = 'ship' elseif unit:sub(6) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(6) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do if coa == 'red' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2462,12 +2490,14 @@ do category = 'ship' elseif unit:sub(7) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(7) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do if coa == 'red' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2492,11 +2522,13 @@ do category = 'ship' elseif unit:sub(6) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(6) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2518,11 +2550,13 @@ do category = 'ship' elseif unit:sub(7) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(7) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2631,13 +2665,15 @@ function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) local units = {} for i = 1, #unit_names do - units[#units + 1] = Unit.getByName(unit_names[i]) + units[#units + 1] = Unit.getByName(unit_names[i]) or StaticObject.getByName(unit_names[i]) end local inZoneUnits = {} for i =1, #units do - if units[i]:isActive() and mist.pointInPolygon(units[i]:getPosition().p, polyZone, max_alt) then - inZoneUnits[#inZoneUnits + 1] = units[i] + local lUnit = units[i] + local lCat = lUnit:getCategory() + if ((lCat == 14 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then + inZoneUnits[#inZoneUnits + 1] = lUnit end end @@ -2645,8 +2681,7 @@ function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) end function mist.getUnitsInZones(unit_names, zone_names, zone_type) - - zone_type = zone_type or 'cylinder' + zone_type = zone_type or 'cylinder' if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then zone_type = 'cylinder' end @@ -2660,7 +2695,8 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local zones = {} for k = 1, #unit_names do - local unit = Unit.getByName(unit_names[k]) + + local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) if unit then units[#units + 1] = unit end @@ -2677,20 +2713,23 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local in_zone_units = {} for units_ind = 1, #units do - for zones_ind = 1, #zones do + local lUnit = units[units_ind] + local unit_pos = lUnit:getPosition().p + local lCat = lUnit:getCategory() + for zones_ind = 1, #zones do if zone_type == 'sphere' then --add land height value for sphere zone type local alt = land.getHeight({x = zones[zones_ind].x, y = zones[zones_ind].z}) if alt then zones[zones_ind].y = alt end end - local unit_pos = units[units_ind]:getPosition().p - if unit_pos and units[units_ind]:isActive() == true then + + if unit_pos and ((lCat == 1 and lUnit:isActive() == true) or lCat ~= 1) then -- it is a unit and is active or it is not a unit if zone_type == 'cylinder' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = units[units_ind] + in_zone_units[#in_zone_units + 1] = lUnit break elseif zone_type == 'sphere' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.y - zones[zones_ind].y)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = units[units_ind] + in_zone_units[#in_zone_units + 1] = lUnit break end end @@ -2715,14 +2754,14 @@ function mist.getUnitsInMovingZones(unit_names, zone_unit_names, radius, zone_ty local zone_units = {} for k = 1, #unit_names do - local unit = Unit.getByName(unit_names[k]) + local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) if unit then units[#units + 1] = unit end end for k = 1, #zone_unit_names do - local unit = Unit.getByName(zone_unit_names[k]) + local unit = Unit.getByName(zone_unit_names[k]) or StaticObject.getByName(zone_unit_names[k]) if unit then zone_units[#zone_units + 1] = unit end @@ -2731,15 +2770,18 @@ function mist.getUnitsInMovingZones(unit_names, zone_unit_names, radius, zone_ty local in_zone_units = {} for units_ind = 1, #units do + local lUnit = units[units_ind] + local lCat = lUnit:getCategory() + local unit_pos = lUnit:getPosition().p for zone_units_ind = 1, #zone_units do - local unit_pos = units[units_ind]:getPosition().p + local zone_unit_pos = zone_units[zone_units_ind]:getPosition().p - if unit_pos and zone_unit_pos and units[units_ind]:isActive() == true then + if unit_pos and zone_unit_pos and ((lCat == 1 and lUnit:isActive()) or lCat ~= 1) then if zone_type == 'cylinder' and (((unit_pos.x - zone_unit_pos.x)^2 + (unit_pos.z - zone_unit_pos.z)^2)^0.5 <= radius) then - in_zone_units[#in_zone_units + 1] = units[units_ind] + in_zone_units[#in_zone_units + 1] = lUnit break elseif zone_type == 'sphere' and (((unit_pos.x - zone_unit_pos.x)^2 + (unit_pos.y - zone_unit_pos.y)^2 + (unit_pos.z - zone_unit_pos.z)^2)^0.5 <= radius) then - in_zone_units[#in_zone_units + 1] = units[units_ind] + in_zone_units[#in_zone_units + 1] = lUnit break end end @@ -2757,7 +2799,8 @@ function mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) -- get the positions all in one step, saves execution time. for unitset1_ind = 1, #unitset1 do local unit1 = Unit.getByName(unitset1[unitset1_ind]) - if unit1 and unit1:isActive() == true then + local lCat = unit1:getCategory() + if unit1 and ((lCat == 1 and unit1:isActive()) or lCat ~= 1) then unit_info1[#unit_info1 + 1] = {} unit_info1[#unit_info1].unit = unit1 unit_info1[#unit_info1].pos = unit1:getPosition().p @@ -2766,7 +2809,8 @@ function mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) for unitset2_ind = 1, #unitset2 do local unit2 = Unit.getByName(unitset2[unitset2_ind]) - if unit2 and unit2:isActive() == true then + local lCat = unit2:getCategory() + if unit2 and ((lCat == 1 and unit2:isActive()) or lCat ~= 1) then unit_info2[#unit_info2 + 1] = {} unit_info2[#unit_info2].unit = unit2 unit_info2[#unit_info2].pos = unit2:getPosition().p @@ -5016,7 +5060,7 @@ unitTableDef = table or nil if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then local num_in_zone = 0 for i = 1, #units do - local unit = Unit.getByName(units[i]) + local unit = Unit.getByName(units[i]) or StaticObject.getByName(units[i]) if unit then local pos = unit:getPosition().p if mist.pointInPolygon(pos, zone, maxalt) then diff --git a/mist_4_5_92.lua b/mist_4_5_95.lua similarity index 98% rename from mist_4_5_92.lua rename to mist_4_5_95.lua index 3fba303..6d6369f 100644 --- a/mist_4_5_92.lua +++ b/mist_4_5_95.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 94 +mist.build = 95 -- forward declaration of log shorthand local log @@ -2250,9 +2250,25 @@ do --- Returns a table containing unit names. -- @tparam table tbl sequential strings -- @treturn table @{UnitNameTable} - function mist.makeUnitTable(tbl) + function mist.makeUnitTable(tbl, exclude) --Assumption: will be passed a table of strings, sequential --log:info(tbl) + + + local excludeType = {} + if exclude then + if type(exclude) == 'table' then + for x, y in pairs(exclude) do + excludeType[x] = true + excludeType[y] = true + end + else + excludeType[exclude] = true + end + + end + + local units_by_name = {} local l_munits = mist.DBs.units --local reference for faster execution @@ -2313,12 +2329,15 @@ do elseif unit:sub(4,12) == '[vehicle]' then category = 'vehicle' country_start = 13 + elseif unit:sub(4, 11) == '[static]' then + category = 'static' + country_start = 12 end for coa, coa_tbl in pairs(l_munits) do for country, country_table in pairs(coa_tbl) do if country == string.lower(unit:sub(country_start)) then -- match for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2346,12 +2365,15 @@ do elseif unit:sub(5,13) == '[vehicle]' then category = 'vehicle' country_start = 14 + elseif unit:sub(5, 12) == '[static]' then + category = 'static' + country_start = 13 end for coa, coa_tbl in pairs(l_munits) do for country, country_table in pairs(coa_tbl) do if country == string.lower(unit:sub(country_start)) then -- match for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2376,12 +2398,14 @@ do category = 'ship' elseif unit:sub(7) == '[vehicle]' then category = 'vehicle' - end + elseif unit:sub(7) == '[static]' then + category = 'static' + end for coa, coa_tbl in pairs(l_munits) do if coa == 'blue' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2404,12 +2428,14 @@ do category = 'ship' elseif unit:sub(8) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(8) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do if coa == 'blue' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] thenthen for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2434,12 +2460,14 @@ do category = 'ship' elseif unit:sub(6) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(6) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do if coa == 'red' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2462,12 +2490,14 @@ do category = 'ship' elseif unit:sub(7) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(7) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do if coa == 'red' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2492,11 +2522,13 @@ do category = 'ship' elseif unit:sub(6) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(6) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2518,11 +2550,13 @@ do category = 'ship' elseif unit:sub(7) == '[vehicle]' then category = 'vehicle' + elseif unit:sub(7) == '[static]' then + category = 'static' end for coa, coa_tbl in pairs(l_munits) do for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2631,13 +2665,15 @@ function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) local units = {} for i = 1, #unit_names do - units[#units + 1] = Unit.getByName(unit_names[i]) + units[#units + 1] = Unit.getByName(unit_names[i]) or StaticObject.getByName(unit_names[i]) end local inZoneUnits = {} for i =1, #units do - if units[i]:isActive() and mist.pointInPolygon(units[i]:getPosition().p, polyZone, max_alt) then - inZoneUnits[#inZoneUnits + 1] = units[i] + local lUnit = units[i] + local lCat = lUnit:getCategory() + if ((lCat == 14 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then + inZoneUnits[#inZoneUnits + 1] = lUnit end end @@ -2645,8 +2681,7 @@ function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) end function mist.getUnitsInZones(unit_names, zone_names, zone_type) - - zone_type = zone_type or 'cylinder' + zone_type = zone_type or 'cylinder' if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then zone_type = 'cylinder' end @@ -2660,7 +2695,8 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local zones = {} for k = 1, #unit_names do - local unit = Unit.getByName(unit_names[k]) + + local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) if unit then units[#units + 1] = unit end @@ -2677,20 +2713,23 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local in_zone_units = {} for units_ind = 1, #units do - for zones_ind = 1, #zones do + local lUnit = units[units_ind] + local unit_pos = lUnit:getPosition().p + local lCat = lUnit:getCategory() + for zones_ind = 1, #zones do if zone_type == 'sphere' then --add land height value for sphere zone type local alt = land.getHeight({x = zones[zones_ind].x, y = zones[zones_ind].z}) if alt then zones[zones_ind].y = alt end end - local unit_pos = units[units_ind]:getPosition().p - if unit_pos and units[units_ind]:isActive() == true then + + if unit_pos and ((lCat == 1 and lUnit:isActive() == true) or lCat ~= 1) then -- it is a unit and is active or it is not a unit if zone_type == 'cylinder' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = units[units_ind] + in_zone_units[#in_zone_units + 1] = lUnit break elseif zone_type == 'sphere' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.y - zones[zones_ind].y)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = units[units_ind] + in_zone_units[#in_zone_units + 1] = lUnit break end end @@ -2715,14 +2754,14 @@ function mist.getUnitsInMovingZones(unit_names, zone_unit_names, radius, zone_ty local zone_units = {} for k = 1, #unit_names do - local unit = Unit.getByName(unit_names[k]) + local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) if unit then units[#units + 1] = unit end end for k = 1, #zone_unit_names do - local unit = Unit.getByName(zone_unit_names[k]) + local unit = Unit.getByName(zone_unit_names[k]) or StaticObject.getByName(zone_unit_names[k]) if unit then zone_units[#zone_units + 1] = unit end @@ -2731,15 +2770,18 @@ function mist.getUnitsInMovingZones(unit_names, zone_unit_names, radius, zone_ty local in_zone_units = {} for units_ind = 1, #units do + local lUnit = units[units_ind] + local lCat = lUnit:getCategory() + local unit_pos = lUnit:getPosition().p for zone_units_ind = 1, #zone_units do - local unit_pos = units[units_ind]:getPosition().p + local zone_unit_pos = zone_units[zone_units_ind]:getPosition().p - if unit_pos and zone_unit_pos and units[units_ind]:isActive() == true then + if unit_pos and zone_unit_pos and ((lCat == 1 and lUnit:isActive()) or lCat ~= 1) then if zone_type == 'cylinder' and (((unit_pos.x - zone_unit_pos.x)^2 + (unit_pos.z - zone_unit_pos.z)^2)^0.5 <= radius) then - in_zone_units[#in_zone_units + 1] = units[units_ind] + in_zone_units[#in_zone_units + 1] = lUnit break elseif zone_type == 'sphere' and (((unit_pos.x - zone_unit_pos.x)^2 + (unit_pos.y - zone_unit_pos.y)^2 + (unit_pos.z - zone_unit_pos.z)^2)^0.5 <= radius) then - in_zone_units[#in_zone_units + 1] = units[units_ind] + in_zone_units[#in_zone_units + 1] = lUnit break end end @@ -2757,7 +2799,8 @@ function mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) -- get the positions all in one step, saves execution time. for unitset1_ind = 1, #unitset1 do local unit1 = Unit.getByName(unitset1[unitset1_ind]) - if unit1 and unit1:isActive() == true then + local lCat = unit1:getCategory() + if unit1 and ((lCat == 1 and unit1:isActive()) or lCat ~= 1) then unit_info1[#unit_info1 + 1] = {} unit_info1[#unit_info1].unit = unit1 unit_info1[#unit_info1].pos = unit1:getPosition().p @@ -2766,7 +2809,8 @@ function mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) for unitset2_ind = 1, #unitset2 do local unit2 = Unit.getByName(unitset2[unitset2_ind]) - if unit2 and unit2:isActive() == true then + local lCat = unit2:getCategory() + if unit2 and ((lCat == 1 and unit2:isActive()) or lCat ~= 1) then unit_info2[#unit_info2 + 1] = {} unit_info2[#unit_info2].unit = unit2 unit_info2[#unit_info2].pos = unit2:getPosition().p @@ -5016,7 +5060,7 @@ unitTableDef = table or nil if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then local num_in_zone = 0 for i = 1, #units do - local unit = Unit.getByName(units[i]) + local unit = Unit.getByName(units[i]) or StaticObject.getByName(units[i]) if unit then local pos = unit:getPosition().p if mist.pointInPolygon(pos, zone, maxalt) then From ad5af75541ce3c90b1064f89444b7e62ef996351 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Thu, 19 Nov 2020 17:50:36 -0700 Subject: [PATCH 04/16] Fairly big oops Somehow screwed up the same syntax error, failed to noticed, and uplodaed. This is now fixed. --- mist.lua | 8 ++++---- mist_4_5_95.lua | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mist.lua b/mist.lua index 6d6369f..255524b 100644 --- a/mist.lua +++ b/mist.lua @@ -2337,7 +2337,7 @@ do for country, country_table in pairs(coa_tbl) do if country == string.lower(unit:sub(country_start)) then -- match for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2373,7 +2373,7 @@ do for country, country_table in pairs(coa_tbl) do if country == string.lower(unit:sub(country_start)) then -- match for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2405,7 +2405,7 @@ do if coa == 'blue' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2435,7 +2435,7 @@ do if coa == 'blue' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] thenthen + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do diff --git a/mist_4_5_95.lua b/mist_4_5_95.lua index 6d6369f..255524b 100644 --- a/mist_4_5_95.lua +++ b/mist_4_5_95.lua @@ -2337,7 +2337,7 @@ do for country, country_table in pairs(coa_tbl) do if country == string.lower(unit:sub(country_start)) then -- match for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2373,7 +2373,7 @@ do for country, country_table in pairs(coa_tbl) do if country == string.lower(unit:sub(country_start)) then -- match for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2405,7 +2405,7 @@ do if coa == 'blue' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then then + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do @@ -2435,7 +2435,7 @@ do if coa == 'blue' then for country, country_table in pairs(coa_tbl) do for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] thenthen + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then for group_ind, group_tbl in pairs(unit_type_tbl) do if type(group_tbl) == 'table' then for unit_ind, unit in pairs(group_tbl.units) do From cadde17c84a3f2817f8f51c49184e5d0422f6c0f Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Sun, 28 Feb 2021 21:04:18 -0700 Subject: [PATCH 05/16] Build 96 -Fixed DB entry for country names to use the values stored in the country table instead of the localized name within the miz. This fixes a missmatch when spawning units for the third reich -Added some future proofing -Added error messages for updating DB -Added disableRoads variable to grouoToRandomZone and groupRandomDistSelf --- mist.lua | 44 ++++++++++++++++++++---------- mist_4_5_95.lua => mist_4_5_96.lua | 44 ++++++++++++++++++++---------- 2 files changed, 60 insertions(+), 28 deletions(-) rename mist_4_5_95.lua => mist_4_5_96.lua (99%) diff --git a/mist.lua b/mist.lua index 255524b..d74c239 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 95 +mist.build = 96 -- forward declaration of log shorthand local log @@ -151,6 +151,9 @@ do -- the main scope for cntry_id, cntry_data in pairs(coa_data.country) do local countryName = string.lower(cntry_data.name) + if cntry_data.id and country.names[cntry_data.id] then + countryName = string.lower(country.names[cntry_data.id]) + end mist.DBs.units[coa_name][countryName] = {} mist.DBs.units[coa_name][countryName].countryId = cntry_data.id @@ -172,7 +175,7 @@ do -- the main scope mist.DBs.units[coa_name][countryName][category][group_num] = {} local groupName = group_data.name - if env.mission.version > 7 then + if env.mission.version > 7 and env.mission.version < 19 then groupName = env.getValueDictByKey(groupName) end mist.DBs.units[coa_name][countryName][category][group_num].groupName = groupName @@ -196,7 +199,7 @@ do -- the main scope local units_tbl = mist.DBs.units[coa_name][countryName][category][group_num].units --pointer to the units table for this group units_tbl[unit_num] = {} - if env.mission.version > 7 then + if env.mission.version > 7 and env.mission.version < 19 then units_tbl[unit_num].unitName = env.getValueDictByKey(unit_data.name) else units_tbl[unit_num].unitName = unit_data.name @@ -685,9 +688,14 @@ do -- the main scope newTable.category = 'static' else unitOneRef = newObject:getUnits() - newTable.countryId = tonumber(unitOneRef[1]:getCountry()) - newTable.coalitionId = tonumber(unitOneRef[1]:getCoalition()) - newTable.category = tonumber(newObject:getCategory()) + if #unitOneRef > 0 and unitOneRef[1] and type(unitOneRef[1]) == 'table' then + newTable.countryId = tonumber(unitOneRef[1]:getCountry()) + newTable.coalitionId = tonumber(unitOneRef[1]:getCoalition()) + newTable.category = tonumber(newObject:getCategory()) + else + log:warn('getUnits failed to return on $1 ; Built Data: $2.', event, newTable) + return false + end end for countryData, countryId in pairs(country.id) do if newTable.country and string.upper(countryData) == string.upper(newTable.country) or countryId == newTable.countryId then @@ -1416,7 +1424,7 @@ do -- the main scope -- Will generate groupId, groupName, unitId, and unitName if needed -- @tparam table newGroup table containting values needed for spawning a group. function mist.dynAdd(newGroup) - + --log:warn(newGroup) --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua') local cntry = newGroup.country if newGroup.countryId then @@ -3256,6 +3264,9 @@ do -- group functions scope newData.units = {} local newUnits = newGroup:getUnits() + if #newUnits == 0 then + log:warn('getCurrentGroupData has returned no units for: $1', gpName) + end for unitNum, unitData in pairs(newGroup:getUnits()) do newData.units[unitNum] = {} local uName = unitData:getName() @@ -3496,6 +3507,11 @@ do -- group functions scope newGroupData.groupName = vars.newGroupName end + if #newGroupData.units == 0 then + log:warn('$1 has no units in group table', gpName) + return + end + --log:info('get Randomized Point') local diff = {x = 0, y = 0} local newCoord, origCoord @@ -6688,7 +6704,7 @@ do -- group tasks scope if group then local groupCon = group:getController() if groupCon then - log:warn(misTask) + --log:warn(misTask) groupCon:setTask(misTask) return true end @@ -6720,7 +6736,7 @@ do -- group tasks scope for point_num, point in pairs(group_data.route.points) do local routeData = {} - if env.mission.version > 7 then + if env.mission.version > 7 and env.mission.version < 19 then routeData.name = env.getValueDictByKey(point.name) else routeData.name = point.name @@ -7098,7 +7114,7 @@ do -- group tasks scope function mist.getRandomPointInPoly(zone) --env.info('Zone Size: '.. #zone) local avg = mist.getAvgPoint(zone) - log:warn(avg) + --log:warn(avg) local radius = 0 local minR = math.huge local newCoord = {} @@ -7180,17 +7196,17 @@ do -- group tasks scope return end - function mist.groupRandomDistSelf(gpData, dist, form, heading, speed) + function mist.groupRandomDistSelf(gpData, dist, form, heading, speed, disableRoads) local pos = mist.getLeadPos(gpData) local fakeZone = {} fakeZone.radius = dist or math.random(300, 1000) fakeZone.point = {x = pos.x, y = pos.y, z = pos.z} - mist.groupToRandomZone(gpData, fakeZone, form, heading, speed) + mist.groupToRandomZone(gpData, fakeZone, form, heading, speed, disableRoads) return end - function mist.groupToRandomZone(gpData, zone, form, heading, speed) + function mist.groupToRandomZone(gpData, zone, form, heading, speed, disableRoads) if type(gpData) == 'string' then gpData = Group.getByName(gpData) end @@ -7212,7 +7228,7 @@ do -- group tasks scope vars.headingDegrees = heading vars.speed = speed vars.point = mist.utils.zoneToVec3(zone) - + vars.disableRoads = disableRoads mist.groupToRandomPoint(vars) return diff --git a/mist_4_5_95.lua b/mist_4_5_96.lua similarity index 99% rename from mist_4_5_95.lua rename to mist_4_5_96.lua index 255524b..d74c239 100644 --- a/mist_4_5_95.lua +++ b/mist_4_5_96.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 95 +mist.build = 96 -- forward declaration of log shorthand local log @@ -151,6 +151,9 @@ do -- the main scope for cntry_id, cntry_data in pairs(coa_data.country) do local countryName = string.lower(cntry_data.name) + if cntry_data.id and country.names[cntry_data.id] then + countryName = string.lower(country.names[cntry_data.id]) + end mist.DBs.units[coa_name][countryName] = {} mist.DBs.units[coa_name][countryName].countryId = cntry_data.id @@ -172,7 +175,7 @@ do -- the main scope mist.DBs.units[coa_name][countryName][category][group_num] = {} local groupName = group_data.name - if env.mission.version > 7 then + if env.mission.version > 7 and env.mission.version < 19 then groupName = env.getValueDictByKey(groupName) end mist.DBs.units[coa_name][countryName][category][group_num].groupName = groupName @@ -196,7 +199,7 @@ do -- the main scope local units_tbl = mist.DBs.units[coa_name][countryName][category][group_num].units --pointer to the units table for this group units_tbl[unit_num] = {} - if env.mission.version > 7 then + if env.mission.version > 7 and env.mission.version < 19 then units_tbl[unit_num].unitName = env.getValueDictByKey(unit_data.name) else units_tbl[unit_num].unitName = unit_data.name @@ -685,9 +688,14 @@ do -- the main scope newTable.category = 'static' else unitOneRef = newObject:getUnits() - newTable.countryId = tonumber(unitOneRef[1]:getCountry()) - newTable.coalitionId = tonumber(unitOneRef[1]:getCoalition()) - newTable.category = tonumber(newObject:getCategory()) + if #unitOneRef > 0 and unitOneRef[1] and type(unitOneRef[1]) == 'table' then + newTable.countryId = tonumber(unitOneRef[1]:getCountry()) + newTable.coalitionId = tonumber(unitOneRef[1]:getCoalition()) + newTable.category = tonumber(newObject:getCategory()) + else + log:warn('getUnits failed to return on $1 ; Built Data: $2.', event, newTable) + return false + end end for countryData, countryId in pairs(country.id) do if newTable.country and string.upper(countryData) == string.upper(newTable.country) or countryId == newTable.countryId then @@ -1416,7 +1424,7 @@ do -- the main scope -- Will generate groupId, groupName, unitId, and unitName if needed -- @tparam table newGroup table containting values needed for spawning a group. function mist.dynAdd(newGroup) - + --log:warn(newGroup) --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua') local cntry = newGroup.country if newGroup.countryId then @@ -3256,6 +3264,9 @@ do -- group functions scope newData.units = {} local newUnits = newGroup:getUnits() + if #newUnits == 0 then + log:warn('getCurrentGroupData has returned no units for: $1', gpName) + end for unitNum, unitData in pairs(newGroup:getUnits()) do newData.units[unitNum] = {} local uName = unitData:getName() @@ -3496,6 +3507,11 @@ do -- group functions scope newGroupData.groupName = vars.newGroupName end + if #newGroupData.units == 0 then + log:warn('$1 has no units in group table', gpName) + return + end + --log:info('get Randomized Point') local diff = {x = 0, y = 0} local newCoord, origCoord @@ -6688,7 +6704,7 @@ do -- group tasks scope if group then local groupCon = group:getController() if groupCon then - log:warn(misTask) + --log:warn(misTask) groupCon:setTask(misTask) return true end @@ -6720,7 +6736,7 @@ do -- group tasks scope for point_num, point in pairs(group_data.route.points) do local routeData = {} - if env.mission.version > 7 then + if env.mission.version > 7 and env.mission.version < 19 then routeData.name = env.getValueDictByKey(point.name) else routeData.name = point.name @@ -7098,7 +7114,7 @@ do -- group tasks scope function mist.getRandomPointInPoly(zone) --env.info('Zone Size: '.. #zone) local avg = mist.getAvgPoint(zone) - log:warn(avg) + --log:warn(avg) local radius = 0 local minR = math.huge local newCoord = {} @@ -7180,17 +7196,17 @@ do -- group tasks scope return end - function mist.groupRandomDistSelf(gpData, dist, form, heading, speed) + function mist.groupRandomDistSelf(gpData, dist, form, heading, speed, disableRoads) local pos = mist.getLeadPos(gpData) local fakeZone = {} fakeZone.radius = dist or math.random(300, 1000) fakeZone.point = {x = pos.x, y = pos.y, z = pos.z} - mist.groupToRandomZone(gpData, fakeZone, form, heading, speed) + mist.groupToRandomZone(gpData, fakeZone, form, heading, speed, disableRoads) return end - function mist.groupToRandomZone(gpData, zone, form, heading, speed) + function mist.groupToRandomZone(gpData, zone, form, heading, speed, disableRoads) if type(gpData) == 'string' then gpData = Group.getByName(gpData) end @@ -7212,7 +7228,7 @@ do -- group tasks scope vars.headingDegrees = heading vars.speed = speed vars.point = mist.utils.zoneToVec3(zone) - + vars.disableRoads = disableRoads mist.groupToRandomPoint(vars) return From fdcbac0ac51c25592a1ad859325e933cca7ee539 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Fri, 2 Apr 2021 17:51:36 -0600 Subject: [PATCH 06/16] Removed getZone checks Replaced multiple instances of trigger.misc.getZone to rely on mist.DBs.zonesByName instead. getRandPointInCircle will default to a radius of 1000 if none is specified. Added mist.vec.normalize Added ground level optional value to mist.utils.zoneToVec3 to return that point at ground level. Some future proofing. --- mist.lua | 86 +++++++++++++++++++----------- mist_4_5_96.lua => mist_4_5_97.lua | 86 +++++++++++++++++++----------- 2 files changed, 112 insertions(+), 60 deletions(-) rename mist_4_5_96.lua => mist_4_5_97.lua (99%) diff --git a/mist.lua b/mist.lua index d74c239..1267359 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 96 +mist.build = 97 -- forward declaration of log shorthand local log @@ -2701,7 +2701,10 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local units = {} local zones = {} - + + if zone_names and type(zone_names) == 'string' then + zone_names = {zoneNames} + end for k = 1, #unit_names do local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) @@ -2712,9 +2715,9 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) for k = 1, #zone_names do - local zone = trigger.misc.getZone(zone_names[k]) + local zone = mist.DBs.zonesByName[zone_names[k]] if zone then - zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z} + zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z, verts = zone.vertices} end end @@ -2733,13 +2736,20 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) end if unit_pos and ((lCat == 1 and lUnit:isActive() == true) or lCat ~= 1) then -- it is a unit and is active or it is not a unit - if zone_type == 'cylinder' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = lUnit - break - elseif zone_type == 'sphere' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.y - zones[zones_ind].y)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = lUnit - break - end + if zones[zones_ind].verts then + if mist.pointInPolygon(unit_pos, zones[zones_ind].verts) then + in_zone_units[#in_zone_units + 1] = lUnit + end + + else + if zone_type == 'cylinder' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then + in_zone_units[#in_zone_units + 1] = lUnit + break + elseif zone_type == 'sphere' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.y - zones[zones_ind].y)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then + in_zone_units[#in_zone_units + 1] = lUnit + break + end + end end end end @@ -3648,9 +3658,9 @@ do -- group functions scope 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)]) + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] end local vars = {} vars.gpName = gpName @@ -3671,9 +3681,9 @@ do -- group functions scope 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)]) + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] end local vars = {} vars.gpName = gpName @@ -3694,9 +3704,9 @@ do -- group functions scope 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)]) + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] end local vars = {} @@ -4267,7 +4277,7 @@ do -- mist.util scope --- Returns the center of a zone as Vec3. -- @tparam string|table zone trigger zone name or table -- @treturn Vec3 center of the zone - function mist.utils.zoneToVec3(zone) + function mist.utils.zoneToVec3(zone, gl) local new = {} if type(zone) == 'table' then if zone.point then @@ -4275,7 +4285,7 @@ do -- mist.util scope new.y = zone.point.y new.z = zone.point.z elseif zone.x and zone.y and zone.z then - return zone + new = mist.utils.deepCopy(zone) end return new elseif type(zone) == 'string' then @@ -4284,9 +4294,12 @@ do -- mist.util scope new.x = zone.point.x new.y = zone.point.y new.z = zone.point.z - return new end end + if new.x and gl then + new.y = land.getHeight({x = new.x, y = new.z}) + end + return new end function mist.utils.getHeadingPoints(point1, point2, north) -- sick of writing this out. @@ -4883,6 +4896,13 @@ do -- mist.vec scope function mist.vec.rotateVec2(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 + + function mist.vec.normalize(vec3) + local mag = mist.vec.mag(vec3) + if mag ~= 0 then + return mist.vec.scalar_mult(vec3, 1.0 / mag) + end + end end --- Flag functions. @@ -7073,9 +7093,10 @@ do -- group tasks scope end -- need to return a Vec3 or Vec2? - function mist.getRandPointInCircle(p, radius, innerRadius, maxA, minA) + function mist.getRandPointInCircle(p, r, innerRadius, maxA, minA) local point = mist.utils.makeVec3(p) local theta = 2*math.pi*math.random() + local radius = r or 1000 local minR = innerRadius or 0 if maxA and not minA then theta = math.rad(math.random(0, maxA - math.random())) @@ -7105,9 +7126,14 @@ do -- group tasks scope end function mist.getRandomPointInZone(zoneName, innerRadius, maxA, minA) - if type(zoneName) == 'string' and type(trigger.misc.getZone(zoneName)) == 'table' then - return mist.getRandPointInCircle(trigger.misc.getZone(zoneName).point, trigger.misc.getZone(zoneName).radius, innerRadius, maxA, minA) - end + if type(zoneName) == 'string' then + local zone = mist.DBs.zoneByName[zoneName] + if zone.type and zone.type == 2 then + return mist.getRandomPointInPoly(zone.vertices) + else + return mist.getRandPointInCircle(zone.point, zone.radius, innerRadius, maxA, minA) + end + end return false end @@ -7212,9 +7238,9 @@ do -- group tasks scope end if type(zone) == 'string' then - zone = trigger.misc.getZone(zone) + zone = mist.DBs.zonesByName[zone] elseif type(zone) == 'table' and not zone.radius then - zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] end if speed then @@ -7297,7 +7323,7 @@ do -- group tasks scope function mist.groupToPoint(gpData, point, form, heading, speed, useRoads) if type(point) == 'string' then - point = trigger.misc.getZone(point) + point = mist.DBs.zonesByName[point] end if speed then speed = mist.utils.kmphToMps(speed) diff --git a/mist_4_5_96.lua b/mist_4_5_97.lua similarity index 99% rename from mist_4_5_96.lua rename to mist_4_5_97.lua index d74c239..1267359 100644 --- a/mist_4_5_96.lua +++ b/mist_4_5_97.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 96 +mist.build = 97 -- forward declaration of log shorthand local log @@ -2701,7 +2701,10 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local units = {} local zones = {} - + + if zone_names and type(zone_names) == 'string' then + zone_names = {zoneNames} + end for k = 1, #unit_names do local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) @@ -2712,9 +2715,9 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) for k = 1, #zone_names do - local zone = trigger.misc.getZone(zone_names[k]) + local zone = mist.DBs.zonesByName[zone_names[k]] if zone then - zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z} + zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z, verts = zone.vertices} end end @@ -2733,13 +2736,20 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) end if unit_pos and ((lCat == 1 and lUnit:isActive() == true) or lCat ~= 1) then -- it is a unit and is active or it is not a unit - if zone_type == 'cylinder' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = lUnit - break - elseif zone_type == 'sphere' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.y - zones[zones_ind].y)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = lUnit - break - end + if zones[zones_ind].verts then + if mist.pointInPolygon(unit_pos, zones[zones_ind].verts) then + in_zone_units[#in_zone_units + 1] = lUnit + end + + else + if zone_type == 'cylinder' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then + in_zone_units[#in_zone_units + 1] = lUnit + break + elseif zone_type == 'sphere' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.y - zones[zones_ind].y)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then + in_zone_units[#in_zone_units + 1] = lUnit + break + end + end end end end @@ -3648,9 +3658,9 @@ do -- group functions scope 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)]) + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] end local vars = {} vars.gpName = gpName @@ -3671,9 +3681,9 @@ do -- group functions scope 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)]) + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] end local vars = {} vars.gpName = gpName @@ -3694,9 +3704,9 @@ do -- group functions scope 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)]) + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] end local vars = {} @@ -4267,7 +4277,7 @@ do -- mist.util scope --- Returns the center of a zone as Vec3. -- @tparam string|table zone trigger zone name or table -- @treturn Vec3 center of the zone - function mist.utils.zoneToVec3(zone) + function mist.utils.zoneToVec3(zone, gl) local new = {} if type(zone) == 'table' then if zone.point then @@ -4275,7 +4285,7 @@ do -- mist.util scope new.y = zone.point.y new.z = zone.point.z elseif zone.x and zone.y and zone.z then - return zone + new = mist.utils.deepCopy(zone) end return new elseif type(zone) == 'string' then @@ -4284,9 +4294,12 @@ do -- mist.util scope new.x = zone.point.x new.y = zone.point.y new.z = zone.point.z - return new end end + if new.x and gl then + new.y = land.getHeight({x = new.x, y = new.z}) + end + return new end function mist.utils.getHeadingPoints(point1, point2, north) -- sick of writing this out. @@ -4883,6 +4896,13 @@ do -- mist.vec scope function mist.vec.rotateVec2(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 + + function mist.vec.normalize(vec3) + local mag = mist.vec.mag(vec3) + if mag ~= 0 then + return mist.vec.scalar_mult(vec3, 1.0 / mag) + end + end end --- Flag functions. @@ -7073,9 +7093,10 @@ do -- group tasks scope end -- need to return a Vec3 or Vec2? - function mist.getRandPointInCircle(p, radius, innerRadius, maxA, minA) + function mist.getRandPointInCircle(p, r, innerRadius, maxA, minA) local point = mist.utils.makeVec3(p) local theta = 2*math.pi*math.random() + local radius = r or 1000 local minR = innerRadius or 0 if maxA and not minA then theta = math.rad(math.random(0, maxA - math.random())) @@ -7105,9 +7126,14 @@ do -- group tasks scope end function mist.getRandomPointInZone(zoneName, innerRadius, maxA, minA) - if type(zoneName) == 'string' and type(trigger.misc.getZone(zoneName)) == 'table' then - return mist.getRandPointInCircle(trigger.misc.getZone(zoneName).point, trigger.misc.getZone(zoneName).radius, innerRadius, maxA, minA) - end + if type(zoneName) == 'string' then + local zone = mist.DBs.zoneByName[zoneName] + if zone.type and zone.type == 2 then + return mist.getRandomPointInPoly(zone.vertices) + else + return mist.getRandPointInCircle(zone.point, zone.radius, innerRadius, maxA, minA) + end + end return false end @@ -7212,9 +7238,9 @@ do -- group tasks scope end if type(zone) == 'string' then - zone = trigger.misc.getZone(zone) + zone = mist.DBs.zonesByName[zone] elseif type(zone) == 'table' and not zone.radius then - zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] end if speed then @@ -7297,7 +7323,7 @@ do -- group tasks scope function mist.groupToPoint(gpData, point, form, heading, speed, useRoads) if type(point) == 'string' then - point = trigger.misc.getZone(point) + point = mist.DBs.zonesByName[point] end if speed then speed = mist.utils.kmphToMps(speed) From 1c9e14add3bfecded29b4d790356eec459fda896 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Fri, 9 Apr 2021 14:14:11 -0600 Subject: [PATCH 07/16] Fixed Typo Fixed typo generating error in mist.getRandomPointInZone --- mist.lua | 12 +- mist_4_5_98.lua | 7634 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 7643 insertions(+), 3 deletions(-) create mode 100644 mist_4_5_98.lua diff --git a/mist.lua b/mist.lua index 1267359..f457f28 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 97 +mist.build = 98 -- forward declaration of log shorthand local log @@ -5183,7 +5183,13 @@ unitTableDef = table or nil end end - + --[[ + function mist.flagFunc.weapon_in_zones(vars) + -- borrow from suchoi surprise. While running enabled event handler that checks for weapons in zone. + -- Choice is weapon category or weapon strings. + + end +]] --- Sets a flag if unit(s) is/are inside a moving zone. -- @todo document function mist.flagFunc.units_in_moving_zones(vars) @@ -7127,7 +7133,7 @@ do -- group tasks scope function mist.getRandomPointInZone(zoneName, innerRadius, maxA, minA) if type(zoneName) == 'string' then - local zone = mist.DBs.zoneByName[zoneName] + local zone = mist.DBs.zonesByName[zoneName] if zone.type and zone.type == 2 then return mist.getRandomPointInPoly(zone.vertices) else diff --git a/mist_4_5_98.lua b/mist_4_5_98.lua new file mode 100644 index 0000000..f457f28 --- /dev/null +++ b/mist_4_5_98.lua @@ -0,0 +1,7634 @@ +--[[-- +MIST Mission Scripting Tools. +## Description: +MIssion Scripting Tools (MIST) is a collection of Lua functions +and databases that is intended to be a supplement to the standard +Lua functions included in the simulator scripting engine. + +MIST functions and databases provide ready-made solutions to many common +scripting tasks and challenges, enabling easier scripting and saving +mission scripters time. The table mist.flagFuncs contains a set of +Lua functions (that are similar to Slmod functions) that do not +require detailed Lua knowledge to use. + +However, the majority of MIST does require knowledge of the Lua language, +and, if you are going to utilize these components of MIST, it is necessary +that you read the Simulator Scripting Engine guide on the official ED wiki. + +## Links: + +ED Forum Thread: + +##Github: + +Development + +Official Releases + +@script MIST +@author Speed +@author Grimes +@author lukrop +]] +mist = {} + +-- don't change these +mist.majorVersion = 4 +mist.minorVersion = 5 +mist.build = 98 + +-- forward declaration of log shorthand +local log + +local mistSettings = { + errorPopup = false, -- errors printed by mist logger will create popup warning you + warnPopup = false, + infoPopup = false, + logLevel = 'warn', +} + +do -- the main scope + local coroutines = {} + + local tempSpawnedUnits = {} -- birth events added here + local tempSpawnedGroups = {} + local tempSpawnGroupsCounter = 0 + + local mistAddedObjects = {} -- mist.dynAdd unit data added here + local mistAddedGroups = {} -- mist.dynAdd groupdata added here + local writeGroups = {} + local lastUpdateTime = 0 + + local updateAliveUnitsCounter = 0 + local updateTenthSecond = 0 + + local mistGpId = 7000 + local mistUnitId = 7000 + local mistDynAddIndex = {[' air '] = 0, [' hel '] = 0, [' gnd '] = 0, [' bld '] = 0, [' static '] = 0, [' shp '] = 0} + + local scheduledTasks = {} + local taskId = 0 + local idNum = 0 + + mist.nextGroupId = 1 + mist.nextUnitId = 1 + + local dbLog + + local function initDBs() -- mist.DBs scope + mist.DBs = {} + + mist.DBs.missionData = {} + if env.mission then + + mist.DBs.missionData.startTime = env.mission.start_time + mist.DBs.missionData.theatre = env.mission.theatre + mist.DBs.missionData.version = env.mission.version + mist.DBs.missionData.files = {} + if type(env.mission.resourceCounter) == 'table' then + for fIndex, fData in pairs (env.mission.resourceCounter) do + mist.DBs.missionData.files[#mist.DBs.missionData.files + 1] = mist.utils.deepCopy(fIndex) + end + end + -- if we add more coalition specific data then bullsye should be categorized by coaliton. For now its just the bullseye table + mist.DBs.missionData.bullseye = {} + end + + mist.DBs.zonesByName = {} + mist.DBs.zonesByNum = {} + + + if env.mission.triggers and env.mission.triggers.zones then + for zone_ind, zone_data in pairs(env.mission.triggers.zones) do + if type(zone_data) == 'table' then + local zone = mist.utils.deepCopy(zone_data) + zone.point = {} -- point is used by SSE + zone.point.x = zone_data.x + zone.point.y = 0 + zone.point.z = zone_data.y + + mist.DBs.zonesByName[zone_data.name] = zone + mist.DBs.zonesByNum[#mist.DBs.zonesByNum + 1] = mist.utils.deepCopy(zone) --[[deepcopy so that the zone in zones_by_name and the zone in + zones_by_num se are different objects.. don't want them linked.]] + end + end + end + + mist.DBs.navPoints = {} + mist.DBs.units = {} + --Build mist.db.units and mist.DBs.navPoints + for coa_name_miz, coa_data in pairs(env.mission.coalition) do + local coa_name = coa_name_miz + if string.lower(coa_name_miz) == 'neutrals' then + coa_name = 'neutral' + end + if type(coa_data) == 'table' then + mist.DBs.units[coa_name] = {} + + if coa_data.bullseye then + mist.DBs.missionData.bullseye[coa_name] = {} + mist.DBs.missionData.bullseye[coa_name].x = coa_data.bullseye.x + mist.DBs.missionData.bullseye[coa_name].y = coa_data.bullseye.y + end + -- build nav points DB + mist.DBs.navPoints[coa_name] = {} + if coa_data.nav_points then --navpoints + --mist.debug.writeData (mist.utils.serialize,{'NavPoints',coa_data.nav_points}, 'NavPoints.txt') + for nav_ind, nav_data in pairs(coa_data.nav_points) do + + if type(nav_data) == 'table' then + mist.DBs.navPoints[coa_name][nav_ind] = mist.utils.deepCopy(nav_data) + + mist.DBs.navPoints[coa_name][nav_ind].name = nav_data.callsignStr -- name is a little bit more self-explanatory. + mist.DBs.navPoints[coa_name][nav_ind].point = {} -- point is used by SSE, support it. + mist.DBs.navPoints[coa_name][nav_ind].point.x = nav_data.x + mist.DBs.navPoints[coa_name][nav_ind].point.y = 0 + mist.DBs.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) + if cntry_data.id and country.names[cntry_data.id] then + countryName = string.lower(country.names[cntry_data.id]) + end + mist.DBs.units[coa_name][countryName] = {} + mist.DBs.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! + + mist.DBs.units[coa_name][countryName][category] = {} + + for group_num, group_data in pairs(obj_type_data.group) do + + if group_data and group_data.units and type(group_data.units) == 'table' then --making sure again- this is a valid group + + mist.DBs.units[coa_name][countryName][category][group_num] = {} + local groupName = group_data.name + if env.mission.version > 7 and env.mission.version < 19 then + groupName = env.getValueDictByKey(groupName) + end + mist.DBs.units[coa_name][countryName][category][group_num].groupName = groupName + mist.DBs.units[coa_name][countryName][category][group_num].groupId = group_data.groupId + mist.DBs.units[coa_name][countryName][category][group_num].category = category + mist.DBs.units[coa_name][countryName][category][group_num].coalition = coa_name + mist.DBs.units[coa_name][countryName][category][group_num].country = countryName + mist.DBs.units[coa_name][countryName][category][group_num].countryId = cntry_data.id + mist.DBs.units[coa_name][countryName][category][group_num].startTime = group_data.start_time + mist.DBs.units[coa_name][countryName][category][group_num].task = group_data.task + mist.DBs.units[coa_name][countryName][category][group_num].hidden = group_data.hidden + + mist.DBs.units[coa_name][countryName][category][group_num].units = {} + + mist.DBs.units[coa_name][countryName][category][group_num].radioSet = group_data.radioSet + mist.DBs.units[coa_name][countryName][category][group_num].uncontrolled = group_data.uncontrolled + mist.DBs.units[coa_name][countryName][category][group_num].frequency = group_data.frequency + mist.DBs.units[coa_name][countryName][category][group_num].modulation = group_data.modulation + + for unit_num, unit_data in pairs(group_data.units) do + local units_tbl = mist.DBs.units[coa_name][countryName][category][group_num].units --pointer to the units table for this group + + units_tbl[unit_num] = {} + if env.mission.version > 7 and env.mission.version < 19 then + units_tbl[unit_num].unitName = env.getValueDictByKey(unit_data.name) + else + units_tbl[unit_num].unitName = unit_data.name + end + units_tbl[unit_num].type = unit_data.type + units_tbl[unit_num].skill = unit_data.skill --will be nil for statics + units_tbl[unit_num].unitId = unit_data.unitId + units_tbl[unit_num].category = category + units_tbl[unit_num].coalition = coa_name + units_tbl[unit_num].country = countryName + units_tbl[unit_num].countryId = cntry_data.id + units_tbl[unit_num].heading = unit_data.heading + units_tbl[unit_num].playerCanDrive = unit_data.playerCanDrive + units_tbl[unit_num].alt = unit_data.alt + units_tbl[unit_num].alt_type = unit_data.alt_type + units_tbl[unit_num].speed = unit_data.speed + units_tbl[unit_num].livery_id = unit_data.livery_id + if unit_data.point then --ME currently does not work like this, but it might one day + units_tbl[unit_num].point = unit_data.point + else + units_tbl[unit_num].point = {} + units_tbl[unit_num].point.x = unit_data.x + units_tbl[unit_num].point.y = unit_data.y + end + units_tbl[unit_num].x = unit_data.x + units_tbl[unit_num].y = unit_data.y + + units_tbl[unit_num].callsign = unit_data.callsign + units_tbl[unit_num].onboard_num = unit_data.onboard_num + units_tbl[unit_num].hardpoint_racks = unit_data.hardpoint_racks + units_tbl[unit_num].psi = unit_data.psi + + + units_tbl[unit_num].groupName = groupName + units_tbl[unit_num].groupId = group_data.groupId + + if unit_data.AddPropAircraft then + units_tbl[unit_num].AddPropAircraft = unit_data.AddPropAircraft + end + + if category == 'static' then + units_tbl[unit_num].categoryStatic = unit_data.category + units_tbl[unit_num].shape_name = unit_data.shape_name + if unit_data.mass then + units_tbl[unit_num].mass = unit_data.mass + end + + if unit_data.canCargo then + units_tbl[unit_num].canCargo = unit_data.canCargo + end + end + + end --for unit_num, unit_data in pairs(group_data.units) do + end --if group_data and group_data.units then + 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 --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 + + mist.DBs.unitsByName = {} + mist.DBs.unitsById = {} + mist.DBs.unitsByCat = {} + + mist.DBs.unitsByCat.helicopter = {} -- adding default categories + mist.DBs.unitsByCat.plane = {} + mist.DBs.unitsByCat.ship = {} + mist.DBs.unitsByCat.static = {} + mist.DBs.unitsByCat.vehicle = {} + + mist.DBs.unitsByNum = {} + + mist.DBs.groupsByName = {} + mist.DBs.groupsById = {} + mist.DBs.humansByName = {} + mist.DBs.humansById = {} + + mist.DBs.dynGroupsAdded = {} -- will be filled by mist.dbUpdate from dynamically spawned groups + mist.DBs.activeHumans = {} + + mist.DBs.aliveUnits = {} -- will be filled in by the "updateAliveUnits" coroutine in mist.main. + + mist.DBs.removedAliveUnits = {} -- will be filled in by the "updateAliveUnits" coroutine in mist.main. + + mist.DBs.const = {} + + -- not accessible by SSE, must use static list :-/ + mist.DBs.const.callsigns = { + ['NATO'] = { + ['rules'] = { + ['groupLimit'] = 9, + }, + ['AWACS'] = { + ['Overlord'] = 1, + ['Magic'] = 2, + ['Wizard'] = 3, + ['Focus'] = 4, + ['Darkstar'] = 5, + }, + ['TANKER'] = { + ['Texaco'] = 1, + ['Arco'] = 2, + ['Shell'] = 3, + }, + ['JTAC'] = { + ['Axeman'] = 1, + ['Darknight'] = 2, + ['Warrior'] = 3, + ['Pointer'] = 4, + ['Eyeball'] = 5, + ['Moonbeam'] = 6, + ['Whiplash'] = 7, + ['Finger'] = 8, + ['Pinpoint'] = 9, + ['Ferret'] = 10, + ['Shaba'] = 11, + ['Playboy'] = 12, + ['Hammer'] = 13, + ['Jaguar'] = 14, + ['Deathstar'] = 15, + ['Anvil'] = 16, + ['Firefly'] = 17, + ['Mantis'] = 18, + ['Badger'] = 19, + }, + ['aircraft'] = { + ['Enfield'] = 1, + ['Springfield'] = 2, + ['Uzi'] = 3, + ['Colt'] = 4, + ['Dodge'] = 5, + ['Ford'] = 6, + ['Chevy'] = 7, + ['Pontiac'] = 8, + }, + + ['unique'] = { + ['A10'] = { + ['Hawg'] = 9, + ['Boar'] = 10, + ['Pig'] = 11, + ['Tusk'] = 12, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'A-10C', + 'A-10A', + }, + }, + }, + }, + }, + } + mist.DBs.const.shapeNames = { + ["Landmine"] = "landmine", + ["FARP CP Blindage"] = "kp_ug", + ["Subsidiary structure C"] = "saray-c", + ["Barracks 2"] = "kazarma2", + ["Small house 2C"] = "dom2c", + ["Military staff"] = "aviashtab", + ["Tech hangar A"] = "ceh_ang_a", + ["Oil derrick"] = "neftevyshka", + ["Tech combine"] = "kombinat", + ["Garage B"] = "garage_b", + ["Airshow_Crowd"] = "Crowd1", + ["Hangar A"] = "angar_a", + ["Repair workshop"] = "tech", + ["Subsidiary structure D"] = "saray-d", + ["FARP Ammo Dump Coating"] = "SetkaKP", + ["Small house 1C area"] = "dom2c-all", + ["Tank 2"] = "airbase_tbilisi_tank_01", + ["Boiler-house A"] = "kotelnaya_a", + ["Workshop A"] = "tec_a", + ["Small werehouse 1"] = "s1", + ["Garage small B"] = "garagh-small-b", + ["Small werehouse 4"] = "s4", + ["Shop"] = "magazin", + ["Subsidiary structure B"] = "saray-b", + ["FARP Fuel Depot"] = "GSM Rus", + ["Coach cargo"] = "wagon-gruz", + ["Electric power box"] = "tr_budka", + ["Tank 3"] = "airbase_tbilisi_tank_02", + ["Red_Flag"] = "H-flag_R", + ["Container red 3"] = "konteiner_red3", + ["Garage A"] = "garage_a", + ["Hangar B"] = "angar_b", + ["Black_Tyre"] = "H-tyre_B", + ["Cafe"] = "stolovaya", + ["Restaurant 1"] = "restoran1", + ["Subsidiary structure A"] = "saray-a", + ["Container white"] = "konteiner_white", + ["Warehouse"] = "sklad", + ["Tank"] = "bak", + ["Railway crossing B"] = "pereezd_small", + ["Subsidiary structure F"] = "saray-f", + ["Farm A"] = "ferma_a", + ["Small werehouse 3"] = "s3", + ["Water tower A"] = "wodokachka_a", + ["Railway station"] = "r_vok_sd", + ["Coach a tank blue"] = "wagon-cisterna_blue", + ["Supermarket A"] = "uniwersam_a", + ["Coach a platform"] = "wagon-platforma", + ["Garage small A"] = "garagh-small-a", + ["TV tower"] = "tele_bash", + ["Comms tower M"] = "tele_bash_m", + ["Small house 1A"] = "domik1a", + ["Farm B"] = "ferma_b", + ["GeneratorF"] = "GeneratorF", + ["Cargo1"] = "ab-212_cargo", + ["Container red 2"] = "konteiner_red2", + ["Subsidiary structure E"] = "saray-e", + ["Coach a passenger"] = "wagon-pass", + ["Black_Tyre_WF"] = "H-tyre_B_WF", + ["Electric locomotive"] = "elektrowoz", + ["Shelter"] = "ukrytie", + ["Coach a tank yellow"] = "wagon-cisterna_yellow", + ["Railway crossing A"] = "pereezd_big", + [".Ammunition depot"] = "SkladC", + ["Small werehouse 2"] = "s2", + ["Windsock"] = "H-Windsock_RW", + ["Shelter B"] = "ukrytie_b", + ["Fuel tank"] = "toplivo-bak", + ["Locomotive"] = "teplowoz", + [".Command Center"] = "ComCenter", + ["Pump station"] = "nasos", + ["Black_Tyre_RF"] = "H-tyre_B_RF", + ["Coach cargo open"] = "wagon-gruz-otkr", + ["Subsidiary structure 3"] = "hozdomik3", + ["FARP Tent"] = "PalatkaB", + ["White_Tyre"] = "H-tyre_W", + ["Subsidiary structure G"] = "saray-g", + ["Container red 1"] = "konteiner_red1", + ["Small house 1B area"] = "domik1b-all", + ["Subsidiary structure 1"] = "hozdomik1", + ["Container brown"] = "konteiner_brown", + ["Small house 1B"] = "domik1b", + ["Subsidiary structure 2"] = "hozdomik2", + ["Chemical tank A"] = "him_bak_a", + ["WC"] = "WC", + ["Small house 1A area"] = "domik1a-all", + ["White_Flag"] = "H-Flag_W", + ["Airshow_Cone"] = "Comp_cone", + ["Bulk Cargo Ship Ivanov"] = "barge-1", + ["Bulk Cargo Ship Yakushev"] = "barge-2", + ["Outpost"]="block", + ["Road outpost"]="block-onroad", + ["Container camo"] = "bw_container_cargo", + ["Tech Hangar A"] = "ceh_ang_a", + ["Bunker 1"] = "dot", + ["Bunker 2"] = "dot2", + ["Tanker Elnya 160"] = "elnya", + ["F-shape barrier"] = "f_bar_cargo", + ["Helipad Single"] = "farp", + ["FARP"] = "farps", + ["Fueltank"] = "fueltank_cargo", + ["Gate"] = "gate", + ["FARP Fuel Depot"] = "gsm rus", + ["Armed house"] = "home1_a", + ["FARP Command Post"] = "kp-ug", + ["Watch Tower Armed"] = "ohr-vyshka", + ["Oiltank"] = "oiltank_cargo", + ["Pipes small"] = "pipes_small_cargo", + ["Pipes big"] = "pipes_big_cargo", + ["Oil platform"] = "plavbaza", + ["Tetrapod"] = "tetrapod_cargo", + ["Fuel tank"] = "toplivo", + ["Trunks long"] = "trunks_long_cargo", + ["Trunks small"] = "trunks_small_cargo", + ["Passenger liner"] = "yastrebow", + ["Passenger boat"] = "zwezdny", + ["Oil rig"] = "oil_platform", + ["Gas platform"] = "gas_platform", + ["Container 20ft"] = "container_20ft", + ["Container 40ft"] = "container_40ft", + ["Downed pilot"] = "cadaver", + ["Parachute"] = "parash", + ["Pilot F15 Parachute"] = "pilot_f15_parachute", + ["Pilot standing"] = "pilot_parashut", + } + + + -- create mist.DBs.oldAliveUnits + -- do + -- local intermediate_alive_units = {} -- between 0 and 0.5 secs old + -- local function make_old_alive_units() -- called every 0.5 secs, makes the old_alive_units DB which is just a copy of alive_units that is 0.5 to 1 sec old + -- if intermediate_alive_units then + -- mist.DBs.oldAliveUnits = mist.utils.deepCopy(intermediate_alive_units) + -- end + -- intermediate_alive_units = mist.utils.deepCopy(mist.DBs.aliveUnits) + -- timer.scheduleFunction(make_old_alive_units, nil, timer.getTime() + 0.5) + -- end + + -- make_old_alive_units() + -- end + + --Build DBs + for coa_name, coa_data in pairs(mist.DBs.units) do + for cntry_name, cntry_data in pairs(coa_data) do + for category_name, category_data in pairs(cntry_data) do + if type(category_data) == 'table' then + for group_ind, group_data in pairs(category_data) do + if type(group_data) == 'table' and group_data.units and type(group_data.units) == 'table' and #group_data.units > 0 then -- OCD paradigm programming + mist.DBs.groupsByName[group_data.groupName] = mist.utils.deepCopy(group_data) + mist.DBs.groupsById[group_data.groupId] = mist.utils.deepCopy(group_data) + for unit_ind, unit_data in pairs(group_data.units) do + mist.DBs.unitsByName[unit_data.unitName] = mist.utils.deepCopy(unit_data) + mist.DBs.unitsById[unit_data.unitId] = mist.utils.deepCopy(unit_data) + + mist.DBs.unitsByCat[unit_data.category] = mist.DBs.unitsByCat[unit_data.category] or {} -- future-proofing against new categories... + table.insert(mist.DBs.unitsByCat[unit_data.category], mist.utils.deepCopy(unit_data)) + --dbLog:info('inserting $1', unit_data.unitName) + table.insert(mist.DBs.unitsByNum, mist.utils.deepCopy(unit_data)) + + if unit_data.skill and (unit_data.skill == "Client" or unit_data.skill == "Player") then + mist.DBs.humansByName[unit_data.unitName] = mist.utils.deepCopy(unit_data) + mist.DBs.humansById[unit_data.unitId] = mist.utils.deepCopy(unit_data) + --if Unit.getByName(unit_data.unitName) then + -- mist.DBs.activeHumans[unit_data.unitName] = mist.utils.deepCopy(unit_data) + -- mist.DBs.activeHumans[unit_data.unitName].playerName = Unit.getByName(unit_data.unitName):getPlayerName() + --end + end + end + end + end + end + end + end + end + + --DynDBs + mist.DBs.MEunits = mist.utils.deepCopy(mist.DBs.units) + mist.DBs.MEunitsByName = mist.utils.deepCopy(mist.DBs.unitsByName) + mist.DBs.MEunitsById = mist.utils.deepCopy(mist.DBs.unitsById) + mist.DBs.MEunitsByCat = mist.utils.deepCopy(mist.DBs.unitsByCat) + mist.DBs.MEunitsByNum = mist.utils.deepCopy(mist.DBs.unitsByNum) + mist.DBs.MEgroupsByName = mist.utils.deepCopy(mist.DBs.groupsByName) + mist.DBs.MEgroupsById = mist.utils.deepCopy(mist.DBs.groupsById) + + mist.DBs.deadObjects = {} + + do + local mt = {} + + function mt.__newindex(t, key, val) + local original_key = key --only for duplicate runtime IDs. + local key_ind = 1 + while mist.DBs.deadObjects[key] do + --dbLog:warn('duplicate runtime id of previously dead object key: $1', key) + key = tostring(original_key) .. ' #' .. tostring(key_ind) + key_ind = key_ind + 1 + end + + if mist.DBs.aliveUnits and mist.DBs.aliveUnits[val.object.id_] then + ----dbLog:info('object found in alive_units') + val.objectData = mist.utils.deepCopy(mist.DBs.aliveUnits[val.object.id_]) + local pos = Object.getPosition(val.object) + if pos then + val.objectPos = pos.p + end + val.objectType = mist.DBs.aliveUnits[val.object.id_].category + + elseif mist.DBs.removedAliveUnits and mist.DBs.removedAliveUnits[val.object.id_] then -- it didn't exist in alive_units, check old_alive_units + ----dbLog:info('object found in old_alive_units') + val.objectData = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) + local pos = Object.getPosition(val.object) + if pos then + val.objectPos = pos.p + end + val.objectType = mist.DBs.removedAliveUnits[val.object.id_].category + + else --attempt to determine if static object... + ----dbLog:info('object not found in alive units or old alive units') + local pos = Object.getPosition(val.object) + if pos then + local static_found = false + for ind, static in pairs(mist.DBs.unitsByCat.static) do + if ((pos.p.x - static.point.x)^2 + (pos.p.z - static.point.y)^2)^0.5 < 0.1 then --really, it should be zero... + --dbLog:info('correlated dead static object to position') + val.objectData = static + val.objectPos = pos.p + val.objectType = 'static' + static_found = true + break + end + end + if not static_found then + val.objectPos = pos.p + val.objectType = 'building' + end + else + val.objectType = 'unknown' + end + end + rawset(t, key, val) + end + + setmetatable(mist.DBs.deadObjects, mt) + end + + do -- mist unitID funcs + for id, idData in pairs(mist.DBs.unitsById) do + if idData.unitId > mist.nextUnitId then + mist.nextUnitId = mist.utils.deepCopy(idData.unitId) + end + if idData.groupId > mist.nextGroupId then + mist.nextGroupId = mist.utils.deepCopy(idData.groupId) + end + end + end + + + end + + local function updateAliveUnits() -- coroutine function + local lalive_units = mist.DBs.aliveUnits -- local references for faster execution + local lunits = mist.DBs.unitsByNum + local ldeepcopy = mist.utils.deepCopy + local lUnit = Unit + local lremovedAliveUnits = mist.DBs.removedAliveUnits + local updatedUnits = {} + + if #lunits > 0 then + local units_per_run = math.ceil(#lunits/20) + if units_per_run < 5 then + units_per_run = 5 + end + + for i = 1, #lunits do + if lunits[i].category ~= 'static' then -- can't get statics with Unit.getByName :( + local unit = lUnit.getByName(lunits[i].unitName) + if unit then + ----dbLog:info("unit named $1 alive!", lunits[i].unitName) -- spammy + local pos = unit:getPosition() + local newtbl = ldeepcopy(lunits[i]) + if pos then + newtbl.pos = pos.p + end + newtbl.unit = unit + --newtbl.rt_id = unit.id_ + lalive_units[unit.id_] = newtbl + updatedUnits[unit.id_] = true + end + end + if i%units_per_run == 0 then + coroutine.yield() + end + end + -- All units updated, remove any "alive" units that were not updated- they are dead! + for unit_id, unit in pairs(lalive_units) do + if not updatedUnits[unit_id] then + lremovedAliveUnits[unit_id] = unit + lalive_units[unit_id] = nil + end + end + end + end + + local function dbUpdate(event, objType) + --dbLog:info('dbUpdate') + local newTable = {} + newTable.startTime = 0 + if type(event) == 'string' then -- if name of an object. + local newObject + if Group.getByName(event) then + newObject = Group.getByName(event) + elseif StaticObject.getByName(event) then + newObject = StaticObject.getByName(event) + -- log:info('its static') + else + log:warn('$1 is not a Group or Static Object. This should not be possible. Sent category is: $2', event, objType) + return false + end + + newTable.name = newObject:getName() + newTable.groupId = tonumber(newObject:getID()) + newTable.groupName = newObject:getName() + local unitOneRef + if objType == 'static' then + unitOneRef = newObject + newTable.countryId = tonumber(newObject:getCountry()) + newTable.coalitionId = tonumber(newObject:getCoalition()) + newTable.category = 'static' + else + unitOneRef = newObject:getUnits() + if #unitOneRef > 0 and unitOneRef[1] and type(unitOneRef[1]) == 'table' then + newTable.countryId = tonumber(unitOneRef[1]:getCountry()) + newTable.coalitionId = tonumber(unitOneRef[1]:getCoalition()) + newTable.category = tonumber(newObject:getCategory()) + else + log:warn('getUnits failed to return on $1 ; Built Data: $2.', event, newTable) + return false + end + end + for countryData, countryId in pairs(country.id) do + if newTable.country and string.upper(countryData) == string.upper(newTable.country) or countryId == newTable.countryId then + newTable.countryId = countryId + newTable.country = string.lower(countryData) + for coaData, coaId in pairs(coalition.side) do + if coaId == coalition.getCountryCoalition(countryId) then + newTable.coalition = string.lower(coaData) + end + end + end + end + for catData, catId in pairs(Unit.Category) do + if objType == 'group' and Group.getByName(newTable.groupName):isExist() then + if catId == Group.getByName(newTable.groupName):getCategory() then + newTable.category = string.lower(catData) + end + elseif objType == 'static' and StaticObject.getByName(newTable.groupName):isExist() then + if catId == StaticObject.getByName(newTable.groupName):getCategory() then + newTable.category = string.lower(catData) + end + + end + end + local gfound = false + for index, data in pairs(mistAddedGroups) do + if mist.stringMatch(data.name, newTable.groupName) == true then + gfound = true + newTable.task = data.task + newTable.modulation = data.modulation + newTable.uncontrolled = data.uncontrolled + newTable.radioSet = data.radioSet + newTable.hidden = data.hidden + newTable.startTime = data.start_time + mistAddedGroups[index] = nil + end + end + + if gfound == false then + newTable.uncontrolled = false + newTable.hidden = false + end + + newTable.units = {} + if objType == 'group' then + for unitId, unitData in pairs(unitOneRef) do + newTable.units[unitId] = {} + newTable.units[unitId].unitName = unitData:getName() + + newTable.units[unitId].x = mist.utils.round(unitData:getPosition().p.x) + newTable.units[unitId].y = mist.utils.round(unitData:getPosition().p.z) + newTable.units[unitId].point = {} + newTable.units[unitId].point.x = newTable.units[unitId].x + newTable.units[unitId].point.y = newTable.units[unitId].y + newTable.units[unitId].alt = mist.utils.round(unitData:getPosition().p.y) + newTable.units[unitId].speed = mist.vec.mag(unitData:getVelocity()) + + newTable.units[unitId].heading = mist.getHeading(unitData, true) + + newTable.units[unitId].type = unitData:getTypeName() + newTable.units[unitId].unitId = tonumber(unitData:getID()) + + + newTable.units[unitId].groupName = newTable.groupName + newTable.units[unitId].groupId = newTable.groupId + newTable.units[unitId].countryId = newTable.countryId + newTable.units[unitId].coalitionId = newTable.coalitionId + newTable.units[unitId].coalition = newTable.coalition + newTable.units[unitId].country = newTable.country + local found = false + for index, data in pairs(mistAddedObjects) do + if mist.stringMatch(data.name, newTable.units[unitId].unitName) == true then + found = true + newTable.units[unitId].livery_id = data.livery_id + newTable.units[unitId].skill = data.skill + newTable.units[unitId].alt_type = data.alt_type + newTable.units[unitId].callsign = data.callsign + newTable.units[unitId].psi = data.psi + mistAddedObjects[index] = nil + end + if found == false then + newTable.units[unitId].skill = "High" + newTable.units[unitId].alt_type = "BARO" + end + if newTable.units[unitId].alt_type == "RADIO" then -- raw postition MSL was grabbed for group, but spawn is AGL, so re-offset it + newTable.units[unitId].alt = (newTable.units[unitId].alt - land.getHeight({x = newTable.units[unitId].x, y = newTable.units[unitId].y})) + end + end + + end + else -- its a static + newTable.category = 'static' + newTable.units[1] = {} + newTable.units[1].unitName = newObject:getName() + newTable.units[1].category = 'static' + newTable.units[1].x = mist.utils.round(newObject:getPosition().p.x) + newTable.units[1].y = mist.utils.round(newObject:getPosition().p.z) + newTable.units[1].point = {} + newTable.units[1].point.x = newTable.units[1].x + newTable.units[1].point.y = newTable.units[1].y + newTable.units[1].alt = mist.utils.round(newObject:getPosition().p.y) + newTable.units[1].heading = mist.getHeading(newObject, true) + newTable.units[1].type = newObject:getTypeName() + newTable.units[1].unitId = tonumber(newObject:getID()) + newTable.units[1].groupName = newTable.name + newTable.units[1].groupId = newTable.groupId + newTable.units[1].countryId = newTable.countryId + newTable.units[1].country = newTable.country + newTable.units[1].coalitionId = newTable.coalitionId + newTable.units[1].coalition = newTable.coalition + if newObject:getCategory() == 6 and newObject:getCargoDisplayName() then + local mass = newObject:getCargoDisplayName() + mass = string.gsub(mass, ' ', '') + mass = string.gsub(mass, 'kg', '') + newTable.units[1].mass = tonumber(mass) + newTable.units[1].categoryStatic = 'Cargos' + newTable.units[1].canCargo = true + newTable.units[1].shape_name = 'ab-212_cargo' + end + + ----- search mist added objects for extra data if applicable + for index, data in pairs(mistAddedObjects) do + if mist.stringMatch(data.name, newTable.units[1].unitName) == true then + newTable.units[1].shape_name = data.shape_name -- for statics + newTable.units[1].livery_id = data.livery_id + newTable.units[1].airdromeId = data.airdromeId + newTable.units[1].mass = data.mass + newTable.units[1].canCargo = data.canCargo + newTable.units[1].categoryStatic = data.categoryStatic + newTable.units[1].type = data.type + mistAddedObjects[index] = nil + break + end + end + end + end + --mist.debug.writeData(mist.utils.serialize,{'msg', newTable}, timer.getAbsTime() ..'Group.lua') + newTable.timeAdded = timer.getAbsTime() -- only on the dynGroupsAdded table. For other reference, see start time + --mist.debug.dumpDBs() + --end + --dbLog:info('endDbUpdate') + return newTable + end + + --[[DB update code... FRACK. I need to refactor some of it. + + The problem is that the DBs need to account better for shared object names. Needs to write over some data and outright remove other. + + If groupName is used then entire group needs to be rewritten + what to do with old groups units DB entries?. Names cant be assumed to be the same. + + + -- new spawn event check. + -- event handler filters everything into groups: tempSpawnedGroups + -- this function then checks DBs to see if data has changed + ]] + local function checkSpawnedEventsNew() + if tempSpawnGroupsCounter > 0 then + --[[local updatesPerRun = math.ceil(#tempSpawnedGroupsCounter/20) + if updatesPerRun < 5 then + updatesPerRun = 5 + end]] + + --dbLog:info('iterate') + for name, gData in pairs(tempSpawnedGroups) do + --env.info(name) + local updated = false + local stillExists = false + if not gData.checked then + tempSpawnedGroups[name].checked = true -- so if there was an error it will get cleared. + local _g = gData.gp or Group.getByName(name) + if mist.DBs.groupsByName[name] then + -- first check group level properties, groupId, countryId, coalition + -- dbLog:info('Found in DBs, check if updated') + local dbTable = mist.DBs.groupsByName[name] + -- dbLog:info(dbTable) + if gData.type ~= 'static' then + -- dbLog:info('Not static') + + if _g and _g:isExist() == true then + stillExists = true + local _u = _g:getUnit(1) + + if _u and (dbTable.groupId ~= tonumber(_g:getID()) or _u:getCountry() ~= dbTable.countryId or _u:getCoalition() ~= dbTable.coaltionId) then + --dbLog:info('Group Data mismatch') + updated = true + else + -- dbLog:info('No Mismatch') + end + else + dbLog:warn('$1 : Group was not accessible', name) + end + end + end + --dbLog:info('Updated: $1', updated) + if updated == false and gData.type ~= 'static' then -- time to check units + --dbLog:info('No Group Mismatch, Check Units') + if _g and _g:isExist() == true then + stillExists = true + for index, uObject in pairs(_g:getUnits()) do + --dbLog:info(index) + if mist.DBs.unitsByName[uObject:getName()] then + --dbLog:info('UnitByName table exists') + local uTable = mist.DBs.unitsByName[uObject:getName()] + if tonumber(uObject:getID()) ~= uTable.unitId or uObject:getTypeName() ~= uTable.type then + --dbLog:info('Unit Data mismatch') + updated = true + break + end + end + end + end + else + stillExists = true + end + + if stillExists == true and (updated == true or not mist.DBs.groupsByName[name]) then + --dbLog:info('Get Table') + writeGroups[#writeGroups+1] = {data = dbUpdate(name, gData.type), isUpdated = updated} + + end + -- Work done, so remove + end + tempSpawnedGroups[name] = nil + tempSpawnGroupsCounter = tempSpawnGroupsCounter - 1 + end + end + end + + local function updateDBTables() + local i = #writeGroups + + local savesPerRun = math.ceil(i/10) + if savesPerRun < 5 then + savesPerRun = 5 + end + if i > 0 then + --dbLog:info('updateDBTables') + local ldeepCopy = mist.utils.deepCopy + for x = 1, i do + --dbLog:info(writeGroups[x]) + local newTable = writeGroups[x].data + local updated = writeGroups[x].isUpdated + local mistCategory + if type(newTable.category) == 'string' then + mistCategory = string.lower(newTable.category) + end + + if string.upper(newTable.category) == 'GROUND_UNIT' then + mistCategory = 'vehicle' + newTable.category = mistCategory + elseif string.upper(newTable.category) == 'AIRPLANE' then + mistCategory = 'plane' + newTable.category = mistCategory + elseif string.upper(newTable.category) == 'HELICOPTER' then + mistCategory = 'helicopter' + newTable.category = mistCategory + elseif string.upper(newTable.category) == 'SHIP' then + mistCategory = 'ship' + newTable.category = mistCategory + end + --dbLog:info('Update unitsBy') + for newId, newUnitData in pairs(newTable.units) do + --dbLog:info(newId) + newUnitData.category = mistCategory + if newUnitData.unitId then + --dbLog:info('byId') + mist.DBs.unitsById[tonumber(newUnitData.unitId)] = ldeepCopy(newUnitData) + end + --dbLog:info(updated) + if mist.DBs.unitsByName[newUnitData.unitName] and updated == true then--if unit existed before and something was updated, write over the entry for a given unit name just in case. + --dbLog:info('Updating Unit Tables') + for i = 1, #mist.DBs.unitsByCat[mistCategory] do + if mist.DBs.unitsByCat[mistCategory][i].unitName == newUnitData.unitName then + --dbLog:info('Entry Found, Rewriting for unitsByCat') + mist.DBs.unitsByCat[mistCategory][i] = ldeepCopy(newUnitData) + break + end + end + for i = 1, #mist.DBs.unitsByNum do + if mist.DBs.unitsByNum[i].unitName == newUnitData.unitName then + --dbLog:info('Entry Found, Rewriting for unitsByNum') + mist.DBs.unitsByNum[i] = ldeepCopy(newUnitData) + break + end + end + + else + --dbLog:info('Unitname not in use, add as normal') + mist.DBs.unitsByCat[mistCategory][#mist.DBs.unitsByCat[mistCategory] + 1] = ldeepCopy(newUnitData) + mist.DBs.unitsByNum[#mist.DBs.unitsByNum + 1] = ldeepCopy(newUnitData) + end + mist.DBs.unitsByName[newUnitData.unitName] = ldeepCopy(newUnitData) + + + end + -- this is a really annoying DB to populate. Gotta create new tables in case its missing + --dbLog:info('write mist.DBs.units') + if not mist.DBs.units[newTable.coalition] then + mist.DBs.units[newTable.coalition] = {} + end + + if not mist.DBs.units[newTable.coalition][newTable.country] then + mist.DBs.units[newTable.coalition][(newTable.country)] = {} + mist.DBs.units[newTable.coalition][(newTable.country)].countryId = newTable.countryId + end + if not mist.DBs.units[newTable.coalition][newTable.country][mistCategory] then + mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] = {} + end + + if updated == true then + --dbLog:info('Updating DBsUnits') + for i = 1, #mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] do + if mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][i].groupName == newTable.groupName then + --dbLog:info('Entry Found, Rewriting') + mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][i] = ldeepCopy(newTable) + break + end + end + else + mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][#mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] + 1] = ldeepCopy(newTable) + end + + + if newTable.groupId then + mist.DBs.groupsById[newTable.groupId] = ldeepCopy(newTable) + end + + mist.DBs.groupsByName[newTable.name] = ldeepCopy(newTable) + mist.DBs.dynGroupsAdded[#mist.DBs.dynGroupsAdded + 1] = ldeepCopy(newTable) + + writeGroups[x] = nil + if x%savesPerRun == 0 then + coroutine.yield() + end + end + if timer.getTime() > lastUpdateTime then + lastUpdateTime = timer.getTime() + end + --dbLog:info('endUpdateTables') + end + end + + local function groupSpawned(event) + -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + if event.id == world.event.S_EVENT_BIRTH and timer.getTime0() < timer.getAbsTime() then + --dbLog:info('unitSpawnEvent') + + --table.insert(tempSpawnedUnits,(event.initiator)) + ------- + -- New functionality below. + ------- + if Object.getCategory(event.initiator) == 1 and not Unit.getPlayerName(event.initiator) then -- simple player check, will need to later check to see if unit was spawned with a player in a flight + --dbLog:info('Object is a Unit') + if Unit.getGroup(event.initiator) then + --dbLog:info(Unit.getGroup(event.initiator):getName()) + local g = Unit.getGroup(event.initiator) + if not tempSpawnedGroups[g:getName()] then + --dbLog:info('added') + tempSpawnedGroups[g:getName()] = {type = 'group', gp = g} + tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 + end + else + log:error('Group not accessible by unit in event handler. This is a DCS bug') + end + elseif Object.getCategory(event.initiator) == 3 or Object.getCategory(event.initiator) == 6 then + --dbLog:info('Object is Static') + tempSpawnedGroups[StaticObject.getName(event.initiator)] = {type = 'static'} + tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 + end + + + end + end + + local function doScheduledFunctions() + local i = 1 + while i <= #scheduledTasks do + if not scheduledTasks[i].rep then -- not a repeated process + if scheduledTasks[i].t <= timer.getTime() then + local task = scheduledTasks[i] -- local reference + table.remove(scheduledTasks, i) + local err, errmsg = pcall(task.f, unpack(task.vars, 1, table.maxn(task.vars))) + if not err then + log:error('Error in scheduled function: $1', errmsg) + end + --task.f(unpack(task.vars, 1, table.maxn(task.vars))) -- do the task, do not increment i + else + i = i + 1 + end + else + if scheduledTasks[i].st and scheduledTasks[i].st <= timer.getTime() then --if a stoptime was specified, and the stop time exceeded + table.remove(scheduledTasks, i) -- stop time exceeded, do not execute, do not increment i + elseif scheduledTasks[i].t <= timer.getTime() then + local task = scheduledTasks[i] -- local reference + task.t = timer.getTime() + task.rep --schedule next run + local err, errmsg = pcall(task.f, unpack(task.vars, 1, table.maxn(task.vars))) + if not err then + log:error('Error in scheduled function: $1' .. errmsg) + end + --scheduledTasks[i].f(unpack(scheduledTasks[i].vars, 1, table.maxn(scheduledTasks[i].vars))) -- do the task + i = i + 1 + else + i = i + 1 + end + end + end + end + + -- Event handler to start creating the dead_objects table + local function addDeadObject(event) + if event.id == world.event.S_EVENT_DEAD or event.id == world.event.S_EVENT_CRASH then + if event.initiator and event.initiator.id_ and event.initiator.id_ > 0 then + + local id = event.initiator.id_ -- initial ID, could change if there is a duplicate id_ already dead. + local val = {object = event.initiator} -- the new entry in mist.DBs.deadObjects. + + local original_id = id --only for duplicate runtime IDs. + local id_ind = 1 + while mist.DBs.deadObjects[id] do + --log:info('duplicate runtime id of previously dead object id: $1', id) + id = tostring(original_id) .. ' #' .. tostring(id_ind) + id_ind = id_ind + 1 + end + + if mist.DBs.aliveUnits and mist.DBs.aliveUnits[val.object.id_] then + --log:info('object found in alive_units') + val.objectData = mist.utils.deepCopy(mist.DBs.aliveUnits[val.object.id_]) + local pos = Object.getPosition(val.object) + if pos then + val.objectPos = pos.p + end + val.objectType = mist.DBs.aliveUnits[val.object.id_].category + --[[if mist.DBs.activeHumans[Unit.getName(val.object)] then + --trigger.action.outText('remove via death: ' .. Unit.getName(val.object),20) + mist.DBs.activeHumans[Unit.getName(val.object)] = nil + end]] + elseif mist.DBs.removedAliveUnits and mist.DBs.removedAliveUnits[val.object.id_] then -- it didn't exist in alive_units, check old_alive_units + --log:info('object found in old_alive_units') + val.objectData = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) + local pos = Object.getPosition(val.object) + if pos then + val.objectPos = pos.p + end + val.objectType = mist.DBs.removedAliveUnits[val.object.id_].category + + else --attempt to determine if static object... + --log:info('object not found in alive units or old alive units') + local pos = Object.getPosition(val.object) + if pos then + local static_found = false + for ind, static in pairs(mist.DBs.unitsByCat.static) do + if ((pos.p.x - static.point.x)^2 + (pos.p.z - static.point.y)^2)^0.5 < 0.1 then --really, it should be zero... + --log:info('correlated dead static object to position') + val.objectData = static + val.objectPos = pos.p + val.objectType = 'static' + static_found = true + break + end + end + if not static_found then + val.objectPos = pos.p + val.objectType = 'building' + end + else + val.objectType = 'unknown' + end + end + mist.DBs.deadObjects[id] = val + end + end + end + + --[[ + local function addClientsToActive(event) + if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT or event.id == world.event.S_EVENT_BIRTH then + log:info(event) + if Unit.getPlayerName(event.initiator) then + log:info(Unit.getPlayerName(event.initiator)) + local newU = mist.utils.deepCopy(mist.DBs.unitsByName[Unit.getName(event.initiator)]) + newU.playerName = Unit.getPlayerName(event.initiator) + mist.DBs.activeHumans[Unit.getName(event.initiator)] = newU + --trigger.action.outText('added: ' .. Unit.getName(event.initiator), 20) + end + elseif event.id == world.event.S_EVENT_PLAYER_LEAVE_UNIT and event.initiator then + if mist.DBs.activeHumans[Unit.getName(event.initiator)] then + mist.DBs.activeHumans[Unit.getName(event.initiator)] = nil + -- trigger.action.outText('removed via control: ' .. Unit.getName(event.initiator), 20) + end + end + end + + mist.addEventHandler(addClientsToActive) + ]] + local function verifyDB() + --log:warn('verfy Run') + for coaName, coaId in pairs(coalition.side) do + --env.info(coaName) + local gps = coalition.getGroups(coaId) + for i = 1, #gps do + if gps[i] and Group.getSize(gps[i]) > 0 then + local gName = Group.getName(gps[i]) + if not mist.DBs.groupsByName[gName] then + --env.info(Unit.getID(gUnits[j]) .. ' Not found in DB yet') + if not tempSpawnedGroups[gName] then + --dbLog:info('added') + tempSpawnedGroups[gName] = {type = 'group', gp = gps[i]} + tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 + end + end + end + end + local st = coalition.getStaticObjects(coaId) + for i = 1, #st do + local s = st[i] + if StaticObject.isExist(s) then + if not mist.DBs.unitsByName[s:getName()] then + --env.info(StaticObject.getID(s) .. ' Not found in DB yet') + tempSpawnedGroups[s:getName()] = {type = 'static'} + tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 + end + end + end + + end + + end + + --- init function. + -- creates logger, adds default event handler + -- and calls main the first time. + -- @function mist.init + function mist.init() + + -- create logger + mist.log = mist.Logger:new("MIST", mistSettings.logLevel) + dbLog = mist.Logger:new('MISTDB', 'warn') + + log = mist.log -- log shorthand + -- set warning log level, showing only + -- warnings and errors + --log:setLevel("warning") + + log:info("initializing databases") + initDBs() + + -- add event handler for group spawns + mist.addEventHandler(groupSpawned) + mist.addEventHandler(addDeadObject) + + log:warn('Init time: $1', timer.getTime()) + + -- call main the first time therafter it reschedules itself. + mist.main() + --log:msg('MIST version $1.$2.$3 loaded', mist.majorVersion, mist.minorVersion, mist.build) + + mist.scheduleFunction(verifyDB, {}, timer.getTime() + 1) + return + end + + --- The main function. + -- Run 100 times per second. + -- You shouldn't call this function. + function mist.main() + timer.scheduleFunction(mist.main, {}, timer.getTime() + 0.01) --reschedule first in case of Lua error + + updateTenthSecond = updateTenthSecond + 1 + if updateTenthSecond == 20 then + updateTenthSecond = 0 + + checkSpawnedEventsNew() + + if not coroutines.updateDBTables then + coroutines.updateDBTables = coroutine.create(updateDBTables) + end + + coroutine.resume(coroutines.updateDBTables) + + if coroutine.status(coroutines.updateDBTables) == 'dead' then + coroutines.updateDBTables = nil + end + end + + --updating alive units + updateAliveUnitsCounter = updateAliveUnitsCounter + 1 + if updateAliveUnitsCounter == 5 then + updateAliveUnitsCounter = 0 + + if not coroutines.updateAliveUnits then + coroutines.updateAliveUnits = coroutine.create(updateAliveUnits) + end + + coroutine.resume(coroutines.updateAliveUnits) + + if coroutine.status(coroutines.updateAliveUnits) == 'dead' then + coroutines.updateAliveUnits = nil + end + end + + doScheduledFunctions() + end -- end of mist.main + + --- Returns next unit id. + -- @treturn number next unit id. + function mist.getNextUnitId() + mist.nextUnitId = mist.nextUnitId + 1 + if mist.nextUnitId > 6900 and mist.nextUnitId < 30000 then + mist.nextUnitId = 30000 + end + return mist.utils.deepCopy(mist.nextUnitId) + end + + --- Returns next group id. + -- @treturn number next group id. + function mist.getNextGroupId() + mist.nextGroupId = mist.nextGroupId + 1 + if mist.nextGroupId > 6900 and mist.nextGroupId < 30000 then + mist.nextGroupId = 30000 + end + return mist.utils.deepCopy(mist.nextGroupId) + end + + --- Returns timestamp of last database update. + -- @treturn timestamp of last database update + function mist.getLastDBUpdateTime() + return lastUpdateTime + end + + --- Spawns a static object to the game world. + -- @todo write good docs + -- @tparam table staticObj table containing data needed for the object creation + function mist.dynAddStatic(newObj) + log:info(newObj) + if newObj.units and newObj.units[1] then -- if its mist format + for entry, val in pairs(newObj.units[1]) do + if newObj[entry] and newObj[entry] ~= val or not newObj[entry] then + newObj[entry] = val + end + end + end + --log:info(newObj) + + local cntry = newObj.country + if newObj.countryId then + cntry = newObj.countryId + end + + local newCountry = '' + + for countryId, countryName in pairs(country.name) do + if type(cntry) == 'string' then + cntry = cntry:gsub("%s+", "_") + if tostring(countryName) == string.upper(cntry) then + newCountry = countryName + end + elseif type(cntry) == 'number' then + if countryId == cntry then + newCountry = countryName + end + end + end + + if newCountry == '' then + log:error("Country not found: $1", cntry) + return false + end + + if newObj.clone or not newObj.groupId then + mistGpId = mistGpId + 1 + newObj.groupId = mistGpId + end + + if newObj.clone or not newObj.unitId then + mistUnitId = mistUnitId + 1 + newObj.unitId = mistUnitId + end + + + newObj.name = newObj.name or newObj.unitName + + if newObj.clone or not newObj.name then + mistDynAddIndex[' static '] = mistDynAddIndex[' static '] + 1 + newObj.name = (newCountry .. ' static ' .. mistDynAddIndex[' static ']) + end + + if not newObj.dead then + newObj.dead = false + end + + if not newObj.heading then + newObj.heading = math.random(360) + end + + if newObj.categoryStatic then + newObj.category = newObj.categoryStatic + end + if newObj.mass then + newObj.category = 'Cargos' + end + + if newObj.shapeName then + newObj.shape_name = newObj.shapeName + end + + if not newObj.shape_name then + log:info('shape_name not present') + if mist.DBs.const.shapeNames[newObj.type] then + newObj.shape_name = mist.DBs.const.shapeNames[newObj.type] + end + end + + mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newObj) + if newObj.x and newObj.y and newObj.type and type(newObj.x) == 'number' and type(newObj.y) == 'number' and type(newObj.type) == 'string' then + log:info(newObj) + coalition.addStaticObject(country.id[newCountry], newObj) + + return newObj + end + log:error("Failed to add static object due to missing or incorrect value. X: $1, Y: $2, Type: $3", newObj.x, newObj.y, newObj.type) + return false + end + + --- Spawns a dynamic group into the game world. + -- Same as coalition.add function in SSE. checks the passed data to see if its valid. + -- Will generate groupId, groupName, unitId, and unitName if needed + -- @tparam table newGroup table containting values needed for spawning a group. + function mist.dynAdd(newGroup) + --log:warn(newGroup) + --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua') + local cntry = newGroup.country + if newGroup.countryId then + cntry = newGroup.countryId + end + + local groupType = newGroup.category + local newCountry = '' + -- validate data + for countryId, countryName in pairs(country.name) do + if type(cntry) == 'string' then + cntry = cntry:gsub("%s+", "_") + if tostring(countryName) == string.upper(cntry) then + newCountry = countryName + end + elseif type(cntry) == 'number' then + if countryId == cntry then + newCountry = countryName + end + end + end + + if newCountry == '' then + log:error("Country not found: $1", cntry) + return false + end + + local newCat = '' + for catName, catId in pairs(Unit.Category) do + if type(groupType) == 'string' then + if tostring(catName) == string.upper(groupType) then + newCat = catName + end + elseif type(groupType) == 'number' then + if catId == groupType then + newCat = catName + end + end + + if catName == 'GROUND_UNIT' and (string.upper(groupType) == 'VEHICLE' or string.upper(groupType) == 'GROUND') then + newCat = 'GROUND_UNIT' + elseif catName == 'AIRPLANE' and string.upper(groupType) == 'PLANE' then + newCat = 'AIRPLANE' + end + end + local typeName + if newCat == 'GROUND_UNIT' then + typeName = ' gnd ' + elseif newCat == 'AIRPLANE' then + typeName = ' air ' + elseif newCat == 'HELICOPTER' then + typeName = ' hel ' + elseif newCat == 'SHIP' then + typeName = ' shp ' + elseif newCat == 'BUILDING' then + typeName = ' bld ' + end + if newGroup.clone or not newGroup.groupId then + mistDynAddIndex[typeName] = mistDynAddIndex[typeName] + 1 + mistGpId = mistGpId + 1 + newGroup.groupId = mistGpId + end + if newGroup.groupName or newGroup.name then + if newGroup.groupName then + newGroup.name = newGroup.groupName + elseif newGroup.name then + newGroup.name = newGroup.name + end + end + + if newGroup.clone and mist.DBs.groupsByName[newGroup.name] or not newGroup.name then + newGroup.name = tostring(newCountry .. tostring(typeName) .. mistDynAddIndex[typeName]) + end + + if not newGroup.hidden then + newGroup.hidden = false + end + + if not newGroup.visible then + newGroup.visible = false + end + + if (newGroup.start_time and type(newGroup.start_time) ~= 'number') or not newGroup.start_time then + if newGroup.startTime then + newGroup.start_time = mist.utils.round(newGroup.startTime) + else + newGroup.start_time = 0 + end + end + + + for unitIndex, unitData in pairs(newGroup.units) do + local originalName = newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name + if newGroup.clone or not unitData.unitId then + mistUnitId = mistUnitId + 1 + newGroup.units[unitIndex].unitId = mistUnitId + end + if newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name then + if newGroup.units[unitIndex].unitName then + newGroup.units[unitIndex].name = newGroup.units[unitIndex].unitName + elseif newGroup.units[unitIndex].name then + newGroup.units[unitIndex].name = newGroup.units[unitIndex].name + end + end + if newGroup.clone or not unitData.name then + newGroup.units[unitIndex].name = tostring(newGroup.name .. ' unit' .. unitIndex) + end + + if not unitData.skill then + newGroup.units[unitIndex].skill = 'Random' + end + + if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then + if newGroup.units[unitIndex].alt_type and newGroup.units[unitIndex].alt_type ~= 'BARO' or not newGroup.units[unitIndex].alt_type then + newGroup.units[unitIndex].alt_type = 'RADIO' + end + if not unitData.speed then + if newCat == 'AIRPLANE' then + newGroup.units[unitIndex].speed = 150 + elseif newCat == 'HELICOPTER' then + newGroup.units[unitIndex].speed = 60 + end + end + if not unitData.payload then + newGroup.units[unitIndex].payload = mist.getPayload(originalName) + end + if not unitData.alt then + if newCat == 'AIRPLANE' then + newGroup.units[unitIndex].alt = 2000 + newGroup.units[unitIndex].alt_type = 'RADIO' + newGroup.units[unitIndex].speed = 150 + elseif newCat == 'HELICOPTER' then + newGroup.units[unitIndex].alt = 500 + newGroup.units[unitIndex].alt_type = 'RADIO' + newGroup.units[unitIndex].speed = 60 + end + end + + elseif newCat == 'GROUND_UNIT' then + if nil == unitData.playerCanDrive then + unitData.playerCanDrive = true + end + + end + mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newGroup.units[unitIndex]) + end + mistAddedGroups[#mistAddedGroups + 1] = mist.utils.deepCopy(newGroup) + if newGroup.route then + if newGroup.route and not newGroup.route.points then + if newGroup.route[1] then + local copyRoute = mist.utils.deepCopy(newGroup.route) + newGroup.route = {} + newGroup.route.points = copyRoute + end + end + else -- if aircraft and no route assigned. make a quick and stupid route so AI doesnt RTB immediately + if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then + newGroup.route = {} + newGroup.route.points = {} + newGroup.route.points[1] = {} + end + end + newGroup.country = newCountry + + + --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') + --log:warn(newGroup) + -- sanitize table + newGroup.groupName = nil + newGroup.clone = nil + newGroup.category = nil + newGroup.country = nil + + newGroup.tasks = {} + + for unitIndex, unitData in pairs(newGroup.units) do + newGroup.units[unitIndex].unitName = nil + end + + coalition.addGroup(country.id[newCountry], Unit.Category[newCat], newGroup) + + return newGroup + + end + + --- Schedules a function. + -- Modified Slmod task scheduler, superior to timer.scheduleFunction + -- @tparam function f function to schedule + -- @tparam table vars array containing all parameters passed to the function + -- @tparam number t time in seconds from mission start to schedule the function to. + -- @tparam[opt] number rep time between repetitions of the function + -- @tparam[opt] number st time in seconds from mission start at which the function + -- should stop to be rescheduled. + -- @treturn number scheduled function id. + function mist.scheduleFunction(f, vars, t, rep, st) + --verify correct types + assert(type(f) == 'function', 'variable 1, expected function, got ' .. type(f)) + assert(type(vars) == 'table' or vars == nil, 'variable 2, expected table or nil, got ' .. type(f)) + assert(type(t) == 'number', 'variable 3, expected number, got ' .. type(t)) + assert(type(rep) == 'number' or rep == nil, 'variable 4, expected number or nil, got ' .. type(rep)) + assert(type(st) == 'number' or st == nil, 'variable 5, expected number or nil, got ' .. type(st)) + if not vars then + vars = {} + end + taskId = taskId + 1 + table.insert(scheduledTasks, {f = f, vars = vars, t = t, rep = rep, st = st, id = taskId}) + return taskId + end + + --- Removes a scheduled function. + -- @tparam number id function id + -- @treturn boolean true if function was successfully removed, false otherwise. + function mist.removeFunction(id) + local i = 1 + while i <= #scheduledTasks do + if scheduledTasks[i].id == id then + table.remove(scheduledTasks, i) + return true + else + i = i + 1 + end + end + return false + end + + --- Registers an event handler. + -- @tparam function f function handling event + -- @treturn number id of the event handler + function mist.addEventHandler(f) --id is optional! + local handler = {} + idNum = idNum + 1 + handler.id = idNum + handler.f = f + function handler:onEvent(event) + self.f(event) + end + world.addEventHandler(handler) + return handler.id + end + + --- Removes event handler with given id. + -- @tparam number id event handler id + -- @treturn boolean true on success, false otherwise + function mist.removeEventHandler(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 + +-- Begin common funcs +do + --- Returns MGRS coordinates as string. + -- @tparam string MGRS MGRS coordinates + -- @tparam number acc the accuracy of each easting/northing. + -- Can be: 0, 1, 2, 3, 4, or 5. + function mist.tostringMGRS(MGRS, acc) + if acc == 0 then + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph + else + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', mist.utils.round(MGRS.Easting/(10^(5-acc)), 0)) + .. ' ' .. string.format('%0' .. acc .. 'd', mist.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. + ]] + function mist.tostringLL(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 = mist.utils.round((oldLatMin - latMin)*60, acc) + + local oldLonMin = lonMin + lonMin = math.floor(lonMin) + local lonSec = mist.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 = mist.utils.round(latMin, acc) + lonMin = mist.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.]] + function mist.tostringBR(az, dist, alt, metric) + az = mist.utils.round(mist.utils.toDegree(az), 0) + + if metric then + dist = mist.utils.round(dist/1000, 0) + else + dist = mist.utils.round(mist.utils.metersToNM(dist), 0) + end + + local s = string.format('%03d', az) .. ' for ' .. dist + + if alt then + if metric then + s = s .. ' at ' .. mist.utils.round(alt, 0) + else + s = s .. ' at ' .. mist.utils.round(mist.utils.metersToFeet(alt), 0) + end + end + return s + end + + function mist.getNorthCorrection(gPoint) --gets the correction needed for true north + local point = mist.utils.deepCopy(gPoint) + 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 + + --- Returns skill of the given unit. + -- @tparam string unitName unit name + -- @return skill of the unit + function mist.getUnitSkill(unitName) + if mist.DBs.unitsByName[unitName] then + if Unit.getByName(unitName) then + local lunit = Unit.getByName(unitName) + local data = mist.DBs.unitsByName[unitName] + if data.unitName == unitName and data.type == lunit:getTypeName() and data.unitId == tonumber(lunit:getID()) and data.skill then + return data.skill + end + end + end + log:error("Unit not found in DB: $1", unitName) + return false + end + + --- Returns an array containing a group's units positions. + -- e.g. + -- { + -- [1] = {x = 299435.224, y = -1146632.6773}, + -- [2] = {x = 663324.6563, y = 322424.1112} + -- } + -- @tparam number|string groupIdent group id or name + -- @treturn table array containing positions of each group member + function mist.getGroupPoints(groupIdent) + -- search by groupId and allow groupId and groupName as inputs + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + if mist.DBs.MEgroupsByName[groupIdent] then + gpId = mist.DBs.MEgroupsByName[groupIdent].groupId + else + log:error("Group not found in mist.DBs.MEgroupsByName: $1", groupIdent) + end + end + + for coa_name, coa_data in pairs(env.mission.coalition) do + if 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 + if not point.point then + points[point_num] = { x = point.x, y = point.y } + else + points[point_num] = point.point --it's possible that the ME could move to the point = Vec2 notation. + end + 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 + + --- getUnitAttitude(unit) return values. + -- Yaw, AoA, ClimbAngle - relative to earth reference + -- DOES NOT TAKE INTO ACCOUNT WIND. + -- @table attitude + -- @tfield number Heading in radians, range of 0 to 2*pi, + -- relative to true north. + -- @tfield number Pitch in radians, range of -pi/2 to pi/2 + -- @tfield number Roll in radians, range of 0 to 2*pi, + -- right roll is positive direction. + -- @tfield number Yaw in radians, range of -pi to pi, + -- right yaw is positive direction. + -- @tfield number AoA in radians, range of -pi to pi, + -- rotation of aircraft to the right in comparison to + -- flight direction being positive. + -- @tfield number ClimbAngle in radians, range of -pi/2 to pi/2 + + --- Returns the attitude of a given unit. + -- Will work on any unit, even if not an aircraft. + -- @tparam Unit unit unit whose attitude is returned. + -- @treturn table @{attitude} + function mist.getAttitude(unit) + local unitpos = unit:getPosition() + if unitpos then + + local Heading = math.atan2(unitpos.x.z, unitpos.x.x) + + Heading = Heading + mist.getNorthCorrection(unitpos.p) + + if Heading < 0 then + Heading = Heading + 2*math.pi -- put heading in range of 0 to 2*pi + end + ---- heading complete.---- + + local Pitch = math.asin(unitpos.x.y) + ---- pitch complete.---- + + -- now get roll: + --maybe not the best way to do it, but it works. + + --first, make a vector that is perpendicular to y and unitpos.x with cross product + local cp = mist.vec.cp(unitpos.x, {x = 0, y = 1, z = 0}) + + --now, get dot product of of this cross product with unitpos.z + local dp = mist.vec.dp(cp, unitpos.z) + + --now get the magnitude of the roll (magnitude of the angle between two vectors is acos(vec1.vec2/|vec1||vec2|) + local Roll = math.acos(dp/(mist.vec.mag(cp)*mist.vec.mag(unitpos.z))) + + --now, have to get sign of roll. + -- by convention, making right roll positive + -- to get sign of roll, use the y component of unitpos.z. For right roll, y component is negative. + + if unitpos.z.y > 0 then -- left roll, flip the sign of the roll + Roll = -Roll + end + ---- roll complete. ---- + + --now, work on yaw, AoA, climb, and abs velocity + local Yaw + local AoA + local ClimbAngle + + -- get unit velocity + local unitvel = unit:getVelocity() + if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! + local AxialVel = {} --unit velocity transformed into aircraft axes directions + + --transform velocity components in direction of aircraft axes. + AxialVel.x = mist.vec.dp(unitpos.x, unitvel) + AxialVel.y = mist.vec.dp(unitpos.y, unitvel) + AxialVel.z = mist.vec.dp(unitpos.z, unitvel) + + --Yaw is the angle between unitpos.x and the x and z velocities + --define right yaw as positive + Yaw = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = 0, z = AxialVel.z})/mist.vec.mag({x = AxialVel.x, y = 0, z = AxialVel.z})) + + --now set correct direction: + if AxialVel.z > 0 then + Yaw = -Yaw + end + + -- AoA is angle between unitpos.x and the x and y velocities + AoA = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = AxialVel.y, z = 0})/mist.vec.mag({x = AxialVel.x, y = AxialVel.y, z = 0})) + + --now set correct direction: + if AxialVel.y > 0 then + AoA = -AoA + end + + ClimbAngle = math.asin(unitvel.y/mist.vec.mag(unitvel)) + end + return { Heading = Heading, Pitch = Pitch, Roll = Roll, Yaw = Yaw, AoA = AoA, ClimbAngle = ClimbAngle} + else + log:error("Couldn't get unit's position") + end + end + + --- Returns heading of given unit. + -- @tparam Unit unit unit whose heading is returned. + -- @param rawHeading + -- @treturn number heading of the unit, in range + -- of 0 to 2*pi. + function mist.getHeading(unit, rawHeading) + local unitpos = unit:getPosition() + if unitpos then + local Heading = math.atan2(unitpos.x.z, unitpos.x.x) + if not rawHeading then + Heading = Heading + mist.getNorthCorrection(unitpos.p) + end + if Heading < 0 then + Heading = Heading + 2*math.pi -- put heading in range of 0 to 2*pi + end + return Heading + end + end + + --- Returns given unit's pitch + -- @tparam Unit unit unit whose pitch is returned. + -- @treturn number pitch of given unit + function mist.getPitch(unit) + local unitpos = unit:getPosition() + if unitpos then + return math.asin(unitpos.x.y) + end + end + + --- Returns given unit's roll. + -- @tparam Unit unit unit whose roll is returned. + -- @treturn number roll of given unit + function mist.getRoll(unit) + local unitpos = unit:getPosition() + if unitpos then + -- now get roll: + --maybe not the best way to do it, but it works. + + --first, make a vector that is perpendicular to y and unitpos.x with cross product + local cp = mist.vec.cp(unitpos.x, {x = 0, y = 1, z = 0}) + + --now, get dot product of of this cross product with unitpos.z + local dp = mist.vec.dp(cp, unitpos.z) + + --now get the magnitude of the roll (magnitude of the angle between two vectors is acos(vec1.vec2/|vec1||vec2|) + local Roll = math.acos(dp/(mist.vec.mag(cp)*mist.vec.mag(unitpos.z))) + + --now, have to get sign of roll. + -- by convention, making right roll positive + -- to get sign of roll, use the y component of unitpos.z. For right roll, y component is negative. + + if unitpos.z.y > 0 then -- left roll, flip the sign of the roll + Roll = -Roll + end + return Roll + end + end + + --- Returns given unit's yaw. + -- @tparam Unit unit unit whose yaw is returned. + -- @treturn number yaw of given unit. + function mist.getYaw(unit) + local unitpos = unit:getPosition() + if unitpos then + -- get unit velocity + local unitvel = unit:getVelocity() + if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! + local AxialVel = {} --unit velocity transformed into aircraft axes directions + + --transform velocity components in direction of aircraft axes. + AxialVel.x = mist.vec.dp(unitpos.x, unitvel) + AxialVel.y = mist.vec.dp(unitpos.y, unitvel) + AxialVel.z = mist.vec.dp(unitpos.z, unitvel) + + --Yaw is the angle between unitpos.x and the x and z velocities + --define right yaw as positive + local Yaw = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = 0, z = AxialVel.z})/mist.vec.mag({x = AxialVel.x, y = 0, z = AxialVel.z})) + + --now set correct direction: + if AxialVel.z > 0 then + Yaw = -Yaw + end + return Yaw + end + end + end + + --- Returns given unit's angle of attack. + -- @tparam Unit unit unit to get AoA from. + -- @treturn number angle of attack of the given unit. + function mist.getAoA(unit) + local unitpos = unit:getPosition() + if unitpos then + local unitvel = unit:getVelocity() + if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! + local AxialVel = {} --unit velocity transformed into aircraft axes directions + + --transform velocity components in direction of aircraft axes. + AxialVel.x = mist.vec.dp(unitpos.x, unitvel) + AxialVel.y = mist.vec.dp(unitpos.y, unitvel) + AxialVel.z = mist.vec.dp(unitpos.z, unitvel) + + -- AoA is angle between unitpos.x and the x and y velocities + local AoA = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = AxialVel.y, z = 0})/mist.vec.mag({x = AxialVel.x, y = AxialVel.y, z = 0})) + + --now set correct direction: + if AxialVel.y > 0 then + AoA = -AoA + end + return AoA + end + end + end + + --- Returns given unit's climb angle. + -- @tparam Unit unit unit to get climb angle from. + -- @treturn number climb angle of given unit. + function mist.getClimbAngle(unit) + local unitpos = unit:getPosition() + if unitpos then + local unitvel = unit:getVelocity() + if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! + return math.asin(unitvel.y/mist.vec.mag(unitvel)) + end + end + end + + --[[-- + Unit name table. + Many Mist functions require tables of unit names, which are known + in Mist as UnitNameTables. These follow a special set of shortcuts + borrowed from Slmod. These shortcuts alleviate the problem of entering + huge lists of unit names by hand, and in many cases, they remove the + need to even know the names of the units in the first place! + + These are the unit table "short-cut" commands: + + Prefixes: + "[-u]" - subtract this unit if its in the table + "[g]" - add this group to the table + "[-g]" - subtract this group from the table + "[c]" - add this country's units + "[-c]" - subtract this country's units if any are in the table + + Stand-alone identifiers + "[all]" - add all units + "[-all]" - subtract all units (not very useful by itself) + "[blue]" - add all blue units + "[-blue]" - subtract all blue units + "[red]" - add all red coalition units + "[-red]" - subtract all red units + + Compound Identifiers: + "[c][helicopter]" - add all of this country's helicopters + "[-c][helicopter]" - subtract all of this country's helicopters + "[c][plane]" - add all of this country's planes + "[-c][plane]" - subtract all of this country's planes + "[c][ship]" - add all of this country's ships + "[-c][ship]" - subtract all of this country's ships + "[c][vehicle]" - add all of this country's vehicles + "[-c][vehicle]" - subtract all of this country's vehicles + + "[all][helicopter]" - add all helicopters + "[-all][helicopter]" - subtract all helicopters + "[all][plane]" - add all planes + "[-all][plane]" - subtract all planes + "[all][ship]" - add all ships + "[-all][ship]" - subtract all ships + "[all][vehicle]" - add all vehicles + "[-all][vehicle]" - subtract all vehicles + + "[blue][helicopter]" - add all blue coalition helicopters + "[-blue][helicopter]" - subtract all blue coalition helicopters + "[blue][plane]" - add all blue coalition planes + "[-blue][plane]" - subtract all blue coalition planes + "[blue][ship]" - add all blue coalition ships + "[-blue][ship]" - subtract all blue coalition ships + "[blue][vehicle]" - add all blue coalition vehicles + "[-blue][vehicle]" - subtract all blue coalition vehicles + + "[red][helicopter]" - add all red coalition helicopters + "[-red][helicopter]" - subtract all red coalition helicopters + "[red][plane]" - add all red coalition planes + "[-red][plane]" - subtract all red coalition planes + "[red][ship]" - add all red coalition ships + "[-red][ship]" - subtract all red coalition ships + "[red][vehicle]" - add all red coalition vehicles + "[-red][vehicle]" - subtract all red coalition vehicles + + Country names to be used in [c] and [-c] short-cuts: + Turkey + Norway + The Netherlands + Spain + 11 + UK + Denmark + USA + Georgia + Germany + Belgium + Canada + France + Israel + Ukraine + Russia + South Ossetia + Abkhazia + Italy + Australia + Austria + Belarus + Bulgaria + Czech Republic + China + Croatia + Finland + Greece + Hungary + India + Iran + Iraq + Japan + Kazakhstan + North Korea + Pakistan + Poland + Romania + Saudi Arabia + Serbia, Slovakia + South Korea + Sweden + Switzerland + Syria + USAF Aggressors + + Do NOT use a '[u]' notation for single units. Single units are referenced + the same way as before: Simply input their names as strings. + + These unit tables are evaluated in order, and you cannot subtract a unit + from a table before it is added. For example: + + {'[blue]', '[-c]Georgia'} + + will evaluate to all of blue coalition except those units owned by the + country named "Georgia"; however: + + {'[-c]Georgia', '[blue]'} + + will evaluate to all of the units in blue coalition, because the addition + of all units owned by blue coalition occurred AFTER the subtraction of all + units owned by Georgia (which actually subtracted nothing at all, since + there were no units in the table when the subtraction occurred). + + More examples: + + {'[blue][plane]', '[-c]Georgia', '[-g]Hawg 1'} + + Evaluates to all blue planes, except those blue units owned by the country + named "Georgia" and the units in the group named "Hawg1". + + + {'[g]arty1', '[g]arty2', '[-u]arty1_AD', '[-u]arty2_AD', 'Shark 11' } + + Evaluates to the unit named "Shark 11", plus all the units in groups named + "arty1" and "arty2" except those that are named "arty1\_AD" and "arty2\_AD". + + @table UnitNameTable + ]] + + --- Returns a table containing unit names. + -- @tparam table tbl sequential strings + -- @treturn table @{UnitNameTable} + function mist.makeUnitTable(tbl, exclude) + --Assumption: will be passed a table of strings, sequential + --log:info(tbl) + + + local excludeType = {} + if exclude then + if type(exclude) == 'table' then + for x, y in pairs(exclude) do + excludeType[x] = true + excludeType[y] = true + end + else + excludeType[exclude] = true + end + + end + + + local units_by_name = {} + + local l_munits = mist.DBs.units --local reference for faster execution + for i = 1, #tbl do + local unit = tbl[i] + if unit:sub(1,4) == '[-u]' then --subtract a unit + if units_by_name[unit:sub(5)] then -- 5 to end + units_by_name[unit:sub(5)] = nil --remove + end + elseif unit:sub(1,3) == '[g]' then -- add a group + for coa, coa_tbl in pairs(l_munits) do + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' and group_tbl.groupName == unit:sub(4) then + -- index 4 to end + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + elseif unit:sub(1,4) == '[-g]' then -- subtract a group + for coa, coa_tbl in pairs(l_munits) do + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' and group_tbl.groupName == unit:sub(5) then + -- index 5 to end + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + elseif unit:sub(1,3) == '[c]' then -- add a country + local category = '' + local country_start = 4 + if unit:sub(4,15) == '[helicopter]' then + category = 'helicopter' + country_start = 16 + elseif unit:sub(4,10) == '[plane]' then + category = 'plane' + country_start = 11 + elseif unit:sub(4,9) == '[ship]' then + category = 'ship' + country_start = 10 + elseif unit:sub(4,12) == '[vehicle]' then + category = 'vehicle' + country_start = 13 + elseif unit:sub(4, 11) == '[static]' then + category = 'static' + country_start = 12 + end + for coa, coa_tbl in pairs(l_munits) do + for country, country_table in pairs(coa_tbl) do + if country == string.lower(unit:sub(country_start)) then -- match + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + end + elseif unit:sub(1,4) == '[-c]' then -- subtract a country + local category = '' + local country_start = 5 + if unit:sub(5,16) == '[helicopter]' then + category = 'helicopter' + country_start = 17 + elseif unit:sub(5,11) == '[plane]' then + category = 'plane' + country_start = 12 + elseif unit:sub(5,10) == '[ship]' then + category = 'ship' + country_start = 11 + elseif unit:sub(5,13) == '[vehicle]' then + category = 'vehicle' + country_start = 14 + elseif unit:sub(5, 12) == '[static]' then + category = 'static' + country_start = 13 + end + for coa, coa_tbl in pairs(l_munits) do + for country, country_table in pairs(coa_tbl) do + if country == string.lower(unit:sub(country_start)) then -- match + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + end + elseif unit:sub(1,6) == '[blue]' then -- add blue coalition + local category = '' + if unit:sub(7) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(7) == '[plane]' then + category = 'plane' + elseif unit:sub(7) == '[ship]' then + category = 'ship' + elseif unit:sub(7) == '[vehicle]' then + category = 'vehicle' + elseif unit:sub(7) == '[static]' then + category = 'static' + end + for coa, coa_tbl in pairs(l_munits) do + if coa == 'blue' then + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + end + elseif unit:sub(1,7) == '[-blue]' then -- subtract blue coalition + local category = '' + if unit:sub(8) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(8) == '[plane]' then + category = 'plane' + elseif unit:sub(8) == '[ship]' then + category = 'ship' + elseif unit:sub(8) == '[vehicle]' then + category = 'vehicle' + elseif unit:sub(8) == '[static]' then + category = 'static' + end + for coa, coa_tbl in pairs(l_munits) do + if coa == 'blue' then + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + end + elseif unit:sub(1,5) == '[red]' then -- add red coalition + local category = '' + if unit:sub(6) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(6) == '[plane]' then + category = 'plane' + elseif unit:sub(6) == '[ship]' then + category = 'ship' + elseif unit:sub(6) == '[vehicle]' then + category = 'vehicle' + elseif unit:sub(6) == '[static]' then + category = 'static' + end + for coa, coa_tbl in pairs(l_munits) do + if coa == 'red' then + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + end + elseif unit:sub(1,6) == '[-red]' then -- subtract red coalition + local category = '' + if unit:sub(7) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(7) == '[plane]' then + category = 'plane' + elseif unit:sub(7) == '[ship]' then + category = 'ship' + elseif unit:sub(7) == '[vehicle]' then + category = 'vehicle' + elseif unit:sub(7) == '[static]' then + category = 'static' + end + for coa, coa_tbl in pairs(l_munits) do + if coa == 'red' then + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + end + elseif unit:sub(1,5) == '[all]' then -- add all of a certain category (or all categories) + local category = '' + if unit:sub(6) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(6) == '[plane]' then + category = 'plane' + elseif unit:sub(6) == '[ship]' then + category = 'ship' + elseif unit:sub(6) == '[vehicle]' then + category = 'vehicle' + elseif unit:sub(6) == '[static]' then + category = 'static' + end + for coa, coa_tbl in pairs(l_munits) do + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + elseif unit:sub(1,6) == '[-all]' then -- subtract all of a certain category (or all categories) + local category = '' + if unit:sub(7) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(7) == '[plane]' then + category = 'plane' + elseif unit:sub(7) == '[ship]' then + category = 'ship' + elseif unit:sub(7) == '[vehicle]' then + category = 'vehicle' + elseif unit:sub(7) == '[static]' then + category = 'static' + end + for coa, coa_tbl in pairs(l_munits) do + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + else -- just a regular unit + units_by_name[unit] = true --add + end + end + + local units_tbl = {} -- indexed sequentially + for unit_name, val in pairs(units_by_name) do + if val then + units_tbl[#units_tbl + 1] = unit_name -- add all the units to the table + end + end + + + units_tbl.processed = timer.getTime() --add the processed flag + return units_tbl +end + +function mist.getDeadMapObjsInZones(zone_names) + -- zone_names: table of zone names + -- returns: table of dead map objects (indexed numerically) + local map_objs = {} + local zones = {} + for i = 1, #zone_names do + if mist.DBs.zonesByName[zone_names[i]] then + zones[#zones + 1] = mist.DBs.zonesByName[zone_names[i]] + end + end + for obj_id, obj in pairs(mist.DBs.deadObjects) do + if obj.objectType and obj.objectType == 'building' then --dead map object + for i = 1, #zones do + if ((zones[i].point.x - obj.objectPos.x)^2 + (zones[i].point.z - obj.objectPos.z)^2)^0.5 <= zones[i].radius then + map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) + end + end + end + end + return map_objs +end + +function mist.getDeadMapObjsInPolygonZone(zone) + -- zone_names: table of zone names + -- returns: table of dead map objects (indexed numerically) + local map_objs = {} + for obj_id, obj in pairs(mist.DBs.deadObjects) do + if obj.objectType and obj.objectType == 'building' then --dead map object + if mist.pointInPolygon(obj.objectPos, zone) then + map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) + end + end + end + return map_objs +end + +function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. Code from http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm + --[[local type_tbl = { + point = {'table'}, + poly = {'table'}, + maxalt = {'number', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.pointInPolygon', type_tbl, {point, poly, maxalt}) + assert(err, errmsg) + ]] + point = mist.utils.makeVec3(point) + local px = point.x + local pz = point.z + local cn = 0 + local newpoly = mist.utils.deepCopy(poly) + + if not maxalt or (point.y <= maxalt) then + local polysize = #newpoly + newpoly[#newpoly + 1] = newpoly[1] + + newpoly[1] = mist.utils.makeVec3(newpoly[1]) + + for k = 1, polysize do + newpoly[k+1] = mist.utils.makeVec3(newpoly[k+1]) + if ((newpoly[k].z <= pz) and (newpoly[k+1].z > pz)) or ((newpoly[k].z > pz) and (newpoly[k+1].z <= pz)) then + local vt = (pz - newpoly[k].z) / (newpoly[k+1].z - newpoly[k].z) + if (px < newpoly[k].x + vt*(newpoly[k+1].x - newpoly[k].x)) then + cn = cn + 1 + end + end + end + + return cn%2 == 1 + else + return false + end +end + +function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) + local units = {} + + for i = 1, #unit_names do + units[#units + 1] = Unit.getByName(unit_names[i]) or StaticObject.getByName(unit_names[i]) + end + + local inZoneUnits = {} + for i =1, #units do + local lUnit = units[i] + local lCat = lUnit:getCategory() + if ((lCat == 14 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then + inZoneUnits[#inZoneUnits + 1] = lUnit + end + end + + return inZoneUnits +end + +function mist.getUnitsInZones(unit_names, zone_names, zone_type) + zone_type = zone_type or 'cylinder' + if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then + zone_type = 'cylinder' + end + if zone_type == 's' or zone_type == 'spherical' or zone_type == 'S' then + zone_type = 'sphere' + end + + assert(zone_type == 'cylinder' or zone_type == 'sphere', 'invalid zone_type: ' .. tostring(zone_type)) + + local units = {} + local zones = {} + + if zone_names and type(zone_names) == 'string' then + zone_names = {zoneNames} + end + for k = 1, #unit_names do + + local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) + if unit then + units[#units + 1] = unit + end + end + + + for k = 1, #zone_names do + local zone = mist.DBs.zonesByName[zone_names[k]] + if zone then + zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z, verts = zone.vertices} + end + end + + local in_zone_units = {} + + for units_ind = 1, #units do + local lUnit = units[units_ind] + local unit_pos = lUnit:getPosition().p + local lCat = lUnit:getCategory() + for zones_ind = 1, #zones do + if zone_type == 'sphere' then --add land height value for sphere zone type + local alt = land.getHeight({x = zones[zones_ind].x, y = zones[zones_ind].z}) + if alt then + zones[zones_ind].y = alt + end + end + + if unit_pos and ((lCat == 1 and lUnit:isActive() == true) or lCat ~= 1) then -- it is a unit and is active or it is not a unit + if zones[zones_ind].verts then + if mist.pointInPolygon(unit_pos, zones[zones_ind].verts) then + in_zone_units[#in_zone_units + 1] = lUnit + end + + else + if zone_type == 'cylinder' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then + in_zone_units[#in_zone_units + 1] = lUnit + break + elseif zone_type == 'sphere' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.y - zones[zones_ind].y)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then + in_zone_units[#in_zone_units + 1] = lUnit + break + end + end + end + end + end + return in_zone_units +end + +function mist.getUnitsInMovingZones(unit_names, zone_unit_names, radius, zone_type) + + zone_type = zone_type or 'cylinder' + if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then + zone_type = 'cylinder' + end + if zone_type == 's' or zone_type == 'spherical' or zone_type == 'S' then + zone_type = 'sphere' + end + + assert(zone_type == 'cylinder' or zone_type == 'sphere', 'invalid zone_type: ' .. tostring(zone_type)) + + local units = {} + local zone_units = {} + + for k = 1, #unit_names do + local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) + if unit then + units[#units + 1] = unit + end + end + + for k = 1, #zone_unit_names do + local unit = Unit.getByName(zone_unit_names[k]) or StaticObject.getByName(zone_unit_names[k]) + if unit then + zone_units[#zone_units + 1] = unit + end + end + + local in_zone_units = {} + + for units_ind = 1, #units do + local lUnit = units[units_ind] + local lCat = lUnit:getCategory() + local unit_pos = lUnit:getPosition().p + for zone_units_ind = 1, #zone_units do + + local zone_unit_pos = zone_units[zone_units_ind]:getPosition().p + if unit_pos and zone_unit_pos and ((lCat == 1 and lUnit:isActive()) or lCat ~= 1) then + if zone_type == 'cylinder' and (((unit_pos.x - zone_unit_pos.x)^2 + (unit_pos.z - zone_unit_pos.z)^2)^0.5 <= radius) then + in_zone_units[#in_zone_units + 1] = lUnit + break + elseif zone_type == 'sphere' and (((unit_pos.x - zone_unit_pos.x)^2 + (unit_pos.y - zone_unit_pos.y)^2 + (unit_pos.z - zone_unit_pos.z)^2)^0.5 <= radius) then + in_zone_units[#in_zone_units + 1] = lUnit + break + end + end + end + end + return in_zone_units +end + +function mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) + log:info("$1, $2, $3, $4, $5", unitset1, altoffset1, unitset2, altoffset2, radius) + radius = radius or math.huge + local unit_info1 = {} + local unit_info2 = {} + + -- get the positions all in one step, saves execution time. + for unitset1_ind = 1, #unitset1 do + local unit1 = Unit.getByName(unitset1[unitset1_ind]) + local lCat = unit1:getCategory() + if unit1 and ((lCat == 1 and unit1:isActive()) or lCat ~= 1) then + unit_info1[#unit_info1 + 1] = {} + unit_info1[#unit_info1].unit = unit1 + unit_info1[#unit_info1].pos = unit1:getPosition().p + end + end + + for unitset2_ind = 1, #unitset2 do + local unit2 = Unit.getByName(unitset2[unitset2_ind]) + local lCat = unit2:getCategory() + if unit2 and ((lCat == 1 and unit2:isActive()) or lCat ~= 1) then + unit_info2[#unit_info2 + 1] = {} + unit_info2[#unit_info2].unit = unit2 + unit_info2[#unit_info2].pos = unit2:getPosition().p + end + end + + local LOS_data = {} + -- now compute los + for unit1_ind = 1, #unit_info1 do + local unit_added = false + for unit2_ind = 1, #unit_info2 do + if radius == math.huge or (mist.vec.mag(mist.vec.sub(unit_info1[unit1_ind].pos, unit_info2[unit2_ind].pos)) < radius) then -- inside radius + local point1 = { x = unit_info1[unit1_ind].pos.x, y = unit_info1[unit1_ind].pos.y + altoffset1, z = unit_info1[unit1_ind].pos.z} + local point2 = { x = unit_info2[unit2_ind].pos.x, y = unit_info2[unit2_ind].pos.y + altoffset2, z = unit_info2[unit2_ind].pos.z} + if land.isVisible(point1, point2) then + if unit_added == false then + unit_added = true + LOS_data[#LOS_data + 1] = {} + LOS_data[#LOS_data].unit = unit_info1[unit1_ind].unit + LOS_data[#LOS_data].vis = {} + LOS_data[#LOS_data].vis[#LOS_data[#LOS_data].vis + 1] = unit_info2[unit2_ind].unit + else + LOS_data[#LOS_data].vis[#LOS_data[#LOS_data].vis + 1] = unit_info2[unit2_ind].unit + end + end + end + end + end + + return LOS_data +end + +function mist.getAvgPoint(points) + local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 + for i = 1, #points do + local nPoint = mist.utils.makeVec3(points[i]) + if nPoint.z then + avgX = avgX + nPoint.x + avgY = avgY + nPoint.y + avgZ = avgZ + nPoint.z + totNum = totNum + 1 + end + end + if totNum ~= 0 then + return {x = avgX/totNum, y = avgY/totNum, z = avgZ/totNum} + end +end + +--Gets the average position of a group of units (by name) +function mist.getAvgPos(unitNames) + local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 + for i = 1, #unitNames do + local unit + if Unit.getByName(unitNames[i]) then + unit = Unit.getByName(unitNames[i]) + elseif StaticObject.getByName(unitNames[i]) then + unit = StaticObject.getByName(unitNames[i]) + end + if unit then + local pos = unit:getPosition().p + if pos then -- you never know O.o + avgX = avgX + pos.x + avgY = avgY + pos.y + avgZ = avgZ + pos.z + totNum = totNum + 1 + end + end + end + if totNum ~= 0 then + return {x = avgX/totNum, y = avgY/totNum, z = avgZ/totNum} + end +end + +function mist.getAvgGroupPos(groupName) + if type(groupName) == 'string' and Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then + groupName = Group.getByName(groupName) + end + local units = {} + for i = 1, groupName:getSize() do + table.insert(units, groupName:getUnit(i):getName()) + end + + return mist.getAvgPos(units) + +end + +--[[ vars for mist.getMGRSString: +vars.units - table of unit names (NOT unitNameTable- maybe this should change). +vars.acc - integer between 0 and 5, inclusive +]] +function mist.getMGRSString(vars) + local units = vars.units + local acc = vars.acc or 5 + local avgPos = mist.getAvgPos(units) + if avgPos then + return mist.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) + end +end + +--[[ vars for mist.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. +]] +function mist.getLLString(vars) + local units = vars.units + local acc = vars.acc or 3 + local DMS = vars.DMS + local avgPos = mist.getAvgPos(units) + if avgPos then + local lat, lon = coord.LOtoLL(avgPos) + return mist.tostringLL(lat, lon, acc, DMS) + 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. +]] +function mist.getBRString(vars) + local units = vars.units + local ref = mist.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + local avgPos = mist.getAvgPos(units) + if avgPos then + local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} + local dir = mist.utils.getDir(vec, ref) + local dist = mist.utils.get2DDist(avgPos, ref) + if alt then + alt = avgPos.y + end + return mist.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 mist.getLeadingPos: +vars.units - table of unit names +vars.heading - direction +vars.radius - number +vars.headingDegrees - boolean, switches heading to degrees +]] +function mist.getLeadingPos(vars) + local units = vars.units + local heading = vars.heading + local radius = vars.radius + if vars.headingDegrees then + heading = mist.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 = mist.vec.rotateVec2(mist.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 mist.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 mist.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. +]] +function mist.getLeadingMGRSString(vars) + local pos = mist.getLeadingPos(vars) + if pos then + local acc = vars.acc or 5 + return mist.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) + end +end + +--[[ vars for mist.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. +]] +function mist.getLeadingLLString(vars) + local pos = mist.getLeadingPos(vars) + if pos then + local acc = vars.acc or 3 + local DMS = vars.DMS + local lat, lon = coord.LOtoLL(pos) + return mist.tostringLL(lat, lon, acc, DMS) + end +end + +--[[ vars for mist.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. +]] +function mist.getLeadingBRString(vars) + local pos = mist.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 = mist.utils.getDir(vec, ref) + local dist = mist.utils.get2DDist(pos, ref) + if alt then + alt = pos.y + end + return mist.tostringBR(dir, dist, alt, metric) + end +end + +--[[getPathLength from GSH +-- Returns the length between the defined set of points. Can also return the point index before the cutoff was achieved +p - table of path points, vec2 or vec3 +cutoff - number distance after which to stop at +topo - boolean for if it should get the topographical distance + +]] + +function mist.getPathLength(p, cutoff, topo) + local l = 0 + local cut = 0 or cutOff + local path = {} + + for i = 1, #p do + if topo then + table.insert(path, mist.utils.makeVec3GL(p[i])) + else + table.insert(path, mist.utils.makeVec3(p[i])) + end + end + + for i = 1, #path do + if i + 1 <= #path then + if topo then + l = mist.utils.get3DDist(path[i], path[i+1]) + l + else + l = mist.utils.get2DDist(path[i], path[i+1]) + l + end + end + if cut ~= 0 and l > cut then + return l, i + end + end + return l +end + +--[[ +Return a series of points to simplify the input table. Best used in conjunction with findPathOnRoads to turn the massive table into a list of X points. +p - table of path points, can be vec2 or vec3 +num - number of segments. +exact - boolean for whether or not it returns the exact distance or uses the first WP to that distance. + + +]] + +function mist.getPathInSegments(p, num, exact) + local tot = mist.getPathLength(p) + local checkDist = tot/num + local typeUsed = 'vec2' + + local points = {[1] = p[1]} + local curDist = 0 + for i = 1, #p do + if i + 1 <= #p then + curDist = mist.utils.get2DDist(p[i], p[i+1]) + curDist + if curDist > checkDist then + curDist = 0 + if exact then + -- get avg point between the two + -- insert into point table + -- need to be accurate... maybe reassign the point for the value it is checking? + -- insert into p table? + else + table.insert(points, p[i]) + end + end + + end + + end + return points + +end + + +function mist.getPointAtDistanceOnPath(p, dist, r, rtn) + log:info('find distance: $1', dist) + local rType = r or 'roads' + local point = {x= 0, y = 0, z = 0} + local path = {} + local ret = rtn or 'vec2' + local l = 0 + if p[1] and #p == 2 then + path = land.findPathOnRoads(rType, p[1].x, p[1].y, p[2].x, p[2].y) + else + path = p + end + for i = 1, #path do + if i + 1 <= #path then + nextPoint = path[i+1] + if topo then + l = mist.utils.get3DDist(path[i], path[i+1]) + l + else + l = mist.utils.get2DDist(path[i], path[i+1]) + l + end + end + if l > dist then + local diff = dist + if i ~= 1 then -- get difference + diff = l - dist + end + local dir = mist.utils.getHeadingPoints(mist.utils.makeVec3(path[i]), mist.utils.makeVec3(path[i+1])) + local x, y + if r then + x, y = land.getClosestPointOnRoads(rType, mist.utils.round((math.cos(dir) * diff) + path[i].x,1), mist.utils.round((math.sin(dir) * diff) + path[i].y,1)) + else + x, y = mist.utils.round((math.cos(dir) * diff) + path[i].x,1), mist.utils.round((math.sin(dir) * diff) + path[i].y,1) + end + + if ret == 'vec2' then + return {x = x, y = y}, dir + elseif ret == 'vec3' then + return {x = x, y = 0, z = y}, dir + end + + return {x = x, y = y}, dir + end + end + log:warn('Find point at distance: $1, path distance $2', dist, l) + return false +end + + +function mist.projectPoint(point, dist, theta) + local newPoint = {} + if point.z then + newPoint.z = mist.utils.round(math.sin(theta) * dist + point.z, 3) + newPoint.y = mist.utils.deepCopy(point.y) + else + newPoint.y = mist.utils.round(math.sin(theta) * dist + point.y, 3) + end + newPoint.x = mist.utils.round(math.cos(theta) * dist + point.x, 3) + + return newPoint +end + +end + + + + +--- Group functions. +-- @section groups +do -- group functions scope + + --- Check table used for group creation. + -- @tparam table groupData table to check. + -- @treturn boolean true if a group can be spawned using + -- this table, false otherwise. + function mist.groupTableCheck(groupData) + -- return false if country, category + -- or units are missing + if not groupData.country or + not groupData.category or + not groupData.units then + return false + end + -- return false if unitData misses + -- x, y or type + for unitId, unitData in pairs(groupData.units) do + if not unitData.x or + not unitData.y or + not unitData.type then + return false + end + end + -- everything we need is here return true + return true + end + + --- Returns group data table of give group. + function mist.getCurrentGroupData(gpName) + local dbData = mist.getGroupData(gpName) + + if Group.getByName(gpName) and Group.getByName(gpName):isExist() == true then + local newGroup = Group.getByName(gpName) + local newData = {} + newData.name = gpName + newData.groupId = tonumber(newGroup:getID()) + newData.category = newGroup:getCategory() + newData.groupName = gpName + newData.hidden = dbData.hidden + + if newData.category == 2 then + newData.category = 'vehicle' + elseif newData.category == 3 then + newData.category = 'ship' + end + + newData.units = {} + local newUnits = newGroup:getUnits() + if #newUnits == 0 then + log:warn('getCurrentGroupData has returned no units for: $1', gpName) + end + for unitNum, unitData in pairs(newGroup:getUnits()) do + newData.units[unitNum] = {} + local uName = unitData:getName() + + if mist.DBs.unitsByName[uName] and unitData:getTypeName() == mist.DBs.unitsByName[uName].type and mist.DBs.unitsByName[uName].unitId == tonumber(unitData:getID()) then -- If old data matches most of new data + newData.units[unitNum] = mist.utils.deepCopy(mist.DBs.unitsByName[uName]) + else + newData.units[unitNum].unitId = tonumber(unitData:getID()) + newData.units[unitNum].type = unitData:getTypeName() + newData.units[unitNum].skill = mist.getUnitSkill(uName) + newData.country = string.lower(country.name[unitData:getCountry()]) + newData.units[unitNum].callsign = unitData:getCallsign() + newData.units[unitNum].unitName = uName + end + + newData.units[unitNum].x = unitData:getPosition().p.x + newData.units[unitNum].y = unitData:getPosition().p.z + newData.units[unitNum].point = {x = newData.units[unitNum].x, y = newData.units[unitNum].y} + newData.units[unitNum].heading = mist.getHeading(unitData, true) -- added to DBs + newData.units[unitNum].alt = unitData:getPosition().p.y + newData.units[unitNum].speed = mist.vec.mag(unitData:getVelocity()) + + end + + return newData + elseif StaticObject.getByName(gpName) and StaticObject.getByName(gpName):isExist() == true then + local staticObj = StaticObject.getByName(gpName) + dbData.units[1].x = staticObj:getPosition().p.x + dbData.units[1].y = staticObj:getPosition().p.z + dbData.units[1].alt = staticObj:getPosition().p.y + dbData.units[1].heading = mist.getHeading(staticObj, true) + + return dbData + end + + end + + function mist.getGroupData(gpName) + local found = false + local newData = {} + if mist.DBs.groupsByName[gpName] then + newData = mist.utils.deepCopy(mist.DBs.groupsByName[gpName]) + found = true + end + + if found == false then + for groupName, groupData in pairs(mist.DBs.groupsByName) do + if mist.stringMatch(groupName, gpName) == true then + newData = mist.utils.deepCopy(groupData) + newData.groupName = groupName + found = true + break + end + end + end + + local payloads + if newData.category == 'plane' or newData.category == 'helicopter' then + payloads = mist.getGroupPayload(newData.groupName) + end + if found == true then + --newData.hidden = false -- maybe add this to DBs + + for unitNum, unitData in pairs(newData.units) do + newData.units[unitNum] = {} + + newData.units[unitNum].unitId = unitData.unitId + --newData.units[unitNum].point = unitData.point + newData.units[unitNum].x = unitData.point.x + newData.units[unitNum].y = unitData.point.y + newData.units[unitNum].alt = unitData.alt + newData.units[unitNum].alt_type = unitData.alt_type + newData.units[unitNum].speed = unitData.speed + newData.units[unitNum].type = unitData.type + newData.units[unitNum].skill = unitData.skill + newData.units[unitNum].unitName = unitData.unitName + newData.units[unitNum].heading = unitData.heading -- added to DBs + newData.units[unitNum].playerCanDrive = unitData.playerCanDrive -- added to DBs + + + if newData.category == 'plane' or newData.category == 'helicopter' then + newData.units[unitNum].payload = payloads[unitNum] + newData.units[unitNum].livery_id = unitData.livery_id + newData.units[unitNum].onboard_num = unitData.onboard_num + newData.units[unitNum].callsign = unitData.callsign + newData.units[unitNum].AddPropAircraft = unitData.AddPropAircraft + end + if newData.category == 'static' then + newData.units[unitNum].categoryStatic = unitData.categoryStatic + newData.units[unitNum].mass = unitData.mass + newData.units[unitNum].canCargo = unitData.canCargo + newData.units[unitNum].shape_name = unitData.shape_name + end + end + --log:info(newData) + return newData + else + log:error('$1 not found in MIST database', gpName) + return + end + end + + function mist.getPayload(unitIdent) + -- refactor to search by groupId and allow groupId and groupName as inputs + local unitId = unitIdent + if type(unitIdent) == 'string' and not tonumber(unitIdent) then + if mist.DBs.MEunitsByName[unitIdent] then + unitId = mist.DBs.MEunitsByName[unitIdent].unitId + else + log:error("Unit not found in mist.DBs.MEunitsByName: $1", unitIdent) + end + end + local gpId = mist.DBs.MEunitsById[unitId].groupId + + if gpId and unitId then + 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 + for unitIndex, unitData in pairs(group_data.units) do --group index + if unitData.unitId == unitId then + return unitData.payload + end + end + end + end + end + end + end + end + end + end + end + else + log:error('Need string or number. Got: $1', type(unitIdent)) + return false + end + log:warn("Couldn't find payload for unit: $1", unitIdent) + return + end + + function mist.getGroupPayload(groupIdent) + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + if mist.DBs.MEgroupsByName[groupIdent] then + gpId = mist.DBs.MEgroupsByName[groupIdent].groupId + else + log:error('$1 not found in mist.DBs.MEgroupsByName', groupIdent) + end + end + + if gpId then + for coa_name, coa_data in pairs(env.mission.coalition) do + if 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 + local payloads = {} + for unitIndex, unitData in pairs(group_data.units) do --group index + payloads[unitIndex] = unitData.payload + end + return payloads + end + end + end + end + end + end + end + end + end + else + log:error('Need string or number. Got: $1', type(groupIdent)) + return false + end + log:warn("Couldn't find payload for group: $1", groupIdent) + return + + end + + function mist.getValidRandomPoint(vars) + + + end + + function mist.teleportToPoint(vars) -- main teleport function that all of teleport/respawn functions call + --log:info(vars) + local point = vars.point + local gpName + if vars.gpName then + gpName = vars.gpName + elseif vars.groupName then + gpName = vars.groupName + else + log:error('Missing field groupName or gpName in variable table') + end + + local action = vars.action + + local disperse = vars.disperse or false + local maxDisp = vars.maxDisp or 200 + local radius = vars.radius or 0 + local innerRadius = vars.innerRadius + + local route = vars.route + local dbData = false + + local newGroupData + if gpName and not vars.groupData then + if string.lower(action) == 'teleport' or string.lower(action) == 'tele' then + newGroupData = mist.getCurrentGroupData(gpName) + elseif string.lower(action) == 'respawn' then + newGroupData = mist.getGroupData(gpName) + dbData = true + elseif string.lower(action) == 'clone' then + newGroupData = mist.getGroupData(gpName) + newGroupData.clone = 'order66' + dbData = true + else + action = 'tele' + newGroupData = mist.getCurrentGroupData(gpName) + end + else + action = 'tele' + newGroupData = vars.groupData + end + + if vars.newGroupName then + newGroupData.groupName = vars.newGroupName + end + + if #newGroupData.units == 0 then + log:warn('$1 has no units in group table', gpName) + return + end + + --log:info('get Randomized Point') + local diff = {x = 0, y = 0} + local newCoord, origCoord + + local validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} + if vars.validTerrain then + validTerrain = vars.validTerrain + else + if string.lower(newGroupData.category) == 'ship' then + validTerrain = {'SHALLOW_WATER' , 'WATER'} + elseif string.lower(newGroupData.category) == 'vehicle' then + validTerrain = {'LAND', 'ROAD'} + end + end + local offsets = {} + if point and radius >= 0 then + local valid = false + -- new thoughts + --[[ Get AVG position of group and max radius distance to that avg point, otherwise use disperse data to get zone area to check + if disperse then + + else + + end + -- ]] + + + + + + + ---- old + for i = 1, 100 do + newCoord = mist.getRandPointInCircle(point, radius, innerRadius) + if mist.isTerrainValid(newCoord, validTerrain) then + origCoord = mist.utils.deepCopy(newCoord) + diff = {x = (newCoord.x - newGroupData.units[1].x), y = (newCoord.y - newGroupData.units[1].y)} + valid = true + break + end + end + if valid == false then + log:error('Point supplied in variable table is not a valid coordinate. Valid coords: $1', validTerrain) + return false + end + end + if not newGroupData.country and mist.DBs.groupsByName[newGroupData.groupName].country then + newGroupData.country = mist.DBs.groupsByName[newGroupData.groupName].country + end + if not newGroupData.category and mist.DBs.groupsByName[newGroupData.groupName].category then + newGroupData.category = mist.DBs.groupsByName[newGroupData.groupName].category + end + --log:info(point) + for unitNum, unitData in pairs(newGroupData.units) do + --log:info(unitNum) + if disperse then + local unitCoord + if maxDisp and type(maxDisp) == 'number' and unitNum ~= 1 then + for i = 1, 100 do + unitCoord = mist.getRandPointInCircle(origCoord, maxDisp) + if mist.isTerrainValid(unitCoord, validTerrain) == true then + --log:warn('Index: $1, Itered: $2. AT: $3', unitNum, i, unitCoord) + break + end + end + + --else + --newCoord = mist.getRandPointInCircle(zone.point, zone.radius) + end + if unitNum == 1 then + unitCoord = mist.utils.deepCopy(newCoord) + end + if unitCoord then + newGroupData.units[unitNum].x = unitCoord.x + newGroupData.units[unitNum].y = unitCoord.y + end + else + newGroupData.units[unitNum].x = unitData.x + diff.x + newGroupData.units[unitNum].y = unitData.y + diff.y + end + if point then + if (newGroupData.category == 'plane' or newGroupData.category == 'helicopter') then + if point.z and point.y > 0 and point.y > land.getHeight({newGroupData.units[unitNum].x, newGroupData.units[unitNum].y}) + 10 then + newGroupData.units[unitNum].alt = point.y + --log:info('far enough from ground') + else + + if newGroupData.category == 'plane' then + --log:info('setNewAlt') + newGroupData.units[unitNum].alt = land.getHeight({newGroupData.units[unitNum].x, newGroupData.units[unitNum].y}) + math.random(300, 9000) + else + newGroupData.units[unitNum].alt = land.getHeight({newGroupData.units[unitNum].x, newGroupData.units[unitNum].y}) + math.random(200, 3000) + end + end + end + end + end + + if newGroupData.start_time then + newGroupData.startTime = newGroupData.start_time + end + + if newGroupData.startTime and newGroupData.startTime ~= 0 and dbData == true then + local timeDif = timer.getAbsTime() - timer.getTime0() + if timeDif > newGroupData.startTime then + newGroupData.startTime = 0 + else + newGroupData.startTime = newGroupData.startTime - timeDif + end + + end + + if route then + newGroupData.route = route + end + --log:info(newGroupData) + --mist.debug.writeData(mist.utils.serialize,{'teleportToPoint', newGroupData}, 'newGroupData.lua') + if string.lower(newGroupData.category) == 'static' then + --log:info(newGroupData) + return mist.dynAddStatic(newGroupData) + end + return mist.dynAdd(newGroupData) + + end + + function mist.respawnInZone(gpName, zone, disperse, maxDisp) + + if type(gpName) == 'table' and gpName:getName() then + gpName = gpName:getName() + elseif type(gpName) == 'table' and gpName[1]:getName() then + gpName = math.random(#gpName) + else + gpName = tostring(gpName) + end + + if type(zone) == 'string' then + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] + end + local vars = {} + vars.gpName = gpName + vars.action = 'respawn' + vars.point = zone.point + vars.radius = zone.radius + vars.disperse = disperse + vars.maxDisp = maxDisp + return mist.teleportToPoint(vars) + end + + function mist.cloneInZone(gpName, zone, disperse, maxDisp) + --log:info('cloneInZone') + if type(gpName) == 'table' then + gpName = gpName:getName() + else + gpName = tostring(gpName) + end + + if type(zone) == 'string' then + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] + end + local vars = {} + vars.gpName = gpName + vars.action = 'clone' + vars.point = zone.point + vars.radius = zone.radius + vars.disperse = disperse + vars.maxDisp = maxDisp + --log:info('do teleport') + return mist.teleportToPoint(vars) + end + + function mist.teleportInZone(gpName, zone, disperse, maxDisp) -- groupName, zoneName or table of Zone Names, keepForm is a boolean + if type(gpName) == 'table' and gpName:getName() then + gpName = gpName:getName() + else + gpName = tostring(gpName) + end + + if type(zone) == 'string' then + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] + end + + local vars = {} + vars.gpName = gpName + vars.action = 'tele' + vars.point = zone.point + vars.radius = zone.radius + vars.disperse = disperse + vars.maxDisp = maxDisp + return mist.teleportToPoint(vars) + end + + function mist.respawnGroup(gpName, task) + local vars = {} + vars.gpName = gpName + vars.action = 'respawn' + if task and type(task) ~= 'number' then + vars.route = mist.getGroupRoute(gpName, 'task') + end + local newGroup = mist.teleportToPoint(vars) + if task and type(task) == 'number' then + local newRoute = mist.getGroupRoute(gpName, 'task') + mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) + end + return newGroup + end + + function mist.cloneGroup(gpName, task) + local vars = {} + vars.gpName = gpName + vars.action = 'clone' + if task and type(task) ~= 'number' then + vars.route = mist.getGroupRoute(gpName, 'task') + end + local newGroup = mist.teleportToPoint(vars) + if task and type(task) == 'number' then + local newRoute = mist.getGroupRoute(gpName, 'task') + mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) + end + return newGroup + end + + function mist.teleportGroup(gpName, task) + local vars = {} + vars.gpName = gpName + vars.action = 'teleport' + if task and type(task) ~= 'number' then + vars.route = mist.getGroupRoute(gpName, 'task') + end + local newGroup = mist.teleportToPoint(vars) + if task and type(task) == 'number' then + local newRoute = mist.getGroupRoute(gpName, 'task') + mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) + end + return newGroup + end + + function mist.spawnRandomizedGroup(groupName, vars) -- need to debug + if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then + local gpData = mist.getGroupData(groupName) + gpData.units = mist.randomizeGroupOrder(gpData.units, vars) + gpData.route = mist.getGroupRoute(groupName, 'task') + + mist.dynAdd(gpData) + end + + return true + end + + function mist.randomizeNumTable(vars) + local newTable = {} + + local excludeIndex = {} + local randomTable = {} + + if vars and vars.exclude and type(vars.exclude) == 'table' then + for index, data in pairs(vars.exclude) do + excludeIndex[data] = true + end + end + + local low, hi, size + + if vars.size then + size = vars.size + end + + if vars and vars.lowerLimit and type(vars.lowerLimit) == 'number' then + low = mist.utils.round(vars.lowerLimit) + else + low = 1 + end + + if vars and vars.upperLimit and type(vars.upperLimit) == 'number' then + hi = mist.utils.round(vars.upperLimit) + else + hi = size + end + + local choices = {} + -- add to exclude list and create list of what to randomize + for i = 1, size do + if not (i >= low and i <= hi) then + + excludeIndex[i] = true + end + if not excludeIndex[i] then + table.insert(choices, i) + else + newTable[i] = i + end + end + + for ind, num in pairs(choices) do + local found = false + local x = 0 + while found == false do + x = mist.random(size) -- get random number from list + local addNew = true + for index, _ in pairs(excludeIndex) do + if index == x then + addNew = false + break + end + end + if addNew == true then + excludeIndex[x] = true + found = true + end + excludeIndex[x] = true + + end + newTable[num] = x + end + --[[ + for i = 1, #newTable do + log:info(newTable[i]) + end + ]] + return newTable + end + + function mist.randomizeGroupOrder(passedUnits, vars) + -- figure out what to exclude, and send data to other func + local units = passedUnits + + if passedUnits.units then + units = passUnits.units + end + + local exclude = {} + local excludeNum = {} + if vars and vars.excludeType and type(vars.excludeType) == 'table' then + exclude = vars.excludeType + end + + if vars and vars.excludeNum and type(vars.excludeNum) == 'table' then + excludeNum = vars.excludeNum + end + + local low, hi + + if vars and vars.lowerLimit and type(vars.lowerLimit) == 'number' then + low = mist.utils.round(vars.lowerLimit) + else + low = 1 + end + + if vars and vars.upperLimit and type(vars.upperLimit) == 'number' then + hi = mist.utils.round(vars.upperLimit) + else + hi = #units + end + + + local excludeNum = {} + for unitIndex, unitData in pairs(units) do + if unitIndex >= low and unitIndex <= hi then -- if within range + local found = false + if #exclude > 0 then + for excludeType, index in pairs(exclude) do -- check if excluded + if mist.stringMatch(excludeType, unitData.type) then -- if excluded + excludeNum[unitIndex] = unitIndex + found = true + end + end + end + else -- unitIndex is either to low, or to high: added to exclude list + excludeNum[unitIndex] = unitId + end + end + + local newGroup = {} + local newOrder = mist.randomizeNumTable({exclude = excludeNum, size = #units}) + + for unitIndex, unitData in pairs(units) do + for i = 1, #newOrder do + if newOrder[i] == unitIndex then + newGroup[i] = mist.utils.deepCopy(units[i]) -- gets all of the unit data + newGroup[i].type = mist.utils.deepCopy(unitData.type) + newGroup[i].skill = mist.utils.deepCopy(unitData.skill) + newGroup[i].unitName = mist.utils.deepCopy(unitData.unitName) + newGroup[i].unitIndex = mist.utils.deepCopy(unitData.unitIndex) -- replaces the units data with a new type + end + end + end + return newGroup + end + + function mist.random(firstNum, secondNum) -- no support for decimals + local lowNum, highNum + if not secondNum then + highNum = firstNum + lowNum = 1 + else + lowNum = firstNum + highNum = secondNum + end + local total = 1 + if math.abs(highNum - lowNum + 1) < 50 then -- if total values is less than 50 + total = math.modf(50/math.abs(highNum - lowNum + 1)) -- make x copies required to be above 50 + end + local choices = {} + for i = 1, total do -- iterate required number of times + for x = lowNum, highNum do -- iterate between the range + choices[#choices +1] = x -- add each entry to a table + end + end + local rtnVal = math.random(#choices) -- will now do a math.random of at least 50 choices + for i = 1, 10 do + rtnVal = math.random(#choices) -- iterate a few times for giggles + end + return choices[rtnVal] + end + + function mist.stringMatch(s1, s2, bool) + local exclude = {'%-', '%(', '%)', '%_', '%[', '%]', '%.', '%#', '% ', '%{', '%}', '%$', '%%', '%?', '%+', '%^'} + if type(s1) == 'string' and type(s2) == 'string' then + for i , str in pairs(exclude) do + s1 = string.gsub(s1, str, '') + s2 = string.gsub(s2, str, '') + end + if not bool then + s1 = string.lower(s1) + s2 = string.lower(s2) + end + --log:info('Comparing: $1 and $2', s1, s2) + if s1 == s2 then + return true + else + return false + end + else + log:error('Either the first or second variable were not a string') + return false + end + end + + mist.matchString = mist.stringMatch -- both commands work because order out type of I + + --[[ scope: +{ + units = {...}, -- unit names. + coa = {...}, -- coa names + countries = {...}, -- country names + CA = {...}, -- looks just like coa. + unitTypes = { red = {}, blue = {}, all = {}, Russia = {},} +} + + +scope examples: + +{ units = { 'Hawg11', 'Hawg12' }, CA = {'blue'} } + +{ countries = {'Georgia'}, unitTypes = {blue = {'A-10C', 'A-10A'}}} + +{ coa = {'all'}} + +{unitTypes = { blue = {'A-10C'}}} +]] +end + +--- Utility functions. +-- E.g. conversions between units etc. +-- @section mist.utils +do -- mist.util scope + mist.utils = {} + + --- Converts angle in radians to degrees. + -- @param angle angle in radians + -- @return angle in degrees + function mist.utils.toDegree(angle) + return angle*180/math.pi + end + + --- Converts angle in degrees to radians. + -- @param angle angle in degrees + -- @return angle in degrees + function mist.utils.toRadian(angle) + return angle*math.pi/180 + end + + --- Converts meters to nautical miles. + -- @param meters distance in meters + -- @return distance in nautical miles + function mist.utils.metersToNM(meters) + return meters/1852 + end + + --- Converts meters to feet. + -- @param meters distance in meters + -- @return distance in feet + function mist.utils.metersToFeet(meters) + return meters/0.3048 + end + + --- Converts nautical miles to meters. + -- @param nm distance in nautical miles + -- @return distance in meters + function mist.utils.NMToMeters(nm) + return nm*1852 + end + + --- Converts feet to meters. + -- @param feet distance in feet + -- @return distance in meters + function mist.utils.feetToMeters(feet) + return feet*0.3048 + end + + --- Converts meters per second to knots. + -- @param mps speed in m/s + -- @return speed in knots + function mist.utils.mpsToKnots(mps) + return mps*3600/1852 + end + + --- Converts meters per second to kilometers per hour. + -- @param mps speed in m/s + -- @return speed in km/h + function mist.utils.mpsToKmph(mps) + return mps*3.6 + end + + --- Converts knots to meters per second. + -- @param knots speed in knots + -- @return speed in m/s + function mist.utils.knotsToMps(knots) + return knots*1852/3600 + end + + --- Converts kilometers per hour to meters per second. + -- @param kmph speed in km/h + -- @return speed in m/s + function mist.utils.kmphToMps(kmph) + return kmph/3.6 + end + + function mist.utils.kelvinToCelsius(t) + return t - 273.15 + end + + function mist.utils.FahrenheitToCelsius(f) + return (f - 32) * (5/9) + end + + function mist.utils.celsiusToFahrenheit(c) + return c*(9/5)+32 + end + + function mist.utils.converter(t1, t2, val) + if type(t1) == 'string' then + t1 = string.lower(t1) + end + if type(t2) == 'string' then + t2 = string.lower(t2) + end + if val and type(val) ~= 'number' then + if tonumber(val) then + val = tonumber(val) + else + log:warn("Value given is not a number: $1", val) + return 0 + end + end + + -- speed + if t1 == 'mps' then + if t2 == 'kmph' then + return val * 3.6 + elseif t2 == 'knots' or t2 == 'knot' then + return val * 3600/1852 + end + elseif t1 == 'kmph' then + if t2 == 'mps' then + return val/3.6 + elseif t2 == 'knots' or t2 == 'knot' then + return val*0.539957 + end + elseif t1 == 'knot' or t1 == 'knots' then + if t2 == 'kmph' then + return val * 1.852 + elseif t2 == 'mps' then + return val * 0.514444 + end + + -- Distance + elseif t1 == 'feet' or t1 == 'ft' then + if t2 == 'nm' then + return val/6076.12 + elseif t2 == 'km' then + return (val*0.3048)/1000 + elseif t2 == 'm' then + return val*0.3048 + end + elseif t1 == 'nm' then + if t2 == 'feet' or t2 == 'ft' then + return val*6076.12 + elseif t2 == 'km' then + return val*1.852 + elseif t2 == 'm' then + return val*1852 + end + elseif t1 == 'km' then + if t2 == 'nm' then + return val/1.852 + elseif t2 == 'feet' or t2 == 'ft' then + return (val/0.3048)*1000 + elseif t2 == 'm' then + return val*1000 + end + elseif t1 == 'm' then + if t2 == 'nm' then + return val/1852 + elseif t2 == 'km' then + return val/1000 + elseif t2 == 'feet' or t2 == 'ft' then + return val/0.3048 + end + + -- Temperature + elseif t1 == 'f' or t1 == 'fahrenheit' then + if t2 == 'c' or t2 == 'celsius' then + return (val - 32) * (5/9) + elseif t2 == 'k' or t2 == 'kelvin' then + return (val + 459.67) * (5/9) + end + elseif t1 == 'c' or t1 == 'celsius' then + if t2 == 'f' or t2 == 'fahrenheit' then + return val*(9/5)+32 + elseif t2 == 'k' or t2 == 'kelvin' then + return val + 273.15 + end + elseif t1 == 'k' or t1 == 'kelvin' then + if t2 == 'c' or t2 == 'celsius' then + return val - 273.15 + elseif t2 == 'f' or t2 == 'fahrenheit' then + return ((val*(9/5))-459.67) + end + + -- Pressure + elseif t1 == 'p' or t1 == 'pascal' or t1 == 'pascals' then + if t2 == 'hpa' or t2 == 'hectopascal' then + return val/100 + elseif t2 == 'mmhg' then + return val * 0.00750061561303 + elseif t2 == 'inhg' then + return val * 0.0002953 + end + elseif t1 == 'hpa' or t1 == 'hectopascal' then + if t2 == 'p' or t2 == 'pascal' or t2 == 'pascals' then + return val*100 + elseif t2 == 'mmhg' then + return val * 0.00750061561303 + elseif t2 == 'inhg' then + return val * 0.02953 + end + elseif t1 == 'mmhg' then + if t2 == 'p' or t2 == 'pascal' or t2 == 'pascals' then + return val / 0.00750061561303 + elseif t2 == 'hpa' or t2 == 'hectopascal' then + return val * 1.33322 + elseif t2 == 'inhg' then + return val/25.4 + end + elseif t1 == 'inhg' then + if t2 == 'p' or t2 == 'pascal' or t2 == 'pascals' then + return val*3386.39 + elseif t2 == 'mmhg' then + return val*25.4 + elseif t2 == 'hpa' or t2 == 'hectopascal' then + return val * 33.8639 + end + else + log:warn("First value doesn't match with list. Value given: $1", t1) + end + log:warn("Match not found. Unable to convert: $1 into $2", t1, t2) + + end + + mist.converter = mist.utils.converter + + function mist.utils.getQFE(point, inchHg) + + local t, p = 0, 0 + if atmosphere.getTemperatureAndPressure then + t, p = atmosphere.getTemperatureAndPressure(mist.utils.makeVec3GL(point)) + end + if p == 0 then + local h = land.getHeight(mist.utils.makeVec2(point))/0.3048 -- convert to feet + if inchHg then + return (env.mission.weather.qnh - (h/30)) * 0.0295299830714 + else + return env.mission.weather.qnh - (h/30) + end + else + if inchHg then + return mist.converter('p', 'inhg', p) + else + return mist.converter('p', 'hpa', p) + end + end + + end + --- Converts a Vec3 to a Vec2. + -- @tparam Vec3 vec the 3D vector + -- @return vector converted to Vec2 + function mist.utils.makeVec2(vec) + if vec.z then + return {x = vec.x, y = vec.z} + else + return {x = vec.x, y = vec.y} -- it was actually already vec2. + end + end + + --- Converts a Vec2 to a Vec3. + -- @tparam Vec2 vec the 2D vector + -- @param y optional new y axis (altitude) value. If omitted it's 0. + function mist.utils.makeVec3(vec, y) + if not vec.z then + if vec.alt and not y then + y = vec.alt + elseif not y then + y = 0 + end + return {x = vec.x, y = y, z = vec.y} + else + return {x = vec.x, y = vec.y, z = vec.z} -- it was already Vec3, actually. + end + end + + --- Converts a Vec2 to a Vec3 using ground level as altitude. + -- The ground level at the specific point is used as altitude (y-axis) + -- for the new vector. Optionally a offset can be specified. + -- @tparam Vec2 vec the 2D vector + -- @param[opt] offset offset to be applied to the ground level + -- @return new 3D vector + function mist.utils.makeVec3GL(vec, offset) + local adj = offset or 0 + + if not vec.z then + return {x = vec.x, y = (land.getHeight(vec) + adj), z = vec.y} + else + return {x = vec.x, y = (land.getHeight({x = vec.x, y = vec.z}) + adj), z = vec.z} + end + end + + --- Returns the center of a zone as Vec3. + -- @tparam string|table zone trigger zone name or table + -- @treturn Vec3 center of the zone + function mist.utils.zoneToVec3(zone, gl) + local new = {} + if type(zone) == 'table' then + if zone.point then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + elseif zone.x and zone.y and zone.z then + new = mist.utils.deepCopy(zone) + end + 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 + end + end + if new.x and gl then + new.y = land.getHeight({x = new.x, y = new.z}) + end + return new + end + + function mist.utils.getHeadingPoints(point1, point2, north) -- sick of writing this out. + if north then + return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), mist.utils.makeVec3(point1)), (mist.utils.makeVec3(point1))) + else + return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), mist.utils.makeVec3(point1))) + end + end + --- Returns heading-error corrected direction. + -- True-north corrected direction from point along vector vec. + -- @tparam Vec3 vec + -- @tparam Vec2 point + -- @return heading-error corrected direction from point. + function mist.utils.getDir(vec, point) + local dir = math.atan2(vec.z, vec.x) + if point then + dir = dir + mist.getNorthCorrection(point) + end + if dir < 0 then + dir = dir + 2 * math.pi -- put dir in range of 0 to 2*pi + end + return dir + end + + --- Returns distance in meters between two points. + -- @tparam Vec2|Vec3 point1 first point + -- @tparam Vec2|Vec3 point2 second point + -- @treturn number distance between given points. + function mist.utils.get2DDist(point1, point2) + point1 = mist.utils.makeVec3(point1) + point2 = mist.utils.makeVec3(point2) + return mist.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) + end + + --- Returns distance in meters between two points in 3D space. + -- @tparam Vec3 point1 first point + -- @tparam Vec3 point2 second point + -- @treturn number distancen between given points in 3D space. + function mist.utils.get3DDist(point1, point2) + return mist.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) + end + + --- Creates a waypoint from a vector. + -- @tparam Vec2|Vec3 vec position of the new waypoint + -- @treturn Waypoint a new waypoint to be used inside paths. + function mist.utils.vecToWP(vec) + local newWP = {} + newWP.x = vec.x + newWP.y = vec.y + if vec.z then + newWP.alt = vec.y + newWP.y = vec.z + else + newWP.alt = land.getHeight({x = vec.x, y = vec.y}) + end + return newWP + end + + --- Creates a waypoint from a unit. + -- This function also considers the units speed. + -- The alt_type of this waypoint is set to "BARO". + -- @tparam Unit pUnit Unit whose position and speed will be used. + -- @treturn Waypoint new waypoint. + function mist.utils.unitToWP(pUnit) + local unit = mist.utils.deepCopy(pUnit) + if type(unit) == 'string' then + if Unit.getByName(unit) then + unit = Unit.getByName(unit) + end + end + if unit:isExist() == true then + local new = mist.utils.vecToWP(unit:getPosition().p) + new.speed = mist.vec.mag(unit:getVelocity()) + new.alt_type = "BARO" + + return new + end + log:error("$1 not found or doesn't exist", pUnit) + return false + end + + --- Creates a deep copy of a object. + -- Usually this object is a table. + -- See also: from http://lua-users.org/wiki/CopyTable + -- @param object object to copy + -- @return copy of object + function mist.utils.deepCopy(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 + return _copy(object) + end + + --- Simple rounding function. + -- From http://lua-users.org/wiki/SimpleRound + -- use negative idp for rounding ahead of decimal place, positive for rounding after decimal place + -- @tparam number num number to round + -- @param idp + function mist.utils.round(num, idp) + local mult = 10^(idp or 0) + return math.floor(num * mult + 0.5) / mult + end + + --- Rounds all numbers inside a table. + -- @tparam table tbl table in which to round numbers + -- @param idp + function mist.utils.roundTbl(tbl, idp) + for id, val in pairs(tbl) do + if type(val) == 'number' then + tbl[id] = mist.utils.round(val, idp) + end + end + return tbl + end + + --- Executes the given string. + -- borrowed from Slmod + -- @tparam string s string containing LUA code. + -- @treturn boolean true if successfully executed, false otherwise + function mist.utils.dostring(s) + local f, err = loadstring(s) + if f then + return true, f() + else + return false, err + end + end + + --- Checks a table's types. + -- This function checks a tables types against a specifically forged type table. + -- @param fname + -- @tparam table type_tbl + -- @tparam table var_tbl + -- @usage -- specifically forged type table + -- type_tbl = { + -- {'table', 'number'}, + -- 'string', + -- 'number', + -- 'number', + -- {'string','nil'}, + -- {'number', 'nil'} + -- } + -- -- my_tbl index 1 must be a table or a number; + -- -- index 2, a string; index 3, a number; + -- -- index 4, a number; index 5, either a string or nil; + -- -- and index 6, either a number or nil. + -- mist.utils.typeCheck(type_tbl, my_tb) + -- @return true if table passes the check, false otherwise. + function mist.utils.typeCheck(fname, type_tbl, var_tbl) + -- log:info('type check') + for type_key, type_val in pairs(type_tbl) do + -- log:info('type_key: $1 type_val: $2', type_key, type_val) + + --type_key can be a table of accepted keys- so try to find one that is not nil + local type_key_str = '' + local act_key = type_key -- actual key within var_tbl - necessary to use for multiple possible key variables. Initialize to type_key + if type(type_key) == 'table' then + + for i = 1, #type_key do + if i ~= 1 then + type_key_str = type_key_str .. '/' + end + type_key_str = type_key_str .. tostring(type_key[i]) + if var_tbl[type_key[i]] ~= nil then + act_key = type_key[i] -- found a non-nil entry, make act_key now this val. + end + end + else + type_key_str = tostring(type_key) + end + + local err_msg = 'Error in function ' .. fname .. ', parameter "' .. type_key_str .. '", expected: ' + local passed_check = false + + if type(type_tbl[type_key]) == 'table' then + -- log:info('err_msg, before: $1', err_msg) + for j = 1, #type_tbl[type_key] do + + if j == 1 then + err_msg = err_msg .. type_tbl[type_key][j] + else + err_msg = err_msg .. ' or ' .. type_tbl[type_key][j] + end + + if type(var_tbl[act_key]) == type_tbl[type_key][j] then + passed_check = true + end + end + -- log:info('err_msg, after: $1', err_msg) + else + -- log:info('err_msg, before: $1', err_msg) + err_msg = err_msg .. type_tbl[type_key] + -- log:info('err_msg, after: $1', err_msg) + if type(var_tbl[act_key]) == type_tbl[type_key] then + passed_check = true + end + + end + + if not passed_check then + err_msg = err_msg .. ', got ' .. type(var_tbl[act_key]) + return false, err_msg + end + end + return true + end + + --- Serializes the give variable to a string. + -- borrowed from slmod + -- @param var variable to serialize + -- @treturn string variable serialized to string + function mist.utils.basicSerialize(var) + if var == nil then + return "\"\"" + else + if ((type(var) == 'number') or + (type(var) == 'boolean') or + (type(var) == 'function') or + (type(var) == 'table') or + (type(var) == 'userdata') ) then + return tostring(var) + elseif type(var) == 'string' then + var = string.format('%q', var) + return var + end + end +end + +--- Serialize value +-- borrowed from slmod (serialize_slmod) +-- @param name +-- @param value value to serialize +-- @param level +function mist.utils.serialize(name, value, level) + --Based on ED's serialize_simple2 + local function basicSerialize(o) + if type(o) == "number" then + return tostring(o) + elseif type(o) == "boolean" then + return tostring(o) + else -- assume it is a string + return mist.utils.basicSerialize(o) + end + end + + local function serializeToTbl(name, value, level) + local var_str_tbl = {} + if level == nil then + level = "" + end + if level ~= "" then + level = level.."" + end + table.insert(var_str_tbl, level .. name .. " = ") + + if type(value) == "number" or type(value) == "string" or type(value) == "boolean" then + table.insert(var_str_tbl, basicSerialize(value) .. ",\n") + elseif type(value) == "table" then + table.insert(var_str_tbl, "\n"..level.."{\n") + + for k,v in pairs(value) do -- serialize its fields + local key + if type(k) == "number" then + key = string.format("[%s]", k) + else + key = string.format("[%q]", k) + end + table.insert(var_str_tbl, mist.utils.serialize(key, v, level.." ")) + + end + if level == "" then + table.insert(var_str_tbl, level.."} -- end of "..name.."\n") + + else + table.insert(var_str_tbl, level.."}, -- end of "..name.."\n") + + end + else + log:error('Cannot serialize a $1', type(value)) + end + return var_str_tbl + end + + local t_str = serializeToTbl(name, value, level) + + return table.concat(t_str) +end + +--- Serialize value supporting cycles. +-- borrowed from slmod (serialize_wcycles) +-- @param name +-- @param value value to serialize +-- @param saved +function mist.utils.serializeWithCycles(name, value, saved) + --mostly straight out of Programming in Lua + local function basicSerialize(o) + if type(o) == "number" then + return tostring(o) + elseif type(o) == "boolean" then + return tostring(o) + else -- assume it is a string + return mist.utils.basicSerialize(o) + end + end + + local t_str = {} + saved = saved or {} -- initial value + if ((type(value) == 'string') or (type(value) == 'number') or (type(value) == 'table') or (type(value) == 'boolean')) then + table.insert(t_str, name .. " = ") + if type(value) == "number" or type(value) == "string" or type(value) == "boolean" then + table.insert(t_str, basicSerialize(value) .. "\n") + else + + if saved[value] then -- value already saved? + table.insert(t_str, saved[value] .. "\n") + else + saved[value] = name -- save name for next time + table.insert(t_str, "{}\n") + for k,v in pairs(value) do -- save its fields + local fieldname = string.format("%s[%s]", name, basicSerialize(k)) + table.insert(t_str, mist.utils.serializeWithCycles(fieldname, v, saved)) + end + end + end + return table.concat(t_str) + else + return "" + end +end + +--- Serialize a table to a single line string. +-- serialization of a table all on a single line, no comments, made to replace old get_table_string function +-- borrowed from slmod +-- @tparam table tbl table to serialize. +-- @treturn string string containing serialized table +function mist.utils.oneLineSerialize(tbl) + if type(tbl) == 'table' then --function only works for tables! + + local tbl_str = {} + + tbl_str[#tbl_str + 1] = '{ ' + + for ind,val in pairs(tbl) do -- serialize its fields + if type(ind) == "number" then + tbl_str[#tbl_str + 1] = '[' + tbl_str[#tbl_str + 1] = tostring(ind) + tbl_str[#tbl_str + 1] = '] = ' + else --must be a string + tbl_str[#tbl_str + 1] = '[' + tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(ind) + tbl_str[#tbl_str + 1] = '] = ' + end + + if ((type(val) == 'number') or (type(val) == 'boolean')) then + tbl_str[#tbl_str + 1] = tostring(val) + tbl_str[#tbl_str + 1] = ', ' + elseif type(val) == 'string' then + tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(val) + tbl_str[#tbl_str + 1] = ', ' + elseif type(val) == 'nil' then -- won't ever happen, right? + tbl_str[#tbl_str + 1] = 'nil, ' + elseif type(val) == 'table' then + tbl_str[#tbl_str + 1] = mist.utils.oneLineSerialize(val) + tbl_str[#tbl_str + 1] = ', ' --I think this is right, I just added it + else + log:warn('Unable to serialize value type $1 at index $2', mist.utils.basicSerialize(type(val)), tostring(ind)) + end + + end + tbl_str[#tbl_str + 1] = '}' + return table.concat(tbl_str) + else + return mist.utils.basicSerialize(tbl) + end +end + +--- Returns table in a easy readable string representation. +-- this function is not meant for serialization because it uses +-- newlines for better readability. +-- @param tbl table to show +-- @param loc +-- @param indent +-- @param tableshow_tbls +-- @return human readable string representation of given table +function mist.utils.tableShow(tbl, loc, indent, tableshow_tbls) --based on serialize_slmod, this is a _G serialization + tableshow_tbls = tableshow_tbls or {} --create table of tables + loc = loc or "" + indent = indent or "" + if type(tbl) == 'table' then --function only works for tables! + tableshow_tbls[tbl] = loc + + local tbl_str = {} + + tbl_str[#tbl_str + 1] = indent .. '{\n' + + for ind,val in pairs(tbl) do -- serialize its fields + if type(ind) == "number" then + tbl_str[#tbl_str + 1] = indent + tbl_str[#tbl_str + 1] = loc .. '[' + tbl_str[#tbl_str + 1] = tostring(ind) + tbl_str[#tbl_str + 1] = '] = ' + else + tbl_str[#tbl_str + 1] = indent + tbl_str[#tbl_str + 1] = loc .. '[' + tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(ind) + tbl_str[#tbl_str + 1] = '] = ' + end + + if ((type(val) == 'number') or (type(val) == 'boolean')) then + tbl_str[#tbl_str + 1] = tostring(val) + tbl_str[#tbl_str + 1] = ',\n' + elseif type(val) == 'string' then + tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(val) + tbl_str[#tbl_str + 1] = ',\n' + elseif type(val) == 'nil' then -- won't ever happen, right? + tbl_str[#tbl_str + 1] = 'nil,\n' + elseif type(val) == 'table' then + if tableshow_tbls[val] then + tbl_str[#tbl_str + 1] = tostring(val) .. ' already defined: ' .. tableshow_tbls[val] .. ',\n' + else + tableshow_tbls[val] = loc .. '[' .. mist.utils.basicSerialize(ind) .. ']' + tbl_str[#tbl_str + 1] = tostring(val) .. ' ' + tbl_str[#tbl_str + 1] = mist.utils.tableShow(val, loc .. '[' .. mist.utils.basicSerialize(ind).. ']', indent .. ' ', tableshow_tbls) + tbl_str[#tbl_str + 1] = ',\n' + end + elseif type(val) == 'function' then + if debug and debug.getinfo then + local fcnname = tostring(val) + local info = debug.getinfo(val, "S") + if info.what == "C" then + tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', C function') .. ',\n' + else + if (string.sub(info.source, 1, 2) == [[./]]) then + tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')' .. info.source) ..',\n' + else + tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')') ..',\n' + end + end + + else + tbl_str[#tbl_str + 1] = 'a function,\n' + end + else + tbl_str[#tbl_str + 1] = 'unable to serialize value type ' .. mist.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind) + end + end + + tbl_str[#tbl_str + 1] = indent .. '}' + return table.concat(tbl_str) + end +end +end + +--- Debug functions +-- @section mist.debug +do -- mist.debug scope + mist.debug = {} + + --- Dumps the global table _G. + -- This dumps the global table _G to a file in + -- the DCS\Logs directory. + -- This function requires you to disable script sanitization + -- in $DCS_ROOT\Scripts\MissionScripting.lua to access lfs and io + -- libraries. + -- @param fname + function mist.debug.dump_G(fname) + if lfs and io then + local fdir = lfs.writedir() .. [[Logs\]] .. fname + local f = io.open(fdir, 'w') + f:write(mist.utils.tableShow(_G)) + f:close() + log:info('Wrote debug data to $1', fdir) + --trigger.action.outText(errmsg, 10) + else + log:alert('insufficient libraries to run mist.debug.dump_G, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua') + --trigger.action.outText(errmsg, 10) + end + end + + --- Write debug data to file. + -- This function requires you to disable script sanitization + -- in $DCS_ROOT\Scripts\MissionScripting.lua to access lfs and io + -- libraries. + -- @param fcn + -- @param fcnVars + -- @param fname + function mist.debug.writeData(fcn, fcnVars, fname) + if lfs and io then + local fdir = lfs.writedir() .. [[Logs\]] .. fname + local f = io.open(fdir, 'w') + f:write(fcn(unpack(fcnVars, 1, table.maxn(fcnVars)))) + f:close() + log:info('Wrote debug data to $1', fdir) + local errmsg = 'mist.debug.writeData wrote data to ' .. fdir + trigger.action.outText(errmsg, 10) + else + local errmsg = 'Error: insufficient libraries to run mist.debug.writeData, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua' + log:alert(errmsg) + trigger.action.outText(errmsg, 10) + end + end + + --- Write mist databases to file. + -- This function requires you to disable script sanitization + -- in $DCS_ROOT\Scripts\MissionScripting.lua to access lfs and io + -- libraries. + function mist.debug.dumpDBs() + for DBname, DB in pairs(mist.DBs) do + if type(DB) == 'table' and type(DBname) == 'string' then + mist.debug.writeData(mist.utils.serialize, {DBname, DB}, 'mist_DBs_' .. DBname .. '.lua') + end + end + end +end + +--- 3D Vector functions +-- @section mist.vec +do -- mist.vec scope + mist.vec = {} + + --- Vector addition. + -- @tparam Vec3 vec1 first vector + -- @tparam Vec3 vec2 second vector + -- @treturn Vec3 new vector, sum of vec1 and vec2. + function mist.vec.add(vec1, vec2) + return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} + end + + --- Vector substraction. + -- @tparam Vec3 vec1 first vector + -- @tparam Vec3 vec2 second vector + -- @treturn Vec3 new vector, vec2 substracted from vec1. + function mist.vec.sub(vec1, vec2) + return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} + end + + --- Vector scalar multiplication. + -- @tparam Vec3 vec vector to multiply + -- @tparam number mult scalar multiplicator + -- @treturn Vec3 new vector multiplied with the given scalar + function mist.vec.scalarMult(vec, mult) + return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} + end + + mist.vec.scalar_mult = mist.vec.scalarMult + + --- Vector dot product. + -- @tparam Vec3 vec1 first vector + -- @tparam Vec3 vec2 second vector + -- @treturn number dot product of given vectors + function mist.vec.dp (vec1, vec2) + return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z + end + + --- Vector cross product. + -- @tparam Vec3 vec1 first vector + -- @tparam Vec3 vec2 second vector + -- @treturn Vec3 new vector, cross product of vec1 and vec2. + function mist.vec.cp(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 + + --- Vector magnitude + -- @tparam Vec3 vec vector + -- @treturn number magnitude of vector vec + function mist.vec.mag(vec) + return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 + end + + --- Unit vector + -- @tparam Vec3 vec + -- @treturn Vec3 unit vector of vec + function mist.vec.getUnitVec(vec) + local mag = mist.vec.mag(vec) + return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } + end + + --- Rotate vector. + -- @tparam Vec2 vec2 to rotoate + -- @tparam number theta + -- @return Vec2 rotated vector. + function mist.vec.rotateVec2(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 + + function mist.vec.normalize(vec3) + local mag = mist.vec.mag(vec3) + if mag ~= 0 then + return mist.vec.scalar_mult(vec3, 1.0 / mag) + end + end +end + +--- Flag functions. +-- The mist "Flag functions" are functions that are similar to Slmod functions +-- that detect a game condition and set a flag when that game condition is met. +-- +-- They are intended to be used by persons with little or no experience in Lua +-- programming, but with a good knowledge of the DCS mission editor. +-- @section mist.flagFunc +do -- mist.flagFunc scope + mist.flagFunc = {} + + --- Sets a flag if map objects are destroyed inside a zone. + -- Once this function is run, it will start a continuously evaluated process + -- that will set a flag true if map objects (such as bridges, buildings in + -- town, etc.) die (or have died) in a mission editor zone (or set of zones). + -- This will only happen once; once the flag is set true, the process ends. + -- @usage + -- -- Example vars table + -- vars = { + -- zones = { "zone1", "zone2" }, -- can also be a single string + -- flag = 3, -- number of the flag + -- stopflag = 4, -- optional number of the stop flag + -- req_num = 10, -- optional minimum amount of map objects needed to die + -- } + -- mist.flagFuncs.mapobjs_dead_zones(vars) + -- @tparam table vars table containing parameters. + function mist.flagFunc.mapobjs_dead_zones(vars) + --[[vars needs to be: +zones = table or string, +flag = number, +stopflag = number or nil, +req_num = number or nil + +AND used by function, +initial_number + +]] + -- type_tbl + local type_tbl = { + [{'zones', 'zone'}] = {'table', 'string'}, + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.mapobjs_dead_zones', type_tbl, vars) + assert(err, errmsg) + local zones = vars.zones or vars.zone + local flag = vars.flag + local stopflag = vars.stopflag or vars.stopFlag or -1 + local req_num = vars.req_num or vars.reqnum or 1 + local initial_number = vars.initial_number + + if type(zones) == 'string' then + zones = {zones} + end + + if not initial_number then + initial_number = #mist.getDeadMapObjsInZones(zones) + end + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if (#mist.getDeadMapObjsInZones(zones) - initial_number) >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + return + else + mist.scheduleFunction(mist.flagFunc.mapobjs_dead_zones, {{zones = zones, flag = flag, stopflag = stopflag, req_num = req_num, initial_number = initial_number}}, timer.getTime() + 1) + end + end + end + + --- Sets a flag if map objects are destroyed inside a polygon. + -- Once this function is run, it will start a continuously evaluated process + -- that will set a flag true if map objects (such as bridges, buildings in + -- town, etc.) die (or have died) in a polygon. + -- This will only happen once; once the flag is set true, the process ends. + -- @usage + -- -- Example vars table + -- vars = { + -- zone = { + -- [1] = mist.DBs.unitsByName['NE corner'].point, + -- [2] = mist.DBs.unitsByName['SE corner'].point, + -- [3] = mist.DBs.unitsByName['SW corner'].point, + -- [4] = mist.DBs.unitsByName['NW corner'].point + -- } + -- flag = 3, -- number of the flag + -- stopflag = 4, -- optional number of the stop flag + -- req_num = 10, -- optional minimum amount of map objects needed to die + -- } + -- mist.flagFuncs.mapobjs_dead_zones(vars) + -- @tparam table vars table containing parameters. + function mist.flagFunc.mapobjs_dead_polygon(vars) + --[[vars needs to be: +zone = table, +flag = number, +stopflag = number or nil, +req_num = number or nil + +AND used by function, +initial_number + +]] + -- type_tbl + local type_tbl = { + [{'zone', 'polyzone'}] = 'table', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.mapobjs_dead_polygon', type_tbl, vars) + assert(err, errmsg) + local zone = vars.zone or vars.polyzone + local flag = vars.flag + local stopflag = vars.stopflag or vars.stopFlag or -1 + local req_num = vars.req_num or vars.reqnum or 1 + local initial_number = vars.initial_number + + if not initial_number then + initial_number = #mist.getDeadMapObjsInPolygonZone(zone) + end + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if (#mist.getDeadMapObjsInPolygonZone(zone) - initial_number) >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + return + else + mist.scheduleFunction(mist.flagFunc.mapobjs_dead_polygon, {{zone = zone, flag = flag, stopflag = stopflag, req_num = req_num, initial_number = initial_number}}, timer.getTime() + 1) + end + end + end + + --- Sets a flag if unit(s) is/are inside a polygon. + -- @tparam table vars @{unitsInPolygonVars} + -- @usage -- set flag 11 to true as soon as any blue vehicles + -- -- are inside the polygon shape created off of the waypoints + -- -- of the group forest1 + -- mist.flagFunc.units_in_polygon { + -- units = {'[blue][vehicle]'}, + -- zone = mist.getGroupPoints('forest1'), + -- flag = 11 + -- } + function mist.flagFunc.units_in_polygon(vars) + --[[vars needs to be: +units = table, +zone = table, +flag = number, +stopflag = number or nil, +maxalt = number or nil, +interval = number or nil, +req_num = number or nil +toggle = boolean or nil +unitTableDef = table or nil +]] + -- type_tbl + local type_tbl = { + [{'units', 'unit'}] = 'table', + [{'zone', 'polyzone'}] = 'table', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + [{'maxalt', 'alt'}] = {'number', 'nil'}, + interval = {'number', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + unitTableDef = {'table', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_polygon', type_tbl, vars) + assert(err, errmsg) + local units = vars.units or vars.unit + local zone = vars.zone or vars.polyzone + local flag = vars.flag + local stopflag = vars.stopflag or vars.stopFlag or -1 + local interval = vars.interval or 1 + local maxalt = vars.maxalt or vars.alt + local req_num = vars.req_num or vars.reqnum or 1 + local toggle = vars.toggle or nil + local unitTableDef = vars.unitTableDef + + if not units.processed then + unitTableDef = mist.utils.deepCopy(units) + end + + if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts + if unitTableDef then + units = mist.makeUnitTable(unitTableDef) + end + end + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then + local num_in_zone = 0 + for i = 1, #units do + local unit = Unit.getByName(units[i]) or StaticObject.getByName(units[i]) + if unit then + local pos = unit:getPosition().p + if mist.pointInPolygon(pos, zone, maxalt) then + num_in_zone = num_in_zone + 1 + if num_in_zone >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + break + end + end + end + end + if toggle and (num_in_zone < req_num) and trigger.misc.getUserFlag(flag) > 0 then + trigger.action.setUserFlag(flag, false) + end + -- do another check in case stopflag was set true by this function + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then + mist.scheduleFunction(mist.flagFunc.units_in_polygon, {{units = units, zone = zone, flag = flag, stopflag = stopflag, interval = interval, req_num = req_num, maxalt = maxalt, toggle = toggle, unitTableDef = unitTableDef}}, timer.getTime() + interval) + end + end + + end + + --- Sets a flag if unit(s) is/are inside a trigger zone. + -- @todo document + function mist.flagFunc.units_in_zones(vars) + --[[vars needs to be: + units = table, + zones = table, + flag = number, + stopflag = number or nil, + zone_type = string or nil, + req_num = number or nil, + interval = number or nil + toggle = boolean or nil + ]] + -- type_tbl + local type_tbl = { + units = 'table', + zones = 'table', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + [{'zone_type', 'zonetype'}] = {'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + unitTableDef = {'table', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_zones', type_tbl, vars) + assert(err, errmsg) + local units = vars.units + local zones = vars.zones + local flag = vars.flag + local stopflag = vars.stopflag or vars.stopFlag or -1 + local zone_type = vars.zone_type or vars.zonetype or 'cylinder' + local req_num = vars.req_num or vars.reqnum or 1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + local unitTableDef = vars.unitTableDef + + if not units.processed then + unitTableDef = mist.utils.deepCopy(units) + end + + if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts + if unitTableDef then + units = mist.makeUnitTable(unitTableDef) + end + end + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + + local in_zone_units = mist.getUnitsInZones(units, zones, zone_type) + + if #in_zone_units >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + elseif #in_zone_units < req_num and toggle then + trigger.action.setUserFlag(flag, false) + end + -- do another check in case stopflag was set true by this function + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.units_in_zones, {{units = units, zones = zones, flag = flag, stopflag = stopflag, zone_type = zone_type, req_num = req_num, interval = interval, toggle = toggle, unitTableDef = unitTableDef}}, timer.getTime() + interval) + end + end + + end + --[[ + function mist.flagFunc.weapon_in_zones(vars) + -- borrow from suchoi surprise. While running enabled event handler that checks for weapons in zone. + -- Choice is weapon category or weapon strings. + + end +]] + --- Sets a flag if unit(s) is/are inside a moving zone. + -- @todo document + function mist.flagFunc.units_in_moving_zones(vars) + --[[vars needs to be: + units = table, + zone_units = table, + radius = number, + flag = number, + stopflag = number or nil, + zone_type = string or nil, + req_num = number or nil, + interval = number or nil + toggle = boolean or nil + ]] + -- type_tbl + local type_tbl = { + units = 'table', + [{'zone_units', 'zoneunits'}] = 'table', + radius = 'number', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + [{'zone_type', 'zonetype'}] = {'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + unitTableDef = {'table', 'nil'}, + zUnitTableDef = {'table', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_moving_zones', type_tbl, vars) + assert(err, errmsg) + local units = vars.units + local zone_units = vars.zone_units or vars.zoneunits + local radius = vars.radius + local flag = vars.flag + local stopflag = vars.stopflag or vars.stopFlag or -1 + local zone_type = vars.zone_type or vars.zonetype or 'cylinder' + local req_num = vars.req_num or vars.reqnum or 1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + local unitTableDef = vars.unitTableDef + local zUnitTableDef = vars.zUnitTableDef + + if not units.processed then + unitTableDef = mist.utils.deepCopy(units) + end + + if not zone_units.processed then + zUnitTableDef = mist.utils.deepCopy(zone_units) + end + + if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts + if unitTableDef then + units = mist.makeUnitTable(unitTableDef) + end + end + + if (zone_units.processed and zone_units.processed < mist.getLastDBUpdateTime()) or not zone_units.processed then -- run unit table short cuts + if zUnitTableDef then + zone_units = mist.makeUnitTable(zUnitTableDef) + end + + end + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + + local in_zone_units = mist.getUnitsInMovingZones(units, zone_units, radius, zone_type) + + if #in_zone_units >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + elseif #in_zone_units < req_num and toggle then + trigger.action.setUserFlag(flag, false) + end + -- do another check in case stopflag was set true by this function + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.units_in_moving_zones, {{units = units, zone_units = zone_units, radius = radius, flag = flag, stopflag = stopflag, zone_type = zone_type, req_num = req_num, interval = interval, toggle = toggle, unitTableDef = unitTableDef, zUnitTableDef = zUnitTableDef}}, timer.getTime() + interval) + end + end + + end + + --- Sets a flag if units have line of sight to each other. + -- @todo document + function mist.flagFunc.units_LOS(vars) + --[[vars needs to be: +unitset1 = table, +altoffset1 = number, +unitset2 = table, +altoffset2 = number, +flag = number, +stopflag = number or nil, +radius = number or nil, +interval = number or nil, +req_num = number or nil +toggle = boolean or nil +]] + -- type_tbl + local type_tbl = { + [{'unitset1', 'units1'}] = 'table', + [{'altoffset1', 'alt1'}] = 'number', + [{'unitset2', 'units2'}] = 'table', + [{'altoffset2', 'alt2'}] = 'number', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + interval = {'number', 'nil'}, + radius = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + unitTableDef1 = {'table', 'nil'}, + unitTableDef2 = {'table', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_LOS', type_tbl, vars) + assert(err, errmsg) + local unitset1 = vars.unitset1 or vars.units1 + local altoffset1 = vars.altoffset1 or vars.alt1 + local unitset2 = vars.unitset2 or vars.units2 + local altoffset2 = vars.altoffset2 or vars.alt2 + local flag = vars.flag + local stopflag = vars.stopflag or vars.stopFlag or -1 + local interval = vars.interval or 1 + local radius = vars.radius or math.huge + local req_num = vars.req_num or vars.reqnum or 1 + local toggle = vars.toggle or nil + local unitTableDef1 = vars.unitTableDef1 + local unitTableDef2 = vars.unitTableDef2 + + if not unitset1.processed then + unitTableDef1 = mist.utils.deepCopy(unitset1) + end + + if not unitset2.processed then + unitTableDef2 = mist.utils.deepCopy(unitset2) + end + + if (unitset1.processed and unitset1.processed < mist.getLastDBUpdateTime()) or not unitset1.processed then -- run unit table short cuts + if unitTableDef1 then + unitset1 = mist.makeUnitTable(unitTableDef1) + end + end + + if (unitset2.processed and unitset2.processed < mist.getLastDBUpdateTime()) or not unitset2.processed then -- run unit table short cuts + if unitTableDef2 then + unitset2 = mist.makeUnitTable(unitTableDef2) + end + end + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + + local unitLOSdata = mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) + + if #unitLOSdata >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + elseif #unitLOSdata < req_num and toggle then + trigger.action.setUserFlag(flag, false) + end + -- do another check in case stopflag was set true by this function + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.units_LOS, {{unitset1 = unitset1, altoffset1 = altoffset1, unitset2 = unitset2, altoffset2 = altoffset2, flag = flag, stopflag = stopflag, radius = radius, req_num = req_num, interval = interval, toggle = toggle, unitTableDef1 = unitTableDef1, unitTableDef2 = unitTableDef2}}, timer.getTime() + interval) + end + end + end + + --- Sets a flag if group is alive. + -- @todo document + function mist.flagFunc.group_alive(vars) + --[[vars +groupName +flag +toggle +interval +stopFlag + +]] + local type_tbl = { + [{'group', 'groupname', 'gp', 'groupName'}] = 'string', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive', type_tbl, vars) + assert(err, errmsg) + + local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname + local flag = vars.flag + local stopflag = vars.stopflag or vars.stopFlag or -1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true and #Group.getByName(groupName):getUnits() > 0 then + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + else + if toggle then + trigger.action.setUserFlag(flag, false) + end + end + end + + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.group_alive, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle}}, timer.getTime() + interval) + end + + end + + --- Sets a flag if group is dead. + -- @todo document + function mist.flagFunc.group_dead(vars) + local type_tbl = { + [{'group', 'groupname', 'gp', 'groupName'}] = 'string', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_dead', type_tbl, vars) + assert(err, errmsg) + + local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname + local flag = vars.flag + local stopflag = vars.stopflag or vars.stopFlag or -1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if (Group.getByName(groupName) and Group.getByName(groupName):isExist() == false) or (Group.getByName(groupName) and #Group.getByName(groupName):getUnits() < 1) or not Group.getByName(groupName) then + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + else + if toggle then + trigger.action.setUserFlag(flag, false) + end + end + end + + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.group_dead, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle}}, timer.getTime() + interval) + end + end + + --- Sets a flag if less than given percent of group is alive. + -- @todo document + function mist.flagFunc.group_alive_less_than(vars) + local type_tbl = { + [{'group', 'groupname', 'gp', 'groupName'}] = 'string', + percent = 'number', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive_less_than', type_tbl, vars) + assert(err, errmsg) + + local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname + local flag = vars.flag + local percent = vars.percent + local stopflag = vars.stopflag or vars.stopFlag or -1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then + if Group.getByName(groupName):getSize()/Group.getByName(groupName):getInitialSize() < percent/100 then + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + else + if toggle then + trigger.action.setUserFlag(flag, false) + end + end + else + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + end + end + + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.group_alive_less_than, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle, percent = percent}}, timer.getTime() + interval) + end + end + + --- Sets a flag if more than given percent of group is alive. + -- @todo document + function mist.flagFunc.group_alive_more_than(vars) + local type_tbl = { + [{'group', 'groupname', 'gp', 'groupName'}] = 'string', + percent = 'number', + flag = {'number', 'string'}, + [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive_more_than', type_tbl, vars) + assert(err, errmsg) + + local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname + local flag = vars.flag + local percent = vars.percent + local stopflag = vars.stopflag or vars.stopFlag or -1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then + if Group.getByName(groupName):getSize()/Group.getByName(groupName):getInitialSize() > percent/100 then + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + else + if toggle and trigger.misc.getUserFlag(flag) == 1 then + trigger.action.setUserFlag(flag, false) + end + end + else --- just in case + if toggle and trigger.misc.getUserFlag(flag) == 1 then + trigger.action.setUserFlag(flag, false) + end + end + end + + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.group_alive_more_than, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle, percent = percent}}, timer.getTime() + interval) + end + end + + mist.flagFunc.mapobjsDeadPolygon = mist.flagFunc.mapobjs_dead_polygon + mist.flagFunc.mapobjsDeadZones = mist.flagFunc.Mapobjs_dead_zones + mist.flagFunc.unitsInZones = mist.flagFunc.units_in_zones + mist.flagFunc.unitsInMovingZones = mist.flagFunc.units_in_moving_zones + mist.flagFunc.unitsInPolygon = mist.flagFunc.units_in_polygon + mist.flagFunc.unitsLOS = mist.flagFunc.units_LOS + mist.flagFunc.groupAlive = mist.flagFunc.group_alive + mist.flagFunc.groupDead = mist.flagFunc.group_dead + mist.flagFunc.groupAliveMoreThan = mist.flagFunc.group_alive_more_than + mist.flagFunc.groupAliveLessThan = mist.flagFunc.group_alive_less_than + +end + +--- Message functions. +-- Messaging system +-- @section mist.msg +do -- mist.msg scope + local messageList = {} + -- this defines the max refresh rate of the message box it honestly only needs to + -- go faster than this for precision timing stuff (which could be its own function) + local messageDisplayRate = 0.1 + local messageID = 0 + local displayActive = false + local displayFuncId = 0 + + local caSlots = false + local caMSGtoGroup = false + + if env.mission.groundControl then -- just to be sure? + for index, value in pairs(env.mission.groundControl) do + if type(value) == 'table' then + for roleName, roleVal in pairs(value) do + for rIndex, rVal in pairs(roleVal) do + if type(rVal) == 'number' and rVal > 0 then + caSlots = true + break + end + + end + end + elseif type(value) == 'boolean' and value == true then + caSlots = true + break + end + end + end + + local function mistdisplayV5() + --[[thoughts to improve upon + event handler based activeClients table. + display messages only when there is an update + possibly co-routine it. + ]] + end + + local function mistdisplayV4() + local activeClients = {} + + for clientId, clientData in pairs(mist.DBs.humansById) do + if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then + activeClients[clientData.groupId] = clientData.groupName + end + end + + --[[if caSlots == true and caMSGtoGroup == true then + + end]] + + + if #messageList > 0 then + if displayActive == false then + displayActive = true + end + --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') + local msgTableText = {} + local msgTableSound = {} + + for messageId, messageData in pairs(messageList) do + if messageData.displayedFor > messageData.displayTime then + messageData:remove() -- now using the remove/destroy function. + else + if messageData.displayedFor then + messageData.displayedFor = messageData.displayedFor + messageDisplayRate + end + local nextSound = 1000 + local soundIndex = 0 + + if messageData.multSound and #messageData.multSound > 0 then + for index, sData in pairs(messageData.multSound) do + if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played + nextSound = sData.time + soundIndex = index + end + end + if soundIndex ~= 0 then + messageData.multSound[soundIndex].played = true + end + end + + for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants + if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists + if messageData.text then -- text + if not msgTableText[recData] then -- create table entry for text + msgTableText[recData] = {} + msgTableText[recData].text = {} + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else -- add to table entry and adjust display time if needed + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' + else + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else + msgTableText[recData].displayTime = 1 + end + end + end + if soundIndex ~= 0 then + msgTableSound[recData] = messageData.multSound[soundIndex].file + end + end + end + + + end + end + ------- new display + + if caSlots == true and caMSGtoGroup == false then + if msgTableText.RED then + trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText.RED.text), msgTableText.RED.displayTime, true) + + end + if msgTableText.BLUE then + trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText.BLUE.text), msgTableText.BLUE.displayTime, true) + end + end + + for index, msgData in pairs(msgTableText) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, true) + end + end + --- new audio + if msgTableSound.RED then + trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound.RED) + end + if msgTableSound.BLUE then + trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound.BLUE) + end + + + for index, file in pairs(msgTableSound) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outSoundForGroup(index, file) + end + end + else + mist.removeFunction(displayFuncId) + displayActive = false + end + + end + + local typeBase = { + ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, + ['MiG-21Bis'] = {'Mig-21'}, + ['MiG-15bis'] = {'Mig-15'}, + ['FW-190D9'] = {'FW-190'}, + ['Bf-109K-4'] = {'Bf-109'}, + } + + --[[function mist.setCAGroupMSG(val) + if type(val) == 'boolean' then + caMSGtoGroup = val + return true + end + return false +end]] + + mist.message = { + + add = function(vars) + local function msgSpamFilter(recList, spamBlockOn) + for id, name in pairs(recList) do + if name == spamBlockOn then + -- log:info('already on recList') + return recList + end + end + --log:info('add to recList') + table.insert(recList, spamBlockOn) + return recList + end + + --[[ + local vars = {} + vars.text = 'Hello World' + vars.displayTime = 20 + vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} + mist.message.add(vars) + + Displays the message for all red coalition players. Players belonging to Ukraine and Georgia, and all A-10Cs on the map + + ]] + + + local new = {} + new.text = vars.text -- The actual message + new.displayTime = vars.displayTime -- How long will the message appear for + new.displayedFor = 0 -- how long the message has been displayed so far + new.name = vars.name -- ID to overwrite the older message (if it exists) Basically it replaces a message that is displayed with new text. + new.addedAt = timer.getTime() + new.update = true + + if vars.multSound and vars.multSound[1] then + new.multSound = vars.multSound + else + new.multSound = {} + end + + if vars.sound or vars.fileName then -- converts old sound file system into new multSound format + local sound = vars.sound + if vars.fileName then + sound = vars.fileName + end + new.multSound[#new.multSound+1] = {time = 0.1, file = sound} + end + + if #new.multSound > 0 then + for i, data in pairs(new.multSound) do + data.played = false + end + end + + local newMsgFor = {} -- list of all groups message displays for + for forIndex, forData in pairs(vars.msgFor) do + for list, listData in pairs(forData) do + for clientId, clientData in pairs(mist.DBs.humansById) do + forIndex = string.lower(forIndex) + if type(listData) == 'string' then + listData = string.lower(listData) + end + if (forIndex == 'coa' and (listData == string.lower(clientData.coalition) or listData == 'all')) or (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then -- + newMsgFor = msgSpamFilter(newMsgFor, clientData.groupId) -- so units dont get the same message twice if complex rules are given + --table.insert(newMsgFor, clientId) + elseif forIndex == 'unittypes' then + for typeId, typeData in pairs(listData) do + local found = false + for clientDataEntry, clientDataVal in pairs(clientData) do + if type(clientDataVal) == 'string' then + if mist.matchString(list, clientDataVal) == true or list == 'all' then + local sString = typeData + for rName, pTbl in pairs(typeBase) do -- just a quick check to see if the user may have meant something and got the specific type of the unit wrong + for pIndex, pName in pairs(pTbl) do + if mist.stringMatch(sString, pName) then + sString = rName + end + end + end + if sString == clientData.type then + found = true + newMsgFor = msgSpamFilter(newMsgFor, clientData.groupId) -- sends info oto other function to see if client is already recieving the current message. + --table.insert(newMsgFor, clientId) + end + end + end + if found == true then -- shouldn't this be elsewhere too? + break + end + end + end + + end + end + for coaData, coaId in pairs(coalition.side) do + if string.lower(forIndex) == 'coa' or string.lower(forIndex) == 'ca' then + if listData == string.lower(coaData) or listData == 'all' then + newMsgFor = msgSpamFilter(newMsgFor, coaData) + end + end + end + end + end + + if #newMsgFor > 0 then + new.msgFor = newMsgFor -- I swear its not confusing + + else + return false + end + + + if vars.name and type(vars.name) == 'string' then + for i = 1, #messageList do + if messageList[i].name then + if messageList[i].name == vars.name then + --log:info('updateMessage') + messageList[i].displayedFor = 0 + messageList[i].addedAt = timer.getTime() + messageList[i].sound = new.sound + messageList[i].text = new.text + messageList[i].msgFor = new.msgFor + messageList[i].multSound = new.multSound + messageList[i].update = true + return messageList[i].messageID + end + end + end + end + + messageID = messageID + 1 + new.messageID = messageID + + --mist.debug.writeData(mist.utils.serialize,{'msg', new}, 'newMsg.lua') + + + messageList[#messageList + 1] = new + + local mt = { __index = mist.message} + setmetatable(new, mt) + + if displayActive == false then + displayActive = true + displayFuncId = mist.scheduleFunction(mistdisplayV4, {}, timer.getTime() + messageDisplayRate, messageDisplayRate) + end + + return messageID + + end, + + remove = function(self) -- Now a self variable; the former functionality taken up by mist.message.removeById. + for i, msgData in pairs(messageList) do + if messageList[i] == self then + table.remove(messageList, i) + return true --removal successful + end + end + return false -- removal not successful this script fails at life! + end, + + removeById = function(id) -- This function is NOT passed a self variable; it is the remove by id function. + for i, msgData in pairs(messageList) do + if messageList[i].messageID == id then + table.remove(messageList, i) + return true --removal successful + end + end + return false -- removal not successful this script fails at life! + end, + } + + --[[ vars for mist.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 +]] + function mist.msgMGRS(vars) + local units = vars.units + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getMGRSString{units = units, acc = acc} + local newText + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else + -- just append to the end. + newText = text .. s + end + else + newText = s + end + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + end + + --[[ vars for mist.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 +]] + function mist.msgLL(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 = mist.getLLString{units = units, acc = acc, DMS = DMS} + local newText + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else + -- just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.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 +]] + function mist.msgBR(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 mist.getBRString + local alt = vars.alt + local metric = vars.metric + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getBRString{units = units, ref = ref, alt = alt, metric = metric} + local newText + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else + -- just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + + end + + -- basically, just sub-types of mist.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 +]] + function mist.msgBullseye(vars) + if mist.DBs.missionData.bullseye[string.lower(vars.ref)] then + vars.ref = mist.DBs.missionData.bullseye[string.lower(vars.ref)] + mist.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 +]] + function mist.msgBRA(vars) + if Unit.getByName(vars.ref) and Unit.getByName(vars.ref):isExist() == true then + vars.ref = Unit.getByName(vars.ref):getPosition().p + if not vars.alt then + vars.alt = true + end + mist.msgBR(vars) + end + end + + --[[ vars for mist.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 +]] + function mist.msgLeadingMGRS(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 = mist.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} + local newText + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else + -- just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + + + end + + --[[ vars for mist.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 +]] + function mist.msgLeadingLL(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 = mist.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} + local newText + + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else + -- just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.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 +]] + function mist.msgLeadingBR(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 mist.getBRString + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} + local newText + + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else + -- just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } + end +end + +--- Demo functions. +-- @section mist.demos +do -- mist.demos scope + mist.demos = {} + + function mist.demos.printFlightData(unit) + if unit:isExist() then + local function printData(unit, prevVel, prevE, prevTime) + local angles = mist.getAttitude(unit) + if angles then + local Heading = angles.Heading + local Pitch = angles.Pitch + local Roll = angles.Roll + local Yaw = angles.Yaw + local AoA = angles.AoA + local ClimbAngle = angles.ClimbAngle + + if not Heading then + Heading = 'NA' + else + Heading = string.format('%12.2f', mist.utils.toDegree(Heading)) + end + + if not Pitch then + Pitch = 'NA' + else + Pitch = string.format('%12.2f', mist.utils.toDegree(Pitch)) + end + + if not Roll then + Roll = 'NA' + else + Roll = string.format('%12.2f', mist.utils.toDegree(Roll)) + end + + local AoAplusYaw = 'NA' + if AoA and Yaw then + AoAplusYaw = string.format('%12.2f', mist.utils.toDegree((AoA^2 + Yaw^2)^0.5)) + end + + if not Yaw then + Yaw = 'NA' + else + Yaw = string.format('%12.2f', mist.utils.toDegree(Yaw)) + end + + if not AoA then + AoA = 'NA' + else + AoA = string.format('%12.2f', mist.utils.toDegree(AoA)) + end + + if not ClimbAngle then + ClimbAngle = 'NA' + else + ClimbAngle = string.format('%12.2f', mist.utils.toDegree(ClimbAngle)) + end + local unitPos = unit:getPosition() + local unitVel = unit:getVelocity() + local curTime = timer.getTime() + local absVel = string.format('%12.2f', mist.vec.mag(unitVel)) + + + local unitAcc = 'NA' + local Gs = 'NA' + local axialGs = 'NA' + local transGs = 'NA' + if prevVel and prevTime then + local xAcc = (unitVel.x - prevVel.x)/(curTime - prevTime) + local yAcc = (unitVel.y - prevVel.y)/(curTime - prevTime) + local zAcc = (unitVel.z - prevVel.z)/(curTime - prevTime) + + unitAcc = string.format('%12.2f', mist.vec.mag({x = xAcc, y = yAcc, z = zAcc})) + Gs = string.format('%12.2f', mist.vec.mag({x = xAcc, y = yAcc + 9.81, z = zAcc})/9.81) + axialGs = string.format('%12.2f', mist.vec.dp({x = xAcc, y = yAcc + 9.81, z = zAcc}, unitPos.x)/9.81) + transGs = string.format('%12.2f', mist.vec.mag(mist.vec.cp({x = xAcc, y = yAcc + 9.81, z = zAcc}, unitPos.x))/9.81) + end + + local E = 0.5*mist.vec.mag(unitVel)^2 + 9.81*unitPos.p.y + + local energy = string.format('%12.2e', E) + + local dEdt = 'NA' + if prevE and prevTime then + dEdt = string.format('%12.2e', (E - prevE)/(curTime - prevTime)) + end + + trigger.action.outText(string.format('%-25s', 'Heading: ') .. Heading .. ' degrees\n' .. string.format('%-25s', 'Roll: ') .. Roll .. ' degrees\n' .. string.format('%-25s', 'Pitch: ') .. Pitch + .. ' degrees\n' .. string.format('%-25s', 'Yaw: ') .. Yaw .. ' degrees\n' .. string.format('%-25s', 'AoA: ') .. AoA .. ' degrees\n' .. string.format('%-25s', 'AoA plus Yaw: ') .. AoAplusYaw .. ' degrees\n' .. string.format('%-25s', 'Climb Angle: ') .. + ClimbAngle .. ' degrees\n' .. string.format('%-25s', 'Absolute Velocity: ') .. absVel .. ' m/s\n' .. string.format('%-25s', 'Absolute Acceleration: ') .. unitAcc ..' m/s^2\n' + .. string.format('%-25s', 'Axial G loading: ') .. axialGs .. ' g\n' .. string.format('%-25s', 'Transverse G loading: ') .. transGs .. ' g\n' .. string.format('%-25s', 'Absolute G loading: ') .. Gs .. ' g\n' .. string.format('%-25s', 'Energy: ') .. energy .. ' J/kg\n' .. string.format('%-25s', 'dE/dt: ') .. dEdt ..' J/(kg*s)', 1) + return unitVel, E, curTime + end + end + + local function frameFinder(unit, prevVel, prevE, prevTime) + if unit:isExist() then + local currVel = unit:getVelocity() + if prevVel and (prevVel.x ~= currVel.x or prevVel.y ~= currVel.y or prevVel.z ~= currVel.z) or (prevTime and (timer.getTime() - prevTime) > 0.25) then + prevVel, prevE, prevTime = printData(unit, prevVel, prevE, prevTime) + end + mist.scheduleFunction(frameFinder, {unit, prevVel, prevE, prevTime}, timer.getTime() + 0.005) -- it can't go this fast, limited to the 100 times a sec check right now. + end + end + + + local curVel = unit:getVelocity() + local curTime = timer.getTime() + local curE = 0.5*mist.vec.mag(curVel)^2 + 9.81*unit:getPosition().p.y + frameFinder(unit, curVel, curE, curTime) + + end + + end + +end +do + --[[ stuff for marker panels + marker.add() add marker. Point of these functions is to simplify process and to store all mark panels added. + -- generates Id if not specified or if multiple marks created. + -- makes marks for countries by creating a mark for each client group in the country + -- can create multiple marks if needed for groups and countries. + -- adds marks to table for parsing and removing + -- Uses similar structure as messages. Big differences is it doesn't only mark to groups. + If to All, then mark is for All + if to coa mark is to coa + if to specific units, mark is to group + + + -------- + STUFF TO Check + -------- + If mark added to a group before a client joins slot is synced. + Mark made for cliet A in Slot A. Client A leaves, Client B joins in slot A. What do they see? + + May need to automate process... + + ]] + --[[ + local typeBase = { + ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, + ['MiG-21Bis'] = {'Mig-21'}, + ['MiG-15bis'] = {'Mig-15'}, + ['FW-190D9'] = {'FW-190'}, + ['Bf-109K-4'] = {'Bf-109'}, + } + + + local mId = 1337 + + mist.marker = {} + mist.marker.list = {} + local function markSpamFilter(recList, spamBlockOn) + + for id, name in pairs(recList) do + if name == spamBlockOn then + log:info('already on recList') + return recList + end + end + log:info('add to recList') + table.insert(recList, spamBlockOn) + return recList + end + + local function iterate() + mId = mId + 1 + return mId + end + + function mist.marker.add(pos, text, markFor, id) + log:warn('markerFunc') + log:info('Pos: $1, Text: $2, markFor: $3, id: $4', pos, text, markFor, id) + if not id then + + else + + end + local markType = 'all' + local markForTable = {} + if pos then + pos = mist.utils.makeVec3(pos) + end + if text and type(text) ~= string then + text = tostring(text) + else + text = '' + end + + if markFor then + if type(markFor) == 'number' then -- groupId + if mist.DBs.groupsById[markFor] then + markType = 'group' + end + elseif type(markFor) == 'string' then -- groupName + if mist.DBs.groupsByName[markFor] then + markType = 'group' + markFor = mist.DBs.groupsByName[markFor].groupId + end + elseif type(markFor) == 'table' then -- multiple groupName, country, coalition, all + markType = 'table' + log:info(markFor) + for forIndex, forData in pairs(markFor) do -- need to rethink this part and organization. Gotta be a more logical way to send messages to coa, groups, or all. + log:info(forIndex) + log:info(forData) + for list, listData in pairs(forData) do + log:info(listData) + forIndex = string.lower(forIndex) + if type(listData) == 'string' then + listData = string.lower(listData) + end + if listData == 'all' then + markType = 'all' + break + elseif (forIndex == 'coa' or forIndex == 'ca') then -- mark for coa or CA. + for name, index in pairs (coalition.side) do + if listData == string.lower(name) then + markType = 'coalition' + end + end + elseif (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then + markForTable = markSpamFilter(markForTable, clientData.groupId) + elseif forIndex == 'unittypes' then -- mark to group + -- iterate play units + for clientId, clientData in pairs(mist.DBs.humansById) do + for typeId, typeData in pairs(listData) do + log:info(typeData) + local found = false + if list == 'all' or clientData.coalition and type(clientData.coalition) == 'string' and mist.stringMatch(clientData.coalition, list) then + if mist.matchString(typeData, clientData.type) then + found = true + else + -- check other known names for aircraft + end + end + if found == true then + markForTable = markSpamFilter(markForTable, clientData.groupId) -- sends info to other function to see if client is already recieving the current message. + end + for clientDataEntry, clientDataVal in pairs(clientData) do + if type(clientDataVal) == 'string' then + + if mist.matchString(list, clientDataVal) == true or list == 'all' then + local sString = typeData + for rName, pTbl in pairs(typeBase) do -- just a quick check to see if the user may have meant something and got the specific type of the unit wrong + for pIndex, pName in pairs(pTbl) do + if mist.stringMatch(sString, pName) then + sString = rName + end + end + end + if mist.stringMatch(sString, clientData.type) then + found = true + markForTable = markSpamFilter(markForTable, clientData.groupId) -- sends info oto other function to see if client is already recieving the current message. + --table.insert(newMsgFor, clientId) + end + end + end + if found == true then -- shouldn't this be elsewhere too? + break + end + end + end + + end + end + end + end + end + else + markType = 'all' + end + + + + + + + if markType ~= 'table' then + local newId = iterate() + local data = {markId = newId, text = text, pos = pos, markType = markType, markFor = markFor} + + -- create marks + if markType == 'coa' then + trigger.action.markToCoalition(newId, text, pos, markFor) + elseif markType == 'group' then + trigger.action.markToGroup(newId, text, pos, markFor) + else + trigger.action.markToAll(iterate(), text, pos) + end + table.insert(mist.marker.list, data) -- add to the DB + else + if #markForTable > 0 then + log:info('iterate') + for i = 1, #markForTable do + local newId = iterate() + local data = {markId = newId, text = text, pos = pos, markFor = markFor} + log:info(data) + table.insert(mist.marker.list, data) + trigger.action.markToGroup(newId, text, pos, markForTable[i]) + end + end + end + + + + end + + function mist.marker.remove(id) + for i, data in pairs(mist.marker.list) do + if id == data.markId then + trigger.action.removeMark(id) + end + end + end + + function mist.marker.get(id) + + end + + function mist.marker.coords(pos, cType, markFor, id) -- wrapper function to just display coordinates of a specific format at location + + + end + ]] +end +--- Time conversion functions. +-- @section mist.time +do -- mist.time scope + mist.time = {} + -- returns a string for specified military time + -- theTime is optional + -- if present current time in mil time is returned + -- if number or table the time is converted into mil tim + function mist.time.convertToSec(timeTable) + + local timeInSec = 0 + if timeTable and type(timeTable) == 'number' then + timeInSec = timeTable + elseif timeTable and type(timeTable) == 'table' and (timeTable.d or timeTable.h or timeTable.m or timeTable.s) then + if timeTable.d and type(timeTable.d) == 'number' then + timeInSec = timeInSec + (timeTable.d*86400) + end + if timeTable.h and type(timeTable.h) == 'number' then + timeInSec = timeInSec + (timeTable.h*3600) + end + if timeTable.m and type(timeTable.m) == 'number' then + timeInSec = timeInSec + (timeTable.m*60) + end + if timeTable.s and type(timeTable.s) == 'number' then + timeInSec = timeInSec + timeTable.s + end + + end + return timeInSec + end + + function mist.time.getDHMS(timeInSec) + if timeInSec and type(timeInSec) == 'number' then + local tbl = {d = 0, h = 0, m = 0, s = 0} + if timeInSec > 86400 then + while timeInSec > 86400 do + tbl.d = tbl.d + 1 + timeInSec = timeInSec - 86400 + end + end + if timeInSec > 3600 then + while timeInSec > 3600 do + tbl.h = tbl.h + 1 + timeInSec = timeInSec - 3600 + end + end + if timeInSec > 60 then + while timeInSec > 60 do + tbl.m = tbl.m + 1 + timeInSec = timeInSec - 60 + end + end + tbl.s = timeInSec + return tbl + else + log:error("Didn't recieve number") + return + end + end + + function mist.getMilString(theTime) + local timeInSec = 0 + if theTime then + timeInSec = mist.time.convertToSec(theTime) + else + timeInSec = mist.utils.round(timer.getAbsTime(), 0) + end + + local DHMS = mist.time.getDHMS(timeInSec) + + return tostring(string.format('%02d', DHMS.h) .. string.format('%02d',DHMS.m)) + end + + function mist.getClockString(theTime, hour) + local timeInSec = 0 + if theTime then + timeInSec = mist.time.convertToSec(theTime) + else + timeInSec = mist.utils.round(timer.getAbsTime(), 0) + end + local DHMS = mist.time.getDHMS(timeInSec) + if hour then + if DHMS.h > 12 then + DHMS.h = DHMS.h - 12 + return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s) .. ' PM') + else + return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s) .. ' AM') + end + else + return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s)) + end + end + + -- returns the date in string format + -- both variables optional + -- first val returns with the month as a string + -- 2nd val defins if it should be written the American way or the wrong way. + function mist.time.getDate(convert) + local cal = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -- + local date = {} + + if not env.mission.date then -- Not likely to happen. Resaving mission auto updates this to remove it. + date.d = 0 + date.m = 6 + date.y = 2011 + else + date.d = env.mission.date.Day + date.m = env.mission.date.Month + date.y = env.mission.date.Year + end + local start = 86400 + local timeInSec = mist.utils.round(timer.getAbsTime()) + if convert and type(convert) == 'number' then + timeInSec = convert + end + if timeInSec > 86400 then + while start < timeInSec do + if date.d >= cal[date.m] then + if date.m == 2 and date.d == 28 then -- HOLY COW we can edit years now. Gotta re-add this! + if date.y % 4 == 0 and date.y % 100 == 0 and date.y % 400 ~= 0 or date.y % 4 > 0 then + date.m = date.m + 1 + date.d = 0 + end + --date.d = 29 + else + date.m = date.m + 1 + date.d = 0 + end + end + if date.m == 13 then + date.m = 1 + date.y = date.y + 1 + end + date.d = date.d + 1 + start = start + 86400 + + end + end + return date + end + + function mist.time.relativeToStart(time) + if type(time) == 'number' then + return time - timer.getTime0() + end + end + + function mist.getDateString(rtnType, murica, oTime) -- returns date based on time + local word = {'January', 'Feburary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' } -- 'etc + local curTime = 0 + if oTime then + curTime = oTime + else + curTime = mist.utils.round(timer.getAbsTime()) + end + local tbl = mist.time.getDate(curTime) + + if rtnType then + if murica then + return tostring(word[tbl.m] .. ' ' .. tbl.d .. ' ' .. tbl.y) + else + return tostring(tbl.d .. ' ' .. word[tbl.m] .. ' ' .. tbl.y) + end + else + if murica then + return tostring(tbl.m .. '.' .. tbl.d .. '.' .. tbl.y) + else + return tostring(tbl.d .. '.' .. tbl.m .. '.' .. tbl.y) + end + end + end + --WIP + function mist.time.milToGame(milString, rtnType) --converts a military time. By default returns the abosolute time that event would occur. With optional value it returns how many seconds from time of call till that time. + local curTime = mist.utils.round(timer.getAbsTime()) + local milTimeInSec = 0 + + if milString and type(milString) == 'string' and string.len(milString) >= 4 then + local hr = tonumber(string.sub(milString, 1, 2)) + local mi = tonumber(string.sub(milString, 3)) + milTimeInSec = milTimeInSec + (mi*60) + (hr*3600) + elseif milString and type(milString) == 'table' and (milString.d or milString.h or milString.m or milString.s) then + milTimeInSec = mist.time.convertToSec(milString) + end + + local startTime = timer.getTime0() + local daysOffset = 0 + if startTime > 86400 then + daysOffset = mist.utils.round(startTime/86400) + if daysOffset > 0 then + milTimeInSec = milTimeInSec *daysOffset + end + end + + if curTime > milTimeInSec then + milTimeInSec = milTimeInSec + 86400 + end + if rtnType then + milTimeInSec = milTimeInSec - startTime + end + return milTimeInSec + end + + +end + +--- Group task functions. +-- @section tasks +do -- group tasks scope + mist.ground = {} + mist.fixedWing = {} + mist.heli = {} + mist.air = {} + mist.air.fixedWing = {} + mist.air.heli = {} + mist.ship = {} + + --- Tasks group to follow a route. + -- This sets the mission task for the given group. + -- Any wrapped actions inside the path (like enroute + -- tasks) will be executed. + -- @tparam Group group group to task. + -- @tparam table path containing + -- points defining a route. + function mist.goRoute(group, path) + local misTask = { + id = 'Mission', + params = { + route = { + points = mist.utils.deepCopy(path), + }, + }, + } + if type(group) == 'string' then + group = Group.getByName(group) + end + if group then + local groupCon = group:getController() + if groupCon then + --log:warn(misTask) + groupCon:setTask(misTask) + return true + end + end + return false + end + + -- same as getGroupPoints but returns speed and formation type along with vec2 of point} + function mist.getGroupRoute(groupIdent, task) + -- refactor to search by groupId and allow groupId and groupName as inputs + local gpId = groupIdent + if mist.DBs.MEgroupsByName[groupIdent] then + gpId = mist.DBs.MEgroupsByName[groupIdent].groupId + else + log:error('$1 not found in mist.DBs.MEgroupsByName', groupIdent) + end + + for coa_name, coa_data in pairs(env.mission.coalition) do + if 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 env.mission.version > 7 and env.mission.version < 19 then + routeData.name = env.getValueDictByKey(point.name) + else + routeData.name = point.name + end + 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 + log:error('Group route not defined in mission editor for groupId: $1', gpId) + 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 + + -- function mist.ground.buildPath() end -- ???? + + function mist.ground.patrolRoute(vars) + --log:info('patrol') + 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 = mist.getGroupRoute(useGroupRoute) + end + else + useRoute = vars.route + local posStart = mist.getLeadPos(gpData) + useRoute[1] = mist.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 = mist.getLeadPos(gpData) + + + useRoute[#useRoute + 1] = mist.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] = mist.ground.buildWP(tempRoute[i], tempForm, tempSpeed) + end + + if pType and string.lower(pType) == 'doubleback' then + local curRoute = mist.utils.deepCopy(useRoute) + for i = #curRoute, 2, -1 do + useRoute[#useRoute + 1] = mist.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] = 'mist.ground.patrolRoute(' + cTask3[#cTask3 + 1] = mist.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 + log:info(useRoute) + mist.goRoute(gpData, useRoute) + + return + end + + function mist.ground.patrol(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 + + mist.ground.patrolRoute(vars) + + return + end + + -- No longer accepts path + function mist.ground.buildWP(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 = mist.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 + + function mist.fixedWing.buildWP(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 altType == 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or altType == '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 = mist.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 + + function mist.heli.buildWP(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 altType == 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or altType == '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 = mist.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 + + -- need to return a Vec3 or Vec2? + function mist.getRandPointInCircle(p, r, innerRadius, maxA, minA) + local point = mist.utils.makeVec3(p) + local theta = 2*math.pi*math.random() + local radius = r or 1000 + local minR = innerRadius or 0 + if maxA and not minA then + theta = math.rad(math.random(0, maxA - math.random())) + elseif maxA and minA and minA < maxA then + theta = math.rad(math.random(minA, maxA) - math.random()) + end + local rad = math.random() + math.random() + if rad > 1 then + rad = 2 - rad + end + + local radMult + if minR and minR <= radius then + --radMult = (radius - innerRadius)*rad + innerRadius + radMult = radius * math.sqrt((minR^2 + (radius^2 - minR^2) * math.random()) / radius^2) + else + radMult = radius*rad + 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 + + function mist.getRandomPointInZone(zoneName, innerRadius, maxA, minA) + if type(zoneName) == 'string' then + local zone = mist.DBs.zonesByName[zoneName] + if zone.type and zone.type == 2 then + return mist.getRandomPointInPoly(zone.vertices) + else + return mist.getRandPointInCircle(zone.point, zone.radius, innerRadius, maxA, minA) + end + end + return false + end + + function mist.getRandomPointInPoly(zone) + --env.info('Zone Size: '.. #zone) + local avg = mist.getAvgPoint(zone) + --log:warn(avg) + local radius = 0 + local minR = math.huge + local newCoord = {} + for i = 1, #zone do + if mist.utils.get2DDist(avg, zone[i]) > radius then + radius = mist.utils.get2DDist(avg, zone[i]) + end + if mist.utils.get2DDist(avg, zone[i]) < minR then + minR = mist.utils.get2DDist(avg, zone[i]) + end + end + --log:warn('Radius: $1', radius) + --log:warn('minR: $1', minR) + local lSpawnPos = {} + for j = 1, 100 do + newCoord = mist.getRandPointInCircle(avg, radius) + if mist.pointInPolygon(newCoord, zone) then + break + end + if j == 100 then + newCoord = mist.getRandPointInCircle(avg, 50000) + log:warn("Failed to find point in poly; Giving random point from center of the poly") + end + end + return newCoord + end + + function mist.groupToRandomPoint(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 mist.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 = mist.getRandPointInCircle(point, radius, innerRadius) + + local offset = {} + local posStart = mist.getLeadPos(group) + if posStart then + offset.x = mist.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) + offset.z = mist.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) + path[#path + 1] = mist.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] = mist.ground.buildWP({x = posStart.x + 11, z = posStart.z + 11}, 'off_road', speed) + path[#path + 1] = mist.ground.buildWP(posStart, 'on_road', speed) + path[#path + 1] = mist.ground.buildWP(offset, 'on_road', speed) + else + path[#path + 1] = mist.ground.buildWP({x = posStart.x + 25, z = posStart.z + 25}, form, speed) + end + end + path[#path + 1] = mist.ground.buildWP(offset, form, speed) + path[#path + 1] = mist.ground.buildWP(rndCoord, form, speed) + + mist.goRoute(group, path) + + return + end + + function mist.groupRandomDistSelf(gpData, dist, form, heading, speed, disableRoads) + local pos = mist.getLeadPos(gpData) + local fakeZone = {} + fakeZone.radius = dist or math.random(300, 1000) + fakeZone.point = {x = pos.x, y = pos.y, z = pos.z} + mist.groupToRandomZone(gpData, fakeZone, form, heading, speed, disableRoads) + + return + end + + function mist.groupToRandomZone(gpData, zone, form, heading, speed, disableRoads) + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + if type(zone) == 'string' then + zone = mist.DBs.zonesByName[zone] + elseif type(zone) == 'table' and not zone.radius then + zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] + end + + if speed then + speed = mist.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.radius = zone.radius + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.point = mist.utils.zoneToVec3(zone) + vars.disableRoads = disableRoads + mist.groupToRandomPoint(vars) + + return + end + + function mist.isTerrainValid(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(typeData) then + table.insert(typeConverted, constId) + end + end + end + end + for validIndex, validData in pairs(typeConverted) do + if land.getSurfaceType(coord) == land.SurfaceType[validData] then + log:info('Surface is : $1', validData) + return true + end + end + return false + end + + function mist.terrainHeightDiff(coord, searchSize) + local samples = {} + local searchRadius = 5 + if searchSize then + searchRadius = searchSize + end + if type(coord) == 'string' then + coord = mist.utils.zoneToVec3(coord) + end + + coord = mist.utils.makeVec2(coord) + + samples[#samples + 1] = land.getHeight(coord) + for i = 0, 360, 30 do + samples[#samples + 1] = land.getHeight({x = (coord.x + (math.sin(math.rad(i))*searchRadius)), y = (coord.y + (math.cos(math.rad(i))*searchRadius))}) + if searchRadius >= 20 then -- if search radius is sorta large, take a sample halfway between center and outer edge + samples[#samples + 1] = land.getHeight({x = (coord.x + (math.sin(math.rad(i))*(searchRadius/2))), y = (coord.y + (math.cos(math.rad(i))*(searchRadius/2)))}) + end + end + local tMax, tMin = 0, 1000000 + for index, height in pairs(samples) do + if height > tMax then + tMax = height + end + if height < tMin then + tMin = height + end + end + return mist.utils.round(tMax - tMin, 2) + end + + function mist.groupToPoint(gpData, point, form, heading, speed, useRoads) + if type(point) == 'string' then + point = mist.DBs.zonesByName[point] + end + if speed then + speed = mist.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.disableRoads = useRoads + vars.point = mist.utils.zoneToVec3(point) + mist.groupToRandomPoint(vars) + + return + end + + function mist.getLeadPos(group) + if type(group) == 'string' then -- group name + group = Group.getByName(group) + end + + local units = group:getUnits() + + local leader = units[1] + if Unit.getLife(leader) == 0 or not Unit.isExist(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 Unit.isExist(unit) and ind < lowestInd then + lowestInd = ind + return unit:getPosition().p + end + end + end + if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... + return leader:getPosition().p + end + end + +end + +--- Database tables. +-- @section mist.DBs + +--- Mission data +-- @table mist.DBs.missionData +-- @field startTime mission start time +-- @field theatre mission theatre/map e.g. Caucasus +-- @field version mission version +-- @field files mission resources + +--- Tables used as parameters. +-- @section varTables + +--- mist.flagFunc.units_in_polygon parameter table. +-- @table unitsInPolygonVars +-- @tfield table unit name table @{UnitNameTable}. +-- @tfield table zone table defining a polygon. +-- @tfield number|string flag flag to set to true. +-- @tfield[opt] number|string stopflag if set to true the function +-- will stop evaluating. +-- @tfield[opt] number maxalt maximum altitude (MSL) for the +-- polygon. +-- @tfield[opt] number req_num minimum number of units that have +-- to be in the polygon. +-- @tfield[opt] number interval sets the interval for +-- checking if units are inside of the polygon in seconds. Default: 1. +-- @tfield[opt] boolean toggle switch the flag to false if required +-- conditions are not met. Default: false. +-- @tfield[opt] table unitTableDef +--- Logger class. +-- @type mist.Logger +do -- mist.Logger scope + mist.Logger = {} + + --- parses text and substitutes keywords with values from given array. + -- @param text string containing keywords to substitute with values + -- or a variable. + -- @param ... variables to use for substitution in string. + -- @treturn string new string with keywords substituted or + -- value of variable as string. + local function formatText(text, ...) + if type(text) ~= 'string' then + if type(text) == 'table' then + text = mist.utils.oneLineSerialize(text) + else + text = tostring(text) + end + else + for index,value in ipairs(arg) do + -- TODO: check for getmetatabel(value).__tostring + if type(value) == 'table' then + value = mist.utils.oneLineSerialize(value) + else + value = tostring(value) + end + text = text:gsub('$' .. index, value) + end + end + local fName = nil + local cLine = nil + if debug then + local dInfo = debug.getinfo(3) + fName = dInfo.name + cLine = dInfo.currentline + -- local fsrc = dinfo.short_src + --local fLine = dInfo.linedefined + end + if fName and cLine then + return fName .. '|' .. cLine .. ': ' .. text + elseif cLine then + return cLine .. ': ' .. text + else + return ' ' .. text + end + end + + local function splitText(text) + local tbl = {} + while text:len() > 4000 do + local sub = text:sub(1, 4000) + text = text:sub(4001) + table.insert(tbl, sub) + end + table.insert(tbl, text) + return tbl + end + + --- Creates a new logger. + -- Each logger has it's own tag and log level. + -- @tparam string tag tag which appears at the start of + -- every log line produced by this logger. + -- @tparam[opt] number|string level the log level defines which messages + -- will be logged and which will be omitted. Log level 3 beeing the most verbose + -- and 0 disabling all output. This can also be a string. Allowed strings are: + -- "none" (0), "error" (1), "warning" (2) and "info" (3). + -- @usage myLogger = mist.Logger:new("MyScript") + -- @usage myLogger = mist.Logger:new("MyScript", 2) + -- @usage myLogger = mist.Logger:new("MyScript", "info") + -- @treturn mist.Logger + function mist.Logger:new(tag, level) + local l = {tag = tag} + setmetatable(l, self) + self.__index = self + l:setLevel(level) + return l + end + + --- Sets the level of verbosity for this logger. + -- @tparam[opt] number|string level the log level defines which messages + -- will be logged and which will be omitted. Log level 3 beeing the most verbose + -- and 0 disabling all output. This can also[ be a string. Allowed strings are: + -- "none" (0), "error" (1), "warning" (2) and "info" (3). + -- @usage myLogger:setLevel("info") + -- @usage -- log everything + --myLogger:setLevel(3) + function mist.Logger:setLevel(level) + if not level then + self.level = 2 + else + if type(level) == 'string' then + if level == 'none' or level == 'off' then + self.level = 0 + elseif level == 'error' then + self.level = 1 + elseif level == 'warning' or level == 'warn' then + self.level = 2 + elseif level == 'info' then + self.level = 3 + end + elseif type(level) == 'number' then + self.level = level + else + self.level = 2 + end + end + end + + --- Logs error and shows alert window. + -- This logs an error to the dcs.log and shows a popup window, + -- pausing the simulation. This works always even if logging is + -- disabled by setting a log level of "none" or 0. + -- @tparam string text the text with keywords to substitute. + -- @param ... variables to be used for substitution. + -- @usage myLogger:alert("Shit just hit the fan! WEEEE!!!11") + function mist.Logger:alert(text, ...) + text = formatText(text, unpack(arg)) + if text:len() > 4000 then + local texts = splitText(text) + for i = 1, #texts do + if i == 1 then + env.error(self.tag .. '|' .. texts[i], true) + else + env.error(texts[i]) + end + end + else + env.error(self.tag .. '|' .. text, true) + end + end + + --- Logs a message, disregarding the log level. + -- @tparam string text the text with keywords to substitute. + -- @param ... variables to be used for substitution. + -- @usage myLogger:msg("Always logged!") + function mist.Logger:msg(text, ...) + text = formatText(text, unpack(arg)) + if text:len() > 4000 then + local texts = splitText(text) + for i = 1, #texts do + if i == 1 then + env.info(self.tag .. '|' .. texts[i]) + else + env.info(texts[i]) + end + end + else + env.info(self.tag .. '|' .. text) + end + end + + --- Logs an error. + -- logs a message prefixed with this loggers tag to dcs.log as + -- long as at least the "error" log level (1) is set. + -- @tparam string text the text with keywords to substitute. + -- @param ... variables to be used for substitution. + -- @usage myLogger:error("Just an error!") + -- @usage myLogger:error("Foo is $1 instead of $2", foo, "bar") + function mist.Logger:error(text, ...) + if self.level >= 1 then + text = formatText(text, unpack(arg)) + if text:len() > 4000 then + local texts = splitText(text) + for i = 1, #texts do + if i == 1 then + env.error(self.tag .. '|' .. texts[i]) + else + env.error(texts[i]) + end + end + else + env.error(self.tag .. '|' .. text, mistSettings.errorPopup) + end + end + end + + --- Logs a warning. + -- logs a message prefixed with this loggers tag to dcs.log as + -- long as at least the "warning" log level (2) is set. + -- @tparam string text the text with keywords to substitute. + -- @param ... variables to be used for substitution. + -- @usage myLogger:warn("Mother warned you! Those $1 from the interwebs are $2", {"geeks", 1337}) + function mist.Logger:warn(text, ...) + if self.level >= 2 then + text = formatText(text, unpack(arg)) + if text:len() > 4000 then + local texts = splitText(text) + for i = 1, #texts do + if i == 1 then + env.warning(self.tag .. '|' .. texts[i]) + else + env.warning(texts[i]) + end + end + else + env.warning(self.tag .. '|' .. text, mistSettings.warnPopup) + end + end + end + + --- Logs a info. + -- logs a message prefixed with this loggers tag to dcs.log as + -- long as the highest log level (3) "info" is set. + -- @tparam string text the text with keywords to substitute. + -- @param ... variables to be used for substitution. + -- @see warn + function mist.Logger:info(text, ...) + if self.level >= 3 then + text = formatText(text, unpack(arg)) + if text:len() > 4000 then + local texts = splitText(text) + for i = 1, #texts do + if i == 1 then + env.info(self.tag .. '|' .. texts[i]) + else + env.info(texts[i]) + end + end + else + env.info(self.tag .. '|' .. text, mistSettings.infoPopup) + end + end + end + +end + + +-- initialize mist +mist.init() +env.info(('Mist version ' .. mist.majorVersion .. '.' .. mist.minorVersion .. '.' .. mist.build .. ' loaded.')) + +-- vim: noet:ts=2:sw=2 From fb76ec365609441c9846b0da95e3f828cc2eb76c Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Fri, 9 Apr 2021 14:14:52 -0600 Subject: [PATCH 08/16] Remove extra file --- mist_4_5_97.lua | 7628 ----------------------------------------------- 1 file changed, 7628 deletions(-) delete mode 100644 mist_4_5_97.lua diff --git a/mist_4_5_97.lua b/mist_4_5_97.lua deleted file mode 100644 index 1267359..0000000 --- a/mist_4_5_97.lua +++ /dev/null @@ -1,7628 +0,0 @@ ---[[-- -MIST Mission Scripting Tools. -## Description: -MIssion Scripting Tools (MIST) is a collection of Lua functions -and databases that is intended to be a supplement to the standard -Lua functions included in the simulator scripting engine. - -MIST functions and databases provide ready-made solutions to many common -scripting tasks and challenges, enabling easier scripting and saving -mission scripters time. The table mist.flagFuncs contains a set of -Lua functions (that are similar to Slmod functions) that do not -require detailed Lua knowledge to use. - -However, the majority of MIST does require knowledge of the Lua language, -and, if you are going to utilize these components of MIST, it is necessary -that you read the Simulator Scripting Engine guide on the official ED wiki. - -## Links: - -ED Forum Thread: - -##Github: - -Development - -Official Releases - -@script MIST -@author Speed -@author Grimes -@author lukrop -]] -mist = {} - --- don't change these -mist.majorVersion = 4 -mist.minorVersion = 5 -mist.build = 97 - --- forward declaration of log shorthand -local log - -local mistSettings = { - errorPopup = false, -- errors printed by mist logger will create popup warning you - warnPopup = false, - infoPopup = false, - logLevel = 'warn', -} - -do -- the main scope - local coroutines = {} - - local tempSpawnedUnits = {} -- birth events added here - local tempSpawnedGroups = {} - local tempSpawnGroupsCounter = 0 - - local mistAddedObjects = {} -- mist.dynAdd unit data added here - local mistAddedGroups = {} -- mist.dynAdd groupdata added here - local writeGroups = {} - local lastUpdateTime = 0 - - local updateAliveUnitsCounter = 0 - local updateTenthSecond = 0 - - local mistGpId = 7000 - local mistUnitId = 7000 - local mistDynAddIndex = {[' air '] = 0, [' hel '] = 0, [' gnd '] = 0, [' bld '] = 0, [' static '] = 0, [' shp '] = 0} - - local scheduledTasks = {} - local taskId = 0 - local idNum = 0 - - mist.nextGroupId = 1 - mist.nextUnitId = 1 - - local dbLog - - local function initDBs() -- mist.DBs scope - mist.DBs = {} - - mist.DBs.missionData = {} - if env.mission then - - mist.DBs.missionData.startTime = env.mission.start_time - mist.DBs.missionData.theatre = env.mission.theatre - mist.DBs.missionData.version = env.mission.version - mist.DBs.missionData.files = {} - if type(env.mission.resourceCounter) == 'table' then - for fIndex, fData in pairs (env.mission.resourceCounter) do - mist.DBs.missionData.files[#mist.DBs.missionData.files + 1] = mist.utils.deepCopy(fIndex) - end - end - -- if we add more coalition specific data then bullsye should be categorized by coaliton. For now its just the bullseye table - mist.DBs.missionData.bullseye = {} - end - - mist.DBs.zonesByName = {} - mist.DBs.zonesByNum = {} - - - if env.mission.triggers and env.mission.triggers.zones then - for zone_ind, zone_data in pairs(env.mission.triggers.zones) do - if type(zone_data) == 'table' then - local zone = mist.utils.deepCopy(zone_data) - zone.point = {} -- point is used by SSE - zone.point.x = zone_data.x - zone.point.y = 0 - zone.point.z = zone_data.y - - mist.DBs.zonesByName[zone_data.name] = zone - mist.DBs.zonesByNum[#mist.DBs.zonesByNum + 1] = mist.utils.deepCopy(zone) --[[deepcopy so that the zone in zones_by_name and the zone in - zones_by_num se are different objects.. don't want them linked.]] - end - end - end - - mist.DBs.navPoints = {} - mist.DBs.units = {} - --Build mist.db.units and mist.DBs.navPoints - for coa_name_miz, coa_data in pairs(env.mission.coalition) do - local coa_name = coa_name_miz - if string.lower(coa_name_miz) == 'neutrals' then - coa_name = 'neutral' - end - if type(coa_data) == 'table' then - mist.DBs.units[coa_name] = {} - - if coa_data.bullseye then - mist.DBs.missionData.bullseye[coa_name] = {} - mist.DBs.missionData.bullseye[coa_name].x = coa_data.bullseye.x - mist.DBs.missionData.bullseye[coa_name].y = coa_data.bullseye.y - end - -- build nav points DB - mist.DBs.navPoints[coa_name] = {} - if coa_data.nav_points then --navpoints - --mist.debug.writeData (mist.utils.serialize,{'NavPoints',coa_data.nav_points}, 'NavPoints.txt') - for nav_ind, nav_data in pairs(coa_data.nav_points) do - - if type(nav_data) == 'table' then - mist.DBs.navPoints[coa_name][nav_ind] = mist.utils.deepCopy(nav_data) - - mist.DBs.navPoints[coa_name][nav_ind].name = nav_data.callsignStr -- name is a little bit more self-explanatory. - mist.DBs.navPoints[coa_name][nav_ind].point = {} -- point is used by SSE, support it. - mist.DBs.navPoints[coa_name][nav_ind].point.x = nav_data.x - mist.DBs.navPoints[coa_name][nav_ind].point.y = 0 - mist.DBs.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) - if cntry_data.id and country.names[cntry_data.id] then - countryName = string.lower(country.names[cntry_data.id]) - end - mist.DBs.units[coa_name][countryName] = {} - mist.DBs.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! - - mist.DBs.units[coa_name][countryName][category] = {} - - for group_num, group_data in pairs(obj_type_data.group) do - - if group_data and group_data.units and type(group_data.units) == 'table' then --making sure again- this is a valid group - - mist.DBs.units[coa_name][countryName][category][group_num] = {} - local groupName = group_data.name - if env.mission.version > 7 and env.mission.version < 19 then - groupName = env.getValueDictByKey(groupName) - end - mist.DBs.units[coa_name][countryName][category][group_num].groupName = groupName - mist.DBs.units[coa_name][countryName][category][group_num].groupId = group_data.groupId - mist.DBs.units[coa_name][countryName][category][group_num].category = category - mist.DBs.units[coa_name][countryName][category][group_num].coalition = coa_name - mist.DBs.units[coa_name][countryName][category][group_num].country = countryName - mist.DBs.units[coa_name][countryName][category][group_num].countryId = cntry_data.id - mist.DBs.units[coa_name][countryName][category][group_num].startTime = group_data.start_time - mist.DBs.units[coa_name][countryName][category][group_num].task = group_data.task - mist.DBs.units[coa_name][countryName][category][group_num].hidden = group_data.hidden - - mist.DBs.units[coa_name][countryName][category][group_num].units = {} - - mist.DBs.units[coa_name][countryName][category][group_num].radioSet = group_data.radioSet - mist.DBs.units[coa_name][countryName][category][group_num].uncontrolled = group_data.uncontrolled - mist.DBs.units[coa_name][countryName][category][group_num].frequency = group_data.frequency - mist.DBs.units[coa_name][countryName][category][group_num].modulation = group_data.modulation - - for unit_num, unit_data in pairs(group_data.units) do - local units_tbl = mist.DBs.units[coa_name][countryName][category][group_num].units --pointer to the units table for this group - - units_tbl[unit_num] = {} - if env.mission.version > 7 and env.mission.version < 19 then - units_tbl[unit_num].unitName = env.getValueDictByKey(unit_data.name) - else - units_tbl[unit_num].unitName = unit_data.name - end - units_tbl[unit_num].type = unit_data.type - units_tbl[unit_num].skill = unit_data.skill --will be nil for statics - units_tbl[unit_num].unitId = unit_data.unitId - units_tbl[unit_num].category = category - units_tbl[unit_num].coalition = coa_name - units_tbl[unit_num].country = countryName - units_tbl[unit_num].countryId = cntry_data.id - units_tbl[unit_num].heading = unit_data.heading - units_tbl[unit_num].playerCanDrive = unit_data.playerCanDrive - units_tbl[unit_num].alt = unit_data.alt - units_tbl[unit_num].alt_type = unit_data.alt_type - units_tbl[unit_num].speed = unit_data.speed - units_tbl[unit_num].livery_id = unit_data.livery_id - if unit_data.point then --ME currently does not work like this, but it might one day - units_tbl[unit_num].point = unit_data.point - else - units_tbl[unit_num].point = {} - units_tbl[unit_num].point.x = unit_data.x - units_tbl[unit_num].point.y = unit_data.y - end - units_tbl[unit_num].x = unit_data.x - units_tbl[unit_num].y = unit_data.y - - units_tbl[unit_num].callsign = unit_data.callsign - units_tbl[unit_num].onboard_num = unit_data.onboard_num - units_tbl[unit_num].hardpoint_racks = unit_data.hardpoint_racks - units_tbl[unit_num].psi = unit_data.psi - - - units_tbl[unit_num].groupName = groupName - units_tbl[unit_num].groupId = group_data.groupId - - if unit_data.AddPropAircraft then - units_tbl[unit_num].AddPropAircraft = unit_data.AddPropAircraft - end - - if category == 'static' then - units_tbl[unit_num].categoryStatic = unit_data.category - units_tbl[unit_num].shape_name = unit_data.shape_name - if unit_data.mass then - units_tbl[unit_num].mass = unit_data.mass - end - - if unit_data.canCargo then - units_tbl[unit_num].canCargo = unit_data.canCargo - end - end - - end --for unit_num, unit_data in pairs(group_data.units) do - end --if group_data and group_data.units then - 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 --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 - - mist.DBs.unitsByName = {} - mist.DBs.unitsById = {} - mist.DBs.unitsByCat = {} - - mist.DBs.unitsByCat.helicopter = {} -- adding default categories - mist.DBs.unitsByCat.plane = {} - mist.DBs.unitsByCat.ship = {} - mist.DBs.unitsByCat.static = {} - mist.DBs.unitsByCat.vehicle = {} - - mist.DBs.unitsByNum = {} - - mist.DBs.groupsByName = {} - mist.DBs.groupsById = {} - mist.DBs.humansByName = {} - mist.DBs.humansById = {} - - mist.DBs.dynGroupsAdded = {} -- will be filled by mist.dbUpdate from dynamically spawned groups - mist.DBs.activeHumans = {} - - mist.DBs.aliveUnits = {} -- will be filled in by the "updateAliveUnits" coroutine in mist.main. - - mist.DBs.removedAliveUnits = {} -- will be filled in by the "updateAliveUnits" coroutine in mist.main. - - mist.DBs.const = {} - - -- not accessible by SSE, must use static list :-/ - mist.DBs.const.callsigns = { - ['NATO'] = { - ['rules'] = { - ['groupLimit'] = 9, - }, - ['AWACS'] = { - ['Overlord'] = 1, - ['Magic'] = 2, - ['Wizard'] = 3, - ['Focus'] = 4, - ['Darkstar'] = 5, - }, - ['TANKER'] = { - ['Texaco'] = 1, - ['Arco'] = 2, - ['Shell'] = 3, - }, - ['JTAC'] = { - ['Axeman'] = 1, - ['Darknight'] = 2, - ['Warrior'] = 3, - ['Pointer'] = 4, - ['Eyeball'] = 5, - ['Moonbeam'] = 6, - ['Whiplash'] = 7, - ['Finger'] = 8, - ['Pinpoint'] = 9, - ['Ferret'] = 10, - ['Shaba'] = 11, - ['Playboy'] = 12, - ['Hammer'] = 13, - ['Jaguar'] = 14, - ['Deathstar'] = 15, - ['Anvil'] = 16, - ['Firefly'] = 17, - ['Mantis'] = 18, - ['Badger'] = 19, - }, - ['aircraft'] = { - ['Enfield'] = 1, - ['Springfield'] = 2, - ['Uzi'] = 3, - ['Colt'] = 4, - ['Dodge'] = 5, - ['Ford'] = 6, - ['Chevy'] = 7, - ['Pontiac'] = 8, - }, - - ['unique'] = { - ['A10'] = { - ['Hawg'] = 9, - ['Boar'] = 10, - ['Pig'] = 11, - ['Tusk'] = 12, - ['rules'] = { - ['canUseAircraft'] = true, - ['appliesTo'] = { - 'A-10C', - 'A-10A', - }, - }, - }, - }, - }, - } - mist.DBs.const.shapeNames = { - ["Landmine"] = "landmine", - ["FARP CP Blindage"] = "kp_ug", - ["Subsidiary structure C"] = "saray-c", - ["Barracks 2"] = "kazarma2", - ["Small house 2C"] = "dom2c", - ["Military staff"] = "aviashtab", - ["Tech hangar A"] = "ceh_ang_a", - ["Oil derrick"] = "neftevyshka", - ["Tech combine"] = "kombinat", - ["Garage B"] = "garage_b", - ["Airshow_Crowd"] = "Crowd1", - ["Hangar A"] = "angar_a", - ["Repair workshop"] = "tech", - ["Subsidiary structure D"] = "saray-d", - ["FARP Ammo Dump Coating"] = "SetkaKP", - ["Small house 1C area"] = "dom2c-all", - ["Tank 2"] = "airbase_tbilisi_tank_01", - ["Boiler-house A"] = "kotelnaya_a", - ["Workshop A"] = "tec_a", - ["Small werehouse 1"] = "s1", - ["Garage small B"] = "garagh-small-b", - ["Small werehouse 4"] = "s4", - ["Shop"] = "magazin", - ["Subsidiary structure B"] = "saray-b", - ["FARP Fuel Depot"] = "GSM Rus", - ["Coach cargo"] = "wagon-gruz", - ["Electric power box"] = "tr_budka", - ["Tank 3"] = "airbase_tbilisi_tank_02", - ["Red_Flag"] = "H-flag_R", - ["Container red 3"] = "konteiner_red3", - ["Garage A"] = "garage_a", - ["Hangar B"] = "angar_b", - ["Black_Tyre"] = "H-tyre_B", - ["Cafe"] = "stolovaya", - ["Restaurant 1"] = "restoran1", - ["Subsidiary structure A"] = "saray-a", - ["Container white"] = "konteiner_white", - ["Warehouse"] = "sklad", - ["Tank"] = "bak", - ["Railway crossing B"] = "pereezd_small", - ["Subsidiary structure F"] = "saray-f", - ["Farm A"] = "ferma_a", - ["Small werehouse 3"] = "s3", - ["Water tower A"] = "wodokachka_a", - ["Railway station"] = "r_vok_sd", - ["Coach a tank blue"] = "wagon-cisterna_blue", - ["Supermarket A"] = "uniwersam_a", - ["Coach a platform"] = "wagon-platforma", - ["Garage small A"] = "garagh-small-a", - ["TV tower"] = "tele_bash", - ["Comms tower M"] = "tele_bash_m", - ["Small house 1A"] = "domik1a", - ["Farm B"] = "ferma_b", - ["GeneratorF"] = "GeneratorF", - ["Cargo1"] = "ab-212_cargo", - ["Container red 2"] = "konteiner_red2", - ["Subsidiary structure E"] = "saray-e", - ["Coach a passenger"] = "wagon-pass", - ["Black_Tyre_WF"] = "H-tyre_B_WF", - ["Electric locomotive"] = "elektrowoz", - ["Shelter"] = "ukrytie", - ["Coach a tank yellow"] = "wagon-cisterna_yellow", - ["Railway crossing A"] = "pereezd_big", - [".Ammunition depot"] = "SkladC", - ["Small werehouse 2"] = "s2", - ["Windsock"] = "H-Windsock_RW", - ["Shelter B"] = "ukrytie_b", - ["Fuel tank"] = "toplivo-bak", - ["Locomotive"] = "teplowoz", - [".Command Center"] = "ComCenter", - ["Pump station"] = "nasos", - ["Black_Tyre_RF"] = "H-tyre_B_RF", - ["Coach cargo open"] = "wagon-gruz-otkr", - ["Subsidiary structure 3"] = "hozdomik3", - ["FARP Tent"] = "PalatkaB", - ["White_Tyre"] = "H-tyre_W", - ["Subsidiary structure G"] = "saray-g", - ["Container red 1"] = "konteiner_red1", - ["Small house 1B area"] = "domik1b-all", - ["Subsidiary structure 1"] = "hozdomik1", - ["Container brown"] = "konteiner_brown", - ["Small house 1B"] = "domik1b", - ["Subsidiary structure 2"] = "hozdomik2", - ["Chemical tank A"] = "him_bak_a", - ["WC"] = "WC", - ["Small house 1A area"] = "domik1a-all", - ["White_Flag"] = "H-Flag_W", - ["Airshow_Cone"] = "Comp_cone", - ["Bulk Cargo Ship Ivanov"] = "barge-1", - ["Bulk Cargo Ship Yakushev"] = "barge-2", - ["Outpost"]="block", - ["Road outpost"]="block-onroad", - ["Container camo"] = "bw_container_cargo", - ["Tech Hangar A"] = "ceh_ang_a", - ["Bunker 1"] = "dot", - ["Bunker 2"] = "dot2", - ["Tanker Elnya 160"] = "elnya", - ["F-shape barrier"] = "f_bar_cargo", - ["Helipad Single"] = "farp", - ["FARP"] = "farps", - ["Fueltank"] = "fueltank_cargo", - ["Gate"] = "gate", - ["FARP Fuel Depot"] = "gsm rus", - ["Armed house"] = "home1_a", - ["FARP Command Post"] = "kp-ug", - ["Watch Tower Armed"] = "ohr-vyshka", - ["Oiltank"] = "oiltank_cargo", - ["Pipes small"] = "pipes_small_cargo", - ["Pipes big"] = "pipes_big_cargo", - ["Oil platform"] = "plavbaza", - ["Tetrapod"] = "tetrapod_cargo", - ["Fuel tank"] = "toplivo", - ["Trunks long"] = "trunks_long_cargo", - ["Trunks small"] = "trunks_small_cargo", - ["Passenger liner"] = "yastrebow", - ["Passenger boat"] = "zwezdny", - ["Oil rig"] = "oil_platform", - ["Gas platform"] = "gas_platform", - ["Container 20ft"] = "container_20ft", - ["Container 40ft"] = "container_40ft", - ["Downed pilot"] = "cadaver", - ["Parachute"] = "parash", - ["Pilot F15 Parachute"] = "pilot_f15_parachute", - ["Pilot standing"] = "pilot_parashut", - } - - - -- create mist.DBs.oldAliveUnits - -- do - -- local intermediate_alive_units = {} -- between 0 and 0.5 secs old - -- local function make_old_alive_units() -- called every 0.5 secs, makes the old_alive_units DB which is just a copy of alive_units that is 0.5 to 1 sec old - -- if intermediate_alive_units then - -- mist.DBs.oldAliveUnits = mist.utils.deepCopy(intermediate_alive_units) - -- end - -- intermediate_alive_units = mist.utils.deepCopy(mist.DBs.aliveUnits) - -- timer.scheduleFunction(make_old_alive_units, nil, timer.getTime() + 0.5) - -- end - - -- make_old_alive_units() - -- end - - --Build DBs - for coa_name, coa_data in pairs(mist.DBs.units) do - for cntry_name, cntry_data in pairs(coa_data) do - for category_name, category_data in pairs(cntry_data) do - if type(category_data) == 'table' then - for group_ind, group_data in pairs(category_data) do - if type(group_data) == 'table' and group_data.units and type(group_data.units) == 'table' and #group_data.units > 0 then -- OCD paradigm programming - mist.DBs.groupsByName[group_data.groupName] = mist.utils.deepCopy(group_data) - mist.DBs.groupsById[group_data.groupId] = mist.utils.deepCopy(group_data) - for unit_ind, unit_data in pairs(group_data.units) do - mist.DBs.unitsByName[unit_data.unitName] = mist.utils.deepCopy(unit_data) - mist.DBs.unitsById[unit_data.unitId] = mist.utils.deepCopy(unit_data) - - mist.DBs.unitsByCat[unit_data.category] = mist.DBs.unitsByCat[unit_data.category] or {} -- future-proofing against new categories... - table.insert(mist.DBs.unitsByCat[unit_data.category], mist.utils.deepCopy(unit_data)) - --dbLog:info('inserting $1', unit_data.unitName) - table.insert(mist.DBs.unitsByNum, mist.utils.deepCopy(unit_data)) - - if unit_data.skill and (unit_data.skill == "Client" or unit_data.skill == "Player") then - mist.DBs.humansByName[unit_data.unitName] = mist.utils.deepCopy(unit_data) - mist.DBs.humansById[unit_data.unitId] = mist.utils.deepCopy(unit_data) - --if Unit.getByName(unit_data.unitName) then - -- mist.DBs.activeHumans[unit_data.unitName] = mist.utils.deepCopy(unit_data) - -- mist.DBs.activeHumans[unit_data.unitName].playerName = Unit.getByName(unit_data.unitName):getPlayerName() - --end - end - end - end - end - end - end - end - end - - --DynDBs - mist.DBs.MEunits = mist.utils.deepCopy(mist.DBs.units) - mist.DBs.MEunitsByName = mist.utils.deepCopy(mist.DBs.unitsByName) - mist.DBs.MEunitsById = mist.utils.deepCopy(mist.DBs.unitsById) - mist.DBs.MEunitsByCat = mist.utils.deepCopy(mist.DBs.unitsByCat) - mist.DBs.MEunitsByNum = mist.utils.deepCopy(mist.DBs.unitsByNum) - mist.DBs.MEgroupsByName = mist.utils.deepCopy(mist.DBs.groupsByName) - mist.DBs.MEgroupsById = mist.utils.deepCopy(mist.DBs.groupsById) - - mist.DBs.deadObjects = {} - - do - local mt = {} - - function mt.__newindex(t, key, val) - local original_key = key --only for duplicate runtime IDs. - local key_ind = 1 - while mist.DBs.deadObjects[key] do - --dbLog:warn('duplicate runtime id of previously dead object key: $1', key) - key = tostring(original_key) .. ' #' .. tostring(key_ind) - key_ind = key_ind + 1 - end - - if mist.DBs.aliveUnits and mist.DBs.aliveUnits[val.object.id_] then - ----dbLog:info('object found in alive_units') - val.objectData = mist.utils.deepCopy(mist.DBs.aliveUnits[val.object.id_]) - local pos = Object.getPosition(val.object) - if pos then - val.objectPos = pos.p - end - val.objectType = mist.DBs.aliveUnits[val.object.id_].category - - elseif mist.DBs.removedAliveUnits and mist.DBs.removedAliveUnits[val.object.id_] then -- it didn't exist in alive_units, check old_alive_units - ----dbLog:info('object found in old_alive_units') - val.objectData = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) - local pos = Object.getPosition(val.object) - if pos then - val.objectPos = pos.p - end - val.objectType = mist.DBs.removedAliveUnits[val.object.id_].category - - else --attempt to determine if static object... - ----dbLog:info('object not found in alive units or old alive units') - local pos = Object.getPosition(val.object) - if pos then - local static_found = false - for ind, static in pairs(mist.DBs.unitsByCat.static) do - if ((pos.p.x - static.point.x)^2 + (pos.p.z - static.point.y)^2)^0.5 < 0.1 then --really, it should be zero... - --dbLog:info('correlated dead static object to position') - val.objectData = static - val.objectPos = pos.p - val.objectType = 'static' - static_found = true - break - end - end - if not static_found then - val.objectPos = pos.p - val.objectType = 'building' - end - else - val.objectType = 'unknown' - end - end - rawset(t, key, val) - end - - setmetatable(mist.DBs.deadObjects, mt) - end - - do -- mist unitID funcs - for id, idData in pairs(mist.DBs.unitsById) do - if idData.unitId > mist.nextUnitId then - mist.nextUnitId = mist.utils.deepCopy(idData.unitId) - end - if idData.groupId > mist.nextGroupId then - mist.nextGroupId = mist.utils.deepCopy(idData.groupId) - end - end - end - - - end - - local function updateAliveUnits() -- coroutine function - local lalive_units = mist.DBs.aliveUnits -- local references for faster execution - local lunits = mist.DBs.unitsByNum - local ldeepcopy = mist.utils.deepCopy - local lUnit = Unit - local lremovedAliveUnits = mist.DBs.removedAliveUnits - local updatedUnits = {} - - if #lunits > 0 then - local units_per_run = math.ceil(#lunits/20) - if units_per_run < 5 then - units_per_run = 5 - end - - for i = 1, #lunits do - if lunits[i].category ~= 'static' then -- can't get statics with Unit.getByName :( - local unit = lUnit.getByName(lunits[i].unitName) - if unit then - ----dbLog:info("unit named $1 alive!", lunits[i].unitName) -- spammy - local pos = unit:getPosition() - local newtbl = ldeepcopy(lunits[i]) - if pos then - newtbl.pos = pos.p - end - newtbl.unit = unit - --newtbl.rt_id = unit.id_ - lalive_units[unit.id_] = newtbl - updatedUnits[unit.id_] = true - end - end - if i%units_per_run == 0 then - coroutine.yield() - end - end - -- All units updated, remove any "alive" units that were not updated- they are dead! - for unit_id, unit in pairs(lalive_units) do - if not updatedUnits[unit_id] then - lremovedAliveUnits[unit_id] = unit - lalive_units[unit_id] = nil - end - end - end - end - - local function dbUpdate(event, objType) - --dbLog:info('dbUpdate') - local newTable = {} - newTable.startTime = 0 - if type(event) == 'string' then -- if name of an object. - local newObject - if Group.getByName(event) then - newObject = Group.getByName(event) - elseif StaticObject.getByName(event) then - newObject = StaticObject.getByName(event) - -- log:info('its static') - else - log:warn('$1 is not a Group or Static Object. This should not be possible. Sent category is: $2', event, objType) - return false - end - - newTable.name = newObject:getName() - newTable.groupId = tonumber(newObject:getID()) - newTable.groupName = newObject:getName() - local unitOneRef - if objType == 'static' then - unitOneRef = newObject - newTable.countryId = tonumber(newObject:getCountry()) - newTable.coalitionId = tonumber(newObject:getCoalition()) - newTable.category = 'static' - else - unitOneRef = newObject:getUnits() - if #unitOneRef > 0 and unitOneRef[1] and type(unitOneRef[1]) == 'table' then - newTable.countryId = tonumber(unitOneRef[1]:getCountry()) - newTable.coalitionId = tonumber(unitOneRef[1]:getCoalition()) - newTable.category = tonumber(newObject:getCategory()) - else - log:warn('getUnits failed to return on $1 ; Built Data: $2.', event, newTable) - return false - end - end - for countryData, countryId in pairs(country.id) do - if newTable.country and string.upper(countryData) == string.upper(newTable.country) or countryId == newTable.countryId then - newTable.countryId = countryId - newTable.country = string.lower(countryData) - for coaData, coaId in pairs(coalition.side) do - if coaId == coalition.getCountryCoalition(countryId) then - newTable.coalition = string.lower(coaData) - end - end - end - end - for catData, catId in pairs(Unit.Category) do - if objType == 'group' and Group.getByName(newTable.groupName):isExist() then - if catId == Group.getByName(newTable.groupName):getCategory() then - newTable.category = string.lower(catData) - end - elseif objType == 'static' and StaticObject.getByName(newTable.groupName):isExist() then - if catId == StaticObject.getByName(newTable.groupName):getCategory() then - newTable.category = string.lower(catData) - end - - end - end - local gfound = false - for index, data in pairs(mistAddedGroups) do - if mist.stringMatch(data.name, newTable.groupName) == true then - gfound = true - newTable.task = data.task - newTable.modulation = data.modulation - newTable.uncontrolled = data.uncontrolled - newTable.radioSet = data.radioSet - newTable.hidden = data.hidden - newTable.startTime = data.start_time - mistAddedGroups[index] = nil - end - end - - if gfound == false then - newTable.uncontrolled = false - newTable.hidden = false - end - - newTable.units = {} - if objType == 'group' then - for unitId, unitData in pairs(unitOneRef) do - newTable.units[unitId] = {} - newTable.units[unitId].unitName = unitData:getName() - - newTable.units[unitId].x = mist.utils.round(unitData:getPosition().p.x) - newTable.units[unitId].y = mist.utils.round(unitData:getPosition().p.z) - newTable.units[unitId].point = {} - newTable.units[unitId].point.x = newTable.units[unitId].x - newTable.units[unitId].point.y = newTable.units[unitId].y - newTable.units[unitId].alt = mist.utils.round(unitData:getPosition().p.y) - newTable.units[unitId].speed = mist.vec.mag(unitData:getVelocity()) - - newTable.units[unitId].heading = mist.getHeading(unitData, true) - - newTable.units[unitId].type = unitData:getTypeName() - newTable.units[unitId].unitId = tonumber(unitData:getID()) - - - newTable.units[unitId].groupName = newTable.groupName - newTable.units[unitId].groupId = newTable.groupId - newTable.units[unitId].countryId = newTable.countryId - newTable.units[unitId].coalitionId = newTable.coalitionId - newTable.units[unitId].coalition = newTable.coalition - newTable.units[unitId].country = newTable.country - local found = false - for index, data in pairs(mistAddedObjects) do - if mist.stringMatch(data.name, newTable.units[unitId].unitName) == true then - found = true - newTable.units[unitId].livery_id = data.livery_id - newTable.units[unitId].skill = data.skill - newTable.units[unitId].alt_type = data.alt_type - newTable.units[unitId].callsign = data.callsign - newTable.units[unitId].psi = data.psi - mistAddedObjects[index] = nil - end - if found == false then - newTable.units[unitId].skill = "High" - newTable.units[unitId].alt_type = "BARO" - end - if newTable.units[unitId].alt_type == "RADIO" then -- raw postition MSL was grabbed for group, but spawn is AGL, so re-offset it - newTable.units[unitId].alt = (newTable.units[unitId].alt - land.getHeight({x = newTable.units[unitId].x, y = newTable.units[unitId].y})) - end - end - - end - else -- its a static - newTable.category = 'static' - newTable.units[1] = {} - newTable.units[1].unitName = newObject:getName() - newTable.units[1].category = 'static' - newTable.units[1].x = mist.utils.round(newObject:getPosition().p.x) - newTable.units[1].y = mist.utils.round(newObject:getPosition().p.z) - newTable.units[1].point = {} - newTable.units[1].point.x = newTable.units[1].x - newTable.units[1].point.y = newTable.units[1].y - newTable.units[1].alt = mist.utils.round(newObject:getPosition().p.y) - newTable.units[1].heading = mist.getHeading(newObject, true) - newTable.units[1].type = newObject:getTypeName() - newTable.units[1].unitId = tonumber(newObject:getID()) - newTable.units[1].groupName = newTable.name - newTable.units[1].groupId = newTable.groupId - newTable.units[1].countryId = newTable.countryId - newTable.units[1].country = newTable.country - newTable.units[1].coalitionId = newTable.coalitionId - newTable.units[1].coalition = newTable.coalition - if newObject:getCategory() == 6 and newObject:getCargoDisplayName() then - local mass = newObject:getCargoDisplayName() - mass = string.gsub(mass, ' ', '') - mass = string.gsub(mass, 'kg', '') - newTable.units[1].mass = tonumber(mass) - newTable.units[1].categoryStatic = 'Cargos' - newTable.units[1].canCargo = true - newTable.units[1].shape_name = 'ab-212_cargo' - end - - ----- search mist added objects for extra data if applicable - for index, data in pairs(mistAddedObjects) do - if mist.stringMatch(data.name, newTable.units[1].unitName) == true then - newTable.units[1].shape_name = data.shape_name -- for statics - newTable.units[1].livery_id = data.livery_id - newTable.units[1].airdromeId = data.airdromeId - newTable.units[1].mass = data.mass - newTable.units[1].canCargo = data.canCargo - newTable.units[1].categoryStatic = data.categoryStatic - newTable.units[1].type = data.type - mistAddedObjects[index] = nil - break - end - end - end - end - --mist.debug.writeData(mist.utils.serialize,{'msg', newTable}, timer.getAbsTime() ..'Group.lua') - newTable.timeAdded = timer.getAbsTime() -- only on the dynGroupsAdded table. For other reference, see start time - --mist.debug.dumpDBs() - --end - --dbLog:info('endDbUpdate') - return newTable - end - - --[[DB update code... FRACK. I need to refactor some of it. - - The problem is that the DBs need to account better for shared object names. Needs to write over some data and outright remove other. - - If groupName is used then entire group needs to be rewritten - what to do with old groups units DB entries?. Names cant be assumed to be the same. - - - -- new spawn event check. - -- event handler filters everything into groups: tempSpawnedGroups - -- this function then checks DBs to see if data has changed - ]] - local function checkSpawnedEventsNew() - if tempSpawnGroupsCounter > 0 then - --[[local updatesPerRun = math.ceil(#tempSpawnedGroupsCounter/20) - if updatesPerRun < 5 then - updatesPerRun = 5 - end]] - - --dbLog:info('iterate') - for name, gData in pairs(tempSpawnedGroups) do - --env.info(name) - local updated = false - local stillExists = false - if not gData.checked then - tempSpawnedGroups[name].checked = true -- so if there was an error it will get cleared. - local _g = gData.gp or Group.getByName(name) - if mist.DBs.groupsByName[name] then - -- first check group level properties, groupId, countryId, coalition - -- dbLog:info('Found in DBs, check if updated') - local dbTable = mist.DBs.groupsByName[name] - -- dbLog:info(dbTable) - if gData.type ~= 'static' then - -- dbLog:info('Not static') - - if _g and _g:isExist() == true then - stillExists = true - local _u = _g:getUnit(1) - - if _u and (dbTable.groupId ~= tonumber(_g:getID()) or _u:getCountry() ~= dbTable.countryId or _u:getCoalition() ~= dbTable.coaltionId) then - --dbLog:info('Group Data mismatch') - updated = true - else - -- dbLog:info('No Mismatch') - end - else - dbLog:warn('$1 : Group was not accessible', name) - end - end - end - --dbLog:info('Updated: $1', updated) - if updated == false and gData.type ~= 'static' then -- time to check units - --dbLog:info('No Group Mismatch, Check Units') - if _g and _g:isExist() == true then - stillExists = true - for index, uObject in pairs(_g:getUnits()) do - --dbLog:info(index) - if mist.DBs.unitsByName[uObject:getName()] then - --dbLog:info('UnitByName table exists') - local uTable = mist.DBs.unitsByName[uObject:getName()] - if tonumber(uObject:getID()) ~= uTable.unitId or uObject:getTypeName() ~= uTable.type then - --dbLog:info('Unit Data mismatch') - updated = true - break - end - end - end - end - else - stillExists = true - end - - if stillExists == true and (updated == true or not mist.DBs.groupsByName[name]) then - --dbLog:info('Get Table') - writeGroups[#writeGroups+1] = {data = dbUpdate(name, gData.type), isUpdated = updated} - - end - -- Work done, so remove - end - tempSpawnedGroups[name] = nil - tempSpawnGroupsCounter = tempSpawnGroupsCounter - 1 - end - end - end - - local function updateDBTables() - local i = #writeGroups - - local savesPerRun = math.ceil(i/10) - if savesPerRun < 5 then - savesPerRun = 5 - end - if i > 0 then - --dbLog:info('updateDBTables') - local ldeepCopy = mist.utils.deepCopy - for x = 1, i do - --dbLog:info(writeGroups[x]) - local newTable = writeGroups[x].data - local updated = writeGroups[x].isUpdated - local mistCategory - if type(newTable.category) == 'string' then - mistCategory = string.lower(newTable.category) - end - - if string.upper(newTable.category) == 'GROUND_UNIT' then - mistCategory = 'vehicle' - newTable.category = mistCategory - elseif string.upper(newTable.category) == 'AIRPLANE' then - mistCategory = 'plane' - newTable.category = mistCategory - elseif string.upper(newTable.category) == 'HELICOPTER' then - mistCategory = 'helicopter' - newTable.category = mistCategory - elseif string.upper(newTable.category) == 'SHIP' then - mistCategory = 'ship' - newTable.category = mistCategory - end - --dbLog:info('Update unitsBy') - for newId, newUnitData in pairs(newTable.units) do - --dbLog:info(newId) - newUnitData.category = mistCategory - if newUnitData.unitId then - --dbLog:info('byId') - mist.DBs.unitsById[tonumber(newUnitData.unitId)] = ldeepCopy(newUnitData) - end - --dbLog:info(updated) - if mist.DBs.unitsByName[newUnitData.unitName] and updated == true then--if unit existed before and something was updated, write over the entry for a given unit name just in case. - --dbLog:info('Updating Unit Tables') - for i = 1, #mist.DBs.unitsByCat[mistCategory] do - if mist.DBs.unitsByCat[mistCategory][i].unitName == newUnitData.unitName then - --dbLog:info('Entry Found, Rewriting for unitsByCat') - mist.DBs.unitsByCat[mistCategory][i] = ldeepCopy(newUnitData) - break - end - end - for i = 1, #mist.DBs.unitsByNum do - if mist.DBs.unitsByNum[i].unitName == newUnitData.unitName then - --dbLog:info('Entry Found, Rewriting for unitsByNum') - mist.DBs.unitsByNum[i] = ldeepCopy(newUnitData) - break - end - end - - else - --dbLog:info('Unitname not in use, add as normal') - mist.DBs.unitsByCat[mistCategory][#mist.DBs.unitsByCat[mistCategory] + 1] = ldeepCopy(newUnitData) - mist.DBs.unitsByNum[#mist.DBs.unitsByNum + 1] = ldeepCopy(newUnitData) - end - mist.DBs.unitsByName[newUnitData.unitName] = ldeepCopy(newUnitData) - - - end - -- this is a really annoying DB to populate. Gotta create new tables in case its missing - --dbLog:info('write mist.DBs.units') - if not mist.DBs.units[newTable.coalition] then - mist.DBs.units[newTable.coalition] = {} - end - - if not mist.DBs.units[newTable.coalition][newTable.country] then - mist.DBs.units[newTable.coalition][(newTable.country)] = {} - mist.DBs.units[newTable.coalition][(newTable.country)].countryId = newTable.countryId - end - if not mist.DBs.units[newTable.coalition][newTable.country][mistCategory] then - mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] = {} - end - - if updated == true then - --dbLog:info('Updating DBsUnits') - for i = 1, #mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] do - if mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][i].groupName == newTable.groupName then - --dbLog:info('Entry Found, Rewriting') - mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][i] = ldeepCopy(newTable) - break - end - end - else - mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][#mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] + 1] = ldeepCopy(newTable) - end - - - if newTable.groupId then - mist.DBs.groupsById[newTable.groupId] = ldeepCopy(newTable) - end - - mist.DBs.groupsByName[newTable.name] = ldeepCopy(newTable) - mist.DBs.dynGroupsAdded[#mist.DBs.dynGroupsAdded + 1] = ldeepCopy(newTable) - - writeGroups[x] = nil - if x%savesPerRun == 0 then - coroutine.yield() - end - end - if timer.getTime() > lastUpdateTime then - lastUpdateTime = timer.getTime() - end - --dbLog:info('endUpdateTables') - end - end - - local function groupSpawned(event) - -- dont need to add units spawned in at the start of the mission if mist is loaded in init line - if event.id == world.event.S_EVENT_BIRTH and timer.getTime0() < timer.getAbsTime() then - --dbLog:info('unitSpawnEvent') - - --table.insert(tempSpawnedUnits,(event.initiator)) - ------- - -- New functionality below. - ------- - if Object.getCategory(event.initiator) == 1 and not Unit.getPlayerName(event.initiator) then -- simple player check, will need to later check to see if unit was spawned with a player in a flight - --dbLog:info('Object is a Unit') - if Unit.getGroup(event.initiator) then - --dbLog:info(Unit.getGroup(event.initiator):getName()) - local g = Unit.getGroup(event.initiator) - if not tempSpawnedGroups[g:getName()] then - --dbLog:info('added') - tempSpawnedGroups[g:getName()] = {type = 'group', gp = g} - tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 - end - else - log:error('Group not accessible by unit in event handler. This is a DCS bug') - end - elseif Object.getCategory(event.initiator) == 3 or Object.getCategory(event.initiator) == 6 then - --dbLog:info('Object is Static') - tempSpawnedGroups[StaticObject.getName(event.initiator)] = {type = 'static'} - tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 - end - - - end - end - - local function doScheduledFunctions() - local i = 1 - while i <= #scheduledTasks do - if not scheduledTasks[i].rep then -- not a repeated process - if scheduledTasks[i].t <= timer.getTime() then - local task = scheduledTasks[i] -- local reference - table.remove(scheduledTasks, i) - local err, errmsg = pcall(task.f, unpack(task.vars, 1, table.maxn(task.vars))) - if not err then - log:error('Error in scheduled function: $1', errmsg) - end - --task.f(unpack(task.vars, 1, table.maxn(task.vars))) -- do the task, do not increment i - else - i = i + 1 - end - else - if scheduledTasks[i].st and scheduledTasks[i].st <= timer.getTime() then --if a stoptime was specified, and the stop time exceeded - table.remove(scheduledTasks, i) -- stop time exceeded, do not execute, do not increment i - elseif scheduledTasks[i].t <= timer.getTime() then - local task = scheduledTasks[i] -- local reference - task.t = timer.getTime() + task.rep --schedule next run - local err, errmsg = pcall(task.f, unpack(task.vars, 1, table.maxn(task.vars))) - if not err then - log:error('Error in scheduled function: $1' .. errmsg) - end - --scheduledTasks[i].f(unpack(scheduledTasks[i].vars, 1, table.maxn(scheduledTasks[i].vars))) -- do the task - i = i + 1 - else - i = i + 1 - end - end - end - end - - -- Event handler to start creating the dead_objects table - local function addDeadObject(event) - if event.id == world.event.S_EVENT_DEAD or event.id == world.event.S_EVENT_CRASH then - if event.initiator and event.initiator.id_ and event.initiator.id_ > 0 then - - local id = event.initiator.id_ -- initial ID, could change if there is a duplicate id_ already dead. - local val = {object = event.initiator} -- the new entry in mist.DBs.deadObjects. - - local original_id = id --only for duplicate runtime IDs. - local id_ind = 1 - while mist.DBs.deadObjects[id] do - --log:info('duplicate runtime id of previously dead object id: $1', id) - id = tostring(original_id) .. ' #' .. tostring(id_ind) - id_ind = id_ind + 1 - end - - if mist.DBs.aliveUnits and mist.DBs.aliveUnits[val.object.id_] then - --log:info('object found in alive_units') - val.objectData = mist.utils.deepCopy(mist.DBs.aliveUnits[val.object.id_]) - local pos = Object.getPosition(val.object) - if pos then - val.objectPos = pos.p - end - val.objectType = mist.DBs.aliveUnits[val.object.id_].category - --[[if mist.DBs.activeHumans[Unit.getName(val.object)] then - --trigger.action.outText('remove via death: ' .. Unit.getName(val.object),20) - mist.DBs.activeHumans[Unit.getName(val.object)] = nil - end]] - elseif mist.DBs.removedAliveUnits and mist.DBs.removedAliveUnits[val.object.id_] then -- it didn't exist in alive_units, check old_alive_units - --log:info('object found in old_alive_units') - val.objectData = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) - local pos = Object.getPosition(val.object) - if pos then - val.objectPos = pos.p - end - val.objectType = mist.DBs.removedAliveUnits[val.object.id_].category - - else --attempt to determine if static object... - --log:info('object not found in alive units or old alive units') - local pos = Object.getPosition(val.object) - if pos then - local static_found = false - for ind, static in pairs(mist.DBs.unitsByCat.static) do - if ((pos.p.x - static.point.x)^2 + (pos.p.z - static.point.y)^2)^0.5 < 0.1 then --really, it should be zero... - --log:info('correlated dead static object to position') - val.objectData = static - val.objectPos = pos.p - val.objectType = 'static' - static_found = true - break - end - end - if not static_found then - val.objectPos = pos.p - val.objectType = 'building' - end - else - val.objectType = 'unknown' - end - end - mist.DBs.deadObjects[id] = val - end - end - end - - --[[ - local function addClientsToActive(event) - if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT or event.id == world.event.S_EVENT_BIRTH then - log:info(event) - if Unit.getPlayerName(event.initiator) then - log:info(Unit.getPlayerName(event.initiator)) - local newU = mist.utils.deepCopy(mist.DBs.unitsByName[Unit.getName(event.initiator)]) - newU.playerName = Unit.getPlayerName(event.initiator) - mist.DBs.activeHumans[Unit.getName(event.initiator)] = newU - --trigger.action.outText('added: ' .. Unit.getName(event.initiator), 20) - end - elseif event.id == world.event.S_EVENT_PLAYER_LEAVE_UNIT and event.initiator then - if mist.DBs.activeHumans[Unit.getName(event.initiator)] then - mist.DBs.activeHumans[Unit.getName(event.initiator)] = nil - -- trigger.action.outText('removed via control: ' .. Unit.getName(event.initiator), 20) - end - end - end - - mist.addEventHandler(addClientsToActive) - ]] - local function verifyDB() - --log:warn('verfy Run') - for coaName, coaId in pairs(coalition.side) do - --env.info(coaName) - local gps = coalition.getGroups(coaId) - for i = 1, #gps do - if gps[i] and Group.getSize(gps[i]) > 0 then - local gName = Group.getName(gps[i]) - if not mist.DBs.groupsByName[gName] then - --env.info(Unit.getID(gUnits[j]) .. ' Not found in DB yet') - if not tempSpawnedGroups[gName] then - --dbLog:info('added') - tempSpawnedGroups[gName] = {type = 'group', gp = gps[i]} - tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 - end - end - end - end - local st = coalition.getStaticObjects(coaId) - for i = 1, #st do - local s = st[i] - if StaticObject.isExist(s) then - if not mist.DBs.unitsByName[s:getName()] then - --env.info(StaticObject.getID(s) .. ' Not found in DB yet') - tempSpawnedGroups[s:getName()] = {type = 'static'} - tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 - end - end - end - - end - - end - - --- init function. - -- creates logger, adds default event handler - -- and calls main the first time. - -- @function mist.init - function mist.init() - - -- create logger - mist.log = mist.Logger:new("MIST", mistSettings.logLevel) - dbLog = mist.Logger:new('MISTDB', 'warn') - - log = mist.log -- log shorthand - -- set warning log level, showing only - -- warnings and errors - --log:setLevel("warning") - - log:info("initializing databases") - initDBs() - - -- add event handler for group spawns - mist.addEventHandler(groupSpawned) - mist.addEventHandler(addDeadObject) - - log:warn('Init time: $1', timer.getTime()) - - -- call main the first time therafter it reschedules itself. - mist.main() - --log:msg('MIST version $1.$2.$3 loaded', mist.majorVersion, mist.minorVersion, mist.build) - - mist.scheduleFunction(verifyDB, {}, timer.getTime() + 1) - return - end - - --- The main function. - -- Run 100 times per second. - -- You shouldn't call this function. - function mist.main() - timer.scheduleFunction(mist.main, {}, timer.getTime() + 0.01) --reschedule first in case of Lua error - - updateTenthSecond = updateTenthSecond + 1 - if updateTenthSecond == 20 then - updateTenthSecond = 0 - - checkSpawnedEventsNew() - - if not coroutines.updateDBTables then - coroutines.updateDBTables = coroutine.create(updateDBTables) - end - - coroutine.resume(coroutines.updateDBTables) - - if coroutine.status(coroutines.updateDBTables) == 'dead' then - coroutines.updateDBTables = nil - end - end - - --updating alive units - updateAliveUnitsCounter = updateAliveUnitsCounter + 1 - if updateAliveUnitsCounter == 5 then - updateAliveUnitsCounter = 0 - - if not coroutines.updateAliveUnits then - coroutines.updateAliveUnits = coroutine.create(updateAliveUnits) - end - - coroutine.resume(coroutines.updateAliveUnits) - - if coroutine.status(coroutines.updateAliveUnits) == 'dead' then - coroutines.updateAliveUnits = nil - end - end - - doScheduledFunctions() - end -- end of mist.main - - --- Returns next unit id. - -- @treturn number next unit id. - function mist.getNextUnitId() - mist.nextUnitId = mist.nextUnitId + 1 - if mist.nextUnitId > 6900 and mist.nextUnitId < 30000 then - mist.nextUnitId = 30000 - end - return mist.utils.deepCopy(mist.nextUnitId) - end - - --- Returns next group id. - -- @treturn number next group id. - function mist.getNextGroupId() - mist.nextGroupId = mist.nextGroupId + 1 - if mist.nextGroupId > 6900 and mist.nextGroupId < 30000 then - mist.nextGroupId = 30000 - end - return mist.utils.deepCopy(mist.nextGroupId) - end - - --- Returns timestamp of last database update. - -- @treturn timestamp of last database update - function mist.getLastDBUpdateTime() - return lastUpdateTime - end - - --- Spawns a static object to the game world. - -- @todo write good docs - -- @tparam table staticObj table containing data needed for the object creation - function mist.dynAddStatic(newObj) - log:info(newObj) - if newObj.units and newObj.units[1] then -- if its mist format - for entry, val in pairs(newObj.units[1]) do - if newObj[entry] and newObj[entry] ~= val or not newObj[entry] then - newObj[entry] = val - end - end - end - --log:info(newObj) - - local cntry = newObj.country - if newObj.countryId then - cntry = newObj.countryId - end - - local newCountry = '' - - for countryId, countryName in pairs(country.name) do - if type(cntry) == 'string' then - cntry = cntry:gsub("%s+", "_") - if tostring(countryName) == string.upper(cntry) then - newCountry = countryName - end - elseif type(cntry) == 'number' then - if countryId == cntry then - newCountry = countryName - end - end - end - - if newCountry == '' then - log:error("Country not found: $1", cntry) - return false - end - - if newObj.clone or not newObj.groupId then - mistGpId = mistGpId + 1 - newObj.groupId = mistGpId - end - - if newObj.clone or not newObj.unitId then - mistUnitId = mistUnitId + 1 - newObj.unitId = mistUnitId - end - - - newObj.name = newObj.name or newObj.unitName - - if newObj.clone or not newObj.name then - mistDynAddIndex[' static '] = mistDynAddIndex[' static '] + 1 - newObj.name = (newCountry .. ' static ' .. mistDynAddIndex[' static ']) - end - - if not newObj.dead then - newObj.dead = false - end - - if not newObj.heading then - newObj.heading = math.random(360) - end - - if newObj.categoryStatic then - newObj.category = newObj.categoryStatic - end - if newObj.mass then - newObj.category = 'Cargos' - end - - if newObj.shapeName then - newObj.shape_name = newObj.shapeName - end - - if not newObj.shape_name then - log:info('shape_name not present') - if mist.DBs.const.shapeNames[newObj.type] then - newObj.shape_name = mist.DBs.const.shapeNames[newObj.type] - end - end - - mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newObj) - if newObj.x and newObj.y and newObj.type and type(newObj.x) == 'number' and type(newObj.y) == 'number' and type(newObj.type) == 'string' then - log:info(newObj) - coalition.addStaticObject(country.id[newCountry], newObj) - - return newObj - end - log:error("Failed to add static object due to missing or incorrect value. X: $1, Y: $2, Type: $3", newObj.x, newObj.y, newObj.type) - return false - end - - --- Spawns a dynamic group into the game world. - -- Same as coalition.add function in SSE. checks the passed data to see if its valid. - -- Will generate groupId, groupName, unitId, and unitName if needed - -- @tparam table newGroup table containting values needed for spawning a group. - function mist.dynAdd(newGroup) - --log:warn(newGroup) - --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua') - local cntry = newGroup.country - if newGroup.countryId then - cntry = newGroup.countryId - end - - local groupType = newGroup.category - local newCountry = '' - -- validate data - for countryId, countryName in pairs(country.name) do - if type(cntry) == 'string' then - cntry = cntry:gsub("%s+", "_") - if tostring(countryName) == string.upper(cntry) then - newCountry = countryName - end - elseif type(cntry) == 'number' then - if countryId == cntry then - newCountry = countryName - end - end - end - - if newCountry == '' then - log:error("Country not found: $1", cntry) - return false - end - - local newCat = '' - for catName, catId in pairs(Unit.Category) do - if type(groupType) == 'string' then - if tostring(catName) == string.upper(groupType) then - newCat = catName - end - elseif type(groupType) == 'number' then - if catId == groupType then - newCat = catName - end - end - - if catName == 'GROUND_UNIT' and (string.upper(groupType) == 'VEHICLE' or string.upper(groupType) == 'GROUND') then - newCat = 'GROUND_UNIT' - elseif catName == 'AIRPLANE' and string.upper(groupType) == 'PLANE' then - newCat = 'AIRPLANE' - end - end - local typeName - if newCat == 'GROUND_UNIT' then - typeName = ' gnd ' - elseif newCat == 'AIRPLANE' then - typeName = ' air ' - elseif newCat == 'HELICOPTER' then - typeName = ' hel ' - elseif newCat == 'SHIP' then - typeName = ' shp ' - elseif newCat == 'BUILDING' then - typeName = ' bld ' - end - if newGroup.clone or not newGroup.groupId then - mistDynAddIndex[typeName] = mistDynAddIndex[typeName] + 1 - mistGpId = mistGpId + 1 - newGroup.groupId = mistGpId - end - if newGroup.groupName or newGroup.name then - if newGroup.groupName then - newGroup.name = newGroup.groupName - elseif newGroup.name then - newGroup.name = newGroup.name - end - end - - if newGroup.clone and mist.DBs.groupsByName[newGroup.name] or not newGroup.name then - newGroup.name = tostring(newCountry .. tostring(typeName) .. mistDynAddIndex[typeName]) - end - - if not newGroup.hidden then - newGroup.hidden = false - end - - if not newGroup.visible then - newGroup.visible = false - end - - if (newGroup.start_time and type(newGroup.start_time) ~= 'number') or not newGroup.start_time then - if newGroup.startTime then - newGroup.start_time = mist.utils.round(newGroup.startTime) - else - newGroup.start_time = 0 - end - end - - - for unitIndex, unitData in pairs(newGroup.units) do - local originalName = newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name - if newGroup.clone or not unitData.unitId then - mistUnitId = mistUnitId + 1 - newGroup.units[unitIndex].unitId = mistUnitId - end - if newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name then - if newGroup.units[unitIndex].unitName then - newGroup.units[unitIndex].name = newGroup.units[unitIndex].unitName - elseif newGroup.units[unitIndex].name then - newGroup.units[unitIndex].name = newGroup.units[unitIndex].name - end - end - if newGroup.clone or not unitData.name then - newGroup.units[unitIndex].name = tostring(newGroup.name .. ' unit' .. unitIndex) - end - - if not unitData.skill then - newGroup.units[unitIndex].skill = 'Random' - end - - if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then - if newGroup.units[unitIndex].alt_type and newGroup.units[unitIndex].alt_type ~= 'BARO' or not newGroup.units[unitIndex].alt_type then - newGroup.units[unitIndex].alt_type = 'RADIO' - end - if not unitData.speed then - if newCat == 'AIRPLANE' then - newGroup.units[unitIndex].speed = 150 - elseif newCat == 'HELICOPTER' then - newGroup.units[unitIndex].speed = 60 - end - end - if not unitData.payload then - newGroup.units[unitIndex].payload = mist.getPayload(originalName) - end - if not unitData.alt then - if newCat == 'AIRPLANE' then - newGroup.units[unitIndex].alt = 2000 - newGroup.units[unitIndex].alt_type = 'RADIO' - newGroup.units[unitIndex].speed = 150 - elseif newCat == 'HELICOPTER' then - newGroup.units[unitIndex].alt = 500 - newGroup.units[unitIndex].alt_type = 'RADIO' - newGroup.units[unitIndex].speed = 60 - end - end - - elseif newCat == 'GROUND_UNIT' then - if nil == unitData.playerCanDrive then - unitData.playerCanDrive = true - end - - end - mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newGroup.units[unitIndex]) - end - mistAddedGroups[#mistAddedGroups + 1] = mist.utils.deepCopy(newGroup) - if newGroup.route then - if newGroup.route and not newGroup.route.points then - if newGroup.route[1] then - local copyRoute = mist.utils.deepCopy(newGroup.route) - newGroup.route = {} - newGroup.route.points = copyRoute - end - end - else -- if aircraft and no route assigned. make a quick and stupid route so AI doesnt RTB immediately - if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then - newGroup.route = {} - newGroup.route.points = {} - newGroup.route.points[1] = {} - end - end - newGroup.country = newCountry - - - --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') - --log:warn(newGroup) - -- sanitize table - newGroup.groupName = nil - newGroup.clone = nil - newGroup.category = nil - newGroup.country = nil - - newGroup.tasks = {} - - for unitIndex, unitData in pairs(newGroup.units) do - newGroup.units[unitIndex].unitName = nil - end - - coalition.addGroup(country.id[newCountry], Unit.Category[newCat], newGroup) - - return newGroup - - end - - --- Schedules a function. - -- Modified Slmod task scheduler, superior to timer.scheduleFunction - -- @tparam function f function to schedule - -- @tparam table vars array containing all parameters passed to the function - -- @tparam number t time in seconds from mission start to schedule the function to. - -- @tparam[opt] number rep time between repetitions of the function - -- @tparam[opt] number st time in seconds from mission start at which the function - -- should stop to be rescheduled. - -- @treturn number scheduled function id. - function mist.scheduleFunction(f, vars, t, rep, st) - --verify correct types - assert(type(f) == 'function', 'variable 1, expected function, got ' .. type(f)) - assert(type(vars) == 'table' or vars == nil, 'variable 2, expected table or nil, got ' .. type(f)) - assert(type(t) == 'number', 'variable 3, expected number, got ' .. type(t)) - assert(type(rep) == 'number' or rep == nil, 'variable 4, expected number or nil, got ' .. type(rep)) - assert(type(st) == 'number' or st == nil, 'variable 5, expected number or nil, got ' .. type(st)) - if not vars then - vars = {} - end - taskId = taskId + 1 - table.insert(scheduledTasks, {f = f, vars = vars, t = t, rep = rep, st = st, id = taskId}) - return taskId - end - - --- Removes a scheduled function. - -- @tparam number id function id - -- @treturn boolean true if function was successfully removed, false otherwise. - function mist.removeFunction(id) - local i = 1 - while i <= #scheduledTasks do - if scheduledTasks[i].id == id then - table.remove(scheduledTasks, i) - return true - else - i = i + 1 - end - end - return false - end - - --- Registers an event handler. - -- @tparam function f function handling event - -- @treturn number id of the event handler - function mist.addEventHandler(f) --id is optional! - local handler = {} - idNum = idNum + 1 - handler.id = idNum - handler.f = f - function handler:onEvent(event) - self.f(event) - end - world.addEventHandler(handler) - return handler.id - end - - --- Removes event handler with given id. - -- @tparam number id event handler id - -- @treturn boolean true on success, false otherwise - function mist.removeEventHandler(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 - --- Begin common funcs -do - --- Returns MGRS coordinates as string. - -- @tparam string MGRS MGRS coordinates - -- @tparam number acc the accuracy of each easting/northing. - -- Can be: 0, 1, 2, 3, 4, or 5. - function mist.tostringMGRS(MGRS, acc) - if acc == 0 then - return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph - else - return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', mist.utils.round(MGRS.Easting/(10^(5-acc)), 0)) - .. ' ' .. string.format('%0' .. acc .. 'd', mist.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. - ]] - function mist.tostringLL(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 = mist.utils.round((oldLatMin - latMin)*60, acc) - - local oldLonMin = lonMin - lonMin = math.floor(lonMin) - local lonSec = mist.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 = mist.utils.round(latMin, acc) - lonMin = mist.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.]] - function mist.tostringBR(az, dist, alt, metric) - az = mist.utils.round(mist.utils.toDegree(az), 0) - - if metric then - dist = mist.utils.round(dist/1000, 0) - else - dist = mist.utils.round(mist.utils.metersToNM(dist), 0) - end - - local s = string.format('%03d', az) .. ' for ' .. dist - - if alt then - if metric then - s = s .. ' at ' .. mist.utils.round(alt, 0) - else - s = s .. ' at ' .. mist.utils.round(mist.utils.metersToFeet(alt), 0) - end - end - return s - end - - function mist.getNorthCorrection(gPoint) --gets the correction needed for true north - local point = mist.utils.deepCopy(gPoint) - 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 - - --- Returns skill of the given unit. - -- @tparam string unitName unit name - -- @return skill of the unit - function mist.getUnitSkill(unitName) - if mist.DBs.unitsByName[unitName] then - if Unit.getByName(unitName) then - local lunit = Unit.getByName(unitName) - local data = mist.DBs.unitsByName[unitName] - if data.unitName == unitName and data.type == lunit:getTypeName() and data.unitId == tonumber(lunit:getID()) and data.skill then - return data.skill - end - end - end - log:error("Unit not found in DB: $1", unitName) - return false - end - - --- Returns an array containing a group's units positions. - -- e.g. - -- { - -- [1] = {x = 299435.224, y = -1146632.6773}, - -- [2] = {x = 663324.6563, y = 322424.1112} - -- } - -- @tparam number|string groupIdent group id or name - -- @treturn table array containing positions of each group member - function mist.getGroupPoints(groupIdent) - -- search by groupId and allow groupId and groupName as inputs - local gpId = groupIdent - if type(groupIdent) == 'string' and not tonumber(groupIdent) then - if mist.DBs.MEgroupsByName[groupIdent] then - gpId = mist.DBs.MEgroupsByName[groupIdent].groupId - else - log:error("Group not found in mist.DBs.MEgroupsByName: $1", groupIdent) - end - end - - for coa_name, coa_data in pairs(env.mission.coalition) do - if 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 - if not point.point then - points[point_num] = { x = point.x, y = point.y } - else - points[point_num] = point.point --it's possible that the ME could move to the point = Vec2 notation. - end - 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 - - --- getUnitAttitude(unit) return values. - -- Yaw, AoA, ClimbAngle - relative to earth reference - -- DOES NOT TAKE INTO ACCOUNT WIND. - -- @table attitude - -- @tfield number Heading in radians, range of 0 to 2*pi, - -- relative to true north. - -- @tfield number Pitch in radians, range of -pi/2 to pi/2 - -- @tfield number Roll in radians, range of 0 to 2*pi, - -- right roll is positive direction. - -- @tfield number Yaw in radians, range of -pi to pi, - -- right yaw is positive direction. - -- @tfield number AoA in radians, range of -pi to pi, - -- rotation of aircraft to the right in comparison to - -- flight direction being positive. - -- @tfield number ClimbAngle in radians, range of -pi/2 to pi/2 - - --- Returns the attitude of a given unit. - -- Will work on any unit, even if not an aircraft. - -- @tparam Unit unit unit whose attitude is returned. - -- @treturn table @{attitude} - function mist.getAttitude(unit) - local unitpos = unit:getPosition() - if unitpos then - - local Heading = math.atan2(unitpos.x.z, unitpos.x.x) - - Heading = Heading + mist.getNorthCorrection(unitpos.p) - - if Heading < 0 then - Heading = Heading + 2*math.pi -- put heading in range of 0 to 2*pi - end - ---- heading complete.---- - - local Pitch = math.asin(unitpos.x.y) - ---- pitch complete.---- - - -- now get roll: - --maybe not the best way to do it, but it works. - - --first, make a vector that is perpendicular to y and unitpos.x with cross product - local cp = mist.vec.cp(unitpos.x, {x = 0, y = 1, z = 0}) - - --now, get dot product of of this cross product with unitpos.z - local dp = mist.vec.dp(cp, unitpos.z) - - --now get the magnitude of the roll (magnitude of the angle between two vectors is acos(vec1.vec2/|vec1||vec2|) - local Roll = math.acos(dp/(mist.vec.mag(cp)*mist.vec.mag(unitpos.z))) - - --now, have to get sign of roll. - -- by convention, making right roll positive - -- to get sign of roll, use the y component of unitpos.z. For right roll, y component is negative. - - if unitpos.z.y > 0 then -- left roll, flip the sign of the roll - Roll = -Roll - end - ---- roll complete. ---- - - --now, work on yaw, AoA, climb, and abs velocity - local Yaw - local AoA - local ClimbAngle - - -- get unit velocity - local unitvel = unit:getVelocity() - if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! - local AxialVel = {} --unit velocity transformed into aircraft axes directions - - --transform velocity components in direction of aircraft axes. - AxialVel.x = mist.vec.dp(unitpos.x, unitvel) - AxialVel.y = mist.vec.dp(unitpos.y, unitvel) - AxialVel.z = mist.vec.dp(unitpos.z, unitvel) - - --Yaw is the angle between unitpos.x and the x and z velocities - --define right yaw as positive - Yaw = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = 0, z = AxialVel.z})/mist.vec.mag({x = AxialVel.x, y = 0, z = AxialVel.z})) - - --now set correct direction: - if AxialVel.z > 0 then - Yaw = -Yaw - end - - -- AoA is angle between unitpos.x and the x and y velocities - AoA = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = AxialVel.y, z = 0})/mist.vec.mag({x = AxialVel.x, y = AxialVel.y, z = 0})) - - --now set correct direction: - if AxialVel.y > 0 then - AoA = -AoA - end - - ClimbAngle = math.asin(unitvel.y/mist.vec.mag(unitvel)) - end - return { Heading = Heading, Pitch = Pitch, Roll = Roll, Yaw = Yaw, AoA = AoA, ClimbAngle = ClimbAngle} - else - log:error("Couldn't get unit's position") - end - end - - --- Returns heading of given unit. - -- @tparam Unit unit unit whose heading is returned. - -- @param rawHeading - -- @treturn number heading of the unit, in range - -- of 0 to 2*pi. - function mist.getHeading(unit, rawHeading) - local unitpos = unit:getPosition() - if unitpos then - local Heading = math.atan2(unitpos.x.z, unitpos.x.x) - if not rawHeading then - Heading = Heading + mist.getNorthCorrection(unitpos.p) - end - if Heading < 0 then - Heading = Heading + 2*math.pi -- put heading in range of 0 to 2*pi - end - return Heading - end - end - - --- Returns given unit's pitch - -- @tparam Unit unit unit whose pitch is returned. - -- @treturn number pitch of given unit - function mist.getPitch(unit) - local unitpos = unit:getPosition() - if unitpos then - return math.asin(unitpos.x.y) - end - end - - --- Returns given unit's roll. - -- @tparam Unit unit unit whose roll is returned. - -- @treturn number roll of given unit - function mist.getRoll(unit) - local unitpos = unit:getPosition() - if unitpos then - -- now get roll: - --maybe not the best way to do it, but it works. - - --first, make a vector that is perpendicular to y and unitpos.x with cross product - local cp = mist.vec.cp(unitpos.x, {x = 0, y = 1, z = 0}) - - --now, get dot product of of this cross product with unitpos.z - local dp = mist.vec.dp(cp, unitpos.z) - - --now get the magnitude of the roll (magnitude of the angle between two vectors is acos(vec1.vec2/|vec1||vec2|) - local Roll = math.acos(dp/(mist.vec.mag(cp)*mist.vec.mag(unitpos.z))) - - --now, have to get sign of roll. - -- by convention, making right roll positive - -- to get sign of roll, use the y component of unitpos.z. For right roll, y component is negative. - - if unitpos.z.y > 0 then -- left roll, flip the sign of the roll - Roll = -Roll - end - return Roll - end - end - - --- Returns given unit's yaw. - -- @tparam Unit unit unit whose yaw is returned. - -- @treturn number yaw of given unit. - function mist.getYaw(unit) - local unitpos = unit:getPosition() - if unitpos then - -- get unit velocity - local unitvel = unit:getVelocity() - if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! - local AxialVel = {} --unit velocity transformed into aircraft axes directions - - --transform velocity components in direction of aircraft axes. - AxialVel.x = mist.vec.dp(unitpos.x, unitvel) - AxialVel.y = mist.vec.dp(unitpos.y, unitvel) - AxialVel.z = mist.vec.dp(unitpos.z, unitvel) - - --Yaw is the angle between unitpos.x and the x and z velocities - --define right yaw as positive - local Yaw = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = 0, z = AxialVel.z})/mist.vec.mag({x = AxialVel.x, y = 0, z = AxialVel.z})) - - --now set correct direction: - if AxialVel.z > 0 then - Yaw = -Yaw - end - return Yaw - end - end - end - - --- Returns given unit's angle of attack. - -- @tparam Unit unit unit to get AoA from. - -- @treturn number angle of attack of the given unit. - function mist.getAoA(unit) - local unitpos = unit:getPosition() - if unitpos then - local unitvel = unit:getVelocity() - if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! - local AxialVel = {} --unit velocity transformed into aircraft axes directions - - --transform velocity components in direction of aircraft axes. - AxialVel.x = mist.vec.dp(unitpos.x, unitvel) - AxialVel.y = mist.vec.dp(unitpos.y, unitvel) - AxialVel.z = mist.vec.dp(unitpos.z, unitvel) - - -- AoA is angle between unitpos.x and the x and y velocities - local AoA = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = AxialVel.y, z = 0})/mist.vec.mag({x = AxialVel.x, y = AxialVel.y, z = 0})) - - --now set correct direction: - if AxialVel.y > 0 then - AoA = -AoA - end - return AoA - end - end - end - - --- Returns given unit's climb angle. - -- @tparam Unit unit unit to get climb angle from. - -- @treturn number climb angle of given unit. - function mist.getClimbAngle(unit) - local unitpos = unit:getPosition() - if unitpos then - local unitvel = unit:getVelocity() - if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! - return math.asin(unitvel.y/mist.vec.mag(unitvel)) - end - end - end - - --[[-- - Unit name table. - Many Mist functions require tables of unit names, which are known - in Mist as UnitNameTables. These follow a special set of shortcuts - borrowed from Slmod. These shortcuts alleviate the problem of entering - huge lists of unit names by hand, and in many cases, they remove the - need to even know the names of the units in the first place! - - These are the unit table "short-cut" commands: - - Prefixes: - "[-u]" - subtract this unit if its in the table - "[g]" - add this group to the table - "[-g]" - subtract this group from the table - "[c]" - add this country's units - "[-c]" - subtract this country's units if any are in the table - - Stand-alone identifiers - "[all]" - add all units - "[-all]" - subtract all units (not very useful by itself) - "[blue]" - add all blue units - "[-blue]" - subtract all blue units - "[red]" - add all red coalition units - "[-red]" - subtract all red units - - Compound Identifiers: - "[c][helicopter]" - add all of this country's helicopters - "[-c][helicopter]" - subtract all of this country's helicopters - "[c][plane]" - add all of this country's planes - "[-c][plane]" - subtract all of this country's planes - "[c][ship]" - add all of this country's ships - "[-c][ship]" - subtract all of this country's ships - "[c][vehicle]" - add all of this country's vehicles - "[-c][vehicle]" - subtract all of this country's vehicles - - "[all][helicopter]" - add all helicopters - "[-all][helicopter]" - subtract all helicopters - "[all][plane]" - add all planes - "[-all][plane]" - subtract all planes - "[all][ship]" - add all ships - "[-all][ship]" - subtract all ships - "[all][vehicle]" - add all vehicles - "[-all][vehicle]" - subtract all vehicles - - "[blue][helicopter]" - add all blue coalition helicopters - "[-blue][helicopter]" - subtract all blue coalition helicopters - "[blue][plane]" - add all blue coalition planes - "[-blue][plane]" - subtract all blue coalition planes - "[blue][ship]" - add all blue coalition ships - "[-blue][ship]" - subtract all blue coalition ships - "[blue][vehicle]" - add all blue coalition vehicles - "[-blue][vehicle]" - subtract all blue coalition vehicles - - "[red][helicopter]" - add all red coalition helicopters - "[-red][helicopter]" - subtract all red coalition helicopters - "[red][plane]" - add all red coalition planes - "[-red][plane]" - subtract all red coalition planes - "[red][ship]" - add all red coalition ships - "[-red][ship]" - subtract all red coalition ships - "[red][vehicle]" - add all red coalition vehicles - "[-red][vehicle]" - subtract all red coalition vehicles - - Country names to be used in [c] and [-c] short-cuts: - Turkey - Norway - The Netherlands - Spain - 11 - UK - Denmark - USA - Georgia - Germany - Belgium - Canada - France - Israel - Ukraine - Russia - South Ossetia - Abkhazia - Italy - Australia - Austria - Belarus - Bulgaria - Czech Republic - China - Croatia - Finland - Greece - Hungary - India - Iran - Iraq - Japan - Kazakhstan - North Korea - Pakistan - Poland - Romania - Saudi Arabia - Serbia, Slovakia - South Korea - Sweden - Switzerland - Syria - USAF Aggressors - - Do NOT use a '[u]' notation for single units. Single units are referenced - the same way as before: Simply input their names as strings. - - These unit tables are evaluated in order, and you cannot subtract a unit - from a table before it is added. For example: - - {'[blue]', '[-c]Georgia'} - - will evaluate to all of blue coalition except those units owned by the - country named "Georgia"; however: - - {'[-c]Georgia', '[blue]'} - - will evaluate to all of the units in blue coalition, because the addition - of all units owned by blue coalition occurred AFTER the subtraction of all - units owned by Georgia (which actually subtracted nothing at all, since - there were no units in the table when the subtraction occurred). - - More examples: - - {'[blue][plane]', '[-c]Georgia', '[-g]Hawg 1'} - - Evaluates to all blue planes, except those blue units owned by the country - named "Georgia" and the units in the group named "Hawg1". - - - {'[g]arty1', '[g]arty2', '[-u]arty1_AD', '[-u]arty2_AD', 'Shark 11' } - - Evaluates to the unit named "Shark 11", plus all the units in groups named - "arty1" and "arty2" except those that are named "arty1\_AD" and "arty2\_AD". - - @table UnitNameTable - ]] - - --- Returns a table containing unit names. - -- @tparam table tbl sequential strings - -- @treturn table @{UnitNameTable} - function mist.makeUnitTable(tbl, exclude) - --Assumption: will be passed a table of strings, sequential - --log:info(tbl) - - - local excludeType = {} - if exclude then - if type(exclude) == 'table' then - for x, y in pairs(exclude) do - excludeType[x] = true - excludeType[y] = true - end - else - excludeType[exclude] = true - end - - end - - - local units_by_name = {} - - local l_munits = mist.DBs.units --local reference for faster execution - for i = 1, #tbl do - local unit = tbl[i] - if unit:sub(1,4) == '[-u]' then --subtract a unit - if units_by_name[unit:sub(5)] then -- 5 to end - units_by_name[unit:sub(5)] = nil --remove - end - elseif unit:sub(1,3) == '[g]' then -- add a group - for coa, coa_tbl in pairs(l_munits) do - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' and group_tbl.groupName == unit:sub(4) then - -- index 4 to end - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - elseif unit:sub(1,4) == '[-g]' then -- subtract a group - for coa, coa_tbl in pairs(l_munits) do - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' and group_tbl.groupName == unit:sub(5) then - -- index 5 to end - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - elseif unit:sub(1,3) == '[c]' then -- add a country - local category = '' - local country_start = 4 - if unit:sub(4,15) == '[helicopter]' then - category = 'helicopter' - country_start = 16 - elseif unit:sub(4,10) == '[plane]' then - category = 'plane' - country_start = 11 - elseif unit:sub(4,9) == '[ship]' then - category = 'ship' - country_start = 10 - elseif unit:sub(4,12) == '[vehicle]' then - category = 'vehicle' - country_start = 13 - elseif unit:sub(4, 11) == '[static]' then - category = 'static' - country_start = 12 - end - for coa, coa_tbl in pairs(l_munits) do - for country, country_table in pairs(coa_tbl) do - if country == string.lower(unit:sub(country_start)) then -- match - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - end - elseif unit:sub(1,4) == '[-c]' then -- subtract a country - local category = '' - local country_start = 5 - if unit:sub(5,16) == '[helicopter]' then - category = 'helicopter' - country_start = 17 - elseif unit:sub(5,11) == '[plane]' then - category = 'plane' - country_start = 12 - elseif unit:sub(5,10) == '[ship]' then - category = 'ship' - country_start = 11 - elseif unit:sub(5,13) == '[vehicle]' then - category = 'vehicle' - country_start = 14 - elseif unit:sub(5, 12) == '[static]' then - category = 'static' - country_start = 13 - end - for coa, coa_tbl in pairs(l_munits) do - for country, country_table in pairs(coa_tbl) do - if country == string.lower(unit:sub(country_start)) then -- match - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - end - elseif unit:sub(1,6) == '[blue]' then -- add blue coalition - local category = '' - if unit:sub(7) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(7) == '[plane]' then - category = 'plane' - elseif unit:sub(7) == '[ship]' then - category = 'ship' - elseif unit:sub(7) == '[vehicle]' then - category = 'vehicle' - elseif unit:sub(7) == '[static]' then - category = 'static' - end - for coa, coa_tbl in pairs(l_munits) do - if coa == 'blue' then - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - end - elseif unit:sub(1,7) == '[-blue]' then -- subtract blue coalition - local category = '' - if unit:sub(8) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(8) == '[plane]' then - category = 'plane' - elseif unit:sub(8) == '[ship]' then - category = 'ship' - elseif unit:sub(8) == '[vehicle]' then - category = 'vehicle' - elseif unit:sub(8) == '[static]' then - category = 'static' - end - for coa, coa_tbl in pairs(l_munits) do - if coa == 'blue' then - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - end - elseif unit:sub(1,5) == '[red]' then -- add red coalition - local category = '' - if unit:sub(6) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(6) == '[plane]' then - category = 'plane' - elseif unit:sub(6) == '[ship]' then - category = 'ship' - elseif unit:sub(6) == '[vehicle]' then - category = 'vehicle' - elseif unit:sub(6) == '[static]' then - category = 'static' - end - for coa, coa_tbl in pairs(l_munits) do - if coa == 'red' then - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - end - elseif unit:sub(1,6) == '[-red]' then -- subtract red coalition - local category = '' - if unit:sub(7) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(7) == '[plane]' then - category = 'plane' - elseif unit:sub(7) == '[ship]' then - category = 'ship' - elseif unit:sub(7) == '[vehicle]' then - category = 'vehicle' - elseif unit:sub(7) == '[static]' then - category = 'static' - end - for coa, coa_tbl in pairs(l_munits) do - if coa == 'red' then - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - end - elseif unit:sub(1,5) == '[all]' then -- add all of a certain category (or all categories) - local category = '' - if unit:sub(6) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(6) == '[plane]' then - category = 'plane' - elseif unit:sub(6) == '[ship]' then - category = 'ship' - elseif unit:sub(6) == '[vehicle]' then - category = 'vehicle' - elseif unit:sub(6) == '[static]' then - category = 'static' - end - for coa, coa_tbl in pairs(l_munits) do - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - elseif unit:sub(1,6) == '[-all]' then -- subtract all of a certain category (or all categories) - local category = '' - if unit:sub(7) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(7) == '[plane]' then - category = 'plane' - elseif unit:sub(7) == '[ship]' then - category = 'ship' - elseif unit:sub(7) == '[vehicle]' then - category = 'vehicle' - elseif unit:sub(7) == '[static]' then - category = 'static' - end - for coa, coa_tbl in pairs(l_munits) do - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' and (category == '' or unit_type == category) and not excludeType[unit_type] then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - else -- just a regular unit - units_by_name[unit] = true --add - end - end - - local units_tbl = {} -- indexed sequentially - for unit_name, val in pairs(units_by_name) do - if val then - units_tbl[#units_tbl + 1] = unit_name -- add all the units to the table - end - end - - - units_tbl.processed = timer.getTime() --add the processed flag - return units_tbl -end - -function mist.getDeadMapObjsInZones(zone_names) - -- zone_names: table of zone names - -- returns: table of dead map objects (indexed numerically) - local map_objs = {} - local zones = {} - for i = 1, #zone_names do - if mist.DBs.zonesByName[zone_names[i]] then - zones[#zones + 1] = mist.DBs.zonesByName[zone_names[i]] - end - end - for obj_id, obj in pairs(mist.DBs.deadObjects) do - if obj.objectType and obj.objectType == 'building' then --dead map object - for i = 1, #zones do - if ((zones[i].point.x - obj.objectPos.x)^2 + (zones[i].point.z - obj.objectPos.z)^2)^0.5 <= zones[i].radius then - map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) - end - end - end - end - return map_objs -end - -function mist.getDeadMapObjsInPolygonZone(zone) - -- zone_names: table of zone names - -- returns: table of dead map objects (indexed numerically) - local map_objs = {} - for obj_id, obj in pairs(mist.DBs.deadObjects) do - if obj.objectType and obj.objectType == 'building' then --dead map object - if mist.pointInPolygon(obj.objectPos, zone) then - map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) - end - end - end - return map_objs -end - -function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. Code from http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm - --[[local type_tbl = { - point = {'table'}, - poly = {'table'}, - maxalt = {'number', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.pointInPolygon', type_tbl, {point, poly, maxalt}) - assert(err, errmsg) - ]] - point = mist.utils.makeVec3(point) - local px = point.x - local pz = point.z - local cn = 0 - local newpoly = mist.utils.deepCopy(poly) - - if not maxalt or (point.y <= maxalt) then - local polysize = #newpoly - newpoly[#newpoly + 1] = newpoly[1] - - newpoly[1] = mist.utils.makeVec3(newpoly[1]) - - for k = 1, polysize do - newpoly[k+1] = mist.utils.makeVec3(newpoly[k+1]) - if ((newpoly[k].z <= pz) and (newpoly[k+1].z > pz)) or ((newpoly[k].z > pz) and (newpoly[k+1].z <= pz)) then - local vt = (pz - newpoly[k].z) / (newpoly[k+1].z - newpoly[k].z) - if (px < newpoly[k].x + vt*(newpoly[k+1].x - newpoly[k].x)) then - cn = cn + 1 - end - end - end - - return cn%2 == 1 - else - return false - end -end - -function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) - local units = {} - - for i = 1, #unit_names do - units[#units + 1] = Unit.getByName(unit_names[i]) or StaticObject.getByName(unit_names[i]) - end - - local inZoneUnits = {} - for i =1, #units do - local lUnit = units[i] - local lCat = lUnit:getCategory() - if ((lCat == 14 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then - inZoneUnits[#inZoneUnits + 1] = lUnit - end - end - - return inZoneUnits -end - -function mist.getUnitsInZones(unit_names, zone_names, zone_type) - zone_type = zone_type or 'cylinder' - if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then - zone_type = 'cylinder' - end - if zone_type == 's' or zone_type == 'spherical' or zone_type == 'S' then - zone_type = 'sphere' - end - - assert(zone_type == 'cylinder' or zone_type == 'sphere', 'invalid zone_type: ' .. tostring(zone_type)) - - local units = {} - local zones = {} - - if zone_names and type(zone_names) == 'string' then - zone_names = {zoneNames} - end - for k = 1, #unit_names do - - local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) - if unit then - units[#units + 1] = unit - end - end - - - for k = 1, #zone_names do - local zone = mist.DBs.zonesByName[zone_names[k]] - if zone then - zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z, verts = zone.vertices} - end - end - - local in_zone_units = {} - - for units_ind = 1, #units do - local lUnit = units[units_ind] - local unit_pos = lUnit:getPosition().p - local lCat = lUnit:getCategory() - for zones_ind = 1, #zones do - if zone_type == 'sphere' then --add land height value for sphere zone type - local alt = land.getHeight({x = zones[zones_ind].x, y = zones[zones_ind].z}) - if alt then - zones[zones_ind].y = alt - end - end - - if unit_pos and ((lCat == 1 and lUnit:isActive() == true) or lCat ~= 1) then -- it is a unit and is active or it is not a unit - if zones[zones_ind].verts then - if mist.pointInPolygon(unit_pos, zones[zones_ind].verts) then - in_zone_units[#in_zone_units + 1] = lUnit - end - - else - if zone_type == 'cylinder' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = lUnit - break - elseif zone_type == 'sphere' and (((unit_pos.x - zones[zones_ind].x)^2 + (unit_pos.y - zones[zones_ind].y)^2 + (unit_pos.z - zones[zones_ind].z)^2)^0.5 <= zones[zones_ind].radius) then - in_zone_units[#in_zone_units + 1] = lUnit - break - end - end - end - end - end - return in_zone_units -end - -function mist.getUnitsInMovingZones(unit_names, zone_unit_names, radius, zone_type) - - zone_type = zone_type or 'cylinder' - if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then - zone_type = 'cylinder' - end - if zone_type == 's' or zone_type == 'spherical' or zone_type == 'S' then - zone_type = 'sphere' - end - - assert(zone_type == 'cylinder' or zone_type == 'sphere', 'invalid zone_type: ' .. tostring(zone_type)) - - local units = {} - local zone_units = {} - - for k = 1, #unit_names do - local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) - if unit then - units[#units + 1] = unit - end - end - - for k = 1, #zone_unit_names do - local unit = Unit.getByName(zone_unit_names[k]) or StaticObject.getByName(zone_unit_names[k]) - if unit then - zone_units[#zone_units + 1] = unit - end - end - - local in_zone_units = {} - - for units_ind = 1, #units do - local lUnit = units[units_ind] - local lCat = lUnit:getCategory() - local unit_pos = lUnit:getPosition().p - for zone_units_ind = 1, #zone_units do - - local zone_unit_pos = zone_units[zone_units_ind]:getPosition().p - if unit_pos and zone_unit_pos and ((lCat == 1 and lUnit:isActive()) or lCat ~= 1) then - if zone_type == 'cylinder' and (((unit_pos.x - zone_unit_pos.x)^2 + (unit_pos.z - zone_unit_pos.z)^2)^0.5 <= radius) then - in_zone_units[#in_zone_units + 1] = lUnit - break - elseif zone_type == 'sphere' and (((unit_pos.x - zone_unit_pos.x)^2 + (unit_pos.y - zone_unit_pos.y)^2 + (unit_pos.z - zone_unit_pos.z)^2)^0.5 <= radius) then - in_zone_units[#in_zone_units + 1] = lUnit - break - end - end - end - end - return in_zone_units -end - -function mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) - log:info("$1, $2, $3, $4, $5", unitset1, altoffset1, unitset2, altoffset2, radius) - radius = radius or math.huge - local unit_info1 = {} - local unit_info2 = {} - - -- get the positions all in one step, saves execution time. - for unitset1_ind = 1, #unitset1 do - local unit1 = Unit.getByName(unitset1[unitset1_ind]) - local lCat = unit1:getCategory() - if unit1 and ((lCat == 1 and unit1:isActive()) or lCat ~= 1) then - unit_info1[#unit_info1 + 1] = {} - unit_info1[#unit_info1].unit = unit1 - unit_info1[#unit_info1].pos = unit1:getPosition().p - end - end - - for unitset2_ind = 1, #unitset2 do - local unit2 = Unit.getByName(unitset2[unitset2_ind]) - local lCat = unit2:getCategory() - if unit2 and ((lCat == 1 and unit2:isActive()) or lCat ~= 1) then - unit_info2[#unit_info2 + 1] = {} - unit_info2[#unit_info2].unit = unit2 - unit_info2[#unit_info2].pos = unit2:getPosition().p - end - end - - local LOS_data = {} - -- now compute los - for unit1_ind = 1, #unit_info1 do - local unit_added = false - for unit2_ind = 1, #unit_info2 do - if radius == math.huge or (mist.vec.mag(mist.vec.sub(unit_info1[unit1_ind].pos, unit_info2[unit2_ind].pos)) < radius) then -- inside radius - local point1 = { x = unit_info1[unit1_ind].pos.x, y = unit_info1[unit1_ind].pos.y + altoffset1, z = unit_info1[unit1_ind].pos.z} - local point2 = { x = unit_info2[unit2_ind].pos.x, y = unit_info2[unit2_ind].pos.y + altoffset2, z = unit_info2[unit2_ind].pos.z} - if land.isVisible(point1, point2) then - if unit_added == false then - unit_added = true - LOS_data[#LOS_data + 1] = {} - LOS_data[#LOS_data].unit = unit_info1[unit1_ind].unit - LOS_data[#LOS_data].vis = {} - LOS_data[#LOS_data].vis[#LOS_data[#LOS_data].vis + 1] = unit_info2[unit2_ind].unit - else - LOS_data[#LOS_data].vis[#LOS_data[#LOS_data].vis + 1] = unit_info2[unit2_ind].unit - end - end - end - end - end - - return LOS_data -end - -function mist.getAvgPoint(points) - local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 - for i = 1, #points do - local nPoint = mist.utils.makeVec3(points[i]) - if nPoint.z then - avgX = avgX + nPoint.x - avgY = avgY + nPoint.y - avgZ = avgZ + nPoint.z - totNum = totNum + 1 - end - end - if totNum ~= 0 then - return {x = avgX/totNum, y = avgY/totNum, z = avgZ/totNum} - end -end - ---Gets the average position of a group of units (by name) -function mist.getAvgPos(unitNames) - local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 - for i = 1, #unitNames do - local unit - if Unit.getByName(unitNames[i]) then - unit = Unit.getByName(unitNames[i]) - elseif StaticObject.getByName(unitNames[i]) then - unit = StaticObject.getByName(unitNames[i]) - end - if unit then - local pos = unit:getPosition().p - if pos then -- you never know O.o - avgX = avgX + pos.x - avgY = avgY + pos.y - avgZ = avgZ + pos.z - totNum = totNum + 1 - end - end - end - if totNum ~= 0 then - return {x = avgX/totNum, y = avgY/totNum, z = avgZ/totNum} - end -end - -function mist.getAvgGroupPos(groupName) - if type(groupName) == 'string' and Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then - groupName = Group.getByName(groupName) - end - local units = {} - for i = 1, groupName:getSize() do - table.insert(units, groupName:getUnit(i):getName()) - end - - return mist.getAvgPos(units) - -end - ---[[ vars for mist.getMGRSString: -vars.units - table of unit names (NOT unitNameTable- maybe this should change). -vars.acc - integer between 0 and 5, inclusive -]] -function mist.getMGRSString(vars) - local units = vars.units - local acc = vars.acc or 5 - local avgPos = mist.getAvgPos(units) - if avgPos then - return mist.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) - end -end - ---[[ vars for mist.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. -]] -function mist.getLLString(vars) - local units = vars.units - local acc = vars.acc or 3 - local DMS = vars.DMS - local avgPos = mist.getAvgPos(units) - if avgPos then - local lat, lon = coord.LOtoLL(avgPos) - return mist.tostringLL(lat, lon, acc, DMS) - 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. -]] -function mist.getBRString(vars) - local units = vars.units - local ref = mist.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. - local alt = vars.alt - local metric = vars.metric - local avgPos = mist.getAvgPos(units) - if avgPos then - local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} - local dir = mist.utils.getDir(vec, ref) - local dist = mist.utils.get2DDist(avgPos, ref) - if alt then - alt = avgPos.y - end - return mist.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 mist.getLeadingPos: -vars.units - table of unit names -vars.heading - direction -vars.radius - number -vars.headingDegrees - boolean, switches heading to degrees -]] -function mist.getLeadingPos(vars) - local units = vars.units - local heading = vars.heading - local radius = vars.radius - if vars.headingDegrees then - heading = mist.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 = mist.vec.rotateVec2(mist.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 mist.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 mist.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. -]] -function mist.getLeadingMGRSString(vars) - local pos = mist.getLeadingPos(vars) - if pos then - local acc = vars.acc or 5 - return mist.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) - end -end - ---[[ vars for mist.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. -]] -function mist.getLeadingLLString(vars) - local pos = mist.getLeadingPos(vars) - if pos then - local acc = vars.acc or 3 - local DMS = vars.DMS - local lat, lon = coord.LOtoLL(pos) - return mist.tostringLL(lat, lon, acc, DMS) - end -end - ---[[ vars for mist.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. -]] -function mist.getLeadingBRString(vars) - local pos = mist.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 = mist.utils.getDir(vec, ref) - local dist = mist.utils.get2DDist(pos, ref) - if alt then - alt = pos.y - end - return mist.tostringBR(dir, dist, alt, metric) - end -end - ---[[getPathLength from GSH --- Returns the length between the defined set of points. Can also return the point index before the cutoff was achieved -p - table of path points, vec2 or vec3 -cutoff - number distance after which to stop at -topo - boolean for if it should get the topographical distance - -]] - -function mist.getPathLength(p, cutoff, topo) - local l = 0 - local cut = 0 or cutOff - local path = {} - - for i = 1, #p do - if topo then - table.insert(path, mist.utils.makeVec3GL(p[i])) - else - table.insert(path, mist.utils.makeVec3(p[i])) - end - end - - for i = 1, #path do - if i + 1 <= #path then - if topo then - l = mist.utils.get3DDist(path[i], path[i+1]) + l - else - l = mist.utils.get2DDist(path[i], path[i+1]) + l - end - end - if cut ~= 0 and l > cut then - return l, i - end - end - return l -end - ---[[ -Return a series of points to simplify the input table. Best used in conjunction with findPathOnRoads to turn the massive table into a list of X points. -p - table of path points, can be vec2 or vec3 -num - number of segments. -exact - boolean for whether or not it returns the exact distance or uses the first WP to that distance. - - -]] - -function mist.getPathInSegments(p, num, exact) - local tot = mist.getPathLength(p) - local checkDist = tot/num - local typeUsed = 'vec2' - - local points = {[1] = p[1]} - local curDist = 0 - for i = 1, #p do - if i + 1 <= #p then - curDist = mist.utils.get2DDist(p[i], p[i+1]) + curDist - if curDist > checkDist then - curDist = 0 - if exact then - -- get avg point between the two - -- insert into point table - -- need to be accurate... maybe reassign the point for the value it is checking? - -- insert into p table? - else - table.insert(points, p[i]) - end - end - - end - - end - return points - -end - - -function mist.getPointAtDistanceOnPath(p, dist, r, rtn) - log:info('find distance: $1', dist) - local rType = r or 'roads' - local point = {x= 0, y = 0, z = 0} - local path = {} - local ret = rtn or 'vec2' - local l = 0 - if p[1] and #p == 2 then - path = land.findPathOnRoads(rType, p[1].x, p[1].y, p[2].x, p[2].y) - else - path = p - end - for i = 1, #path do - if i + 1 <= #path then - nextPoint = path[i+1] - if topo then - l = mist.utils.get3DDist(path[i], path[i+1]) + l - else - l = mist.utils.get2DDist(path[i], path[i+1]) + l - end - end - if l > dist then - local diff = dist - if i ~= 1 then -- get difference - diff = l - dist - end - local dir = mist.utils.getHeadingPoints(mist.utils.makeVec3(path[i]), mist.utils.makeVec3(path[i+1])) - local x, y - if r then - x, y = land.getClosestPointOnRoads(rType, mist.utils.round((math.cos(dir) * diff) + path[i].x,1), mist.utils.round((math.sin(dir) * diff) + path[i].y,1)) - else - x, y = mist.utils.round((math.cos(dir) * diff) + path[i].x,1), mist.utils.round((math.sin(dir) * diff) + path[i].y,1) - end - - if ret == 'vec2' then - return {x = x, y = y}, dir - elseif ret == 'vec3' then - return {x = x, y = 0, z = y}, dir - end - - return {x = x, y = y}, dir - end - end - log:warn('Find point at distance: $1, path distance $2', dist, l) - return false -end - - -function mist.projectPoint(point, dist, theta) - local newPoint = {} - if point.z then - newPoint.z = mist.utils.round(math.sin(theta) * dist + point.z, 3) - newPoint.y = mist.utils.deepCopy(point.y) - else - newPoint.y = mist.utils.round(math.sin(theta) * dist + point.y, 3) - end - newPoint.x = mist.utils.round(math.cos(theta) * dist + point.x, 3) - - return newPoint -end - -end - - - - ---- Group functions. --- @section groups -do -- group functions scope - - --- Check table used for group creation. - -- @tparam table groupData table to check. - -- @treturn boolean true if a group can be spawned using - -- this table, false otherwise. - function mist.groupTableCheck(groupData) - -- return false if country, category - -- or units are missing - if not groupData.country or - not groupData.category or - not groupData.units then - return false - end - -- return false if unitData misses - -- x, y or type - for unitId, unitData in pairs(groupData.units) do - if not unitData.x or - not unitData.y or - not unitData.type then - return false - end - end - -- everything we need is here return true - return true - end - - --- Returns group data table of give group. - function mist.getCurrentGroupData(gpName) - local dbData = mist.getGroupData(gpName) - - if Group.getByName(gpName) and Group.getByName(gpName):isExist() == true then - local newGroup = Group.getByName(gpName) - local newData = {} - newData.name = gpName - newData.groupId = tonumber(newGroup:getID()) - newData.category = newGroup:getCategory() - newData.groupName = gpName - newData.hidden = dbData.hidden - - if newData.category == 2 then - newData.category = 'vehicle' - elseif newData.category == 3 then - newData.category = 'ship' - end - - newData.units = {} - local newUnits = newGroup:getUnits() - if #newUnits == 0 then - log:warn('getCurrentGroupData has returned no units for: $1', gpName) - end - for unitNum, unitData in pairs(newGroup:getUnits()) do - newData.units[unitNum] = {} - local uName = unitData:getName() - - if mist.DBs.unitsByName[uName] and unitData:getTypeName() == mist.DBs.unitsByName[uName].type and mist.DBs.unitsByName[uName].unitId == tonumber(unitData:getID()) then -- If old data matches most of new data - newData.units[unitNum] = mist.utils.deepCopy(mist.DBs.unitsByName[uName]) - else - newData.units[unitNum].unitId = tonumber(unitData:getID()) - newData.units[unitNum].type = unitData:getTypeName() - newData.units[unitNum].skill = mist.getUnitSkill(uName) - newData.country = string.lower(country.name[unitData:getCountry()]) - newData.units[unitNum].callsign = unitData:getCallsign() - newData.units[unitNum].unitName = uName - end - - newData.units[unitNum].x = unitData:getPosition().p.x - newData.units[unitNum].y = unitData:getPosition().p.z - newData.units[unitNum].point = {x = newData.units[unitNum].x, y = newData.units[unitNum].y} - newData.units[unitNum].heading = mist.getHeading(unitData, true) -- added to DBs - newData.units[unitNum].alt = unitData:getPosition().p.y - newData.units[unitNum].speed = mist.vec.mag(unitData:getVelocity()) - - end - - return newData - elseif StaticObject.getByName(gpName) and StaticObject.getByName(gpName):isExist() == true then - local staticObj = StaticObject.getByName(gpName) - dbData.units[1].x = staticObj:getPosition().p.x - dbData.units[1].y = staticObj:getPosition().p.z - dbData.units[1].alt = staticObj:getPosition().p.y - dbData.units[1].heading = mist.getHeading(staticObj, true) - - return dbData - end - - end - - function mist.getGroupData(gpName) - local found = false - local newData = {} - if mist.DBs.groupsByName[gpName] then - newData = mist.utils.deepCopy(mist.DBs.groupsByName[gpName]) - found = true - end - - if found == false then - for groupName, groupData in pairs(mist.DBs.groupsByName) do - if mist.stringMatch(groupName, gpName) == true then - newData = mist.utils.deepCopy(groupData) - newData.groupName = groupName - found = true - break - end - end - end - - local payloads - if newData.category == 'plane' or newData.category == 'helicopter' then - payloads = mist.getGroupPayload(newData.groupName) - end - if found == true then - --newData.hidden = false -- maybe add this to DBs - - for unitNum, unitData in pairs(newData.units) do - newData.units[unitNum] = {} - - newData.units[unitNum].unitId = unitData.unitId - --newData.units[unitNum].point = unitData.point - newData.units[unitNum].x = unitData.point.x - newData.units[unitNum].y = unitData.point.y - newData.units[unitNum].alt = unitData.alt - newData.units[unitNum].alt_type = unitData.alt_type - newData.units[unitNum].speed = unitData.speed - newData.units[unitNum].type = unitData.type - newData.units[unitNum].skill = unitData.skill - newData.units[unitNum].unitName = unitData.unitName - newData.units[unitNum].heading = unitData.heading -- added to DBs - newData.units[unitNum].playerCanDrive = unitData.playerCanDrive -- added to DBs - - - if newData.category == 'plane' or newData.category == 'helicopter' then - newData.units[unitNum].payload = payloads[unitNum] - newData.units[unitNum].livery_id = unitData.livery_id - newData.units[unitNum].onboard_num = unitData.onboard_num - newData.units[unitNum].callsign = unitData.callsign - newData.units[unitNum].AddPropAircraft = unitData.AddPropAircraft - end - if newData.category == 'static' then - newData.units[unitNum].categoryStatic = unitData.categoryStatic - newData.units[unitNum].mass = unitData.mass - newData.units[unitNum].canCargo = unitData.canCargo - newData.units[unitNum].shape_name = unitData.shape_name - end - end - --log:info(newData) - return newData - else - log:error('$1 not found in MIST database', gpName) - return - end - end - - function mist.getPayload(unitIdent) - -- refactor to search by groupId and allow groupId and groupName as inputs - local unitId = unitIdent - if type(unitIdent) == 'string' and not tonumber(unitIdent) then - if mist.DBs.MEunitsByName[unitIdent] then - unitId = mist.DBs.MEunitsByName[unitIdent].unitId - else - log:error("Unit not found in mist.DBs.MEunitsByName: $1", unitIdent) - end - end - local gpId = mist.DBs.MEunitsById[unitId].groupId - - if gpId and unitId then - 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 - for unitIndex, unitData in pairs(group_data.units) do --group index - if unitData.unitId == unitId then - return unitData.payload - end - end - end - end - end - end - end - end - end - end - end - else - log:error('Need string or number. Got: $1', type(unitIdent)) - return false - end - log:warn("Couldn't find payload for unit: $1", unitIdent) - return - end - - function mist.getGroupPayload(groupIdent) - local gpId = groupIdent - if type(groupIdent) == 'string' and not tonumber(groupIdent) then - if mist.DBs.MEgroupsByName[groupIdent] then - gpId = mist.DBs.MEgroupsByName[groupIdent].groupId - else - log:error('$1 not found in mist.DBs.MEgroupsByName', groupIdent) - end - end - - if gpId then - for coa_name, coa_data in pairs(env.mission.coalition) do - if 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 - local payloads = {} - for unitIndex, unitData in pairs(group_data.units) do --group index - payloads[unitIndex] = unitData.payload - end - return payloads - end - end - end - end - end - end - end - end - end - else - log:error('Need string or number. Got: $1', type(groupIdent)) - return false - end - log:warn("Couldn't find payload for group: $1", groupIdent) - return - - end - - function mist.getValidRandomPoint(vars) - - - end - - function mist.teleportToPoint(vars) -- main teleport function that all of teleport/respawn functions call - --log:info(vars) - local point = vars.point - local gpName - if vars.gpName then - gpName = vars.gpName - elseif vars.groupName then - gpName = vars.groupName - else - log:error('Missing field groupName or gpName in variable table') - end - - local action = vars.action - - local disperse = vars.disperse or false - local maxDisp = vars.maxDisp or 200 - local radius = vars.radius or 0 - local innerRadius = vars.innerRadius - - local route = vars.route - local dbData = false - - local newGroupData - if gpName and not vars.groupData then - if string.lower(action) == 'teleport' or string.lower(action) == 'tele' then - newGroupData = mist.getCurrentGroupData(gpName) - elseif string.lower(action) == 'respawn' then - newGroupData = mist.getGroupData(gpName) - dbData = true - elseif string.lower(action) == 'clone' then - newGroupData = mist.getGroupData(gpName) - newGroupData.clone = 'order66' - dbData = true - else - action = 'tele' - newGroupData = mist.getCurrentGroupData(gpName) - end - else - action = 'tele' - newGroupData = vars.groupData - end - - if vars.newGroupName then - newGroupData.groupName = vars.newGroupName - end - - if #newGroupData.units == 0 then - log:warn('$1 has no units in group table', gpName) - return - end - - --log:info('get Randomized Point') - local diff = {x = 0, y = 0} - local newCoord, origCoord - - local validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} - if vars.validTerrain then - validTerrain = vars.validTerrain - else - if string.lower(newGroupData.category) == 'ship' then - validTerrain = {'SHALLOW_WATER' , 'WATER'} - elseif string.lower(newGroupData.category) == 'vehicle' then - validTerrain = {'LAND', 'ROAD'} - end - end - local offsets = {} - if point and radius >= 0 then - local valid = false - -- new thoughts - --[[ Get AVG position of group and max radius distance to that avg point, otherwise use disperse data to get zone area to check - if disperse then - - else - - end - -- ]] - - - - - - - ---- old - for i = 1, 100 do - newCoord = mist.getRandPointInCircle(point, radius, innerRadius) - if mist.isTerrainValid(newCoord, validTerrain) then - origCoord = mist.utils.deepCopy(newCoord) - diff = {x = (newCoord.x - newGroupData.units[1].x), y = (newCoord.y - newGroupData.units[1].y)} - valid = true - break - end - end - if valid == false then - log:error('Point supplied in variable table is not a valid coordinate. Valid coords: $1', validTerrain) - return false - end - end - if not newGroupData.country and mist.DBs.groupsByName[newGroupData.groupName].country then - newGroupData.country = mist.DBs.groupsByName[newGroupData.groupName].country - end - if not newGroupData.category and mist.DBs.groupsByName[newGroupData.groupName].category then - newGroupData.category = mist.DBs.groupsByName[newGroupData.groupName].category - end - --log:info(point) - for unitNum, unitData in pairs(newGroupData.units) do - --log:info(unitNum) - if disperse then - local unitCoord - if maxDisp and type(maxDisp) == 'number' and unitNum ~= 1 then - for i = 1, 100 do - unitCoord = mist.getRandPointInCircle(origCoord, maxDisp) - if mist.isTerrainValid(unitCoord, validTerrain) == true then - --log:warn('Index: $1, Itered: $2. AT: $3', unitNum, i, unitCoord) - break - end - end - - --else - --newCoord = mist.getRandPointInCircle(zone.point, zone.radius) - end - if unitNum == 1 then - unitCoord = mist.utils.deepCopy(newCoord) - end - if unitCoord then - newGroupData.units[unitNum].x = unitCoord.x - newGroupData.units[unitNum].y = unitCoord.y - end - else - newGroupData.units[unitNum].x = unitData.x + diff.x - newGroupData.units[unitNum].y = unitData.y + diff.y - end - if point then - if (newGroupData.category == 'plane' or newGroupData.category == 'helicopter') then - if point.z and point.y > 0 and point.y > land.getHeight({newGroupData.units[unitNum].x, newGroupData.units[unitNum].y}) + 10 then - newGroupData.units[unitNum].alt = point.y - --log:info('far enough from ground') - else - - if newGroupData.category == 'plane' then - --log:info('setNewAlt') - newGroupData.units[unitNum].alt = land.getHeight({newGroupData.units[unitNum].x, newGroupData.units[unitNum].y}) + math.random(300, 9000) - else - newGroupData.units[unitNum].alt = land.getHeight({newGroupData.units[unitNum].x, newGroupData.units[unitNum].y}) + math.random(200, 3000) - end - end - end - end - end - - if newGroupData.start_time then - newGroupData.startTime = newGroupData.start_time - end - - if newGroupData.startTime and newGroupData.startTime ~= 0 and dbData == true then - local timeDif = timer.getAbsTime() - timer.getTime0() - if timeDif > newGroupData.startTime then - newGroupData.startTime = 0 - else - newGroupData.startTime = newGroupData.startTime - timeDif - end - - end - - if route then - newGroupData.route = route - end - --log:info(newGroupData) - --mist.debug.writeData(mist.utils.serialize,{'teleportToPoint', newGroupData}, 'newGroupData.lua') - if string.lower(newGroupData.category) == 'static' then - --log:info(newGroupData) - return mist.dynAddStatic(newGroupData) - end - return mist.dynAdd(newGroupData) - - end - - function mist.respawnInZone(gpName, zone, disperse, maxDisp) - - if type(gpName) == 'table' and gpName:getName() then - gpName = gpName:getName() - elseif type(gpName) == 'table' and gpName[1]:getName() then - gpName = math.random(#gpName) - else - gpName = tostring(gpName) - end - - if type(zone) == 'string' then - zone = mist.DBs.zonesByName[zone] - elseif type(zone) == 'table' and not zone.radius then - zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] - end - local vars = {} - vars.gpName = gpName - vars.action = 'respawn' - vars.point = zone.point - vars.radius = zone.radius - vars.disperse = disperse - vars.maxDisp = maxDisp - return mist.teleportToPoint(vars) - end - - function mist.cloneInZone(gpName, zone, disperse, maxDisp) - --log:info('cloneInZone') - if type(gpName) == 'table' then - gpName = gpName:getName() - else - gpName = tostring(gpName) - end - - if type(zone) == 'string' then - zone = mist.DBs.zonesByName[zone] - elseif type(zone) == 'table' and not zone.radius then - zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] - end - local vars = {} - vars.gpName = gpName - vars.action = 'clone' - vars.point = zone.point - vars.radius = zone.radius - vars.disperse = disperse - vars.maxDisp = maxDisp - --log:info('do teleport') - return mist.teleportToPoint(vars) - end - - function mist.teleportInZone(gpName, zone, disperse, maxDisp) -- groupName, zoneName or table of Zone Names, keepForm is a boolean - if type(gpName) == 'table' and gpName:getName() then - gpName = gpName:getName() - else - gpName = tostring(gpName) - end - - if type(zone) == 'string' then - zone = mist.DBs.zonesByName[zone] - elseif type(zone) == 'table' and not zone.radius then - zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] - end - - local vars = {} - vars.gpName = gpName - vars.action = 'tele' - vars.point = zone.point - vars.radius = zone.radius - vars.disperse = disperse - vars.maxDisp = maxDisp - return mist.teleportToPoint(vars) - end - - function mist.respawnGroup(gpName, task) - local vars = {} - vars.gpName = gpName - vars.action = 'respawn' - if task and type(task) ~= 'number' then - vars.route = mist.getGroupRoute(gpName, 'task') - end - local newGroup = mist.teleportToPoint(vars) - if task and type(task) == 'number' then - local newRoute = mist.getGroupRoute(gpName, 'task') - mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) - end - return newGroup - end - - function mist.cloneGroup(gpName, task) - local vars = {} - vars.gpName = gpName - vars.action = 'clone' - if task and type(task) ~= 'number' then - vars.route = mist.getGroupRoute(gpName, 'task') - end - local newGroup = mist.teleportToPoint(vars) - if task and type(task) == 'number' then - local newRoute = mist.getGroupRoute(gpName, 'task') - mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) - end - return newGroup - end - - function mist.teleportGroup(gpName, task) - local vars = {} - vars.gpName = gpName - vars.action = 'teleport' - if task and type(task) ~= 'number' then - vars.route = mist.getGroupRoute(gpName, 'task') - end - local newGroup = mist.teleportToPoint(vars) - if task and type(task) == 'number' then - local newRoute = mist.getGroupRoute(gpName, 'task') - mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) - end - return newGroup - end - - function mist.spawnRandomizedGroup(groupName, vars) -- need to debug - if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then - local gpData = mist.getGroupData(groupName) - gpData.units = mist.randomizeGroupOrder(gpData.units, vars) - gpData.route = mist.getGroupRoute(groupName, 'task') - - mist.dynAdd(gpData) - end - - return true - end - - function mist.randomizeNumTable(vars) - local newTable = {} - - local excludeIndex = {} - local randomTable = {} - - if vars and vars.exclude and type(vars.exclude) == 'table' then - for index, data in pairs(vars.exclude) do - excludeIndex[data] = true - end - end - - local low, hi, size - - if vars.size then - size = vars.size - end - - if vars and vars.lowerLimit and type(vars.lowerLimit) == 'number' then - low = mist.utils.round(vars.lowerLimit) - else - low = 1 - end - - if vars and vars.upperLimit and type(vars.upperLimit) == 'number' then - hi = mist.utils.round(vars.upperLimit) - else - hi = size - end - - local choices = {} - -- add to exclude list and create list of what to randomize - for i = 1, size do - if not (i >= low and i <= hi) then - - excludeIndex[i] = true - end - if not excludeIndex[i] then - table.insert(choices, i) - else - newTable[i] = i - end - end - - for ind, num in pairs(choices) do - local found = false - local x = 0 - while found == false do - x = mist.random(size) -- get random number from list - local addNew = true - for index, _ in pairs(excludeIndex) do - if index == x then - addNew = false - break - end - end - if addNew == true then - excludeIndex[x] = true - found = true - end - excludeIndex[x] = true - - end - newTable[num] = x - end - --[[ - for i = 1, #newTable do - log:info(newTable[i]) - end - ]] - return newTable - end - - function mist.randomizeGroupOrder(passedUnits, vars) - -- figure out what to exclude, and send data to other func - local units = passedUnits - - if passedUnits.units then - units = passUnits.units - end - - local exclude = {} - local excludeNum = {} - if vars and vars.excludeType and type(vars.excludeType) == 'table' then - exclude = vars.excludeType - end - - if vars and vars.excludeNum and type(vars.excludeNum) == 'table' then - excludeNum = vars.excludeNum - end - - local low, hi - - if vars and vars.lowerLimit and type(vars.lowerLimit) == 'number' then - low = mist.utils.round(vars.lowerLimit) - else - low = 1 - end - - if vars and vars.upperLimit and type(vars.upperLimit) == 'number' then - hi = mist.utils.round(vars.upperLimit) - else - hi = #units - end - - - local excludeNum = {} - for unitIndex, unitData in pairs(units) do - if unitIndex >= low and unitIndex <= hi then -- if within range - local found = false - if #exclude > 0 then - for excludeType, index in pairs(exclude) do -- check if excluded - if mist.stringMatch(excludeType, unitData.type) then -- if excluded - excludeNum[unitIndex] = unitIndex - found = true - end - end - end - else -- unitIndex is either to low, or to high: added to exclude list - excludeNum[unitIndex] = unitId - end - end - - local newGroup = {} - local newOrder = mist.randomizeNumTable({exclude = excludeNum, size = #units}) - - for unitIndex, unitData in pairs(units) do - for i = 1, #newOrder do - if newOrder[i] == unitIndex then - newGroup[i] = mist.utils.deepCopy(units[i]) -- gets all of the unit data - newGroup[i].type = mist.utils.deepCopy(unitData.type) - newGroup[i].skill = mist.utils.deepCopy(unitData.skill) - newGroup[i].unitName = mist.utils.deepCopy(unitData.unitName) - newGroup[i].unitIndex = mist.utils.deepCopy(unitData.unitIndex) -- replaces the units data with a new type - end - end - end - return newGroup - end - - function mist.random(firstNum, secondNum) -- no support for decimals - local lowNum, highNum - if not secondNum then - highNum = firstNum - lowNum = 1 - else - lowNum = firstNum - highNum = secondNum - end - local total = 1 - if math.abs(highNum - lowNum + 1) < 50 then -- if total values is less than 50 - total = math.modf(50/math.abs(highNum - lowNum + 1)) -- make x copies required to be above 50 - end - local choices = {} - for i = 1, total do -- iterate required number of times - for x = lowNum, highNum do -- iterate between the range - choices[#choices +1] = x -- add each entry to a table - end - end - local rtnVal = math.random(#choices) -- will now do a math.random of at least 50 choices - for i = 1, 10 do - rtnVal = math.random(#choices) -- iterate a few times for giggles - end - return choices[rtnVal] - end - - function mist.stringMatch(s1, s2, bool) - local exclude = {'%-', '%(', '%)', '%_', '%[', '%]', '%.', '%#', '% ', '%{', '%}', '%$', '%%', '%?', '%+', '%^'} - if type(s1) == 'string' and type(s2) == 'string' then - for i , str in pairs(exclude) do - s1 = string.gsub(s1, str, '') - s2 = string.gsub(s2, str, '') - end - if not bool then - s1 = string.lower(s1) - s2 = string.lower(s2) - end - --log:info('Comparing: $1 and $2', s1, s2) - if s1 == s2 then - return true - else - return false - end - else - log:error('Either the first or second variable were not a string') - return false - end - end - - mist.matchString = mist.stringMatch -- both commands work because order out type of I - - --[[ scope: -{ - units = {...}, -- unit names. - coa = {...}, -- coa names - countries = {...}, -- country names - CA = {...}, -- looks just like coa. - unitTypes = { red = {}, blue = {}, all = {}, Russia = {},} -} - - -scope examples: - -{ units = { 'Hawg11', 'Hawg12' }, CA = {'blue'} } - -{ countries = {'Georgia'}, unitTypes = {blue = {'A-10C', 'A-10A'}}} - -{ coa = {'all'}} - -{unitTypes = { blue = {'A-10C'}}} -]] -end - ---- Utility functions. --- E.g. conversions between units etc. --- @section mist.utils -do -- mist.util scope - mist.utils = {} - - --- Converts angle in radians to degrees. - -- @param angle angle in radians - -- @return angle in degrees - function mist.utils.toDegree(angle) - return angle*180/math.pi - end - - --- Converts angle in degrees to radians. - -- @param angle angle in degrees - -- @return angle in degrees - function mist.utils.toRadian(angle) - return angle*math.pi/180 - end - - --- Converts meters to nautical miles. - -- @param meters distance in meters - -- @return distance in nautical miles - function mist.utils.metersToNM(meters) - return meters/1852 - end - - --- Converts meters to feet. - -- @param meters distance in meters - -- @return distance in feet - function mist.utils.metersToFeet(meters) - return meters/0.3048 - end - - --- Converts nautical miles to meters. - -- @param nm distance in nautical miles - -- @return distance in meters - function mist.utils.NMToMeters(nm) - return nm*1852 - end - - --- Converts feet to meters. - -- @param feet distance in feet - -- @return distance in meters - function mist.utils.feetToMeters(feet) - return feet*0.3048 - end - - --- Converts meters per second to knots. - -- @param mps speed in m/s - -- @return speed in knots - function mist.utils.mpsToKnots(mps) - return mps*3600/1852 - end - - --- Converts meters per second to kilometers per hour. - -- @param mps speed in m/s - -- @return speed in km/h - function mist.utils.mpsToKmph(mps) - return mps*3.6 - end - - --- Converts knots to meters per second. - -- @param knots speed in knots - -- @return speed in m/s - function mist.utils.knotsToMps(knots) - return knots*1852/3600 - end - - --- Converts kilometers per hour to meters per second. - -- @param kmph speed in km/h - -- @return speed in m/s - function mist.utils.kmphToMps(kmph) - return kmph/3.6 - end - - function mist.utils.kelvinToCelsius(t) - return t - 273.15 - end - - function mist.utils.FahrenheitToCelsius(f) - return (f - 32) * (5/9) - end - - function mist.utils.celsiusToFahrenheit(c) - return c*(9/5)+32 - end - - function mist.utils.converter(t1, t2, val) - if type(t1) == 'string' then - t1 = string.lower(t1) - end - if type(t2) == 'string' then - t2 = string.lower(t2) - end - if val and type(val) ~= 'number' then - if tonumber(val) then - val = tonumber(val) - else - log:warn("Value given is not a number: $1", val) - return 0 - end - end - - -- speed - if t1 == 'mps' then - if t2 == 'kmph' then - return val * 3.6 - elseif t2 == 'knots' or t2 == 'knot' then - return val * 3600/1852 - end - elseif t1 == 'kmph' then - if t2 == 'mps' then - return val/3.6 - elseif t2 == 'knots' or t2 == 'knot' then - return val*0.539957 - end - elseif t1 == 'knot' or t1 == 'knots' then - if t2 == 'kmph' then - return val * 1.852 - elseif t2 == 'mps' then - return val * 0.514444 - end - - -- Distance - elseif t1 == 'feet' or t1 == 'ft' then - if t2 == 'nm' then - return val/6076.12 - elseif t2 == 'km' then - return (val*0.3048)/1000 - elseif t2 == 'm' then - return val*0.3048 - end - elseif t1 == 'nm' then - if t2 == 'feet' or t2 == 'ft' then - return val*6076.12 - elseif t2 == 'km' then - return val*1.852 - elseif t2 == 'm' then - return val*1852 - end - elseif t1 == 'km' then - if t2 == 'nm' then - return val/1.852 - elseif t2 == 'feet' or t2 == 'ft' then - return (val/0.3048)*1000 - elseif t2 == 'm' then - return val*1000 - end - elseif t1 == 'm' then - if t2 == 'nm' then - return val/1852 - elseif t2 == 'km' then - return val/1000 - elseif t2 == 'feet' or t2 == 'ft' then - return val/0.3048 - end - - -- Temperature - elseif t1 == 'f' or t1 == 'fahrenheit' then - if t2 == 'c' or t2 == 'celsius' then - return (val - 32) * (5/9) - elseif t2 == 'k' or t2 == 'kelvin' then - return (val + 459.67) * (5/9) - end - elseif t1 == 'c' or t1 == 'celsius' then - if t2 == 'f' or t2 == 'fahrenheit' then - return val*(9/5)+32 - elseif t2 == 'k' or t2 == 'kelvin' then - return val + 273.15 - end - elseif t1 == 'k' or t1 == 'kelvin' then - if t2 == 'c' or t2 == 'celsius' then - return val - 273.15 - elseif t2 == 'f' or t2 == 'fahrenheit' then - return ((val*(9/5))-459.67) - end - - -- Pressure - elseif t1 == 'p' or t1 == 'pascal' or t1 == 'pascals' then - if t2 == 'hpa' or t2 == 'hectopascal' then - return val/100 - elseif t2 == 'mmhg' then - return val * 0.00750061561303 - elseif t2 == 'inhg' then - return val * 0.0002953 - end - elseif t1 == 'hpa' or t1 == 'hectopascal' then - if t2 == 'p' or t2 == 'pascal' or t2 == 'pascals' then - return val*100 - elseif t2 == 'mmhg' then - return val * 0.00750061561303 - elseif t2 == 'inhg' then - return val * 0.02953 - end - elseif t1 == 'mmhg' then - if t2 == 'p' or t2 == 'pascal' or t2 == 'pascals' then - return val / 0.00750061561303 - elseif t2 == 'hpa' or t2 == 'hectopascal' then - return val * 1.33322 - elseif t2 == 'inhg' then - return val/25.4 - end - elseif t1 == 'inhg' then - if t2 == 'p' or t2 == 'pascal' or t2 == 'pascals' then - return val*3386.39 - elseif t2 == 'mmhg' then - return val*25.4 - elseif t2 == 'hpa' or t2 == 'hectopascal' then - return val * 33.8639 - end - else - log:warn("First value doesn't match with list. Value given: $1", t1) - end - log:warn("Match not found. Unable to convert: $1 into $2", t1, t2) - - end - - mist.converter = mist.utils.converter - - function mist.utils.getQFE(point, inchHg) - - local t, p = 0, 0 - if atmosphere.getTemperatureAndPressure then - t, p = atmosphere.getTemperatureAndPressure(mist.utils.makeVec3GL(point)) - end - if p == 0 then - local h = land.getHeight(mist.utils.makeVec2(point))/0.3048 -- convert to feet - if inchHg then - return (env.mission.weather.qnh - (h/30)) * 0.0295299830714 - else - return env.mission.weather.qnh - (h/30) - end - else - if inchHg then - return mist.converter('p', 'inhg', p) - else - return mist.converter('p', 'hpa', p) - end - end - - end - --- Converts a Vec3 to a Vec2. - -- @tparam Vec3 vec the 3D vector - -- @return vector converted to Vec2 - function mist.utils.makeVec2(vec) - if vec.z then - return {x = vec.x, y = vec.z} - else - return {x = vec.x, y = vec.y} -- it was actually already vec2. - end - end - - --- Converts a Vec2 to a Vec3. - -- @tparam Vec2 vec the 2D vector - -- @param y optional new y axis (altitude) value. If omitted it's 0. - function mist.utils.makeVec3(vec, y) - if not vec.z then - if vec.alt and not y then - y = vec.alt - elseif not y then - y = 0 - end - return {x = vec.x, y = y, z = vec.y} - else - return {x = vec.x, y = vec.y, z = vec.z} -- it was already Vec3, actually. - end - end - - --- Converts a Vec2 to a Vec3 using ground level as altitude. - -- The ground level at the specific point is used as altitude (y-axis) - -- for the new vector. Optionally a offset can be specified. - -- @tparam Vec2 vec the 2D vector - -- @param[opt] offset offset to be applied to the ground level - -- @return new 3D vector - function mist.utils.makeVec3GL(vec, offset) - local adj = offset or 0 - - if not vec.z then - return {x = vec.x, y = (land.getHeight(vec) + adj), z = vec.y} - else - return {x = vec.x, y = (land.getHeight({x = vec.x, y = vec.z}) + adj), z = vec.z} - end - end - - --- Returns the center of a zone as Vec3. - -- @tparam string|table zone trigger zone name or table - -- @treturn Vec3 center of the zone - function mist.utils.zoneToVec3(zone, gl) - local new = {} - if type(zone) == 'table' then - if zone.point then - new.x = zone.point.x - new.y = zone.point.y - new.z = zone.point.z - elseif zone.x and zone.y and zone.z then - new = mist.utils.deepCopy(zone) - end - 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 - end - end - if new.x and gl then - new.y = land.getHeight({x = new.x, y = new.z}) - end - return new - end - - function mist.utils.getHeadingPoints(point1, point2, north) -- sick of writing this out. - if north then - return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), mist.utils.makeVec3(point1)), (mist.utils.makeVec3(point1))) - else - return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), mist.utils.makeVec3(point1))) - end - end - --- Returns heading-error corrected direction. - -- True-north corrected direction from point along vector vec. - -- @tparam Vec3 vec - -- @tparam Vec2 point - -- @return heading-error corrected direction from point. - function mist.utils.getDir(vec, point) - local dir = math.atan2(vec.z, vec.x) - if point then - dir = dir + mist.getNorthCorrection(point) - end - if dir < 0 then - dir = dir + 2 * math.pi -- put dir in range of 0 to 2*pi - end - return dir - end - - --- Returns distance in meters between two points. - -- @tparam Vec2|Vec3 point1 first point - -- @tparam Vec2|Vec3 point2 second point - -- @treturn number distance between given points. - function mist.utils.get2DDist(point1, point2) - point1 = mist.utils.makeVec3(point1) - point2 = mist.utils.makeVec3(point2) - return mist.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) - end - - --- Returns distance in meters between two points in 3D space. - -- @tparam Vec3 point1 first point - -- @tparam Vec3 point2 second point - -- @treturn number distancen between given points in 3D space. - function mist.utils.get3DDist(point1, point2) - return mist.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) - end - - --- Creates a waypoint from a vector. - -- @tparam Vec2|Vec3 vec position of the new waypoint - -- @treturn Waypoint a new waypoint to be used inside paths. - function mist.utils.vecToWP(vec) - local newWP = {} - newWP.x = vec.x - newWP.y = vec.y - if vec.z then - newWP.alt = vec.y - newWP.y = vec.z - else - newWP.alt = land.getHeight({x = vec.x, y = vec.y}) - end - return newWP - end - - --- Creates a waypoint from a unit. - -- This function also considers the units speed. - -- The alt_type of this waypoint is set to "BARO". - -- @tparam Unit pUnit Unit whose position and speed will be used. - -- @treturn Waypoint new waypoint. - function mist.utils.unitToWP(pUnit) - local unit = mist.utils.deepCopy(pUnit) - if type(unit) == 'string' then - if Unit.getByName(unit) then - unit = Unit.getByName(unit) - end - end - if unit:isExist() == true then - local new = mist.utils.vecToWP(unit:getPosition().p) - new.speed = mist.vec.mag(unit:getVelocity()) - new.alt_type = "BARO" - - return new - end - log:error("$1 not found or doesn't exist", pUnit) - return false - end - - --- Creates a deep copy of a object. - -- Usually this object is a table. - -- See also: from http://lua-users.org/wiki/CopyTable - -- @param object object to copy - -- @return copy of object - function mist.utils.deepCopy(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 - return _copy(object) - end - - --- Simple rounding function. - -- From http://lua-users.org/wiki/SimpleRound - -- use negative idp for rounding ahead of decimal place, positive for rounding after decimal place - -- @tparam number num number to round - -- @param idp - function mist.utils.round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult - end - - --- Rounds all numbers inside a table. - -- @tparam table tbl table in which to round numbers - -- @param idp - function mist.utils.roundTbl(tbl, idp) - for id, val in pairs(tbl) do - if type(val) == 'number' then - tbl[id] = mist.utils.round(val, idp) - end - end - return tbl - end - - --- Executes the given string. - -- borrowed from Slmod - -- @tparam string s string containing LUA code. - -- @treturn boolean true if successfully executed, false otherwise - function mist.utils.dostring(s) - local f, err = loadstring(s) - if f then - return true, f() - else - return false, err - end - end - - --- Checks a table's types. - -- This function checks a tables types against a specifically forged type table. - -- @param fname - -- @tparam table type_tbl - -- @tparam table var_tbl - -- @usage -- specifically forged type table - -- type_tbl = { - -- {'table', 'number'}, - -- 'string', - -- 'number', - -- 'number', - -- {'string','nil'}, - -- {'number', 'nil'} - -- } - -- -- my_tbl index 1 must be a table or a number; - -- -- index 2, a string; index 3, a number; - -- -- index 4, a number; index 5, either a string or nil; - -- -- and index 6, either a number or nil. - -- mist.utils.typeCheck(type_tbl, my_tb) - -- @return true if table passes the check, false otherwise. - function mist.utils.typeCheck(fname, type_tbl, var_tbl) - -- log:info('type check') - for type_key, type_val in pairs(type_tbl) do - -- log:info('type_key: $1 type_val: $2', type_key, type_val) - - --type_key can be a table of accepted keys- so try to find one that is not nil - local type_key_str = '' - local act_key = type_key -- actual key within var_tbl - necessary to use for multiple possible key variables. Initialize to type_key - if type(type_key) == 'table' then - - for i = 1, #type_key do - if i ~= 1 then - type_key_str = type_key_str .. '/' - end - type_key_str = type_key_str .. tostring(type_key[i]) - if var_tbl[type_key[i]] ~= nil then - act_key = type_key[i] -- found a non-nil entry, make act_key now this val. - end - end - else - type_key_str = tostring(type_key) - end - - local err_msg = 'Error in function ' .. fname .. ', parameter "' .. type_key_str .. '", expected: ' - local passed_check = false - - if type(type_tbl[type_key]) == 'table' then - -- log:info('err_msg, before: $1', err_msg) - for j = 1, #type_tbl[type_key] do - - if j == 1 then - err_msg = err_msg .. type_tbl[type_key][j] - else - err_msg = err_msg .. ' or ' .. type_tbl[type_key][j] - end - - if type(var_tbl[act_key]) == type_tbl[type_key][j] then - passed_check = true - end - end - -- log:info('err_msg, after: $1', err_msg) - else - -- log:info('err_msg, before: $1', err_msg) - err_msg = err_msg .. type_tbl[type_key] - -- log:info('err_msg, after: $1', err_msg) - if type(var_tbl[act_key]) == type_tbl[type_key] then - passed_check = true - end - - end - - if not passed_check then - err_msg = err_msg .. ', got ' .. type(var_tbl[act_key]) - return false, err_msg - end - end - return true - end - - --- Serializes the give variable to a string. - -- borrowed from slmod - -- @param var variable to serialize - -- @treturn string variable serialized to string - function mist.utils.basicSerialize(var) - if var == nil then - return "\"\"" - else - if ((type(var) == 'number') or - (type(var) == 'boolean') or - (type(var) == 'function') or - (type(var) == 'table') or - (type(var) == 'userdata') ) then - return tostring(var) - elseif type(var) == 'string' then - var = string.format('%q', var) - return var - end - end -end - ---- Serialize value --- borrowed from slmod (serialize_slmod) --- @param name --- @param value value to serialize --- @param level -function mist.utils.serialize(name, value, level) - --Based on ED's serialize_simple2 - local function basicSerialize(o) - if type(o) == "number" then - return tostring(o) - elseif type(o) == "boolean" then - return tostring(o) - else -- assume it is a string - return mist.utils.basicSerialize(o) - end - end - - local function serializeToTbl(name, value, level) - local var_str_tbl = {} - if level == nil then - level = "" - end - if level ~= "" then - level = level.."" - end - table.insert(var_str_tbl, level .. name .. " = ") - - if type(value) == "number" or type(value) == "string" or type(value) == "boolean" then - table.insert(var_str_tbl, basicSerialize(value) .. ",\n") - elseif type(value) == "table" then - table.insert(var_str_tbl, "\n"..level.."{\n") - - for k,v in pairs(value) do -- serialize its fields - local key - if type(k) == "number" then - key = string.format("[%s]", k) - else - key = string.format("[%q]", k) - end - table.insert(var_str_tbl, mist.utils.serialize(key, v, level.." ")) - - end - if level == "" then - table.insert(var_str_tbl, level.."} -- end of "..name.."\n") - - else - table.insert(var_str_tbl, level.."}, -- end of "..name.."\n") - - end - else - log:error('Cannot serialize a $1', type(value)) - end - return var_str_tbl - end - - local t_str = serializeToTbl(name, value, level) - - return table.concat(t_str) -end - ---- Serialize value supporting cycles. --- borrowed from slmod (serialize_wcycles) --- @param name --- @param value value to serialize --- @param saved -function mist.utils.serializeWithCycles(name, value, saved) - --mostly straight out of Programming in Lua - local function basicSerialize(o) - if type(o) == "number" then - return tostring(o) - elseif type(o) == "boolean" then - return tostring(o) - else -- assume it is a string - return mist.utils.basicSerialize(o) - end - end - - local t_str = {} - saved = saved or {} -- initial value - if ((type(value) == 'string') or (type(value) == 'number') or (type(value) == 'table') or (type(value) == 'boolean')) then - table.insert(t_str, name .. " = ") - if type(value) == "number" or type(value) == "string" or type(value) == "boolean" then - table.insert(t_str, basicSerialize(value) .. "\n") - else - - if saved[value] then -- value already saved? - table.insert(t_str, saved[value] .. "\n") - else - saved[value] = name -- save name for next time - table.insert(t_str, "{}\n") - for k,v in pairs(value) do -- save its fields - local fieldname = string.format("%s[%s]", name, basicSerialize(k)) - table.insert(t_str, mist.utils.serializeWithCycles(fieldname, v, saved)) - end - end - end - return table.concat(t_str) - else - return "" - end -end - ---- Serialize a table to a single line string. --- serialization of a table all on a single line, no comments, made to replace old get_table_string function --- borrowed from slmod --- @tparam table tbl table to serialize. --- @treturn string string containing serialized table -function mist.utils.oneLineSerialize(tbl) - if type(tbl) == 'table' then --function only works for tables! - - local tbl_str = {} - - tbl_str[#tbl_str + 1] = '{ ' - - for ind,val in pairs(tbl) do -- serialize its fields - if type(ind) == "number" then - tbl_str[#tbl_str + 1] = '[' - tbl_str[#tbl_str + 1] = tostring(ind) - tbl_str[#tbl_str + 1] = '] = ' - else --must be a string - tbl_str[#tbl_str + 1] = '[' - tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(ind) - tbl_str[#tbl_str + 1] = '] = ' - end - - if ((type(val) == 'number') or (type(val) == 'boolean')) then - tbl_str[#tbl_str + 1] = tostring(val) - tbl_str[#tbl_str + 1] = ', ' - elseif type(val) == 'string' then - tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(val) - tbl_str[#tbl_str + 1] = ', ' - elseif type(val) == 'nil' then -- won't ever happen, right? - tbl_str[#tbl_str + 1] = 'nil, ' - elseif type(val) == 'table' then - tbl_str[#tbl_str + 1] = mist.utils.oneLineSerialize(val) - tbl_str[#tbl_str + 1] = ', ' --I think this is right, I just added it - else - log:warn('Unable to serialize value type $1 at index $2', mist.utils.basicSerialize(type(val)), tostring(ind)) - end - - end - tbl_str[#tbl_str + 1] = '}' - return table.concat(tbl_str) - else - return mist.utils.basicSerialize(tbl) - end -end - ---- Returns table in a easy readable string representation. --- this function is not meant for serialization because it uses --- newlines for better readability. --- @param tbl table to show --- @param loc --- @param indent --- @param tableshow_tbls --- @return human readable string representation of given table -function mist.utils.tableShow(tbl, loc, indent, tableshow_tbls) --based on serialize_slmod, this is a _G serialization - tableshow_tbls = tableshow_tbls or {} --create table of tables - loc = loc or "" - indent = indent or "" - if type(tbl) == 'table' then --function only works for tables! - tableshow_tbls[tbl] = loc - - local tbl_str = {} - - tbl_str[#tbl_str + 1] = indent .. '{\n' - - for ind,val in pairs(tbl) do -- serialize its fields - if type(ind) == "number" then - tbl_str[#tbl_str + 1] = indent - tbl_str[#tbl_str + 1] = loc .. '[' - tbl_str[#tbl_str + 1] = tostring(ind) - tbl_str[#tbl_str + 1] = '] = ' - else - tbl_str[#tbl_str + 1] = indent - tbl_str[#tbl_str + 1] = loc .. '[' - tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(ind) - tbl_str[#tbl_str + 1] = '] = ' - end - - if ((type(val) == 'number') or (type(val) == 'boolean')) then - tbl_str[#tbl_str + 1] = tostring(val) - tbl_str[#tbl_str + 1] = ',\n' - elseif type(val) == 'string' then - tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(val) - tbl_str[#tbl_str + 1] = ',\n' - elseif type(val) == 'nil' then -- won't ever happen, right? - tbl_str[#tbl_str + 1] = 'nil,\n' - elseif type(val) == 'table' then - if tableshow_tbls[val] then - tbl_str[#tbl_str + 1] = tostring(val) .. ' already defined: ' .. tableshow_tbls[val] .. ',\n' - else - tableshow_tbls[val] = loc .. '[' .. mist.utils.basicSerialize(ind) .. ']' - tbl_str[#tbl_str + 1] = tostring(val) .. ' ' - tbl_str[#tbl_str + 1] = mist.utils.tableShow(val, loc .. '[' .. mist.utils.basicSerialize(ind).. ']', indent .. ' ', tableshow_tbls) - tbl_str[#tbl_str + 1] = ',\n' - end - elseif type(val) == 'function' then - if debug and debug.getinfo then - local fcnname = tostring(val) - local info = debug.getinfo(val, "S") - if info.what == "C" then - tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', C function') .. ',\n' - else - if (string.sub(info.source, 1, 2) == [[./]]) then - tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')' .. info.source) ..',\n' - else - tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')') ..',\n' - end - end - - else - tbl_str[#tbl_str + 1] = 'a function,\n' - end - else - tbl_str[#tbl_str + 1] = 'unable to serialize value type ' .. mist.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind) - end - end - - tbl_str[#tbl_str + 1] = indent .. '}' - return table.concat(tbl_str) - end -end -end - ---- Debug functions --- @section mist.debug -do -- mist.debug scope - mist.debug = {} - - --- Dumps the global table _G. - -- This dumps the global table _G to a file in - -- the DCS\Logs directory. - -- This function requires you to disable script sanitization - -- in $DCS_ROOT\Scripts\MissionScripting.lua to access lfs and io - -- libraries. - -- @param fname - function mist.debug.dump_G(fname) - if lfs and io then - local fdir = lfs.writedir() .. [[Logs\]] .. fname - local f = io.open(fdir, 'w') - f:write(mist.utils.tableShow(_G)) - f:close() - log:info('Wrote debug data to $1', fdir) - --trigger.action.outText(errmsg, 10) - else - log:alert('insufficient libraries to run mist.debug.dump_G, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua') - --trigger.action.outText(errmsg, 10) - end - end - - --- Write debug data to file. - -- This function requires you to disable script sanitization - -- in $DCS_ROOT\Scripts\MissionScripting.lua to access lfs and io - -- libraries. - -- @param fcn - -- @param fcnVars - -- @param fname - function mist.debug.writeData(fcn, fcnVars, fname) - if lfs and io then - local fdir = lfs.writedir() .. [[Logs\]] .. fname - local f = io.open(fdir, 'w') - f:write(fcn(unpack(fcnVars, 1, table.maxn(fcnVars)))) - f:close() - log:info('Wrote debug data to $1', fdir) - local errmsg = 'mist.debug.writeData wrote data to ' .. fdir - trigger.action.outText(errmsg, 10) - else - local errmsg = 'Error: insufficient libraries to run mist.debug.writeData, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua' - log:alert(errmsg) - trigger.action.outText(errmsg, 10) - end - end - - --- Write mist databases to file. - -- This function requires you to disable script sanitization - -- in $DCS_ROOT\Scripts\MissionScripting.lua to access lfs and io - -- libraries. - function mist.debug.dumpDBs() - for DBname, DB in pairs(mist.DBs) do - if type(DB) == 'table' and type(DBname) == 'string' then - mist.debug.writeData(mist.utils.serialize, {DBname, DB}, 'mist_DBs_' .. DBname .. '.lua') - end - end - end -end - ---- 3D Vector functions --- @section mist.vec -do -- mist.vec scope - mist.vec = {} - - --- Vector addition. - -- @tparam Vec3 vec1 first vector - -- @tparam Vec3 vec2 second vector - -- @treturn Vec3 new vector, sum of vec1 and vec2. - function mist.vec.add(vec1, vec2) - return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} - end - - --- Vector substraction. - -- @tparam Vec3 vec1 first vector - -- @tparam Vec3 vec2 second vector - -- @treturn Vec3 new vector, vec2 substracted from vec1. - function mist.vec.sub(vec1, vec2) - return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} - end - - --- Vector scalar multiplication. - -- @tparam Vec3 vec vector to multiply - -- @tparam number mult scalar multiplicator - -- @treturn Vec3 new vector multiplied with the given scalar - function mist.vec.scalarMult(vec, mult) - return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} - end - - mist.vec.scalar_mult = mist.vec.scalarMult - - --- Vector dot product. - -- @tparam Vec3 vec1 first vector - -- @tparam Vec3 vec2 second vector - -- @treturn number dot product of given vectors - function mist.vec.dp (vec1, vec2) - return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z - end - - --- Vector cross product. - -- @tparam Vec3 vec1 first vector - -- @tparam Vec3 vec2 second vector - -- @treturn Vec3 new vector, cross product of vec1 and vec2. - function mist.vec.cp(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 - - --- Vector magnitude - -- @tparam Vec3 vec vector - -- @treturn number magnitude of vector vec - function mist.vec.mag(vec) - return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 - end - - --- Unit vector - -- @tparam Vec3 vec - -- @treturn Vec3 unit vector of vec - function mist.vec.getUnitVec(vec) - local mag = mist.vec.mag(vec) - return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } - end - - --- Rotate vector. - -- @tparam Vec2 vec2 to rotoate - -- @tparam number theta - -- @return Vec2 rotated vector. - function mist.vec.rotateVec2(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 - - function mist.vec.normalize(vec3) - local mag = mist.vec.mag(vec3) - if mag ~= 0 then - return mist.vec.scalar_mult(vec3, 1.0 / mag) - end - end -end - ---- Flag functions. --- The mist "Flag functions" are functions that are similar to Slmod functions --- that detect a game condition and set a flag when that game condition is met. --- --- They are intended to be used by persons with little or no experience in Lua --- programming, but with a good knowledge of the DCS mission editor. --- @section mist.flagFunc -do -- mist.flagFunc scope - mist.flagFunc = {} - - --- Sets a flag if map objects are destroyed inside a zone. - -- Once this function is run, it will start a continuously evaluated process - -- that will set a flag true if map objects (such as bridges, buildings in - -- town, etc.) die (or have died) in a mission editor zone (or set of zones). - -- This will only happen once; once the flag is set true, the process ends. - -- @usage - -- -- Example vars table - -- vars = { - -- zones = { "zone1", "zone2" }, -- can also be a single string - -- flag = 3, -- number of the flag - -- stopflag = 4, -- optional number of the stop flag - -- req_num = 10, -- optional minimum amount of map objects needed to die - -- } - -- mist.flagFuncs.mapobjs_dead_zones(vars) - -- @tparam table vars table containing parameters. - function mist.flagFunc.mapobjs_dead_zones(vars) - --[[vars needs to be: -zones = table or string, -flag = number, -stopflag = number or nil, -req_num = number or nil - -AND used by function, -initial_number - -]] - -- type_tbl - local type_tbl = { - [{'zones', 'zone'}] = {'table', 'string'}, - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.mapobjs_dead_zones', type_tbl, vars) - assert(err, errmsg) - local zones = vars.zones or vars.zone - local flag = vars.flag - local stopflag = vars.stopflag or vars.stopFlag or -1 - local req_num = vars.req_num or vars.reqnum or 1 - local initial_number = vars.initial_number - - if type(zones) == 'string' then - zones = {zones} - end - - if not initial_number then - initial_number = #mist.getDeadMapObjsInZones(zones) - end - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if (#mist.getDeadMapObjsInZones(zones) - initial_number) >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - return - else - mist.scheduleFunction(mist.flagFunc.mapobjs_dead_zones, {{zones = zones, flag = flag, stopflag = stopflag, req_num = req_num, initial_number = initial_number}}, timer.getTime() + 1) - end - end - end - - --- Sets a flag if map objects are destroyed inside a polygon. - -- Once this function is run, it will start a continuously evaluated process - -- that will set a flag true if map objects (such as bridges, buildings in - -- town, etc.) die (or have died) in a polygon. - -- This will only happen once; once the flag is set true, the process ends. - -- @usage - -- -- Example vars table - -- vars = { - -- zone = { - -- [1] = mist.DBs.unitsByName['NE corner'].point, - -- [2] = mist.DBs.unitsByName['SE corner'].point, - -- [3] = mist.DBs.unitsByName['SW corner'].point, - -- [4] = mist.DBs.unitsByName['NW corner'].point - -- } - -- flag = 3, -- number of the flag - -- stopflag = 4, -- optional number of the stop flag - -- req_num = 10, -- optional minimum amount of map objects needed to die - -- } - -- mist.flagFuncs.mapobjs_dead_zones(vars) - -- @tparam table vars table containing parameters. - function mist.flagFunc.mapobjs_dead_polygon(vars) - --[[vars needs to be: -zone = table, -flag = number, -stopflag = number or nil, -req_num = number or nil - -AND used by function, -initial_number - -]] - -- type_tbl - local type_tbl = { - [{'zone', 'polyzone'}] = 'table', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.mapobjs_dead_polygon', type_tbl, vars) - assert(err, errmsg) - local zone = vars.zone or vars.polyzone - local flag = vars.flag - local stopflag = vars.stopflag or vars.stopFlag or -1 - local req_num = vars.req_num or vars.reqnum or 1 - local initial_number = vars.initial_number - - if not initial_number then - initial_number = #mist.getDeadMapObjsInPolygonZone(zone) - end - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if (#mist.getDeadMapObjsInPolygonZone(zone) - initial_number) >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - return - else - mist.scheduleFunction(mist.flagFunc.mapobjs_dead_polygon, {{zone = zone, flag = flag, stopflag = stopflag, req_num = req_num, initial_number = initial_number}}, timer.getTime() + 1) - end - end - end - - --- Sets a flag if unit(s) is/are inside a polygon. - -- @tparam table vars @{unitsInPolygonVars} - -- @usage -- set flag 11 to true as soon as any blue vehicles - -- -- are inside the polygon shape created off of the waypoints - -- -- of the group forest1 - -- mist.flagFunc.units_in_polygon { - -- units = {'[blue][vehicle]'}, - -- zone = mist.getGroupPoints('forest1'), - -- flag = 11 - -- } - function mist.flagFunc.units_in_polygon(vars) - --[[vars needs to be: -units = table, -zone = table, -flag = number, -stopflag = number or nil, -maxalt = number or nil, -interval = number or nil, -req_num = number or nil -toggle = boolean or nil -unitTableDef = table or nil -]] - -- type_tbl - local type_tbl = { - [{'units', 'unit'}] = 'table', - [{'zone', 'polyzone'}] = 'table', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - [{'maxalt', 'alt'}] = {'number', 'nil'}, - interval = {'number', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - unitTableDef = {'table', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_polygon', type_tbl, vars) - assert(err, errmsg) - local units = vars.units or vars.unit - local zone = vars.zone or vars.polyzone - local flag = vars.flag - local stopflag = vars.stopflag or vars.stopFlag or -1 - local interval = vars.interval or 1 - local maxalt = vars.maxalt or vars.alt - local req_num = vars.req_num or vars.reqnum or 1 - local toggle = vars.toggle or nil - local unitTableDef = vars.unitTableDef - - if not units.processed then - unitTableDef = mist.utils.deepCopy(units) - end - - if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts - if unitTableDef then - units = mist.makeUnitTable(unitTableDef) - end - end - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then - local num_in_zone = 0 - for i = 1, #units do - local unit = Unit.getByName(units[i]) or StaticObject.getByName(units[i]) - if unit then - local pos = unit:getPosition().p - if mist.pointInPolygon(pos, zone, maxalt) then - num_in_zone = num_in_zone + 1 - if num_in_zone >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - break - end - end - end - end - if toggle and (num_in_zone < req_num) and trigger.misc.getUserFlag(flag) > 0 then - trigger.action.setUserFlag(flag, false) - end - -- do another check in case stopflag was set true by this function - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then - mist.scheduleFunction(mist.flagFunc.units_in_polygon, {{units = units, zone = zone, flag = flag, stopflag = stopflag, interval = interval, req_num = req_num, maxalt = maxalt, toggle = toggle, unitTableDef = unitTableDef}}, timer.getTime() + interval) - end - end - - end - - --- Sets a flag if unit(s) is/are inside a trigger zone. - -- @todo document - function mist.flagFunc.units_in_zones(vars) - --[[vars needs to be: - units = table, - zones = table, - flag = number, - stopflag = number or nil, - zone_type = string or nil, - req_num = number or nil, - interval = number or nil - toggle = boolean or nil - ]] - -- type_tbl - local type_tbl = { - units = 'table', - zones = 'table', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - [{'zone_type', 'zonetype'}] = {'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - unitTableDef = {'table', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_zones', type_tbl, vars) - assert(err, errmsg) - local units = vars.units - local zones = vars.zones - local flag = vars.flag - local stopflag = vars.stopflag or vars.stopFlag or -1 - local zone_type = vars.zone_type or vars.zonetype or 'cylinder' - local req_num = vars.req_num or vars.reqnum or 1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - local unitTableDef = vars.unitTableDef - - if not units.processed then - unitTableDef = mist.utils.deepCopy(units) - end - - if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts - if unitTableDef then - units = mist.makeUnitTable(unitTableDef) - end - end - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - - local in_zone_units = mist.getUnitsInZones(units, zones, zone_type) - - if #in_zone_units >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - elseif #in_zone_units < req_num and toggle then - trigger.action.setUserFlag(flag, false) - end - -- do another check in case stopflag was set true by this function - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.units_in_zones, {{units = units, zones = zones, flag = flag, stopflag = stopflag, zone_type = zone_type, req_num = req_num, interval = interval, toggle = toggle, unitTableDef = unitTableDef}}, timer.getTime() + interval) - end - end - - end - - --- Sets a flag if unit(s) is/are inside a moving zone. - -- @todo document - function mist.flagFunc.units_in_moving_zones(vars) - --[[vars needs to be: - units = table, - zone_units = table, - radius = number, - flag = number, - stopflag = number or nil, - zone_type = string or nil, - req_num = number or nil, - interval = number or nil - toggle = boolean or nil - ]] - -- type_tbl - local type_tbl = { - units = 'table', - [{'zone_units', 'zoneunits'}] = 'table', - radius = 'number', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - [{'zone_type', 'zonetype'}] = {'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - unitTableDef = {'table', 'nil'}, - zUnitTableDef = {'table', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_moving_zones', type_tbl, vars) - assert(err, errmsg) - local units = vars.units - local zone_units = vars.zone_units or vars.zoneunits - local radius = vars.radius - local flag = vars.flag - local stopflag = vars.stopflag or vars.stopFlag or -1 - local zone_type = vars.zone_type or vars.zonetype or 'cylinder' - local req_num = vars.req_num or vars.reqnum or 1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - local unitTableDef = vars.unitTableDef - local zUnitTableDef = vars.zUnitTableDef - - if not units.processed then - unitTableDef = mist.utils.deepCopy(units) - end - - if not zone_units.processed then - zUnitTableDef = mist.utils.deepCopy(zone_units) - end - - if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts - if unitTableDef then - units = mist.makeUnitTable(unitTableDef) - end - end - - if (zone_units.processed and zone_units.processed < mist.getLastDBUpdateTime()) or not zone_units.processed then -- run unit table short cuts - if zUnitTableDef then - zone_units = mist.makeUnitTable(zUnitTableDef) - end - - end - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - - local in_zone_units = mist.getUnitsInMovingZones(units, zone_units, radius, zone_type) - - if #in_zone_units >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - elseif #in_zone_units < req_num and toggle then - trigger.action.setUserFlag(flag, false) - end - -- do another check in case stopflag was set true by this function - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.units_in_moving_zones, {{units = units, zone_units = zone_units, radius = radius, flag = flag, stopflag = stopflag, zone_type = zone_type, req_num = req_num, interval = interval, toggle = toggle, unitTableDef = unitTableDef, zUnitTableDef = zUnitTableDef}}, timer.getTime() + interval) - end - end - - end - - --- Sets a flag if units have line of sight to each other. - -- @todo document - function mist.flagFunc.units_LOS(vars) - --[[vars needs to be: -unitset1 = table, -altoffset1 = number, -unitset2 = table, -altoffset2 = number, -flag = number, -stopflag = number or nil, -radius = number or nil, -interval = number or nil, -req_num = number or nil -toggle = boolean or nil -]] - -- type_tbl - local type_tbl = { - [{'unitset1', 'units1'}] = 'table', - [{'altoffset1', 'alt1'}] = 'number', - [{'unitset2', 'units2'}] = 'table', - [{'altoffset2', 'alt2'}] = 'number', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - interval = {'number', 'nil'}, - radius = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - unitTableDef1 = {'table', 'nil'}, - unitTableDef2 = {'table', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_LOS', type_tbl, vars) - assert(err, errmsg) - local unitset1 = vars.unitset1 or vars.units1 - local altoffset1 = vars.altoffset1 or vars.alt1 - local unitset2 = vars.unitset2 or vars.units2 - local altoffset2 = vars.altoffset2 or vars.alt2 - local flag = vars.flag - local stopflag = vars.stopflag or vars.stopFlag or -1 - local interval = vars.interval or 1 - local radius = vars.radius or math.huge - local req_num = vars.req_num or vars.reqnum or 1 - local toggle = vars.toggle or nil - local unitTableDef1 = vars.unitTableDef1 - local unitTableDef2 = vars.unitTableDef2 - - if not unitset1.processed then - unitTableDef1 = mist.utils.deepCopy(unitset1) - end - - if not unitset2.processed then - unitTableDef2 = mist.utils.deepCopy(unitset2) - end - - if (unitset1.processed and unitset1.processed < mist.getLastDBUpdateTime()) or not unitset1.processed then -- run unit table short cuts - if unitTableDef1 then - unitset1 = mist.makeUnitTable(unitTableDef1) - end - end - - if (unitset2.processed and unitset2.processed < mist.getLastDBUpdateTime()) or not unitset2.processed then -- run unit table short cuts - if unitTableDef2 then - unitset2 = mist.makeUnitTable(unitTableDef2) - end - end - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - - local unitLOSdata = mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) - - if #unitLOSdata >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - elseif #unitLOSdata < req_num and toggle then - trigger.action.setUserFlag(flag, false) - end - -- do another check in case stopflag was set true by this function - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.units_LOS, {{unitset1 = unitset1, altoffset1 = altoffset1, unitset2 = unitset2, altoffset2 = altoffset2, flag = flag, stopflag = stopflag, radius = radius, req_num = req_num, interval = interval, toggle = toggle, unitTableDef1 = unitTableDef1, unitTableDef2 = unitTableDef2}}, timer.getTime() + interval) - end - end - end - - --- Sets a flag if group is alive. - -- @todo document - function mist.flagFunc.group_alive(vars) - --[[vars -groupName -flag -toggle -interval -stopFlag - -]] - local type_tbl = { - [{'group', 'groupname', 'gp', 'groupName'}] = 'string', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive', type_tbl, vars) - assert(err, errmsg) - - local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname - local flag = vars.flag - local stopflag = vars.stopflag or vars.stopFlag or -1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true and #Group.getByName(groupName):getUnits() > 0 then - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - else - if toggle then - trigger.action.setUserFlag(flag, false) - end - end - end - - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.group_alive, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle}}, timer.getTime() + interval) - end - - end - - --- Sets a flag if group is dead. - -- @todo document - function mist.flagFunc.group_dead(vars) - local type_tbl = { - [{'group', 'groupname', 'gp', 'groupName'}] = 'string', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_dead', type_tbl, vars) - assert(err, errmsg) - - local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname - local flag = vars.flag - local stopflag = vars.stopflag or vars.stopFlag or -1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if (Group.getByName(groupName) and Group.getByName(groupName):isExist() == false) or (Group.getByName(groupName) and #Group.getByName(groupName):getUnits() < 1) or not Group.getByName(groupName) then - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - else - if toggle then - trigger.action.setUserFlag(flag, false) - end - end - end - - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.group_dead, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle}}, timer.getTime() + interval) - end - end - - --- Sets a flag if less than given percent of group is alive. - -- @todo document - function mist.flagFunc.group_alive_less_than(vars) - local type_tbl = { - [{'group', 'groupname', 'gp', 'groupName'}] = 'string', - percent = 'number', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive_less_than', type_tbl, vars) - assert(err, errmsg) - - local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname - local flag = vars.flag - local percent = vars.percent - local stopflag = vars.stopflag or vars.stopFlag or -1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then - if Group.getByName(groupName):getSize()/Group.getByName(groupName):getInitialSize() < percent/100 then - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - else - if toggle then - trigger.action.setUserFlag(flag, false) - end - end - else - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - end - end - - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.group_alive_less_than, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle, percent = percent}}, timer.getTime() + interval) - end - end - - --- Sets a flag if more than given percent of group is alive. - -- @todo document - function mist.flagFunc.group_alive_more_than(vars) - local type_tbl = { - [{'group', 'groupname', 'gp', 'groupName'}] = 'string', - percent = 'number', - flag = {'number', 'string'}, - [{'stopflag', 'stopFlag'}] = {'number', 'string', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive_more_than', type_tbl, vars) - assert(err, errmsg) - - local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname - local flag = vars.flag - local percent = vars.percent - local stopflag = vars.stopflag or vars.stopFlag or -1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then - if Group.getByName(groupName):getSize()/Group.getByName(groupName):getInitialSize() > percent/100 then - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - else - if toggle and trigger.misc.getUserFlag(flag) == 1 then - trigger.action.setUserFlag(flag, false) - end - end - else --- just in case - if toggle and trigger.misc.getUserFlag(flag) == 1 then - trigger.action.setUserFlag(flag, false) - end - end - end - - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.group_alive_more_than, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle, percent = percent}}, timer.getTime() + interval) - end - end - - mist.flagFunc.mapobjsDeadPolygon = mist.flagFunc.mapobjs_dead_polygon - mist.flagFunc.mapobjsDeadZones = mist.flagFunc.Mapobjs_dead_zones - mist.flagFunc.unitsInZones = mist.flagFunc.units_in_zones - mist.flagFunc.unitsInMovingZones = mist.flagFunc.units_in_moving_zones - mist.flagFunc.unitsInPolygon = mist.flagFunc.units_in_polygon - mist.flagFunc.unitsLOS = mist.flagFunc.units_LOS - mist.flagFunc.groupAlive = mist.flagFunc.group_alive - mist.flagFunc.groupDead = mist.flagFunc.group_dead - mist.flagFunc.groupAliveMoreThan = mist.flagFunc.group_alive_more_than - mist.flagFunc.groupAliveLessThan = mist.flagFunc.group_alive_less_than - -end - ---- Message functions. --- Messaging system --- @section mist.msg -do -- mist.msg scope - local messageList = {} - -- this defines the max refresh rate of the message box it honestly only needs to - -- go faster than this for precision timing stuff (which could be its own function) - local messageDisplayRate = 0.1 - local messageID = 0 - local displayActive = false - local displayFuncId = 0 - - local caSlots = false - local caMSGtoGroup = false - - if env.mission.groundControl then -- just to be sure? - for index, value in pairs(env.mission.groundControl) do - if type(value) == 'table' then - for roleName, roleVal in pairs(value) do - for rIndex, rVal in pairs(roleVal) do - if type(rVal) == 'number' and rVal > 0 then - caSlots = true - break - end - - end - end - elseif type(value) == 'boolean' and value == true then - caSlots = true - break - end - end - end - - local function mistdisplayV5() - --[[thoughts to improve upon - event handler based activeClients table. - display messages only when there is an update - possibly co-routine it. - ]] - end - - local function mistdisplayV4() - local activeClients = {} - - for clientId, clientData in pairs(mist.DBs.humansById) do - if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then - activeClients[clientData.groupId] = clientData.groupName - end - end - - --[[if caSlots == true and caMSGtoGroup == true then - - end]] - - - if #messageList > 0 then - if displayActive == false then - displayActive = true - end - --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') - local msgTableText = {} - local msgTableSound = {} - - for messageId, messageData in pairs(messageList) do - if messageData.displayedFor > messageData.displayTime then - messageData:remove() -- now using the remove/destroy function. - else - if messageData.displayedFor then - messageData.displayedFor = messageData.displayedFor + messageDisplayRate - end - local nextSound = 1000 - local soundIndex = 0 - - if messageData.multSound and #messageData.multSound > 0 then - for index, sData in pairs(messageData.multSound) do - if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played - nextSound = sData.time - soundIndex = index - end - end - if soundIndex ~= 0 then - messageData.multSound[soundIndex].played = true - end - end - - for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants - if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists - if messageData.text then -- text - if not msgTableText[recData] then -- create table entry for text - msgTableText[recData] = {} - msgTableText[recData].text = {} - if recData == 'RED' or recData == 'BLUE' then - msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' - end - msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text - msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor - else -- add to table entry and adjust display time if needed - if recData == 'RED' or recData == 'BLUE' then - msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' - else - msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' - end - msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text - if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then - msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor - else - msgTableText[recData].displayTime = 1 - end - end - end - if soundIndex ~= 0 then - msgTableSound[recData] = messageData.multSound[soundIndex].file - end - end - end - - - end - end - ------- new display - - if caSlots == true and caMSGtoGroup == false then - if msgTableText.RED then - trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText.RED.text), msgTableText.RED.displayTime, true) - - end - if msgTableText.BLUE then - trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText.BLUE.text), msgTableText.BLUE.displayTime, true) - end - end - - for index, msgData in pairs(msgTableText) do - if type(index) == 'number' then -- its a groupNumber - trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, true) - end - end - --- new audio - if msgTableSound.RED then - trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound.RED) - end - if msgTableSound.BLUE then - trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound.BLUE) - end - - - for index, file in pairs(msgTableSound) do - if type(index) == 'number' then -- its a groupNumber - trigger.action.outSoundForGroup(index, file) - end - end - else - mist.removeFunction(displayFuncId) - displayActive = false - end - - end - - local typeBase = { - ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, - ['MiG-21Bis'] = {'Mig-21'}, - ['MiG-15bis'] = {'Mig-15'}, - ['FW-190D9'] = {'FW-190'}, - ['Bf-109K-4'] = {'Bf-109'}, - } - - --[[function mist.setCAGroupMSG(val) - if type(val) == 'boolean' then - caMSGtoGroup = val - return true - end - return false -end]] - - mist.message = { - - add = function(vars) - local function msgSpamFilter(recList, spamBlockOn) - for id, name in pairs(recList) do - if name == spamBlockOn then - -- log:info('already on recList') - return recList - end - end - --log:info('add to recList') - table.insert(recList, spamBlockOn) - return recList - end - - --[[ - local vars = {} - vars.text = 'Hello World' - vars.displayTime = 20 - vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} - mist.message.add(vars) - - Displays the message for all red coalition players. Players belonging to Ukraine and Georgia, and all A-10Cs on the map - - ]] - - - local new = {} - new.text = vars.text -- The actual message - new.displayTime = vars.displayTime -- How long will the message appear for - new.displayedFor = 0 -- how long the message has been displayed so far - new.name = vars.name -- ID to overwrite the older message (if it exists) Basically it replaces a message that is displayed with new text. - new.addedAt = timer.getTime() - new.update = true - - if vars.multSound and vars.multSound[1] then - new.multSound = vars.multSound - else - new.multSound = {} - end - - if vars.sound or vars.fileName then -- converts old sound file system into new multSound format - local sound = vars.sound - if vars.fileName then - sound = vars.fileName - end - new.multSound[#new.multSound+1] = {time = 0.1, file = sound} - end - - if #new.multSound > 0 then - for i, data in pairs(new.multSound) do - data.played = false - end - end - - local newMsgFor = {} -- list of all groups message displays for - for forIndex, forData in pairs(vars.msgFor) do - for list, listData in pairs(forData) do - for clientId, clientData in pairs(mist.DBs.humansById) do - forIndex = string.lower(forIndex) - if type(listData) == 'string' then - listData = string.lower(listData) - end - if (forIndex == 'coa' and (listData == string.lower(clientData.coalition) or listData == 'all')) or (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then -- - newMsgFor = msgSpamFilter(newMsgFor, clientData.groupId) -- so units dont get the same message twice if complex rules are given - --table.insert(newMsgFor, clientId) - elseif forIndex == 'unittypes' then - for typeId, typeData in pairs(listData) do - local found = false - for clientDataEntry, clientDataVal in pairs(clientData) do - if type(clientDataVal) == 'string' then - if mist.matchString(list, clientDataVal) == true or list == 'all' then - local sString = typeData - for rName, pTbl in pairs(typeBase) do -- just a quick check to see if the user may have meant something and got the specific type of the unit wrong - for pIndex, pName in pairs(pTbl) do - if mist.stringMatch(sString, pName) then - sString = rName - end - end - end - if sString == clientData.type then - found = true - newMsgFor = msgSpamFilter(newMsgFor, clientData.groupId) -- sends info oto other function to see if client is already recieving the current message. - --table.insert(newMsgFor, clientId) - end - end - end - if found == true then -- shouldn't this be elsewhere too? - break - end - end - end - - end - end - for coaData, coaId in pairs(coalition.side) do - if string.lower(forIndex) == 'coa' or string.lower(forIndex) == 'ca' then - if listData == string.lower(coaData) or listData == 'all' then - newMsgFor = msgSpamFilter(newMsgFor, coaData) - end - end - end - end - end - - if #newMsgFor > 0 then - new.msgFor = newMsgFor -- I swear its not confusing - - else - return false - end - - - if vars.name and type(vars.name) == 'string' then - for i = 1, #messageList do - if messageList[i].name then - if messageList[i].name == vars.name then - --log:info('updateMessage') - messageList[i].displayedFor = 0 - messageList[i].addedAt = timer.getTime() - messageList[i].sound = new.sound - messageList[i].text = new.text - messageList[i].msgFor = new.msgFor - messageList[i].multSound = new.multSound - messageList[i].update = true - return messageList[i].messageID - end - end - end - end - - messageID = messageID + 1 - new.messageID = messageID - - --mist.debug.writeData(mist.utils.serialize,{'msg', new}, 'newMsg.lua') - - - messageList[#messageList + 1] = new - - local mt = { __index = mist.message} - setmetatable(new, mt) - - if displayActive == false then - displayActive = true - displayFuncId = mist.scheduleFunction(mistdisplayV4, {}, timer.getTime() + messageDisplayRate, messageDisplayRate) - end - - return messageID - - end, - - remove = function(self) -- Now a self variable; the former functionality taken up by mist.message.removeById. - for i, msgData in pairs(messageList) do - if messageList[i] == self then - table.remove(messageList, i) - return true --removal successful - end - end - return false -- removal not successful this script fails at life! - end, - - removeById = function(id) -- This function is NOT passed a self variable; it is the remove by id function. - for i, msgData in pairs(messageList) do - if messageList[i].messageID == id then - table.remove(messageList, i) - return true --removal successful - end - end - return false -- removal not successful this script fails at life! - end, - } - - --[[ vars for mist.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 -]] - function mist.msgMGRS(vars) - local units = vars.units - local acc = vars.acc - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getMGRSString{units = units, acc = acc} - local newText - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else - -- just append to the end. - newText = text .. s - end - else - newText = s - end - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - end - - --[[ vars for mist.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 -]] - function mist.msgLL(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 = mist.getLLString{units = units, acc = acc, DMS = DMS} - local newText - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else - -- just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.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 -]] - function mist.msgBR(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 mist.getBRString - local alt = vars.alt - local metric = vars.metric - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getBRString{units = units, ref = ref, alt = alt, metric = metric} - local newText - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else - -- just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - - end - - -- basically, just sub-types of mist.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 -]] - function mist.msgBullseye(vars) - if mist.DBs.missionData.bullseye[string.lower(vars.ref)] then - vars.ref = mist.DBs.missionData.bullseye[string.lower(vars.ref)] - mist.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 -]] - function mist.msgBRA(vars) - if Unit.getByName(vars.ref) and Unit.getByName(vars.ref):isExist() == true then - vars.ref = Unit.getByName(vars.ref):getPosition().p - if not vars.alt then - vars.alt = true - end - mist.msgBR(vars) - end - end - - --[[ vars for mist.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 -]] - function mist.msgLeadingMGRS(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 = mist.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} - local newText - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else - -- just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - - - end - - --[[ vars for mist.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 -]] - function mist.msgLeadingLL(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 = mist.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} - local newText - - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else - -- just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.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 -]] - function mist.msgLeadingBR(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 mist.getBRString - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} - local newText - - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else - -- just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } - end -end - ---- Demo functions. --- @section mist.demos -do -- mist.demos scope - mist.demos = {} - - function mist.demos.printFlightData(unit) - if unit:isExist() then - local function printData(unit, prevVel, prevE, prevTime) - local angles = mist.getAttitude(unit) - if angles then - local Heading = angles.Heading - local Pitch = angles.Pitch - local Roll = angles.Roll - local Yaw = angles.Yaw - local AoA = angles.AoA - local ClimbAngle = angles.ClimbAngle - - if not Heading then - Heading = 'NA' - else - Heading = string.format('%12.2f', mist.utils.toDegree(Heading)) - end - - if not Pitch then - Pitch = 'NA' - else - Pitch = string.format('%12.2f', mist.utils.toDegree(Pitch)) - end - - if not Roll then - Roll = 'NA' - else - Roll = string.format('%12.2f', mist.utils.toDegree(Roll)) - end - - local AoAplusYaw = 'NA' - if AoA and Yaw then - AoAplusYaw = string.format('%12.2f', mist.utils.toDegree((AoA^2 + Yaw^2)^0.5)) - end - - if not Yaw then - Yaw = 'NA' - else - Yaw = string.format('%12.2f', mist.utils.toDegree(Yaw)) - end - - if not AoA then - AoA = 'NA' - else - AoA = string.format('%12.2f', mist.utils.toDegree(AoA)) - end - - if not ClimbAngle then - ClimbAngle = 'NA' - else - ClimbAngle = string.format('%12.2f', mist.utils.toDegree(ClimbAngle)) - end - local unitPos = unit:getPosition() - local unitVel = unit:getVelocity() - local curTime = timer.getTime() - local absVel = string.format('%12.2f', mist.vec.mag(unitVel)) - - - local unitAcc = 'NA' - local Gs = 'NA' - local axialGs = 'NA' - local transGs = 'NA' - if prevVel and prevTime then - local xAcc = (unitVel.x - prevVel.x)/(curTime - prevTime) - local yAcc = (unitVel.y - prevVel.y)/(curTime - prevTime) - local zAcc = (unitVel.z - prevVel.z)/(curTime - prevTime) - - unitAcc = string.format('%12.2f', mist.vec.mag({x = xAcc, y = yAcc, z = zAcc})) - Gs = string.format('%12.2f', mist.vec.mag({x = xAcc, y = yAcc + 9.81, z = zAcc})/9.81) - axialGs = string.format('%12.2f', mist.vec.dp({x = xAcc, y = yAcc + 9.81, z = zAcc}, unitPos.x)/9.81) - transGs = string.format('%12.2f', mist.vec.mag(mist.vec.cp({x = xAcc, y = yAcc + 9.81, z = zAcc}, unitPos.x))/9.81) - end - - local E = 0.5*mist.vec.mag(unitVel)^2 + 9.81*unitPos.p.y - - local energy = string.format('%12.2e', E) - - local dEdt = 'NA' - if prevE and prevTime then - dEdt = string.format('%12.2e', (E - prevE)/(curTime - prevTime)) - end - - trigger.action.outText(string.format('%-25s', 'Heading: ') .. Heading .. ' degrees\n' .. string.format('%-25s', 'Roll: ') .. Roll .. ' degrees\n' .. string.format('%-25s', 'Pitch: ') .. Pitch - .. ' degrees\n' .. string.format('%-25s', 'Yaw: ') .. Yaw .. ' degrees\n' .. string.format('%-25s', 'AoA: ') .. AoA .. ' degrees\n' .. string.format('%-25s', 'AoA plus Yaw: ') .. AoAplusYaw .. ' degrees\n' .. string.format('%-25s', 'Climb Angle: ') .. - ClimbAngle .. ' degrees\n' .. string.format('%-25s', 'Absolute Velocity: ') .. absVel .. ' m/s\n' .. string.format('%-25s', 'Absolute Acceleration: ') .. unitAcc ..' m/s^2\n' - .. string.format('%-25s', 'Axial G loading: ') .. axialGs .. ' g\n' .. string.format('%-25s', 'Transverse G loading: ') .. transGs .. ' g\n' .. string.format('%-25s', 'Absolute G loading: ') .. Gs .. ' g\n' .. string.format('%-25s', 'Energy: ') .. energy .. ' J/kg\n' .. string.format('%-25s', 'dE/dt: ') .. dEdt ..' J/(kg*s)', 1) - return unitVel, E, curTime - end - end - - local function frameFinder(unit, prevVel, prevE, prevTime) - if unit:isExist() then - local currVel = unit:getVelocity() - if prevVel and (prevVel.x ~= currVel.x or prevVel.y ~= currVel.y or prevVel.z ~= currVel.z) or (prevTime and (timer.getTime() - prevTime) > 0.25) then - prevVel, prevE, prevTime = printData(unit, prevVel, prevE, prevTime) - end - mist.scheduleFunction(frameFinder, {unit, prevVel, prevE, prevTime}, timer.getTime() + 0.005) -- it can't go this fast, limited to the 100 times a sec check right now. - end - end - - - local curVel = unit:getVelocity() - local curTime = timer.getTime() - local curE = 0.5*mist.vec.mag(curVel)^2 + 9.81*unit:getPosition().p.y - frameFinder(unit, curVel, curE, curTime) - - end - - end - -end -do - --[[ stuff for marker panels - marker.add() add marker. Point of these functions is to simplify process and to store all mark panels added. - -- generates Id if not specified or if multiple marks created. - -- makes marks for countries by creating a mark for each client group in the country - -- can create multiple marks if needed for groups and countries. - -- adds marks to table for parsing and removing - -- Uses similar structure as messages. Big differences is it doesn't only mark to groups. - If to All, then mark is for All - if to coa mark is to coa - if to specific units, mark is to group - - - -------- - STUFF TO Check - -------- - If mark added to a group before a client joins slot is synced. - Mark made for cliet A in Slot A. Client A leaves, Client B joins in slot A. What do they see? - - May need to automate process... - - ]] - --[[ - local typeBase = { - ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, - ['MiG-21Bis'] = {'Mig-21'}, - ['MiG-15bis'] = {'Mig-15'}, - ['FW-190D9'] = {'FW-190'}, - ['Bf-109K-4'] = {'Bf-109'}, - } - - - local mId = 1337 - - mist.marker = {} - mist.marker.list = {} - local function markSpamFilter(recList, spamBlockOn) - - for id, name in pairs(recList) do - if name == spamBlockOn then - log:info('already on recList') - return recList - end - end - log:info('add to recList') - table.insert(recList, spamBlockOn) - return recList - end - - local function iterate() - mId = mId + 1 - return mId - end - - function mist.marker.add(pos, text, markFor, id) - log:warn('markerFunc') - log:info('Pos: $1, Text: $2, markFor: $3, id: $4', pos, text, markFor, id) - if not id then - - else - - end - local markType = 'all' - local markForTable = {} - if pos then - pos = mist.utils.makeVec3(pos) - end - if text and type(text) ~= string then - text = tostring(text) - else - text = '' - end - - if markFor then - if type(markFor) == 'number' then -- groupId - if mist.DBs.groupsById[markFor] then - markType = 'group' - end - elseif type(markFor) == 'string' then -- groupName - if mist.DBs.groupsByName[markFor] then - markType = 'group' - markFor = mist.DBs.groupsByName[markFor].groupId - end - elseif type(markFor) == 'table' then -- multiple groupName, country, coalition, all - markType = 'table' - log:info(markFor) - for forIndex, forData in pairs(markFor) do -- need to rethink this part and organization. Gotta be a more logical way to send messages to coa, groups, or all. - log:info(forIndex) - log:info(forData) - for list, listData in pairs(forData) do - log:info(listData) - forIndex = string.lower(forIndex) - if type(listData) == 'string' then - listData = string.lower(listData) - end - if listData == 'all' then - markType = 'all' - break - elseif (forIndex == 'coa' or forIndex == 'ca') then -- mark for coa or CA. - for name, index in pairs (coalition.side) do - if listData == string.lower(name) then - markType = 'coalition' - end - end - elseif (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then - markForTable = markSpamFilter(markForTable, clientData.groupId) - elseif forIndex == 'unittypes' then -- mark to group - -- iterate play units - for clientId, clientData in pairs(mist.DBs.humansById) do - for typeId, typeData in pairs(listData) do - log:info(typeData) - local found = false - if list == 'all' or clientData.coalition and type(clientData.coalition) == 'string' and mist.stringMatch(clientData.coalition, list) then - if mist.matchString(typeData, clientData.type) then - found = true - else - -- check other known names for aircraft - end - end - if found == true then - markForTable = markSpamFilter(markForTable, clientData.groupId) -- sends info to other function to see if client is already recieving the current message. - end - for clientDataEntry, clientDataVal in pairs(clientData) do - if type(clientDataVal) == 'string' then - - if mist.matchString(list, clientDataVal) == true or list == 'all' then - local sString = typeData - for rName, pTbl in pairs(typeBase) do -- just a quick check to see if the user may have meant something and got the specific type of the unit wrong - for pIndex, pName in pairs(pTbl) do - if mist.stringMatch(sString, pName) then - sString = rName - end - end - end - if mist.stringMatch(sString, clientData.type) then - found = true - markForTable = markSpamFilter(markForTable, clientData.groupId) -- sends info oto other function to see if client is already recieving the current message. - --table.insert(newMsgFor, clientId) - end - end - end - if found == true then -- shouldn't this be elsewhere too? - break - end - end - end - - end - end - end - end - end - else - markType = 'all' - end - - - - - - - if markType ~= 'table' then - local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markType = markType, markFor = markFor} - - -- create marks - if markType == 'coa' then - trigger.action.markToCoalition(newId, text, pos, markFor) - elseif markType == 'group' then - trigger.action.markToGroup(newId, text, pos, markFor) - else - trigger.action.markToAll(iterate(), text, pos) - end - table.insert(mist.marker.list, data) -- add to the DB - else - if #markForTable > 0 then - log:info('iterate') - for i = 1, #markForTable do - local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markFor = markFor} - log:info(data) - table.insert(mist.marker.list, data) - trigger.action.markToGroup(newId, text, pos, markForTable[i]) - end - end - end - - - - end - - function mist.marker.remove(id) - for i, data in pairs(mist.marker.list) do - if id == data.markId then - trigger.action.removeMark(id) - end - end - end - - function mist.marker.get(id) - - end - - function mist.marker.coords(pos, cType, markFor, id) -- wrapper function to just display coordinates of a specific format at location - - - end - ]] -end ---- Time conversion functions. --- @section mist.time -do -- mist.time scope - mist.time = {} - -- returns a string for specified military time - -- theTime is optional - -- if present current time in mil time is returned - -- if number or table the time is converted into mil tim - function mist.time.convertToSec(timeTable) - - local timeInSec = 0 - if timeTable and type(timeTable) == 'number' then - timeInSec = timeTable - elseif timeTable and type(timeTable) == 'table' and (timeTable.d or timeTable.h or timeTable.m or timeTable.s) then - if timeTable.d and type(timeTable.d) == 'number' then - timeInSec = timeInSec + (timeTable.d*86400) - end - if timeTable.h and type(timeTable.h) == 'number' then - timeInSec = timeInSec + (timeTable.h*3600) - end - if timeTable.m and type(timeTable.m) == 'number' then - timeInSec = timeInSec + (timeTable.m*60) - end - if timeTable.s and type(timeTable.s) == 'number' then - timeInSec = timeInSec + timeTable.s - end - - end - return timeInSec - end - - function mist.time.getDHMS(timeInSec) - if timeInSec and type(timeInSec) == 'number' then - local tbl = {d = 0, h = 0, m = 0, s = 0} - if timeInSec > 86400 then - while timeInSec > 86400 do - tbl.d = tbl.d + 1 - timeInSec = timeInSec - 86400 - end - end - if timeInSec > 3600 then - while timeInSec > 3600 do - tbl.h = tbl.h + 1 - timeInSec = timeInSec - 3600 - end - end - if timeInSec > 60 then - while timeInSec > 60 do - tbl.m = tbl.m + 1 - timeInSec = timeInSec - 60 - end - end - tbl.s = timeInSec - return tbl - else - log:error("Didn't recieve number") - return - end - end - - function mist.getMilString(theTime) - local timeInSec = 0 - if theTime then - timeInSec = mist.time.convertToSec(theTime) - else - timeInSec = mist.utils.round(timer.getAbsTime(), 0) - end - - local DHMS = mist.time.getDHMS(timeInSec) - - return tostring(string.format('%02d', DHMS.h) .. string.format('%02d',DHMS.m)) - end - - function mist.getClockString(theTime, hour) - local timeInSec = 0 - if theTime then - timeInSec = mist.time.convertToSec(theTime) - else - timeInSec = mist.utils.round(timer.getAbsTime(), 0) - end - local DHMS = mist.time.getDHMS(timeInSec) - if hour then - if DHMS.h > 12 then - DHMS.h = DHMS.h - 12 - return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s) .. ' PM') - else - return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s) .. ' AM') - end - else - return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s)) - end - end - - -- returns the date in string format - -- both variables optional - -- first val returns with the month as a string - -- 2nd val defins if it should be written the American way or the wrong way. - function mist.time.getDate(convert) - local cal = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -- - local date = {} - - if not env.mission.date then -- Not likely to happen. Resaving mission auto updates this to remove it. - date.d = 0 - date.m = 6 - date.y = 2011 - else - date.d = env.mission.date.Day - date.m = env.mission.date.Month - date.y = env.mission.date.Year - end - local start = 86400 - local timeInSec = mist.utils.round(timer.getAbsTime()) - if convert and type(convert) == 'number' then - timeInSec = convert - end - if timeInSec > 86400 then - while start < timeInSec do - if date.d >= cal[date.m] then - if date.m == 2 and date.d == 28 then -- HOLY COW we can edit years now. Gotta re-add this! - if date.y % 4 == 0 and date.y % 100 == 0 and date.y % 400 ~= 0 or date.y % 4 > 0 then - date.m = date.m + 1 - date.d = 0 - end - --date.d = 29 - else - date.m = date.m + 1 - date.d = 0 - end - end - if date.m == 13 then - date.m = 1 - date.y = date.y + 1 - end - date.d = date.d + 1 - start = start + 86400 - - end - end - return date - end - - function mist.time.relativeToStart(time) - if type(time) == 'number' then - return time - timer.getTime0() - end - end - - function mist.getDateString(rtnType, murica, oTime) -- returns date based on time - local word = {'January', 'Feburary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' } -- 'etc - local curTime = 0 - if oTime then - curTime = oTime - else - curTime = mist.utils.round(timer.getAbsTime()) - end - local tbl = mist.time.getDate(curTime) - - if rtnType then - if murica then - return tostring(word[tbl.m] .. ' ' .. tbl.d .. ' ' .. tbl.y) - else - return tostring(tbl.d .. ' ' .. word[tbl.m] .. ' ' .. tbl.y) - end - else - if murica then - return tostring(tbl.m .. '.' .. tbl.d .. '.' .. tbl.y) - else - return tostring(tbl.d .. '.' .. tbl.m .. '.' .. tbl.y) - end - end - end - --WIP - function mist.time.milToGame(milString, rtnType) --converts a military time. By default returns the abosolute time that event would occur. With optional value it returns how many seconds from time of call till that time. - local curTime = mist.utils.round(timer.getAbsTime()) - local milTimeInSec = 0 - - if milString and type(milString) == 'string' and string.len(milString) >= 4 then - local hr = tonumber(string.sub(milString, 1, 2)) - local mi = tonumber(string.sub(milString, 3)) - milTimeInSec = milTimeInSec + (mi*60) + (hr*3600) - elseif milString and type(milString) == 'table' and (milString.d or milString.h or milString.m or milString.s) then - milTimeInSec = mist.time.convertToSec(milString) - end - - local startTime = timer.getTime0() - local daysOffset = 0 - if startTime > 86400 then - daysOffset = mist.utils.round(startTime/86400) - if daysOffset > 0 then - milTimeInSec = milTimeInSec *daysOffset - end - end - - if curTime > milTimeInSec then - milTimeInSec = milTimeInSec + 86400 - end - if rtnType then - milTimeInSec = milTimeInSec - startTime - end - return milTimeInSec - end - - -end - ---- Group task functions. --- @section tasks -do -- group tasks scope - mist.ground = {} - mist.fixedWing = {} - mist.heli = {} - mist.air = {} - mist.air.fixedWing = {} - mist.air.heli = {} - mist.ship = {} - - --- Tasks group to follow a route. - -- This sets the mission task for the given group. - -- Any wrapped actions inside the path (like enroute - -- tasks) will be executed. - -- @tparam Group group group to task. - -- @tparam table path containing - -- points defining a route. - function mist.goRoute(group, path) - local misTask = { - id = 'Mission', - params = { - route = { - points = mist.utils.deepCopy(path), - }, - }, - } - if type(group) == 'string' then - group = Group.getByName(group) - end - if group then - local groupCon = group:getController() - if groupCon then - --log:warn(misTask) - groupCon:setTask(misTask) - return true - end - end - return false - end - - -- same as getGroupPoints but returns speed and formation type along with vec2 of point} - function mist.getGroupRoute(groupIdent, task) - -- refactor to search by groupId and allow groupId and groupName as inputs - local gpId = groupIdent - if mist.DBs.MEgroupsByName[groupIdent] then - gpId = mist.DBs.MEgroupsByName[groupIdent].groupId - else - log:error('$1 not found in mist.DBs.MEgroupsByName', groupIdent) - end - - for coa_name, coa_data in pairs(env.mission.coalition) do - if 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 env.mission.version > 7 and env.mission.version < 19 then - routeData.name = env.getValueDictByKey(point.name) - else - routeData.name = point.name - end - 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 - log:error('Group route not defined in mission editor for groupId: $1', gpId) - 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 - - -- function mist.ground.buildPath() end -- ???? - - function mist.ground.patrolRoute(vars) - --log:info('patrol') - 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 = mist.getGroupRoute(useGroupRoute) - end - else - useRoute = vars.route - local posStart = mist.getLeadPos(gpData) - useRoute[1] = mist.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 = mist.getLeadPos(gpData) - - - useRoute[#useRoute + 1] = mist.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] = mist.ground.buildWP(tempRoute[i], tempForm, tempSpeed) - end - - if pType and string.lower(pType) == 'doubleback' then - local curRoute = mist.utils.deepCopy(useRoute) - for i = #curRoute, 2, -1 do - useRoute[#useRoute + 1] = mist.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] = 'mist.ground.patrolRoute(' - cTask3[#cTask3 + 1] = mist.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 - log:info(useRoute) - mist.goRoute(gpData, useRoute) - - return - end - - function mist.ground.patrol(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 - - mist.ground.patrolRoute(vars) - - return - end - - -- No longer accepts path - function mist.ground.buildWP(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 = mist.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 - - function mist.fixedWing.buildWP(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 altType == 'agl' then - wp.alt_type = 'RADIO' - elseif altType == 'baro' or altType == '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 = mist.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 - - function mist.heli.buildWP(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 altType == 'agl' then - wp.alt_type = 'RADIO' - elseif altType == 'baro' or altType == '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 = mist.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 - - -- need to return a Vec3 or Vec2? - function mist.getRandPointInCircle(p, r, innerRadius, maxA, minA) - local point = mist.utils.makeVec3(p) - local theta = 2*math.pi*math.random() - local radius = r or 1000 - local minR = innerRadius or 0 - if maxA and not minA then - theta = math.rad(math.random(0, maxA - math.random())) - elseif maxA and minA and minA < maxA then - theta = math.rad(math.random(minA, maxA) - math.random()) - end - local rad = math.random() + math.random() - if rad > 1 then - rad = 2 - rad - end - - local radMult - if minR and minR <= radius then - --radMult = (radius - innerRadius)*rad + innerRadius - radMult = radius * math.sqrt((minR^2 + (radius^2 - minR^2) * math.random()) / radius^2) - else - radMult = radius*rad - 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 - - function mist.getRandomPointInZone(zoneName, innerRadius, maxA, minA) - if type(zoneName) == 'string' then - local zone = mist.DBs.zoneByName[zoneName] - if zone.type and zone.type == 2 then - return mist.getRandomPointInPoly(zone.vertices) - else - return mist.getRandPointInCircle(zone.point, zone.radius, innerRadius, maxA, minA) - end - end - return false - end - - function mist.getRandomPointInPoly(zone) - --env.info('Zone Size: '.. #zone) - local avg = mist.getAvgPoint(zone) - --log:warn(avg) - local radius = 0 - local minR = math.huge - local newCoord = {} - for i = 1, #zone do - if mist.utils.get2DDist(avg, zone[i]) > radius then - radius = mist.utils.get2DDist(avg, zone[i]) - end - if mist.utils.get2DDist(avg, zone[i]) < minR then - minR = mist.utils.get2DDist(avg, zone[i]) - end - end - --log:warn('Radius: $1', radius) - --log:warn('minR: $1', minR) - local lSpawnPos = {} - for j = 1, 100 do - newCoord = mist.getRandPointInCircle(avg, radius) - if mist.pointInPolygon(newCoord, zone) then - break - end - if j == 100 then - newCoord = mist.getRandPointInCircle(avg, 50000) - log:warn("Failed to find point in poly; Giving random point from center of the poly") - end - end - return newCoord - end - - function mist.groupToRandomPoint(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 mist.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 = mist.getRandPointInCircle(point, radius, innerRadius) - - local offset = {} - local posStart = mist.getLeadPos(group) - if posStart then - offset.x = mist.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) - offset.z = mist.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) - path[#path + 1] = mist.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] = mist.ground.buildWP({x = posStart.x + 11, z = posStart.z + 11}, 'off_road', speed) - path[#path + 1] = mist.ground.buildWP(posStart, 'on_road', speed) - path[#path + 1] = mist.ground.buildWP(offset, 'on_road', speed) - else - path[#path + 1] = mist.ground.buildWP({x = posStart.x + 25, z = posStart.z + 25}, form, speed) - end - end - path[#path + 1] = mist.ground.buildWP(offset, form, speed) - path[#path + 1] = mist.ground.buildWP(rndCoord, form, speed) - - mist.goRoute(group, path) - - return - end - - function mist.groupRandomDistSelf(gpData, dist, form, heading, speed, disableRoads) - local pos = mist.getLeadPos(gpData) - local fakeZone = {} - fakeZone.radius = dist or math.random(300, 1000) - fakeZone.point = {x = pos.x, y = pos.y, z = pos.z} - mist.groupToRandomZone(gpData, fakeZone, form, heading, speed, disableRoads) - - return - end - - function mist.groupToRandomZone(gpData, zone, form, heading, speed, disableRoads) - if type(gpData) == 'string' then - gpData = Group.getByName(gpData) - end - - if type(zone) == 'string' then - zone = mist.DBs.zonesByName[zone] - elseif type(zone) == 'table' and not zone.radius then - zone = mist.DBs.zonesByName[zone[math.random(1, #zone)]] - end - - if speed then - speed = mist.utils.kmphToMps(speed) - end - - local vars = {} - vars.group = gpData - vars.radius = zone.radius - vars.form = form - vars.headingDegrees = heading - vars.speed = speed - vars.point = mist.utils.zoneToVec3(zone) - vars.disableRoads = disableRoads - mist.groupToRandomPoint(vars) - - return - end - - function mist.isTerrainValid(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(typeData) then - table.insert(typeConverted, constId) - end - end - end - end - for validIndex, validData in pairs(typeConverted) do - if land.getSurfaceType(coord) == land.SurfaceType[validData] then - log:info('Surface is : $1', validData) - return true - end - end - return false - end - - function mist.terrainHeightDiff(coord, searchSize) - local samples = {} - local searchRadius = 5 - if searchSize then - searchRadius = searchSize - end - if type(coord) == 'string' then - coord = mist.utils.zoneToVec3(coord) - end - - coord = mist.utils.makeVec2(coord) - - samples[#samples + 1] = land.getHeight(coord) - for i = 0, 360, 30 do - samples[#samples + 1] = land.getHeight({x = (coord.x + (math.sin(math.rad(i))*searchRadius)), y = (coord.y + (math.cos(math.rad(i))*searchRadius))}) - if searchRadius >= 20 then -- if search radius is sorta large, take a sample halfway between center and outer edge - samples[#samples + 1] = land.getHeight({x = (coord.x + (math.sin(math.rad(i))*(searchRadius/2))), y = (coord.y + (math.cos(math.rad(i))*(searchRadius/2)))}) - end - end - local tMax, tMin = 0, 1000000 - for index, height in pairs(samples) do - if height > tMax then - tMax = height - end - if height < tMin then - tMin = height - end - end - return mist.utils.round(tMax - tMin, 2) - end - - function mist.groupToPoint(gpData, point, form, heading, speed, useRoads) - if type(point) == 'string' then - point = mist.DBs.zonesByName[point] - end - if speed then - speed = mist.utils.kmphToMps(speed) - end - - local vars = {} - vars.group = gpData - vars.form = form - vars.headingDegrees = heading - vars.speed = speed - vars.disableRoads = useRoads - vars.point = mist.utils.zoneToVec3(point) - mist.groupToRandomPoint(vars) - - return - end - - function mist.getLeadPos(group) - if type(group) == 'string' then -- group name - group = Group.getByName(group) - end - - local units = group:getUnits() - - local leader = units[1] - if Unit.getLife(leader) == 0 or not Unit.isExist(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 Unit.isExist(unit) and ind < lowestInd then - lowestInd = ind - return unit:getPosition().p - end - end - end - if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... - return leader:getPosition().p - end - end - -end - ---- Database tables. --- @section mist.DBs - ---- Mission data --- @table mist.DBs.missionData --- @field startTime mission start time --- @field theatre mission theatre/map e.g. Caucasus --- @field version mission version --- @field files mission resources - ---- Tables used as parameters. --- @section varTables - ---- mist.flagFunc.units_in_polygon parameter table. --- @table unitsInPolygonVars --- @tfield table unit name table @{UnitNameTable}. --- @tfield table zone table defining a polygon. --- @tfield number|string flag flag to set to true. --- @tfield[opt] number|string stopflag if set to true the function --- will stop evaluating. --- @tfield[opt] number maxalt maximum altitude (MSL) for the --- polygon. --- @tfield[opt] number req_num minimum number of units that have --- to be in the polygon. --- @tfield[opt] number interval sets the interval for --- checking if units are inside of the polygon in seconds. Default: 1. --- @tfield[opt] boolean toggle switch the flag to false if required --- conditions are not met. Default: false. --- @tfield[opt] table unitTableDef ---- Logger class. --- @type mist.Logger -do -- mist.Logger scope - mist.Logger = {} - - --- parses text and substitutes keywords with values from given array. - -- @param text string containing keywords to substitute with values - -- or a variable. - -- @param ... variables to use for substitution in string. - -- @treturn string new string with keywords substituted or - -- value of variable as string. - local function formatText(text, ...) - if type(text) ~= 'string' then - if type(text) == 'table' then - text = mist.utils.oneLineSerialize(text) - else - text = tostring(text) - end - else - for index,value in ipairs(arg) do - -- TODO: check for getmetatabel(value).__tostring - if type(value) == 'table' then - value = mist.utils.oneLineSerialize(value) - else - value = tostring(value) - end - text = text:gsub('$' .. index, value) - end - end - local fName = nil - local cLine = nil - if debug then - local dInfo = debug.getinfo(3) - fName = dInfo.name - cLine = dInfo.currentline - -- local fsrc = dinfo.short_src - --local fLine = dInfo.linedefined - end - if fName and cLine then - return fName .. '|' .. cLine .. ': ' .. text - elseif cLine then - return cLine .. ': ' .. text - else - return ' ' .. text - end - end - - local function splitText(text) - local tbl = {} - while text:len() > 4000 do - local sub = text:sub(1, 4000) - text = text:sub(4001) - table.insert(tbl, sub) - end - table.insert(tbl, text) - return tbl - end - - --- Creates a new logger. - -- Each logger has it's own tag and log level. - -- @tparam string tag tag which appears at the start of - -- every log line produced by this logger. - -- @tparam[opt] number|string level the log level defines which messages - -- will be logged and which will be omitted. Log level 3 beeing the most verbose - -- and 0 disabling all output. This can also be a string. Allowed strings are: - -- "none" (0), "error" (1), "warning" (2) and "info" (3). - -- @usage myLogger = mist.Logger:new("MyScript") - -- @usage myLogger = mist.Logger:new("MyScript", 2) - -- @usage myLogger = mist.Logger:new("MyScript", "info") - -- @treturn mist.Logger - function mist.Logger:new(tag, level) - local l = {tag = tag} - setmetatable(l, self) - self.__index = self - l:setLevel(level) - return l - end - - --- Sets the level of verbosity for this logger. - -- @tparam[opt] number|string level the log level defines which messages - -- will be logged and which will be omitted. Log level 3 beeing the most verbose - -- and 0 disabling all output. This can also[ be a string. Allowed strings are: - -- "none" (0), "error" (1), "warning" (2) and "info" (3). - -- @usage myLogger:setLevel("info") - -- @usage -- log everything - --myLogger:setLevel(3) - function mist.Logger:setLevel(level) - if not level then - self.level = 2 - else - if type(level) == 'string' then - if level == 'none' or level == 'off' then - self.level = 0 - elseif level == 'error' then - self.level = 1 - elseif level == 'warning' or level == 'warn' then - self.level = 2 - elseif level == 'info' then - self.level = 3 - end - elseif type(level) == 'number' then - self.level = level - else - self.level = 2 - end - end - end - - --- Logs error and shows alert window. - -- This logs an error to the dcs.log and shows a popup window, - -- pausing the simulation. This works always even if logging is - -- disabled by setting a log level of "none" or 0. - -- @tparam string text the text with keywords to substitute. - -- @param ... variables to be used for substitution. - -- @usage myLogger:alert("Shit just hit the fan! WEEEE!!!11") - function mist.Logger:alert(text, ...) - text = formatText(text, unpack(arg)) - if text:len() > 4000 then - local texts = splitText(text) - for i = 1, #texts do - if i == 1 then - env.error(self.tag .. '|' .. texts[i], true) - else - env.error(texts[i]) - end - end - else - env.error(self.tag .. '|' .. text, true) - end - end - - --- Logs a message, disregarding the log level. - -- @tparam string text the text with keywords to substitute. - -- @param ... variables to be used for substitution. - -- @usage myLogger:msg("Always logged!") - function mist.Logger:msg(text, ...) - text = formatText(text, unpack(arg)) - if text:len() > 4000 then - local texts = splitText(text) - for i = 1, #texts do - if i == 1 then - env.info(self.tag .. '|' .. texts[i]) - else - env.info(texts[i]) - end - end - else - env.info(self.tag .. '|' .. text) - end - end - - --- Logs an error. - -- logs a message prefixed with this loggers tag to dcs.log as - -- long as at least the "error" log level (1) is set. - -- @tparam string text the text with keywords to substitute. - -- @param ... variables to be used for substitution. - -- @usage myLogger:error("Just an error!") - -- @usage myLogger:error("Foo is $1 instead of $2", foo, "bar") - function mist.Logger:error(text, ...) - if self.level >= 1 then - text = formatText(text, unpack(arg)) - if text:len() > 4000 then - local texts = splitText(text) - for i = 1, #texts do - if i == 1 then - env.error(self.tag .. '|' .. texts[i]) - else - env.error(texts[i]) - end - end - else - env.error(self.tag .. '|' .. text, mistSettings.errorPopup) - end - end - end - - --- Logs a warning. - -- logs a message prefixed with this loggers tag to dcs.log as - -- long as at least the "warning" log level (2) is set. - -- @tparam string text the text with keywords to substitute. - -- @param ... variables to be used for substitution. - -- @usage myLogger:warn("Mother warned you! Those $1 from the interwebs are $2", {"geeks", 1337}) - function mist.Logger:warn(text, ...) - if self.level >= 2 then - text = formatText(text, unpack(arg)) - if text:len() > 4000 then - local texts = splitText(text) - for i = 1, #texts do - if i == 1 then - env.warning(self.tag .. '|' .. texts[i]) - else - env.warning(texts[i]) - end - end - else - env.warning(self.tag .. '|' .. text, mistSettings.warnPopup) - end - end - end - - --- Logs a info. - -- logs a message prefixed with this loggers tag to dcs.log as - -- long as the highest log level (3) "info" is set. - -- @tparam string text the text with keywords to substitute. - -- @param ... variables to be used for substitution. - -- @see warn - function mist.Logger:info(text, ...) - if self.level >= 3 then - text = formatText(text, unpack(arg)) - if text:len() > 4000 then - local texts = splitText(text) - for i = 1, #texts do - if i == 1 then - env.info(self.tag .. '|' .. texts[i]) - else - env.info(texts[i]) - end - end - else - env.info(self.tag .. '|' .. text, mistSettings.infoPopup) - end - end - end - -end - - --- initialize mist -mist.init() -env.info(('Mist version ' .. mist.majorVersion .. '.' .. mist.minorVersion .. '.' .. mist.build .. ' loaded.')) - --- vim: noet:ts=2:sw=2 From c4b96b896b05d60a5384368b6b6c0e8c03933998 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Wed, 7 Jul 2021 03:53:25 -0600 Subject: [PATCH 09/16] Output functions and other changes ADDED: properties table to zone entries in database MODIFIED: mist.dynAdd will now check tasks assigned in route for any beacons and will update the groupId or unitId as needed. MODIFIED: mist.getGroupData now has optional route boolean. If present it will also return the route. This allows the user to skip a function call. ADDED: mist.getGroupTable. Returns the verbatim table for a group as defined in the mission editor. MODIFIED: mist.teleportToPoint, mist.teleportInZone, mist.respawnInZone, mist.cloneInZone to have extra parameters for governing task and custom validTerrain values. MODIFIED: mist.debug.dump_G now accepts a boolean value that deletes entries that I commonly delete when dumping _G. ADDED: mist.debug.writeGroup. This function is used to write a group table directly to a file of the groups name.lua. The point of this is to easily get the contents into a separate file. ADDED: mist.debug.writeTypes This function iterates through units placed in the mission file and writes to a file containing a list of object typeNames, CLSIDs, and liveries WIP: mist functions to add, remove, query mark panels and shapes. --- mist.lua | 445 ++++++++++++++++++++++++----- mist_4_5_98.lua => mist_4_5_99.lua | 445 ++++++++++++++++++++++++----- 2 files changed, 748 insertions(+), 142 deletions(-) rename mist_4_5_98.lua => mist_4_5_99.lua (92%) diff --git a/mist.lua b/mist.lua index f457f28..1a92fb8 100644 --- a/mist.lua +++ b/mist.lua @@ -106,6 +106,14 @@ do -- the main scope zone.point.x = zone_data.x zone.point.y = 0 zone.point.z = zone_data.y + zone.properties = {} + if zone_data.properties then + for propInd, prop in pairs(zone_data.properties) do + if prop.value and type(prop.value) == 'string' and prop.value ~= "" then + zone.properties[prop.key] = prop.value + end + end + end mist.DBs.zonesByName[zone_data.name] = zone mist.DBs.zonesByNum[#mist.DBs.zonesByNum + 1] = mist.utils.deepCopy(zone) --[[deepcopy so that the zone in zones_by_name and the zone in @@ -159,17 +167,17 @@ do -- the main scope if type(cntry_data) == 'table' then --just making sure - for obj_type_name, obj_type_data in pairs(cntry_data) do + for obj_cat_name, obj_cat_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 + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then --should be an unncessary check - local category = obj_type_name + local category = obj_cat_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! + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! mist.DBs.units[coa_name][countryName][category] = {} - for group_num, group_data in pairs(obj_type_data.group) do + for group_num, group_data in pairs(obj_cat_data.group) do if group_data and group_data.units and type(group_data.units) == 'table' then --making sure again- this is a valid group @@ -254,10 +262,10 @@ do -- the main scope end --for unit_num, unit_data in pairs(group_data.units) do end --if group_data and group_data.units then - 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 group_num, group_data in pairs(obj_cat_data.group) do + end --if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then + end --if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then + end --for obj_cat_name, obj_cat_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 @@ -1328,8 +1336,9 @@ do -- the main scope --- Spawns a static object to the game world. -- @todo write good docs -- @tparam table staticObj table containing data needed for the object creation - function mist.dynAddStatic(newObj) - log:info(newObj) + function mist.dynAddStatic(n) + --log:info(newObj) + local newObj = mist.utils.deepCopy(n) if newObj.units and newObj.units[1] then -- if its mist format for entry, val in pairs(newObj.units[1]) do if newObj[entry] and newObj[entry] ~= val or not newObj[entry] then @@ -1423,7 +1432,9 @@ do -- the main scope -- Same as coalition.add function in SSE. checks the passed data to see if its valid. -- Will generate groupId, groupName, unitId, and unitName if needed -- @tparam table newGroup table containting values needed for spawning a group. - function mist.dynAdd(newGroup) + function mist.dynAdd(ng) + + local newGroup = mist.utils.deepCopy(ng) --log:warn(newGroup) --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua') local cntry = newGroup.country @@ -1589,7 +1600,23 @@ do -- the main scope end newGroup.country = newCountry - + -- update and verify any self tasks + if newGroup.route and newGroup.routes.points then + for i, pData in pairs(newGroup.route.points) do + if pData.task and pData.task.params and pData.task.params.tasks and #pData.task.params.tasks > 0 then + for tIndex, tData in pairs(pData.task.params.tasks) do + if tData.params and tData.params.action then + if tData.params.action.id == "EPLRS" then + tData.params.action.params.groupId = newGroup.groupId + elseif tData.params.action.id == "ActivateBeacon" or tData.params.action.id == "ActivateICLS" then + tData.params.action.params.unitId = newGroup.units[1].unitId + end + end + end + end + + end + end --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') --log:warn(newGroup) -- sanitize table @@ -1860,10 +1887,10 @@ do if 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 + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_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 = {} @@ -1878,10 +1905,10 @@ do 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 group_num, group_data in pairs(obj_cat_data.group) do + end --if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then + end --if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then + end --for obj_cat_name, obj_cat_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 @@ -3314,7 +3341,7 @@ do -- group functions scope end - function mist.getGroupData(gpName) + function mist.getGroupData(gpName, route) local found = false local newData = {} if mist.DBs.groupsByName[gpName] then @@ -3355,14 +3382,17 @@ do -- group functions scope newData.units[unitNum].unitName = unitData.unitName newData.units[unitNum].heading = unitData.heading -- added to DBs newData.units[unitNum].playerCanDrive = unitData.playerCanDrive -- added to DBs - + newData.units[unitNum].livery_id = unitData.livery_id + newData.units[unitNum].AddPropAircraft = unitData.AddPropAircraft + newData.units[unitNum].AddPropVehicle = unitData.AddPropVehicle + if newData.category == 'plane' or newData.category == 'helicopter' then newData.units[unitNum].payload = payloads[unitNum] - newData.units[unitNum].livery_id = unitData.livery_id + newData.units[unitNum].onboard_num = unitData.onboard_num newData.units[unitNum].callsign = unitData.callsign - newData.units[unitNum].AddPropAircraft = unitData.AddPropAircraft + end if newData.category == 'static' then newData.units[unitNum].categoryStatic = unitData.categoryStatic @@ -3372,6 +3402,10 @@ do -- group functions scope end end --log:info(newData) + if route then + newData.route = mist.getGroupRoute(gpName, true) + end + return newData else log:error('$1 not found in MIST database', gpName) @@ -3396,10 +3430,10 @@ do -- group functions scope 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 + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_data.group) do if group_data and group_data.groupId == gpId then for unitIndex, unitData in pairs(group_data.units) do --group index if unitData.unitId == unitId then @@ -3438,10 +3472,10 @@ do -- group functions scope if 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 + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_data.group) do if group_data and group_data.groupId == gpId then local payloads = {} for unitIndex, unitData in pairs(group_data.units) do --group index @@ -3463,9 +3497,46 @@ do -- group functions scope end log:warn("Couldn't find payload for group: $1", groupIdent) return - end + function mist.getGroupTable(groupIdent) + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + if mist.DBs.MEgroupsByName[groupIdent] then + gpId = mist.DBs.MEgroupsByName[groupIdent].groupId + else + log:error('$1 not found in mist.DBs.MEgroupsByName', groupIdent) + end + end + + if gpId then + for coa_name, coa_data in pairs(env.mission.coalition) do + if 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_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_data.group) do + if group_data and group_data.groupId == gpId then + return group_data + end + end + end + end + end + end + end + end + end + else + log:error('Need string or number. Got: $1', type(groupIdent)) + return false + end + log:warn("Couldn't find table for group: $1", groupIdent) + + end + function mist.getValidRandomPoint(vars) @@ -3483,6 +3554,14 @@ do -- group functions scope log:error('Missing field groupName or gpName in variable table') end + --[[New vars to add, mostly for when called via inZone functions + anyTerrain + offsetWP1 + offsetRoute + initTasks + + ]] + local action = vars.action local disperse = vars.disperse or false @@ -3490,8 +3569,9 @@ do -- group functions scope local radius = vars.radius or 0 local innerRadius = vars.innerRadius - local route = vars.route local dbData = false + + local newGroupData if gpName and not vars.groupData then @@ -3527,7 +3607,9 @@ do -- group functions scope local newCoord, origCoord local validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} - if vars.validTerrain then + if vars.anyTarrain then + -- do nothing + elseif vars.validTerrain then validTerrain = vars.validTerrain else if string.lower(newGroupData.category) == 'ship' then @@ -3536,7 +3618,7 @@ do -- group functions scope validTerrain = {'LAND', 'ROAD'} end end - local offsets = {} + if point and radius >= 0 then local valid = false -- new thoughts @@ -3634,10 +3716,34 @@ do -- group functions scope end - if route then - newGroupData.route = route - end - --log:info(newGroupData) + + local tempRoute + + if mist.DBs.MEgroupsByName[gpName] and not vars.route then + -- log:warn('getRoute') + tempRoute = mist.getGroupRoute(gpName, true) + elseif vars.route then + -- log:warn('routeExist') + tempRoute = mist.utils.deepCopy(route) + end + -- log:warn(tempRoute) + if tempRoute and (vars.offsetRoute or vars.offsetWP1 or vars.initTasks) then + for i = 1, #tempRoute do + -- log:warn(i) + if (vars.offsetRoute) or (i == 1 and vars.offsetWP1) or (i == 1 and vars.initTasks) then + -- log:warn('update offset') + tempRoute[i].x = tempRoute[i].x + diff.x + tempRoute[i].y = tempRoute[i].y + diff.y + elseif vars.initTasks and i > 1 then + --log:warn('deleteWP') + tempRoute[i] = nil + end + end + newGroupData.route = tempRoute + end + + + --log:warn(newGroupData) --mist.debug.writeData(mist.utils.serialize,{'teleportToPoint', newGroupData}, 'newGroupData.lua') if string.lower(newGroupData.category) == 'static' then --log:info(newGroupData) @@ -3647,7 +3753,7 @@ do -- group functions scope end - function mist.respawnInZone(gpName, zone, disperse, maxDisp) + function mist.respawnInZone(gpName, zone, disperse, maxDisp, v) if type(gpName) == 'table' and gpName:getName() then gpName = gpName:getName() @@ -3669,10 +3775,17 @@ do -- group functions scope vars.radius = zone.radius vars.disperse = disperse vars.maxDisp = maxDisp + + if v and type(v) == 'table' then + for index, val in pairs(v) do + vars[index] = val + end + end + return mist.teleportToPoint(vars) end - function mist.cloneInZone(gpName, zone, disperse, maxDisp) + function mist.cloneInZone(gpName, zone, disperse, maxDisp, v) --log:info('cloneInZone') if type(gpName) == 'table' then gpName = gpName:getName() @@ -3693,10 +3806,15 @@ do -- group functions scope vars.disperse = disperse vars.maxDisp = maxDisp --log:info('do teleport') + if v and type(v) == 'table' then + for index, val in pairs(v) do + vars[index] = val + end + end return mist.teleportToPoint(vars) end - function mist.teleportInZone(gpName, zone, disperse, maxDisp) -- groupName, zoneName or table of Zone Names, keepForm is a boolean + function mist.teleportInZone(gpName, zone, disperse, maxDisp, v) -- groupName, zoneName or table of Zone Names, keepForm is a boolean if type(gpName) == 'table' and gpName:getName() then gpName = gpName:getName() else @@ -3716,6 +3834,11 @@ do -- group functions scope vars.radius = zone.radius vars.disperse = disperse vars.maxDisp = maxDisp + if v and type(v) == 'table' then + for index, val in pairs(v) do + vars[index] = val + end + end return mist.teleportToPoint(vars) end @@ -4777,11 +4900,24 @@ do -- mist.debug scope -- in $DCS_ROOT\Scripts\MissionScripting.lua to access lfs and io -- libraries. -- @param fname - function mist.debug.dump_G(fname) + function mist.debug.dump_G(fname, simp) if lfs and io then local fdir = lfs.writedir() .. [[Logs\]] .. fname local f = io.open(fdir, 'w') - f:write(mist.utils.tableShow(_G)) + if simp then + local g = mist.utils.deepCopy(_G) + g.mist = nil + g.slmod = nil + g.env.mission = nil + g.env.warehouses = nil + g.country.by_idx = nil + g.country.by_country = nil + + f:write(mist.utils.tableShow(g)) + else + + f:write(mist.utils.tableShow(_G)) + end f:close() log:info('Wrote debug data to $1', fdir) --trigger.action.outText(errmsg, 10) @@ -4825,6 +4961,130 @@ do -- mist.debug scope end end end + + -- write group table + function mist.debug.writeGroup(gName, data) + if gName and mist.DBs.groupsByName[gName] then + local dat + if data then + dat = mist.getGroupData(gName) + else + dat = mist.getGroupTable(gName) + end + if dat then + dat.route = {points = mist.getGroupRoute(gName, true)} + end + + if io and lfs and dat then + mist.debug.writeData(mist.utils.serialize, {gName, dat}, gName .. '_table.lua') + else + if dat then + trigger.action.outText('Error: insufficient libraries to run mist.debug.writeGroup, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua \nGroup table written to DCS.log file instead.', 10) + log:warn('$1 dataTable: $2', gName, dat) + else + trigger.action.outText('Unable to write group table for: ' .. gName .. '\n Error: insufficient libraries to run mist.debug.writeGroup, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua', 10) + end + end + end + end + -- write all object types in mission. + function mist.debug.writeTypes(fName) + local wt = 'mistDebugWriteTypes.lua' + if fName and type(fName) == 'string' and string.find(fName, '.lua') then + wt = fName + end + local output = {units = {}, countries = {}} + for coa_name_miz, coa_data in pairs(env.mission.coalition) do + if 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 + local countryName = string.lower(cntry_data.name) + if cntry_data.id and country.names[cntry_data.id] then + countryName = string.lower(country.names[cntry_data.id]) + end + output.countries[countryName] = {} + if type(cntry_data) == 'table' then --just making sure + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then --should be an unncessary check + local category = obj_cat_name + if not output.countries[countryName][category] then + -- log:warn('Create: $1', category) + output.countries[countryName][category] = {} + end + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_data.group) do + if group_data and group_data.units and type(group_data.units) == 'table' then --making sure again- this is a valid group + for i = 1, #group_data.units do + if group_data.units[i] then + local u = group_data.units[i] + local liv = u.livery_id or 'default' + if not output.units[u.type] then -- create unit table + -- log:warn('Create: $1', u.type) + output.units[u.type] = {count = 0, livery_id = {}} + end + + if not output.countries[countryName][category][u.type] then + -- log:warn('Create country, category, unit: $1', u.type) + output.countries[countryName][category][u.type] = 0 + end + -- add to count + output.countries[countryName][category][u.type] = output.countries[countryName][category][u.type] + 1 + output.units[u.type].count = output.units[u.type].count + 1 + + if liv and not output.units[u.type].livery_id[countryName] then + -- log:warn('Create livery country: $1', countryName) + output.units[u.type].livery_id[countryName] = {} + end + if liv and not output.units[u.type].livery_id[countryName][liv] then + --log:warn('Create Livery: $1', liv) + output.units[u.type].livery_id[countryName][liv] = 0 + end + if liv then + output.units[u.type].livery_id[countryName][liv] = output.units[u.type].livery_id[countryName][liv] + 1 + end + if u.payload and u.payload.pylons then + if not output.units[u.type].CLSID then + output.units[u.type].CLSID = {} + output.units[u.type].pylons = {} + end + + for pyIndex, pData in pairs(u.payload.pylons) do + if not output.units[u.type].CLSID[pData.CLSID] then + output.units[u.type].CLSID[pData.CLSID] = 0 + end + output.units[u.type].CLSID[pData.CLSID] = output.units[u.type].CLSID[pData.CLSID] + 1 + + if not output.units[u.type].pylons[pyIndex] then + output.units[u.type].pylons[pyIndex] = {} + end + if not output.units[u.type].pylons[pyIndex][pData.CLSID] then + output.units[u.type].pylons[pyIndex][pData.CLSID] = 0 + end + output.units[u.type].pylons[pyIndex][pData.CLSID] = output.units[u.type].pylons[pyIndex][pData.CLSID] + 1 + end + + end + end + end + end + end + end + end + end + end + end + end + end + end + if io and lfs then + mist.debug.writeData(mist.utils.serialize, {'mistDebugWriteTypes', output}, wt) + else + trigger.action.outText('Error: insufficient libraries to run mist.debug.writeTypes, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua \n writeTypes table written to DCS.log file instead.', 10) + log:warn('mist.debug.writeTypes: $1', output) + end + end + -- write CLSIDs + -- write livery names end --- 3D Vector functions @@ -6313,7 +6573,15 @@ do ['FW-190D9'] = {'FW-190'}, ['Bf-109K-4'] = {'Bf-109'}, } + + local mDefs = { + coa = { + ['red'] = {fillColor = {.8, 0 , 0, .5}, color = {.8, 0 , 0, .5}, lineType = 2}, + ['blue'] = {fillColor = {0, 0 , 0.8, .5}, color = {0, 0 , 0.8, .5}, lineType = 2}, + }, + } + local userDefs = {} local mId = 1337 @@ -6334,18 +6602,49 @@ do local function iterate() mId = mId + 1 - return mId + return mist.utils.deepCopy(mId) end + + function mist.marker.setDefault(vars) + if vars and type(vars) == 'table' then + for l1, l1Data in pairs(vars) do + if type(l1Data) == 'table' then + if not userDefs[l1] then + userDefs[l1] = {} + end + + for l2, l2Data in pairs(l1Data) do + userDefs[l1][l2] = l2Data + end + else + userDefs[l1] = l1Data + end + end + + end + end - function mist.marker.add(pos, text, markFor, id) + function mist.marker.add(vars) log:warn('markerFunc') - log:info('Pos: $1, Text: $2, markFor: $3, id: $4', pos, text, markFor, id) - if not id then + log:info(vars) + local pos = vars.point or vars.points or vars.pos + local text = vars.text + local markFor = vars.markFor + local id = vars.id + local mType = vars.mType + local color = vars.color + local fillColor = vars.fillColor + local lineType = vars.lineType + local readOnly = vars.readOnly + local displayMessage= vars.displayMessage + + + if not id then else end - local markType = 'all' + local markScope = 'all' local markForTable = {} if pos then pos = mist.utils.makeVec3(pos) @@ -6359,15 +6658,15 @@ do if markFor then if type(markFor) == 'number' then -- groupId if mist.DBs.groupsById[markFor] then - markType = 'group' + markScope = 'group' end elseif type(markFor) == 'string' then -- groupName if mist.DBs.groupsByName[markFor] then - markType = 'group' + markScope = 'group' markFor = mist.DBs.groupsByName[markFor].groupId end elseif type(markFor) == 'table' then -- multiple groupName, country, coalition, all - markType = 'table' + markScope = 'table' log:info(markFor) for forIndex, forData in pairs(markFor) do -- need to rethink this part and organization. Gotta be a more logical way to send messages to coa, groups, or all. log:info(forIndex) @@ -6379,12 +6678,12 @@ do listData = string.lower(listData) end if listData == 'all' then - markType = 'all' + markScope = 'all' break elseif (forIndex == 'coa' or forIndex == 'ca') then -- mark for coa or CA. for name, index in pairs (coalition.side) do if listData == string.lower(name) then - markType = 'coalition' + markScope = 'coalition' end end elseif (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then @@ -6436,7 +6735,7 @@ do end end else - markType = 'all' + markScope = 'all' end @@ -6444,14 +6743,14 @@ do - if markType ~= 'table' then + if markScope ~= 'table' then local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markType = markType, markFor = markFor} + local data = {markId = newId, text = text, pos = pos, markScope = markScope, markFor = markFor} -- create marks - if markType == 'coa' then + if markScope == 'coa' then trigger.action.markToCoalition(newId, text, pos, markFor) - elseif markType == 'group' then + elseif markScope == 'group' then trigger.action.markToGroup(newId, text, pos, markFor) else trigger.action.markToAll(iterate(), text, pos) @@ -6752,10 +7051,10 @@ do -- group tasks scope if 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 + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_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 = {} @@ -6792,10 +7091,10 @@ do -- group tasks scope log:error('Group route not defined in mission editor for groupId: $1', gpId) 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 group_num, group_data in pairs(obj_cat_data.group) do + end --if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then + end --if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then + end --for obj_cat_name, obj_cat_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 @@ -7106,8 +7405,12 @@ do -- group tasks scope local minR = innerRadius or 0 if maxA and not minA then theta = math.rad(math.random(0, maxA - math.random())) - elseif maxA and minA and minA < maxA then - theta = math.rad(math.random(minA, maxA) - math.random()) + elseif maxA and minA then + if minA < maxA then + theta = math.rad(math.random(minA, maxA) - math.random()) + else + theta = math.rad(math.random(maxA, minA) - math.random()) + end end local rad = math.random() + math.random() if rad > 1 then diff --git a/mist_4_5_98.lua b/mist_4_5_99.lua similarity index 92% rename from mist_4_5_98.lua rename to mist_4_5_99.lua index f457f28..1a92fb8 100644 --- a/mist_4_5_98.lua +++ b/mist_4_5_99.lua @@ -106,6 +106,14 @@ do -- the main scope zone.point.x = zone_data.x zone.point.y = 0 zone.point.z = zone_data.y + zone.properties = {} + if zone_data.properties then + for propInd, prop in pairs(zone_data.properties) do + if prop.value and type(prop.value) == 'string' and prop.value ~= "" then + zone.properties[prop.key] = prop.value + end + end + end mist.DBs.zonesByName[zone_data.name] = zone mist.DBs.zonesByNum[#mist.DBs.zonesByNum + 1] = mist.utils.deepCopy(zone) --[[deepcopy so that the zone in zones_by_name and the zone in @@ -159,17 +167,17 @@ do -- the main scope if type(cntry_data) == 'table' then --just making sure - for obj_type_name, obj_type_data in pairs(cntry_data) do + for obj_cat_name, obj_cat_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 + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then --should be an unncessary check - local category = obj_type_name + local category = obj_cat_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! + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! mist.DBs.units[coa_name][countryName][category] = {} - for group_num, group_data in pairs(obj_type_data.group) do + for group_num, group_data in pairs(obj_cat_data.group) do if group_data and group_data.units and type(group_data.units) == 'table' then --making sure again- this is a valid group @@ -254,10 +262,10 @@ do -- the main scope end --for unit_num, unit_data in pairs(group_data.units) do end --if group_data and group_data.units then - 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 group_num, group_data in pairs(obj_cat_data.group) do + end --if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then + end --if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then + end --for obj_cat_name, obj_cat_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 @@ -1328,8 +1336,9 @@ do -- the main scope --- Spawns a static object to the game world. -- @todo write good docs -- @tparam table staticObj table containing data needed for the object creation - function mist.dynAddStatic(newObj) - log:info(newObj) + function mist.dynAddStatic(n) + --log:info(newObj) + local newObj = mist.utils.deepCopy(n) if newObj.units and newObj.units[1] then -- if its mist format for entry, val in pairs(newObj.units[1]) do if newObj[entry] and newObj[entry] ~= val or not newObj[entry] then @@ -1423,7 +1432,9 @@ do -- the main scope -- Same as coalition.add function in SSE. checks the passed data to see if its valid. -- Will generate groupId, groupName, unitId, and unitName if needed -- @tparam table newGroup table containting values needed for spawning a group. - function mist.dynAdd(newGroup) + function mist.dynAdd(ng) + + local newGroup = mist.utils.deepCopy(ng) --log:warn(newGroup) --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua') local cntry = newGroup.country @@ -1589,7 +1600,23 @@ do -- the main scope end newGroup.country = newCountry - + -- update and verify any self tasks + if newGroup.route and newGroup.routes.points then + for i, pData in pairs(newGroup.route.points) do + if pData.task and pData.task.params and pData.task.params.tasks and #pData.task.params.tasks > 0 then + for tIndex, tData in pairs(pData.task.params.tasks) do + if tData.params and tData.params.action then + if tData.params.action.id == "EPLRS" then + tData.params.action.params.groupId = newGroup.groupId + elseif tData.params.action.id == "ActivateBeacon" or tData.params.action.id == "ActivateICLS" then + tData.params.action.params.unitId = newGroup.units[1].unitId + end + end + end + end + + end + end --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') --log:warn(newGroup) -- sanitize table @@ -1860,10 +1887,10 @@ do if 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 + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_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 = {} @@ -1878,10 +1905,10 @@ do 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 group_num, group_data in pairs(obj_cat_data.group) do + end --if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then + end --if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then + end --for obj_cat_name, obj_cat_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 @@ -3314,7 +3341,7 @@ do -- group functions scope end - function mist.getGroupData(gpName) + function mist.getGroupData(gpName, route) local found = false local newData = {} if mist.DBs.groupsByName[gpName] then @@ -3355,14 +3382,17 @@ do -- group functions scope newData.units[unitNum].unitName = unitData.unitName newData.units[unitNum].heading = unitData.heading -- added to DBs newData.units[unitNum].playerCanDrive = unitData.playerCanDrive -- added to DBs - + newData.units[unitNum].livery_id = unitData.livery_id + newData.units[unitNum].AddPropAircraft = unitData.AddPropAircraft + newData.units[unitNum].AddPropVehicle = unitData.AddPropVehicle + if newData.category == 'plane' or newData.category == 'helicopter' then newData.units[unitNum].payload = payloads[unitNum] - newData.units[unitNum].livery_id = unitData.livery_id + newData.units[unitNum].onboard_num = unitData.onboard_num newData.units[unitNum].callsign = unitData.callsign - newData.units[unitNum].AddPropAircraft = unitData.AddPropAircraft + end if newData.category == 'static' then newData.units[unitNum].categoryStatic = unitData.categoryStatic @@ -3372,6 +3402,10 @@ do -- group functions scope end end --log:info(newData) + if route then + newData.route = mist.getGroupRoute(gpName, true) + end + return newData else log:error('$1 not found in MIST database', gpName) @@ -3396,10 +3430,10 @@ do -- group functions scope 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 + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_data.group) do if group_data and group_data.groupId == gpId then for unitIndex, unitData in pairs(group_data.units) do --group index if unitData.unitId == unitId then @@ -3438,10 +3472,10 @@ do -- group functions scope if 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 + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_data.group) do if group_data and group_data.groupId == gpId then local payloads = {} for unitIndex, unitData in pairs(group_data.units) do --group index @@ -3463,9 +3497,46 @@ do -- group functions scope end log:warn("Couldn't find payload for group: $1", groupIdent) return - end + function mist.getGroupTable(groupIdent) + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + if mist.DBs.MEgroupsByName[groupIdent] then + gpId = mist.DBs.MEgroupsByName[groupIdent].groupId + else + log:error('$1 not found in mist.DBs.MEgroupsByName', groupIdent) + end + end + + if gpId then + for coa_name, coa_data in pairs(env.mission.coalition) do + if 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_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_data.group) do + if group_data and group_data.groupId == gpId then + return group_data + end + end + end + end + end + end + end + end + end + else + log:error('Need string or number. Got: $1', type(groupIdent)) + return false + end + log:warn("Couldn't find table for group: $1", groupIdent) + + end + function mist.getValidRandomPoint(vars) @@ -3483,6 +3554,14 @@ do -- group functions scope log:error('Missing field groupName or gpName in variable table') end + --[[New vars to add, mostly for when called via inZone functions + anyTerrain + offsetWP1 + offsetRoute + initTasks + + ]] + local action = vars.action local disperse = vars.disperse or false @@ -3490,8 +3569,9 @@ do -- group functions scope local radius = vars.radius or 0 local innerRadius = vars.innerRadius - local route = vars.route local dbData = false + + local newGroupData if gpName and not vars.groupData then @@ -3527,7 +3607,9 @@ do -- group functions scope local newCoord, origCoord local validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} - if vars.validTerrain then + if vars.anyTarrain then + -- do nothing + elseif vars.validTerrain then validTerrain = vars.validTerrain else if string.lower(newGroupData.category) == 'ship' then @@ -3536,7 +3618,7 @@ do -- group functions scope validTerrain = {'LAND', 'ROAD'} end end - local offsets = {} + if point and radius >= 0 then local valid = false -- new thoughts @@ -3634,10 +3716,34 @@ do -- group functions scope end - if route then - newGroupData.route = route - end - --log:info(newGroupData) + + local tempRoute + + if mist.DBs.MEgroupsByName[gpName] and not vars.route then + -- log:warn('getRoute') + tempRoute = mist.getGroupRoute(gpName, true) + elseif vars.route then + -- log:warn('routeExist') + tempRoute = mist.utils.deepCopy(route) + end + -- log:warn(tempRoute) + if tempRoute and (vars.offsetRoute or vars.offsetWP1 or vars.initTasks) then + for i = 1, #tempRoute do + -- log:warn(i) + if (vars.offsetRoute) or (i == 1 and vars.offsetWP1) or (i == 1 and vars.initTasks) then + -- log:warn('update offset') + tempRoute[i].x = tempRoute[i].x + diff.x + tempRoute[i].y = tempRoute[i].y + diff.y + elseif vars.initTasks and i > 1 then + --log:warn('deleteWP') + tempRoute[i] = nil + end + end + newGroupData.route = tempRoute + end + + + --log:warn(newGroupData) --mist.debug.writeData(mist.utils.serialize,{'teleportToPoint', newGroupData}, 'newGroupData.lua') if string.lower(newGroupData.category) == 'static' then --log:info(newGroupData) @@ -3647,7 +3753,7 @@ do -- group functions scope end - function mist.respawnInZone(gpName, zone, disperse, maxDisp) + function mist.respawnInZone(gpName, zone, disperse, maxDisp, v) if type(gpName) == 'table' and gpName:getName() then gpName = gpName:getName() @@ -3669,10 +3775,17 @@ do -- group functions scope vars.radius = zone.radius vars.disperse = disperse vars.maxDisp = maxDisp + + if v and type(v) == 'table' then + for index, val in pairs(v) do + vars[index] = val + end + end + return mist.teleportToPoint(vars) end - function mist.cloneInZone(gpName, zone, disperse, maxDisp) + function mist.cloneInZone(gpName, zone, disperse, maxDisp, v) --log:info('cloneInZone') if type(gpName) == 'table' then gpName = gpName:getName() @@ -3693,10 +3806,15 @@ do -- group functions scope vars.disperse = disperse vars.maxDisp = maxDisp --log:info('do teleport') + if v and type(v) == 'table' then + for index, val in pairs(v) do + vars[index] = val + end + end return mist.teleportToPoint(vars) end - function mist.teleportInZone(gpName, zone, disperse, maxDisp) -- groupName, zoneName or table of Zone Names, keepForm is a boolean + function mist.teleportInZone(gpName, zone, disperse, maxDisp, v) -- groupName, zoneName or table of Zone Names, keepForm is a boolean if type(gpName) == 'table' and gpName:getName() then gpName = gpName:getName() else @@ -3716,6 +3834,11 @@ do -- group functions scope vars.radius = zone.radius vars.disperse = disperse vars.maxDisp = maxDisp + if v and type(v) == 'table' then + for index, val in pairs(v) do + vars[index] = val + end + end return mist.teleportToPoint(vars) end @@ -4777,11 +4900,24 @@ do -- mist.debug scope -- in $DCS_ROOT\Scripts\MissionScripting.lua to access lfs and io -- libraries. -- @param fname - function mist.debug.dump_G(fname) + function mist.debug.dump_G(fname, simp) if lfs and io then local fdir = lfs.writedir() .. [[Logs\]] .. fname local f = io.open(fdir, 'w') - f:write(mist.utils.tableShow(_G)) + if simp then + local g = mist.utils.deepCopy(_G) + g.mist = nil + g.slmod = nil + g.env.mission = nil + g.env.warehouses = nil + g.country.by_idx = nil + g.country.by_country = nil + + f:write(mist.utils.tableShow(g)) + else + + f:write(mist.utils.tableShow(_G)) + end f:close() log:info('Wrote debug data to $1', fdir) --trigger.action.outText(errmsg, 10) @@ -4825,6 +4961,130 @@ do -- mist.debug scope end end end + + -- write group table + function mist.debug.writeGroup(gName, data) + if gName and mist.DBs.groupsByName[gName] then + local dat + if data then + dat = mist.getGroupData(gName) + else + dat = mist.getGroupTable(gName) + end + if dat then + dat.route = {points = mist.getGroupRoute(gName, true)} + end + + if io and lfs and dat then + mist.debug.writeData(mist.utils.serialize, {gName, dat}, gName .. '_table.lua') + else + if dat then + trigger.action.outText('Error: insufficient libraries to run mist.debug.writeGroup, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua \nGroup table written to DCS.log file instead.', 10) + log:warn('$1 dataTable: $2', gName, dat) + else + trigger.action.outText('Unable to write group table for: ' .. gName .. '\n Error: insufficient libraries to run mist.debug.writeGroup, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua', 10) + end + end + end + end + -- write all object types in mission. + function mist.debug.writeTypes(fName) + local wt = 'mistDebugWriteTypes.lua' + if fName and type(fName) == 'string' and string.find(fName, '.lua') then + wt = fName + end + local output = {units = {}, countries = {}} + for coa_name_miz, coa_data in pairs(env.mission.coalition) do + if 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 + local countryName = string.lower(cntry_data.name) + if cntry_data.id and country.names[cntry_data.id] then + countryName = string.lower(country.names[cntry_data.id]) + end + output.countries[countryName] = {} + if type(cntry_data) == 'table' then --just making sure + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then --should be an unncessary check + local category = obj_cat_name + if not output.countries[countryName][category] then + -- log:warn('Create: $1', category) + output.countries[countryName][category] = {} + end + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_data.group) do + if group_data and group_data.units and type(group_data.units) == 'table' then --making sure again- this is a valid group + for i = 1, #group_data.units do + if group_data.units[i] then + local u = group_data.units[i] + local liv = u.livery_id or 'default' + if not output.units[u.type] then -- create unit table + -- log:warn('Create: $1', u.type) + output.units[u.type] = {count = 0, livery_id = {}} + end + + if not output.countries[countryName][category][u.type] then + -- log:warn('Create country, category, unit: $1', u.type) + output.countries[countryName][category][u.type] = 0 + end + -- add to count + output.countries[countryName][category][u.type] = output.countries[countryName][category][u.type] + 1 + output.units[u.type].count = output.units[u.type].count + 1 + + if liv and not output.units[u.type].livery_id[countryName] then + -- log:warn('Create livery country: $1', countryName) + output.units[u.type].livery_id[countryName] = {} + end + if liv and not output.units[u.type].livery_id[countryName][liv] then + --log:warn('Create Livery: $1', liv) + output.units[u.type].livery_id[countryName][liv] = 0 + end + if liv then + output.units[u.type].livery_id[countryName][liv] = output.units[u.type].livery_id[countryName][liv] + 1 + end + if u.payload and u.payload.pylons then + if not output.units[u.type].CLSID then + output.units[u.type].CLSID = {} + output.units[u.type].pylons = {} + end + + for pyIndex, pData in pairs(u.payload.pylons) do + if not output.units[u.type].CLSID[pData.CLSID] then + output.units[u.type].CLSID[pData.CLSID] = 0 + end + output.units[u.type].CLSID[pData.CLSID] = output.units[u.type].CLSID[pData.CLSID] + 1 + + if not output.units[u.type].pylons[pyIndex] then + output.units[u.type].pylons[pyIndex] = {} + end + if not output.units[u.type].pylons[pyIndex][pData.CLSID] then + output.units[u.type].pylons[pyIndex][pData.CLSID] = 0 + end + output.units[u.type].pylons[pyIndex][pData.CLSID] = output.units[u.type].pylons[pyIndex][pData.CLSID] + 1 + end + + end + end + end + end + end + end + end + end + end + end + end + end + end + if io and lfs then + mist.debug.writeData(mist.utils.serialize, {'mistDebugWriteTypes', output}, wt) + else + trigger.action.outText('Error: insufficient libraries to run mist.debug.writeTypes, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua \n writeTypes table written to DCS.log file instead.', 10) + log:warn('mist.debug.writeTypes: $1', output) + end + end + -- write CLSIDs + -- write livery names end --- 3D Vector functions @@ -6313,7 +6573,15 @@ do ['FW-190D9'] = {'FW-190'}, ['Bf-109K-4'] = {'Bf-109'}, } + + local mDefs = { + coa = { + ['red'] = {fillColor = {.8, 0 , 0, .5}, color = {.8, 0 , 0, .5}, lineType = 2}, + ['blue'] = {fillColor = {0, 0 , 0.8, .5}, color = {0, 0 , 0.8, .5}, lineType = 2}, + }, + } + local userDefs = {} local mId = 1337 @@ -6334,18 +6602,49 @@ do local function iterate() mId = mId + 1 - return mId + return mist.utils.deepCopy(mId) end + + function mist.marker.setDefault(vars) + if vars and type(vars) == 'table' then + for l1, l1Data in pairs(vars) do + if type(l1Data) == 'table' then + if not userDefs[l1] then + userDefs[l1] = {} + end + + for l2, l2Data in pairs(l1Data) do + userDefs[l1][l2] = l2Data + end + else + userDefs[l1] = l1Data + end + end + + end + end - function mist.marker.add(pos, text, markFor, id) + function mist.marker.add(vars) log:warn('markerFunc') - log:info('Pos: $1, Text: $2, markFor: $3, id: $4', pos, text, markFor, id) - if not id then + log:info(vars) + local pos = vars.point or vars.points or vars.pos + local text = vars.text + local markFor = vars.markFor + local id = vars.id + local mType = vars.mType + local color = vars.color + local fillColor = vars.fillColor + local lineType = vars.lineType + local readOnly = vars.readOnly + local displayMessage= vars.displayMessage + + + if not id then else end - local markType = 'all' + local markScope = 'all' local markForTable = {} if pos then pos = mist.utils.makeVec3(pos) @@ -6359,15 +6658,15 @@ do if markFor then if type(markFor) == 'number' then -- groupId if mist.DBs.groupsById[markFor] then - markType = 'group' + markScope = 'group' end elseif type(markFor) == 'string' then -- groupName if mist.DBs.groupsByName[markFor] then - markType = 'group' + markScope = 'group' markFor = mist.DBs.groupsByName[markFor].groupId end elseif type(markFor) == 'table' then -- multiple groupName, country, coalition, all - markType = 'table' + markScope = 'table' log:info(markFor) for forIndex, forData in pairs(markFor) do -- need to rethink this part and organization. Gotta be a more logical way to send messages to coa, groups, or all. log:info(forIndex) @@ -6379,12 +6678,12 @@ do listData = string.lower(listData) end if listData == 'all' then - markType = 'all' + markScope = 'all' break elseif (forIndex == 'coa' or forIndex == 'ca') then -- mark for coa or CA. for name, index in pairs (coalition.side) do if listData == string.lower(name) then - markType = 'coalition' + markScope = 'coalition' end end elseif (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then @@ -6436,7 +6735,7 @@ do end end else - markType = 'all' + markScope = 'all' end @@ -6444,14 +6743,14 @@ do - if markType ~= 'table' then + if markScope ~= 'table' then local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markType = markType, markFor = markFor} + local data = {markId = newId, text = text, pos = pos, markScope = markScope, markFor = markFor} -- create marks - if markType == 'coa' then + if markScope == 'coa' then trigger.action.markToCoalition(newId, text, pos, markFor) - elseif markType == 'group' then + elseif markScope == 'group' then trigger.action.markToGroup(newId, text, pos, markFor) else trigger.action.markToAll(iterate(), text, pos) @@ -6752,10 +7051,10 @@ do -- group tasks scope if 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 + for obj_cat_name, obj_cat_data in pairs(cntry_data) do + if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" then -- only these types have points + if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_cat_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 = {} @@ -6792,10 +7091,10 @@ do -- group tasks scope log:error('Group route not defined in mission editor for groupId: $1', gpId) 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 group_num, group_data in pairs(obj_cat_data.group) do + end --if ((type(obj_cat_data) == 'table') and obj_cat_data.group and (type(obj_cat_data.group) == 'table') and (#obj_cat_data.group > 0)) then + end --if obj_cat_name == "helicopter" or obj_cat_name == "ship" or obj_cat_name == "plane" or obj_cat_name == "vehicle" or obj_cat_name == "static" then + end --for obj_cat_name, obj_cat_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 @@ -7106,8 +7405,12 @@ do -- group tasks scope local minR = innerRadius or 0 if maxA and not minA then theta = math.rad(math.random(0, maxA - math.random())) - elseif maxA and minA and minA < maxA then - theta = math.rad(math.random(minA, maxA) - math.random()) + elseif maxA and minA then + if minA < maxA then + theta = math.rad(math.random(minA, maxA) - math.random()) + else + theta = math.rad(math.random(maxA, minA) - math.random()) + end end local rad = math.random() + math.random() if rad > 1 then From 28da804e8013c88828ddd0870ce48acd496917e4 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Mon, 16 Aug 2021 01:41:40 -0600 Subject: [PATCH 10/16] 4_5 RC1 FIXED: typo in mist.dynAdd ADDED: mist.getUnitsByAttribute ADDED: mist.getGroupsByAttribute FIXED: typo is mist.teleportToPoint ADDED: mist.stringCondense ADDED: mist.debug.changeSetting ADDED: mist.marker.add ADDED: mist.marker.getNextId ADDED: mist.marker.remove ADDED: mist.marker.get --- mist.lua | 651 +++++++++++++++++++++++----- mist_4_5_99.lua => mist_4_5_100.lua | 651 +++++++++++++++++++++++----- 2 files changed, 1106 insertions(+), 196 deletions(-) rename mist_4_5_99.lua => mist_4_5_100.lua (92%) diff --git a/mist.lua b/mist.lua index 1a92fb8..088bcdf 100644 --- a/mist.lua +++ b/mist.lua @@ -39,12 +39,14 @@ mist.build = 98 -- forward declaration of log shorthand local log - +local dbLog + local mistSettings = { errorPopup = false, -- errors printed by mist logger will create popup warning you warnPopup = false, infoPopup = false, logLevel = 'warn', + dbLog = 'warn', } do -- the main scope @@ -73,7 +75,7 @@ do -- the main scope mist.nextGroupId = 1 mist.nextUnitId = 1 - local dbLog + local function initDBs() -- mist.DBs scope mist.DBs = {} @@ -1232,6 +1234,7 @@ do -- the main scope end end + --- init function. -- creates logger, adds default event handler @@ -1601,7 +1604,7 @@ do -- the main scope newGroup.country = newCountry -- update and verify any self tasks - if newGroup.route and newGroup.routes.points then + if newGroup.route and newGroup.route.points then for i, pData in pairs(newGroup.route.points) do if pData.task and pData.task.params and pData.task.params.tasks and #pData.task.params.tasks > 0 then for tIndex, tData in pairs(pData.task.params.tasks) do @@ -2622,6 +2625,126 @@ do return units_tbl end +function mist.getUnitsByAttribute(att, rnum, id) + local cEntry = {} + cEntry.typeName = att.type or att.typeName or att.typename + cEntry.country = att.country + cEntry.coalition = att.coalition + cEntry.skill = att.skill + cEntry.categry = att.category + + local num = rnum or 1 + + if cEntry.skill == 'human' then + cEntry.skill = {'Client', 'Player'} + end + + + local checkedVal = {} + local units = {} + for uName, uData in pairs(mist.DBs.unitsByName) do + local matched = 0 + for cName, cVal in pairs(cEntry) do + if type(cVal) == 'table' then + for sName, sVal in pairs(cVal) do + if (uData[cName] and uData[cName] == sVal) or (uData[cName] and uData[cName] == sName) then + matched = matched + 1 + end + end + else + if uData[cName] and uData[cName] == cVal then + matched = matched + 1 + end + end + end + if matched >= num then + if id then + units[uData.unitId] = true + else + + units[uName] = true + end + end + end + + local rtn = {} + for name, _ in pairs(units) do + table.insert(rtn, name) + end + return rtn + +end + +function mist.getGroupsByAttribute(att, rnum, id) + local cEntry = {} + cEntry.typeName = att.type or att.typeName or att.typename + cEntry.country = att.country + cEntry.coalition = att.coalition + cEntry.skill = att.skill + cEntry.categry = att.category + + local num = rnum or 1 + + if cEntry.skill == 'human' then + cEntry.skill = {'Client', 'Player'} + end + local groups = {} + for gName, gData in pairs(mist.DBs.groupsByName) do + local matched = 0 + for cName, cVal in pairs(cEntry) do + if type(cVal) == 'table' then + for sName, sVal in pairs(cVal) do + if cName == 'skill' or cName == 'typeName' then + local lMatch = 0 + for uId, uData in pairs(gData.units) do + if (uData[cName] and uData[cName] == sVal) or (gData[cName] and gData[cName] == sName) then + lMatch = lMatch + 1 + break + end + end + if lMatch > 0 then + matched = matched + 1 + end + end + if (gData[cName] and gData[cName] == sVal) or (gData[cName] and gData[cName] == sName) then + matched = matched + 1 + break + end + end + else + if cName == 'skill' or cName == 'typeName' then + local lMatch = 0 + for uId, uData in pairs(gData.units) do + if (uData[cName] and uData[cName] == sVal) then + lMatch = lMatch + 1 + break + end + end + if lMatch > 0 then + matched = matched + 1 + end + end + if gData[cName] and gData[cName] == cVal then + matched = matched + 1 + end + end + end + if matched >= num then + if id then + groups[gData.groupid] = true + else + groups[gName] = true + end + end + end + local rtn = {} + for name, _ in pairs(groups) do + table.insert(rtn, name) + end + return rtn + +end + function mist.getDeadMapObjsInZones(zone_names) -- zone_names: table of zone names -- returns: table of dead map objects (indexed numerically) @@ -3543,7 +3666,7 @@ do -- group functions scope end function mist.teleportToPoint(vars) -- main teleport function that all of teleport/respawn functions call - --log:info(vars) + --log:warn(vars) local point = vars.point local gpName if vars.gpName then @@ -3607,7 +3730,7 @@ do -- group functions scope local newCoord, origCoord local validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} - if vars.anyTarrain then + if vars.anyTerrain then -- do nothing elseif vars.validTerrain then validTerrain = vars.validTerrain @@ -3638,7 +3761,7 @@ do -- group functions scope ---- old for i = 1, 100 do newCoord = mist.getRandPointInCircle(point, radius, innerRadius) - if mist.isTerrainValid(newCoord, validTerrain) then + if vars.anyTerrain or mist.isTerrainValid(newCoord, validTerrain) then origCoord = mist.utils.deepCopy(newCoord) diff = {x = (newCoord.x - newGroupData.units[1].x), y = (newCoord.y - newGroupData.units[1].y)} valid = true @@ -3724,19 +3847,21 @@ do -- group functions scope tempRoute = mist.getGroupRoute(gpName, true) elseif vars.route then -- log:warn('routeExist') - tempRoute = mist.utils.deepCopy(route) + tempRoute = mist.utils.deepCopy(vars.route) end -- log:warn(tempRoute) - if tempRoute and (vars.offsetRoute or vars.offsetWP1 or vars.initTasks) then - for i = 1, #tempRoute do - -- log:warn(i) - if (vars.offsetRoute) or (i == 1 and vars.offsetWP1) or (i == 1 and vars.initTasks) then - -- log:warn('update offset') - tempRoute[i].x = tempRoute[i].x + diff.x - tempRoute[i].y = tempRoute[i].y + diff.y - elseif vars.initTasks and i > 1 then - --log:warn('deleteWP') - tempRoute[i] = nil + if tempRoute then + if (vars.offsetRoute or vars.offsetWP1 or vars.initTasks) then + for i = 1, #tempRoute do + -- log:warn(i) + if (vars.offsetRoute) or (i == 1 and vars.offsetWP1) or (i == 1 and vars.initTasks) then + -- log:warn('update offset') + tempRoute[i].x = tempRoute[i].x + diff.x + tempRoute[i].y = tempRoute[i].y + diff.y + elseif vars.initTasks and i > 1 then + --log:warn('deleteWP') + tempRoute[i] = nil + end end end newGroupData.route = tempRoute @@ -4064,14 +4189,20 @@ do -- group functions scope end return choices[rtnVal] end + + function mist.stringCondense(s) + local exclude = {'%-', '%(', '%)', '%_', '%[', '%]', '%.', '%#', '% ', '%{', '%}', '%$', '%%', '%?', '%+', '%^'} + for i , str in pairs(exclude) do + s = string.gsub(s, str, '') + end + return s + end function mist.stringMatch(s1, s2, bool) - local exclude = {'%-', '%(', '%)', '%_', '%[', '%]', '%.', '%#', '% ', '%{', '%}', '%$', '%%', '%?', '%+', '%^'} + if type(s1) == 'string' and type(s2) == 'string' then - for i , str in pairs(exclude) do - s1 = string.gsub(s1, str, '') - s2 = string.gsub(s2, str, '') - end + s1 = mist.stringCondense(s1) + s2 = mist.stringCondense(s2) if not bool then s1 = string.lower(s1) s2 = string.lower(s2) @@ -4893,6 +5024,25 @@ end do -- mist.debug scope mist.debug = {} + function mist.debug.changeSetting(s) + if type(s) == 'table' then + for sName, sVal in pairs(s) do + env.info(sName) + env.info(sVal) + if type(sVal) == 'string' or type(sVal) == 'number' then + if sName == 'log' then + mistSettings[sName] = sVal + log:setLevel(sVal) + elseif sName == 'dbLog' then + mistSettings[sName] = sVal + dblog:setLevel(sVal) + end + else + mistSettings[sName] = sVal + end + end + end + end --- Dumps the global table _G. -- This dumps the global table _G to a file in -- the DCS\Logs directory. @@ -6543,6 +6693,7 @@ do -- mist.demos scope end end + do --[[ stuff for marker panels marker.add() add marker. Point of these functions is to simplify process and to store all mark panels added. @@ -6562,10 +6713,20 @@ do If mark added to a group before a client joins slot is synced. Mark made for cliet A in Slot A. Client A leaves, Client B joins in slot A. What do they see? + May need to automate process... + + + Could release this. But things I might need to add/change before doing so. + - removing marks and re-adding in same sequence doesn't appear to work. May need to schedule adding mark if updating an entry. + - I really dont like the old message style code for which groups get the message. Perhaps change to unitsTable and create function for getting humanUnitsTable. + = Event Handler, and check it, for marks added via script or user to deconflict Ids. + - Full validation of passed values for a specific shape type. ]] - --[[ + + local usedMarks = {} + local typeBase = { ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, ['MiG-21Bis'] = {'Mig-21'}, @@ -6576,35 +6737,157 @@ do local mDefs = { coa = { - ['red'] = {fillColor = {.8, 0 , 0, .5}, color = {.8, 0 , 0, .5}, lineType = 2}, - ['blue'] = {fillColor = {0, 0 , 0.8, .5}, color = {0, 0 , 0.8, .5}, lineType = 2}, + ['red'] = {fillColor = {.8, 0 , 0, .5}, color = {.8, 0 , 0, .5}, lineType = 2, fontSize = 16}, + ['blue'] = {fillColor = {0, 0 , 0.8, .5}, color = {0, 0 , 0.8, .5}, lineType = 2, fontSize = 16}, + ['all'] = {fillColor = {.1, .1 , .1, .5}, color = {.9, .9 , .9, .5}, lineType = 2, fontSize = 16}, + ['neutral'] = {fillColor = {.1, .1 , .1, .5}, color = {.2, .2 , .2, .5}, lineType = 2, fontSize = 16}, }, } + + local userDefs = {['red'] = {},['blue'] = {},['all'] = {},['neutral'] = {}} - local userDefs = {} - - local mId = 1337 - + local mId = 1000 + + local tNames = {'line', 'circle','rect', 'arrow', 'text', 'quad', 'freeform'} + local tLines = {[0] = 'no line', [1] = 'solid', [2] = 'dashed',[3] = 'dotted', [4] = 'dot dash' ,[5] = 'long dash', [6] = 'two dash'} + local coas = {[-1] = 'all', [0] = 'neutral', [1] = 'red', [2] = 'blue'} + + local altNames = {['poly'] = 7, ['lines'] = 1, ['polygon'] = 7 } + + local function draw(s) + --log:warn(s) + if type(s) == 'table' then + local mType = s.markType + if mType == 'panel' then + if markScope == 'coa' then + trigger.action.markToCoalition(s.markId, s.text, s.pos, s.markFor, s.readOnly) + elseif markScope == 'group' then + trigger.action.markToGroup(s.markId, s.text, s.pos, s.markFor, s.readOnly) + else + trigger.action.markToAll(s.markId, s.text, s.pos, s.readOnly) + end + elseif mType == 'line' then + trigger.action.lineToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.color, s.fillColor, s.lineType, s.readOnly, s.message) + elseif mType == 'circle' then + trigger.action.circleToAll(s.coa, s.markId, s.pos[1], s.radius, s.color, s.fillColor, s.lineType, s.readOnly, s.message) + elseif mType == 'rect' then + trigger.action.rectToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.color, s.fillColor, s.lineType, s.readOnly, s.message) + elseif mType == 'arrow' then + trigger.action.arrowToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.color, s.fillColor, s.lineType, s.readOnly, s.message) + elseif mType == 'text' then + trigger.action.textToAll(s.coa, s.markId, s.pos[1], s.color, s.fillColor, fontSize, s.readOnly, s.text) + elseif mType == 'quad' then + trigger.action.quadToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.pos[3], s.pos[4], s.color, s.fillColor, s.lineType, s.readOnly, s.message) + end + if s.name and not usedMarks[s.name] then + usedMarks[s.name] = s.markId + end + elseif type(s) == 'string' then + --log:warn(s) + mist.utils.dostring(s) + end + end + mist.marker = {} mist.marker.list = {} local function markSpamFilter(recList, spamBlockOn) for id, name in pairs(recList) do if name == spamBlockOn then - log:info('already on recList') + --log:info('already on recList') return recList end end - log:info('add to recList') + --log:info('add to recList') table.insert(recList, spamBlockOn) return recList end local function iterate() - mId = mId + 1 - return mist.utils.deepCopy(mId) + while mId < 10000000 do + if usedMarks[mId] then + mId = mId + 1 + else + return mist.utils.deepCopy(mId) + end + end + return mist.utils.deepCopy(mId) end + local function validateColor(val) + if type(val) == 'table' then + for i = 1, #val do + if type(val[i]) == 'number' and val[i] > 1 then + val[i] = val[i]/255 -- convert RGB values from 0-255 to 0-1 equivilent. + end + end + end + return val + end + + local function checkDefs(vName, coa) + --log:warn('CheckDefs: $1 $2', vName, coa) + local coaName + if type(coa) == 'number' then + if coas[coa] then + coaName = coas[coa] + end + elseif type(coa) == 'string' then + coaName = coa + end + + -- log:warn(coaName) + if userDefs[coaName] and userDefs[coaName][vName] then + return userDefs[coaName][vName] + elseif mDefs.coa[coaName] and mDefs.coa[coaName][vName] then + return mDefs.coa[coaName][vName] + end + + end + + function mist.marker.getNextId() + return iterate() + end + + local handle = {} + function handle:onEvent(e) + if world.event.S_EVENT_MARK_ADDED == e.id and e.idx then + usedMarks[e.idx] = e.idx + if not mist.marker.list[e.idx] then + --log:info('create maker DB: $1', e.idx) + mist.marker.list[e.idx] = {time = e.time, pos = e.pos, groupId = e.groupId, mType = 'panel', text = e.text, markId = e.idx, coalition = e.coalition} + if e.unit then + mist.marker.list[e.idx].unit = e.initiaor:getName() + end + --log:info(mist.marker.list[e.idx]) + end + + elseif world.event.S_EVENT_MARK_CHANGE == e.id and e.idx then + if mist.marker.list[e.idx] then + mist.marker.list[e.idx].text = e.text + end + elseif world.event.S_EVENT_MARK_REMOVE == e.id and e.idx then + if mist.marker.list[e.idx] then + mist.marker.list[e.idx] = nil + end + end + + end + + local function removeMark(id) + --log:info("Removing Mark: $1", id) + if type(id) == 'table' then + for ind, val in pairs(id) do + trigger.action.removeMark(val) + mist.marker.list[val] = nil + end + else + trigger.action.removeMark(id) + mist.marker.list[id] = nil + end + end + + world.addEventHandler(handle) function mist.marker.setDefault(vars) if vars and type(vars) == 'table' then for l1, l1Data in pairs(vars) do @@ -6625,37 +6908,116 @@ do end function mist.marker.add(vars) - log:warn('markerFunc') - log:info(vars) + --log:warn('markerFunc') + --log:warn(vars) local pos = vars.point or vars.points or vars.pos - local text = vars.text - local markFor = vars.markFor - local id = vars.id - local mType = vars.mType + local text = vars.text or '' + local markFor = vars.markFor + local markForCoa = vars.markForCoa -- optional, can be used if you just want to mark to a specific coa/all + local id = vars.id or vars.markId or vars.markid + local mType = vars.mType or 0 local color = vars.color local fillColor = vars.fillColor - local lineType = vars.lineType - local readOnly = vars.readOnly - local displayMessage= vars.displayMessage + local lineType = vars.lineType or 2 + local readOnly = vars.readOnly or true + local message = vars.message + local fontSize = vars.fontSize + local name = vars.name + local radius = vars.radius or 500 + + local coa = -1 + local usedId = 0 - if not id then - - else + if id then + if type(id) ~= 'number' then + name = id + usedId = iterate() + end + --log:info('checkIfIdExist: $1', id) + --[[ + Maybe it should treat id or name as the same thing/single value. + + If passed number it will use that as the first Id used and will delete/update any marks associated with that same value. + + + ]] + + local lId = id or name + if mist.marker.list[id] then ---------- NEED A BETTER WAY TO ASSOCIATE THE ID VALUE. CUrrnetly deleting from table and checking if that deleted entry exists which it wont. + --log:warn('active mark to be removed: $1', id) + name = mist.marker.list[id].name or id + removeMark(id) + elseif usedMarks[id] then + --log:info('exists in usedMarks: $1', id) + removeMark(usedMarks[id]) + elseif name and usedMarks[name] then + --log:info('exists in usedMarks: $1', name) + removeMark(usedMarks[name]) + end + usedId = iterate() + usedMarks[id] = usedId -- redefine the value used end + if name then + if usedId == 0 then + usedId = iterate() + end + usedMarks[name] = usedId + end + + + if mType then + if type(mType) == 'string' then + for i = 1, #tNames do + --log:warn(tNames[i]) + if mist.stringMatch(mType, tNames[i]) then + mType = i + break + end + end + elseif type(mType) == 'number' and mType > #tNames then + mType = 0 + end + end + --log:warn(mType) local markScope = 'all' local markForTable = {} - if pos then - pos = mist.utils.makeVec3(pos) + + if pos then + if pos[1] then + for i = 1, #pos do + pos[i] = mist.utils.makeVec3(pos[i]) + end + + else + pos[1] = mist.utils.makeVec3(pos) + end + end if text and type(text) ~= string then text = tostring(text) - else - text = '' end - - if markFor then + + if markForCoa then + if type(markForCoa) == 'string' then + if tonumber(markForCoa) then + coa = coas[tonumber(markForCoa)] + markScope = 'coa' + else + for ind, cName in pairs(coas) do + if mist.stringMatch(cName, markForCoa) then + coa = ind + markScope = 'coa' + break + end + end + end + end + + + + elseif markFor then if type(markFor) == 'number' then -- groupId if mist.DBs.groupsById[markFor] then markScope = 'group' @@ -6667,12 +7029,10 @@ do end elseif type(markFor) == 'table' then -- multiple groupName, country, coalition, all markScope = 'table' - log:info(markFor) + --log:warn(markFor) for forIndex, forData in pairs(markFor) do -- need to rethink this part and organization. Gotta be a more logical way to send messages to coa, groups, or all. - log:info(forIndex) - log:info(forData) for list, listData in pairs(forData) do - log:info(listData) + --log:warn(listData) forIndex = string.lower(forIndex) if type(listData) == 'string' then listData = string.lower(listData) @@ -6681,18 +7041,29 @@ do markScope = 'all' break elseif (forIndex == 'coa' or forIndex == 'ca') then -- mark for coa or CA. - for name, index in pairs (coalition.side) do + local matches = 0 + for name, index in pairs (coalition.side) do if listData == string.lower(name) then - markScope = 'coalition' + markScope = 'coa' + markFor = index + coa = index + matches = matches + 1 end end - elseif (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then - markForTable = markSpamFilter(markForTable, clientData.groupId) + if matches > 1 then + markScope = 'all' + end + elseif forIndex == 'countries' then + for clienId, clientData in pairs(mist.DBs.humansById) do + if (string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then + markForTable = markSpamFilter(markForTable, clientData.groupId) + end + end elseif forIndex == 'unittypes' then -- mark to group -- iterate play units for clientId, clientData in pairs(mist.DBs.humansById) do for typeId, typeData in pairs(listData) do - log:info(typeData) + --log:warn(typeData) local found = false if list == 'all' or clientData.coalition and type(clientData.coalition) == 'string' and mist.stringMatch(clientData.coalition, list) then if mist.matchString(typeData, clientData.type) then @@ -6738,58 +7109,141 @@ do markScope = 'all' end + if mType == 0 then + local data = {markId = usedId, text = text, pos = pos[1], markScope = markScope, markFor = markFor, markType = 'panel', name = name, time = timer.getTime()} + if markScope ~= 'table' then + -- create marks + + mist.marker.list[usedId] = data-- add to the DB + + else + if #markForTable > 0 then + --log:info('iterate') + local list = {} + if id and not name then + name = id + end + for i = 1, #markForTable do + local newId = iterate() + local data = {markId = newId, text = text, pos = pos[i], markFor = markForTable[i], markType = 'panel', name = name, readOnly = readOnly, time = timer.getTime()} + mist.marker.list[newId] = data + table.insert(list, data) - + draw(data) + + end + return list + end + end - - - if markScope ~= 'table' then - local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markScope = markScope, markFor = markFor} + draw(data) + + return data + elseif mType > 0 then + local newId = iterate() + local fCal = {} + fCal[#fCal+1] = mType + fCal[#fCal+1] = coa + fCal[#fCal+1] = usedId + for i = 1, #pos do + fCal[#fCal+1] = pos[i] + end + + if radius and mType == 2 then + fCal[#fCal+1] = radius + end + + if not color then + color = checkDefs('color', coa) + else + color = validateColor(color) + end + fCal[#fCal+1] = color + + + if not fillColor then + fillColor = checkDefs('fillColor', coa) + else + fillColor = validateColor(fillColor) + end + fCal[#fCal+1] = fillColor + + if mType == 5 then -- text to all + if not fontSize then + fontSize = checkDefs('fondSize', coa) or 16 + end + fCal[#fCal+1] = fontSize + else + if not lineType then + lineType = checkDefs('lineType', coa) or 2 + end + end + fCal[#fCal+1] = lineType + if not readOnly then + readOnly = true + end + fCal[#fCal+1] = readOnly + fCal[#fCal+1] = message + + local data = {coa = coa, markId = usedId, pos = pos, markFor = markFor, color = color, readOnly = readOnly, message = message, fillColor = fillColor, lineType = lineType, markType = tNames[mType], name = name, radius = radius, text = text, fontSize = fontSize, time = timer.getTime()} + mist.marker.list[usedId] = data + + if mType == 7 or mType == 1 then + local s = "trigger.action.markupToAll(" + + for i = 1, #fCal do + --log:warn(fCal[i]) + if type(fCal[i]) == 'table' or type(fCal[i]) == 'boolean' then + s = s .. mist.utils.oneLineSerialize(fCal[i]) + else + s = s .. fCal[i] + end + if i < #fCal then + s = s .. ',' + end + end + + s = s .. ')' + if name then + usedMarks[name] = usedId + end + draw(s) + + else - -- create marks - if markScope == 'coa' then - trigger.action.markToCoalition(newId, text, pos, markFor) - elseif markScope == 'group' then - trigger.action.markToGroup(newId, text, pos, markFor) - else - trigger.action.markToAll(iterate(), text, pos) - end - table.insert(mist.marker.list, data) -- add to the DB - else - if #markForTable > 0 then - log:info('iterate') - for i = 1, #markForTable do - local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markFor = markFor} - log:info(data) - table.insert(mist.marker.list, data) - trigger.action.markToGroup(newId, text, pos, markForTable[i]) - end - end - end - + draw(data) + + end + return data + end end function mist.marker.remove(id) - for i, data in pairs(mist.marker.list) do - if id == data.markId then - trigger.action.removeMark(id) - end - end + removeMark(id) end function mist.marker.get(id) - + if mist.marker.lis[id] then + return mist.marker.lis[id] + end + local names = {} + for markId, data in pairs(mist.marker.list) do + if data.name and data.name == id then + table.insert(names, data) + end + end + if #names > 0 then + return names + end end - function mist.marker.coords(pos, cType, markFor, id) -- wrapper function to just display coordinates of a specific format at location + --function mist.marker.coords(pos, cType, markFor, id) -- wrapper function to just display coordinates of a specific format at location - end - ]] + --end + end --- Time conversion functions. -- @section mist.time @@ -7790,7 +8244,8 @@ do -- mist.Logger scope -- @usage -- log everything --myLogger:setLevel(3) function mist.Logger:setLevel(level) - if not level then + env.info('set Level ' .. level) + if not level then self.level = 2 else if type(level) == 'string' then diff --git a/mist_4_5_99.lua b/mist_4_5_100.lua similarity index 92% rename from mist_4_5_99.lua rename to mist_4_5_100.lua index 1a92fb8..088bcdf 100644 --- a/mist_4_5_99.lua +++ b/mist_4_5_100.lua @@ -39,12 +39,14 @@ mist.build = 98 -- forward declaration of log shorthand local log - +local dbLog + local mistSettings = { errorPopup = false, -- errors printed by mist logger will create popup warning you warnPopup = false, infoPopup = false, logLevel = 'warn', + dbLog = 'warn', } do -- the main scope @@ -73,7 +75,7 @@ do -- the main scope mist.nextGroupId = 1 mist.nextUnitId = 1 - local dbLog + local function initDBs() -- mist.DBs scope mist.DBs = {} @@ -1232,6 +1234,7 @@ do -- the main scope end end + --- init function. -- creates logger, adds default event handler @@ -1601,7 +1604,7 @@ do -- the main scope newGroup.country = newCountry -- update and verify any self tasks - if newGroup.route and newGroup.routes.points then + if newGroup.route and newGroup.route.points then for i, pData in pairs(newGroup.route.points) do if pData.task and pData.task.params and pData.task.params.tasks and #pData.task.params.tasks > 0 then for tIndex, tData in pairs(pData.task.params.tasks) do @@ -2622,6 +2625,126 @@ do return units_tbl end +function mist.getUnitsByAttribute(att, rnum, id) + local cEntry = {} + cEntry.typeName = att.type or att.typeName or att.typename + cEntry.country = att.country + cEntry.coalition = att.coalition + cEntry.skill = att.skill + cEntry.categry = att.category + + local num = rnum or 1 + + if cEntry.skill == 'human' then + cEntry.skill = {'Client', 'Player'} + end + + + local checkedVal = {} + local units = {} + for uName, uData in pairs(mist.DBs.unitsByName) do + local matched = 0 + for cName, cVal in pairs(cEntry) do + if type(cVal) == 'table' then + for sName, sVal in pairs(cVal) do + if (uData[cName] and uData[cName] == sVal) or (uData[cName] and uData[cName] == sName) then + matched = matched + 1 + end + end + else + if uData[cName] and uData[cName] == cVal then + matched = matched + 1 + end + end + end + if matched >= num then + if id then + units[uData.unitId] = true + else + + units[uName] = true + end + end + end + + local rtn = {} + for name, _ in pairs(units) do + table.insert(rtn, name) + end + return rtn + +end + +function mist.getGroupsByAttribute(att, rnum, id) + local cEntry = {} + cEntry.typeName = att.type or att.typeName or att.typename + cEntry.country = att.country + cEntry.coalition = att.coalition + cEntry.skill = att.skill + cEntry.categry = att.category + + local num = rnum or 1 + + if cEntry.skill == 'human' then + cEntry.skill = {'Client', 'Player'} + end + local groups = {} + for gName, gData in pairs(mist.DBs.groupsByName) do + local matched = 0 + for cName, cVal in pairs(cEntry) do + if type(cVal) == 'table' then + for sName, sVal in pairs(cVal) do + if cName == 'skill' or cName == 'typeName' then + local lMatch = 0 + for uId, uData in pairs(gData.units) do + if (uData[cName] and uData[cName] == sVal) or (gData[cName] and gData[cName] == sName) then + lMatch = lMatch + 1 + break + end + end + if lMatch > 0 then + matched = matched + 1 + end + end + if (gData[cName] and gData[cName] == sVal) or (gData[cName] and gData[cName] == sName) then + matched = matched + 1 + break + end + end + else + if cName == 'skill' or cName == 'typeName' then + local lMatch = 0 + for uId, uData in pairs(gData.units) do + if (uData[cName] and uData[cName] == sVal) then + lMatch = lMatch + 1 + break + end + end + if lMatch > 0 then + matched = matched + 1 + end + end + if gData[cName] and gData[cName] == cVal then + matched = matched + 1 + end + end + end + if matched >= num then + if id then + groups[gData.groupid] = true + else + groups[gName] = true + end + end + end + local rtn = {} + for name, _ in pairs(groups) do + table.insert(rtn, name) + end + return rtn + +end + function mist.getDeadMapObjsInZones(zone_names) -- zone_names: table of zone names -- returns: table of dead map objects (indexed numerically) @@ -3543,7 +3666,7 @@ do -- group functions scope end function mist.teleportToPoint(vars) -- main teleport function that all of teleport/respawn functions call - --log:info(vars) + --log:warn(vars) local point = vars.point local gpName if vars.gpName then @@ -3607,7 +3730,7 @@ do -- group functions scope local newCoord, origCoord local validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} - if vars.anyTarrain then + if vars.anyTerrain then -- do nothing elseif vars.validTerrain then validTerrain = vars.validTerrain @@ -3638,7 +3761,7 @@ do -- group functions scope ---- old for i = 1, 100 do newCoord = mist.getRandPointInCircle(point, radius, innerRadius) - if mist.isTerrainValid(newCoord, validTerrain) then + if vars.anyTerrain or mist.isTerrainValid(newCoord, validTerrain) then origCoord = mist.utils.deepCopy(newCoord) diff = {x = (newCoord.x - newGroupData.units[1].x), y = (newCoord.y - newGroupData.units[1].y)} valid = true @@ -3724,19 +3847,21 @@ do -- group functions scope tempRoute = mist.getGroupRoute(gpName, true) elseif vars.route then -- log:warn('routeExist') - tempRoute = mist.utils.deepCopy(route) + tempRoute = mist.utils.deepCopy(vars.route) end -- log:warn(tempRoute) - if tempRoute and (vars.offsetRoute or vars.offsetWP1 or vars.initTasks) then - for i = 1, #tempRoute do - -- log:warn(i) - if (vars.offsetRoute) or (i == 1 and vars.offsetWP1) or (i == 1 and vars.initTasks) then - -- log:warn('update offset') - tempRoute[i].x = tempRoute[i].x + diff.x - tempRoute[i].y = tempRoute[i].y + diff.y - elseif vars.initTasks and i > 1 then - --log:warn('deleteWP') - tempRoute[i] = nil + if tempRoute then + if (vars.offsetRoute or vars.offsetWP1 or vars.initTasks) then + for i = 1, #tempRoute do + -- log:warn(i) + if (vars.offsetRoute) or (i == 1 and vars.offsetWP1) or (i == 1 and vars.initTasks) then + -- log:warn('update offset') + tempRoute[i].x = tempRoute[i].x + diff.x + tempRoute[i].y = tempRoute[i].y + diff.y + elseif vars.initTasks and i > 1 then + --log:warn('deleteWP') + tempRoute[i] = nil + end end end newGroupData.route = tempRoute @@ -4064,14 +4189,20 @@ do -- group functions scope end return choices[rtnVal] end + + function mist.stringCondense(s) + local exclude = {'%-', '%(', '%)', '%_', '%[', '%]', '%.', '%#', '% ', '%{', '%}', '%$', '%%', '%?', '%+', '%^'} + for i , str in pairs(exclude) do + s = string.gsub(s, str, '') + end + return s + end function mist.stringMatch(s1, s2, bool) - local exclude = {'%-', '%(', '%)', '%_', '%[', '%]', '%.', '%#', '% ', '%{', '%}', '%$', '%%', '%?', '%+', '%^'} + if type(s1) == 'string' and type(s2) == 'string' then - for i , str in pairs(exclude) do - s1 = string.gsub(s1, str, '') - s2 = string.gsub(s2, str, '') - end + s1 = mist.stringCondense(s1) + s2 = mist.stringCondense(s2) if not bool then s1 = string.lower(s1) s2 = string.lower(s2) @@ -4893,6 +5024,25 @@ end do -- mist.debug scope mist.debug = {} + function mist.debug.changeSetting(s) + if type(s) == 'table' then + for sName, sVal in pairs(s) do + env.info(sName) + env.info(sVal) + if type(sVal) == 'string' or type(sVal) == 'number' then + if sName == 'log' then + mistSettings[sName] = sVal + log:setLevel(sVal) + elseif sName == 'dbLog' then + mistSettings[sName] = sVal + dblog:setLevel(sVal) + end + else + mistSettings[sName] = sVal + end + end + end + end --- Dumps the global table _G. -- This dumps the global table _G to a file in -- the DCS\Logs directory. @@ -6543,6 +6693,7 @@ do -- mist.demos scope end end + do --[[ stuff for marker panels marker.add() add marker. Point of these functions is to simplify process and to store all mark panels added. @@ -6562,10 +6713,20 @@ do If mark added to a group before a client joins slot is synced. Mark made for cliet A in Slot A. Client A leaves, Client B joins in slot A. What do they see? + May need to automate process... + + + Could release this. But things I might need to add/change before doing so. + - removing marks and re-adding in same sequence doesn't appear to work. May need to schedule adding mark if updating an entry. + - I really dont like the old message style code for which groups get the message. Perhaps change to unitsTable and create function for getting humanUnitsTable. + = Event Handler, and check it, for marks added via script or user to deconflict Ids. + - Full validation of passed values for a specific shape type. ]] - --[[ + + local usedMarks = {} + local typeBase = { ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, ['MiG-21Bis'] = {'Mig-21'}, @@ -6576,35 +6737,157 @@ do local mDefs = { coa = { - ['red'] = {fillColor = {.8, 0 , 0, .5}, color = {.8, 0 , 0, .5}, lineType = 2}, - ['blue'] = {fillColor = {0, 0 , 0.8, .5}, color = {0, 0 , 0.8, .5}, lineType = 2}, + ['red'] = {fillColor = {.8, 0 , 0, .5}, color = {.8, 0 , 0, .5}, lineType = 2, fontSize = 16}, + ['blue'] = {fillColor = {0, 0 , 0.8, .5}, color = {0, 0 , 0.8, .5}, lineType = 2, fontSize = 16}, + ['all'] = {fillColor = {.1, .1 , .1, .5}, color = {.9, .9 , .9, .5}, lineType = 2, fontSize = 16}, + ['neutral'] = {fillColor = {.1, .1 , .1, .5}, color = {.2, .2 , .2, .5}, lineType = 2, fontSize = 16}, }, } + + local userDefs = {['red'] = {},['blue'] = {},['all'] = {},['neutral'] = {}} - local userDefs = {} - - local mId = 1337 - + local mId = 1000 + + local tNames = {'line', 'circle','rect', 'arrow', 'text', 'quad', 'freeform'} + local tLines = {[0] = 'no line', [1] = 'solid', [2] = 'dashed',[3] = 'dotted', [4] = 'dot dash' ,[5] = 'long dash', [6] = 'two dash'} + local coas = {[-1] = 'all', [0] = 'neutral', [1] = 'red', [2] = 'blue'} + + local altNames = {['poly'] = 7, ['lines'] = 1, ['polygon'] = 7 } + + local function draw(s) + --log:warn(s) + if type(s) == 'table' then + local mType = s.markType + if mType == 'panel' then + if markScope == 'coa' then + trigger.action.markToCoalition(s.markId, s.text, s.pos, s.markFor, s.readOnly) + elseif markScope == 'group' then + trigger.action.markToGroup(s.markId, s.text, s.pos, s.markFor, s.readOnly) + else + trigger.action.markToAll(s.markId, s.text, s.pos, s.readOnly) + end + elseif mType == 'line' then + trigger.action.lineToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.color, s.fillColor, s.lineType, s.readOnly, s.message) + elseif mType == 'circle' then + trigger.action.circleToAll(s.coa, s.markId, s.pos[1], s.radius, s.color, s.fillColor, s.lineType, s.readOnly, s.message) + elseif mType == 'rect' then + trigger.action.rectToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.color, s.fillColor, s.lineType, s.readOnly, s.message) + elseif mType == 'arrow' then + trigger.action.arrowToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.color, s.fillColor, s.lineType, s.readOnly, s.message) + elseif mType == 'text' then + trigger.action.textToAll(s.coa, s.markId, s.pos[1], s.color, s.fillColor, fontSize, s.readOnly, s.text) + elseif mType == 'quad' then + trigger.action.quadToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.pos[3], s.pos[4], s.color, s.fillColor, s.lineType, s.readOnly, s.message) + end + if s.name and not usedMarks[s.name] then + usedMarks[s.name] = s.markId + end + elseif type(s) == 'string' then + --log:warn(s) + mist.utils.dostring(s) + end + end + mist.marker = {} mist.marker.list = {} local function markSpamFilter(recList, spamBlockOn) for id, name in pairs(recList) do if name == spamBlockOn then - log:info('already on recList') + --log:info('already on recList') return recList end end - log:info('add to recList') + --log:info('add to recList') table.insert(recList, spamBlockOn) return recList end local function iterate() - mId = mId + 1 - return mist.utils.deepCopy(mId) + while mId < 10000000 do + if usedMarks[mId] then + mId = mId + 1 + else + return mist.utils.deepCopy(mId) + end + end + return mist.utils.deepCopy(mId) end + local function validateColor(val) + if type(val) == 'table' then + for i = 1, #val do + if type(val[i]) == 'number' and val[i] > 1 then + val[i] = val[i]/255 -- convert RGB values from 0-255 to 0-1 equivilent. + end + end + end + return val + end + + local function checkDefs(vName, coa) + --log:warn('CheckDefs: $1 $2', vName, coa) + local coaName + if type(coa) == 'number' then + if coas[coa] then + coaName = coas[coa] + end + elseif type(coa) == 'string' then + coaName = coa + end + + -- log:warn(coaName) + if userDefs[coaName] and userDefs[coaName][vName] then + return userDefs[coaName][vName] + elseif mDefs.coa[coaName] and mDefs.coa[coaName][vName] then + return mDefs.coa[coaName][vName] + end + + end + + function mist.marker.getNextId() + return iterate() + end + + local handle = {} + function handle:onEvent(e) + if world.event.S_EVENT_MARK_ADDED == e.id and e.idx then + usedMarks[e.idx] = e.idx + if not mist.marker.list[e.idx] then + --log:info('create maker DB: $1', e.idx) + mist.marker.list[e.idx] = {time = e.time, pos = e.pos, groupId = e.groupId, mType = 'panel', text = e.text, markId = e.idx, coalition = e.coalition} + if e.unit then + mist.marker.list[e.idx].unit = e.initiaor:getName() + end + --log:info(mist.marker.list[e.idx]) + end + + elseif world.event.S_EVENT_MARK_CHANGE == e.id and e.idx then + if mist.marker.list[e.idx] then + mist.marker.list[e.idx].text = e.text + end + elseif world.event.S_EVENT_MARK_REMOVE == e.id and e.idx then + if mist.marker.list[e.idx] then + mist.marker.list[e.idx] = nil + end + end + + end + + local function removeMark(id) + --log:info("Removing Mark: $1", id) + if type(id) == 'table' then + for ind, val in pairs(id) do + trigger.action.removeMark(val) + mist.marker.list[val] = nil + end + else + trigger.action.removeMark(id) + mist.marker.list[id] = nil + end + end + + world.addEventHandler(handle) function mist.marker.setDefault(vars) if vars and type(vars) == 'table' then for l1, l1Data in pairs(vars) do @@ -6625,37 +6908,116 @@ do end function mist.marker.add(vars) - log:warn('markerFunc') - log:info(vars) + --log:warn('markerFunc') + --log:warn(vars) local pos = vars.point or vars.points or vars.pos - local text = vars.text - local markFor = vars.markFor - local id = vars.id - local mType = vars.mType + local text = vars.text or '' + local markFor = vars.markFor + local markForCoa = vars.markForCoa -- optional, can be used if you just want to mark to a specific coa/all + local id = vars.id or vars.markId or vars.markid + local mType = vars.mType or 0 local color = vars.color local fillColor = vars.fillColor - local lineType = vars.lineType - local readOnly = vars.readOnly - local displayMessage= vars.displayMessage + local lineType = vars.lineType or 2 + local readOnly = vars.readOnly or true + local message = vars.message + local fontSize = vars.fontSize + local name = vars.name + local radius = vars.radius or 500 + + local coa = -1 + local usedId = 0 - if not id then - - else + if id then + if type(id) ~= 'number' then + name = id + usedId = iterate() + end + --log:info('checkIfIdExist: $1', id) + --[[ + Maybe it should treat id or name as the same thing/single value. + + If passed number it will use that as the first Id used and will delete/update any marks associated with that same value. + + + ]] + + local lId = id or name + if mist.marker.list[id] then ---------- NEED A BETTER WAY TO ASSOCIATE THE ID VALUE. CUrrnetly deleting from table and checking if that deleted entry exists which it wont. + --log:warn('active mark to be removed: $1', id) + name = mist.marker.list[id].name or id + removeMark(id) + elseif usedMarks[id] then + --log:info('exists in usedMarks: $1', id) + removeMark(usedMarks[id]) + elseif name and usedMarks[name] then + --log:info('exists in usedMarks: $1', name) + removeMark(usedMarks[name]) + end + usedId = iterate() + usedMarks[id] = usedId -- redefine the value used end + if name then + if usedId == 0 then + usedId = iterate() + end + usedMarks[name] = usedId + end + + + if mType then + if type(mType) == 'string' then + for i = 1, #tNames do + --log:warn(tNames[i]) + if mist.stringMatch(mType, tNames[i]) then + mType = i + break + end + end + elseif type(mType) == 'number' and mType > #tNames then + mType = 0 + end + end + --log:warn(mType) local markScope = 'all' local markForTable = {} - if pos then - pos = mist.utils.makeVec3(pos) + + if pos then + if pos[1] then + for i = 1, #pos do + pos[i] = mist.utils.makeVec3(pos[i]) + end + + else + pos[1] = mist.utils.makeVec3(pos) + end + end if text and type(text) ~= string then text = tostring(text) - else - text = '' end - - if markFor then + + if markForCoa then + if type(markForCoa) == 'string' then + if tonumber(markForCoa) then + coa = coas[tonumber(markForCoa)] + markScope = 'coa' + else + for ind, cName in pairs(coas) do + if mist.stringMatch(cName, markForCoa) then + coa = ind + markScope = 'coa' + break + end + end + end + end + + + + elseif markFor then if type(markFor) == 'number' then -- groupId if mist.DBs.groupsById[markFor] then markScope = 'group' @@ -6667,12 +7029,10 @@ do end elseif type(markFor) == 'table' then -- multiple groupName, country, coalition, all markScope = 'table' - log:info(markFor) + --log:warn(markFor) for forIndex, forData in pairs(markFor) do -- need to rethink this part and organization. Gotta be a more logical way to send messages to coa, groups, or all. - log:info(forIndex) - log:info(forData) for list, listData in pairs(forData) do - log:info(listData) + --log:warn(listData) forIndex = string.lower(forIndex) if type(listData) == 'string' then listData = string.lower(listData) @@ -6681,18 +7041,29 @@ do markScope = 'all' break elseif (forIndex == 'coa' or forIndex == 'ca') then -- mark for coa or CA. - for name, index in pairs (coalition.side) do + local matches = 0 + for name, index in pairs (coalition.side) do if listData == string.lower(name) then - markScope = 'coalition' + markScope = 'coa' + markFor = index + coa = index + matches = matches + 1 end end - elseif (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then - markForTable = markSpamFilter(markForTable, clientData.groupId) + if matches > 1 then + markScope = 'all' + end + elseif forIndex == 'countries' then + for clienId, clientData in pairs(mist.DBs.humansById) do + if (string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then + markForTable = markSpamFilter(markForTable, clientData.groupId) + end + end elseif forIndex == 'unittypes' then -- mark to group -- iterate play units for clientId, clientData in pairs(mist.DBs.humansById) do for typeId, typeData in pairs(listData) do - log:info(typeData) + --log:warn(typeData) local found = false if list == 'all' or clientData.coalition and type(clientData.coalition) == 'string' and mist.stringMatch(clientData.coalition, list) then if mist.matchString(typeData, clientData.type) then @@ -6738,58 +7109,141 @@ do markScope = 'all' end + if mType == 0 then + local data = {markId = usedId, text = text, pos = pos[1], markScope = markScope, markFor = markFor, markType = 'panel', name = name, time = timer.getTime()} + if markScope ~= 'table' then + -- create marks + + mist.marker.list[usedId] = data-- add to the DB + + else + if #markForTable > 0 then + --log:info('iterate') + local list = {} + if id and not name then + name = id + end + for i = 1, #markForTable do + local newId = iterate() + local data = {markId = newId, text = text, pos = pos[i], markFor = markForTable[i], markType = 'panel', name = name, readOnly = readOnly, time = timer.getTime()} + mist.marker.list[newId] = data + table.insert(list, data) - + draw(data) + + end + return list + end + end - - - if markScope ~= 'table' then - local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markScope = markScope, markFor = markFor} + draw(data) + + return data + elseif mType > 0 then + local newId = iterate() + local fCal = {} + fCal[#fCal+1] = mType + fCal[#fCal+1] = coa + fCal[#fCal+1] = usedId + for i = 1, #pos do + fCal[#fCal+1] = pos[i] + end + + if radius and mType == 2 then + fCal[#fCal+1] = radius + end + + if not color then + color = checkDefs('color', coa) + else + color = validateColor(color) + end + fCal[#fCal+1] = color + + + if not fillColor then + fillColor = checkDefs('fillColor', coa) + else + fillColor = validateColor(fillColor) + end + fCal[#fCal+1] = fillColor + + if mType == 5 then -- text to all + if not fontSize then + fontSize = checkDefs('fondSize', coa) or 16 + end + fCal[#fCal+1] = fontSize + else + if not lineType then + lineType = checkDefs('lineType', coa) or 2 + end + end + fCal[#fCal+1] = lineType + if not readOnly then + readOnly = true + end + fCal[#fCal+1] = readOnly + fCal[#fCal+1] = message + + local data = {coa = coa, markId = usedId, pos = pos, markFor = markFor, color = color, readOnly = readOnly, message = message, fillColor = fillColor, lineType = lineType, markType = tNames[mType], name = name, radius = radius, text = text, fontSize = fontSize, time = timer.getTime()} + mist.marker.list[usedId] = data + + if mType == 7 or mType == 1 then + local s = "trigger.action.markupToAll(" + + for i = 1, #fCal do + --log:warn(fCal[i]) + if type(fCal[i]) == 'table' or type(fCal[i]) == 'boolean' then + s = s .. mist.utils.oneLineSerialize(fCal[i]) + else + s = s .. fCal[i] + end + if i < #fCal then + s = s .. ',' + end + end + + s = s .. ')' + if name then + usedMarks[name] = usedId + end + draw(s) + + else - -- create marks - if markScope == 'coa' then - trigger.action.markToCoalition(newId, text, pos, markFor) - elseif markScope == 'group' then - trigger.action.markToGroup(newId, text, pos, markFor) - else - trigger.action.markToAll(iterate(), text, pos) - end - table.insert(mist.marker.list, data) -- add to the DB - else - if #markForTable > 0 then - log:info('iterate') - for i = 1, #markForTable do - local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markFor = markFor} - log:info(data) - table.insert(mist.marker.list, data) - trigger.action.markToGroup(newId, text, pos, markForTable[i]) - end - end - end - + draw(data) + + end + return data + end end function mist.marker.remove(id) - for i, data in pairs(mist.marker.list) do - if id == data.markId then - trigger.action.removeMark(id) - end - end + removeMark(id) end function mist.marker.get(id) - + if mist.marker.lis[id] then + return mist.marker.lis[id] + end + local names = {} + for markId, data in pairs(mist.marker.list) do + if data.name and data.name == id then + table.insert(names, data) + end + end + if #names > 0 then + return names + end end - function mist.marker.coords(pos, cType, markFor, id) -- wrapper function to just display coordinates of a specific format at location + --function mist.marker.coords(pos, cType, markFor, id) -- wrapper function to just display coordinates of a specific format at location - end - ]] + --end + end --- Time conversion functions. -- @section mist.time @@ -7790,7 +8244,8 @@ do -- mist.Logger scope -- @usage -- log everything --myLogger:setLevel(3) function mist.Logger:setLevel(level) - if not level then + env.info('set Level ' .. level) + if not level then self.level = 2 else if type(level) == 'string' then From d9130cb57a7a1e6ca2424fd1befbd63060aa6616 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Mon, 16 Aug 2021 01:50:11 -0600 Subject: [PATCH 11/16] Forgot update build num Forgot to update the build number to 100. Whoops. --- mist.lua | 4 +--- mist_4_5_100.lua | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/mist.lua b/mist.lua index 088bcdf..f4b65ca 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 98 +mist.build = 100 -- forward declaration of log shorthand local log @@ -5027,8 +5027,6 @@ do -- mist.debug scope function mist.debug.changeSetting(s) if type(s) == 'table' then for sName, sVal in pairs(s) do - env.info(sName) - env.info(sVal) if type(sVal) == 'string' or type(sVal) == 'number' then if sName == 'log' then mistSettings[sName] = sVal diff --git a/mist_4_5_100.lua b/mist_4_5_100.lua index 088bcdf..f4b65ca 100644 --- a/mist_4_5_100.lua +++ b/mist_4_5_100.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 98 +mist.build = 100 -- forward declaration of log shorthand local log @@ -5027,8 +5027,6 @@ do -- mist.debug scope function mist.debug.changeSetting(s) if type(s) == 'table' then for sName, sVal in pairs(s) do - env.info(sName) - env.info(sVal) if type(sVal) == 'string' or type(sVal) == 'number' then if sName == 'log' then mistSettings[sName] = sVal From 388d218b4ea0ae6e6d3b8fdd3f9c40d6ec6fba50 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Mon, 23 Aug 2021 03:27:26 -0600 Subject: [PATCH 12/16] Build 101. Bug fixes mostly Changed mist.marker.list to mist.DBs.markList Added markType and type as valid in mist.marker.add for the type Id Added mist.groupIsDead function Removed a log entry I left in. Updated DB examples. --- Example DBs/mist_DBs_MEgroupsById.lua | 71 +- Example DBs/mist_DBs_MEgroupsByName.lua | 381 +-- Example DBs/mist_DBs_MEunits.lua | 59 +- Example DBs/mist_DBs_MEunitsByCat.lua | 94 +- Example DBs/mist_DBs_MEunitsById.lua | 56 +- Example DBs/mist_DBs_MEunitsByName.lua | 612 ++--- Example DBs/mist_DBs_MEunitsByNum.lua | 194 +- Example DBs/mist_DBs_aliveUnits.lua | 884 ++++--- Example DBs/mist_DBs_const.lua | 46 +- Example DBs/mist_DBs_deadObjects.lua | 380 +-- Example DBs/mist_DBs_dynGroupsAdded.lua | 662 ++--- Example DBs/mist_DBs_groupsById.lua | 2558 ++++++++++---------- Example DBs/mist_DBs_groupsByName.lua | 975 ++++---- Example DBs/mist_DBs_humansById.lua | 10 +- Example DBs/mist_DBs_humansByName.lua | 10 +- Example DBs/mist_DBs_markList.lua | 334 +++ Example DBs/mist_DBs_missionData.lua | 2 +- Example DBs/mist_DBs_navPoints.lua | 24 +- Example DBs/mist_DBs_removedAliveUnits.lua | 24 +- Example DBs/mist_DBs_units.lua | 747 +++--- Example DBs/mist_DBs_unitsByCat.lua | 744 +++--- Example DBs/mist_DBs_unitsById.lua | 610 ++--- Example DBs/mist_DBs_unitsByName.lua | 1862 +++++++------- Example DBs/mist_DBs_unitsByNum.lua | 924 +++---- Example DBs/mist_DBs_zonesByName.lua | 63 +- Example DBs/mist_DBs_zonesByNum.lua | 71 +- mist.lua | 92 +- mist_4_5_100.lua => mist_4_5_101.lua | 92 +- 28 files changed, 6738 insertions(+), 5843 deletions(-) create mode 100644 Example DBs/mist_DBs_markList.lua rename mist_4_5_100.lua => mist_4_5_101.lua (99%) diff --git a/Example DBs/mist_DBs_MEgroupsById.lua b/Example DBs/mist_DBs_MEgroupsById.lua index 387f53c..0dddf0b 100644 --- a/Example DBs/mist_DBs_MEgroupsById.lua +++ b/Example DBs/mist_DBs_MEgroupsById.lua @@ -382,11 +382,17 @@ MEgroupsById = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #1_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, ["groupId"] = 6, ["groupName"] = "A-10C Client #1", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -318142.85714286, ["callsign"] = { [1] = 3, @@ -394,13 +400,10 @@ MEgroupsById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -318142.85714286, - ["skill"] = "Client", ["heading"] = -0.67060113146646, ["unitId"] = 11, ["y"] = 636428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, }, -- end of [1] }, -- end of ["units"] @@ -435,11 +438,17 @@ MEgroupsById = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #2_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, ["groupId"] = 7, ["groupName"] = "A-10C Client #2", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -315857.14285714, ["callsign"] = { [1] = 3, @@ -447,13 +456,10 @@ MEgroupsById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -315857.14285714, - ["skill"] = "Client", ["heading"] = -0.66079849060746, ["unitId"] = 12, ["y"] = 644428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, }, -- end of [1] }, -- end of ["units"] @@ -1899,8 +1905,8 @@ MEgroupsById = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -1909,7 +1915,7 @@ MEgroupsById = ["unitName"] = "Rotary-1-1", ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["groupId"] = 45, ["groupName"] = "nH", ["callsign"] = @@ -1920,11 +1926,11 @@ MEgroupsById = ["name"] = "Springfield11", }, -- end of ["callsign"] ["countryId"] = 21, - ["x"] = -155967.80633993, + ["x"] = -158700.87914814, ["skill"] = "High", - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["unitId"] = 68, - ["y"] = 405888.85058741, + ["y"] = 404406.46136648, ["coalition"] = "neutral", ["speed"] = 44.444444444444, }, -- end of [1] @@ -1938,6 +1944,43 @@ MEgroupsById = ["task"] = "Transport", ["uncontrolled"] = false, }, -- end of [45] + [47] = + { + ["country"] = "usa", + ["groupName"] = "poly", + ["units"] = + { + [1] = + { + ["type"] = "AAV7", + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["skill"] = "Average", + ["country"] = "usa", + ["groupName"] = "poly", + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["heading"] = 2.3261877017598, + ["countryId"] = 2, + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["hidden"] = false, + ["category"] = "vehicle", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["groupId"] = 47, + }, -- end of [47] [34] = { ["modulation"] = 0, diff --git a/Example DBs/mist_DBs_MEgroupsByName.lua b/Example DBs/mist_DBs_MEgroupsByName.lua index 2427d70..d015693 100644 --- a/Example DBs/mist_DBs_MEgroupsByName.lua +++ b/Example DBs/mist_DBs_MEgroupsByName.lua @@ -259,40 +259,62 @@ MEgroupsByName = ["task"] = "Ground Nothing", ["groupId"] = 35, }, -- end of ["teleGroup"] - ["Static Cafe-1"] = + ["A-10C Client #1"] = { - ["coalition"] = "neutral", - ["country"] = "australia", - ["groupId"] = 46, - ["countryId"] = 21, - ["category"] = "static", - ["groupName"] = "Static Cafe-1", + ["modulation"] = 0, + ["groupId"] = 6, + ["frequency"] = 251, + ["country"] = "usa", + ["groupName"] = "A-10C Client #1", ["units"] = { [1] = { - ["shape_name"] = "stolovaya", - ["type"] = "Cafe", + ["alt"] = 2000, ["point"] = { - ["y"] = 464123.689023, - ["x"] = -115514.59796101, + ["y"] = 636428.57142857, + ["x"] = -318142.85714286, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["country"] = "australia", - ["groupName"] = "Static Cafe-1", - ["heading"] = 0, - ["y"] = 464123.689023, - ["x"] = -115514.59796101, - ["unitId"] = 69, - ["category"] = "static", - ["unitName"] = "Static Cafe-1", - ["groupId"] = 46, - ["countryId"] = 21, - ["coalition"] = "neutral", + ["alt_type"] = "BARO", + ["livery_id"] = "104th FS Maryland ANG, Baltimore (MD)", + ["onboard_num"] = "52", + ["category"] = "plane", + ["unitName"] = "A-10C Client #1_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] + ["type"] = "A-10C", + ["country"] = "usa", + ["psi"] = 0.67060113146646, + ["groupId"] = 6, + ["groupName"] = "A-10C Client #1", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -318142.85714286, + ["callsign"] = + { + [1] = 3, + [2] = 1, + [3] = 1, + ["name"] = "Uzi11", + }, -- end of ["callsign"] + ["heading"] = -0.67060113146646, + ["unitId"] = 11, + ["y"] = 636428.57142857, + ["countryId"] = 2, + ["speed"] = 138.88888888889, }, -- end of [1] }, -- end of ["units"] - }, -- end of ["Static Cafe-1"] + ["countryId"] = 2, + ["radioSet"] = false, + ["hidden"] = false, + ["category"] = "plane", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "CAS", + ["uncontrolled"] = false, + }, -- end of ["A-10C Client #1"] ["cloneNeut"] = { ["modulation"] = 0, @@ -524,6 +546,43 @@ MEgroupsByName = ["countryId"] = 21, ["hidden"] = false, }, -- end of ["perry"] + ["poly"] = + { + ["country"] = "usa", + ["groupName"] = "poly", + ["units"] = + { + [1] = + { + ["type"] = "AAV7", + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["skill"] = "Average", + ["country"] = "usa", + ["groupName"] = "poly", + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["heading"] = 2.3261877017598, + ["countryId"] = 2, + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["hidden"] = false, + ["category"] = "vehicle", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["groupId"] = 47, + }, -- end of ["poly"] ["nH"] = { ["modulation"] = 0, @@ -538,8 +597,8 @@ MEgroupsByName = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -548,7 +607,7 @@ MEgroupsByName = ["unitName"] = "Rotary-1-1", ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["groupId"] = 45, ["groupName"] = "nH", ["callsign"] = @@ -559,11 +618,11 @@ MEgroupsByName = ["name"] = "Springfield11", }, -- end of ["callsign"] ["countryId"] = 21, - ["x"] = -155967.80633993, + ["x"] = -158700.87914814, ["skill"] = "High", - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["unitId"] = 68, - ["y"] = 405888.85058741, + ["y"] = 404406.46136648, ["coalition"] = "neutral", ["speed"] = 44.444444444444, }, -- end of [1] @@ -1525,59 +1584,6 @@ MEgroupsByName = }, -- end of [1] }, -- end of ["units"] }, -- end of ["tent #001"] - ["A-10C Client #2"] = - { - ["modulation"] = 0, - ["groupId"] = 7, - ["frequency"] = 251, - ["country"] = "usa", - ["groupName"] = "A-10C Client #2", - ["units"] = - { - [1] = - { - ["alt"] = 2000, - ["point"] = - { - ["y"] = 644428.57142857, - ["x"] = -315857.14285714, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["livery_id"] = "104th FS Maryland ANG, Baltimore (MD)", - ["onboard_num"] = "52", - ["category"] = "plane", - ["unitName"] = "A-10C Client #2_unit", - ["type"] = "A-10C", - ["country"] = "usa", - ["psi"] = 0.66079849060746, - ["groupId"] = 7, - ["groupName"] = "A-10C Client #2", - ["callsign"] = - { - [1] = 3, - [2] = 1, - [3] = 1, - ["name"] = "Uzi11", - }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -315857.14285714, - ["skill"] = "Client", - ["heading"] = -0.66079849060746, - ["unitId"] = 12, - ["y"] = 644428.57142857, - ["coalition"] = "blue", - ["speed"] = 138.88888888889, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["radioSet"] = false, - ["hidden"] = false, - ["category"] = "plane", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "CAS", - ["uncontrolled"] = false, - }, -- end of ["A-10C Client #2"] ["RuTent2"] = { ["coalition"] = "red", @@ -1612,6 +1618,62 @@ MEgroupsByName = }, -- end of [1] }, -- end of ["units"] }, -- end of ["RuTent2"] + ["A-10C Client #2"] = + { + ["modulation"] = 0, + ["groupId"] = 7, + ["frequency"] = 251, + ["country"] = "usa", + ["groupName"] = "A-10C Client #2", + ["units"] = + { + [1] = + { + ["alt"] = 2000, + ["point"] = + { + ["y"] = 644428.57142857, + ["x"] = -315857.14285714, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["livery_id"] = "104th FS Maryland ANG, Baltimore (MD)", + ["onboard_num"] = "52", + ["category"] = "plane", + ["unitName"] = "A-10C Client #2_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] + ["type"] = "A-10C", + ["country"] = "usa", + ["psi"] = 0.66079849060746, + ["groupId"] = 7, + ["groupName"] = "A-10C Client #2", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -315857.14285714, + ["callsign"] = + { + [1] = 3, + [2] = 1, + [3] = 1, + ["name"] = "Uzi11", + }, -- end of ["callsign"] + ["heading"] = -0.66079849060746, + ["unitId"] = 12, + ["y"] = 644428.57142857, + ["countryId"] = 2, + ["speed"] = 138.88888888889, + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["radioSet"] = false, + ["hidden"] = false, + ["category"] = "plane", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "CAS", + ["uncontrolled"] = false, + }, -- end of ["A-10C Client #2"] ["Rus Ships #1"] = { ["groupId"] = 9, @@ -1668,6 +1730,40 @@ MEgroupsByName = ["countryId"] = 0, ["hidden"] = false, }, -- end of ["Rus Ships #1"] + ["Static Cafe-1"] = + { + ["coalition"] = "neutral", + ["country"] = "australia", + ["groupId"] = 46, + ["countryId"] = 21, + ["category"] = "static", + ["groupName"] = "Static Cafe-1", + ["units"] = + { + [1] = + { + ["shape_name"] = "stolovaya", + ["type"] = "Cafe", + ["point"] = + { + ["y"] = 464123.689023, + ["x"] = -115514.59796101, + }, -- end of ["point"] + ["categoryStatic"] = "Fortifications", + ["country"] = "australia", + ["groupName"] = "Static Cafe-1", + ["heading"] = 0, + ["y"] = 464123.689023, + ["x"] = -115514.59796101, + ["unitId"] = 69, + ["category"] = "static", + ["unitName"] = "Static Cafe-1", + ["groupId"] = 46, + ["countryId"] = 21, + ["coalition"] = "neutral", + }, -- end of [1] + }, -- end of ["units"] + }, -- end of ["Static Cafe-1"] ["F-15C Client #2"] = { ["modulation"] = 0, @@ -1755,59 +1851,6 @@ MEgroupsByName = }, -- end of [1] }, -- end of ["units"] }, -- end of ["tent"] - ["A-10C Client #1"] = - { - ["modulation"] = 0, - ["groupId"] = 6, - ["frequency"] = 251, - ["country"] = "usa", - ["groupName"] = "A-10C Client #1", - ["units"] = - { - [1] = - { - ["alt"] = 2000, - ["point"] = - { - ["y"] = 636428.57142857, - ["x"] = -318142.85714286, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["livery_id"] = "104th FS Maryland ANG, Baltimore (MD)", - ["onboard_num"] = "52", - ["category"] = "plane", - ["unitName"] = "A-10C Client #1_unit", - ["type"] = "A-10C", - ["country"] = "usa", - ["psi"] = 0.67060113146646, - ["groupId"] = 6, - ["groupName"] = "A-10C Client #1", - ["callsign"] = - { - [1] = 3, - [2] = 1, - [3] = 1, - ["name"] = "Uzi11", - }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -318142.85714286, - ["skill"] = "Client", - ["heading"] = -0.67060113146646, - ["unitId"] = 11, - ["y"] = 636428.57142857, - ["coalition"] = "blue", - ["speed"] = 138.88888888889, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["radioSet"] = false, - ["hidden"] = false, - ["category"] = "plane", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "CAS", - ["uncontrolled"] = false, - }, -- end of ["A-10C Client #1"] ["USTanks1"] = { ["country"] = "usa", @@ -1911,39 +1954,6 @@ MEgroupsByName = ["task"] = "Ground Nothing", ["groupId"] = 11, }, -- end of ["USTanks1"] - ["tent #002"] = - { - ["coalition"] = "red", - ["country"] = "russia", - ["groupId"] = 39, - ["countryId"] = 0, - ["category"] = "static", - ["groupName"] = "tent #002", - ["units"] = - { - [1] = - { - ["shape_name"] = "elektrowoz", - ["type"] = "Electric locomotive", - ["point"] = - { - ["y"] = 652535.98623348, - ["x"] = -296017.9062429, - }, -- end of ["point"] - ["groupId"] = 39, - ["groupName"] = "tent #002", - ["unitId"] = 62, - ["countryId"] = 0, - ["x"] = -296017.9062429, - ["heading"] = 0, - ["category"] = "static", - ["unitName"] = "tent #002", - ["country"] = "russia", - ["y"] = 652535.98623348, - ["coalition"] = "red", - }, -- end of [1] - }, -- end of ["units"] - }, -- end of ["tent #002"] ["tent2"] = { ["coalition"] = "blue", @@ -1978,6 +1988,39 @@ MEgroupsByName = }, -- end of [1] }, -- end of ["units"] }, -- end of ["tent2"] + ["tent #002"] = + { + ["coalition"] = "red", + ["country"] = "russia", + ["groupId"] = 39, + ["countryId"] = 0, + ["category"] = "static", + ["groupName"] = "tent #002", + ["units"] = + { + [1] = + { + ["shape_name"] = "elektrowoz", + ["type"] = "Electric locomotive", + ["point"] = + { + ["y"] = 652535.98623348, + ["x"] = -296017.9062429, + }, -- end of ["point"] + ["groupId"] = 39, + ["groupName"] = "tent #002", + ["unitId"] = 62, + ["countryId"] = 0, + ["x"] = -296017.9062429, + ["heading"] = 0, + ["category"] = "static", + ["unitName"] = "tent #002", + ["country"] = "russia", + ["y"] = 652535.98623348, + ["coalition"] = "red", + }, -- end of [1] + }, -- end of ["units"] + }, -- end of ["tent #002"] ["RuTanks"] = { ["country"] = "russia", diff --git a/Example DBs/mist_DBs_MEunits.lua b/Example DBs/mist_DBs_MEunits.lua index 900d783..a3094e1 100644 --- a/Example DBs/mist_DBs_MEunits.lua +++ b/Example DBs/mist_DBs_MEunits.lua @@ -60,8 +60,8 @@ MEunits = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -70,15 +70,15 @@ MEunits = ["speed"] = 44.444444444444, ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["unitName"] = "Rotary-1-1", ["groupName"] = "nH", ["coalition"] = "neutral", ["countryId"] = 21, - ["x"] = -155967.80633993, - ["y"] = 405888.85058741, + ["x"] = -158700.87914814, + ["y"] = 404406.46136648, ["unitId"] = 68, - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["skill"] = "High", ["callsign"] = { @@ -829,6 +829,43 @@ MEunits = ["task"] = "Ground Nothing", ["hidden"] = false, }, -- end of [4] + [5] = + { + ["country"] = "usa", + ["groupName"] = "poly", + ["units"] = + { + [1] = + { + ["heading"] = 2.3261877017598, + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["groupName"] = "poly", + ["type"] = "AAV7", + ["countryId"] = 2, + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["country"] = "usa", + ["skill"] = "Average", + }, -- end of [1] + }, -- end of ["units"] + ["coalition"] = "blue", + ["groupId"] = 47, + ["category"] = "vehicle", + ["countryId"] = 2, + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["hidden"] = false, + }, -- end of [5] }, -- end of ["vehicle"] ["plane"] = { @@ -960,6 +997,9 @@ MEunits = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -971,7 +1011,6 @@ MEunits = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -979,6 +1018,7 @@ MEunits = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, }, -- end of [1] }, -- end of ["units"] @@ -1013,6 +1053,9 @@ MEunits = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -1024,7 +1067,6 @@ MEunits = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -1032,6 +1074,7 @@ MEunits = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, }, -- end of [1] }, -- end of ["units"] diff --git a/Example DBs/mist_DBs_MEunitsByCat.lua b/Example DBs/mist_DBs_MEunitsByCat.lua index e7a508b..0c01469 100644 --- a/Example DBs/mist_DBs_MEunitsByCat.lua +++ b/Example DBs/mist_DBs_MEunitsByCat.lua @@ -7,8 +7,8 @@ MEunitsByCat = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -17,7 +17,7 @@ MEunitsByCat = ["unitName"] = "Rotary-1-1", ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["groupId"] = 45, ["groupName"] = "nH", ["callsign"] = @@ -28,11 +28,11 @@ MEunitsByCat = ["name"] = "Springfield11", }, -- end of ["callsign"] ["countryId"] = 21, - ["x"] = -155967.80633993, + ["x"] = -158700.87914814, ["skill"] = "High", - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["unitId"] = 68, - ["y"] = 405888.85058741, + ["y"] = 404406.46136648, ["coalition"] = "neutral", ["speed"] = 44.444444444444, }, -- end of [1] @@ -814,11 +814,17 @@ MEunitsByCat = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #1_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, ["groupId"] = 6, ["groupName"] = "A-10C Client #1", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -318142.85714286, ["callsign"] = { [1] = 3, @@ -826,13 +832,10 @@ MEunitsByCat = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -318142.85714286, - ["skill"] = "Client", ["heading"] = -0.67060113146646, ["unitId"] = 11, ["y"] = 636428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, }, -- end of [4] [5] = @@ -848,11 +851,17 @@ MEunitsByCat = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #2_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, ["groupId"] = 7, ["groupName"] = "A-10C Client #2", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -315857.14285714, ["callsign"] = { [1] = 3, @@ -860,13 +869,10 @@ MEunitsByCat = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -315857.14285714, - ["skill"] = "Client", ["heading"] = -0.66079849060746, ["unitId"] = 12, ["y"] = 644428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, }, -- end of [5] [6] = @@ -1422,6 +1428,28 @@ MEunitsByCat = ["countryId"] = 2, }, -- end of [18] [19] = + { + ["type"] = "AAV7", + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["skill"] = "Average", + ["country"] = "usa", + ["groupName"] = "poly", + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["heading"] = 2.3261877017598, + ["countryId"] = 2, + }, -- end of [19] + [20] = { ["type"] = "BTR-80", ["point"] = @@ -1442,8 +1470,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [19] - [20] = + }, -- end of [20] + [21] = { ["type"] = "BTR-80", ["point"] = @@ -1464,8 +1492,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [20] - [21] = + }, -- end of [21] + [22] = { ["type"] = "BTR-80", ["point"] = @@ -1486,8 +1514,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [21] - [22] = + }, -- end of [22] + [23] = { ["type"] = "BTR-80", ["point"] = @@ -1508,8 +1536,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [22] - [23] = + }, -- end of [23] + [24] = { ["type"] = "BTR-80", ["point"] = @@ -1530,8 +1558,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [23] - [24] = + }, -- end of [24] + [25] = { ["type"] = "BTR-80", ["point"] = @@ -1552,8 +1580,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [24] - [25] = + }, -- end of [25] + [26] = { ["type"] = "T-55", ["point"] = @@ -1574,8 +1602,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = 0, ["countryId"] = 0, - }, -- end of [25] - [26] = + }, -- end of [26] + [27] = { ["type"] = "T-55", ["point"] = @@ -1596,8 +1624,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = 0, ["countryId"] = 0, - }, -- end of [26] - [27] = + }, -- end of [27] + [28] = { ["type"] = "T-55", ["point"] = @@ -1618,8 +1646,8 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = 0, ["countryId"] = 0, - }, -- end of [27] - [28] = + }, -- end of [28] + [29] = { ["type"] = "T-55", ["point"] = @@ -1640,6 +1668,6 @@ MEunitsByCat = ["playerCanDrive"] = true, ["heading"] = 0, ["countryId"] = 0, - }, -- end of [28] + }, -- end of [29] }, -- end of ["vehicle"] } -- end of MEunitsByCat diff --git a/Example DBs/mist_DBs_MEunitsById.lua b/Example DBs/mist_DBs_MEunitsById.lua index 742c57f..a74e7fb 100644 --- a/Example DBs/mist_DBs_MEunitsById.lua +++ b/Example DBs/mist_DBs_MEunitsById.lua @@ -278,11 +278,17 @@ MEunitsById = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #1_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, ["groupId"] = 6, ["groupName"] = "A-10C Client #1", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -318142.85714286, ["callsign"] = { [1] = 3, @@ -290,13 +296,10 @@ MEunitsById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -318142.85714286, - ["skill"] = "Client", ["heading"] = -0.67060113146646, ["unitId"] = 11, ["y"] = 636428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, }, -- end of [11] [12] = @@ -312,11 +315,17 @@ MEunitsById = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #2_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, ["groupId"] = 7, ["groupName"] = "A-10C Client #2", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -315857.14285714, ["callsign"] = { [1] = 3, @@ -324,13 +333,10 @@ MEunitsById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -315857.14285714, - ["skill"] = "Client", ["heading"] = -0.66079849060746, ["unitId"] = 12, ["y"] = 644428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, }, -- end of [12] [13] = @@ -1576,8 +1582,8 @@ MEunitsById = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -1586,7 +1592,7 @@ MEunitsById = ["unitName"] = "Rotary-1-1", ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["groupId"] = 45, ["groupName"] = "nH", ["callsign"] = @@ -1597,11 +1603,11 @@ MEunitsById = ["name"] = "Springfield11", }, -- end of ["callsign"] ["countryId"] = 21, - ["x"] = -155967.80633993, + ["x"] = -158700.87914814, ["skill"] = "High", - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["unitId"] = 68, - ["y"] = 405888.85058741, + ["y"] = 404406.46136648, ["coalition"] = "neutral", ["speed"] = 44.444444444444, }, -- end of [68] @@ -1627,4 +1633,26 @@ MEunitsById = ["countryId"] = 21, ["coalition"] = "neutral", }, -- end of [69] + [70] = + { + ["type"] = "AAV7", + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["skill"] = "Average", + ["country"] = "usa", + ["groupName"] = "poly", + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["heading"] = 2.3261877017598, + ["countryId"] = 2, + }, -- end of [70] } -- end of MEunitsById diff --git a/Example DBs/mist_DBs_MEunitsByName.lua b/Example DBs/mist_DBs_MEunitsByName.lua index 9debb55..a488525 100644 --- a/Example DBs/mist_DBs_MEunitsByName.lua +++ b/Example DBs/mist_DBs_MEunitsByName.lua @@ -141,6 +141,12 @@ MEunitsByName = ["type"] = "Cafe", ["point"] = { + [1] = + { + ["y"] = 0, + ["x"] = -115514.59796101, + ["z"] = 464123.689023, + }, -- end of [1] ["y"] = 464123.689023, ["x"] = -115514.59796101, }, -- end of ["point"] @@ -414,11 +420,17 @@ MEunitsByName = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #2_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, ["groupId"] = 7, ["groupName"] = "A-10C Client #2", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -315857.14285714, ["callsign"] = { [1] = 3, @@ -426,13 +438,10 @@ MEunitsByName = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -315857.14285714, - ["skill"] = "Client", ["heading"] = -0.66079849060746, ["unitId"] = 12, ["y"] = 644428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, }, -- end of ["A-10C Client #2_unit"] ["USTanks1_3"] = @@ -457,28 +466,28 @@ MEunitsByName = ["heading"] = 0, ["countryId"] = 2, }, -- end of ["USTanks1_3"] - ["static_on_ship1 #001"] = + ["RuTent2"] = { - ["heading"] = 0, + ["shape_name"] = "PalatkaB", + ["type"] = "FARP Tent", ["point"] = { - ["y"] = 443849.03844635, - ["x"] = -355322.27295572, + ["y"] = 617319.42857142, + ["x"] = -259804, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 41, - ["livery_id"] = "USA Marines", - ["groupName"] = "static_on_ship1 #001", - ["country"] = "usa", - ["coalition"] = "blue", - ["x"] = -355322.27295572, - ["type"] = "AH-1W", + ["categoryStatic"] = "Fortifications", + ["country"] = "russia", + ["groupName"] = "RuTent2", + ["heading"] = 0, + ["y"] = 617319.42857142, + ["x"] = -259804, + ["unitId"] = 41, ["category"] = "static", - ["unitName"] = "static_on_ship1 #001", - ["unitId"] = 64, - ["y"] = 443849.03844635, - ["countryId"] = 2, - }, -- end of ["static_on_ship1 #001"] + ["unitName"] = "RuTent2", + ["groupId"] = 19, + ["countryId"] = 0, + ["coalition"] = "red", + }, -- end of ["RuTent2"] ["Unit #006"] = { ["type"] = "Hawk ln", @@ -501,28 +510,28 @@ MEunitsByName = ["heading"] = 0, ["countryId"] = 2, }, -- end of ["Unit #006"] - ["Naval-1-1"] = + ["static_on_ship1"] = { - ["type"] = "PERRY", + ["heading"] = 0, ["point"] = { - ["y"] = 342754.30716193, - ["x"] = -153426.17965693, + ["y"] = 443856.28948724, + ["x"] = -355322.45423175, }, -- end of ["point"] - ["groupId"] = 44, - ["groupName"] = "perry", - ["livery_id"] = "ReubenJames", - ["skill"] = "Average", - ["country"] = "australia", - ["coalition"] = "neutral", - ["x"] = -153426.17965693, - ["heading"] = 0, - ["category"] = "ship", - ["unitName"] = "Naval-1-1", - ["unitId"] = 67, - ["y"] = 342754.30716193, - ["countryId"] = 21, - }, -- end of ["Naval-1-1"] + ["categoryStatic"] = "Helicopters", + ["groupId"] = 40, + ["livery_id"] = "USA Marines", + ["groupName"] = "static_on_ship1", + ["country"] = "usa", + ["coalition"] = "blue", + ["x"] = -355322.45423175, + ["type"] = "AH-1W", + ["category"] = "static", + ["unitName"] = "static_on_ship1", + ["unitId"] = 63, + ["y"] = 443856.28948724, + ["countryId"] = 2, + }, -- end of ["static_on_ship1"] ["tent"] = { ["shape_name"] = "PalatkaB", @@ -685,11 +694,17 @@ MEunitsByName = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #1_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, ["groupId"] = 6, ["groupName"] = "A-10C Client #1", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -318142.85714286, ["callsign"] = { [1] = 3, @@ -697,13 +712,10 @@ MEunitsByName = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -318142.85714286, - ["skill"] = "Client", ["heading"] = -0.67060113146646, ["unitId"] = 11, ["y"] = 636428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, }, -- end of ["A-10C Client #1_unit"] ["Su-33 Client #2Unit"] = @@ -950,50 +962,70 @@ MEunitsByName = ["y"] = 684605.71428571, ["countryId"] = 2, }, -- end of ["static"] - ["Unit #008"] = + ["tent #001"] = { - ["type"] = "Hawk cwar", + ["shape_name"] = "teplowoz", + ["type"] = "Locomotive", ["point"] = { - ["y"] = 681535.14285714, - ["x"] = -287156.85714286, + ["y"] = 652535.98623348, + ["x"] = -295992.90575084, }, -- end of ["point"] - ["groupId"] = 35, - ["skill"] = "Average", - ["country"] = "usa", - ["groupName"] = "teleGroup", - ["y"] = 681535.14285714, - ["coalition"] = "blue", - ["x"] = -287156.85714286, - ["unitId"] = 58, - ["category"] = "vehicle", - ["unitName"] = "Unit #008", - ["playerCanDrive"] = true, + ["groupId"] = 38, + ["groupName"] = "tent #001", + ["unitId"] = 61, + ["countryId"] = 0, + ["x"] = -295992.90575084, ["heading"] = 0, - ["countryId"] = 2, - }, -- end of ["Unit #008"] - ["USTanks1_2"] = + ["category"] = "static", + ["unitName"] = "tent #001", + ["country"] = "russia", + ["y"] = 652535.98623348, + ["coalition"] = "red", + }, -- end of ["tent #001"] + ["Aerial-1-1"] = { - ["type"] = "M-1 Abrams", + ["alt"] = 2000, ["point"] = { - ["y"] = 639840, - ["x"] = -294725.71428571, + [1] = + { + ["y"] = 0, + ["x"] = -198551.02959497, + ["z"] = 319582.08692347, + }, -- end of [1] + ["y"] = 319582.08692347, + ["x"] = -198551.02959497, }, -- end of ["point"] - ["groupId"] = 11, - ["skill"] = "Average", - ["country"] = "usa", - ["groupName"] = "USTanks1", - ["y"] = 639840, - ["coalition"] = "blue", - ["x"] = -294725.71428571, - ["unitId"] = 20, - ["category"] = "vehicle", - ["unitName"] = "USTanks1_2", - ["playerCanDrive"] = true, - ["heading"] = 0, - ["countryId"] = 2, - }, -- end of ["USTanks1_2"] + ["alt_type"] = "BARO", + ["livery_id"] = "Australian 75th Squadron", + ["onboard_num"] = "010", + ["category"] = "plane", + ["unitName"] = "Aerial-1-1", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] + ["type"] = "FA-18C_hornet", + ["country"] = "australia", + ["psi"] = -2.1995926132104, + ["groupId"] = 42, + ["groupName"] = "cloneNeut", + ["skill"] = "High", + ["coalition"] = "neutral", + ["x"] = -198551.02959497, + ["callsign"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + ["name"] = "Enfield11", + }, -- end of ["callsign"] + ["heading"] = 2.1995926132104, + ["unitId"] = 65, + ["y"] = 319582.08692347, + ["countryId"] = 21, + ["speed"] = 180.55555555556, + }, -- end of ["Aerial-1-1"] ["Pilot #001"] = { ["alt"] = 2000, @@ -1169,6 +1201,12 @@ MEunitsByName = ["type"] = "M-113", ["point"] = { + [1] = + { + ["y"] = 0, + ["x"] = -146108.63642373, + ["z"] = 445199.91242668, + }, -- end of [1] ["y"] = 445199.91242668, ["x"] = -146108.63642373, }, -- end of ["point"] @@ -1186,6 +1224,28 @@ MEunitsByName = ["heading"] = 0, ["countryId"] = 21, }, -- end of ["Ground-1-1"] + ["static_on_ship1 #001"] = + { + ["heading"] = 0, + ["point"] = + { + ["y"] = 443849.03844635, + ["x"] = -355322.27295572, + }, -- end of ["point"] + ["categoryStatic"] = "Helicopters", + ["groupId"] = 41, + ["livery_id"] = "USA Marines", + ["groupName"] = "static_on_ship1 #001", + ["country"] = "usa", + ["coalition"] = "blue", + ["x"] = -355322.27295572, + ["type"] = "AH-1W", + ["category"] = "static", + ["unitName"] = "static_on_ship1 #001", + ["unitId"] = 64, + ["y"] = 443849.03844635, + ["countryId"] = 2, + }, -- end of ["static_on_ship1 #001"] ["RuTent1"] = { ["shape_name"] = "PalatkaB", @@ -1208,50 +1268,6 @@ MEunitsByName = ["countryId"] = 0, ["coalition"] = "red", }, -- end of ["RuTent1"] - ["RuTent2"] = - { - ["shape_name"] = "PalatkaB", - ["type"] = "FARP Tent", - ["point"] = - { - ["y"] = 617319.42857142, - ["x"] = -259804, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["country"] = "russia", - ["groupName"] = "RuTent2", - ["heading"] = 0, - ["y"] = 617319.42857142, - ["x"] = -259804, - ["unitId"] = 41, - ["category"] = "static", - ["unitName"] = "RuTent2", - ["groupId"] = 19, - ["countryId"] = 0, - ["coalition"] = "red", - }, -- end of ["RuTent2"] - ["USTanks1_4"] = - { - ["type"] = "M-1 Abrams", - ["point"] = - { - ["y"] = 639920, - ["x"] = -294805.71428571, - }, -- end of ["point"] - ["groupId"] = 11, - ["skill"] = "Average", - ["country"] = "usa", - ["groupName"] = "USTanks1", - ["y"] = 639920, - ["coalition"] = "blue", - ["x"] = -294805.71428571, - ["unitId"] = 22, - ["category"] = "vehicle", - ["unitName"] = "USTanks1_4", - ["playerCanDrive"] = true, - ["heading"] = 0, - ["countryId"] = 2, - }, -- end of ["USTanks1_4"] ["RuBTRs4"] = { ["type"] = "BTR-80", @@ -1274,6 +1290,49 @@ MEunitsByName = ["heading"] = -1.7994767003775, ["countryId"] = 0, }, -- end of ["RuBTRs4"] + ["USTanks1_4"] = + { + ["type"] = "M-1 Abrams", + ["point"] = + { + ["y"] = 639920, + ["x"] = -294805.71428571, + }, -- end of ["point"] + ["groupId"] = 11, + ["skill"] = "Average", + ["country"] = "usa", + ["groupName"] = "USTanks1", + ["y"] = 639920, + ["coalition"] = "blue", + ["x"] = -294805.71428571, + ["unitId"] = 22, + ["category"] = "vehicle", + ["unitName"] = "USTanks1_4", + ["playerCanDrive"] = true, + ["heading"] = 0, + ["countryId"] = 2, + }, -- end of ["USTanks1_4"] + ["2ship2"] = + { + ["type"] = "MOSCOW", + ["point"] = + { + ["y"] = 74371.428571428, + ["x"] = -87228.571428571, + }, -- end of ["point"] + ["groupId"] = 10, + ["groupName"] = "Rus Ships #2", + ["skill"] = "Average", + ["country"] = "russia", + ["coalition"] = "red", + ["x"] = -87228.571428571, + ["heading"] = 1.1755995276042, + ["category"] = "ship", + ["unitName"] = "2ship2", + ["unitId"] = 18, + ["y"] = 74371.428571428, + ["countryId"] = 0, + }, -- end of ["2ship2"] ["Mi-8s_1_1"] = { ["alt"] = 500, @@ -1310,49 +1369,28 @@ MEunitsByName = ["countryId"] = 0, ["speed"] = 55.555555555556, }, -- end of ["Mi-8s_1_1"] - ["RuTanks1"] = + ["Ground-2-1"] = { - ["type"] = "T-55", + ["type"] = "AAV7", ["point"] = { - ["y"] = 628677.14285714, - ["x"] = -273442.85714286, + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, }, -- end of ["point"] - ["groupId"] = 14, - ["skill"] = "Excellent", - ["country"] = "russia", - ["groupName"] = "RuTanks", - ["y"] = 628677.14285714, - ["coalition"] = "red", - ["x"] = -273442.85714286, - ["unitId"] = 33, - ["category"] = "vehicle", - ["unitName"] = "RuTanks1", - ["playerCanDrive"] = true, - ["heading"] = 0, - ["countryId"] = 0, - }, -- end of ["RuTanks1"] - ["2ship2"] = - { - ["type"] = "MOSCOW", - ["point"] = - { - ["y"] = 74371.428571428, - ["x"] = -87228.571428571, - }, -- end of ["point"] - ["groupId"] = 10, - ["groupName"] = "Rus Ships #2", + ["groupId"] = 47, ["skill"] = "Average", - ["country"] = "russia", - ["coalition"] = "red", - ["x"] = -87228.571428571, - ["heading"] = 1.1755995276042, - ["category"] = "ship", - ["unitName"] = "2ship2", - ["unitId"] = 18, - ["y"] = 74371.428571428, - ["countryId"] = 0, - }, -- end of ["2ship2"] + ["country"] = "usa", + ["groupName"] = "poly", + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["heading"] = 2.3261877017598, + ["countryId"] = 2, + }, -- end of ["Ground-2-1"] ["Unit #003"] = { ["type"] = "Hawk sr", @@ -1375,6 +1413,28 @@ MEunitsByName = ["heading"] = 0, ["countryId"] = 2, }, -- end of ["Unit #003"] + ["RuBTRs6"] = + { + ["type"] = "BTR-80", + ["point"] = + { + ["y"] = 654745.71428571, + ["x"] = -293042.85714286, + }, -- end of ["point"] + ["groupId"] = 13, + ["skill"] = "Average", + ["country"] = "russia", + ["groupName"] = "RuBTRs", + ["y"] = 654745.71428571, + ["coalition"] = "red", + ["x"] = -293042.85714286, + ["unitId"] = 32, + ["category"] = "vehicle", + ["unitName"] = "RuBTRs6", + ["playerCanDrive"] = true, + ["heading"] = -1.7994767003775, + ["countryId"] = 0, + }, -- end of ["RuBTRs6"] ["2ship1"] = { ["type"] = "MOSCOW", @@ -1424,93 +1484,85 @@ MEunitsByName = ["coalition"] = "red", ["speed"] = 138.88888888889, }, -- end of ["Su-33 Client #1Unit"] - ["RuBTRs6"] = + ["RuTanks1"] = { - ["type"] = "BTR-80", + ["type"] = "T-55", ["point"] = { - ["y"] = 654745.71428571, - ["x"] = -293042.85714286, + ["y"] = 628677.14285714, + ["x"] = -273442.85714286, }, -- end of ["point"] - ["groupId"] = 13, - ["skill"] = "Average", + ["groupId"] = 14, + ["skill"] = "Excellent", ["country"] = "russia", - ["groupName"] = "RuBTRs", - ["y"] = 654745.71428571, + ["groupName"] = "RuTanks", + ["y"] = 628677.14285714, ["coalition"] = "red", - ["x"] = -293042.85714286, - ["unitId"] = 32, + ["x"] = -273442.85714286, + ["unitId"] = 33, ["category"] = "vehicle", - ["unitName"] = "RuBTRs6", + ["unitName"] = "RuTanks1", ["playerCanDrive"] = true, - ["heading"] = -1.7994767003775, - ["countryId"] = 0, - }, -- end of ["RuBTRs6"] - ["Aerial-1-1"] = - { - ["alt"] = 2000, - ["point"] = - { - ["y"] = 319582.08692347, - ["x"] = -198551.02959497, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["livery_id"] = "Australian 75th Squadron", - ["onboard_num"] = "010", - ["category"] = "plane", - ["unitName"] = "Aerial-1-1", - ["AddPropAircraft"] = - { - }, -- end of ["AddPropAircraft"] - ["type"] = "FA-18C_hornet", - ["country"] = "australia", - ["psi"] = -2.1995926132104, - ["groupId"] = 42, - ["groupName"] = "cloneNeut", - ["skill"] = "High", - ["coalition"] = "neutral", - ["x"] = -198551.02959497, - ["callsign"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - ["name"] = "Enfield11", - }, -- end of ["callsign"] - ["heading"] = 2.1995926132104, - ["unitId"] = 65, - ["y"] = 319582.08692347, - ["countryId"] = 21, - ["speed"] = 180.55555555556, - }, -- end of ["Aerial-1-1"] - ["tent #001"] = - { - ["shape_name"] = "teplowoz", - ["type"] = "Locomotive", - ["point"] = - { - ["y"] = 652535.98623348, - ["x"] = -295992.90575084, - }, -- end of ["point"] - ["groupId"] = 38, - ["groupName"] = "tent #001", - ["unitId"] = 61, - ["countryId"] = 0, - ["x"] = -295992.90575084, ["heading"] = 0, - ["category"] = "static", - ["unitName"] = "tent #001", - ["country"] = "russia", - ["y"] = 652535.98623348, - ["coalition"] = "red", - }, -- end of ["tent #001"] + ["countryId"] = 0, + }, -- end of ["RuTanks1"] + ["Unit #008"] = + { + ["type"] = "Hawk cwar", + ["point"] = + { + ["y"] = 681535.14285714, + ["x"] = -287156.85714286, + }, -- end of ["point"] + ["groupId"] = 35, + ["skill"] = "Average", + ["country"] = "usa", + ["groupName"] = "teleGroup", + ["y"] = 681535.14285714, + ["coalition"] = "blue", + ["x"] = -287156.85714286, + ["unitId"] = 58, + ["category"] = "vehicle", + ["unitName"] = "Unit #008", + ["playerCanDrive"] = true, + ["heading"] = 0, + ["countryId"] = 2, + }, -- end of ["Unit #008"] + ["USTanks1_2"] = + { + ["type"] = "M-1 Abrams", + ["point"] = + { + ["y"] = 639840, + ["x"] = -294725.71428571, + }, -- end of ["point"] + ["groupId"] = 11, + ["skill"] = "Average", + ["country"] = "usa", + ["groupName"] = "USTanks1", + ["y"] = 639840, + ["coalition"] = "blue", + ["x"] = -294725.71428571, + ["unitId"] = 20, + ["category"] = "vehicle", + ["unitName"] = "USTanks1_2", + ["playerCanDrive"] = true, + ["heading"] = 0, + ["countryId"] = 2, + }, -- end of ["USTanks1_2"] ["Rotary-1-1"] = { ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + [1] = + { + ["y"] = 0, + ["x"] = -158700.87914814, + ["z"] = 404406.46136648, + }, -- end of [1] + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -1519,7 +1571,7 @@ MEunitsByName = ["unitName"] = "Rotary-1-1", ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["groupId"] = 45, ["groupName"] = "nH", ["callsign"] = @@ -1530,36 +1582,64 @@ MEunitsByName = ["name"] = "Springfield11", }, -- end of ["callsign"] ["countryId"] = 21, - ["x"] = -155967.80633993, + ["x"] = -158700.87914814, ["skill"] = "High", - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["unitId"] = 68, - ["y"] = 405888.85058741, + ["y"] = 404406.46136648, ["coalition"] = "neutral", ["speed"] = 44.444444444444, }, -- end of ["Rotary-1-1"] - ["static_on_ship1"] = + ["RuBTRs1"] = { - ["heading"] = 0, + ["type"] = "BTR-80", ["point"] = { - ["y"] = 443856.28948724, - ["x"] = -355322.45423175, + ["y"] = 654545.71428571, + ["x"] = -292842.85714286, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 40, - ["livery_id"] = "USA Marines", - ["groupName"] = "static_on_ship1", - ["country"] = "usa", - ["coalition"] = "blue", - ["x"] = -355322.45423175, - ["type"] = "AH-1W", - ["category"] = "static", - ["unitName"] = "static_on_ship1", - ["unitId"] = 63, - ["y"] = 443856.28948724, - ["countryId"] = 2, - }, -- end of ["static_on_ship1"] + ["groupId"] = 13, + ["skill"] = "Average", + ["country"] = "russia", + ["groupName"] = "RuBTRs", + ["y"] = 654545.71428571, + ["coalition"] = "red", + ["x"] = -292842.85714286, + ["unitId"] = 27, + ["category"] = "vehicle", + ["unitName"] = "RuBTRs1", + ["playerCanDrive"] = true, + ["heading"] = -1.7994767003775, + ["countryId"] = 0, + }, -- end of ["RuBTRs1"] + ["Naval-1-1"] = + { + ["type"] = "PERRY", + ["point"] = + { + [1] = + { + ["y"] = 0, + ["x"] = -153426.17965693, + ["z"] = 342754.30716193, + }, -- end of [1] + ["y"] = 342754.30716193, + ["x"] = -153426.17965693, + }, -- end of ["point"] + ["groupId"] = 44, + ["groupName"] = "perry", + ["livery_id"] = "ReubenJames", + ["skill"] = "Average", + ["country"] = "australia", + ["coalition"] = "neutral", + ["x"] = -153426.17965693, + ["heading"] = 0, + ["category"] = "ship", + ["unitName"] = "Naval-1-1", + ["unitId"] = 67, + ["y"] = 342754.30716193, + ["countryId"] = 21, + }, -- end of ["Naval-1-1"] ["cargoBob"] = { ["shape_name"] = "ab-212_cargo", @@ -1605,26 +1685,4 @@ MEunitsByName = ["heading"] = 1.4977557614926, ["countryId"] = 2, }, -- end of ["USTanks2_4"] - ["RuBTRs1"] = - { - ["type"] = "BTR-80", - ["point"] = - { - ["y"] = 654545.71428571, - ["x"] = -292842.85714286, - }, -- end of ["point"] - ["groupId"] = 13, - ["skill"] = "Average", - ["country"] = "russia", - ["groupName"] = "RuBTRs", - ["y"] = 654545.71428571, - ["coalition"] = "red", - ["x"] = -292842.85714286, - ["unitId"] = 27, - ["category"] = "vehicle", - ["unitName"] = "RuBTRs1", - ["playerCanDrive"] = true, - ["heading"] = -1.7994767003775, - ["countryId"] = 0, - }, -- end of ["RuBTRs1"] } -- end of MEunitsByName diff --git a/Example DBs/mist_DBs_MEunitsByNum.lua b/Example DBs/mist_DBs_MEunitsByNum.lua index 2edae05..e1bcc74 100644 --- a/Example DBs/mist_DBs_MEunitsByNum.lua +++ b/Example DBs/mist_DBs_MEunitsByNum.lua @@ -108,8 +108,8 @@ MEunitsByNum = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -118,7 +118,7 @@ MEunitsByNum = ["unitName"] = "Rotary-1-1", ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["groupId"] = 45, ["groupName"] = "nH", ["callsign"] = @@ -129,11 +129,11 @@ MEunitsByNum = ["name"] = "Springfield11", }, -- end of ["callsign"] ["countryId"] = 21, - ["x"] = -155967.80633993, + ["x"] = -158700.87914814, ["skill"] = "High", - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["unitId"] = 68, - ["y"] = 405888.85058741, + ["y"] = 404406.46136648, ["coalition"] = "neutral", ["speed"] = 44.444444444444, }, -- end of [5] @@ -709,6 +709,28 @@ MEunitsByNum = ["countryId"] = 2, }, -- end of [31] [32] = + { + ["type"] = "AAV7", + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["skill"] = "Average", + ["country"] = "usa", + ["groupName"] = "poly", + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["heading"] = 2.3261877017598, + ["countryId"] = 2, + }, -- end of [32] + [33] = { ["alt"] = 2000, ["point"] = @@ -741,8 +763,8 @@ MEunitsByNum = ["y"] = 662142.85714286, ["coalition"] = "blue", ["speed"] = 138.88888888889, - }, -- end of [32] - [33] = + }, -- end of [33] + [34] = { ["alt"] = 2000, ["point"] = @@ -775,8 +797,8 @@ MEunitsByNum = ["y"] = 668428.57142857, ["coalition"] = "blue", ["speed"] = 138.88888888889, - }, -- end of [33] - [34] = + }, -- end of [34] + [35] = { ["alt"] = 2000, ["point"] = @@ -789,11 +811,17 @@ MEunitsByNum = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #1_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, ["groupId"] = 6, ["groupName"] = "A-10C Client #1", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -318142.85714286, ["callsign"] = { [1] = 3, @@ -801,16 +829,13 @@ MEunitsByNum = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -318142.85714286, - ["skill"] = "Client", ["heading"] = -0.67060113146646, ["unitId"] = 11, ["y"] = 636428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, - }, -- end of [34] - [35] = + }, -- end of [35] + [36] = { ["alt"] = 2000, ["point"] = @@ -823,11 +848,17 @@ MEunitsByNum = ["onboard_num"] = "52", ["category"] = "plane", ["unitName"] = "A-10C Client #2_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, ["groupId"] = 7, ["groupName"] = "A-10C Client #2", + ["skill"] = "Client", + ["coalition"] = "blue", + ["x"] = -315857.14285714, ["callsign"] = { [1] = 3, @@ -835,16 +866,13 @@ MEunitsByNum = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] - ["countryId"] = 2, - ["x"] = -315857.14285714, - ["skill"] = "Client", ["heading"] = -0.66079849060746, ["unitId"] = 12, ["y"] = 644428.57142857, - ["coalition"] = "blue", + ["countryId"] = 2, ["speed"] = 138.88888888889, - }, -- end of [35] - [36] = + }, -- end of [36] + [37] = { ["alt"] = 2000, ["point"] = @@ -877,8 +905,8 @@ MEunitsByNum = ["y"] = 682714.28571429, ["coalition"] = "blue", ["speed"] = 138.88888888889, - }, -- end of [36] - [37] = + }, -- end of [37] + [38] = { ["alt"] = 2000, ["hardpoint_racks"] = true, @@ -912,8 +940,8 @@ MEunitsByNum = ["countryId"] = 2, ["coalition"] = "blue", ["speed"] = 138.88888888889, - }, -- end of [37] - [38] = + }, -- end of [38] + [39] = { ["alt"] = 500, ["hardpoint_racks"] = true, @@ -947,8 +975,8 @@ MEunitsByNum = ["countryId"] = 2, ["coalition"] = "blue", ["speed"] = 55.555555555556, - }, -- end of [38] - [39] = + }, -- end of [39] + [40] = { ["alt"] = 500, ["point"] = @@ -981,8 +1009,8 @@ MEunitsByNum = ["y"] = 631695.14285713, ["coalition"] = "blue", ["speed"] = 55.555555555556, - }, -- end of [39] - [40] = + }, -- end of [40] + [41] = { ["type"] = "MOSCOW", ["point"] = @@ -1002,8 +1030,8 @@ MEunitsByNum = ["unitId"] = 15, ["y"] = 200000, ["countryId"] = 0, - }, -- end of [40] - [41] = + }, -- end of [41] + [42] = { ["type"] = "MOSCOW", ["point"] = @@ -1023,8 +1051,8 @@ MEunitsByNum = ["unitId"] = 16, ["y"] = 200800, ["countryId"] = 0, - }, -- end of [41] - [42] = + }, -- end of [42] + [43] = { ["type"] = "MOSCOW", ["point"] = @@ -1044,8 +1072,8 @@ MEunitsByNum = ["unitId"] = 17, ["y"] = 73571.428571428, ["countryId"] = 0, - }, -- end of [42] - [43] = + }, -- end of [43] + [44] = { ["type"] = "MOSCOW", ["point"] = @@ -1065,8 +1093,8 @@ MEunitsByNum = ["unitId"] = 18, ["y"] = 74371.428571428, ["countryId"] = 0, - }, -- end of [43] - [44] = + }, -- end of [44] + [45] = { ["type"] = "FARP", ["point"] = @@ -1086,8 +1114,8 @@ MEunitsByNum = ["groupId"] = 17, ["y"] = 617591.42857143, ["countryId"] = 0, - }, -- end of [44] - [45] = + }, -- end of [45] + [46] = { ["shape_name"] = "PalatkaB", ["type"] = "FARP Tent", @@ -1108,8 +1136,8 @@ MEunitsByNum = ["groupId"] = 18, ["countryId"] = 0, ["coalition"] = "red", - }, -- end of [45] - [46] = + }, -- end of [46] + [47] = { ["shape_name"] = "PalatkaB", ["type"] = "FARP Tent", @@ -1130,8 +1158,8 @@ MEunitsByNum = ["groupId"] = 19, ["countryId"] = 0, ["coalition"] = "red", - }, -- end of [46] - [47] = + }, -- end of [47] + [48] = { ["shape_name"] = "PalatkaB", ["type"] = "FARP Tent", @@ -1152,8 +1180,8 @@ MEunitsByNum = ["groupId"] = 36, ["countryId"] = 0, ["coalition"] = "red", - }, -- end of [47] - [48] = + }, -- end of [48] + [49] = { ["shape_name"] = "teplowoz", ["type"] = "Locomotive", @@ -1173,8 +1201,8 @@ MEunitsByNum = ["country"] = "russia", ["y"] = 652535.98623348, ["coalition"] = "red", - }, -- end of [48] - [49] = + }, -- end of [49] + [50] = { ["shape_name"] = "elektrowoz", ["type"] = "Electric locomotive", @@ -1194,8 +1222,8 @@ MEunitsByNum = ["country"] = "russia", ["y"] = 652535.98623348, ["coalition"] = "red", - }, -- end of [49] - [50] = + }, -- end of [50] + [51] = { ["type"] = "BTR-80", ["point"] = @@ -1216,8 +1244,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [50] - [51] = + }, -- end of [51] + [52] = { ["type"] = "BTR-80", ["point"] = @@ -1238,8 +1266,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [51] - [52] = + }, -- end of [52] + [53] = { ["type"] = "BTR-80", ["point"] = @@ -1260,8 +1288,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [52] - [53] = + }, -- end of [53] + [54] = { ["type"] = "BTR-80", ["point"] = @@ -1282,8 +1310,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [53] - [54] = + }, -- end of [54] + [55] = { ["type"] = "BTR-80", ["point"] = @@ -1304,8 +1332,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [54] - [55] = + }, -- end of [55] + [56] = { ["type"] = "BTR-80", ["point"] = @@ -1326,8 +1354,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = -1.7994767003775, ["countryId"] = 0, - }, -- end of [55] - [56] = + }, -- end of [56] + [57] = { ["type"] = "T-55", ["point"] = @@ -1348,8 +1376,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = 0, ["countryId"] = 0, - }, -- end of [56] - [57] = + }, -- end of [57] + [58] = { ["type"] = "T-55", ["point"] = @@ -1370,8 +1398,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = 0, ["countryId"] = 0, - }, -- end of [57] - [58] = + }, -- end of [58] + [59] = { ["type"] = "T-55", ["point"] = @@ -1392,8 +1420,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = 0, ["countryId"] = 0, - }, -- end of [58] - [59] = + }, -- end of [59] + [60] = { ["type"] = "T-55", ["point"] = @@ -1414,8 +1442,8 @@ MEunitsByNum = ["playerCanDrive"] = true, ["heading"] = 0, ["countryId"] = 0, - }, -- end of [59] - [60] = + }, -- end of [60] + [61] = { ["alt"] = 2000, ["point"] = @@ -1442,8 +1470,8 @@ MEunitsByNum = ["y"] = 590391.42857142, ["coalition"] = "red", ["speed"] = 138.88888888889, - }, -- end of [60] - [61] = + }, -- end of [61] + [62] = { ["alt"] = 2000, ["point"] = @@ -1470,8 +1498,8 @@ MEunitsByNum = ["y"] = 590431.42857142, ["coalition"] = "red", ["speed"] = 138.88888888889, - }, -- end of [61] - [62] = + }, -- end of [62] + [63] = { ["alt"] = 2000, ["point"] = @@ -1498,8 +1526,8 @@ MEunitsByNum = ["y"] = 590471.42857142, ["coalition"] = "red", ["speed"] = 138.88888888889, - }, -- end of [62] - [63] = + }, -- end of [63] + [64] = { ["alt"] = 500, ["point"] = @@ -1526,8 +1554,8 @@ MEunitsByNum = ["y"] = 615000, ["coalition"] = "red", ["speed"] = 55.555555555556, - }, -- end of [63] - [64] = + }, -- end of [64] + [65] = { ["alt"] = 500, ["point"] = @@ -1554,8 +1582,8 @@ MEunitsByNum = ["y"] = 615040, ["coalition"] = "red", ["speed"] = 55.555555555556, - }, -- end of [64] - [65] = + }, -- end of [65] + [66] = { ["alt"] = 500, ["point"] = @@ -1590,8 +1618,8 @@ MEunitsByNum = ["y"] = 603285.71428571, ["countryId"] = 0, ["speed"] = 55.555555555556, - }, -- end of [65] - [66] = + }, -- end of [66] + [67] = { ["alt"] = 500, ["point"] = @@ -1626,5 +1654,5 @@ MEunitsByNum = ["y"] = 603325.71428571, ["countryId"] = 0, ["speed"] = 55.555555555556, - }, -- end of [66] + }, -- end of [67] } -- end of MEunitsByNum diff --git a/Example DBs/mist_DBs_aliveUnits.lua b/Example DBs/mist_DBs_aliveUnits.lua index 88c5dd8..5f4628a 100644 --- a/Example DBs/mist_DBs_aliveUnits.lua +++ b/Example DBs/mist_DBs_aliveUnits.lua @@ -72,9 +72,9 @@ aliveUnits = ["countryId"] = 0, ["pos"] = { - ["y"] = 500.37903099767, - ["x"] = -244706.43852308, - ["z"] = 604117.46587221, + ["y"] = 500.3788887943, + ["x"] = -244713.7312031, + ["z"] = 604121.73495853, }, -- end of ["pos"] }, -- end of [16782080] [16784128] = @@ -104,7 +104,7 @@ aliveUnits = ["y"] = 628677.14285714, ["pos"] = { - ["y"] = 10.095517860365, + ["y"] = 10.066674498182, ["x"] = -273442.84374994, ["z"] = 628677.125, }, -- end of ["pos"] @@ -168,18 +168,18 @@ aliveUnits = ["y"] = 686871.42857143, ["pos"] = { - ["y"] = 47.898649326901, + ["y"] = 47.951910044284, ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16788224] [16792320] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -193,8 +193,8 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, ["coalition"] = "blue", ["type"] = "Hawk cwar", ["groupId"] = 35, @@ -202,9 +202,9 @@ aliveUnits = ["unitName"] = "Unit #008", ["pos"] = { - ["y"] = 59.343688964844, - ["x"] = -287236.5625, - ["z"] = 692310.625, + ["y"] = 60.085838317871, + ["x"] = -285216.25, + ["z"] = 689799.4375, }, -- end of ["pos"] }, -- end of [16792320] [16794368] = @@ -224,7 +224,7 @@ aliveUnits = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["groupName"] = "USA gnd 2", ["unitName"] = "USA gnd 2 unit2", ["countryId"] = 2, @@ -236,18 +236,18 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.876458812809, + ["y"] = 47.876796607959, ["x"] = -286447.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16794368] [16798464] = { - ["alt"] = 56, + ["alt"] = 68, ["point"] = { - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -257,31 +257,31 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557660227, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["unitId"] = 7024, ["unitName"] = "USA gnd 5 unit2", ["pos"] = { - ["y"] = 55.516570478325, - ["x"] = -288844.125, - ["z"] = 692622.625, + ["y"] = 68.242343870855, + ["x"] = -287590.1449949, + ["z"] = 695089.53310439, }, -- end of ["pos"] }, -- end of [16798464] [16800512] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -292,9 +292,9 @@ aliveUnits = ["id_"] = 16800512, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 180.44764340673, - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, + ["speed"] = 180.49294253728, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, ["unitName"] = "AUSTRALIA air 6 unit1", ["groupName"] = "AUSTRALIA air 6", ["callsign"] = @@ -305,17 +305,17 @@ aliveUnits = ["name"] = "Enfield11", }, -- end of ["callsign"] ["coalition"] = "neutral", - ["x"] = -198571, + ["x"] = -198560, ["unitId"] = 7032, ["type"] = "FA-18C_hornet", ["country"] = "australia", - ["y"] = 319610, + ["y"] = 319595, ["countryId"] = 21, ["pos"] = { - ["y"] = 1982.5736193491, - ["x"] = -199218.08789438, - ["z"] = 320499.17966247, + ["y"] = 1982.9801268833, + ["x"] = -199243.67266703, + ["z"] = 320534.47014546, }, -- end of ["pos"] }, -- end of [16800512] [16802560] = @@ -335,7 +335,7 @@ aliveUnits = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["groupName"] = "USA gnd 8", ["unitName"] = "USA gnd 8 unit1", ["countryId"] = 2, @@ -347,7 +347,7 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.898649326901, + ["y"] = 47.951913858982, ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] @@ -379,7 +379,7 @@ aliveUnits = ["pos"] = { ["y"] = 0, - ["x"] = -35022.383171048, + ["x"] = -35022.938607417, ["z"] = 200800, }, -- end of ["pos"] }, -- end of [16778240] @@ -424,9 +424,9 @@ aliveUnits = ["countryId"] = 0, ["pos"] = { - ["y"] = 505.77128309592, - ["x"] = -244650.95231236, - ["z"] = 604142.23039996, + ["y"] = 505.76930271528, + ["x"] = -244659.22325279, + ["z"] = 604147.642762, }, -- end of ["pos"] }, -- end of [16782336] [16784384] = @@ -456,7 +456,7 @@ aliveUnits = ["y"] = 628717.14285714, ["pos"] = { - ["y"] = 10.150873671384, + ["y"] = 10.15087317505, ["x"] = -273482.84374994, ["z"] = 628717.125, }, -- end of ["pos"] @@ -520,62 +520,50 @@ aliveUnits = ["y"] = 686871.42857143, ["pos"] = { - ["y"] = 47.876458812809, + ["y"] = 47.876790870956, ["x"] = -286447.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16788480] [16790528] = { - ["alt"] = 2000, ["point"] = { - ["y"] = 636428.57142857, - ["x"] = -318142.85714286, + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, }, -- end of ["point"] - ["alt_type"] = "BARO", - ["livery_id"] = "104th FS Maryland ANG, Baltimore (MD)", - ["onboard_num"] = "52", + ["skill"] = "Average", ["unit"] = { ["id_"] = 16790528, }, -- end of ["unit"] - ["category"] = "plane", - ["unitName"] = "A-10C Client #1_unit", - ["type"] = "A-10C", - ["speed"] = 138.88888888889, - ["country"] = "usa", - ["psi"] = 0.67060113146646, - ["groupId"] = 6, - ["groupName"] = "A-10C Client #1", - ["callsign"] = - { - [1] = 3, - [2] = 1, - [3] = 1, - ["name"] = "Uzi11", - }, -- end of ["callsign"] + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["heading"] = 2.3261877017598, + ["unitId"] = 70, + ["groupName"] = "poly", ["countryId"] = 2, - ["x"] = -318142.85714286, - ["skill"] = "Client", - ["heading"] = -0.67060113146646, - ["unitId"] = 11, - ["y"] = 636428.57142857, ["coalition"] = "blue", + ["x"] = -244729.2581753, + ["type"] = "AAV7", + ["groupId"] = 47, + ["country"] = "usa", + ["playerCanDrive"] = true, + ["y"] = 185783.38833846, ["pos"] = { - ["y"] = 1993.5936315369, - ["x"] = -314712.0686114, - ["z"] = 633704.21854011, + ["y"] = -2.0085389614105, + ["x"] = -244767.30964541, + ["z"] = 185823.78915671, }, -- end of ["pos"] }, -- end of [16790528] [16792576] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -585,30 +573,30 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557600419, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["unitId"] = 7001, ["unitName"] = "USA gnd 1 unit1", ["pos"] = { - ["y"] = 62.132940042538, - ["x"] = -286547.625, - ["z"] = 692663.0625, + ["y"] = 72.200818460582, + ["x"] = -284652.55858872, + ["z"] = 693755.91988087, }, -- end of ["pos"] }, -- end of [16792576] [16794624] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -620,9 +608,9 @@ aliveUnits = ["id_"] = 16794624, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 138.82033106075, - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, + ["speed"] = 138.85196364465, + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, ["unitName"] = "USA air 1 unit1", ["groupName"] = "USA air 1", ["callsign"] = @@ -637,22 +625,22 @@ aliveUnits = ["unitId"] = 7009, ["type"] = "B-52H", ["country"] = "usa", - ["y"] = 682741, + ["y"] = 682727, ["countryId"] = 2, ["pos"] = { - ["y"] = 1996.6071599354, - ["x"] = -288664.12396781, - ["z"] = 683967.64735556, + ["y"] = 1991.4670941319, + ["x"] = -288665.65259277, + ["z"] = 684001.27794778, }, -- end of ["pos"] }, -- end of [16794624] [16798720] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692459, - ["x"] = -288865, + ["y"] = 695151, + ["x"] = -287518, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -662,22 +650,22 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557638479, + ["heading"] = 1.4977557660229, ["country"] = "usa", ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["y"] = 692459, - ["x"] = -288865, + ["y"] = 695151, + ["x"] = -287518, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["unitId"] = 7025, ["unitName"] = "USA gnd 5 unit3", ["pos"] = { - ["y"] = 55.147941787021, - ["x"] = -288864.96875, - ["z"] = 692458.75, + ["y"] = 69.449898336486, + ["x"] = -287518.40594793, + ["z"] = 695151.14068808, }, -- end of ["pos"] }, -- end of [16798720] [16800768] = @@ -685,10 +673,11 @@ aliveUnits = ["alt"] = 0, ["point"] = { - ["y"] = 267963, - ["x"] = -165895, + ["y"] = 268869, + ["x"] = -163156, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["unit"] = { @@ -696,22 +685,22 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "ship", ["speed"] = 0, - ["heading"] = 0, - ["country"] = "australia", - ["groupName"] = "AUSTRALIA shp 3", - ["countryId"] = 21, - ["y"] = 267963, - ["x"] = -165895, - ["coalition"] = "neutral", ["type"] = "PERRY", - ["groupId"] = 1000078, - ["unitId"] = 7033, + ["groupId"] = 7021, + ["groupName"] = "AUSTRALIA shp 3", ["unitName"] = "AUSTRALIA shp 3 unit1", + ["coalition"] = "neutral", + ["x"] = -163156, + ["country"] = "australia", + ["y"] = 268869, + ["heading"] = 0, + ["unitId"] = 7033, + ["countryId"] = 21, ["pos"] = { ["y"] = 0, - ["x"] = -165895.203125, - ["z"] = 267962.75, + ["x"] = -163156.453125, + ["z"] = 268869.0625, }, -- end of ["pos"] }, -- end of [16800768] [16802816] = @@ -731,7 +720,7 @@ aliveUnits = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["groupName"] = "USA gnd 8", ["unitName"] = "USA gnd 8 unit2", ["countryId"] = 2, @@ -743,7 +732,7 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.876458812809, + ["y"] = 47.876796607959, ["x"] = -286447.15625, ["z"] = 686871.4375, }, -- end of ["pos"] @@ -848,8 +837,8 @@ aliveUnits = ["alt"] = 60, ["point"] = { - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -863,8 +852,8 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, ["coalition"] = "blue", ["type"] = "Hawk tr", ["groupId"] = 35, @@ -872,18 +861,18 @@ aliveUnits = ["unitName"] = "Unit #002", ["pos"] = { - ["y"] = 60.204387664795, - ["x"] = -287109.75, - ["z"] = 692389.375, + ["y"] = 60.353408813477, + ["x"] = -285145.125, + ["z"] = 689785.3125, }, -- end of ["pos"] }, -- end of [16790784] [16792832] = { - ["alt"] = 62, + ["alt"] = 73, ["point"] = { - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -893,31 +882,31 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557629417, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["unitId"] = 7002, ["unitName"] = "USA gnd 1 unit2", ["pos"] = { - ["y"] = 62.153499450007, - ["x"] = -286576.375, - ["z"] = 692678.3125, + ["y"] = 73.104113727721, + ["x"] = -284455.82134373, + ["z"] = 693770.54507245, }, -- end of ["pos"] }, -- end of [16792832] [16794880] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -928,9 +917,9 @@ aliveUnits = ["id_"] = 16794880, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 180.44764340673, - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, + ["speed"] = 180.49294253728, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, ["unitName"] = "AUSTRALIA air 2 unit1", ["groupName"] = "AUSTRALIA air 2", ["callsign"] = @@ -941,17 +930,17 @@ aliveUnits = ["name"] = "Enfield11", }, -- end of ["callsign"] ["coalition"] = "neutral", - ["x"] = -198571, + ["x"] = -198560, ["unitId"] = 7010, ["type"] = "FA-18C_hornet", ["country"] = "australia", - ["y"] = 319610, + ["y"] = 319595, ["countryId"] = 21, ["pos"] = { - ["y"] = 1987.7386604726, - ["x"] = -199510.01413918, - ["z"] = 320900.68619704, + ["y"] = 1988.2813909589, + ["x"] = -199535.70144928, + ["z"] = 320936.00557625, }, -- end of ["pos"] }, -- end of [16794880] [16796928] = @@ -978,23 +967,23 @@ aliveUnits = ["x"] = -286407, ["coalition"] = "blue", ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["unitId"] = 7018, ["unitName"] = "USA gnd 4 unit1", ["pos"] = { - ["y"] = 47.898649326901, + ["y"] = 47.951913858982, ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16796928] [16798976] = { - ["alt"] = 55, + ["alt"] = 68, ["point"] = { - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 694882, + ["x"] = -287479, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1004,31 +993,31 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557685601, + ["heading"] = 1.4977557575044, ["country"] = "usa", ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 694882, + ["x"] = -287479, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["unitId"] = 7026, ["unitName"] = "USA gnd 5 unit4", ["pos"] = { - ["y"] = 55.268961351506, - ["x"] = -289069.1875, - ["z"] = 692675.1875, + ["y"] = 67.549932193396, + ["x"] = -287479.33570923, + ["z"] = 694882.45568802, }, -- end of ["pos"] }, -- end of [16798976] [16801024] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1038,30 +1027,30 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557703724, + ["heading"] = 1.4977557645728, ["country"] = "usa", ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["unitId"] = 7034, ["unitName"] = "USA gnd 7 unit1", ["pos"] = { - ["y"] = 60.582493593272, - ["x"] = -287036.46875, - ["z"] = 692746.6875, + ["y"] = 73.449123755413, + ["x"] = -284025.43622442, + ["z"] = 693098.87273888, }, -- end of ["pos"] }, -- end of [16801024] [16803072] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1073,9 +1062,9 @@ aliveUnits = ["id_"] = 16803072, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 138.82033106075, - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, + ["speed"] = 138.85196364465, + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, ["unitName"] = "USA air 7 unit1", ["groupName"] = "USA air 7", ["callsign"] = @@ -1090,13 +1079,13 @@ aliveUnits = ["unitId"] = 7042, ["type"] = "B-52H", ["country"] = "usa", - ["y"] = 682741, + ["y"] = 682727, ["countryId"] = 2, ["pos"] = { - ["y"] = 1993.8119255802, - ["x"] = -288640.49392301, - ["z"] = 683447.76689601, + ["y"] = 1986.5427819389, + ["x"] = -288642.36046096, + ["z"] = 683488.83206213, }, -- end of ["pos"] }, -- end of [16803072] [16778752] = @@ -1126,8 +1115,8 @@ aliveUnits = ["pos"] = { ["y"] = 0, - ["x"] = -87204.40210409, - ["z"] = 74429.367184101, + ["x"] = -87204.18841578, + ["z"] = 74429.879538476, }, -- end of ["pos"] }, -- end of [16778752] [16780800] = @@ -1172,9 +1161,9 @@ aliveUnits = ["countryId"] = 21, ["pos"] = { - ["y"] = 1999.8866664847, - ["x"] = -201654.90095115, - ["z"] = 323850.09747815, + ["y"] = 1999.8908905735, + ["x"] = -201670.06422198, + ["z"] = 323870.94374406, }, -- end of ["pos"] }, -- end of [16780800] [16784896] = @@ -1204,7 +1193,7 @@ aliveUnits = ["y"] = 628797.14285714, ["pos"] = { - ["y"] = 10.188644519894, + ["y"] = 10.18864402356, ["x"] = -273562.84374994, ["z"] = 628797.125, }, -- end of ["pos"] @@ -1243,11 +1232,11 @@ aliveUnits = }, -- end of [16786944] [16791040] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1261,8 +1250,8 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, ["coalition"] = "blue", ["type"] = "Hawk sr", ["groupId"] = 35, @@ -1270,18 +1259,18 @@ aliveUnits = ["unitName"] = "Unit #003", ["pos"] = { - ["y"] = 60.477199554443, - ["x"] = -286935.375, - ["z"] = 692344.5, + ["y"] = 60.798156738281, + ["x"] = -285166.40625, + ["z"] = 689947.8125, }, -- end of ["pos"] }, -- end of [16791040] [16793088] = { - ["alt"] = 63, + ["alt"] = 72, ["point"] = { - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1291,22 +1280,22 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.497755762398, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["unitId"] = 7003, ["unitName"] = "USA gnd 1 unit3", ["pos"] = { - ["y"] = 62.580954381356, - ["x"] = -286538.78125, - ["z"] = 692773.75, + ["y"] = 72.269631188927, + ["x"] = -284638.74305088, + ["z"] = 693780.59223319, }, -- end of ["pos"] }, -- end of [16793088] [16795136] = @@ -1314,10 +1303,11 @@ aliveUnits = ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["unit"] = { @@ -1326,21 +1316,21 @@ aliveUnits = ["category"] = "ship", ["speed"] = 0, ["type"] = "PERRY", - ["groupId"] = 1000064, + ["groupId"] = 7007, ["groupName"] = "AUSTRALIA shp 1", ["unitName"] = "AUSTRALIA shp 1 unit1", - ["countryId"] = 21, - ["x"] = -161996, + ["coalition"] = "neutral", + ["x"] = -163065, ["country"] = "australia", + ["y"] = 265153, ["heading"] = 0, ["unitId"] = 7011, - ["y"] = 266228, - ["coalition"] = "neutral", + ["countryId"] = 21, ["pos"] = { ["y"] = 0, - ["x"] = -161996.171875, - ["z"] = 266228.0625, + ["x"] = -163065.140625, + ["z"] = 265152.96875, }, -- end of ["pos"] }, -- end of [16795136] [16797184] = @@ -1367,23 +1357,23 @@ aliveUnits = ["x"] = -286447, ["coalition"] = "blue", ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["unitId"] = 7019, ["unitName"] = "USA gnd 4 unit2", ["pos"] = { - ["y"] = 47.876458812809, + ["y"] = 47.876796607959, ["x"] = -286447.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16797184] [16801280] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1392,32 +1382,32 @@ aliveUnits = ["id_"] = 16801280, }, -- end of ["unit"] ["category"] = "vehicle", - ["speed"] = 0, - ["heading"] = 1.4977557703724, + ["speed"] = 5.0056692998623e-05, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["unitId"] = 7035, ["unitName"] = "USA gnd 7 unit2", ["pos"] = { - ["y"] = 61.440749131396, - ["x"] = -286920.125, - ["z"] = 692715.75, + ["y"] = 73.066103941006, + ["x"] = -284053.49892158, + ["z"] = 693012.19131309, }, -- end of ["pos"] }, -- end of [16801280] [16803328] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1428,9 +1418,9 @@ aliveUnits = ["id_"] = 16803328, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 180.44764340673, - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, + ["speed"] = 180.49294253728, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, ["unitName"] = "AUSTRALIA air 8 unit1", ["groupName"] = "AUSTRALIA air 8", ["callsign"] = @@ -1441,17 +1431,17 @@ aliveUnits = ["name"] = "Enfield11", }, -- end of ["callsign"] ["coalition"] = "neutral", - ["x"] = -198571, + ["x"] = -198560, ["unitId"] = 7043, ["type"] = "FA-18C_hornet", ["country"] = "australia", - ["y"] = 319610, + ["y"] = 319595, ["countryId"] = 21, ["pos"] = { - ["y"] = 1981.7122548331, - ["x"] = -199117.12610459, - ["z"] = 320360.47047424, + ["y"] = 1981.902511151, + ["x"] = -199142.78627169, + ["z"] = 320395.75279009, }, -- end of ["pos"] }, -- end of [16803328] [16779008] = @@ -1490,8 +1480,8 @@ aliveUnits = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -1505,7 +1495,7 @@ aliveUnits = ["type"] = "CH-47D", ["speed"] = 44.444444444444, ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["groupId"] = 45, ["groupName"] = "nH", ["callsign"] = @@ -1516,17 +1506,17 @@ aliveUnits = ["name"] = "Springfield11", }, -- end of ["callsign"] ["countryId"] = 21, - ["x"] = -155967.80633993, + ["x"] = -158700.87914814, ["skill"] = "High", - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["unitId"] = 68, - ["y"] = 405888.85058741, + ["y"] = 404406.46136648, ["coalition"] = "neutral", ["pos"] = { - ["y"] = 500.64671873889, - ["x"] = -157073.53157174, - ["z"] = 406486.38049955, + ["y"] = 500.64525308704, + ["x"] = -159785.02332676, + ["z"] = 405055.47811674, }, -- end of ["pos"] }, -- end of [16781056] [16785152] = @@ -1568,9 +1558,9 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 1999.973248024, - ["x"] = -288792.93014965, - ["z"] = 686803.9330616, + ["y"] = 1999.9268965107, + ["x"] = -288794.09031268, + ["z"] = 686828.94806039, }, -- end of ["pos"] }, -- end of [16785152] [16787200] = @@ -1600,18 +1590,18 @@ aliveUnits = ["y"] = 653171.42857143, ["pos"] = { - ["y"] = 10.572537613604, - ["x"] = -293144.68248471, - ["z"] = 653217.51526008, + ["y"] = 10.568131374762, + ["x"] = -293132.56916307, + ["z"] = 653229.31101923, }, -- end of ["pos"] }, -- end of [16787200] [16791296] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1625,8 +1615,8 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, ["coalition"] = "blue", ["type"] = "Hawk pcp", ["groupId"] = 35, @@ -1634,18 +1624,18 @@ aliveUnits = ["unitName"] = "Unit #004", ["pos"] = { - ["y"] = 59.278907775879, - ["x"] = -287213.125, - ["z"] = 692308.25, + ["y"] = 59.9983253479, + ["x"] = -285297.625, + ["z"] = 689856.375, }, -- end of ["pos"] }, -- end of [16791296] [16793344] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692553, - ["x"] = -286525, + ["y"] = 693653, + ["x"] = -284699, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1655,31 +1645,31 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557625792, + ["heading"] = 1.4977557629417, ["country"] = "usa", ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["y"] = 692553, - ["x"] = -286525, + ["y"] = 693653, + ["x"] = -284699, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["unitId"] = 7004, ["unitName"] = "USA gnd 1 unit4", ["pos"] = { - ["y"] = 61.802860325044, - ["x"] = -286525.1875, - ["z"] = 692553.1875, + ["y"] = 71.997656902822, + ["x"] = -284698.71782492, + ["z"] = 693652.50385317, }, -- end of ["pos"] }, -- end of [16793344] [16795392] = { - ["alt"] = 60, + ["alt"] = 66, ["point"] = { - ["y"] = 692171, - ["x"] = -286749, + ["y"] = 691761, + ["x"] = -284967, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1689,30 +1679,30 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557591357, + ["heading"] = 1.4977557594982, ["country"] = "usa", ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["y"] = 692171, - ["x"] = -286749, + ["y"] = 691761, + ["x"] = -284967, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["unitId"] = 7012, ["unitName"] = "USA gnd 3 unit1", ["pos"] = { - ["y"] = 60.223228220636, - ["x"] = -286748.875, - ["z"] = 692170.6875, + ["y"] = 65.668038424368, + ["x"] = -284974.27915004, + ["z"] = 691761.52921714, }, -- end of ["pos"] }, -- end of [16795392] [16797440] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1724,9 +1714,9 @@ aliveUnits = ["id_"] = 16797440, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 138.82033106075, - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, + ["speed"] = 138.85196364465, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, ["unitName"] = "USA air 3 unit1", ["groupName"] = "USA air 3", ["callsign"] = @@ -1741,22 +1731,22 @@ aliveUnits = ["unitId"] = 7020, ["type"] = "B-52H", ["country"] = "usa", - ["y"] = 682741, + ["y"] = 682727, ["countryId"] = 2, ["pos"] = { - ["y"] = 1995.9301841161, - ["x"] = -288658.13927969, - ["z"] = 683835.97909582, + ["y"] = 1988.5854966465, + ["x"] = -288653.69584605, + ["z"] = 683738.21954942, }, -- end of ["pos"] }, -- end of [16797440] [16801536] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1765,23 +1755,23 @@ aliveUnits = ["id_"] = 16801536, }, -- end of ["unit"] ["category"] = "vehicle", - ["speed"] = 0, - ["heading"] = 1.4977557642103, + ["speed"] = 0.00018869274936151, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["unitId"] = 7036, ["unitName"] = "USA gnd 7 unit3", ["pos"] = { - ["y"] = 60.660094632592, - ["x"] = -287056.09375, - ["z"] = 692580.1875, + ["y"] = 73.827574370095, + ["x"] = -283897.97030909, + ["z"] = 693025.56614306, }, -- end of ["pos"] }, -- end of [16801536] [16803584] = @@ -1789,10 +1779,11 @@ aliveUnits = ["alt"] = 0, ["point"] = { - ["y"] = 268804, - ["x"] = -165342, + ["y"] = 266075, + ["x"] = -162226, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["unit"] = { @@ -1801,21 +1792,21 @@ aliveUnits = ["category"] = "ship", ["speed"] = 0, ["type"] = "PERRY", - ["groupId"] = 1000085, + ["groupId"] = 7028, ["groupName"] = "AUSTRALIA shp 4", ["unitName"] = "AUSTRALIA shp 4 unit1", - ["countryId"] = 21, - ["x"] = -165342, + ["coalition"] = "neutral", + ["x"] = -162226, ["country"] = "australia", + ["y"] = 266075, ["heading"] = 0, ["unitId"] = 7044, - ["y"] = 268804, - ["coalition"] = "neutral", + ["countryId"] = 21, ["pos"] = { ["y"] = 0, - ["x"] = -165341.6875, - ["z"] = 268803.59375, + ["x"] = -162225.578125, + ["z"] = 266075.21875, }, -- end of ["pos"] }, -- end of [16803584] [16779264] = @@ -1845,7 +1836,7 @@ aliveUnits = ["pos"] = { ["y"] = 0, - ["x"] = -356011.33163927, + ["x"] = -356011.92788773, ["z"] = 444653.03125, }, -- end of ["pos"] }, -- end of [16779264] @@ -1921,9 +1912,9 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 1987.9387593046, - ["x"] = -277034.63646201, - ["z"] = 663246.40874413, + ["y"] = 1987.9963939735, + ["x"] = -277035.05136533, + ["z"] = 663222.28561488, }, -- end of ["pos"] }, -- end of [16785408] [16787456] = @@ -1953,18 +1944,18 @@ aliveUnits = ["y"] = 653211.42857143, ["pos"] = { - ["y"] = 10.578834078627, - ["x"] = -293125.71890831, - ["z"] = 653211.4445169, + ["y"] = 10.578705771489, + ["x"] = -293125.35483757, + ["z"] = 653211.79188619, }, -- end of ["pos"] }, -- end of [16787456] [16791552] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1978,8 +1969,8 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, ["coalition"] = "blue", ["type"] = "Hawk ln", ["groupId"] = 35, @@ -1987,18 +1978,18 @@ aliveUnits = ["unitName"] = "Unit #005", ["pos"] = { - ["y"] = 60.256237030029, - ["x"] = -286989.21875, - ["z"] = 692320.625, + ["y"] = 60.672706604004, + ["x"] = -285057.90625, + ["z"] = 689796.125, }, -- end of ["pos"] }, -- end of [16791552] [16795648] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692204, - ["x"] = -286580, + ["y"] = 691809, + ["x"] = -284861, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2008,31 +1999,31 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557614918, + ["heading"] = 1.4977557625792, ["country"] = "usa", ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["y"] = 692204, - ["x"] = -286580, + ["y"] = 691809, + ["x"] = -284861, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["unitId"] = 7013, ["unitName"] = "USA gnd 3 unit2", ["pos"] = { - ["y"] = 61.010461009831, - ["x"] = -286580.125, - ["z"] = 692204.3125, + ["y"] = 66.202428226177, + ["x"] = -284860.57541592, + ["z"] = 691809.18734628, }, -- end of ["pos"] }, -- end of [16795648] [16797696] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -2043,9 +2034,9 @@ aliveUnits = ["id_"] = 16797696, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 180.44764340673, - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, + ["speed"] = 180.49294253728, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, ["unitName"] = "AUSTRALIA air 4 unit1", ["groupName"] = "AUSTRALIA air 4", ["callsign"] = @@ -2056,17 +2047,17 @@ aliveUnits = ["name"] = "Enfield11", }, -- end of ["callsign"] ["coalition"] = "neutral", - ["x"] = -198571, + ["x"] = -198560, ["unitId"] = 7021, ["type"] = "FA-18C_hornet", ["country"] = "australia", - ["y"] = 319610, + ["y"] = 319595, ["countryId"] = 21, ["pos"] = { - ["y"] = 1985.7807881899, - ["x"] = -199409.15463692, - ["z"] = 320762.00574708, + ["y"] = 1984.4381141247, + ["x"] = -199333.93720144, + ["z"] = 320658.58260143, }, -- end of ["pos"] }, -- end of [16797696] [16799744] = @@ -2086,7 +2077,7 @@ aliveUnits = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["groupName"] = "USA gnd 6", ["unitName"] = "USA gnd 6 unit1", ["countryId"] = 2, @@ -2098,18 +2089,18 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.898649326901, + ["y"] = 47.951913858982, ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16799744] [16801792] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2118,23 +2109,23 @@ aliveUnits = ["id_"] = 16801792, }, -- end of ["unit"] ["category"] = "vehicle", - ["speed"] = 0, - ["heading"] = 1.4977557678351, + ["speed"] = 0.0040063578450385, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["unitId"] = 7037, ["unitName"] = "USA gnd 7 unit4", ["pos"] = { - ["y"] = 59.767864148883, - ["x"] = -287189, - ["z"] = 692752.125, + ["y"] = 72.86544323544, + ["x"] = -284127.15798047, + ["z"] = 693093.5300743, }, -- end of ["pos"] }, -- end of [16801792] [16781568] = @@ -2170,9 +2161,9 @@ aliveUnits = ["coalition"] = "red", ["pos"] = { - ["y"] = 499.8747028694, - ["x"] = -238949.20024268, - ["z"] = 615837.57975198, + ["y"] = 499.87455623693, + ["x"] = -238956.2788112, + ["z"] = 615841.88237501, }, -- end of ["pos"] }, -- end of [16781568] [16783616] = @@ -2202,9 +2193,9 @@ aliveUnits = ["y"] = 654705.71428571, ["pos"] = { - ["y"] = 12.121318842345, - ["x"] = -293053.87250888, - ["z"] = 654685.48309245, + ["y"] = 12.108674123943, + ["x"] = -293049.90666016, + ["z"] = 654690.7394103, }, -- end of ["pos"] }, -- end of [16783616] [16785664] = @@ -2247,9 +2238,9 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 1008.3250117132, - ["x"] = -297374.29690418, - ["z"] = 630621.14467261, + ["y"] = 906.91984020786, + ["x"] = -297283.57892094, + ["z"] = 630594.05424481, }, -- end of ["pos"] }, -- end of [16785664] [16787712] = @@ -2279,18 +2270,18 @@ aliveUnits = ["y"] = 653251.42857143, ["pos"] = { - ["y"] = 10.550925677546, - ["x"] = -293165.71913937, - ["z"] = 653251.45406541, + ["y"] = 10.550800822096, + ["x"] = -293165.35664945, + ["z"] = 653251.79444434, }, -- end of ["pos"] }, -- end of [16787712] [16791808] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2304,8 +2295,8 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, ["coalition"] = "blue", ["type"] = "Hawk ln", ["groupId"] = 35, @@ -2313,18 +2304,18 @@ aliveUnits = ["unitName"] = "Unit #006", ["pos"] = { - ["y"] = 59.320571899414, - ["x"] = -287224.9375, - ["z"] = 692297, + ["y"] = 60.813724517822, + ["x"] = -285191.375, + ["z"] = 689972.5, }, -- end of ["pos"] }, -- end of [16791808] [16795904] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692150, - ["x"] = -286560, + ["y"] = 691744, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2334,22 +2325,22 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557614918, + ["heading"] = 1.4977557573233, ["country"] = "usa", ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["y"] = 692150, - ["x"] = -286560, + ["y"] = 691744, + ["x"] = -284982, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["unitId"] = 7014, ["unitName"] = "USA gnd 3 unit3", ["pos"] = { - ["y"] = 61.029124264432, - ["x"] = -286560.4375, - ["z"] = 692149.75, + ["y"] = 65.613190076765, + ["x"] = -284981.99382804, + ["z"] = 691744.15185067, }, -- end of ["pos"] }, -- end of [16795904] [16797952] = @@ -2357,10 +2348,11 @@ aliveUnits = ["alt"] = 0, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["unit"] = { @@ -2369,21 +2361,21 @@ aliveUnits = ["category"] = "ship", ["speed"] = 0, ["type"] = "PERRY", - ["groupId"] = 1000071, + ["groupId"] = 7014, ["groupName"] = "AUSTRALIA shp 2", ["unitName"] = "AUSTRALIA shp 2 unit1", - ["countryId"] = 21, - ["x"] = -163302, + ["coalition"] = "neutral", + ["x"] = -161099, ["country"] = "australia", + ["y"] = 267048, ["heading"] = 0, ["unitId"] = 7022, - ["y"] = 266588, - ["coalition"] = "neutral", + ["countryId"] = 21, ["pos"] = { ["y"] = 0, - ["x"] = -163301.53125, - ["z"] = 266587.84375, + ["x"] = -161098.828125, + ["z"] = 267047.71875, }, -- end of ["pos"] }, -- end of [16797952] [16800000] = @@ -2403,7 +2395,7 @@ aliveUnits = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["groupName"] = "USA gnd 6", ["unitName"] = "USA gnd 6 unit2", ["countryId"] = 2, @@ -2415,7 +2407,7 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.876458812809, + ["y"] = 47.876796607959, ["x"] = -286447.15625, ["z"] = 686871.4375, }, -- end of ["pos"] @@ -2485,9 +2477,9 @@ aliveUnits = ["coalition"] = "red", ["pos"] = { - ["y"] = 504.75249923986, - ["x"] = -238883.82861758, - ["z"] = 615855.50953259, + ["y"] = 504.74683163756, + ["x"] = -238890.14085771, + ["z"] = 615859.871189, }, -- end of ["pos"] }, -- end of [16781824] [16783872] = @@ -2517,9 +2509,9 @@ aliveUnits = ["y"] = 654745.71428571, ["pos"] = { - ["y"] = 12.086855628276, - ["x"] = -293050.72967002, - ["z"] = 654713.35180124, + ["y"] = 12.084689792163, + ["x"] = -293047.55373527, + ["z"] = 654726.74612589, }, -- end of ["pos"] }, -- end of [16783872] [16785920] = @@ -2561,9 +2553,9 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 1011.7621737228, - ["x"] = -297465.37068742, - ["z"] = 630731.8628239, + ["y"] = 878.19875528093, + ["x"] = -297388.94747588, + ["z"] = 630756.80669453, }, -- end of ["pos"] }, -- end of [16785920] [16787968] = @@ -2593,18 +2585,18 @@ aliveUnits = ["y"] = 653291.42857143, ["pos"] = { - ["y"] = 10.50932051217, - ["x"] = -293205.71484427, - ["z"] = 653291.45528884, + ["y"] = 10.50833521483, + ["x"] = -293205.33993311, + ["z"] = 653291.76519743, }, -- end of ["pos"] }, -- end of [16787968] [16792064] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2618,8 +2610,8 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, ["coalition"] = "blue", ["type"] = "Hawk ln", ["groupId"] = 35, @@ -2627,9 +2619,9 @@ aliveUnits = ["unitName"] = "Unit #007", ["pos"] = { - ["y"] = 60.971343994141, - ["x"] = -287012, - ["z"] = 692445.375, + ["y"] = 60.498825073242, + ["x"] = -285149.125, + ["z"] = 689859.75, }, -- end of ["pos"] }, -- end of [16792064] [16794112] = @@ -2649,7 +2641,7 @@ aliveUnits = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["groupName"] = "USA gnd 2", ["unitName"] = "USA gnd 2 unit1", ["countryId"] = 2, @@ -2661,18 +2653,18 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.898649326901, + ["y"] = 47.951913858982, ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16794112] [16796160] = { - ["alt"] = 60, + ["alt"] = 65, ["point"] = { - ["y"] = 691995, - ["x"] = -286713, + ["y"] = 691757, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2682,31 +2674,31 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557627604, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["y"] = 691995, - ["x"] = -286713, + ["y"] = 691757, + ["x"] = -285098, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["unitId"] = 7015, ["unitName"] = "USA gnd 3 unit4", ["pos"] = { - ["y"] = 60.180648050549, - ["x"] = -286712.65625, - ["z"] = 691995.1875, + ["y"] = 65.202388017452, + ["x"] = -285098.05627546, + ["z"] = 691756.83934286, }, -- end of ["pos"] }, -- end of [16796160] [16798208] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 695073, + ["x"] = -287442, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2716,30 +2708,30 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557725472, + ["heading"] = 1.4977557701918, ["country"] = "usa", ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 695073, + ["x"] = -287442, ["coalition"] = "blue", ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["unitId"] = 7023, ["unitName"] = "USA gnd 5 unit1", ["pos"] = { - ["y"] = 55.241109533523, - ["x"] = -288904.3125, - ["z"] = 692562.6875, + ["y"] = 69.448234452506, + ["x"] = -287444.96647698, + ["z"] = 695072.71255626, }, -- end of ["pos"] }, -- end of [16798208] [16800256] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2751,9 +2743,9 @@ aliveUnits = ["id_"] = 16800256, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 138.82033106075, - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, + ["speed"] = 138.85196364465, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, ["unitName"] = "USA air 5 unit1", ["groupName"] = "USA air 5", ["callsign"] = @@ -2768,13 +2760,13 @@ aliveUnits = ["unitId"] = 7031, ["type"] = "B-52H", ["country"] = "usa", - ["y"] = 682741, + ["y"] = 682727, ["countryId"] = 2, ["pos"] = { - ["y"] = 1995.2387619438, - ["x"] = -288652.46873993, - ["z"] = 683711.22252834, + ["y"] = 1987.3907815825, + ["x"] = -288648.02914749, + ["z"] = 683613.54764354, }, -- end of ["pos"] }, -- end of [16800256] } -- end of aliveUnits diff --git a/Example DBs/mist_DBs_const.lua b/Example DBs/mist_DBs_const.lua index 63376da..8253999 100644 --- a/Example DBs/mist_DBs_const.lua +++ b/Example DBs/mist_DBs_const.lua @@ -8,67 +8,101 @@ const = ["Barracks 2"] = "kazarma2", ["Small house 2C"] = "dom2c", ["Military staff"] = "aviashtab", + ["Container 20ft"] = "container_20ft", + ["Tanker Elnya 160"] = "elnya", + ["Pipes big"] = "pipes_big_cargo", ["Tech hangar A"] = "ceh_ang_a", ["Oil derrick"] = "neftevyshka", ["Tech combine"] = "kombinat", ["Garage B"] = "garage_b", + ["Pilot standing"] = "pilot_parashut", ["Airshow_Crowd"] = "Crowd1", + ["Airshow_Cone"] = "Comp_cone", ["Hangar A"] = "angar_a", + ["Road outpost"] = "block-onroad", ["Repair workshop"] = "tech", ["Subsidiary structure D"] = "saray-d", + ["Outpost"] = "block", ["FARP Ammo Dump Coating"] = "SetkaKP", ["Small house 1C area"] = "dom2c-all", ["Tank 2"] = "airbase_tbilisi_tank_01", ["Boiler-house A"] = "kotelnaya_a", + ["Parachute"] = "parash", ["Workshop A"] = "tec_a", + ["Downed pilot"] = "cadaver", ["Small werehouse 1"] = "s1", + ["Bulk Cargo Ship Ivanov"] = "barge-1", + ["Fueltank"] = "fueltank_cargo", ["Garage small B"] = "garagh-small-b", ["Small werehouse 4"] = "s4", + ["Oiltank"] = "oiltank_cargo", + ["Container 40ft"] = "container_40ft", ["Shop"] = "magazin", + ["Bunker 2"] = "dot2", ["Subsidiary structure B"] = "saray-b", - ["FARP Fuel Depot"] = "GSM Rus", + ["FARP Fuel Depot"] = "gsm rus", + ["White_Flag"] = "H-Flag_W", ["Coach cargo"] = "wagon-gruz", + ["Oil rig"] = "oil_platform", + ["Helipad Single"] = "farp", ["Electric power box"] = "tr_budka", ["Tank 3"] = "airbase_tbilisi_tank_02", ["Red_Flag"] = "H-flag_R", + ["Gas platform"] = "gas_platform", ["Container red 3"] = "konteiner_red3", ["Garage A"] = "garage_a", ["Hangar B"] = "angar_b", + ["Trunks small"] = "trunks_small_cargo", ["Black_Tyre"] = "H-tyre_B", ["Cafe"] = "stolovaya", ["Restaurant 1"] = "restoran1", + ["Trunks long"] = "trunks_long_cargo", ["Subsidiary structure A"] = "saray-a", + ["Tetrapod"] = "tetrapod_cargo", ["Container white"] = "konteiner_white", ["Warehouse"] = "sklad", ["Tank"] = "bak", + ["Oil platform"] = "plavbaza", + ["Pipes small"] = "pipes_small_cargo", + ["Watch Tower Armed"] = "ohr-vyshka", + ["FARP Command Post"] = "kp-ug", ["Railway crossing B"] = "pereezd_small", + ["Railway crossing A"] = "pereezd_big", ["Subsidiary structure F"] = "saray-f", + ["Gate"] = "gate", ["Farm A"] = "ferma_a", + ["FARP"] = "farps", ["Small werehouse 3"] = "s3", + ["Passenger boat"] = "zwezdny", ["Water tower A"] = "wodokachka_a", + ["F-shape barrier"] = "f_bar_cargo", ["Railway station"] = "r_vok_sd", ["Coach a tank blue"] = "wagon-cisterna_blue", + ["Bunker 1"] = "dot", + ["Tech Hangar A"] = "ceh_ang_a", ["Supermarket A"] = "uniwersam_a", ["Coach a platform"] = "wagon-platforma", ["Garage small A"] = "garagh-small-a", + ["Container brown"] = "konteiner_brown", ["TV tower"] = "tele_bash", - ["Airshow_Cone"] = "Comp_cone", + ["Bulk Cargo Ship Yakushev"] = "barge-2", + ["Pilot F15 Parachute"] = "pilot_f15_parachute", ["Farm B"] = "ferma_b", ["GeneratorF"] = "GeneratorF", - ["White_Flag"] = "H-Flag_W", + ["Passenger liner"] = "yastrebow", ["Container red 2"] = "konteiner_red2", ["Coach a passenger"] = "wagon-pass", ["WC"] = "WC", ["Black_Tyre_WF"] = "H-tyre_B_WF", ["Electric locomotive"] = "elektrowoz", - ["Railway crossing A"] = "pereezd_big", + ["Armed house"] = "home1_a", ["Coach a tank yellow"] = "wagon-cisterna_yellow", ["Subsidiary structure 2"] = "hozdomik2", [".Ammunition depot"] = "SkladC", ["Small werehouse 2"] = "s2", ["Windsock"] = "H-Windsock_RW", ["Small house 1B"] = "domik1b", - ["Container brown"] = "konteiner_brown", + ["Container camo"] = "bw_container_cargo", ["Locomotive"] = "teplowoz", ["Subsidiary structure 1"] = "hozdomik1", ["Pump station"] = "nasos", @@ -82,7 +116,7 @@ const = ["Black_Tyre_RF"] = "H-tyre_B_RF", ["Comms tower M"] = "tele_bash_m", [".Command Center"] = "ComCenter", - ["Fuel tank"] = "toplivo-bak", + ["Fuel tank"] = "toplivo", ["Cargo1"] = "ab-212_cargo", ["Shelter B"] = "ukrytie_b", ["Chemical tank A"] = "him_bak_a", diff --git a/Example DBs/mist_DBs_deadObjects.lua b/Example DBs/mist_DBs_deadObjects.lua index 0823136..83a387d 100644 --- a/Example DBs/mist_DBs_deadObjects.lua +++ b/Example DBs/mist_DBs_deadObjects.lua @@ -1,150 +1,12 @@ deadObjects = { - [16782592] = - { - ["objectPos"] = - { - ["y"] = 11.730595023771, - ["x"] = -292856.66347804, - ["z"] = 654539.58489607, - }, -- end of ["objectPos"] - ["objectType"] = "vehicle", - ["objectData"] = - { - ["point"] = - { - ["y"] = 654545.71428571, - ["x"] = -292842.85714286, - }, -- end of ["point"] - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16782592, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["unitName"] = "RuBTRs1", - ["type"] = "BTR-80", - ["groupId"] = 13, - ["groupName"] = "RuBTRs", - ["countryId"] = 0, - ["coalition"] = "red", - ["x"] = -292842.85714286, - ["y"] = 654545.71428571, - ["heading"] = -1.7994767003775, - ["unitId"] = 27, - ["playerCanDrive"] = true, - ["country"] = "russia", - ["pos"] = - { - ["y"] = 11.73456417819, - ["x"] = -292855.65589344, - ["z"] = 654539.4776362, - }, -- end of ["pos"] - }, -- end of ["objectData"] - ["object"] = - { - ["id_"] = 16782592, - }, -- end of ["object"] - }, -- end of [16782592] - [16782848] = - { - ["objectPos"] = - { - ["y"] = 11.73993894825, - ["x"] = -292922.02212464, - ["z"] = 654583.90753159, - }, -- end of ["objectPos"] - ["objectType"] = "vehicle", - ["objectData"] = - { - ["point"] = - { - ["y"] = 654585.71428571, - ["x"] = -292882.85714286, - }, -- end of ["point"] - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16782848, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["unitName"] = "RuBTRs2", - ["type"] = "BTR-80", - ["groupId"] = 13, - ["groupName"] = "RuBTRs", - ["countryId"] = 0, - ["coalition"] = "red", - ["x"] = -292882.85714286, - ["y"] = 654585.71428571, - ["heading"] = -1.7994767003775, - ["unitId"] = 28, - ["playerCanDrive"] = true, - ["country"] = "russia", - ["pos"] = - { - ["y"] = 11.750775044011, - ["x"] = -292918.85355006, - ["z"] = 654583.32898538, - }, -- end of ["pos"] - }, -- end of ["objectData"] - ["object"] = - { - ["id_"] = 16782848, - }, -- end of ["object"] - }, -- end of [16782848] - [16783104] = - { - ["objectPos"] = - { - ["y"] = 11.787782375471, - ["x"] = -292989.15632544, - ["z"] = 654627.05222202, - }, -- end of ["objectPos"] - ["objectType"] = "vehicle", - ["objectData"] = - { - ["point"] = - { - ["y"] = 654625.71428571, - ["x"] = -292922.85714286, - }, -- end of ["point"] - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16783104, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["unitName"] = "RuBTRs3", - ["type"] = "BTR-80", - ["groupId"] = 13, - ["groupName"] = "RuBTRs", - ["countryId"] = 0, - ["coalition"] = "red", - ["x"] = -292922.85714286, - ["y"] = 654625.71428571, - ["heading"] = -1.7994767003775, - ["unitId"] = 29, - ["playerCanDrive"] = true, - ["country"] = "russia", - ["pos"] = - { - ["y"] = 11.784134667198, - ["x"] = -292988.34774035, - ["z"] = 654626.95184203, - }, -- end of ["pos"] - }, -- end of ["objectData"] - ["object"] = - { - ["id_"] = 16783104, - }, -- end of ["object"] - }, -- end of [16783104] [16783360] = { ["objectPos"] = { - ["y"] = 12.117786843734, - ["x"] = -293044.08971735, - ["z"] = 654661.12095178, + ["y"] = 11.949347758943, + ["x"] = -293002.76155801, + ["z"] = 654661.93956923, }, -- end of ["objectPos"] ["objectType"] = "vehicle", ["objectData"] = @@ -174,9 +36,9 @@ deadObjects = ["country"] = "russia", ["pos"] = { - ["y"] = 12.104105100501, - ["x"] = -293040.29557322, - ["z"] = 654661.78361224, + ["y"] = 11.942705180761, + ["x"] = -292999.01167319, + ["z"] = 654661.6137778, }, -- end of ["pos"] }, -- end of ["objectData"] ["object"] = @@ -184,4 +46,234 @@ deadObjects = ["id_"] = 16783360, }, -- end of ["object"] }, -- end of [16783360] + [16782592] = + { + ["objectPos"] = + { + ["y"] = 11.745858960922, + ["x"] = -292853.03376572, + ["z"] = 654539.31845625, + }, -- end of ["objectPos"] + ["objectType"] = "vehicle", + ["objectData"] = + { + ["point"] = + { + ["y"] = 654545.71428571, + ["x"] = -292842.85714286, + }, -- end of ["point"] + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16782592, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["unitName"] = "RuBTRs1", + ["type"] = "BTR-80", + ["groupId"] = 13, + ["groupName"] = "RuBTRs", + ["countryId"] = 0, + ["coalition"] = "red", + ["x"] = -292842.85714286, + ["y"] = 654545.71428571, + ["heading"] = -1.7994767003775, + ["unitId"] = 27, + ["playerCanDrive"] = true, + ["country"] = "russia", + ["pos"] = + { + ["y"] = 11.750308354347, + ["x"] = -292852.11861931, + ["z"] = 654539.33966137, + }, -- end of ["pos"] + }, -- end of ["objectData"] + ["object"] = + { + ["id_"] = 16782592, + }, -- end of ["object"] + }, -- end of [16782592] + [16783616] = + { + ["objectPos"] = + { + ["y"] = 12.114658336158, + ["x"] = -293052.09177348, + ["z"] = 654688.79118826, + }, -- end of ["objectPos"] + ["objectType"] = "vehicle", + ["objectData"] = + { + ["point"] = + { + ["y"] = 654705.71428571, + ["x"] = -293002.85714286, + }, -- end of ["point"] + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16783616, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["unitName"] = "RuBTRs5", + ["type"] = "BTR-80", + ["groupId"] = 13, + ["groupName"] = "RuBTRs", + ["countryId"] = 0, + ["coalition"] = "red", + ["x"] = -293002.85714286, + ["y"] = 654705.71428571, + ["heading"] = -1.7994767003775, + ["unitId"] = 31, + ["playerCanDrive"] = true, + ["country"] = "russia", + ["pos"] = + { + ["y"] = 12.108674123943, + ["x"] = -293049.90666016, + ["z"] = 654690.7394103, + }, -- end of ["pos"] + }, -- end of ["objectData"] + ["object"] = + { + ["id_"] = 16783616, + }, -- end of ["object"] + }, -- end of [16783616] + [16782848] = + { + ["objectPos"] = + { + ["y"] = 11.895307197448, + ["x"] = -292885.90343864, + ["z"] = 654581.74191148, + }, -- end of ["objectPos"] + ["objectType"] = "vehicle", + ["objectData"] = + { + ["point"] = + { + ["y"] = 654585.71428571, + ["x"] = -292882.85714286, + }, -- end of ["point"] + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16782848, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["unitName"] = "RuBTRs2", + ["type"] = "BTR-80", + ["groupId"] = 13, + ["groupName"] = "RuBTRs", + ["countryId"] = 0, + ["coalition"] = "red", + ["x"] = -292882.85714286, + ["y"] = 654585.71428571, + ["heading"] = -1.7994767003775, + ["unitId"] = 28, + ["playerCanDrive"] = true, + ["country"] = "russia", + ["pos"] = + { + ["y"] = 11.896243705612, + ["x"] = -292885.8154643, + ["z"] = 654581.81480703, + }, -- end of ["pos"] + }, -- end of ["objectData"] + ["object"] = + { + ["id_"] = 16782848, + }, -- end of ["object"] + }, -- end of [16782848] + [16783872] = + { + ["objectPos"] = + { + ["y"] = 12.083325901948, + ["x"] = -293047.96598556, + ["z"] = 654725.0984902, + }, -- end of ["objectPos"] + ["objectType"] = "vehicle", + ["objectData"] = + { + ["point"] = + { + ["y"] = 654745.71428571, + ["x"] = -293042.85714286, + }, -- end of ["point"] + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16783872, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["unitName"] = "RuBTRs6", + ["type"] = "BTR-80", + ["groupId"] = 13, + ["groupName"] = "RuBTRs", + ["countryId"] = 0, + ["coalition"] = "red", + ["x"] = -293042.85714286, + ["y"] = 654745.71428571, + ["heading"] = -1.7994767003775, + ["unitId"] = 32, + ["playerCanDrive"] = true, + ["country"] = "russia", + ["pos"] = + { + ["y"] = 12.084689792163, + ["x"] = -293047.55373527, + ["z"] = 654726.74612589, + }, -- end of ["pos"] + }, -- end of ["objectData"] + ["object"] = + { + ["id_"] = 16783872, + }, -- end of ["object"] + }, -- end of [16783872] + [16783104] = + { + ["objectPos"] = + { + ["y"] = 11.916789886161, + ["x"] = -292939.16858087, + ["z"] = 654619.78649539, + }, -- end of ["objectPos"] + ["objectType"] = "vehicle", + ["objectData"] = + { + ["point"] = + { + ["y"] = 654625.71428571, + ["x"] = -292922.85714286, + }, -- end of ["point"] + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16783104, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["unitName"] = "RuBTRs3", + ["type"] = "BTR-80", + ["groupId"] = 13, + ["groupName"] = "RuBTRs", + ["countryId"] = 0, + ["coalition"] = "red", + ["x"] = -292922.85714286, + ["y"] = 654625.71428571, + ["heading"] = -1.7994767003775, + ["unitId"] = 29, + ["playerCanDrive"] = true, + ["country"] = "russia", + ["pos"] = + { + ["y"] = 11.927206059256, + ["x"] = -292936.5144784, + ["z"] = 654619.49063824, + }, -- end of ["pos"] + }, -- end of ["objectData"] + ["object"] = + { + ["id_"] = 16783104, + }, -- end of ["object"] + }, -- end of [16783104] } -- end of deadObjects diff --git a/Example DBs/mist_DBs_dynGroupsAdded.lua b/Example DBs/mist_DBs_dynGroupsAdded.lua index c674dd9..891d013 100644 --- a/Example DBs/mist_DBs_dynGroupsAdded.lua +++ b/Example DBs/mist_DBs_dynGroupsAdded.lua @@ -12,8 +12,8 @@ dynGroupsAdded = ["alt"] = 60, ["point"] = { - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -23,8 +23,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287110, - ["y"] = 692389, + ["x"] = -285145, + ["y"] = 689785, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -33,11 +33,11 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -47,8 +47,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286935, - ["y"] = 692345, + ["x"] = -285166, + ["y"] = 689948, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -57,11 +57,11 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -71,8 +71,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287213, - ["y"] = 692308, + ["x"] = -285298, + ["y"] = 689856, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -81,11 +81,11 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -95,8 +95,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286989, - ["y"] = 692321, + ["x"] = -285058, + ["y"] = 689796, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -105,11 +105,11 @@ dynGroupsAdded = }, -- end of [4] [5] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -119,8 +119,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287225, - ["y"] = 692297, + ["x"] = -285191, + ["y"] = 689973, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -129,11 +129,11 @@ dynGroupsAdded = }, -- end of [5] [6] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -143,8 +143,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287012, - ["y"] = 692445, + ["x"] = -285149, + ["y"] = 689860, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -153,11 +153,11 @@ dynGroupsAdded = }, -- end of [6] [7] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -167,8 +167,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287237, - ["y"] = 692311, + ["x"] = -285216, + ["y"] = 689799, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -197,10 +197,11 @@ dynGroupsAdded = ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 1 unit1", @@ -208,22 +209,22 @@ dynGroupsAdded = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -161996, + ["x"] = -163065, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000064, ["coalition"] = "neutral", - ["y"] = 266228, + ["type"] = "PERRY", + ["groupId"] = 7007, + ["y"] = 265153, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 1", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000064, + ["groupId"] = 7007, ["groupName"] = "AUSTRALIA shp 1", }, -- end of [2] [3] = @@ -236,20 +237,20 @@ dynGroupsAdded = { [1] = { - ["alt"] = 61, + ["alt"] = 65, ["type"] = "Sandbox", ["point"] = { - ["y"] = 690788, - ["x"] = -285547, + ["y"] = 693778, + ["x"] = -286660, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 690788, + ["y"] = 693778, ["groupName"] = "USA static 1", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285547, + ["x"] = -286660, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 1", @@ -260,7 +261,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -271,29 +272,29 @@ dynGroupsAdded = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000058, + ["groupId"] = 7001, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286548, - ["y"] = 692663, - ["heading"] = 1.4977557600419, + ["x"] = -284648, + ["y"] = 693761, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -301,23 +302,23 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 62, + ["alt"] = 73, ["point"] = { - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286576, - ["y"] = 692678, - ["heading"] = 1.4977557629417, + ["x"] = -284456, + ["y"] = 693771, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -325,23 +326,23 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 63, + ["alt"] = 72, ["point"] = { - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286539, - ["y"] = 692774, - ["heading"] = 1.497755762398, + ["x"] = -284639, + ["y"] = 693781, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -349,23 +350,23 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692553, - ["x"] = -286525, + ["y"] = 693653, + ["x"] = -284699, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286525, - ["y"] = 692553, - ["heading"] = 1.4977557625792, + ["x"] = -284699, + ["y"] = 693653, + ["heading"] = 1.4977557629417, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -374,7 +375,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 1", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -386,7 +387,7 @@ dynGroupsAdded = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 2", ["modulation"] = 0, - ["groupId"] = 1000063, + ["groupId"] = 7006, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 2", ["hidden"] = false, @@ -394,11 +395,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -406,14 +407,14 @@ dynGroupsAdded = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 2 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, ["groupName"] = "AUSTRALIA air 2", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7010, @@ -428,7 +429,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -440,7 +441,7 @@ dynGroupsAdded = ["country"] = "usa", ["groupName"] = "USA air 1", ["modulation"] = 0, - ["groupId"] = 1000062, + ["groupId"] = 7005, ["coalitionId"] = 2, ["name"] = "USA air 1", ["hidden"] = false, @@ -448,10 +449,10 @@ dynGroupsAdded = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -460,14 +461,14 @@ dynGroupsAdded = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 1 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, ["groupName"] = "USA air 1", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7009, @@ -482,7 +483,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -493,7 +494,7 @@ dynGroupsAdded = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000061, + ["groupId"] = 7004, ["hidden"] = false, ["units"] = { @@ -516,7 +517,7 @@ dynGroupsAdded = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -540,7 +541,7 @@ dynGroupsAdded = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -548,7 +549,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 2", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -565,11 +566,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 72, + ["alt"] = 70, ["point"] = { - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -580,8 +581,8 @@ dynGroupsAdded = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -591,7 +592,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -608,11 +609,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 61, + ["alt"] = 65, ["point"] = { - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -623,8 +624,8 @@ dynGroupsAdded = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -634,7 +635,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -646,7 +647,7 @@ dynGroupsAdded = ["country"] = "usa", ["groupName"] = "USA air 3", ["modulation"] = 0, - ["groupId"] = 1000069, + ["groupId"] = 7012, ["coalitionId"] = 2, ["name"] = "USA air 3", ["hidden"] = false, @@ -654,10 +655,10 @@ dynGroupsAdded = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -666,14 +667,14 @@ dynGroupsAdded = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 3 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, ["groupName"] = "USA air 3", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7020, @@ -688,7 +689,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -705,20 +706,20 @@ dynGroupsAdded = { [1] = { - ["alt"] = 60, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 691139, - ["x"] = -286038, + ["y"] = 693960, + ["x"] = -287585, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 691139, + ["y"] = 693960, ["groupName"] = "USA static 3", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -286038, + ["x"] = -287585, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 3", @@ -729,7 +730,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -741,7 +742,7 @@ dynGroupsAdded = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 4", ["modulation"] = 0, - ["groupId"] = 1000070, + ["groupId"] = 7013, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 4", ["hidden"] = false, @@ -749,11 +750,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -761,14 +762,14 @@ dynGroupsAdded = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 4 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, ["groupName"] = "AUSTRALIA air 4", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7021, @@ -783,7 +784,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -802,10 +803,11 @@ dynGroupsAdded = ["alt"] = 0, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 2 unit1", @@ -813,51 +815,51 @@ dynGroupsAdded = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -163302, + ["x"] = -161099, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000071, ["coalition"] = "neutral", - ["y"] = 266588, + ["type"] = "PERRY", + ["groupId"] = 7014, + ["y"] = 267048, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 2", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000071, + ["groupId"] = 7014, ["groupName"] = "AUSTRALIA shp 2", }, -- end of [13] [14] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000065, + ["groupId"] = 7008, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 60, + ["alt"] = 66, ["point"] = { - ["y"] = 692171, - ["x"] = -286749, + ["y"] = 691761, + ["x"] = -284967, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286749, - ["y"] = 692171, - ["heading"] = 1.4977557591357, + ["x"] = -284967, + ["y"] = 691761, + ["heading"] = 1.4977557594982, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -865,23 +867,23 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692204, - ["x"] = -286580, + ["y"] = 691809, + ["x"] = -284861, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286580, - ["y"] = 692204, - ["heading"] = 1.4977557614918, + ["x"] = -284861, + ["y"] = 691809, + ["heading"] = 1.4977557625792, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -889,23 +891,23 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692150, - ["x"] = -286560, + ["y"] = 691744, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286560, - ["y"] = 692150, - ["heading"] = 1.4977557614918, + ["x"] = -284982, + ["y"] = 691744, + ["heading"] = 1.4977557573233, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -913,23 +915,23 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 65, ["point"] = { - ["y"] = 691995, - ["x"] = -286713, + ["y"] = 691757, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286713, - ["y"] = 691995, - ["heading"] = 1.4977557627604, + ["x"] = -285098, + ["y"] = 691757, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -938,7 +940,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 3", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -949,7 +951,7 @@ dynGroupsAdded = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000068, + ["groupId"] = 7011, ["hidden"] = false, ["units"] = { @@ -966,7 +968,7 @@ dynGroupsAdded = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286407, @@ -990,7 +992,7 @@ dynGroupsAdded = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286447, @@ -1004,7 +1006,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 4", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -1015,29 +1017,29 @@ dynGroupsAdded = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000072, + ["groupId"] = 7015, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 695073, + ["x"] = -287442, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288904, - ["y"] = 692563, - ["heading"] = 1.4977557725472, + ["x"] = -287442, + ["y"] = 695073, + ["heading"] = 1.4977557701918, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -1045,23 +1047,23 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 56, + ["alt"] = 68, ["point"] = { - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288844, - ["y"] = 692623, - ["heading"] = 1.4977557660227, + ["x"] = -287590, + ["y"] = 695090, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -1069,23 +1071,23 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692459, - ["x"] = -288865, + ["y"] = 695151, + ["x"] = -287518, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288865, - ["y"] = 692459, - ["heading"] = 1.4977557638479, + ["x"] = -287518, + ["y"] = 695151, + ["heading"] = 1.4977557660229, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -1093,23 +1095,23 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 55, + ["alt"] = 68, ["point"] = { - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 694882, + ["x"] = -287479, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -289069, - ["y"] = 692675, - ["heading"] = 1.4977557685601, + ["x"] = -287479, + ["y"] = 694882, + ["heading"] = 1.4977557575044, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -1118,7 +1120,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 5", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -1130,7 +1132,7 @@ dynGroupsAdded = ["country"] = "usa", ["groupName"] = "USA air 5", ["modulation"] = 0, - ["groupId"] = 1000076, + ["groupId"] = 7019, ["coalitionId"] = 2, ["name"] = "USA air 5", ["hidden"] = false, @@ -1138,10 +1140,10 @@ dynGroupsAdded = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1150,14 +1152,14 @@ dynGroupsAdded = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 5 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, ["groupName"] = "USA air 5", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7031, @@ -1172,7 +1174,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -1183,7 +1185,7 @@ dynGroupsAdded = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000075, + ["groupId"] = 7018, ["hidden"] = false, ["units"] = { @@ -1206,7 +1208,7 @@ dynGroupsAdded = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -1230,7 +1232,7 @@ dynGroupsAdded = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -1238,7 +1240,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 6", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -1258,8 +1260,8 @@ dynGroupsAdded = ["alt"] = 73, ["point"] = { - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1270,8 +1272,8 @@ dynGroupsAdded = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -1281,7 +1283,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1293,7 +1295,7 @@ dynGroupsAdded = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 6", ["modulation"] = 0, - ["groupId"] = 1000077, + ["groupId"] = 7020, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 6", ["hidden"] = false, @@ -1301,11 +1303,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1313,14 +1315,14 @@ dynGroupsAdded = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 6 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, ["groupName"] = "AUSTRALIA air 6", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7032, @@ -1335,7 +1337,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -1352,20 +1354,20 @@ dynGroupsAdded = { [1] = { - ["alt"] = 69, + ["alt"] = 68, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693432, - ["x"] = -285294, + ["y"] = 693480, + ["x"] = -285622, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693432, + ["y"] = 693480, ["groupName"] = "USA static 5", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285294, + ["x"] = -285622, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 5", @@ -1376,7 +1378,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1395,40 +1397,41 @@ dynGroupsAdded = ["alt"] = 0, ["point"] = { - ["y"] = 267963, - ["x"] = -165895, + ["y"] = 268869, + ["x"] = -163156, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000078, + ["unitName"] = "AUSTRALIA shp 3 unit1", + ["heading"] = 0, + ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -165895, - ["y"] = 267963, - ["heading"] = 0, - ["country"] = "australia", - ["unitName"] = "AUSTRALIA shp 3 unit1", - ["unitId"] = 7033, + ["x"] = -163156, + ["speed"] = 0, ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7021, + ["y"] = 268869, + ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 3", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000078, + ["groupId"] = 7021, ["groupName"] = "AUSTRALIA shp 3", }, -- end of [22] [23] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000082, + ["groupId"] = 7025, ["hidden"] = false, ["units"] = { @@ -1451,7 +1454,7 @@ dynGroupsAdded = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -1475,7 +1478,7 @@ dynGroupsAdded = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -1483,7 +1486,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 8", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -1495,7 +1498,7 @@ dynGroupsAdded = ["country"] = "usa", ["groupName"] = "USA air 7", ["modulation"] = 0, - ["groupId"] = 1000083, + ["groupId"] = 7026, ["coalitionId"] = 2, ["name"] = "USA air 7", ["hidden"] = false, @@ -1503,10 +1506,10 @@ dynGroupsAdded = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1515,14 +1518,14 @@ dynGroupsAdded = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 7 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, ["groupName"] = "USA air 7", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7042, @@ -1537,7 +1540,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -1548,29 +1551,29 @@ dynGroupsAdded = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000079, + ["groupId"] = 7022, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287036, - ["y"] = 692747, - ["heading"] = 1.4977557703724, + ["x"] = -284021, + ["y"] = 693098, + ["heading"] = 1.4977557645728, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -1578,23 +1581,23 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 5.0056692998623e-05, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -286920, - ["y"] = 692716, - ["heading"] = 1.4977557703724, + ["x"] = -284053, + ["y"] = 693012, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -1602,23 +1605,23 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.00018869274936151, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287056, - ["y"] = 692580, - ["heading"] = 1.4977557642103, + ["x"] = -283898, + ["y"] = 693026, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -1626,23 +1629,23 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.0040063578450385, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287189, - ["y"] = 692752, - ["heading"] = 1.4977557678351, + ["x"] = -284127, + ["y"] = 693093, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -1651,7 +1654,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 7", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -1663,7 +1666,7 @@ dynGroupsAdded = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 8", ["modulation"] = 0, - ["groupId"] = 1000084, + ["groupId"] = 7027, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 8", ["hidden"] = false, @@ -1671,11 +1674,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1683,14 +1686,14 @@ dynGroupsAdded = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 8 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, ["groupName"] = "AUSTRALIA air 8", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7043, @@ -1705,7 +1708,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -1724,10 +1727,11 @@ dynGroupsAdded = ["alt"] = 0, ["point"] = { - ["y"] = 268804, - ["x"] = -165342, + ["y"] = 266075, + ["x"] = -162226, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 4 unit1", @@ -1735,22 +1739,22 @@ dynGroupsAdded = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -165342, + ["x"] = -162226, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000085, ["coalition"] = "neutral", - ["y"] = 268804, + ["type"] = "PERRY", + ["groupId"] = 7028, + ["y"] = 266075, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 4", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000085, + ["groupId"] = 7028, ["groupName"] = "AUSTRALIA shp 4", }, -- end of [27] [28] = @@ -1763,11 +1767,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 67, + ["alt"] = 55, ["point"] = { - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1778,8 +1782,8 @@ dynGroupsAdded = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -1789,7 +1793,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1806,20 +1810,20 @@ dynGroupsAdded = { [1] = { - ["alt"] = 61, + ["alt"] = 70, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693155, - ["x"] = -287187, + ["y"] = 694696, + ["x"] = -287053, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693155, + ["y"] = 694696, ["groupName"] = "USA static 7", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -287187, + ["x"] = -287053, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 7", @@ -1830,7 +1834,7 @@ dynGroupsAdded = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, diff --git a/Example DBs/mist_DBs_groupsById.lua b/Example DBs/mist_DBs_groupsById.lua index 12eb7f6..6bb2060 100644 --- a/Example DBs/mist_DBs_groupsById.lua +++ b/Example DBs/mist_DBs_groupsById.lua @@ -382,6 +382,9 @@ groupsById = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -393,7 +396,6 @@ groupsById = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -401,6 +403,7 @@ groupsById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, }, -- end of [1] }, -- end of ["units"] @@ -435,6 +438,9 @@ groupsById = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -446,7 +452,6 @@ groupsById = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -454,6 +459,7 @@ groupsById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, }, -- end of [1] }, -- end of ["units"] @@ -1589,8 +1595,8 @@ groupsById = ["alt"] = 60, ["point"] = { - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1600,8 +1606,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287110, - ["y"] = 692389, + ["x"] = -285145, + ["y"] = 689785, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -1610,11 +1616,11 @@ groupsById = }, -- end of [1] [2] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1624,8 +1630,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286935, - ["y"] = 692345, + ["x"] = -285166, + ["y"] = 689948, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -1634,11 +1640,11 @@ groupsById = }, -- end of [2] [3] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1648,8 +1654,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287213, - ["y"] = 692308, + ["x"] = -285298, + ["y"] = 689856, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -1658,11 +1664,11 @@ groupsById = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1672,8 +1678,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286989, - ["y"] = 692321, + ["x"] = -285058, + ["y"] = 689796, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -1682,11 +1688,11 @@ groupsById = }, -- end of [4] [5] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1696,8 +1702,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287225, - ["y"] = 692297, + ["x"] = -285191, + ["y"] = 689973, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -1706,11 +1712,11 @@ groupsById = }, -- end of [5] [6] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1720,8 +1726,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287012, - ["y"] = 692445, + ["x"] = -285149, + ["y"] = 689860, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -1730,11 +1736,11 @@ groupsById = }, -- end of [6] [7] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1744,8 +1750,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287237, - ["y"] = 692311, + ["x"] = -285216, + ["y"] = 689799, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -2127,8 +2133,8 @@ groupsById = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -2137,15 +2143,15 @@ groupsById = ["speed"] = 44.444444444444, ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["unitName"] = "Rotary-1-1", ["groupName"] = "nH", ["coalition"] = "neutral", ["countryId"] = 21, - ["x"] = -155967.80633993, - ["y"] = 405888.85058741, + ["x"] = -158700.87914814, + ["y"] = 404406.46136648, ["unitId"] = 68, - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["skill"] = "High", ["callsign"] = { @@ -2200,11 +2206,397 @@ groupsById = }, -- end of [1] }, -- end of ["units"] }, -- end of [46] - [1000082] = + [47] = + { + ["country"] = "usa", + ["groupName"] = "poly", + ["units"] = + { + [1] = + { + ["heading"] = 2.3261877017598, + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["groupName"] = "poly", + ["type"] = "AAV7", + ["countryId"] = 2, + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["country"] = "usa", + ["skill"] = "Average", + }, -- end of [1] + }, -- end of ["units"] + ["coalition"] = "blue", + ["groupId"] = 47, + ["category"] = "vehicle", + ["countryId"] = 2, + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["hidden"] = false, + }, -- end of [47] + [7028] = + { + ["country"] = "australia", + ["coalitionId"] = 0, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 0, + ["point"] = + { + ["y"] = 266075, + ["x"] = -162226, + }, -- end of ["point"] + ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", + ["skill"] = "Average", + ["category"] = "ship", + ["unitName"] = "AUSTRALIA shp 4 unit1", + ["heading"] = 0, + ["unitId"] = 7044, + ["groupName"] = "AUSTRALIA shp 4", + ["countryId"] = 21, + ["x"] = -162226, + ["speed"] = 0, + ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7028, + ["y"] = 266075, + ["country"] = "australia", + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 21, + ["name"] = "AUSTRALIA shp 4", + ["timeAdded"] = 43223.79, + ["category"] = "ship", + ["coalition"] = "neutral", + ["startTime"] = 0, + ["groupId"] = 7028, + ["groupName"] = "AUSTRALIA shp 4", + }, -- end of [7028] + [7001] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000082, + ["groupId"] = 7001, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 72, + ["point"] = + { + ["y"] = 693761, + ["x"] = -284648, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7001, + ["groupName"] = "USA gnd 1", + ["countryId"] = 2, + ["x"] = -284648, + ["y"] = 693761, + ["heading"] = 1.4977557542423, + ["country"] = "usa", + ["unitName"] = "USA gnd 1 unit1", + ["unitId"] = 7001, + ["coalition"] = "blue", + }, -- end of [1] + [2] = + { + ["alt"] = 73, + ["point"] = + { + ["y"] = 693771, + ["x"] = -284456, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7001, + ["groupName"] = "USA gnd 1", + ["countryId"] = 2, + ["x"] = -284456, + ["y"] = 693771, + ["heading"] = 1.4977557542423, + ["country"] = "usa", + ["unitName"] = "USA gnd 1 unit2", + ["unitId"] = 7002, + ["coalition"] = "blue", + }, -- end of [2] + [3] = + { + ["alt"] = 72, + ["point"] = + { + ["y"] = 693781, + ["x"] = -284639, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7001, + ["groupName"] = "USA gnd 1", + ["countryId"] = 2, + ["x"] = -284639, + ["y"] = 693781, + ["heading"] = 1.4977557542423, + ["country"] = "usa", + ["unitName"] = "USA gnd 1 unit3", + ["unitId"] = 7003, + ["coalition"] = "blue", + }, -- end of [3] + [4] = + { + ["alt"] = 72, + ["point"] = + { + ["y"] = 693653, + ["x"] = -284699, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7001, + ["groupName"] = "USA gnd 1", + ["countryId"] = 2, + ["x"] = -284699, + ["y"] = 693653, + ["heading"] = 1.4977557629417, + ["country"] = "usa", + ["unitName"] = "USA gnd 1 unit4", + ["unitId"] = 7004, + ["coalition"] = "blue", + }, -- end of [4] + }, -- end of ["units"] + ["countryId"] = 2, + ["name"] = "USA gnd 1", + ["timeAdded"] = 43220.79, + ["category"] = "vehicle", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["groupName"] = "USA gnd 1", + }, -- end of [7001] + [7005] = + { + ["country"] = "usa", + ["groupName"] = "USA air 1", + ["modulation"] = 0, + ["groupId"] = 7005, + ["coalitionId"] = 2, + ["name"] = "USA air 1", + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 1997, + ["point"] = + { + ["y"] = 682727, + ["x"] = -288608, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "USA air 1 unit1", + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, + ["groupName"] = "USA air 1", + ["speed"] = 138.85196364465, + ["countryId"] = 2, + ["x"] = -288608, + ["coalition"] = "blue", + ["y"] = 682727, + ["country"] = "usa", + ["type"] = "B-52H", + ["unitId"] = 7009, + ["callsign"] = + { + [1] = 4, + [2] = 1, + [3] = 1, + ["name"] = "Colt11", + }, -- end of ["callsign"] + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["radioSet"] = false, + ["timeAdded"] = 43220.79, + ["category"] = "plane", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Attack", + ["uncontrolled"] = false, + }, -- end of [7005] + [7013] = + { + ["country"] = "australia", + ["groupName"] = "AUSTRALIA air 4", + ["modulation"] = 0, + ["groupId"] = 7013, + ["coalitionId"] = 0, + ["name"] = "AUSTRALIA air 4", + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 1998, + ["point"] = + { + ["y"] = 319595, + ["x"] = -198560, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 0, + ["livery_id"] = "Australian 75th Squadron", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "AUSTRALIA air 4 unit1", + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, + ["groupName"] = "AUSTRALIA air 4", + ["speed"] = 180.49294253728, + ["countryId"] = 21, + ["x"] = -198560, + ["coalition"] = "neutral", + ["y"] = 319595, + ["country"] = "australia", + ["type"] = "FA-18C_hornet", + ["unitId"] = 7021, + ["callsign"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + ["name"] = "Enfield11", + }, -- end of ["callsign"] + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 21, + ["radioSet"] = false, + ["timeAdded"] = 43221.79, + ["category"] = "plane", + ["coalition"] = "neutral", + ["startTime"] = 0, + ["task"] = "CAP", + ["uncontrolled"] = false, + }, -- end of [7013] + [7017] = + { + ["groupId"] = 7017, + ["coalitionId"] = 2, + ["hidden"] = false, + ["groupName"] = "USA static 4", + ["units"] = + { + [1] = + { + ["alt"] = 65, + ["point"] = + { + ["y"] = 693655, + ["x"] = -286667, + }, -- end of ["point"] + ["categoryStatic"] = "Cargos", + ["coalitionId"] = 2, + ["mass"] = 1337, + ["category"] = "static", + ["unitName"] = "USA static 4", + ["shape_name"] = "ab-212_cargo", + ["type"] = "uh1h_cargo", + ["country"] = "usa", + ["groupName"] = "USA static 4", + ["y"] = 693655, + ["x"] = -286667, + ["coalition"] = "blue", + ["unitId"] = 7017, + ["heading"] = 0, + ["countryId"] = 2, + ["groupId"] = 7017, + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["coalition"] = "blue", + ["timeAdded"] = 43221.79, + ["category"] = "static", + ["country"] = "usa", + ["startTime"] = 0, + ["name"] = "USA static 4", + ["uncontrolled"] = false, + }, -- end of [7017] + [7021] = + { + ["country"] = "australia", + ["coalitionId"] = 0, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 0, + ["point"] = + { + ["y"] = 268869, + ["x"] = -163156, + }, -- end of ["point"] + ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", + ["skill"] = "Average", + ["category"] = "ship", + ["unitName"] = "AUSTRALIA shp 3 unit1", + ["heading"] = 0, + ["unitId"] = 7033, + ["groupName"] = "AUSTRALIA shp 3", + ["countryId"] = 21, + ["x"] = -163156, + ["speed"] = 0, + ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7021, + ["y"] = 268869, + ["country"] = "australia", + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 21, + ["name"] = "AUSTRALIA shp 3", + ["timeAdded"] = 43222.79, + ["category"] = "ship", + ["coalition"] = "neutral", + ["startTime"] = 0, + ["groupId"] = 7021, + ["groupName"] = "AUSTRALIA shp 3", + }, -- end of [7021] + [7025] = + { + ["country"] = "usa", + ["coalitionId"] = 2, + ["groupId"] = 7025, ["hidden"] = false, ["units"] = { @@ -2227,7 +2619,7 @@ groupsById = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2251,7 +2643,7 @@ groupsById = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2259,357 +2651,57 @@ groupsById = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 8", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 8", - }, -- end of [1000082] - [7028] = + }, -- end of [7025] + [7006] = { - ["groupId"] = 7028, + ["groupId"] = 7006, ["coalitionId"] = 2, ["hidden"] = false, - ["groupName"] = "USA static 6", + ["groupName"] = "USA static 2", ["units"] = { [1] = { - ["alt"] = 73, + ["alt"] = 70, ["point"] = { - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 691224, + ["x"] = -283405, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, ["mass"] = 1337, ["category"] = "static", - ["unitName"] = "USA static 6", + ["unitName"] = "USA static 2", ["shape_name"] = "ab-212_cargo", ["type"] = "uh1h_cargo", ["country"] = "usa", - ["groupName"] = "USA static 6", - ["y"] = 694850, - ["x"] = -285204, + ["groupName"] = "USA static 2", + ["y"] = 691224, + ["x"] = -283405, ["coalition"] = "blue", - ["unitId"] = 7028, + ["unitId"] = 7006, ["heading"] = 0, ["countryId"] = 2, - ["groupId"] = 7028, + ["groupId"] = 7006, }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43220.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, - ["name"] = "USA static 6", + ["name"] = "USA static 2", ["uncontrolled"] = false, - }, -- end of [7028] - [1000083] = - { - ["country"] = "usa", - ["groupName"] = "USA air 7", - ["modulation"] = 0, - ["groupId"] = 1000083, - ["coalitionId"] = 2, - ["name"] = "USA air 7", - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 1996, - ["point"] = - { - ["y"] = 682741, - ["x"] = -288608, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "USA air 7 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, - ["groupName"] = "USA air 7", - ["speed"] = 138.82033106075, - ["countryId"] = 2, - ["x"] = -288608, - ["coalition"] = "blue", - ["y"] = 682741, - ["country"] = "usa", - ["type"] = "B-52H", - ["unitId"] = 7042, - ["callsign"] = - { - [1] = 4, - [2] = 1, - [3] = 1, - ["name"] = "Colt11", - }, -- end of ["callsign"] - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["radioSet"] = false, - ["timeAdded"] = 43223.99, - ["category"] = "plane", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Attack", - ["uncontrolled"] = false, - }, -- end of [1000083] - [7005] = - { - ["groupId"] = 7005, - ["coalitionId"] = 2, - ["hidden"] = false, - ["groupName"] = "USA static 1", - ["units"] = - { - [1] = - { - ["alt"] = 61, - ["type"] = "Sandbox", - ["point"] = - { - ["y"] = 690788, - ["x"] = -285547, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 690788, - ["groupName"] = "USA static 1", - ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285547, - ["coalition"] = "blue", - ["category"] = "static", - ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, - ["groupId"] = 7005, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["coalition"] = "blue", - ["timeAdded"] = 43220.99, - ["category"] = "static", - ["country"] = "usa", - ["startTime"] = 0, - ["name"] = "USA static 1", - ["uncontrolled"] = false, - }, -- end of [7005] - [1000084] = - { - ["country"] = "australia", - ["groupName"] = "AUSTRALIA air 8", - ["modulation"] = 0, - ["groupId"] = 1000084, - ["coalitionId"] = 0, - ["name"] = "AUSTRALIA air 8", - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 1997, - ["point"] = - { - ["y"] = 319610, - ["x"] = -198571, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 0, - ["livery_id"] = "Australian 75th Squadron", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "AUSTRALIA air 8 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, - ["groupName"] = "AUSTRALIA air 8", - ["speed"] = 180.44764340673, - ["countryId"] = 21, - ["x"] = -198571, - ["coalition"] = "neutral", - ["y"] = 319610, - ["country"] = "australia", - ["type"] = "FA-18C_hornet", - ["unitId"] = 7043, - ["callsign"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - ["name"] = "Enfield11", - }, -- end of ["callsign"] - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 21, - ["radioSet"] = false, - ["timeAdded"] = 43223.99, - ["category"] = "plane", - ["coalition"] = "neutral", - ["startTime"] = 0, - ["task"] = "CAP", - ["uncontrolled"] = false, - }, -- end of [1000084] - [1000069] = - { - ["country"] = "usa", - ["groupName"] = "USA air 3", - ["modulation"] = 0, - ["groupId"] = 1000069, - ["coalitionId"] = 2, - ["name"] = "USA air 3", - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 1996, - ["point"] = - { - ["y"] = 682741, - ["x"] = -288608, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "USA air 3 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, - ["groupName"] = "USA air 3", - ["speed"] = 138.82033106075, - ["countryId"] = 2, - ["x"] = -288608, - ["coalition"] = "blue", - ["y"] = 682741, - ["country"] = "usa", - ["type"] = "B-52H", - ["unitId"] = 7020, - ["callsign"] = - { - [1] = 4, - [2] = 1, - [3] = 1, - ["name"] = "Colt11", - }, -- end of ["callsign"] - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["radioSet"] = false, - ["timeAdded"] = 43221.99, - ["category"] = "plane", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Attack", - ["uncontrolled"] = false, - }, -- end of [1000069] - [7017] = - { - ["groupId"] = 7017, - ["coalitionId"] = 2, - ["hidden"] = false, - ["groupName"] = "USA static 4", - ["units"] = - { - [1] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 693989, - ["x"] = -288108, - }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["coalitionId"] = 2, - ["mass"] = 1337, - ["category"] = "static", - ["unitName"] = "USA static 4", - ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", - ["country"] = "usa", - ["groupName"] = "USA static 4", - ["y"] = 693989, - ["x"] = -288108, - ["coalition"] = "blue", - ["unitId"] = 7017, - ["heading"] = 0, - ["countryId"] = 2, - ["groupId"] = 7017, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["coalition"] = "blue", - ["timeAdded"] = 43221.99, - ["category"] = "static", - ["country"] = "usa", - ["startTime"] = 0, - ["name"] = "USA static 4", - ["uncontrolled"] = false, - }, -- end of [7017] - [1000070] = - { - ["country"] = "australia", - ["groupName"] = "AUSTRALIA air 4", - ["modulation"] = 0, - ["groupId"] = 1000070, - ["coalitionId"] = 0, - ["name"] = "AUSTRALIA air 4", - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 1997, - ["point"] = - { - ["y"] = 319610, - ["x"] = -198571, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 0, - ["livery_id"] = "Australian 75th Squadron", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "AUSTRALIA air 4 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, - ["groupName"] = "AUSTRALIA air 4", - ["speed"] = 180.44764340673, - ["countryId"] = 21, - ["x"] = -198571, - ["coalition"] = "neutral", - ["y"] = 319610, - ["country"] = "australia", - ["type"] = "FA-18C_hornet", - ["unitId"] = 7021, - ["callsign"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - ["name"] = "Enfield11", - }, -- end of ["callsign"] - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 21, - ["radioSet"] = false, - ["timeAdded"] = 43221.99, - ["category"] = "plane", - ["coalition"] = "neutral", - ["startTime"] = 0, - ["task"] = "CAP", - ["uncontrolled"] = false, - }, -- end of [1000070] - [1000071] = + }, -- end of [7006] + [7014] = { ["country"] = "australia", ["coalitionId"] = 0, @@ -2621,10 +2713,11 @@ groupsById = ["alt"] = 0, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 2 unit1", @@ -2632,268 +2725,29 @@ groupsById = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -163302, + ["x"] = -161099, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000071, ["coalition"] = "neutral", - ["y"] = 266588, + ["type"] = "PERRY", + ["groupId"] = 7014, + ["y"] = 267048, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 2", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000071, + ["groupId"] = 7014, ["groupName"] = "AUSTRALIA shp 2", - }, -- end of [1000071] - [7006] = - { - ["groupId"] = 7006, - ["coalitionId"] = 2, - ["hidden"] = false, - ["groupName"] = "USA static 2", - ["units"] = - { - [1] = - { - ["alt"] = 72, - ["point"] = - { - ["y"] = 694712, - ["x"] = -286007, - }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["coalitionId"] = 2, - ["mass"] = 1337, - ["category"] = "static", - ["unitName"] = "USA static 2", - ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", - ["country"] = "usa", - ["groupName"] = "USA static 2", - ["y"] = 694712, - ["x"] = -286007, - ["coalition"] = "blue", - ["unitId"] = 7006, - ["heading"] = 0, - ["countryId"] = 2, - ["groupId"] = 7006, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["coalition"] = "blue", - ["timeAdded"] = 43220.99, - ["category"] = "static", - ["country"] = "usa", - ["startTime"] = 0, - ["name"] = "USA static 2", - ["uncontrolled"] = false, - }, -- end of [7006] - [1000058] = + }, -- end of [7014] + [7018] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000058, - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 62, - ["point"] = - { - ["y"] = 692663, - ["x"] = -286548, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, - ["groupName"] = "USA gnd 1", - ["countryId"] = 2, - ["x"] = -286548, - ["y"] = 692663, - ["heading"] = 1.4977557600419, - ["country"] = "usa", - ["unitName"] = "USA gnd 1 unit1", - ["unitId"] = 7001, - ["coalition"] = "blue", - }, -- end of [1] - [2] = - { - ["alt"] = 62, - ["point"] = - { - ["y"] = 692678, - ["x"] = -286576, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, - ["groupName"] = "USA gnd 1", - ["countryId"] = 2, - ["x"] = -286576, - ["y"] = 692678, - ["heading"] = 1.4977557629417, - ["country"] = "usa", - ["unitName"] = "USA gnd 1 unit2", - ["unitId"] = 7002, - ["coalition"] = "blue", - }, -- end of [2] - [3] = - { - ["alt"] = 63, - ["point"] = - { - ["y"] = 692774, - ["x"] = -286539, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, - ["groupName"] = "USA gnd 1", - ["countryId"] = 2, - ["x"] = -286539, - ["y"] = 692774, - ["heading"] = 1.497755762398, - ["country"] = "usa", - ["unitName"] = "USA gnd 1 unit3", - ["unitId"] = 7003, - ["coalition"] = "blue", - }, -- end of [3] - [4] = - { - ["alt"] = 62, - ["point"] = - { - ["y"] = 692553, - ["x"] = -286525, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, - ["groupName"] = "USA gnd 1", - ["countryId"] = 2, - ["x"] = -286525, - ["y"] = 692553, - ["heading"] = 1.4977557625792, - ["country"] = "usa", - ["unitName"] = "USA gnd 1 unit4", - ["unitId"] = 7004, - ["coalition"] = "blue", - }, -- end of [4] - }, -- end of ["units"] - ["countryId"] = 2, - ["name"] = "USA gnd 1", - ["timeAdded"] = 43220.99, - ["category"] = "vehicle", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Nothing", - ["groupName"] = "USA gnd 1", - }, -- end of [1000058] - [7038] = - { - ["groupId"] = 7038, - ["coalitionId"] = 2, - ["hidden"] = false, - ["groupName"] = "USA static 7", - ["units"] = - { - [1] = - { - ["alt"] = 61, - ["type"] = "Sandbox", - ["point"] = - { - ["y"] = 693155, - ["x"] = -287187, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693155, - ["groupName"] = "USA static 7", - ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287187, - ["coalition"] = "blue", - ["category"] = "static", - ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, - ["groupId"] = 7038, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["coalition"] = "blue", - ["timeAdded"] = 43223.99, - ["category"] = "static", - ["country"] = "usa", - ["startTime"] = 0, - ["name"] = "USA static 7", - ["uncontrolled"] = false, - }, -- end of [7038] - [7027] = - { - ["groupId"] = 7027, - ["coalitionId"] = 2, - ["hidden"] = false, - ["groupName"] = "USA static 5", - ["units"] = - { - [1] = - { - ["alt"] = 69, - ["type"] = "Sandbox", - ["point"] = - { - ["y"] = 693432, - ["x"] = -285294, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693432, - ["groupName"] = "USA static 5", - ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285294, - ["coalition"] = "blue", - ["category"] = "static", - ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, - ["groupId"] = 7027, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["coalition"] = "blue", - ["timeAdded"] = 43222.99, - ["category"] = "static", - ["country"] = "usa", - ["startTime"] = 0, - ["name"] = "USA static 5", - ["uncontrolled"] = false, - }, -- end of [7027] - [1000075] = - { - ["country"] = "usa", - ["coalitionId"] = 2, - ["groupId"] = 1000075, + ["groupId"] = 7018, ["hidden"] = false, ["units"] = { @@ -2916,7 +2770,7 @@ groupsById = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2940,7 +2794,7 @@ groupsById = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2948,404 +2802,40 @@ groupsById = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 6", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 6", - }, -- end of [1000075] - [1000085] = - { - ["country"] = "australia", - ["coalitionId"] = 0, - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 0, - ["point"] = - { - ["y"] = 268804, - ["x"] = -165342, - }, -- end of ["point"] - ["coalitionId"] = 0, - ["skill"] = "Average", - ["category"] = "ship", - ["unitName"] = "AUSTRALIA shp 4 unit1", - ["heading"] = 0, - ["unitId"] = 7044, - ["groupName"] = "AUSTRALIA shp 4", - ["countryId"] = 21, - ["x"] = -165342, - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000085, - ["coalition"] = "neutral", - ["y"] = 268804, - ["country"] = "australia", - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 21, - ["name"] = "AUSTRALIA shp 4", - ["timeAdded"] = 43223.99, - ["category"] = "ship", - ["coalition"] = "neutral", - ["startTime"] = 0, - ["groupId"] = 1000085, - ["groupName"] = "AUSTRALIA shp 4", - }, -- end of [1000085] - [1000076] = - { - ["country"] = "usa", - ["groupName"] = "USA air 5", - ["modulation"] = 0, - ["groupId"] = 1000076, - ["coalitionId"] = 2, - ["name"] = "USA air 5", - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 1996, - ["point"] = - { - ["y"] = 682741, - ["x"] = -288608, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "USA air 5 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, - ["groupName"] = "USA air 5", - ["speed"] = 138.82033106075, - ["countryId"] = 2, - ["x"] = -288608, - ["coalition"] = "blue", - ["y"] = 682741, - ["country"] = "usa", - ["type"] = "B-52H", - ["unitId"] = 7031, - ["callsign"] = - { - [1] = 4, - [2] = 1, - [3] = 1, - ["name"] = "Colt11", - }, -- end of ["callsign"] - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["radioSet"] = false, - ["timeAdded"] = 43222.99, - ["category"] = "plane", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Attack", - ["uncontrolled"] = false, - }, -- end of [1000076] - [1000061] = + }, -- end of [7018] + [7022] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000061, + ["groupId"] = 7022, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 48, + ["alt"] = 73, ["point"] = { - ["y"] = 686871, - ["x"] = -286407, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["unitName"] = "USA gnd 2 unit1", - ["heading"] = 0, - ["unitId"] = 7007, - ["groupName"] = "USA gnd 2", - ["countryId"] = 2, - ["x"] = -286407, - ["speed"] = 0, - ["type"] = "M-113", - ["groupId"] = 1000061, - ["coalition"] = "blue", - ["y"] = 686871, - ["country"] = "usa", - }, -- end of [1] - [2] = - { - ["alt"] = 48, - ["point"] = - { - ["y"] = 686871, - ["x"] = -286447, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["unitName"] = "USA gnd 2 unit2", - ["heading"] = 0, - ["unitId"] = 7008, - ["groupName"] = "USA gnd 2", - ["countryId"] = 2, - ["x"] = -286447, - ["speed"] = 0, - ["type"] = "M-113", - ["groupId"] = 1000061, - ["coalition"] = "blue", - ["y"] = 686871, - ["country"] = "usa", - }, -- end of [2] - }, -- end of ["units"] - ["countryId"] = 2, - ["name"] = "USA gnd 2", - ["timeAdded"] = 43220.99, - ["category"] = "vehicle", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Nothing", - ["groupName"] = "USA gnd 2", - }, -- end of [1000061] - [1000077] = - { - ["country"] = "australia", - ["groupName"] = "AUSTRALIA air 6", - ["modulation"] = 0, - ["groupId"] = 1000077, - ["coalitionId"] = 0, - ["name"] = "AUSTRALIA air 6", - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 1997, - ["point"] = - { - ["y"] = 319610, - ["x"] = -198571, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 0, - ["livery_id"] = "Australian 75th Squadron", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "AUSTRALIA air 6 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, - ["groupName"] = "AUSTRALIA air 6", - ["speed"] = 180.44764340673, - ["countryId"] = 21, - ["x"] = -198571, - ["coalition"] = "neutral", - ["y"] = 319610, - ["country"] = "australia", - ["type"] = "FA-18C_hornet", - ["unitId"] = 7032, - ["callsign"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - ["name"] = "Enfield11", - }, -- end of ["callsign"] - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 21, - ["radioSet"] = false, - ["timeAdded"] = 43222.99, - ["category"] = "plane", - ["coalition"] = "neutral", - ["startTime"] = 0, - ["task"] = "CAP", - ["uncontrolled"] = false, - }, -- end of [1000077] - [1000062] = - { - ["country"] = "usa", - ["groupName"] = "USA air 1", - ["modulation"] = 0, - ["groupId"] = 1000062, - ["coalitionId"] = 2, - ["name"] = "USA air 1", - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 1996, - ["point"] = - { - ["y"] = 682741, - ["x"] = -288608, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "USA air 1 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, - ["groupName"] = "USA air 1", - ["speed"] = 138.82033106075, - ["countryId"] = 2, - ["x"] = -288608, - ["coalition"] = "blue", - ["y"] = 682741, - ["country"] = "usa", - ["type"] = "B-52H", - ["unitId"] = 7009, - ["callsign"] = - { - [1] = 4, - [2] = 1, - [3] = 1, - ["name"] = "Colt11", - }, -- end of ["callsign"] - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["radioSet"] = false, - ["timeAdded"] = 43220.99, - ["category"] = "plane", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Attack", - ["uncontrolled"] = false, - }, -- end of [1000062] - [1000078] = - { - ["country"] = "australia", - ["coalitionId"] = 0, - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 0, - ["point"] = - { - ["y"] = 267963, - ["x"] = -165895, - }, -- end of ["point"] - ["coalitionId"] = 0, - ["skill"] = "Average", - ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000078, - ["groupName"] = "AUSTRALIA shp 3", - ["countryId"] = 21, - ["x"] = -165895, - ["y"] = 267963, - ["heading"] = 0, - ["country"] = "australia", - ["unitName"] = "AUSTRALIA shp 3 unit1", - ["unitId"] = 7033, - ["coalition"] = "neutral", - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 21, - ["name"] = "AUSTRALIA shp 3", - ["timeAdded"] = 43222.99, - ["category"] = "ship", - ["coalition"] = "neutral", - ["startTime"] = 0, - ["groupId"] = 1000078, - ["groupName"] = "AUSTRALIA shp 3", - }, -- end of [1000078] - [1000063] = - { - ["country"] = "australia", - ["groupName"] = "AUSTRALIA air 2", - ["modulation"] = 0, - ["groupId"] = 1000063, - ["coalitionId"] = 0, - ["name"] = "AUSTRALIA air 2", - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 1997, - ["point"] = - { - ["y"] = 319610, - ["x"] = -198571, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 0, - ["livery_id"] = "Australian 75th Squadron", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "AUSTRALIA air 2 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, - ["groupName"] = "AUSTRALIA air 2", - ["speed"] = 180.44764340673, - ["countryId"] = 21, - ["x"] = -198571, - ["coalition"] = "neutral", - ["y"] = 319610, - ["country"] = "australia", - ["type"] = "FA-18C_hornet", - ["unitId"] = 7010, - ["callsign"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - ["name"] = "Enfield11", - }, -- end of ["callsign"] - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 21, - ["radioSet"] = false, - ["timeAdded"] = 43220.99, - ["category"] = "plane", - ["coalition"] = "neutral", - ["startTime"] = 0, - ["task"] = "CAP", - ["uncontrolled"] = false, - }, -- end of [1000063] - [1000079] = - { - ["country"] = "usa", - ["coalitionId"] = 2, - ["groupId"] = 1000079, - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287036, - ["y"] = 692747, - ["heading"] = 1.4977557703724, + ["x"] = -284021, + ["y"] = 693098, + ["heading"] = 1.4977557645728, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -3353,23 +2843,23 @@ groupsById = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 5.0056692998623e-05, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -286920, - ["y"] = 692716, - ["heading"] = 1.4977557703724, + ["x"] = -284053, + ["y"] = 693012, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -3377,23 +2867,23 @@ groupsById = }, -- end of [2] [3] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.00018869274936151, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287056, - ["y"] = 692580, - ["heading"] = 1.4977557642103, + ["x"] = -283898, + ["y"] = 693026, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -3401,23 +2891,23 @@ groupsById = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.0040063578450385, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287189, - ["y"] = 692752, - ["heading"] = 1.4977557678351, + ["x"] = -284127, + ["y"] = 693093, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -3426,14 +2916,68 @@ groupsById = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 7", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 7", - }, -- end of [1000079] - [1000064] = + }, -- end of [7022] + [7026] = + { + ["country"] = "usa", + ["groupName"] = "USA air 7", + ["modulation"] = 0, + ["groupId"] = 7026, + ["coalitionId"] = 2, + ["name"] = "USA air 7", + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 1997, + ["point"] = + { + ["y"] = 682727, + ["x"] = -288608, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "USA air 7 unit1", + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, + ["groupName"] = "USA air 7", + ["speed"] = 138.85196364465, + ["countryId"] = 2, + ["x"] = -288608, + ["coalition"] = "blue", + ["y"] = 682727, + ["country"] = "usa", + ["type"] = "B-52H", + ["unitId"] = 7042, + ["callsign"] = + { + [1] = 4, + [2] = 1, + [3] = 1, + ["name"] = "Colt11", + }, -- end of ["callsign"] + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["radioSet"] = false, + ["timeAdded"] = 43223.79, + ["category"] = "plane", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Attack", + ["uncontrolled"] = false, + }, -- end of [7026] + [7007] = { ["country"] = "australia", ["coalitionId"] = 0, @@ -3445,10 +2989,11 @@ groupsById = ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 1 unit1", @@ -3456,341 +3001,29 @@ groupsById = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -161996, + ["x"] = -163065, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000064, ["coalition"] = "neutral", - ["y"] = 266228, + ["type"] = "PERRY", + ["groupId"] = 7007, + ["y"] = 265153, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 1", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000064, + ["groupId"] = 7007, ["groupName"] = "AUSTRALIA shp 1", - }, -- end of [1000064] - [7039] = - { - ["groupId"] = 7039, - ["coalitionId"] = 2, - ["hidden"] = false, - ["groupName"] = "USA static 8", - ["units"] = - { - [1] = - { - ["alt"] = 67, - ["point"] = - { - ["y"] = 691664, - ["x"] = -284503, - }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["coalitionId"] = 2, - ["mass"] = 1337, - ["category"] = "static", - ["unitName"] = "USA static 8", - ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", - ["country"] = "usa", - ["groupName"] = "USA static 8", - ["y"] = 691664, - ["x"] = -284503, - ["coalition"] = "blue", - ["unitId"] = 7039, - ["heading"] = 0, - ["countryId"] = 2, - ["groupId"] = 7039, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["coalition"] = "blue", - ["timeAdded"] = 43223.99, - ["category"] = "static", - ["country"] = "usa", - ["startTime"] = 0, - ["name"] = "USA static 8", - ["uncontrolled"] = false, - }, -- end of [7039] - [1000065] = + }, -- end of [7007] + [7011] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000065, - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 60, - ["point"] = - { - ["y"] = 692171, - ["x"] = -286749, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286749, - ["y"] = 692171, - ["heading"] = 1.4977557591357, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit1", - ["unitId"] = 7012, - ["coalition"] = "blue", - }, -- end of [1] - [2] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 692204, - ["x"] = -286580, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286580, - ["y"] = 692204, - ["heading"] = 1.4977557614918, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit2", - ["unitId"] = 7013, - ["coalition"] = "blue", - }, -- end of [2] - [3] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 692150, - ["x"] = -286560, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286560, - ["y"] = 692150, - ["heading"] = 1.4977557614918, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit3", - ["unitId"] = 7014, - ["coalition"] = "blue", - }, -- end of [3] - [4] = - { - ["alt"] = 60, - ["point"] = - { - ["y"] = 691995, - ["x"] = -286713, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286713, - ["y"] = 691995, - ["heading"] = 1.4977557627604, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit4", - ["unitId"] = 7015, - ["coalition"] = "blue", - }, -- end of [4] - }, -- end of ["units"] - ["countryId"] = 2, - ["name"] = "USA gnd 3", - ["timeAdded"] = 43221.99, - ["category"] = "vehicle", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Nothing", - ["groupName"] = "USA gnd 3", - }, -- end of [1000065] - [7016] = - { - ["groupId"] = 7016, - ["coalitionId"] = 2, - ["hidden"] = false, - ["groupName"] = "USA static 3", - ["units"] = - { - [1] = - { - ["alt"] = 60, - ["type"] = "Sandbox", - ["point"] = - { - ["y"] = 691139, - ["x"] = -286038, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 691139, - ["groupName"] = "USA static 3", - ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -286038, - ["coalition"] = "blue", - ["category"] = "static", - ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, - ["groupId"] = 7016, - }, -- end of [1] - }, -- end of ["units"] - ["countryId"] = 2, - ["coalition"] = "blue", - ["timeAdded"] = 43221.99, - ["category"] = "static", - ["country"] = "usa", - ["startTime"] = 0, - ["name"] = "USA static 3", - ["uncontrolled"] = false, - }, -- end of [7016] - [1000072] = - { - ["country"] = "usa", - ["coalitionId"] = 2, - ["groupId"] = 1000072, - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 55, - ["point"] = - { - ["y"] = 692563, - ["x"] = -288904, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, - ["groupName"] = "USA gnd 5", - ["countryId"] = 2, - ["x"] = -288904, - ["y"] = 692563, - ["heading"] = 1.4977557725472, - ["country"] = "usa", - ["unitName"] = "USA gnd 5 unit1", - ["unitId"] = 7023, - ["coalition"] = "blue", - }, -- end of [1] - [2] = - { - ["alt"] = 56, - ["point"] = - { - ["y"] = 692623, - ["x"] = -288844, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, - ["groupName"] = "USA gnd 5", - ["countryId"] = 2, - ["x"] = -288844, - ["y"] = 692623, - ["heading"] = 1.4977557660227, - ["country"] = "usa", - ["unitName"] = "USA gnd 5 unit2", - ["unitId"] = 7024, - ["coalition"] = "blue", - }, -- end of [2] - [3] = - { - ["alt"] = 55, - ["point"] = - { - ["y"] = 692459, - ["x"] = -288865, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, - ["groupName"] = "USA gnd 5", - ["countryId"] = 2, - ["x"] = -288865, - ["y"] = 692459, - ["heading"] = 1.4977557638479, - ["country"] = "usa", - ["unitName"] = "USA gnd 5 unit3", - ["unitId"] = 7025, - ["coalition"] = "blue", - }, -- end of [3] - [4] = - { - ["alt"] = 55, - ["point"] = - { - ["y"] = 692675, - ["x"] = -289069, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, - ["groupName"] = "USA gnd 5", - ["countryId"] = 2, - ["x"] = -289069, - ["y"] = 692675, - ["heading"] = 1.4977557685601, - ["country"] = "usa", - ["unitName"] = "USA gnd 5 unit4", - ["unitId"] = 7026, - ["coalition"] = "blue", - }, -- end of [4] - }, -- end of ["units"] - ["countryId"] = 2, - ["name"] = "USA gnd 5", - ["timeAdded"] = 43222.99, - ["category"] = "vehicle", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Nothing", - ["groupName"] = "USA gnd 5", - }, -- end of [1000072] - [1000068] = - { - ["country"] = "usa", - ["coalitionId"] = 2, - ["groupId"] = 1000068, + ["groupId"] = 7011, ["hidden"] = false, ["units"] = { @@ -3807,7 +3040,7 @@ groupsById = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286407, @@ -3831,7 +3064,7 @@ groupsById = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286447, @@ -3845,11 +3078,646 @@ groupsById = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 4", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 4", - }, -- end of [1000068] + }, -- end of [7011] + [7015] = + { + ["country"] = "usa", + ["coalitionId"] = 2, + ["groupId"] = 7015, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 69, + ["point"] = + { + ["y"] = 695073, + ["x"] = -287442, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7015, + ["groupName"] = "USA gnd 5", + ["countryId"] = 2, + ["x"] = -287442, + ["y"] = 695073, + ["heading"] = 1.4977557701918, + ["country"] = "usa", + ["unitName"] = "USA gnd 5 unit1", + ["unitId"] = 7023, + ["coalition"] = "blue", + }, -- end of [1] + [2] = + { + ["alt"] = 68, + ["point"] = + { + ["y"] = 695090, + ["x"] = -287590, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7015, + ["groupName"] = "USA gnd 5", + ["countryId"] = 2, + ["x"] = -287590, + ["y"] = 695090, + ["heading"] = 1.4977557591357, + ["country"] = "usa", + ["unitName"] = "USA gnd 5 unit2", + ["unitId"] = 7024, + ["coalition"] = "blue", + }, -- end of [2] + [3] = + { + ["alt"] = 69, + ["point"] = + { + ["y"] = 695151, + ["x"] = -287518, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7015, + ["groupName"] = "USA gnd 5", + ["countryId"] = 2, + ["x"] = -287518, + ["y"] = 695151, + ["heading"] = 1.4977557660229, + ["country"] = "usa", + ["unitName"] = "USA gnd 5 unit3", + ["unitId"] = 7025, + ["coalition"] = "blue", + }, -- end of [3] + [4] = + { + ["alt"] = 68, + ["point"] = + { + ["y"] = 694882, + ["x"] = -287479, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7015, + ["groupName"] = "USA gnd 5", + ["countryId"] = 2, + ["x"] = -287479, + ["y"] = 694882, + ["heading"] = 1.4977557575044, + ["country"] = "usa", + ["unitName"] = "USA gnd 5 unit4", + ["unitId"] = 7026, + ["coalition"] = "blue", + }, -- end of [4] + }, -- end of ["units"] + ["countryId"] = 2, + ["name"] = "USA gnd 5", + ["timeAdded"] = 43222.79, + ["category"] = "vehicle", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["groupName"] = "USA gnd 5", + }, -- end of [7015] + [7019] = + { + ["country"] = "usa", + ["groupName"] = "USA air 5", + ["modulation"] = 0, + ["groupId"] = 7019, + ["coalitionId"] = 2, + ["name"] = "USA air 5", + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 1997, + ["point"] = + { + ["y"] = 682727, + ["x"] = -288608, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "USA air 5 unit1", + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, + ["groupName"] = "USA air 5", + ["speed"] = 138.85196364465, + ["countryId"] = 2, + ["x"] = -288608, + ["coalition"] = "blue", + ["y"] = 682727, + ["country"] = "usa", + ["type"] = "B-52H", + ["unitId"] = 7031, + ["callsign"] = + { + [1] = 4, + [2] = 1, + [3] = 1, + ["name"] = "Colt11", + }, -- end of ["callsign"] + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["radioSet"] = false, + ["timeAdded"] = 43222.79, + ["category"] = "plane", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Attack", + ["uncontrolled"] = false, + }, -- end of [7019] + [7027] = + { + ["country"] = "australia", + ["groupName"] = "AUSTRALIA air 8", + ["modulation"] = 0, + ["groupId"] = 7027, + ["coalitionId"] = 0, + ["name"] = "AUSTRALIA air 8", + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 1998, + ["point"] = + { + ["y"] = 319595, + ["x"] = -198560, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 0, + ["livery_id"] = "Australian 75th Squadron", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "AUSTRALIA air 8 unit1", + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, + ["groupName"] = "AUSTRALIA air 8", + ["speed"] = 180.49294253728, + ["countryId"] = 21, + ["x"] = -198560, + ["coalition"] = "neutral", + ["y"] = 319595, + ["country"] = "australia", + ["type"] = "FA-18C_hornet", + ["unitId"] = 7043, + ["callsign"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + ["name"] = "Enfield11", + }, -- end of ["callsign"] + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 21, + ["radioSet"] = false, + ["timeAdded"] = 43223.79, + ["category"] = "plane", + ["coalition"] = "neutral", + ["startTime"] = 0, + ["task"] = "CAP", + ["uncontrolled"] = false, + }, -- end of [7027] + [7038] = + { + ["groupId"] = 7038, + ["coalitionId"] = 2, + ["hidden"] = false, + ["groupName"] = "USA static 7", + ["units"] = + { + [1] = + { + ["alt"] = 70, + ["type"] = "Sandbox", + ["point"] = + { + ["y"] = 694696, + ["x"] = -287053, + }, -- end of ["point"] + ["categoryStatic"] = "Fortifications", + ["coalitionId"] = 2, + ["y"] = 694696, + ["groupName"] = "USA static 7", + ["country"] = "usa", + ["countryId"] = 2, + ["x"] = -287053, + ["coalition"] = "blue", + ["category"] = "static", + ["unitName"] = "USA static 7", + ["unitId"] = 7038, + ["heading"] = 0, + ["groupId"] = 7038, + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["coalition"] = "blue", + ["timeAdded"] = 43223.79, + ["category"] = "static", + ["country"] = "usa", + ["startTime"] = 0, + ["name"] = "USA static 7", + ["uncontrolled"] = false, + }, -- end of [7038] + [7004] = + { + ["country"] = "usa", + ["coalitionId"] = 2, + ["groupId"] = 7004, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 48, + ["point"] = + { + ["y"] = 686871, + ["x"] = -286407, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["unitName"] = "USA gnd 2 unit1", + ["heading"] = 0, + ["unitId"] = 7007, + ["groupName"] = "USA gnd 2", + ["countryId"] = 2, + ["x"] = -286407, + ["speed"] = 0, + ["type"] = "M-113", + ["groupId"] = 7004, + ["coalition"] = "blue", + ["y"] = 686871, + ["country"] = "usa", + }, -- end of [1] + [2] = + { + ["alt"] = 48, + ["point"] = + { + ["y"] = 686871, + ["x"] = -286447, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["unitName"] = "USA gnd 2 unit2", + ["heading"] = 0, + ["unitId"] = 7008, + ["groupName"] = "USA gnd 2", + ["countryId"] = 2, + ["x"] = -286447, + ["speed"] = 0, + ["type"] = "M-113", + ["groupId"] = 7004, + ["coalition"] = "blue", + ["y"] = 686871, + ["country"] = "usa", + }, -- end of [2] + }, -- end of ["units"] + ["countryId"] = 2, + ["name"] = "USA gnd 2", + ["timeAdded"] = 43220.79, + ["category"] = "vehicle", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["groupName"] = "USA gnd 2", + }, -- end of [7004] + [7008] = + { + ["country"] = "usa", + ["coalitionId"] = 2, + ["groupId"] = 7008, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691761, + ["x"] = -284967, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284967, + ["y"] = 691761, + ["heading"] = 1.4977557594982, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit1", + ["unitId"] = 7012, + ["coalition"] = "blue", + }, -- end of [1] + [2] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691809, + ["x"] = -284861, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284861, + ["y"] = 691809, + ["heading"] = 1.4977557625792, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit2", + ["unitId"] = 7013, + ["coalition"] = "blue", + }, -- end of [2] + [3] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691744, + ["x"] = -284982, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284982, + ["y"] = 691744, + ["heading"] = 1.4977557573233, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit3", + ["unitId"] = 7014, + ["coalition"] = "blue", + }, -- end of [3] + [4] = + { + ["alt"] = 65, + ["point"] = + { + ["y"] = 691757, + ["x"] = -285098, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -285098, + ["y"] = 691757, + ["heading"] = 1.4977557640291, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit4", + ["unitId"] = 7015, + ["coalition"] = "blue", + }, -- end of [4] + }, -- end of ["units"] + ["countryId"] = 2, + ["name"] = "USA gnd 3", + ["timeAdded"] = 43221.79, + ["category"] = "vehicle", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["groupName"] = "USA gnd 3", + }, -- end of [7008] + [7012] = + { + ["country"] = "usa", + ["groupName"] = "USA air 3", + ["modulation"] = 0, + ["groupId"] = 7012, + ["coalitionId"] = 2, + ["name"] = "USA air 3", + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 1997, + ["point"] = + { + ["y"] = 682727, + ["x"] = -288608, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "USA air 3 unit1", + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, + ["groupName"] = "USA air 3", + ["speed"] = 138.85196364465, + ["countryId"] = 2, + ["x"] = -288608, + ["coalition"] = "blue", + ["y"] = 682727, + ["country"] = "usa", + ["type"] = "B-52H", + ["unitId"] = 7020, + ["callsign"] = + { + [1] = 4, + [2] = 1, + [3] = 1, + ["name"] = "Colt11", + }, -- end of ["callsign"] + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["radioSet"] = false, + ["timeAdded"] = 43221.79, + ["category"] = "plane", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Attack", + ["uncontrolled"] = false, + }, -- end of [7012] + [7016] = + { + ["groupId"] = 7016, + ["coalitionId"] = 2, + ["hidden"] = false, + ["groupName"] = "USA static 3", + ["units"] = + { + [1] = + { + ["alt"] = 63, + ["type"] = "Sandbox", + ["point"] = + { + ["y"] = 693960, + ["x"] = -287585, + }, -- end of ["point"] + ["categoryStatic"] = "Fortifications", + ["coalitionId"] = 2, + ["y"] = 693960, + ["groupName"] = "USA static 3", + ["country"] = "usa", + ["countryId"] = 2, + ["x"] = -287585, + ["coalition"] = "blue", + ["category"] = "static", + ["unitName"] = "USA static 3", + ["unitId"] = 7016, + ["heading"] = 0, + ["groupId"] = 7016, + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["coalition"] = "blue", + ["timeAdded"] = 43221.79, + ["category"] = "static", + ["country"] = "usa", + ["startTime"] = 0, + ["name"] = "USA static 3", + ["uncontrolled"] = false, + }, -- end of [7016] + [7020] = + { + ["country"] = "australia", + ["groupName"] = "AUSTRALIA air 6", + ["modulation"] = 0, + ["groupId"] = 7020, + ["coalitionId"] = 0, + ["name"] = "AUSTRALIA air 6", + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 1998, + ["point"] = + { + ["y"] = 319595, + ["x"] = -198560, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 0, + ["livery_id"] = "Australian 75th Squadron", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "AUSTRALIA air 6 unit1", + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, + ["groupName"] = "AUSTRALIA air 6", + ["speed"] = 180.49294253728, + ["countryId"] = 21, + ["x"] = -198560, + ["coalition"] = "neutral", + ["y"] = 319595, + ["country"] = "australia", + ["type"] = "FA-18C_hornet", + ["unitId"] = 7032, + ["callsign"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + ["name"] = "Enfield11", + }, -- end of ["callsign"] + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 21, + ["radioSet"] = false, + ["timeAdded"] = 43222.79, + ["category"] = "plane", + ["coalition"] = "neutral", + ["startTime"] = 0, + ["task"] = "CAP", + ["uncontrolled"] = false, + }, -- end of [7020] + [7039] = + { + ["groupId"] = 7039, + ["coalitionId"] = 2, + ["hidden"] = false, + ["groupName"] = "USA static 8", + ["units"] = + { + [1] = + { + ["alt"] = 55, + ["point"] = + { + ["y"] = 689703, + ["x"] = -286460, + }, -- end of ["point"] + ["categoryStatic"] = "Cargos", + ["coalitionId"] = 2, + ["mass"] = 1337, + ["category"] = "static", + ["unitName"] = "USA static 8", + ["shape_name"] = "ab-212_cargo", + ["type"] = "uh1h_cargo", + ["country"] = "usa", + ["groupName"] = "USA static 8", + ["y"] = 689703, + ["x"] = -286460, + ["coalition"] = "blue", + ["unitId"] = 7039, + ["heading"] = 0, + ["countryId"] = 2, + ["groupId"] = 7039, + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["coalition"] = "blue", + ["timeAdded"] = 43223.79, + ["category"] = "static", + ["country"] = "usa", + ["startTime"] = 0, + ["name"] = "USA static 8", + ["uncontrolled"] = false, + }, -- end of [7039] } -- end of groupsById diff --git a/Example DBs/mist_DBs_groupsByName.lua b/Example DBs/mist_DBs_groupsByName.lua index 6c91512..a47f6ef 100644 --- a/Example DBs/mist_DBs_groupsByName.lua +++ b/Example DBs/mist_DBs_groupsByName.lua @@ -10,11 +10,11 @@ groupsByName = { [1] = { - ["alt"] = 61, + ["alt"] = 65, ["point"] = { - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -25,8 +25,8 @@ groupsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -36,7 +36,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -104,7 +104,7 @@ groupsByName = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 8", ["modulation"] = 0, - ["groupId"] = 1000084, + ["groupId"] = 7027, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 8", ["hidden"] = false, @@ -112,11 +112,11 @@ groupsByName = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -124,14 +124,14 @@ groupsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 8 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, ["groupName"] = "AUSTRALIA air 8", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7043, @@ -146,7 +146,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -248,7 +248,7 @@ groupsByName = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 2", ["modulation"] = 0, - ["groupId"] = 1000063, + ["groupId"] = 7006, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 2", ["hidden"] = false, @@ -256,11 +256,11 @@ groupsByName = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -268,14 +268,14 @@ groupsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 2 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, ["groupName"] = "AUSTRALIA air 2", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7010, @@ -290,7 +290,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -473,7 +473,7 @@ groupsByName = ["country"] = "usa", ["groupName"] = "USA air 5", ["modulation"] = 0, - ["groupId"] = 1000076, + ["groupId"] = 7019, ["coalitionId"] = 2, ["name"] = "USA air 5", ["hidden"] = false, @@ -481,10 +481,10 @@ groupsByName = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -493,14 +493,14 @@ groupsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 5 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, ["groupName"] = "USA air 5", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7031, @@ -515,7 +515,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -618,7 +618,7 @@ groupsByName = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 6", ["modulation"] = 0, - ["groupId"] = 1000077, + ["groupId"] = 7020, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 6", ["hidden"] = false, @@ -626,11 +626,11 @@ groupsByName = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -638,14 +638,14 @@ groupsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 6 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, ["groupName"] = "AUSTRALIA air 6", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7032, @@ -660,7 +660,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -989,7 +989,7 @@ groupsByName = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000061, + ["groupId"] = 7004, ["hidden"] = false, ["units"] = { @@ -1012,7 +1012,7 @@ groupsByName = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -1036,7 +1036,7 @@ groupsByName = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -1044,7 +1044,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 2", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -1056,7 +1056,7 @@ groupsByName = ["country"] = "usa", ["groupName"] = "USA air 1", ["modulation"] = 0, - ["groupId"] = 1000062, + ["groupId"] = 7005, ["coalitionId"] = 2, ["name"] = "USA air 1", ["hidden"] = false, @@ -1064,10 +1064,10 @@ groupsByName = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1076,14 +1076,14 @@ groupsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 1 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, ["groupName"] = "USA air 1", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7009, @@ -1098,7 +1098,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -1115,20 +1115,20 @@ groupsByName = { [1] = { - ["alt"] = 61, + ["alt"] = 65, ["type"] = "Sandbox", ["point"] = { - ["y"] = 690788, - ["x"] = -285547, + ["y"] = 693778, + ["x"] = -286660, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 690788, + ["y"] = 693778, ["groupName"] = "USA static 1", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285547, + ["x"] = -286660, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 1", @@ -1139,7 +1139,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1212,20 +1212,20 @@ groupsByName = { [1] = { - ["alt"] = 60, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 691139, - ["x"] = -286038, + ["y"] = 693960, + ["x"] = -287585, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 691139, + ["y"] = 693960, ["groupName"] = "USA static 3", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -286038, + ["x"] = -287585, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 3", @@ -1236,7 +1236,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1255,10 +1255,11 @@ groupsByName = ["alt"] = 0, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 2 unit1", @@ -1266,22 +1267,22 @@ groupsByName = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -163302, + ["x"] = -161099, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000071, ["coalition"] = "neutral", - ["y"] = 266588, + ["type"] = "PERRY", + ["groupId"] = 7014, + ["y"] = 267048, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 2", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000071, + ["groupId"] = 7014, ["groupName"] = "AUSTRALIA shp 2", }, -- end of ["AUSTRALIA shp 2"] ["AUSTRALIA shp 4"] = @@ -1296,10 +1297,11 @@ groupsByName = ["alt"] = 0, ["point"] = { - ["y"] = 268804, - ["x"] = -165342, + ["y"] = 266075, + ["x"] = -162226, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 4 unit1", @@ -1307,22 +1309,22 @@ groupsByName = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -165342, + ["x"] = -162226, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000085, ["coalition"] = "neutral", - ["y"] = 268804, + ["type"] = "PERRY", + ["groupId"] = 7028, + ["y"] = 266075, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 4", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000085, + ["groupId"] = 7028, ["groupName"] = "AUSTRALIA shp 4", }, -- end of ["AUSTRALIA shp 4"] ["USA static 6"] = @@ -1338,8 +1340,8 @@ groupsByName = ["alt"] = 73, ["point"] = { - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1350,8 +1352,8 @@ groupsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -1361,7 +1363,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1390,6 +1392,9 @@ groupsByName = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -1401,7 +1406,6 @@ groupsByName = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -1409,6 +1413,7 @@ groupsByName = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, }, -- end of [1] }, -- end of ["units"] @@ -1558,6 +1563,43 @@ groupsByName = }, -- end of [1] }, -- end of ["units"] }, -- end of ["tent #001"] + ["poly"] = + { + ["country"] = "usa", + ["groupName"] = "poly", + ["units"] = + { + [1] = + { + ["heading"] = 2.3261877017598, + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["groupName"] = "poly", + ["type"] = "AAV7", + ["countryId"] = 2, + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["country"] = "usa", + ["skill"] = "Average", + }, -- end of [1] + }, -- end of ["units"] + ["coalition"] = "blue", + ["groupId"] = 47, + ["category"] = "vehicle", + ["countryId"] = 2, + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["hidden"] = false, + }, -- end of ["poly"] ["RU Farp"] = { ["countryId"] = 0, @@ -1655,20 +1697,20 @@ groupsByName = { [1] = { - ["alt"] = 61, + ["alt"] = 70, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693155, - ["x"] = -287187, + ["y"] = 694696, + ["x"] = -287053, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693155, + ["y"] = 694696, ["groupName"] = "USA static 7", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -287187, + ["x"] = -287053, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 7", @@ -1679,47 +1721,48 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, ["name"] = "USA static 7", ["uncontrolled"] = false, }, -- end of ["USA static 7"] - ["RuTent1"] = + ["cargoBob"] = { - ["countryId"] = 0, - ["groupId"] = 18, - ["country"] = "russia", - ["coalition"] = "red", + ["countryId"] = 2, + ["groupId"] = 31, + ["country"] = "usa", + ["coalition"] = "blue", ["category"] = "static", - ["groupName"] = "RuTent1", + ["groupName"] = "cargoBob", ["units"] = { [1] = { - ["shape_name"] = "PalatkaB", - ["type"] = "FARP Tent", + ["shape_name"] = "ab-212_cargo", + ["type"] = "uh1h_cargo", ["point"] = { - ["y"] = 617976.57142856, - ["x"] = -258649.71428571, + ["y"] = 675199.99999999, + ["x"] = -292007.14285714, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["y"] = 617976.57142856, - ["groupName"] = "RuTent1", - ["coalition"] = "red", - ["countryId"] = 0, - ["x"] = -258649.71428571, - ["groupId"] = 18, + ["categoryStatic"] = "Cargos", + ["y"] = 675199.99999999, + ["coalition"] = "blue", + ["groupName"] = "cargoBob", + ["groupId"] = 31, + ["countryId"] = 2, + ["mass"] = 371, + ["unitId"] = 45, ["category"] = "static", - ["unitName"] = "RuTent1", - ["unitId"] = 40, + ["unitName"] = "cargoBob", + ["x"] = -292007.14285714, ["heading"] = 0, - ["country"] = "russia", + ["country"] = "usa", }, -- end of [1] }, -- end of ["units"] - }, -- end of ["RuTent1"] + }, -- end of ["cargoBob"] ["gavinstack"] = { ["country"] = "usa", @@ -1870,29 +1913,29 @@ groupsByName = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000058, + ["groupId"] = 7001, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286548, - ["y"] = 692663, - ["heading"] = 1.4977557600419, + ["x"] = -284648, + ["y"] = 693761, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -1900,23 +1943,23 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 62, + ["alt"] = 73, ["point"] = { - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286576, - ["y"] = 692678, - ["heading"] = 1.4977557629417, + ["x"] = -284456, + ["y"] = 693771, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -1924,23 +1967,23 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 63, + ["alt"] = 72, ["point"] = { - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286539, - ["y"] = 692774, - ["heading"] = 1.497755762398, + ["x"] = -284639, + ["y"] = 693781, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -1948,23 +1991,23 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692553, - ["x"] = -286525, + ["y"] = 693653, + ["x"] = -284699, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286525, - ["y"] = 692553, - ["heading"] = 1.4977557625792, + ["x"] = -284699, + ["y"] = 693653, + ["heading"] = 1.4977557629417, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -1973,48 +2016,47 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 1", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 1", }, -- end of ["USA gnd 1"] - ["cargoBob"] = + ["RuTent1"] = { - ["countryId"] = 2, - ["groupId"] = 31, - ["country"] = "usa", - ["coalition"] = "blue", + ["countryId"] = 0, + ["groupId"] = 18, + ["country"] = "russia", + ["coalition"] = "red", ["category"] = "static", - ["groupName"] = "cargoBob", + ["groupName"] = "RuTent1", ["units"] = { [1] = { - ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["shape_name"] = "PalatkaB", + ["type"] = "FARP Tent", ["point"] = { - ["y"] = 675199.99999999, - ["x"] = -292007.14285714, + ["y"] = 617976.57142856, + ["x"] = -258649.71428571, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, - ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, - ["unitId"] = 45, + ["categoryStatic"] = "Fortifications", + ["y"] = 617976.57142856, + ["groupName"] = "RuTent1", + ["coalition"] = "red", + ["countryId"] = 0, + ["x"] = -258649.71428571, + ["groupId"] = 18, ["category"] = "static", - ["unitName"] = "cargoBob", - ["x"] = -292007.14285714, + ["unitName"] = "RuTent1", + ["unitId"] = 40, ["heading"] = 0, - ["country"] = "usa", + ["country"] = "russia", }, -- end of [1] }, -- end of ["units"] - }, -- end of ["cargoBob"] + }, -- end of ["RuTent1"] ["teleGroup"] = { ["country"] = "usa", @@ -2027,8 +2069,8 @@ groupsByName = ["alt"] = 60, ["point"] = { - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2038,8 +2080,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287110, - ["y"] = 692389, + ["x"] = -285145, + ["y"] = 689785, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -2048,11 +2090,11 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2062,8 +2104,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286935, - ["y"] = 692345, + ["x"] = -285166, + ["y"] = 689948, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -2072,11 +2114,11 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2086,8 +2128,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287213, - ["y"] = 692308, + ["x"] = -285298, + ["y"] = 689856, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -2096,11 +2138,11 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2110,8 +2152,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286989, - ["y"] = 692321, + ["x"] = -285058, + ["y"] = 689796, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -2120,11 +2162,11 @@ groupsByName = }, -- end of [4] [5] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2134,8 +2176,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287225, - ["y"] = 692297, + ["x"] = -285191, + ["y"] = 689973, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -2144,11 +2186,11 @@ groupsByName = }, -- end of [5] [6] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2158,8 +2200,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287012, - ["y"] = 692445, + ["x"] = -285149, + ["y"] = 689860, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -2168,11 +2210,11 @@ groupsByName = }, -- end of [6] [7] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2182,8 +2224,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287237, - ["y"] = 692311, + ["x"] = -285216, + ["y"] = 689799, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -2268,33 +2310,34 @@ groupsByName = ["alt"] = 0, ["point"] = { - ["y"] = 267963, - ["x"] = -165895, + ["y"] = 268869, + ["x"] = -163156, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000078, + ["unitName"] = "AUSTRALIA shp 3 unit1", + ["heading"] = 0, + ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -165895, - ["y"] = 267963, - ["heading"] = 0, - ["country"] = "australia", - ["unitName"] = "AUSTRALIA shp 3 unit1", - ["unitId"] = 7033, + ["x"] = -163156, + ["speed"] = 0, ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7021, + ["y"] = 268869, + ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 3", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000078, + ["groupId"] = 7021, ["groupName"] = "AUSTRALIA shp 3", }, -- end of ["AUSTRALIA shp 3"] ["cloneAir"] = @@ -2355,7 +2398,7 @@ groupsByName = ["country"] = "usa", ["groupName"] = "USA air 3", ["modulation"] = 0, - ["groupId"] = 1000069, + ["groupId"] = 7012, ["coalitionId"] = 2, ["name"] = "USA air 3", ["hidden"] = false, @@ -2363,10 +2406,10 @@ groupsByName = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2375,14 +2418,14 @@ groupsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 3 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, ["groupName"] = "USA air 3", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7020, @@ -2397,7 +2440,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -2408,29 +2451,29 @@ groupsByName = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000079, + ["groupId"] = 7022, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287036, - ["y"] = 692747, - ["heading"] = 1.4977557703724, + ["x"] = -284021, + ["y"] = 693098, + ["heading"] = 1.4977557645728, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -2438,23 +2481,23 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 5.0056692998623e-05, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -286920, - ["y"] = 692716, - ["heading"] = 1.4977557703724, + ["x"] = -284053, + ["y"] = 693012, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -2462,23 +2505,23 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.00018869274936151, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287056, - ["y"] = 692580, - ["heading"] = 1.4977557642103, + ["x"] = -283898, + ["y"] = 693026, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2486,23 +2529,23 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.0040063578450385, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287189, - ["y"] = 692752, - ["heading"] = 1.4977557678351, + ["x"] = -284127, + ["y"] = 693093, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -2511,7 +2554,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 7", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -2625,7 +2668,7 @@ groupsByName = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000082, + ["groupId"] = 7025, ["hidden"] = false, ["units"] = { @@ -2648,7 +2691,7 @@ groupsByName = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2672,7 +2715,7 @@ groupsByName = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2680,7 +2723,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 8", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -2697,20 +2740,20 @@ groupsByName = { [1] = { - ["alt"] = 69, + ["alt"] = 68, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693432, - ["x"] = -285294, + ["y"] = 693480, + ["x"] = -285622, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693432, + ["y"] = 693480, ["groupName"] = "USA static 5", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285294, + ["x"] = -285622, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 5", @@ -2721,7 +2764,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -2733,7 +2776,7 @@ groupsByName = ["country"] = "usa", ["groupName"] = "USA air 7", ["modulation"] = 0, - ["groupId"] = 1000083, + ["groupId"] = 7026, ["coalitionId"] = 2, ["name"] = "USA air 7", ["hidden"] = false, @@ -2741,10 +2784,10 @@ groupsByName = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2753,14 +2796,14 @@ groupsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 7 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, ["groupName"] = "USA air 7", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7042, @@ -2775,7 +2818,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -2787,7 +2830,7 @@ groupsByName = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 4", ["modulation"] = 0, - ["groupId"] = 1000070, + ["groupId"] = 7013, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 4", ["hidden"] = false, @@ -2795,11 +2838,11 @@ groupsByName = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -2807,14 +2850,14 @@ groupsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 4 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, ["groupName"] = "AUSTRALIA air 4", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7021, @@ -2829,7 +2872,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -2840,7 +2883,7 @@ groupsByName = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000075, + ["groupId"] = 7018, ["hidden"] = false, ["units"] = { @@ -2863,7 +2906,7 @@ groupsByName = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2887,7 +2930,7 @@ groupsByName = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2895,154 +2938,40 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 6", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 6", }, -- end of ["USA gnd 6"] - ["USA gnd 3"] = - { - ["country"] = "usa", - ["coalitionId"] = 2, - ["groupId"] = 1000065, - ["hidden"] = false, - ["units"] = - { - [1] = - { - ["alt"] = 60, - ["point"] = - { - ["y"] = 692171, - ["x"] = -286749, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286749, - ["y"] = 692171, - ["heading"] = 1.4977557591357, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit1", - ["unitId"] = 7012, - ["coalition"] = "blue", - }, -- end of [1] - [2] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 692204, - ["x"] = -286580, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286580, - ["y"] = 692204, - ["heading"] = 1.4977557614918, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit2", - ["unitId"] = 7013, - ["coalition"] = "blue", - }, -- end of [2] - [3] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 692150, - ["x"] = -286560, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286560, - ["y"] = 692150, - ["heading"] = 1.4977557614918, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit3", - ["unitId"] = 7014, - ["coalition"] = "blue", - }, -- end of [3] - [4] = - { - ["alt"] = 60, - ["point"] = - { - ["y"] = 691995, - ["x"] = -286713, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286713, - ["y"] = 691995, - ["heading"] = 1.4977557627604, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit4", - ["unitId"] = 7015, - ["coalition"] = "blue", - }, -- end of [4] - }, -- end of ["units"] - ["countryId"] = 2, - ["name"] = "USA gnd 3", - ["timeAdded"] = 43221.99, - ["category"] = "vehicle", - ["coalition"] = "blue", - ["startTime"] = 0, - ["task"] = "Ground Nothing", - ["groupName"] = "USA gnd 3", - }, -- end of ["USA gnd 3"] ["USA gnd 5"] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000072, + ["groupId"] = 7015, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 695073, + ["x"] = -287442, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288904, - ["y"] = 692563, - ["heading"] = 1.4977557725472, + ["x"] = -287442, + ["y"] = 695073, + ["heading"] = 1.4977557701918, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -3050,23 +2979,23 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 56, + ["alt"] = 68, ["point"] = { - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288844, - ["y"] = 692623, - ["heading"] = 1.4977557660227, + ["x"] = -287590, + ["y"] = 695090, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -3074,23 +3003,23 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692459, - ["x"] = -288865, + ["y"] = 695151, + ["x"] = -287518, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288865, - ["y"] = 692459, - ["heading"] = 1.4977557638479, + ["x"] = -287518, + ["y"] = 695151, + ["heading"] = 1.4977557660229, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -3098,23 +3027,23 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 55, + ["alt"] = 68, ["point"] = { - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 694882, + ["x"] = -287479, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -289069, - ["y"] = 692675, - ["heading"] = 1.4977557685601, + ["x"] = -287479, + ["y"] = 694882, + ["heading"] = 1.4977557575044, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -3123,7 +3052,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 5", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, @@ -3134,7 +3063,7 @@ groupsByName = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000068, + ["groupId"] = 7011, ["hidden"] = false, ["units"] = { @@ -3151,7 +3080,7 @@ groupsByName = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286407, @@ -3175,7 +3104,7 @@ groupsByName = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286447, @@ -3189,13 +3118,127 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 4", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 4", }, -- end of ["USA gnd 4"] + ["USA gnd 3"] = + { + ["country"] = "usa", + ["coalitionId"] = 2, + ["groupId"] = 7008, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691761, + ["x"] = -284967, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284967, + ["y"] = 691761, + ["heading"] = 1.4977557594982, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit1", + ["unitId"] = 7012, + ["coalition"] = "blue", + }, -- end of [1] + [2] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691809, + ["x"] = -284861, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284861, + ["y"] = 691809, + ["heading"] = 1.4977557625792, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit2", + ["unitId"] = 7013, + ["coalition"] = "blue", + }, -- end of [2] + [3] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691744, + ["x"] = -284982, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284982, + ["y"] = 691744, + ["heading"] = 1.4977557573233, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit3", + ["unitId"] = 7014, + ["coalition"] = "blue", + }, -- end of [3] + [4] = + { + ["alt"] = 65, + ["point"] = + { + ["y"] = 691757, + ["x"] = -285098, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -285098, + ["y"] = 691757, + ["heading"] = 1.4977557640291, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit4", + ["unitId"] = 7015, + ["coalition"] = "blue", + }, -- end of [4] + }, -- end of ["units"] + ["countryId"] = 2, + ["name"] = "USA gnd 3", + ["timeAdded"] = 43221.79, + ["category"] = "vehicle", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Nothing", + ["groupName"] = "USA gnd 3", + }, -- end of ["USA gnd 3"] ["perry"] = { ["groupId"] = 44, @@ -3246,8 +3289,8 @@ groupsByName = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -3256,15 +3299,15 @@ groupsByName = ["speed"] = 44.444444444444, ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["unitName"] = "Rotary-1-1", ["groupName"] = "nH", ["coalition"] = "neutral", ["countryId"] = 21, - ["x"] = -155967.80633993, - ["y"] = 405888.85058741, + ["x"] = -158700.87914814, + ["y"] = 404406.46136648, ["unitId"] = 68, - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["skill"] = "High", ["callsign"] = { @@ -3395,6 +3438,9 @@ groupsByName = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -3406,7 +3452,6 @@ groupsByName = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -3414,6 +3459,7 @@ groupsByName = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, }, -- end of [1] }, -- end of ["units"] @@ -3438,10 +3484,11 @@ groupsByName = ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 1 unit1", @@ -3449,22 +3496,22 @@ groupsByName = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -161996, + ["x"] = -163065, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000064, ["coalition"] = "neutral", - ["y"] = 266228, + ["type"] = "PERRY", + ["groupId"] = 7007, + ["y"] = 265153, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 1", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000064, + ["groupId"] = 7007, ["groupName"] = "AUSTRALIA shp 1", }, -- end of ["AUSTRALIA shp 1"] ["static_on_ship1 #001"] = @@ -3776,11 +3823,11 @@ groupsByName = { [1] = { - ["alt"] = 67, + ["alt"] = 55, ["point"] = { - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -3791,8 +3838,8 @@ groupsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -3802,7 +3849,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -3819,11 +3866,11 @@ groupsByName = { [1] = { - ["alt"] = 72, + ["alt"] = 70, ["point"] = { - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -3834,8 +3881,8 @@ groupsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -3845,7 +3892,7 @@ groupsByName = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, diff --git a/Example DBs/mist_DBs_humansById.lua b/Example DBs/mist_DBs_humansById.lua index 9f2d7e3..cc85391 100644 --- a/Example DBs/mist_DBs_humansById.lua +++ b/Example DBs/mist_DBs_humansById.lua @@ -13,6 +13,9 @@ humansById = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -24,7 +27,6 @@ humansById = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -32,6 +34,7 @@ humansById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, }, -- end of [11] [8] = @@ -115,6 +118,9 @@ humansById = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -126,7 +132,6 @@ humansById = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -134,6 +139,7 @@ humansById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, }, -- end of [12] [48] = diff --git a/Example DBs/mist_DBs_humansByName.lua b/Example DBs/mist_DBs_humansByName.lua index f320134..38b061d 100644 --- a/Example DBs/mist_DBs_humansByName.lua +++ b/Example DBs/mist_DBs_humansByName.lua @@ -109,6 +109,9 @@ humansByName = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -120,7 +123,6 @@ humansByName = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -128,6 +130,7 @@ humansByName = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, }, -- end of ["A-10C Client #1_unit"] ["Su-33 Client #2Unit"] = @@ -171,6 +174,9 @@ humansByName = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -182,7 +188,6 @@ humansByName = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -190,6 +195,7 @@ humansByName = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, }, -- end of ["A-10C Client #2_unit"] ["Su-33 Client #1Unit"] = diff --git a/Example DBs/mist_DBs_markList.lua b/Example DBs/mist_DBs_markList.lua new file mode 100644 index 0000000..25100f2 --- /dev/null +++ b/Example DBs/mist_DBs_markList.lua @@ -0,0 +1,334 @@ +markList = +{ + [1000] = + { + ["markId"] = 1000, + ["radius"] = 500, + ["color"] = + { + [1] = 0.9, + [2] = 0.9, + [3] = 0.9, + [4] = 0.5, + }, -- end of ["color"] + ["text"] = "", + ["readOnly"] = true, + ["coa"] = -1, + ["time"] = 2.801, + ["markType"] = "freeform", + ["lineType"] = 2, + ["fillColor"] = + { + [1] = 0.1, + [2] = 0.1, + [3] = 0.1, + [4] = 0.5, + }, -- end of ["fillColor"] + ["pos"] = + { + [1] = + { + ["y"] = 0, + ["x"] = -244729.2581753, + ["z"] = 185783.38833846, + }, -- end of [1] + [2] = + { + ["y"] = 0, + ["x"] = -355273.20683008, + ["z"] = 303168.81915755, + }, -- end of [2] + [3] = + { + ["y"] = 0, + ["x"] = -307022.75367132, + ["z"] = 433877.1362966, + }, -- end of [3] + [4] = + { + ["y"] = 0, + ["x"] = -250850.5843223, + ["z"] = 521376.09239795, + }, -- end of [4] + [5] = + { + ["y"] = 0, + ["x"] = -208001.30129325, + ["z"] = 429196.12218418, + }, -- end of [5] + [6] = + { + ["y"] = 0, + ["x"] = -251930.81834825, + ["z"] = 344217.71214337, + }, -- end of [6] + [7] = + { + ["y"] = 0, + ["x"] = -172713.65644579, + ["z"] = 330534.74781476, + }, -- end of [7] + [8] = + { + ["y"] = 0, + ["x"] = -160471.00415178, + ["z"] = 230793.1394194, + }, -- end of [8] + }, -- end of ["pos"] + }, -- end of [1000] + [1002] = + { + ["markId"] = 1002, + ["radius"] = 3000, + ["color"] = + { + [1] = 0.9, + [2] = 0.9, + [3] = 0.9, + [4] = 0.5, + }, -- end of ["color"] + ["text"] = "", + ["readOnly"] = true, + ["coa"] = -1, + ["time"] = 2.801, + ["markType"] = "circle", + ["lineType"] = 2, + ["fillColor"] = + { + [1] = 0, + [2] = 0, + [3] = 1, + [4] = 0.5, + }, -- end of ["fillColor"] + ["pos"] = + { + ["y"] = 320.01031494141, + ["x"] = -52089.546875, + [1] = + { + ["y"] = 320.01031494141, + ["x"] = -52089.546875, + ["z"] = 707418.0625, + }, -- end of [1] + ["z"] = 707418.0625, + }, -- end of ["pos"] + }, -- end of [1002] + [1004] = + { + ["markId"] = 1004, + ["radius"] = 3000, + ["color"] = + { + [1] = 0.9, + [2] = 0.9, + [3] = 0.9, + [4] = 0.5, + }, -- end of ["color"] + ["text"] = "", + ["readOnly"] = true, + ["coa"] = -1, + ["time"] = 2.801, + ["markType"] = "circle", + ["lineType"] = 2, + ["fillColor"] = + { + [1] = 0, + [2] = 0, + [3] = 1, + [4] = 0.5, + }, -- end of ["fillColor"] + ["pos"] = + { + ["y"] = 0, + ["x"] = -355263.93360573, + [1] = + { + ["y"] = 0, + ["x"] = -355263.93360573, + ["z"] = 443853.03125, + }, -- end of [1] + ["z"] = 443853.03125, + }, -- end of ["pos"] + }, -- end of [1004] + [1006] = + { + ["markId"] = 1006, + ["time"] = 2.801, + ["markType"] = "panel", + ["text"] = "Neutral : Cafe", + ["markScope"] = "all", + ["pos"] = + { + ["y"] = 0, + ["x"] = -115514.59796101, + ["z"] = 464123.689023, + }, -- end of ["pos"] + }, -- end of [1006] + [1008] = + { + ["markId"] = 1008, + ["time"] = 2.801, + ["markType"] = "panel", + ["text"] = "Neutral : M-113", + ["markScope"] = "all", + ["pos"] = + { + ["y"] = 0, + ["x"] = -146108.63642373, + ["z"] = 445199.91242668, + }, -- end of ["pos"] + }, -- end of [1008] + [1010] = + { + ["markId"] = 1010, + ["time"] = 2.801, + ["markType"] = "panel", + ["text"] = "Neutral : PERRY", + ["markScope"] = "all", + ["pos"] = + { + ["y"] = 0, + ["x"] = -153426.17965693, + ["z"] = 342754.30716193, + }, -- end of ["pos"] + }, -- end of [1010] + [1001] = + { + ["markId"] = 1001, + ["radius"] = 3000, + ["color"] = + { + [1] = 0.9, + [2] = 0.9, + [3] = 0.9, + [4] = 0.5, + }, -- end of ["color"] + ["text"] = "", + ["readOnly"] = true, + ["coa"] = -1, + ["time"] = 2.801, + ["markType"] = "circle", + ["lineType"] = 2, + ["fillColor"] = + { + [1] = 0, + [2] = 0, + [3] = 1, + [4] = 0.5, + }, -- end of ["fillColor"] + ["pos"] = + { + ["y"] = 21.01003074646, + ["x"] = -195650.515625, + [1] = + { + ["y"] = 21.01003074646, + ["x"] = -195650.515625, + ["z"] = 515898.75, + }, -- end of [1] + ["z"] = 515898.75, + }, -- end of ["pos"] + }, -- end of [1001] + [1003] = + { + ["markId"] = 1003, + ["radius"] = 3000, + ["color"] = + { + [1] = 0.9, + [2] = 0.9, + [3] = 0.9, + [4] = 0.5, + }, -- end of ["color"] + ["text"] = "", + ["readOnly"] = true, + ["coa"] = -1, + ["time"] = 2.801, + ["markType"] = "circle", + ["lineType"] = 2, + ["fillColor"] = + { + [1] = 0, + [2] = 0, + [3] = 1, + [4] = 0.5, + }, -- end of ["fillColor"] + ["pos"] = + { + ["y"] = 154.61184692383, + ["x"] = -83329.7890625, + [1] = + { + ["y"] = 154.61184692383, + ["x"] = -83329.7890625, + ["z"] = 835634.6875, + }, -- end of [1] + ["z"] = 835634.6875, + }, -- end of ["pos"] + }, -- end of [1003] + [1005] = + { + ["markId"] = 1005, + ["radius"] = 3000, + ["color"] = + { + [1] = 0.9, + [2] = 0.9, + [3] = 0.9, + [4] = 0.5, + }, -- end of ["color"] + ["text"] = "", + ["readOnly"] = true, + ["coa"] = -1, + ["time"] = 2.801, + ["markType"] = "circle", + ["lineType"] = 2, + ["fillColor"] = + { + [1] = 0, + [2] = 0, + [3] = 1, + [4] = 0.5, + }, -- end of ["fillColor"] + ["pos"] = + { + ["y"] = 0, + ["x"] = -356064.09419542, + [1] = + { + ["y"] = 0, + ["x"] = -356064.09419542, + ["z"] = 444653.03125, + }, -- end of [1] + ["z"] = 444653.03125, + }, -- end of ["pos"] + }, -- end of [1005] + [1007] = + { + ["markId"] = 1007, + ["time"] = 2.801, + ["markType"] = "panel", + ["text"] = "Neutral : FA-18C_hornet", + ["markScope"] = "all", + ["pos"] = + { + ["y"] = 0, + ["x"] = -198551.02959497, + ["z"] = 319582.08692347, + }, -- end of ["pos"] + }, -- end of [1007] + [1009] = + { + ["markId"] = 1009, + ["time"] = 2.801, + ["markType"] = "panel", + ["text"] = "Neutral : CH-47D", + ["markScope"] = "all", + ["pos"] = + { + ["y"] = 0, + ["x"] = -158700.87914814, + ["z"] = 404406.46136648, + }, -- end of ["pos"] + }, -- end of [1009] +} -- end of markList diff --git a/Example DBs/mist_DBs_missionData.lua b/Example DBs/mist_DBs_missionData.lua index 2e48933..4aa2080 100644 --- a/Example DBs/mist_DBs_missionData.lua +++ b/Example DBs/mist_DBs_missionData.lua @@ -1,6 +1,6 @@ missionData = { - ["version"] = 18, + ["version"] = 19, ["files"] = { }, -- end of ["files"] diff --git a/Example DBs/mist_DBs_navPoints.lua b/Example DBs/mist_DBs_navPoints.lua index 49421d6..e6a8adf 100644 --- a/Example DBs/mist_DBs_navPoints.lua +++ b/Example DBs/mist_DBs_navPoints.lua @@ -29,8 +29,8 @@ navPoints = }, -- end of [1] [2] = { - ["y"] = 659819.99999999, - ["x"] = -257614.28571428, + ["y"] = 663781.15649176, + ["x"] = -260714.32122958, ["name"] = "KB1SE", ["callsignStr"] = "KB1SE", ["id"] = 4, @@ -45,8 +45,8 @@ navPoints = ["point"] = { ["y"] = 0, - ["x"] = -257614.28571428, - ["z"] = 659819.99999999, + ["x"] = -260714.32122958, + ["z"] = 663781.15649176, }, -- end of ["point"] }, -- end of [2] [3] = @@ -73,8 +73,8 @@ navPoints = }, -- end of [3] [4] = { - ["y"] = 659248.57142856, - ["x"] = -243614.28571428, + ["y"] = 660970.8133815, + ["x"] = -244130.95830016, ["name"] = "KB1NE", ["callsignStr"] = "KB1NE", ["id"] = 6, @@ -89,8 +89,8 @@ navPoints = ["point"] = { ["y"] = 0, - ["x"] = -243614.28571428, - ["z"] = 659248.57142856, + ["x"] = -244130.95830016, + ["z"] = 660970.8133815, }, -- end of ["point"] }, -- end of [4] [5] = @@ -118,8 +118,8 @@ navPoints = }, -- end of [5] [6] = { - ["y"] = 670391.42857142, - ["x"] = -260757.14285714, + ["y"] = 674352.58506319, + ["x"] = -267473.88647362, ["name"] = "DODGE", ["callsignStr"] = "DODGE", ["id"] = 8, @@ -134,8 +134,8 @@ navPoints = ["point"] = { ["y"] = 0, - ["x"] = -260757.14285714, - ["z"] = 670391.42857142, + ["x"] = -267473.88647362, + ["z"] = 674352.58506319, }, -- end of ["point"] ["callsign"] = 3, }, -- end of [6] diff --git a/Example DBs/mist_DBs_removedAliveUnits.lua b/Example DBs/mist_DBs_removedAliveUnits.lua index d3f4003..d5dce08 100644 --- a/Example DBs/mist_DBs_removedAliveUnits.lua +++ b/Example DBs/mist_DBs_removedAliveUnits.lua @@ -155,9 +155,9 @@ removedAliveUnits = ["y"] = 654585.71428571, ["pos"] = { - ["y"] = 11.750775044011, - ["x"] = -292918.85355006, - ["z"] = 654583.32898538, + ["y"] = 11.896243705612, + ["x"] = -292885.8154643, + ["z"] = 654581.81480703, }, -- end of ["pos"] }, -- end of [16782848] [16783104] = @@ -187,9 +187,9 @@ removedAliveUnits = ["y"] = 654625.71428571, ["pos"] = { - ["y"] = 11.784134667198, - ["x"] = -292988.34774035, - ["z"] = 654626.95184203, + ["y"] = 11.927206059256, + ["x"] = -292936.5144784, + ["z"] = 654619.49063824, }, -- end of ["pos"] }, -- end of [16783104] [16783360] = @@ -219,9 +219,9 @@ removedAliveUnits = ["y"] = 654665.71428571, ["pos"] = { - ["y"] = 12.104105100501, - ["x"] = -293040.29557322, - ["z"] = 654661.78361224, + ["y"] = 11.942705180761, + ["x"] = -292999.01167319, + ["z"] = 654661.6137778, }, -- end of ["pos"] }, -- end of [16783360] [16788736] = @@ -347,9 +347,9 @@ removedAliveUnits = ["y"] = 654545.71428571, ["pos"] = { - ["y"] = 11.73456417819, - ["x"] = -292855.65589344, - ["z"] = 654539.4776362, + ["y"] = 11.750308354347, + ["x"] = -292852.11861931, + ["z"] = 654539.33966137, }, -- end of ["pos"] }, -- end of [16782592] } -- end of removedAliveUnits diff --git a/Example DBs/mist_DBs_units.lua b/Example DBs/mist_DBs_units.lua index 76abb3e..770a0e8 100644 --- a/Example DBs/mist_DBs_units.lua +++ b/Example DBs/mist_DBs_units.lua @@ -55,10 +55,11 @@ units = ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 1 unit1", @@ -66,22 +67,22 @@ units = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -161996, + ["x"] = -163065, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000064, ["coalition"] = "neutral", - ["y"] = 266228, + ["type"] = "PERRY", + ["groupId"] = 7007, + ["y"] = 265153, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 1", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000064, + ["groupId"] = 7007, ["groupName"] = "AUSTRALIA shp 1", }, -- end of [2] [3] = @@ -96,10 +97,11 @@ units = ["alt"] = 0, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 2 unit1", @@ -107,22 +109,22 @@ units = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -163302, + ["x"] = -161099, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000071, ["coalition"] = "neutral", - ["y"] = 266588, + ["type"] = "PERRY", + ["groupId"] = 7014, + ["y"] = 267048, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 2", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000071, + ["groupId"] = 7014, ["groupName"] = "AUSTRALIA shp 2", }, -- end of [3] [4] = @@ -137,33 +139,34 @@ units = ["alt"] = 0, ["point"] = { - ["y"] = 267963, - ["x"] = -165895, + ["y"] = 268869, + ["x"] = -163156, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000078, + ["unitName"] = "AUSTRALIA shp 3 unit1", + ["heading"] = 0, + ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -165895, - ["y"] = 267963, - ["heading"] = 0, - ["country"] = "australia", - ["unitName"] = "AUSTRALIA shp 3 unit1", - ["unitId"] = 7033, + ["x"] = -163156, + ["speed"] = 0, ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7021, + ["y"] = 268869, + ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 3", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000078, + ["groupId"] = 7021, ["groupName"] = "AUSTRALIA shp 3", }, -- end of [4] [5] = @@ -178,10 +181,11 @@ units = ["alt"] = 0, ["point"] = { - ["y"] = 268804, - ["x"] = -165342, + ["y"] = 266075, + ["x"] = -162226, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 4 unit1", @@ -189,22 +193,22 @@ units = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -165342, + ["x"] = -162226, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000085, ["coalition"] = "neutral", - ["y"] = 268804, + ["type"] = "PERRY", + ["groupId"] = 7028, + ["y"] = 266075, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 21, ["name"] = "AUSTRALIA shp 4", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "ship", ["coalition"] = "neutral", ["startTime"] = 0, - ["groupId"] = 1000085, + ["groupId"] = 7028, ["groupName"] = "AUSTRALIA shp 4", }, -- end of [5] }, -- end of ["ship"] @@ -348,7 +352,7 @@ units = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 2", ["modulation"] = 0, - ["groupId"] = 1000063, + ["groupId"] = 7006, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 2", ["hidden"] = false, @@ -356,11 +360,11 @@ units = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -368,14 +372,14 @@ units = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 2 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, ["groupName"] = "AUSTRALIA air 2", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7010, @@ -390,7 +394,7 @@ units = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -402,7 +406,7 @@ units = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 4", ["modulation"] = 0, - ["groupId"] = 1000070, + ["groupId"] = 7013, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 4", ["hidden"] = false, @@ -410,11 +414,11 @@ units = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -422,14 +426,14 @@ units = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 4 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, ["groupName"] = "AUSTRALIA air 4", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7021, @@ -444,7 +448,7 @@ units = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -456,7 +460,7 @@ units = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 6", ["modulation"] = 0, - ["groupId"] = 1000077, + ["groupId"] = 7020, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 6", ["hidden"] = false, @@ -464,11 +468,11 @@ units = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -476,14 +480,14 @@ units = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 6 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, ["groupName"] = "AUSTRALIA air 6", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7032, @@ -498,7 +502,7 @@ units = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -510,7 +514,7 @@ units = ["country"] = "australia", ["groupName"] = "AUSTRALIA air 8", ["modulation"] = 0, - ["groupId"] = 1000084, + ["groupId"] = 7027, ["coalitionId"] = 0, ["name"] = "AUSTRALIA air 8", ["hidden"] = false, @@ -518,11 +522,11 @@ units = { [1] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -530,14 +534,14 @@ units = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 8 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, ["groupName"] = "AUSTRALIA air 8", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7043, @@ -552,7 +556,7 @@ units = }, -- end of ["units"] ["countryId"] = 21, ["radioSet"] = false, - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "plane", ["coalition"] = "neutral", ["startTime"] = 0, @@ -576,8 +580,8 @@ units = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -586,12 +590,12 @@ units = ["speed"] = 44.444444444444, ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["groupId"] = 45, ["groupName"] = "nH", ["onboard_num"] = "050", ["countryId"] = 21, - ["x"] = -155967.80633993, + ["x"] = -158700.87914814, ["callsign"] = { [1] = 2, @@ -599,9 +603,9 @@ units = ["name"] = "Springfield11", [3] = 1, }, -- end of ["callsign"] - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["unitId"] = 68, - ["y"] = 405888.85058741, + ["y"] = 404406.46136648, ["coalition"] = "neutral", ["unitName"] = "Rotary-1-1", }, -- end of [1] @@ -933,20 +937,20 @@ units = { [1] = { - ["alt"] = 61, + ["alt"] = 65, ["type"] = "Sandbox", ["point"] = { - ["y"] = 690788, - ["x"] = -285547, + ["y"] = 693778, + ["x"] = -286660, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 690788, + ["y"] = 693778, ["groupName"] = "USA static 1", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285547, + ["x"] = -286660, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 1", @@ -957,7 +961,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -974,11 +978,11 @@ units = { [1] = { - ["alt"] = 72, + ["alt"] = 70, ["point"] = { - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -989,8 +993,8 @@ units = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -1000,7 +1004,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1017,11 +1021,11 @@ units = { [1] = { - ["alt"] = 61, + ["alt"] = 65, ["point"] = { - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1032,8 +1036,8 @@ units = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -1043,7 +1047,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1060,20 +1064,20 @@ units = { [1] = { - ["alt"] = 60, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 691139, - ["x"] = -286038, + ["y"] = 693960, + ["x"] = -287585, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 691139, + ["y"] = 693960, ["groupName"] = "USA static 3", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -286038, + ["x"] = -287585, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 3", @@ -1084,7 +1088,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1104,8 +1108,8 @@ units = ["alt"] = 73, ["point"] = { - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1116,8 +1120,8 @@ units = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -1127,7 +1131,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1144,20 +1148,20 @@ units = { [1] = { - ["alt"] = 69, + ["alt"] = 68, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693432, - ["x"] = -285294, + ["y"] = 693480, + ["x"] = -285622, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693432, + ["y"] = 693480, ["groupName"] = "USA static 5", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285294, + ["x"] = -285622, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 5", @@ -1168,7 +1172,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1185,11 +1189,11 @@ units = { [1] = { - ["alt"] = 67, + ["alt"] = 55, ["point"] = { - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1200,8 +1204,8 @@ units = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -1211,7 +1215,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1228,20 +1232,20 @@ units = { [1] = { - ["alt"] = 61, + ["alt"] = 70, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693155, - ["x"] = -287187, + ["y"] = 694696, + ["x"] = -287053, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693155, + ["y"] = 694696, ["groupName"] = "USA static 7", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -287187, + ["x"] = -287053, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 7", @@ -1252,7 +1256,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["coalition"] = "blue", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "static", ["country"] = "usa", ["startTime"] = 0, @@ -1539,8 +1543,8 @@ units = ["alt"] = 60, ["point"] = { - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1550,8 +1554,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287110, - ["y"] = 692389, + ["x"] = -285145, + ["y"] = 689785, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -1560,11 +1564,11 @@ units = }, -- end of [1] [2] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1574,8 +1578,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286935, - ["y"] = 692345, + ["x"] = -285166, + ["y"] = 689948, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -1584,11 +1588,11 @@ units = }, -- end of [2] [3] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1598,8 +1602,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287213, - ["y"] = 692308, + ["x"] = -285298, + ["y"] = 689856, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -1608,11 +1612,11 @@ units = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1622,8 +1626,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286989, - ["y"] = 692321, + ["x"] = -285058, + ["y"] = 689796, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -1632,11 +1636,11 @@ units = }, -- end of [4] [5] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1646,8 +1650,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287225, - ["y"] = 692297, + ["x"] = -285191, + ["y"] = 689973, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -1656,11 +1660,11 @@ units = }, -- end of [5] [6] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1670,8 +1674,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287012, - ["y"] = 692445, + ["x"] = -285149, + ["y"] = 689860, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -1680,11 +1684,11 @@ units = }, -- end of [6] [7] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1694,8 +1698,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287237, - ["y"] = 692311, + ["x"] = -285216, + ["y"] = 689799, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -1713,32 +1717,69 @@ units = ["groupName"] = "teleGroup", }, -- end of [4] [5] = + { + ["groupId"] = 47, + ["country"] = "usa", + ["groupName"] = "poly", + ["units"] = + { + [1] = + { + ["type"] = "AAV7", + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["country"] = "usa", + ["groupId"] = 47, + ["groupName"] = "poly", + ["skill"] = "Average", + ["heading"] = 2.3261877017598, + ["countryId"] = 2, + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["coalition"] = "blue", + ["y"] = 185783.38833846, + }, -- end of [1] + }, -- end of ["units"] + ["countryId"] = 2, + ["hidden"] = false, + ["category"] = "vehicle", + ["coalition"] = "blue", + ["startTime"] = 0, + ["task"] = "Ground Nothing", + }, -- end of [5] + [6] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000058, + ["groupId"] = 7001, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286548, - ["y"] = 692663, - ["heading"] = 1.4977557600419, + ["x"] = -284648, + ["y"] = 693761, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -1746,23 +1787,23 @@ units = }, -- end of [1] [2] = { - ["alt"] = 62, + ["alt"] = 73, ["point"] = { - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286576, - ["y"] = 692678, - ["heading"] = 1.4977557629417, + ["x"] = -284456, + ["y"] = 693771, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -1770,23 +1811,23 @@ units = }, -- end of [2] [3] = { - ["alt"] = 63, + ["alt"] = 72, ["point"] = { - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286539, - ["y"] = 692774, - ["heading"] = 1.497755762398, + ["x"] = -284639, + ["y"] = 693781, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -1794,23 +1835,23 @@ units = }, -- end of [3] [4] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692553, - ["x"] = -286525, + ["y"] = 693653, + ["x"] = -284699, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286525, - ["y"] = 692553, - ["heading"] = 1.4977557625792, + ["x"] = -284699, + ["y"] = 693653, + ["heading"] = 1.4977557629417, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -1819,18 +1860,18 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 1", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 1", - }, -- end of [5] - [6] = + }, -- end of [6] + [7] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000061, + ["groupId"] = 7004, ["hidden"] = false, ["units"] = { @@ -1853,7 +1894,7 @@ units = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -1877,7 +1918,7 @@ units = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -1885,40 +1926,40 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 2", - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 2", - }, -- end of [6] - [7] = + }, -- end of [7] + [8] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000065, + ["groupId"] = 7008, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 60, + ["alt"] = 66, ["point"] = { - ["y"] = 692171, - ["x"] = -286749, + ["y"] = 691761, + ["x"] = -284967, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286749, - ["y"] = 692171, - ["heading"] = 1.4977557591357, + ["x"] = -284967, + ["y"] = 691761, + ["heading"] = 1.4977557594982, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -1926,23 +1967,23 @@ units = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692204, - ["x"] = -286580, + ["y"] = 691809, + ["x"] = -284861, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286580, - ["y"] = 692204, - ["heading"] = 1.4977557614918, + ["x"] = -284861, + ["y"] = 691809, + ["heading"] = 1.4977557625792, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -1950,23 +1991,23 @@ units = }, -- end of [2] [3] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692150, - ["x"] = -286560, + ["y"] = 691744, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286560, - ["y"] = 692150, - ["heading"] = 1.4977557614918, + ["x"] = -284982, + ["y"] = 691744, + ["heading"] = 1.4977557573233, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -1974,23 +2015,23 @@ units = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 65, ["point"] = { - ["y"] = 691995, - ["x"] = -286713, + ["y"] = 691757, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286713, - ["y"] = 691995, - ["heading"] = 1.4977557627604, + ["x"] = -285098, + ["y"] = 691757, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -1999,18 +2040,18 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 3", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 3", - }, -- end of [7] - [8] = + }, -- end of [8] + [9] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000068, + ["groupId"] = 7011, ["hidden"] = false, ["units"] = { @@ -2027,7 +2068,7 @@ units = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286407, @@ -2051,7 +2092,7 @@ units = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286447, @@ -2065,40 +2106,40 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 4", - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 4", - }, -- end of [8] - [9] = + }, -- end of [9] + [10] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000072, + ["groupId"] = 7015, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 695073, + ["x"] = -287442, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288904, - ["y"] = 692563, - ["heading"] = 1.4977557725472, + ["x"] = -287442, + ["y"] = 695073, + ["heading"] = 1.4977557701918, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -2106,23 +2147,23 @@ units = }, -- end of [1] [2] = { - ["alt"] = 56, + ["alt"] = 68, ["point"] = { - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288844, - ["y"] = 692623, - ["heading"] = 1.4977557660227, + ["x"] = -287590, + ["y"] = 695090, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -2130,23 +2171,23 @@ units = }, -- end of [2] [3] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692459, - ["x"] = -288865, + ["y"] = 695151, + ["x"] = -287518, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288865, - ["y"] = 692459, - ["heading"] = 1.4977557638479, + ["x"] = -287518, + ["y"] = 695151, + ["heading"] = 1.4977557660229, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -2154,23 +2195,23 @@ units = }, -- end of [3] [4] = { - ["alt"] = 55, + ["alt"] = 68, ["point"] = { - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 694882, + ["x"] = -287479, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -289069, - ["y"] = 692675, - ["heading"] = 1.4977557685601, + ["x"] = -287479, + ["y"] = 694882, + ["heading"] = 1.4977557575044, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -2179,18 +2220,18 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 5", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 5", - }, -- end of [9] - [10] = + }, -- end of [10] + [11] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000075, + ["groupId"] = 7018, ["hidden"] = false, ["units"] = { @@ -2213,7 +2254,7 @@ units = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2237,7 +2278,7 @@ units = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2245,18 +2286,18 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 6", - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 6", - }, -- end of [10] - [11] = + }, -- end of [11] + [12] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000082, + ["groupId"] = 7025, ["hidden"] = false, ["units"] = { @@ -2279,7 +2320,7 @@ units = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2303,7 +2344,7 @@ units = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2311,40 +2352,40 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 8", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 8", - }, -- end of [11] - [12] = + }, -- end of [12] + [13] = { ["country"] = "usa", ["coalitionId"] = 2, - ["groupId"] = 1000079, + ["groupId"] = 7022, ["hidden"] = false, ["units"] = { [1] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287036, - ["y"] = 692747, - ["heading"] = 1.4977557703724, + ["x"] = -284021, + ["y"] = 693098, + ["heading"] = 1.4977557645728, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -2352,23 +2393,23 @@ units = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 5.0056692998623e-05, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -286920, - ["y"] = 692716, - ["heading"] = 1.4977557703724, + ["x"] = -284053, + ["y"] = 693012, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -2376,23 +2417,23 @@ units = }, -- end of [2] [3] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.00018869274936151, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287056, - ["y"] = 692580, - ["heading"] = 1.4977557642103, + ["x"] = -283898, + ["y"] = 693026, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2400,23 +2441,23 @@ units = }, -- end of [3] [4] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.0040063578450385, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287189, - ["y"] = 692752, - ["heading"] = 1.4977557678351, + ["x"] = -284127, + ["y"] = 693093, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -2425,13 +2466,13 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["name"] = "USA gnd 7", - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "vehicle", ["coalition"] = "blue", ["startTime"] = 0, ["task"] = "Ground Nothing", ["groupName"] = "USA gnd 7", - }, -- end of [12] + }, -- end of [13] }, -- end of ["vehicle"] ["plane"] = { @@ -2563,6 +2604,9 @@ units = ["skill"] = "Client", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -2616,6 +2660,9 @@ units = ["skill"] = "Client", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -2759,7 +2806,7 @@ units = ["country"] = "usa", ["groupName"] = "USA air 1", ["modulation"] = 0, - ["groupId"] = 1000062, + ["groupId"] = 7005, ["coalitionId"] = 2, ["name"] = "USA air 1", ["hidden"] = false, @@ -2767,10 +2814,10 @@ units = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2779,14 +2826,14 @@ units = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 1 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, ["groupName"] = "USA air 1", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7009, @@ -2801,7 +2848,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43220.99, + ["timeAdded"] = 43220.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -2813,7 +2860,7 @@ units = ["country"] = "usa", ["groupName"] = "USA air 3", ["modulation"] = 0, - ["groupId"] = 1000069, + ["groupId"] = 7012, ["coalitionId"] = 2, ["name"] = "USA air 3", ["hidden"] = false, @@ -2821,10 +2868,10 @@ units = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2833,14 +2880,14 @@ units = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 3 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, ["groupName"] = "USA air 3", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7020, @@ -2855,7 +2902,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43221.99, + ["timeAdded"] = 43221.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -2867,7 +2914,7 @@ units = ["country"] = "usa", ["groupName"] = "USA air 5", ["modulation"] = 0, - ["groupId"] = 1000076, + ["groupId"] = 7019, ["coalitionId"] = 2, ["name"] = "USA air 5", ["hidden"] = false, @@ -2875,10 +2922,10 @@ units = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2887,14 +2934,14 @@ units = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 5 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, ["groupName"] = "USA air 5", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7031, @@ -2909,7 +2956,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43222.99, + ["timeAdded"] = 43222.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, @@ -2921,7 +2968,7 @@ units = ["country"] = "usa", ["groupName"] = "USA air 7", ["modulation"] = 0, - ["groupId"] = 1000083, + ["groupId"] = 7026, ["coalitionId"] = 2, ["name"] = "USA air 7", ["hidden"] = false, @@ -2929,10 +2976,10 @@ units = { [1] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2941,14 +2988,14 @@ units = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 7 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, ["groupName"] = "USA air 7", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7042, @@ -2963,7 +3010,7 @@ units = }, -- end of ["units"] ["countryId"] = 2, ["radioSet"] = false, - ["timeAdded"] = 43223.99, + ["timeAdded"] = 43223.79, ["category"] = "plane", ["coalition"] = "blue", ["startTime"] = 0, diff --git a/Example DBs/mist_DBs_unitsByCat.lua b/Example DBs/mist_DBs_unitsByCat.lua index 082b1ad..fc11863 100644 --- a/Example DBs/mist_DBs_unitsByCat.lua +++ b/Example DBs/mist_DBs_unitsByCat.lua @@ -7,8 +7,8 @@ unitsByCat = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -17,15 +17,15 @@ unitsByCat = ["speed"] = 44.444444444444, ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["unitName"] = "Rotary-1-1", ["groupName"] = "nH", ["coalition"] = "neutral", ["countryId"] = 21, - ["x"] = -155967.80633993, - ["y"] = 405888.85058741, + ["x"] = -158700.87914814, + ["y"] = 404406.46136648, ["unitId"] = 68, - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["skill"] = "High", ["callsign"] = { @@ -389,10 +389,11 @@ unitsByCat = ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 1 unit1", @@ -400,12 +401,12 @@ unitsByCat = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -161996, + ["x"] = -163065, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000064, ["coalition"] = "neutral", - ["y"] = 266228, + ["type"] = "PERRY", + ["groupId"] = 7007, + ["y"] = 265153, ["country"] = "australia", }, -- end of [8] [9] = @@ -413,10 +414,11 @@ unitsByCat = ["alt"] = 0, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 2 unit1", @@ -424,12 +426,12 @@ unitsByCat = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -163302, + ["x"] = -161099, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000071, ["coalition"] = "neutral", - ["y"] = 266588, + ["type"] = "PERRY", + ["groupId"] = 7014, + ["y"] = 267048, ["country"] = "australia", }, -- end of [9] [10] = @@ -437,34 +439,36 @@ unitsByCat = ["alt"] = 0, ["point"] = { - ["y"] = 267963, - ["x"] = -165895, + ["y"] = 268869, + ["x"] = -163156, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000078, + ["unitName"] = "AUSTRALIA shp 3 unit1", + ["heading"] = 0, + ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -165895, - ["y"] = 267963, - ["heading"] = 0, - ["country"] = "australia", - ["unitName"] = "AUSTRALIA shp 3 unit1", - ["unitId"] = 7033, + ["x"] = -163156, + ["speed"] = 0, ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7021, + ["y"] = 268869, + ["country"] = "australia", }, -- end of [10] [11] = { ["alt"] = 0, ["point"] = { - ["y"] = 268804, - ["x"] = -165342, + ["y"] = 266075, + ["x"] = -162226, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 4 unit1", @@ -472,12 +476,12 @@ unitsByCat = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -165342, + ["x"] = -162226, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000085, ["coalition"] = "neutral", - ["y"] = 268804, + ["type"] = "PERRY", + ["groupId"] = 7028, + ["y"] = 266075, ["country"] = "australia", }, -- end of [11] }, -- end of ["ship"] @@ -791,20 +795,20 @@ unitsByCat = }, -- end of [14] [15] = { - ["alt"] = 61, + ["alt"] = 65, ["type"] = "Sandbox", ["point"] = { - ["y"] = 690788, - ["x"] = -285547, + ["y"] = 693778, + ["x"] = -286660, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 690788, + ["y"] = 693778, ["groupName"] = "USA static 1", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285547, + ["x"] = -286660, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 1", @@ -814,11 +818,11 @@ unitsByCat = }, -- end of [15] [16] = { - ["alt"] = 72, + ["alt"] = 70, ["point"] = { - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -829,8 +833,8 @@ unitsByCat = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -839,11 +843,11 @@ unitsByCat = }, -- end of [16] [17] = { - ["alt"] = 61, + ["alt"] = 65, ["point"] = { - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -854,8 +858,8 @@ unitsByCat = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -864,20 +868,20 @@ unitsByCat = }, -- end of [17] [18] = { - ["alt"] = 60, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 691139, - ["x"] = -286038, + ["y"] = 693960, + ["x"] = -287585, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 691139, + ["y"] = 693960, ["groupName"] = "USA static 3", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -286038, + ["x"] = -287585, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 3", @@ -890,8 +894,8 @@ unitsByCat = ["alt"] = 73, ["point"] = { - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -902,8 +906,8 @@ unitsByCat = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -912,20 +916,20 @@ unitsByCat = }, -- end of [19] [20] = { - ["alt"] = 69, + ["alt"] = 68, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693432, - ["x"] = -285294, + ["y"] = 693480, + ["x"] = -285622, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693432, + ["y"] = 693480, ["groupName"] = "USA static 5", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285294, + ["x"] = -285622, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 5", @@ -935,11 +939,11 @@ unitsByCat = }, -- end of [20] [21] = { - ["alt"] = 67, + ["alt"] = 55, ["point"] = { - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -950,8 +954,8 @@ unitsByCat = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -960,20 +964,20 @@ unitsByCat = }, -- end of [21] [22] = { - ["alt"] = 61, + ["alt"] = 70, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693155, - ["x"] = -287187, + ["y"] = 694696, + ["x"] = -287053, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693155, + ["y"] = 694696, ["groupName"] = "USA static 7", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -287187, + ["x"] = -287053, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 7", @@ -1102,6 +1106,9 @@ unitsByCat = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -1113,7 +1120,6 @@ unitsByCat = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -1121,6 +1127,7 @@ unitsByCat = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, }, -- end of [4] [5] = @@ -1136,6 +1143,9 @@ unitsByCat = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -1147,7 +1157,6 @@ unitsByCat = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -1155,6 +1164,7 @@ unitsByCat = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, }, -- end of [5] [6] = @@ -1312,11 +1322,11 @@ unitsByCat = }, -- end of [10] [11] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1324,14 +1334,14 @@ unitsByCat = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 2 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, ["groupName"] = "AUSTRALIA air 2", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7010, @@ -1345,10 +1355,10 @@ unitsByCat = }, -- end of [11] [12] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1357,14 +1367,14 @@ unitsByCat = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 1 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, ["groupName"] = "USA air 1", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7009, @@ -1378,10 +1388,10 @@ unitsByCat = }, -- end of [12] [13] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1390,14 +1400,14 @@ unitsByCat = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 3 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, ["groupName"] = "USA air 3", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7020, @@ -1411,11 +1421,11 @@ unitsByCat = }, -- end of [13] [14] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1423,14 +1433,14 @@ unitsByCat = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 4 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, ["groupName"] = "AUSTRALIA air 4", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7021, @@ -1444,10 +1454,10 @@ unitsByCat = }, -- end of [14] [15] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1456,14 +1466,14 @@ unitsByCat = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 5 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, ["groupName"] = "USA air 5", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7031, @@ -1477,11 +1487,11 @@ unitsByCat = }, -- end of [15] [16] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1489,14 +1499,14 @@ unitsByCat = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 6 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, ["groupName"] = "AUSTRALIA air 6", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7032, @@ -1510,10 +1520,10 @@ unitsByCat = }, -- end of [16] [17] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1522,14 +1532,14 @@ unitsByCat = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 7 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, ["groupName"] = "USA air 7", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7042, @@ -1543,11 +1553,11 @@ unitsByCat = }, -- end of [17] [18] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1555,14 +1565,14 @@ unitsByCat = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 8 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, ["groupName"] = "AUSTRALIA air 8", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7043, @@ -1824,8 +1834,8 @@ unitsByCat = ["alt"] = 60, ["point"] = { - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1835,8 +1845,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287110, - ["y"] = 692389, + ["x"] = -285145, + ["y"] = 689785, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -1845,11 +1855,11 @@ unitsByCat = }, -- end of [12] [13] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1859,8 +1869,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286935, - ["y"] = 692345, + ["x"] = -285166, + ["y"] = 689948, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -1869,11 +1879,11 @@ unitsByCat = }, -- end of [13] [14] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1883,8 +1893,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287213, - ["y"] = 692308, + ["x"] = -285298, + ["y"] = 689856, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -1893,11 +1903,11 @@ unitsByCat = }, -- end of [14] [15] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1907,8 +1917,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286989, - ["y"] = 692321, + ["x"] = -285058, + ["y"] = 689796, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -1917,11 +1927,11 @@ unitsByCat = }, -- end of [15] [16] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1931,8 +1941,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287225, - ["y"] = 692297, + ["x"] = -285191, + ["y"] = 689973, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -1941,11 +1951,11 @@ unitsByCat = }, -- end of [16] [17] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1955,8 +1965,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287012, - ["y"] = 692445, + ["x"] = -285149, + ["y"] = 689860, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -1965,11 +1975,11 @@ unitsByCat = }, -- end of [17] [18] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1979,8 +1989,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287237, - ["y"] = 692311, + ["x"] = -285216, + ["y"] = 689799, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -1988,6 +1998,28 @@ unitsByCat = ["coalition"] = "blue", }, -- end of [18] [19] = + { + ["heading"] = 2.3261877017598, + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["groupName"] = "poly", + ["type"] = "AAV7", + ["countryId"] = 2, + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["country"] = "usa", + ["skill"] = "Average", + }, -- end of [19] + [20] = { ["heading"] = -1.7994767003775, ["point"] = @@ -2008,8 +2040,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [19] - [20] = + }, -- end of [20] + [21] = { ["heading"] = -1.7994767003775, ["point"] = @@ -2030,8 +2062,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [20] - [21] = + }, -- end of [21] + [22] = { ["heading"] = -1.7994767003775, ["point"] = @@ -2052,8 +2084,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [21] - [22] = + }, -- end of [22] + [23] = { ["heading"] = -1.7994767003775, ["point"] = @@ -2074,8 +2106,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [22] - [23] = + }, -- end of [23] + [24] = { ["heading"] = -1.7994767003775, ["point"] = @@ -2096,8 +2128,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [23] - [24] = + }, -- end of [24] + [25] = { ["heading"] = -1.7994767003775, ["point"] = @@ -2118,8 +2150,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [24] - [25] = + }, -- end of [25] + [26] = { ["heading"] = 0, ["point"] = @@ -2140,8 +2172,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Excellent", - }, -- end of [25] - [26] = + }, -- end of [26] + [27] = { ["heading"] = 0, ["point"] = @@ -2162,8 +2194,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Excellent", - }, -- end of [26] - [27] = + }, -- end of [27] + [28] = { ["heading"] = 0, ["point"] = @@ -2184,8 +2216,8 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Excellent", - }, -- end of [27] - [28] = + }, -- end of [28] + [29] = { ["heading"] = 0, ["point"] = @@ -2206,104 +2238,104 @@ unitsByCat = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Excellent", - }, -- end of [28] - [29] = + }, -- end of [29] + [30] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286548, - ["y"] = 692663, - ["heading"] = 1.4977557600419, + ["x"] = -284648, + ["y"] = 693761, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, ["coalition"] = "blue", - }, -- end of [29] - [30] = + }, -- end of [30] + [31] = { - ["alt"] = 62, + ["alt"] = 73, ["point"] = { - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286576, - ["y"] = 692678, - ["heading"] = 1.4977557629417, + ["x"] = -284456, + ["y"] = 693771, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, ["coalition"] = "blue", - }, -- end of [30] - [31] = + }, -- end of [31] + [32] = { - ["alt"] = 63, + ["alt"] = 72, ["point"] = { - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286539, - ["y"] = 692774, - ["heading"] = 1.497755762398, + ["x"] = -284639, + ["y"] = 693781, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, ["coalition"] = "blue", - }, -- end of [31] - [32] = + }, -- end of [32] + [33] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692553, - ["x"] = -286525, + ["y"] = 693653, + ["x"] = -284699, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286525, - ["y"] = 692553, - ["heading"] = 1.4977557625792, + ["x"] = -284699, + ["y"] = 693653, + ["heading"] = 1.4977557629417, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, ["coalition"] = "blue", - }, -- end of [32] - [33] = + }, -- end of [33] + [34] = { ["alt"] = 48, ["point"] = @@ -2322,12 +2354,12 @@ unitsByCat = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [33] - [34] = + }, -- end of [34] + [35] = { ["alt"] = 48, ["point"] = @@ -2346,108 +2378,108 @@ unitsByCat = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [34] - [35] = + }, -- end of [35] + [36] = { - ["alt"] = 60, + ["alt"] = 66, ["point"] = { - ["y"] = 692171, - ["x"] = -286749, + ["y"] = 691761, + ["x"] = -284967, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286749, - ["y"] = 692171, - ["heading"] = 1.4977557591357, + ["x"] = -284967, + ["y"] = 691761, + ["heading"] = 1.4977557594982, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, ["coalition"] = "blue", - }, -- end of [35] - [36] = + }, -- end of [36] + [37] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692204, - ["x"] = -286580, + ["y"] = 691809, + ["x"] = -284861, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286580, - ["y"] = 692204, - ["heading"] = 1.4977557614918, + ["x"] = -284861, + ["y"] = 691809, + ["heading"] = 1.4977557625792, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, ["coalition"] = "blue", - }, -- end of [36] - [37] = + }, -- end of [37] + [38] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692150, - ["x"] = -286560, + ["y"] = 691744, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286560, - ["y"] = 692150, - ["heading"] = 1.4977557614918, + ["x"] = -284982, + ["y"] = 691744, + ["heading"] = 1.4977557573233, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, ["coalition"] = "blue", - }, -- end of [37] - [38] = + }, -- end of [38] + [39] = { - ["alt"] = 60, + ["alt"] = 65, ["point"] = { - ["y"] = 691995, - ["x"] = -286713, + ["y"] = 691757, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286713, - ["y"] = 691995, - ["heading"] = 1.4977557627604, + ["x"] = -285098, + ["y"] = 691757, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, ["coalition"] = "blue", - }, -- end of [38] - [39] = + }, -- end of [39] + [40] = { ["alt"] = 48, ["point"] = @@ -2460,7 +2492,7 @@ unitsByCat = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286407, @@ -2470,8 +2502,8 @@ unitsByCat = ["unitName"] = "USA gnd 4 unit1", ["unitId"] = 7018, ["coalition"] = "blue", - }, -- end of [39] - [40] = + }, -- end of [40] + [41] = { ["alt"] = 48, ["point"] = @@ -2484,7 +2516,7 @@ unitsByCat = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286447, @@ -2494,104 +2526,104 @@ unitsByCat = ["unitName"] = "USA gnd 4 unit2", ["unitId"] = 7019, ["coalition"] = "blue", - }, -- end of [40] - [41] = + }, -- end of [41] + [42] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 695073, + ["x"] = -287442, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288904, - ["y"] = 692563, - ["heading"] = 1.4977557725472, + ["x"] = -287442, + ["y"] = 695073, + ["heading"] = 1.4977557701918, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, ["coalition"] = "blue", - }, -- end of [41] - [42] = + }, -- end of [42] + [43] = { - ["alt"] = 56, + ["alt"] = 68, ["point"] = { - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288844, - ["y"] = 692623, - ["heading"] = 1.4977557660227, + ["x"] = -287590, + ["y"] = 695090, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, ["coalition"] = "blue", - }, -- end of [42] - [43] = + }, -- end of [43] + [44] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692459, - ["x"] = -288865, + ["y"] = 695151, + ["x"] = -287518, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288865, - ["y"] = 692459, - ["heading"] = 1.4977557638479, + ["x"] = -287518, + ["y"] = 695151, + ["heading"] = 1.4977557660229, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, ["coalition"] = "blue", - }, -- end of [43] - [44] = + }, -- end of [44] + [45] = { - ["alt"] = 55, + ["alt"] = 68, ["point"] = { - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 694882, + ["x"] = -287479, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -289069, - ["y"] = 692675, - ["heading"] = 1.4977557685601, + ["x"] = -287479, + ["y"] = 694882, + ["heading"] = 1.4977557575044, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, ["coalition"] = "blue", - }, -- end of [44] - [45] = + }, -- end of [45] + [46] = { ["alt"] = 48, ["point"] = @@ -2610,12 +2642,12 @@ unitsByCat = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [45] - [46] = + }, -- end of [46] + [47] = { ["alt"] = 48, ["point"] = @@ -2634,12 +2666,12 @@ unitsByCat = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [46] - [47] = + }, -- end of [47] + [48] = { ["alt"] = 48, ["point"] = @@ -2658,12 +2690,12 @@ unitsByCat = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [47] - [48] = + }, -- end of [48] + [49] = { ["alt"] = 48, ["point"] = @@ -2682,106 +2714,106 @@ unitsByCat = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [48] - [49] = + }, -- end of [49] + [50] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287036, - ["y"] = 692747, - ["heading"] = 1.4977557703724, + ["x"] = -284021, + ["y"] = 693098, + ["heading"] = 1.4977557645728, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, ["coalition"] = "blue", - }, -- end of [49] - [50] = + }, -- end of [50] + [51] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 5.0056692998623e-05, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -286920, - ["y"] = 692716, - ["heading"] = 1.4977557703724, + ["x"] = -284053, + ["y"] = 693012, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, ["coalition"] = "blue", - }, -- end of [50] - [51] = + }, -- end of [51] + [52] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.00018869274936151, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287056, - ["y"] = 692580, - ["heading"] = 1.4977557642103, + ["x"] = -283898, + ["y"] = 693026, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, ["coalition"] = "blue", - }, -- end of [51] - [52] = + }, -- end of [52] + [53] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.0040063578450385, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287189, - ["y"] = 692752, - ["heading"] = 1.4977557678351, + ["x"] = -284127, + ["y"] = 693093, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, ["coalition"] = "blue", - }, -- end of [52] + }, -- end of [53] }, -- end of ["vehicle"] } -- end of unitsByCat diff --git a/Example DBs/mist_DBs_unitsById.lua b/Example DBs/mist_DBs_unitsById.lua index d51cc8b..b9a6ec7 100644 --- a/Example DBs/mist_DBs_unitsById.lua +++ b/Example DBs/mist_DBs_unitsById.lua @@ -278,6 +278,9 @@ unitsById = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -289,7 +292,6 @@ unitsById = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -297,6 +299,7 @@ unitsById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, }, -- end of [11] [12] = @@ -312,6 +315,9 @@ unitsById = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -323,7 +329,6 @@ unitsById = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -331,6 +336,7 @@ unitsById = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, }, -- end of [12] [13] = @@ -1198,8 +1204,8 @@ unitsById = ["alt"] = 60, ["point"] = { - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1209,8 +1215,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287110, - ["y"] = 692389, + ["x"] = -285145, + ["y"] = 689785, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -1219,11 +1225,11 @@ unitsById = }, -- end of [52] [53] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1233,8 +1239,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286935, - ["y"] = 692345, + ["x"] = -285166, + ["y"] = 689948, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -1243,11 +1249,11 @@ unitsById = }, -- end of [53] [54] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1257,8 +1263,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287213, - ["y"] = 692308, + ["x"] = -285298, + ["y"] = 689856, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -1267,11 +1273,11 @@ unitsById = }, -- end of [54] [55] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1281,8 +1287,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286989, - ["y"] = 692321, + ["x"] = -285058, + ["y"] = 689796, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -1291,11 +1297,11 @@ unitsById = }, -- end of [55] [56] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1305,8 +1311,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287225, - ["y"] = 692297, + ["x"] = -285191, + ["y"] = 689973, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -1315,11 +1321,11 @@ unitsById = }, -- end of [56] [57] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1329,8 +1335,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287012, - ["y"] = 692445, + ["x"] = -285149, + ["y"] = 689860, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -1339,11 +1345,11 @@ unitsById = }, -- end of [57] [58] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1353,8 +1359,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287237, - ["y"] = 692311, + ["x"] = -285216, + ["y"] = 689799, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -1590,8 +1596,8 @@ unitsById = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -1600,15 +1606,15 @@ unitsById = ["speed"] = 44.444444444444, ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["unitName"] = "Rotary-1-1", ["groupName"] = "nH", ["coalition"] = "neutral", ["countryId"] = 21, - ["x"] = -155967.80633993, - ["y"] = 405888.85058741, + ["x"] = -158700.87914814, + ["y"] = 404406.46136648, ["unitId"] = 68, - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["skill"] = "High", ["callsign"] = { @@ -1641,6 +1647,28 @@ unitsById = ["heading"] = 0, ["country"] = "australia", }, -- end of [69] + [70] = + { + ["heading"] = 2.3261877017598, + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["groupName"] = "poly", + ["type"] = "AAV7", + ["countryId"] = 2, + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["country"] = "usa", + ["skill"] = "Average", + }, -- end of [70] [7030] = { ["alt"] = 48, @@ -1660,30 +1688,30 @@ unitsById = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", }, -- end of [7030] [7015] = { - ["alt"] = 60, + ["alt"] = 65, ["point"] = { - ["y"] = 691995, - ["x"] = -286713, + ["y"] = 691757, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286713, - ["y"] = 691995, - ["heading"] = 1.4977557627604, + ["x"] = -285098, + ["y"] = 691757, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -1691,10 +1719,10 @@ unitsById = }, -- end of [7015] [7031] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1703,14 +1731,14 @@ unitsById = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 5 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, ["groupName"] = "USA air 5", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7031, @@ -1724,20 +1752,20 @@ unitsById = }, -- end of [7031] [7016] = { - ["alt"] = 60, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 691139, - ["x"] = -286038, + ["y"] = 693960, + ["x"] = -287585, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 691139, + ["y"] = 693960, ["groupName"] = "USA static 3", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -286038, + ["x"] = -287585, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 3", @@ -1747,11 +1775,11 @@ unitsById = }, -- end of [7016] [7032] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1759,14 +1787,14 @@ unitsById = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 6 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, ["groupName"] = "AUSTRALIA air 6", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7032, @@ -1780,23 +1808,23 @@ unitsById = }, -- end of [7032] [7001] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286548, - ["y"] = 692663, - ["heading"] = 1.4977557600419, + ["x"] = -284648, + ["y"] = 693761, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -1804,11 +1832,11 @@ unitsById = }, -- end of [7001] [7017] = { - ["alt"] = 61, + ["alt"] = 65, ["point"] = { - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1819,8 +1847,8 @@ unitsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -1832,44 +1860,45 @@ unitsById = ["alt"] = 0, ["point"] = { - ["y"] = 267963, - ["x"] = -165895, + ["y"] = 268869, + ["x"] = -163156, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000078, + ["unitName"] = "AUSTRALIA shp 3 unit1", + ["heading"] = 0, + ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -165895, - ["y"] = 267963, - ["heading"] = 0, - ["country"] = "australia", - ["unitName"] = "AUSTRALIA shp 3 unit1", - ["unitId"] = 7033, + ["x"] = -163156, + ["speed"] = 0, ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7021, + ["y"] = 268869, + ["country"] = "australia", }, -- end of [7033] [7002] = { - ["alt"] = 62, + ["alt"] = 73, ["point"] = { - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286576, - ["y"] = 692678, - ["heading"] = 1.4977557629417, + ["x"] = -284456, + ["y"] = 693771, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -1888,7 +1917,7 @@ unitsById = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286407, @@ -1901,23 +1930,23 @@ unitsById = }, -- end of [7018] [7034] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287036, - ["y"] = 692747, - ["heading"] = 1.4977557703724, + ["x"] = -284021, + ["y"] = 693098, + ["heading"] = 1.4977557645728, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -1925,23 +1954,23 @@ unitsById = }, -- end of [7034] [7003] = { - ["alt"] = 63, + ["alt"] = 72, ["point"] = { - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286539, - ["y"] = 692774, - ["heading"] = 1.497755762398, + ["x"] = -284639, + ["y"] = 693781, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -1960,7 +1989,7 @@ unitsById = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286447, @@ -1973,23 +2002,23 @@ unitsById = }, -- end of [7019] [7035] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 5.0056692998623e-05, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -286920, - ["y"] = 692716, - ["heading"] = 1.4977557703724, + ["x"] = -284053, + ["y"] = 693012, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -1997,23 +2026,23 @@ unitsById = }, -- end of [7035] [7004] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692553, - ["x"] = -286525, + ["y"] = 693653, + ["x"] = -284699, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286525, - ["y"] = 692553, - ["heading"] = 1.4977557625792, + ["x"] = -284699, + ["y"] = 693653, + ["heading"] = 1.4977557629417, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -2021,10 +2050,10 @@ unitsById = }, -- end of [7004] [7020] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2033,14 +2062,14 @@ unitsById = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 3 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, ["groupName"] = "USA air 3", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7020, @@ -2054,23 +2083,23 @@ unitsById = }, -- end of [7020] [7036] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.00018869274936151, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287056, - ["y"] = 692580, - ["heading"] = 1.4977557642103, + ["x"] = -283898, + ["y"] = 693026, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2078,20 +2107,20 @@ unitsById = }, -- end of [7036] [7005] = { - ["alt"] = 61, + ["alt"] = 65, ["type"] = "Sandbox", ["point"] = { - ["y"] = 690788, - ["x"] = -285547, + ["y"] = 693778, + ["x"] = -286660, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 690788, + ["y"] = 693778, ["groupName"] = "USA static 1", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285547, + ["x"] = -286660, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 1", @@ -2101,11 +2130,11 @@ unitsById = }, -- end of [7005] [7021] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -2113,14 +2142,14 @@ unitsById = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 4 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, ["groupName"] = "AUSTRALIA air 4", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7021, @@ -2134,23 +2163,23 @@ unitsById = }, -- end of [7021] [7037] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.0040063578450385, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287189, - ["y"] = 692752, - ["heading"] = 1.4977557678351, + ["x"] = -284127, + ["y"] = 693093, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -2158,11 +2187,11 @@ unitsById = }, -- end of [7037] [7006] = { - ["alt"] = 72, + ["alt"] = 70, ["point"] = { - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2173,8 +2202,8 @@ unitsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -2186,10 +2215,11 @@ unitsById = ["alt"] = 0, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 2 unit1", @@ -2197,30 +2227,30 @@ unitsById = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -163302, + ["x"] = -161099, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000071, ["coalition"] = "neutral", - ["y"] = 266588, + ["type"] = "PERRY", + ["groupId"] = 7014, + ["y"] = 267048, ["country"] = "australia", }, -- end of [7022] [7038] = { - ["alt"] = 61, + ["alt"] = 70, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693155, - ["x"] = -287187, + ["y"] = 694696, + ["x"] = -287053, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693155, + ["y"] = 694696, ["groupName"] = "USA static 7", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -287187, + ["x"] = -287053, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 7", @@ -2247,30 +2277,30 @@ unitsById = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", }, -- end of [7007] [7023] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 695073, + ["x"] = -287442, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288904, - ["y"] = 692563, - ["heading"] = 1.4977557725472, + ["x"] = -287442, + ["y"] = 695073, + ["heading"] = 1.4977557701918, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -2278,11 +2308,11 @@ unitsById = }, -- end of [7023] [7039] = { - ["alt"] = 67, + ["alt"] = 55, ["point"] = { - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2293,8 +2323,8 @@ unitsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -2320,30 +2350,30 @@ unitsById = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", }, -- end of [7008] [7024] = { - ["alt"] = 56, + ["alt"] = 68, ["point"] = { - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288844, - ["y"] = 692623, - ["heading"] = 1.4977557660227, + ["x"] = -287590, + ["y"] = 695090, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -2368,17 +2398,17 @@ unitsById = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", }, -- end of [7040] [7009] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2387,14 +2417,14 @@ unitsById = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 1 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, ["groupName"] = "USA air 1", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7009, @@ -2408,23 +2438,23 @@ unitsById = }, -- end of [7009] [7025] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692459, - ["x"] = -288865, + ["y"] = 695151, + ["x"] = -287518, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288865, - ["y"] = 692459, - ["heading"] = 1.4977557638479, + ["x"] = -287518, + ["y"] = 695151, + ["heading"] = 1.4977557660229, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -2449,18 +2479,18 @@ unitsById = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", }, -- end of [7041] [7010] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -2468,14 +2498,14 @@ unitsById = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 2 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, ["groupName"] = "AUSTRALIA air 2", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7010, @@ -2489,23 +2519,23 @@ unitsById = }, -- end of [7010] [7026] = { - ["alt"] = 55, + ["alt"] = 68, ["point"] = { - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 694882, + ["x"] = -287479, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -289069, - ["y"] = 692675, - ["heading"] = 1.4977557685601, + ["x"] = -287479, + ["y"] = 694882, + ["heading"] = 1.4977557575044, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -2513,10 +2543,10 @@ unitsById = }, -- end of [7026] [7042] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2525,14 +2555,14 @@ unitsById = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 7 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, ["groupName"] = "USA air 7", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7042, @@ -2549,10 +2579,11 @@ unitsById = ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 1 unit1", @@ -2560,30 +2591,30 @@ unitsById = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -161996, + ["x"] = -163065, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000064, ["coalition"] = "neutral", - ["y"] = 266228, + ["type"] = "PERRY", + ["groupId"] = 7007, + ["y"] = 265153, ["country"] = "australia", }, -- end of [7011] [7027] = { - ["alt"] = 69, + ["alt"] = 68, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693432, - ["x"] = -285294, + ["y"] = 693480, + ["x"] = -285622, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693432, + ["y"] = 693480, ["groupName"] = "USA static 5", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285294, + ["x"] = -285622, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 5", @@ -2593,11 +2624,11 @@ unitsById = }, -- end of [7027] [7043] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -2605,14 +2636,14 @@ unitsById = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 8 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, ["groupName"] = "AUSTRALIA air 8", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7043, @@ -2626,23 +2657,23 @@ unitsById = }, -- end of [7043] [7012] = { - ["alt"] = 60, + ["alt"] = 66, ["point"] = { - ["y"] = 692171, - ["x"] = -286749, + ["y"] = 691761, + ["x"] = -284967, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286749, - ["y"] = 692171, - ["heading"] = 1.4977557591357, + ["x"] = -284967, + ["y"] = 691761, + ["heading"] = 1.4977557594982, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -2653,8 +2684,8 @@ unitsById = ["alt"] = 73, ["point"] = { - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2665,8 +2696,8 @@ unitsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -2678,10 +2709,11 @@ unitsById = ["alt"] = 0, ["point"] = { - ["y"] = 268804, - ["x"] = -165342, + ["y"] = 266075, + ["x"] = -162226, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 4 unit1", @@ -2689,33 +2721,33 @@ unitsById = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -165342, + ["x"] = -162226, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000085, ["coalition"] = "neutral", - ["y"] = 268804, + ["type"] = "PERRY", + ["groupId"] = 7028, + ["y"] = 266075, ["country"] = "australia", }, -- end of [7044] [7013] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692204, - ["x"] = -286580, + ["y"] = 691809, + ["x"] = -284861, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286580, - ["y"] = 692204, - ["heading"] = 1.4977557614918, + ["x"] = -284861, + ["y"] = 691809, + ["heading"] = 1.4977557625792, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -2740,30 +2772,30 @@ unitsById = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", }, -- end of [7029] [7014] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692150, - ["x"] = -286560, + ["y"] = 691744, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286560, - ["y"] = 692150, - ["heading"] = 1.4977557614918, + ["x"] = -284982, + ["y"] = 691744, + ["heading"] = 1.4977557573233, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, diff --git a/Example DBs/mist_DBs_unitsByName.lua b/Example DBs/mist_DBs_unitsByName.lua index 5329c71..3a313c6 100644 --- a/Example DBs/mist_DBs_unitsByName.lua +++ b/Example DBs/mist_DBs_unitsByName.lua @@ -68,11 +68,11 @@ unitsByName = }, -- end of ["Unit #001"] ["AUSTRALIA air 8 unit1"] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -80,14 +80,14 @@ unitsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 8 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, ["groupName"] = "AUSTRALIA air 8", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7043, @@ -101,11 +101,11 @@ unitsByName = }, -- end of ["AUSTRALIA air 8 unit1"] ["Unit #007"] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -115,8 +115,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287012, - ["y"] = 692445, + ["x"] = -285149, + ["y"] = 689860, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -181,23 +181,23 @@ unitsByName = }, -- end of ["2ship2"] ["USA gnd 7 unit3"] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.00018869274936151, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287056, - ["y"] = 692580, - ["heading"] = 1.4977557642103, + ["x"] = -283898, + ["y"] = 693026, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -268,11 +268,11 @@ unitsByName = }, -- end of ["1ship1"] ["Unit #005"] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -282,8 +282,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286989, - ["y"] = 692321, + ["x"] = -285058, + ["y"] = 689796, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -314,23 +314,23 @@ unitsByName = }, -- end of ["RuBTRs2"] ["USA gnd 1 unit3"] = { - ["alt"] = 63, + ["alt"] = 72, ["point"] = { - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286539, - ["y"] = 692774, - ["heading"] = 1.497755762398, + ["x"] = -284639, + ["y"] = 693781, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -338,11 +338,11 @@ unitsByName = }, -- end of ["USA gnd 1 unit3"] ["Unit #004"] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -352,8 +352,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287213, - ["y"] = 692308, + ["x"] = -285298, + ["y"] = 689856, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -419,10 +419,10 @@ unitsByName = }, -- end of ["tent #002"] ["USA air 3 unit1"] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -431,14 +431,14 @@ unitsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 3 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, ["groupName"] = "USA air 3", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7020, @@ -497,11 +497,11 @@ unitsByName = }, -- end of ["USTanks2_1"] ["AUSTRALIA air 4 unit1"] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -509,14 +509,14 @@ unitsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 4 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, ["groupName"] = "AUSTRALIA air 4", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7021, @@ -541,6 +541,9 @@ unitsByName = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -552,7 +555,6 @@ unitsByName = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -560,6 +562,7 @@ unitsByName = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, }, -- end of ["A-10C Client #2_unit"] ["USTanks1_3"] = @@ -584,35 +587,35 @@ unitsByName = ["country"] = "usa", ["skill"] = "Average", }, -- end of ["USTanks1_3"] - ["static_on_ship1 #001"] = + ["RuTent2"] = { - ["heading"] = 0, + ["shape_name"] = "PalatkaB", + ["type"] = "FARP Tent", ["point"] = { - ["y"] = 443849.03844635, - ["x"] = -355322.27295572, + ["y"] = 617319.42857142, + ["x"] = -259804, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443849.03844635, - ["livery_id"] = "USA Marines", - ["groupName"] = "static_on_ship1 #001", - ["coalition"] = "blue", - ["countryId"] = 2, - ["x"] = -355322.27295572, - ["unitId"] = 64, + ["categoryStatic"] = "Fortifications", + ["y"] = 617319.42857142, + ["groupName"] = "RuTent2", + ["coalition"] = "red", + ["countryId"] = 0, + ["x"] = -259804, + ["groupId"] = 19, ["category"] = "static", - ["unitName"] = "static_on_ship1 #001", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 41, - }, -- end of ["static_on_ship1 #001"] + ["unitName"] = "RuTent2", + ["unitId"] = 41, + ["heading"] = 0, + ["country"] = "russia", + }, -- end of ["RuTent2"] ["Unit #006"] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -622,8 +625,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287225, - ["y"] = 692297, + ["x"] = -285191, + ["y"] = 689973, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -676,23 +679,23 @@ unitsByName = }, -- end of ["tent"] ["USA gnd 1 unit1"] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286548, - ["y"] = 692663, - ["heading"] = 1.4977557600419, + ["x"] = -284648, + ["y"] = 693761, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -750,20 +753,20 @@ unitsByName = }, -- end of ["Ka-50s_1_1"] ["USA static 7"] = { - ["alt"] = 61, + ["alt"] = 70, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693155, - ["x"] = -287187, + ["y"] = 694696, + ["x"] = -287053, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693155, + ["y"] = 694696, ["groupName"] = "USA static 7", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -287187, + ["x"] = -287053, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 7", @@ -771,29 +774,6 @@ unitsByName = ["heading"] = 0, ["groupId"] = 7038, }, -- end of ["USA static 7"] - ["USA static 1"] = - { - ["alt"] = 61, - ["type"] = "Sandbox", - ["point"] = - { - ["y"] = 690788, - ["x"] = -285547, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 690788, - ["groupName"] = "USA static 1", - ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285547, - ["coalition"] = "blue", - ["category"] = "static", - ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, - ["groupId"] = 7005, - }, -- end of ["USA static 1"] ["Ground-1-1"] = { ["heading"] = 0, @@ -816,6 +796,54 @@ unitsByName = ["country"] = "australia", ["skill"] = "Average", }, -- end of ["Ground-1-1"] + ["USA static 1"] = + { + ["alt"] = 65, + ["type"] = "Sandbox", + ["point"] = + { + ["y"] = 693778, + ["x"] = -286660, + }, -- end of ["point"] + ["categoryStatic"] = "Fortifications", + ["coalitionId"] = 2, + ["y"] = 693778, + ["groupName"] = "USA static 1", + ["country"] = "usa", + ["countryId"] = 2, + ["x"] = -286660, + ["coalition"] = "blue", + ["category"] = "static", + ["unitName"] = "USA static 1", + ["unitId"] = 7005, + ["heading"] = 0, + ["groupId"] = 7005, + }, -- end of ["USA static 1"] + ["AUSTRALIA shp 4 unit1"] = + { + ["alt"] = 0, + ["point"] = + { + ["y"] = 266075, + ["x"] = -162226, + }, -- end of ["point"] + ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", + ["skill"] = "Average", + ["category"] = "ship", + ["unitName"] = "AUSTRALIA shp 4 unit1", + ["heading"] = 0, + ["unitId"] = 7044, + ["groupName"] = "AUSTRALIA shp 4", + ["countryId"] = 21, + ["x"] = -162226, + ["speed"] = 0, + ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7028, + ["y"] = 266075, + ["country"] = "australia", + }, -- end of ["AUSTRALIA shp 4 unit1"] ["US Ship #1"] = { ["type"] = "TICONDEROG", @@ -839,11 +867,11 @@ unitsByName = }, -- end of ["US Ship #1"] ["AUSTRALIA air 2 unit1"] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -851,14 +879,14 @@ unitsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 2 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, ["groupName"] = "AUSTRALIA air 2", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7010, @@ -889,7 +917,7 @@ unitsByName = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -899,10 +927,11 @@ unitsByName = ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 1 unit1", @@ -910,12 +939,12 @@ unitsByName = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -161996, + ["x"] = -163065, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000064, ["coalition"] = "neutral", - ["y"] = 266228, + ["type"] = "PERRY", + ["groupId"] = 7007, + ["y"] = 265153, ["country"] = "australia", }, -- end of ["AUSTRALIA shp 1 unit1"] ["RuBTRs3"] = @@ -974,46 +1003,47 @@ unitsByName = }, -- end of ["callsign"] ["groupId"] = 4, }, -- end of ["F-15C Client #1_unit"] - ["AUSTRALIA shp 4 unit1"] = + ["AUSTRALIA shp 2 unit1"] = { ["alt"] = 0, ["point"] = { - ["y"] = 268804, - ["x"] = -165342, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", - ["unitName"] = "AUSTRALIA shp 4 unit1", + ["unitName"] = "AUSTRALIA shp 2 unit1", ["heading"] = 0, - ["unitId"] = 7044, - ["groupName"] = "AUSTRALIA shp 4", + ["unitId"] = 7022, + ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -165342, + ["x"] = -161099, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000085, ["coalition"] = "neutral", - ["y"] = 268804, + ["type"] = "PERRY", + ["groupId"] = 7014, + ["y"] = 267048, ["country"] = "australia", - }, -- end of ["AUSTRALIA shp 4 unit1"] + }, -- end of ["AUSTRALIA shp 2 unit1"] ["USA static 3"] = { - ["alt"] = 60, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 691139, - ["x"] = -286038, + ["y"] = 693960, + ["x"] = -287585, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 691139, + ["y"] = 693960, ["groupName"] = "USA static 3", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -286038, + ["x"] = -287585, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 3", @@ -1021,30 +1051,30 @@ unitsByName = ["heading"] = 0, ["groupId"] = 7016, }, -- end of ["USA static 3"] - ["USA gnd 7 unit1"] = + ["USA gnd 7 unit2"] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 5.0056692998623e-05, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287036, - ["y"] = 692747, - ["heading"] = 1.4977557703724, + ["x"] = -284053, + ["y"] = 693012, + ["heading"] = 1.4877557641795, ["country"] = "usa", - ["unitName"] = "USA gnd 7 unit1", - ["unitId"] = 7034, + ["unitName"] = "USA gnd 7 unit2", + ["unitId"] = 7035, ["coalition"] = "blue", - }, -- end of ["USA gnd 7 unit1"] + }, -- end of ["USA gnd 7 unit2"] ["A-10C Client #1_unit"] = { ["alt"] = 2000, @@ -1058,6 +1088,9 @@ unitsByName = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -1069,7 +1102,6 @@ unitsByName = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -1077,6 +1109,7 @@ unitsByName = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, }, -- end of ["A-10C Client #1_unit"] ["Su-33 Client #2Unit"] = @@ -1107,102 +1140,54 @@ unitsByName = ["callsign"] = 105, ["groupId"] = 20, }, -- end of ["Su-33 Client #2Unit"] - ["USA gnd 7 unit2"] = + ["USA gnd 7 unit1"] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -286920, - ["y"] = 692716, - ["heading"] = 1.4977557703724, + ["x"] = -284021, + ["y"] = 693098, + ["heading"] = 1.4977557645728, ["country"] = "usa", - ["unitName"] = "USA gnd 7 unit2", - ["unitId"] = 7035, + ["unitName"] = "USA gnd 7 unit1", + ["unitId"] = 7034, ["coalition"] = "blue", - }, -- end of ["USA gnd 7 unit2"] + }, -- end of ["USA gnd 7 unit1"] ["USA gnd 7 unit4"] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.0040063578450385, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287189, - ["y"] = 692752, - ["heading"] = 1.4977557678351, + ["x"] = -284127, + ["y"] = 693093, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, ["coalition"] = "blue", }, -- end of ["USA gnd 7 unit4"] - ["USA gnd 3 unit1"] = - { - ["alt"] = 60, - ["point"] = - { - ["y"] = 692171, - ["x"] = -286749, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286749, - ["y"] = 692171, - ["heading"] = 1.4977557591357, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit1", - ["unitId"] = 7012, - ["coalition"] = "blue", - }, -- end of ["USA gnd 3 unit1"] - ["USA gnd 4 unit1"] = - { - ["alt"] = 48, - ["point"] = - { - ["y"] = 686871, - ["x"] = -286407, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-113", - ["groupId"] = 1000068, - ["groupName"] = "USA gnd 4", - ["countryId"] = 2, - ["x"] = -286407, - ["y"] = 686871, - ["heading"] = 0, - ["country"] = "usa", - ["unitName"] = "USA gnd 4 unit1", - ["unitId"] = 7018, - ["coalition"] = "blue", - }, -- end of ["USA gnd 4 unit1"] ["USA gnd 8 unit2"] = { ["alt"] = 48, @@ -1222,11 +1207,59 @@ unitsByName = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", }, -- end of ["USA gnd 8 unit2"] + ["USA gnd 4 unit1"] = + { + ["alt"] = 48, + ["point"] = + { + ["y"] = 686871, + ["x"] = -286407, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-113", + ["groupId"] = 7011, + ["groupName"] = "USA gnd 4", + ["countryId"] = 2, + ["x"] = -286407, + ["y"] = 686871, + ["heading"] = 0, + ["country"] = "usa", + ["unitName"] = "USA gnd 4 unit1", + ["unitId"] = 7018, + ["coalition"] = "blue", + }, -- end of ["USA gnd 4 unit1"] + ["USA gnd 8 unit1"] = + { + ["alt"] = 48, + ["point"] = + { + ["y"] = 686871, + ["x"] = -286407, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["unitName"] = "USA gnd 8 unit1", + ["heading"] = 0, + ["unitId"] = 7040, + ["groupName"] = "USA gnd 8", + ["countryId"] = 2, + ["x"] = -286407, + ["speed"] = 0, + ["type"] = "M-113", + ["groupId"] = 7025, + ["coalition"] = "blue", + ["y"] = 686871, + ["country"] = "usa", + }, -- end of ["USA gnd 8 unit1"] ["Su-33 Client #3Unit"] = { ["alt"] = 2000, @@ -1255,30 +1288,31 @@ unitsByName = ["callsign"] = 106, ["groupId"] = 20, }, -- end of ["Su-33 Client #3Unit"] - ["USA gnd 8 unit1"] = + ["AUSTRALIA shp 3 unit1"] = { - ["alt"] = 48, + ["alt"] = 0, ["point"] = { - ["y"] = 686871, - ["x"] = -286407, + ["y"] = 268869, + ["x"] = -163156, }, -- end of ["point"] - ["coalitionId"] = 2, + ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", - ["category"] = "vehicle", - ["unitName"] = "USA gnd 8 unit1", + ["category"] = "ship", + ["unitName"] = "AUSTRALIA shp 3 unit1", ["heading"] = 0, - ["unitId"] = 7040, - ["groupName"] = "USA gnd 8", - ["countryId"] = 2, - ["x"] = -286407, + ["unitId"] = 7033, + ["groupName"] = "AUSTRALIA shp 3", + ["countryId"] = 21, + ["x"] = -163156, ["speed"] = 0, - ["type"] = "M-113", - ["groupId"] = 1000082, - ["coalition"] = "blue", - ["y"] = 686871, - ["country"] = "usa", - }, -- end of ["USA gnd 8 unit1"] + ["coalition"] = "neutral", + ["type"] = "PERRY", + ["groupId"] = 7021, + ["y"] = 268869, + ["country"] = "australia", + }, -- end of ["AUSTRALIA shp 3 unit1"] ["Unit #1"] = { ["heading"] = 0, @@ -1301,30 +1335,29 @@ unitsByName = ["country"] = "usa", ["skill"] = "Average", }, -- end of ["Unit #1"] - ["AUSTRALIA shp 3 unit1"] = + ["USA static 5"] = { - ["alt"] = 0, + ["alt"] = 68, + ["type"] = "Sandbox", ["point"] = { - ["y"] = 267963, - ["x"] = -165895, + ["y"] = 693480, + ["x"] = -285622, }, -- end of ["point"] - ["coalitionId"] = 0, - ["skill"] = "Average", - ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000078, - ["groupName"] = "AUSTRALIA shp 3", - ["countryId"] = 21, - ["x"] = -165895, - ["y"] = 267963, + ["categoryStatic"] = "Fortifications", + ["coalitionId"] = 2, + ["y"] = 693480, + ["groupName"] = "USA static 5", + ["country"] = "usa", + ["countryId"] = 2, + ["x"] = -285622, + ["coalition"] = "blue", + ["category"] = "static", + ["unitName"] = "USA static 5", + ["unitId"] = 7027, ["heading"] = 0, - ["country"] = "australia", - ["unitName"] = "AUSTRALIA shp 3 unit1", - ["unitId"] = 7033, - ["coalition"] = "neutral", - }, -- end of ["AUSTRALIA shp 3 unit1"] + ["groupId"] = 7027, + }, -- end of ["USA static 5"] ["RuTanks4"] = { ["heading"] = 0, @@ -1369,60 +1402,13 @@ unitsByName = ["country"] = "russia", ["skill"] = "Excellent", }, -- end of ["RuTanks2"] - ["USA static 5"] = - { - ["alt"] = 69, - ["type"] = "Sandbox", - ["point"] = - { - ["y"] = 693432, - ["x"] = -285294, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693432, - ["groupName"] = "USA static 5", - ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285294, - ["coalition"] = "blue", - ["category"] = "static", - ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, - ["groupId"] = 7027, - }, -- end of ["USA static 5"] - ["USA gnd 3 unit2"] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 692204, - ["x"] = -286580, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286580, - ["y"] = 692204, - ["heading"] = 1.4977557614918, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit2", - ["unitId"] = 7013, - ["coalition"] = "blue", - }, -- end of ["USA gnd 3 unit2"] ["AUSTRALIA air 6 unit1"] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1430,14 +1416,14 @@ unitsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 6 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, ["groupName"] = "AUSTRALIA air 6", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7032, @@ -1449,13 +1435,37 @@ unitsByName = ["name"] = "Enfield11", }, -- end of ["callsign"] }, -- end of ["AUSTRALIA air 6 unit1"] + ["USA gnd 3 unit2"] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691809, + ["x"] = -284861, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284861, + ["y"] = 691809, + ["heading"] = 1.4977557625792, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit2", + ["unitId"] = 7013, + ["coalition"] = "blue", + }, -- end of ["USA gnd 3 unit2"] ["USA static 6"] = { ["alt"] = 73, ["point"] = { - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1466,8 +1476,8 @@ unitsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -1493,39 +1503,39 @@ unitsByName = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", }, -- end of ["USA gnd 6 unit2"] - ["USTanks2_4"] = + ["static_on_ship1"] = { - ["heading"] = 1.4977557614926, + ["heading"] = 0, ["point"] = { - ["y"] = 653291.42857143, - ["x"] = -293205.71428571, + ["y"] = 443856.28948724, + ["x"] = -355322.45423175, }, -- end of ["point"] - ["groupId"] = 12, - ["y"] = 653291.42857143, + ["categoryStatic"] = "Helicopters", + ["y"] = 443856.28948724, + ["livery_id"] = "USA Marines", + ["groupName"] = "static_on_ship1", ["coalition"] = "blue", - ["groupName"] = "USTanks2", - ["type"] = "M-1 Abrams", ["countryId"] = 2, - ["x"] = -293205.71428571, - ["unitId"] = 26, - ["category"] = "vehicle", - ["unitName"] = "USTanks2_4", - ["playerCanDrive"] = true, + ["x"] = -355322.45423175, + ["unitId"] = 63, + ["category"] = "static", + ["unitName"] = "static_on_ship1", + ["type"] = "AH-1W", ["country"] = "usa", - ["skill"] = "Average", - }, -- end of ["USTanks2_4"] + ["groupId"] = 40, + }, -- end of ["static_on_ship1"] ["USA air 5 unit1"] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1534,14 +1544,14 @@ unitsByName = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 5 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, ["groupName"] = "USA air 5", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7031, @@ -1553,6 +1563,30 @@ unitsByName = ["name"] = "Colt11", }, -- end of ["callsign"] }, -- end of ["USA air 5 unit1"] + ["USA gnd 5 unit4"] = + { + ["alt"] = 68, + ["point"] = + { + ["y"] = 694882, + ["x"] = -287479, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7015, + ["groupName"] = "USA gnd 5", + ["countryId"] = 2, + ["x"] = -287479, + ["y"] = 694882, + ["heading"] = 1.4977557575044, + ["country"] = "usa", + ["unitName"] = "USA gnd 5 unit4", + ["unitId"] = 7026, + ["coalition"] = "blue", + }, -- end of ["USA gnd 5 unit4"] ["RuBTRs5"] = { ["heading"] = -1.7994767003775, @@ -1575,30 +1609,30 @@ unitsByName = ["country"] = "russia", ["skill"] = "Average", }, -- end of ["RuBTRs5"] - ["USA gnd 5 unit4"] = + ["USA gnd 5 unit3"] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 695151, + ["x"] = -287518, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -289069, - ["y"] = 692675, - ["heading"] = 1.4977557685601, + ["x"] = -287518, + ["y"] = 695151, + ["heading"] = 1.4977557660229, ["country"] = "usa", - ["unitName"] = "USA gnd 5 unit4", - ["unitId"] = 7026, + ["unitName"] = "USA gnd 5 unit3", + ["unitId"] = 7025, ["coalition"] = "blue", - }, -- end of ["USA gnd 5 unit4"] + }, -- end of ["USA gnd 5 unit3"] ["AH-1s_1_1"] = { ["alt"] = 500, @@ -1699,54 +1733,54 @@ unitsByName = ["heading"] = 0, ["country"] = "usa", }, -- end of ["static"] - ["USA gnd 5 unit3"] = - { - ["alt"] = 55, - ["point"] = - { - ["y"] = 692459, - ["x"] = -288865, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, - ["groupName"] = "USA gnd 5", - ["countryId"] = 2, - ["x"] = -288865, - ["y"] = 692459, - ["heading"] = 1.4977557638479, - ["country"] = "usa", - ["unitName"] = "USA gnd 5 unit3", - ["unitId"] = 7025, - ["coalition"] = "blue", - }, -- end of ["USA gnd 5 unit3"] ["USA gnd 5 unit2"] = { - ["alt"] = 56, + ["alt"] = 68, ["point"] = { - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288844, - ["y"] = 692623, - ["heading"] = 1.4977557660227, + ["x"] = -287590, + ["y"] = 695090, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, ["coalition"] = "blue", }, -- end of ["USA gnd 5 unit2"] + ["USA gnd 5 unit1"] = + { + ["alt"] = 69, + ["point"] = + { + ["y"] = 695073, + ["x"] = -287442, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7015, + ["groupName"] = "USA gnd 5", + ["countryId"] = 2, + ["x"] = -287442, + ["y"] = 695073, + ["heading"] = 1.4977557701918, + ["country"] = "usa", + ["unitName"] = "USA gnd 5 unit1", + ["unitId"] = 7023, + ["coalition"] = "blue", + }, -- end of ["USA gnd 5 unit1"] ["tent #001"] = { ["shape_name"] = "teplowoz", @@ -1768,30 +1802,28 @@ unitsByName = ["heading"] = 0, ["unitId"] = 61, }, -- end of ["tent #001"] - ["USA gnd 5 unit1"] = + ["RuBTRs1"] = { - ["alt"] = 55, + ["heading"] = -1.7994767003775, ["point"] = { - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 654545.71428571, + ["x"] = -292842.85714286, }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", + ["groupId"] = 13, + ["y"] = 654545.71428571, + ["coalition"] = "red", + ["groupName"] = "RuBTRs", + ["type"] = "BTR-80", + ["countryId"] = 0, + ["x"] = -292842.85714286, + ["unitId"] = 27, ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, - ["groupName"] = "USA gnd 5", - ["countryId"] = 2, - ["x"] = -288904, - ["y"] = 692563, - ["heading"] = 1.4977557725472, - ["country"] = "usa", - ["unitName"] = "USA gnd 5 unit1", - ["unitId"] = 7023, - ["coalition"] = "blue", - }, -- end of ["USA gnd 5 unit1"] + ["unitName"] = "RuBTRs1", + ["playerCanDrive"] = true, + ["country"] = "russia", + ["skill"] = "Average", + }, -- end of ["RuBTRs1"] ["USTanks1_2"] = { ["heading"] = 0, @@ -1848,6 +1880,350 @@ unitsByName = }, -- end of ["callsign"] ["groupId"] = 34, }, -- end of ["Pilot #001"] + ["USA gnd 3 unit4"] = + { + ["alt"] = 65, + ["point"] = + { + ["y"] = 691757, + ["x"] = -285098, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -285098, + ["y"] = 691757, + ["heading"] = 1.4977557640291, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit4", + ["unitId"] = 7015, + ["coalition"] = "blue", + }, -- end of ["USA gnd 3 unit4"] + ["USA gnd 3 unit3"] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691744, + ["x"] = -284982, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284982, + ["y"] = 691744, + ["heading"] = 1.4977557573233, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit3", + ["unitId"] = 7014, + ["coalition"] = "blue", + }, -- end of ["USA gnd 3 unit3"] + ["USA gnd 3 unit1"] = + { + ["alt"] = 66, + ["point"] = + { + ["y"] = 691761, + ["x"] = -284967, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["x"] = -284967, + ["y"] = 691761, + ["heading"] = 1.4977557594982, + ["country"] = "usa", + ["unitName"] = "USA gnd 3 unit1", + ["unitId"] = 7012, + ["coalition"] = "blue", + }, -- end of ["USA gnd 3 unit1"] + ["US Ship #2"] = + { + ["type"] = "TICONDEROG", + ["point"] = + { + ["y"] = 444653.03529495, + ["x"] = -356079.94684414, + }, -- end of ["point"] + ["groupId"] = 8, + ["y"] = 444653.03529495, + ["skill"] = "Average", + ["coalition"] = "blue", + ["countryId"] = 2, + ["x"] = -356079.94684414, + ["unitId"] = 14, + ["category"] = "ship", + ["unitName"] = "US Ship #2", + ["heading"] = 0, + ["country"] = "usa", + ["groupName"] = "US Ships", + }, -- end of ["US Ship #2"] + ["USA air 7 unit1"] = + { + ["alt"] = 1997, + ["point"] = + { + ["y"] = 682727, + ["x"] = -288608, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "USA air 7 unit1", + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, + ["groupName"] = "USA air 7", + ["speed"] = 138.85196364465, + ["countryId"] = 2, + ["x"] = -288608, + ["coalition"] = "blue", + ["y"] = 682727, + ["country"] = "usa", + ["type"] = "B-52H", + ["unitId"] = 7042, + ["callsign"] = + { + [1] = 4, + [2] = 1, + [3] = 1, + ["name"] = "Colt11", + }, -- end of ["callsign"] + }, -- end of ["USA air 7 unit1"] + ["USA static 4"] = + { + ["alt"] = 65, + ["point"] = + { + ["y"] = 693655, + ["x"] = -286667, + }, -- end of ["point"] + ["categoryStatic"] = "Cargos", + ["coalitionId"] = 2, + ["mass"] = 1337, + ["category"] = "static", + ["unitName"] = "USA static 4", + ["shape_name"] = "ab-212_cargo", + ["type"] = "uh1h_cargo", + ["country"] = "usa", + ["groupName"] = "USA static 4", + ["y"] = 693655, + ["x"] = -286667, + ["coalition"] = "blue", + ["unitId"] = 7017, + ["heading"] = 0, + ["countryId"] = 2, + ["groupId"] = 7017, + }, -- end of ["USA static 4"] + ["tent2"] = + { + ["shape_name"] = "PalatkaB", + ["type"] = "FARP Tent", + ["point"] = + { + ["y"] = 638620, + ["x"] = -299814.28571429, + }, -- end of ["point"] + ["categoryStatic"] = "Fortifications", + ["y"] = 638620, + ["groupName"] = "tent2", + ["coalition"] = "blue", + ["countryId"] = 2, + ["x"] = -299814.28571429, + ["groupId"] = 16, + ["category"] = "static", + ["unitName"] = "tent2", + ["unitId"] = 38, + ["heading"] = 0, + ["country"] = "usa", + }, -- end of ["tent2"] + ["RU Farp"] = + { + ["type"] = "FARP", + ["point"] = + { + ["y"] = 617591.42857143, + ["x"] = -258442.85714286, + }, -- end of ["point"] + ["categoryStatic"] = "Heliports", + ["y"] = 617591.42857143, + ["groupName"] = "RU Farp", + ["coalition"] = "red", + ["countryId"] = 0, + ["x"] = -258442.85714286, + ["groupId"] = 17, + ["category"] = "static", + ["unitName"] = "RU Farp", + ["unitId"] = 39, + ["heading"] = 0, + ["country"] = "russia", + }, -- end of ["RU Farp"] + ["Unit #002"] = + { + ["alt"] = 60, + ["point"] = + { + ["y"] = 689785, + ["x"] = -285145, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "Hawk tr", + ["groupId"] = 35, + ["groupName"] = "teleGroup", + ["countryId"] = 2, + ["x"] = -285145, + ["y"] = 689785, + ["heading"] = 0, + ["country"] = "usa", + ["unitName"] = "Unit #002", + ["unitId"] = 52, + ["coalition"] = "blue", + }, -- end of ["Unit #002"] + ["USA gnd 2 unit2"] = + { + ["alt"] = 48, + ["point"] = + { + ["y"] = 686871, + ["x"] = -286447, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["unitName"] = "USA gnd 2 unit2", + ["heading"] = 0, + ["unitId"] = 7008, + ["groupName"] = "USA gnd 2", + ["countryId"] = 2, + ["x"] = -286447, + ["speed"] = 0, + ["type"] = "M-113", + ["groupId"] = 7004, + ["coalition"] = "blue", + ["y"] = 686871, + ["country"] = "usa", + }, -- end of ["USA gnd 2 unit2"] + ["cargoBob"] = + { + ["shape_name"] = "ab-212_cargo", + ["type"] = "uh1h_cargo", + ["point"] = + { + ["y"] = 675199.99999999, + ["x"] = -292007.14285714, + }, -- end of ["point"] + ["categoryStatic"] = "Cargos", + ["y"] = 675199.99999999, + ["coalition"] = "blue", + ["groupName"] = "cargoBob", + ["groupId"] = 31, + ["countryId"] = 2, + ["mass"] = 371, + ["unitId"] = 45, + ["category"] = "static", + ["unitName"] = "cargoBob", + ["x"] = -292007.14285714, + ["heading"] = 0, + ["country"] = "usa", + }, -- end of ["cargoBob"] + ["USA air 1 unit1"] = + { + ["alt"] = 1997, + ["point"] = + { + ["y"] = 682727, + ["x"] = -288608, + }, -- end of ["point"] + ["alt_type"] = "BARO", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", + ["skill"] = "High", + ["category"] = "plane", + ["unitName"] = "USA air 1 unit1", + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, + ["groupName"] = "USA air 1", + ["speed"] = 138.85196364465, + ["countryId"] = 2, + ["x"] = -288608, + ["coalition"] = "blue", + ["y"] = 682727, + ["country"] = "usa", + ["type"] = "B-52H", + ["unitId"] = 7009, + ["callsign"] = + { + [1] = 4, + [2] = 1, + [3] = 1, + ["name"] = "Colt11", + }, -- end of ["callsign"] + }, -- end of ["USA air 1 unit1"] + ["USA gnd 1 unit4"] = + { + ["alt"] = 72, + ["point"] = + { + ["y"] = 693653, + ["x"] = -284699, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-1 Abrams", + ["groupId"] = 7001, + ["groupName"] = "USA gnd 1", + ["countryId"] = 2, + ["x"] = -284699, + ["y"] = 693653, + ["heading"] = 1.4977557629417, + ["country"] = "usa", + ["unitName"] = "USA gnd 1 unit4", + ["unitId"] = 7004, + ["coalition"] = "blue", + }, -- end of ["USA gnd 1 unit4"] + ["RuTanks3"] = + { + ["heading"] = 0, + ["point"] = + { + ["y"] = 628757.14285714, + ["x"] = -273522.85714286, + }, -- end of ["point"] + ["groupId"] = 14, + ["y"] = 628757.14285714, + ["coalition"] = "red", + ["groupName"] = "RuTanks", + ["type"] = "T-55", + ["countryId"] = 0, + ["x"] = -273522.85714286, + ["unitId"] = 35, + ["category"] = "vehicle", + ["unitName"] = "RuTanks3", + ["playerCanDrive"] = true, + ["country"] = "russia", + ["skill"] = "Excellent", + }, -- end of ["RuTanks3"] ["AH-1s_1_2"] = { ["alt"] = 500, @@ -1882,394 +2258,71 @@ unitsByName = }, -- end of ["callsign"] ["groupId"] = 1, }, -- end of ["AH-1s_1_2"] - ["USA gnd 3 unit4"] = + ["Aerial-1-1"] = { - ["alt"] = 60, + ["alt"] = 2000, ["point"] = { - ["y"] = 691995, - ["x"] = -286713, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286713, - ["y"] = 691995, - ["heading"] = 1.4977557627604, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit4", - ["unitId"] = 7015, - ["coalition"] = "blue", - }, -- end of ["USA gnd 3 unit4"] - ["USA gnd 3 unit3"] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 692150, - ["x"] = -286560, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["x"] = -286560, - ["y"] = 692150, - ["heading"] = 1.4977557614918, - ["country"] = "usa", - ["unitName"] = "USA gnd 3 unit3", - ["unitId"] = 7014, - ["coalition"] = "blue", - }, -- end of ["USA gnd 3 unit3"] - ["US Ship #2"] = - { - ["type"] = "TICONDEROG", - ["point"] = - { - ["y"] = 444653.03529495, - ["x"] = -356079.94684414, - }, -- end of ["point"] - ["groupId"] = 8, - ["y"] = 444653.03529495, - ["skill"] = "Average", - ["coalition"] = "blue", - ["countryId"] = 2, - ["x"] = -356079.94684414, - ["unitId"] = 14, - ["category"] = "ship", - ["unitName"] = "US Ship #2", - ["heading"] = 0, - ["country"] = "usa", - ["groupName"] = "US Ships", - }, -- end of ["US Ship #2"] - ["USA air 7 unit1"] = - { - ["alt"] = 1996, - ["point"] = - { - ["y"] = 682741, - ["x"] = -288608, + ["y"] = 319582.08692347, + ["x"] = -198551.02959497, }, -- end of ["point"] ["alt_type"] = "BARO", - ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", + ["livery_id"] = "Australian 75th Squadron", + ["onboard_num"] = "010", ["category"] = "plane", - ["unitName"] = "USA air 7 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, - ["groupName"] = "USA air 7", - ["speed"] = 138.82033106075, - ["countryId"] = 2, - ["x"] = -288608, - ["coalition"] = "blue", - ["y"] = 682741, - ["country"] = "usa", - ["type"] = "B-52H", - ["unitId"] = 7042, + ["speed"] = 180.55555555556, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] + ["type"] = "FA-18C_hornet", + ["country"] = "australia", + ["psi"] = -2.1995926132104, + ["unitName"] = "Aerial-1-1", + ["groupName"] = "cloneNeut", + ["coalition"] = "neutral", + ["countryId"] = 21, + ["x"] = -198551.02959497, + ["y"] = 319582.08692347, + ["unitId"] = 65, + ["heading"] = 2.1995926132104, ["callsign"] = { - [1] = 4, + [1] = 1, [2] = 1, [3] = 1, - ["name"] = "Colt11", + ["name"] = "Enfield11", }, -- end of ["callsign"] - }, -- end of ["USA air 7 unit1"] - ["AUSTRALIA shp 2 unit1"] = + ["skill"] = "High", + ["groupId"] = 42, + }, -- end of ["Aerial-1-1"] + ["Ka-50s_1_2"] = { - ["alt"] = 0, + ["alt"] = 500, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, - }, -- end of ["point"] - ["coalitionId"] = 0, - ["skill"] = "Average", - ["category"] = "ship", - ["unitName"] = "AUSTRALIA shp 2 unit1", - ["heading"] = 0, - ["unitId"] = 7022, - ["groupName"] = "AUSTRALIA shp 2", - ["countryId"] = 21, - ["x"] = -163302, - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000071, - ["coalition"] = "neutral", - ["y"] = 266588, - ["country"] = "australia", - }, -- end of ["AUSTRALIA shp 2 unit1"] - ["tent2"] = - { - ["shape_name"] = "PalatkaB", - ["type"] = "FARP Tent", - ["point"] = - { - ["y"] = 638620, - ["x"] = -299814.28571429, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["y"] = 638620, - ["groupName"] = "tent2", - ["coalition"] = "blue", - ["countryId"] = 2, - ["x"] = -299814.28571429, - ["groupId"] = 16, - ["category"] = "static", - ["unitName"] = "tent2", - ["unitId"] = 38, - ["heading"] = 0, - ["country"] = "usa", - }, -- end of ["tent2"] - ["USA static 4"] = - { - ["alt"] = 61, - ["point"] = - { - ["y"] = 693989, - ["x"] = -288108, - }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["coalitionId"] = 2, - ["mass"] = 1337, - ["category"] = "static", - ["unitName"] = "USA static 4", - ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", - ["country"] = "usa", - ["groupName"] = "USA static 4", - ["y"] = 693989, - ["x"] = -288108, - ["coalition"] = "blue", - ["unitId"] = 7017, - ["heading"] = 0, - ["countryId"] = 2, - ["groupId"] = 7017, - }, -- end of ["USA static 4"] - ["Unit #002"] = - { - ["alt"] = 60, - ["point"] = - { - ["y"] = 692389, - ["x"] = -287110, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "Hawk tr", - ["groupId"] = 35, - ["groupName"] = "teleGroup", - ["countryId"] = 2, - ["x"] = -287110, - ["y"] = 692389, - ["heading"] = 0, - ["country"] = "usa", - ["unitName"] = "Unit #002", - ["unitId"] = 52, - ["coalition"] = "blue", - }, -- end of ["Unit #002"] - ["RU Farp"] = - { - ["type"] = "FARP", - ["point"] = - { - ["y"] = 617591.42857143, - ["x"] = -258442.85714286, - }, -- end of ["point"] - ["categoryStatic"] = "Heliports", - ["y"] = 617591.42857143, - ["groupName"] = "RU Farp", - ["coalition"] = "red", - ["countryId"] = 0, - ["x"] = -258442.85714286, - ["groupId"] = 17, - ["category"] = "static", - ["unitName"] = "RU Farp", - ["unitId"] = 39, - ["heading"] = 0, - ["country"] = "russia", - }, -- end of ["RU Farp"] - ["cargoBob"] = - { - ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", - ["point"] = - { - ["y"] = 675199.99999999, - ["x"] = -292007.14285714, - }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, - ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, - ["unitId"] = 45, - ["category"] = "static", - ["unitName"] = "cargoBob", - ["x"] = -292007.14285714, - ["heading"] = 0, - ["country"] = "usa", - }, -- end of ["cargoBob"] - ["USA gnd 2 unit2"] = - { - ["alt"] = 48, - ["point"] = - { - ["y"] = 686871, - ["x"] = -286447, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["unitName"] = "USA gnd 2 unit2", - ["heading"] = 0, - ["unitId"] = 7008, - ["groupName"] = "USA gnd 2", - ["countryId"] = 2, - ["x"] = -286447, - ["speed"] = 0, - ["type"] = "M-113", - ["groupId"] = 1000061, - ["coalition"] = "blue", - ["y"] = 686871, - ["country"] = "usa", - }, -- end of ["USA gnd 2 unit2"] - ["USA air 1 unit1"] = - { - ["alt"] = 1996, - ["point"] = - { - ["y"] = 682741, - ["x"] = -288608, + ["y"] = 615040, + ["x"] = -237611.42857143, }, -- end of ["point"] ["alt_type"] = "BARO", - ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", - ["category"] = "plane", - ["unitName"] = "USA air 1 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, - ["groupName"] = "USA air 1", - ["speed"] = 138.82033106075, - ["countryId"] = 2, - ["x"] = -288608, - ["coalition"] = "blue", - ["y"] = 682741, - ["country"] = "usa", - ["type"] = "B-52H", - ["unitId"] = 7009, - ["callsign"] = - { - [1] = 4, - [2] = 1, - [3] = 1, - ["name"] = "Colt11", - }, -- end of ["callsign"] - }, -- end of ["USA air 1 unit1"] - ["RuTanks3"] = - { - ["heading"] = 0, - ["point"] = - { - ["y"] = 628757.14285714, - ["x"] = -273522.85714286, - }, -- end of ["point"] - ["groupId"] = 14, - ["y"] = 628757.14285714, - ["coalition"] = "red", - ["groupName"] = "RuTanks", - ["type"] = "T-55", - ["countryId"] = 0, - ["x"] = -273522.85714286, - ["unitId"] = 35, - ["category"] = "vehicle", - ["unitName"] = "RuTanks3", - ["playerCanDrive"] = true, + ["livery_id"] = "Russia Demo #024", + ["onboard_num"] = "51", + ["category"] = "helicopter", + ["speed"] = 55.555555555556, + ["type"] = "Ka-50", ["country"] = "russia", - ["skill"] = "Excellent", - }, -- end of ["RuTanks3"] - ["USA gnd 1 unit4"] = - { - ["alt"] = 62, - ["point"] = - { - ["y"] = 692553, - ["x"] = -286525, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, - ["groupName"] = "USA gnd 1", - ["countryId"] = 2, - ["x"] = -286525, - ["y"] = 692553, - ["heading"] = 1.4977557625792, - ["country"] = "usa", - ["unitName"] = "USA gnd 1 unit4", - ["unitId"] = 7004, - ["coalition"] = "blue", - }, -- end of ["USA gnd 1 unit4"] - ["static_on_ship1"] = - { - ["heading"] = 0, - ["point"] = - { - ["y"] = 443856.28948724, - ["x"] = -355322.45423175, - }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443856.28948724, - ["livery_id"] = "USA Marines", - ["groupName"] = "static_on_ship1", - ["coalition"] = "blue", - ["countryId"] = 2, - ["x"] = -355322.45423175, - ["unitId"] = 63, - ["category"] = "static", - ["unitName"] = "static_on_ship1", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 40, - }, -- end of ["static_on_ship1"] - ["Static Cafe-1"] = - { - ["shape_name"] = "stolovaya", - ["type"] = "Cafe", - ["point"] = - { - ["y"] = 464123.689023, - ["x"] = -115514.59796101, - }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["y"] = 464123.689023, - ["groupName"] = "Static Cafe-1", - ["coalition"] = "neutral", - ["countryId"] = 21, - ["x"] = -115514.59796101, - ["groupId"] = 46, - ["category"] = "static", - ["unitName"] = "Static Cafe-1", - ["unitId"] = 69, - ["heading"] = 0, - ["country"] = "australia", - }, -- end of ["Static Cafe-1"] + ["psi"] = -2.5953630185698, + ["unitName"] = "Ka-50s_1_2", + ["groupName"] = "Ka-50s_1", + ["coalition"] = "red", + ["countryId"] = 0, + ["x"] = -237611.42857143, + ["y"] = 615040, + ["unitId"] = 4, + ["heading"] = 2.5953630185698, + ["skill"] = "High", + ["callsign"] = 101, + ["groupId"] = 2, + }, -- end of ["Ka-50s_1_2"] ["F-15C Client #2_unit"] = { ["alt"] = 2000, @@ -2304,56 +2357,50 @@ unitsByName = }, -- end of ["callsign"] ["groupId"] = 5, }, -- end of ["F-15C Client #2_unit"] - ["Ka-50s_1_2"] = + ["USTanks2_4"] = { - ["alt"] = 500, + ["heading"] = 1.4977557614926, ["point"] = { - ["y"] = 615040, - ["x"] = -237611.42857143, + ["y"] = 653291.42857143, + ["x"] = -293205.71428571, }, -- end of ["point"] - ["alt_type"] = "BARO", - ["livery_id"] = "Russia Demo #024", - ["onboard_num"] = "51", - ["category"] = "helicopter", - ["speed"] = 55.555555555556, - ["type"] = "Ka-50", - ["country"] = "russia", - ["psi"] = -2.5953630185698, - ["unitName"] = "Ka-50s_1_2", - ["groupName"] = "Ka-50s_1", - ["coalition"] = "red", - ["countryId"] = 0, - ["x"] = -237611.42857143, - ["y"] = 615040, - ["unitId"] = 4, - ["heading"] = 2.5953630185698, - ["skill"] = "High", - ["callsign"] = 101, - ["groupId"] = 2, - }, -- end of ["Ka-50s_1_2"] - ["RuBTRs1"] = - { - ["heading"] = -1.7994767003775, - ["point"] = - { - ["y"] = 654545.71428571, - ["x"] = -292842.85714286, - }, -- end of ["point"] - ["groupId"] = 13, - ["y"] = 654545.71428571, - ["coalition"] = "red", - ["groupName"] = "RuBTRs", - ["type"] = "BTR-80", - ["countryId"] = 0, - ["x"] = -292842.85714286, - ["unitId"] = 27, + ["groupId"] = 12, + ["y"] = 653291.42857143, + ["coalition"] = "blue", + ["groupName"] = "USTanks2", + ["type"] = "M-1 Abrams", + ["countryId"] = 2, + ["x"] = -293205.71428571, + ["unitId"] = 26, ["category"] = "vehicle", - ["unitName"] = "RuBTRs1", + ["unitName"] = "USTanks2_4", ["playerCanDrive"] = true, - ["country"] = "russia", + ["country"] = "usa", ["skill"] = "Average", - }, -- end of ["RuBTRs1"] + }, -- end of ["USTanks2_4"] + ["Static Cafe-1"] = + { + ["shape_name"] = "stolovaya", + ["type"] = "Cafe", + ["point"] = + { + ["y"] = 464123.689023, + ["x"] = -115514.59796101, + }, -- end of ["point"] + ["categoryStatic"] = "Fortifications", + ["y"] = 464123.689023, + ["groupName"] = "Static Cafe-1", + ["coalition"] = "neutral", + ["countryId"] = 21, + ["x"] = -115514.59796101, + ["groupId"] = 46, + ["category"] = "static", + ["unitName"] = "Static Cafe-1", + ["unitId"] = 69, + ["heading"] = 0, + ["country"] = "australia", + }, -- end of ["Static Cafe-1"] ["USTanks1_4"] = { ["heading"] = 0, @@ -2395,7 +2442,7 @@ unitsByName = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", @@ -2436,47 +2483,47 @@ unitsByName = ["skill"] = "Random", ["groupId"] = 3, }, -- end of ["Mi-8s_1_1"] - ["RuTanks1"] = + ["Ground-2-1"] = { - ["heading"] = 0, + ["heading"] = 2.3261877017598, ["point"] = { - ["y"] = 628677.14285714, - ["x"] = -273442.85714286, + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, }, -- end of ["point"] - ["groupId"] = 14, - ["y"] = 628677.14285714, - ["coalition"] = "red", - ["groupName"] = "RuTanks", - ["type"] = "T-55", - ["countryId"] = 0, - ["x"] = -273442.85714286, - ["unitId"] = 33, + ["groupId"] = 47, + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["groupName"] = "poly", + ["type"] = "AAV7", + ["countryId"] = 2, + ["x"] = -244729.2581753, + ["unitId"] = 70, ["category"] = "vehicle", - ["unitName"] = "RuTanks1", + ["unitName"] = "Ground-2-1", ["playerCanDrive"] = true, - ["country"] = "russia", - ["skill"] = "Excellent", - }, -- end of ["RuTanks1"] + ["country"] = "usa", + ["skill"] = "Average", + }, -- end of ["Ground-2-1"] ["USA gnd 1 unit2"] = { - ["alt"] = 62, + ["alt"] = 73, ["point"] = { - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286576, - ["y"] = 692678, - ["heading"] = 1.4977557629417, + ["x"] = -284456, + ["y"] = 693771, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -2495,7 +2542,7 @@ unitsByName = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286447, @@ -2508,11 +2555,11 @@ unitsByName = }, -- end of ["USA gnd 4 unit2"] ["Unit #008"] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2522,8 +2569,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287237, - ["y"] = 692311, + ["x"] = -285216, + ["y"] = 689799, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -2558,43 +2605,28 @@ unitsByName = ["callsign"] = 104, ["groupId"] = 20, }, -- end of ["Su-33 Client #1Unit"] - ["Aerial-1-1"] = + ["RuTanks1"] = { - ["alt"] = 2000, + ["heading"] = 0, ["point"] = { - ["y"] = 319582.08692347, - ["x"] = -198551.02959497, + ["y"] = 628677.14285714, + ["x"] = -273442.85714286, }, -- end of ["point"] - ["alt_type"] = "BARO", - ["livery_id"] = "Australian 75th Squadron", - ["onboard_num"] = "010", - ["category"] = "plane", - ["speed"] = 180.55555555556, - ["AddPropAircraft"] = - { - }, -- end of ["AddPropAircraft"] - ["type"] = "FA-18C_hornet", - ["country"] = "australia", - ["psi"] = -2.1995926132104, - ["unitName"] = "Aerial-1-1", - ["groupName"] = "cloneNeut", - ["coalition"] = "neutral", - ["countryId"] = 21, - ["x"] = -198551.02959497, - ["y"] = 319582.08692347, - ["unitId"] = 65, - ["heading"] = 2.1995926132104, - ["callsign"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - ["name"] = "Enfield11", - }, -- end of ["callsign"] - ["skill"] = "High", - ["groupId"] = 42, - }, -- end of ["Aerial-1-1"] + ["groupId"] = 14, + ["y"] = 628677.14285714, + ["coalition"] = "red", + ["groupName"] = "RuTanks", + ["type"] = "T-55", + ["countryId"] = 0, + ["x"] = -273442.85714286, + ["unitId"] = 33, + ["category"] = "vehicle", + ["unitName"] = "RuTanks1", + ["playerCanDrive"] = true, + ["country"] = "russia", + ["skill"] = "Excellent", + }, -- end of ["RuTanks1"] ["RuBTRs6"] = { ["heading"] = -1.7994767003775, @@ -2619,11 +2651,11 @@ unitsByName = }, -- end of ["RuBTRs6"] ["Unit #003"] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2633,8 +2665,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286935, - ["y"] = 692345, + ["x"] = -285166, + ["y"] = 689948, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -2646,8 +2678,8 @@ unitsByName = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -2656,15 +2688,15 @@ unitsByName = ["speed"] = 44.444444444444, ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["unitName"] = "Rotary-1-1", ["groupName"] = "nH", ["coalition"] = "neutral", ["countryId"] = 21, - ["x"] = -155967.80633993, - ["y"] = 405888.85058741, + ["x"] = -158700.87914814, + ["y"] = 404406.46136648, ["unitId"] = 68, - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["skill"] = "High", ["callsign"] = { @@ -2697,35 +2729,35 @@ unitsByName = ["country"] = "russia", ["skill"] = "Average", }, -- end of ["RuBTRs4"] - ["RuTent2"] = + ["static_on_ship1 #001"] = { - ["shape_name"] = "PalatkaB", - ["type"] = "FARP Tent", + ["heading"] = 0, ["point"] = { - ["y"] = 617319.42857142, - ["x"] = -259804, + ["y"] = 443849.03844635, + ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["y"] = 617319.42857142, - ["groupName"] = "RuTent2", - ["coalition"] = "red", - ["countryId"] = 0, - ["x"] = -259804, - ["groupId"] = 19, + ["categoryStatic"] = "Helicopters", + ["y"] = 443849.03844635, + ["livery_id"] = "USA Marines", + ["groupName"] = "static_on_ship1 #001", + ["coalition"] = "blue", + ["countryId"] = 2, + ["x"] = -355322.27295572, + ["unitId"] = 64, ["category"] = "static", - ["unitName"] = "RuTent2", - ["unitId"] = 41, - ["heading"] = 0, - ["country"] = "russia", - }, -- end of ["RuTent2"] + ["unitName"] = "static_on_ship1 #001", + ["type"] = "AH-1W", + ["country"] = "usa", + ["groupId"] = 41, + }, -- end of ["static_on_ship1 #001"] ["USA static 8"] = { - ["alt"] = 67, + ["alt"] = 55, ["point"] = { - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2736,8 +2768,8 @@ unitsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -2746,11 +2778,11 @@ unitsByName = }, -- end of ["USA static 8"] ["USA static 2"] = { - ["alt"] = 72, + ["alt"] = 70, ["point"] = { - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2761,8 +2793,8 @@ unitsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, diff --git a/Example DBs/mist_DBs_unitsByNum.lua b/Example DBs/mist_DBs_unitsByNum.lua index 04780ab..89e5948 100644 --- a/Example DBs/mist_DBs_unitsByNum.lua +++ b/Example DBs/mist_DBs_unitsByNum.lua @@ -108,8 +108,8 @@ unitsByNum = ["alt"] = 500, ["point"] = { - ["y"] = 405888.85058741, - ["x"] = -155967.80633993, + ["y"] = 404406.46136648, + ["x"] = -158700.87914814, }, -- end of ["point"] ["alt_type"] = "BARO", ["livery_id"] = "Australia RAAF", @@ -118,15 +118,15 @@ unitsByNum = ["speed"] = 44.444444444444, ["type"] = "CH-47D", ["country"] = "australia", - ["psi"] = -2.6461357622286, + ["psi"] = -2.6021711998766, ["unitName"] = "Rotary-1-1", ["groupName"] = "nH", ["coalition"] = "neutral", ["countryId"] = 21, - ["x"] = -155967.80633993, - ["y"] = 405888.85058741, + ["x"] = -158700.87914814, + ["y"] = 404406.46136648, ["unitId"] = 68, - ["heading"] = 2.6461357622286, + ["heading"] = 2.6021711998766, ["skill"] = "High", ["callsign"] = { @@ -559,8 +559,8 @@ unitsByNum = ["alt"] = 60, ["point"] = { - ["y"] = 692389, - ["x"] = -287110, + ["y"] = 689785, + ["x"] = -285145, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -570,8 +570,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287110, - ["y"] = 692389, + ["x"] = -285145, + ["y"] = 689785, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -580,11 +580,11 @@ unitsByNum = }, -- end of [25] [26] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692345, - ["x"] = -286935, + ["y"] = 689948, + ["x"] = -285166, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -594,8 +594,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286935, - ["y"] = 692345, + ["x"] = -285166, + ["y"] = 689948, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -604,11 +604,11 @@ unitsByNum = }, -- end of [26] [27] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692308, - ["x"] = -287213, + ["y"] = 689856, + ["x"] = -285298, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -618,8 +618,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287213, - ["y"] = 692308, + ["x"] = -285298, + ["y"] = 689856, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -628,11 +628,11 @@ unitsByNum = }, -- end of [27] [28] = { - ["alt"] = 60, + ["alt"] = 61, ["point"] = { - ["y"] = 692321, - ["x"] = -286989, + ["y"] = 689796, + ["x"] = -285058, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -642,8 +642,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -286989, - ["y"] = 692321, + ["x"] = -285058, + ["y"] = 689796, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -652,11 +652,11 @@ unitsByNum = }, -- end of [28] [29] = { - ["alt"] = 59, + ["alt"] = 61, ["point"] = { - ["y"] = 692297, - ["x"] = -287225, + ["y"] = 689973, + ["x"] = -285191, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -666,8 +666,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287225, - ["y"] = 692297, + ["x"] = -285191, + ["y"] = 689973, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -676,11 +676,11 @@ unitsByNum = }, -- end of [29] [30] = { - ["alt"] = 61, + ["alt"] = 60, ["point"] = { - ["y"] = 692445, - ["x"] = -287012, + ["y"] = 689860, + ["x"] = -285149, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -690,8 +690,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287012, - ["y"] = 692445, + ["x"] = -285149, + ["y"] = 689860, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -700,11 +700,11 @@ unitsByNum = }, -- end of [30] [31] = { - ["alt"] = 59, + ["alt"] = 60, ["point"] = { - ["y"] = 692311, - ["x"] = -287237, + ["y"] = 689799, + ["x"] = -285216, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -714,8 +714,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -287237, - ["y"] = 692311, + ["x"] = -285216, + ["y"] = 689799, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -723,6 +723,28 @@ unitsByNum = ["coalition"] = "blue", }, -- end of [31] [32] = + { + ["heading"] = 2.3261877017598, + ["point"] = + { + ["y"] = 185783.38833846, + ["x"] = -244729.2581753, + }, -- end of ["point"] + ["groupId"] = 47, + ["y"] = 185783.38833846, + ["coalition"] = "blue", + ["groupName"] = "poly", + ["type"] = "AAV7", + ["countryId"] = 2, + ["x"] = -244729.2581753, + ["unitId"] = 70, + ["category"] = "vehicle", + ["unitName"] = "Ground-2-1", + ["playerCanDrive"] = true, + ["country"] = "usa", + ["skill"] = "Average", + }, -- end of [32] + [33] = { ["alt"] = 2000, ["point"] = @@ -755,8 +777,8 @@ unitsByNum = ["name"] = "Springfield11", }, -- end of ["callsign"] ["groupId"] = 4, - }, -- end of [32] - [33] = + }, -- end of [33] + [34] = { ["alt"] = 2000, ["point"] = @@ -789,8 +811,8 @@ unitsByNum = ["name"] = "Springfield11", }, -- end of ["callsign"] ["groupId"] = 5, - }, -- end of [33] - [34] = + }, -- end of [34] + [35] = { ["alt"] = 2000, ["point"] = @@ -803,6 +825,9 @@ unitsByNum = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.67060113146646, @@ -814,7 +839,6 @@ unitsByNum = ["y"] = 636428.57142857, ["unitId"] = 11, ["heading"] = -0.67060113146646, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -822,9 +846,10 @@ unitsByNum = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 6, - }, -- end of [34] - [35] = + }, -- end of [35] + [36] = { ["alt"] = 2000, ["point"] = @@ -837,6 +862,9 @@ unitsByNum = ["onboard_num"] = "52", ["category"] = "plane", ["speed"] = 138.88888888889, + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] ["type"] = "A-10C", ["country"] = "usa", ["psi"] = 0.66079849060746, @@ -848,7 +876,6 @@ unitsByNum = ["y"] = 644428.57142857, ["unitId"] = 12, ["heading"] = -0.66079849060746, - ["skill"] = "Client", ["callsign"] = { [1] = 3, @@ -856,9 +883,10 @@ unitsByNum = [3] = 1, ["name"] = "Uzi11", }, -- end of ["callsign"] + ["skill"] = "Client", ["groupId"] = 7, - }, -- end of [35] - [36] = + }, -- end of [36] + [37] = { ["alt"] = 2000, ["point"] = @@ -891,8 +919,8 @@ unitsByNum = ["name"] = "Colt11", }, -- end of ["callsign"] ["groupId"] = 34, - }, -- end of [36] - [37] = + }, -- end of [37] + [38] = { ["alt"] = 2000, ["hardpoint_racks"] = true, @@ -926,8 +954,8 @@ unitsByNum = }, -- end of ["point"] ["skill"] = "High", ["country"] = "usa", - }, -- end of [37] - [38] = + }, -- end of [38] + [39] = { ["alt"] = 500, ["hardpoint_racks"] = true, @@ -961,8 +989,8 @@ unitsByNum = }, -- end of ["point"] ["skill"] = "High", ["country"] = "usa", - }, -- end of [38] - [39] = + }, -- end of [39] + [40] = { ["alt"] = 500, ["point"] = @@ -995,8 +1023,8 @@ unitsByNum = ["name"] = "Enfield12", }, -- end of ["callsign"] ["groupId"] = 1, - }, -- end of [39] - [40] = + }, -- end of [40] + [41] = { ["type"] = "MOSCOW", ["point"] = @@ -1016,8 +1044,8 @@ unitsByNum = ["heading"] = 0, ["country"] = "russia", ["groupName"] = "Rus Ships #1", - }, -- end of [40] - [41] = + }, -- end of [41] + [42] = { ["type"] = "MOSCOW", ["point"] = @@ -1037,8 +1065,8 @@ unitsByNum = ["heading"] = 0, ["country"] = "russia", ["groupName"] = "Rus Ships #1", - }, -- end of [41] - [42] = + }, -- end of [42] + [43] = { ["type"] = "MOSCOW", ["point"] = @@ -1058,8 +1086,8 @@ unitsByNum = ["heading"] = 1.1755995276042, ["country"] = "russia", ["groupName"] = "Rus Ships #2", - }, -- end of [42] - [43] = + }, -- end of [43] + [44] = { ["type"] = "MOSCOW", ["point"] = @@ -1079,8 +1107,8 @@ unitsByNum = ["heading"] = 1.1755995276042, ["country"] = "russia", ["groupName"] = "Rus Ships #2", - }, -- end of [43] - [44] = + }, -- end of [44] + [45] = { ["type"] = "FARP", ["point"] = @@ -1100,8 +1128,8 @@ unitsByNum = ["unitId"] = 39, ["heading"] = 0, ["country"] = "russia", - }, -- end of [44] - [45] = + }, -- end of [45] + [46] = { ["shape_name"] = "PalatkaB", ["type"] = "FARP Tent", @@ -1122,8 +1150,8 @@ unitsByNum = ["unitId"] = 40, ["heading"] = 0, ["country"] = "russia", - }, -- end of [45] - [46] = + }, -- end of [46] + [47] = { ["shape_name"] = "PalatkaB", ["type"] = "FARP Tent", @@ -1144,8 +1172,8 @@ unitsByNum = ["unitId"] = 41, ["heading"] = 0, ["country"] = "russia", - }, -- end of [46] - [47] = + }, -- end of [47] + [48] = { ["shape_name"] = "PalatkaB", ["type"] = "FARP Tent", @@ -1166,8 +1194,8 @@ unitsByNum = ["unitId"] = 59, ["heading"] = 0, ["country"] = "russia", - }, -- end of [47] - [48] = + }, -- end of [48] + [49] = { ["shape_name"] = "teplowoz", ["type"] = "Locomotive", @@ -1187,8 +1215,8 @@ unitsByNum = ["country"] = "russia", ["heading"] = 0, ["unitId"] = 61, - }, -- end of [48] - [49] = + }, -- end of [49] + [50] = { ["shape_name"] = "elektrowoz", ["type"] = "Electric locomotive", @@ -1208,8 +1236,8 @@ unitsByNum = ["country"] = "russia", ["heading"] = 0, ["unitId"] = 62, - }, -- end of [49] - [50] = + }, -- end of [50] + [51] = { ["heading"] = -1.7994767003775, ["point"] = @@ -1230,8 +1258,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [50] - [51] = + }, -- end of [51] + [52] = { ["heading"] = -1.7994767003775, ["point"] = @@ -1252,8 +1280,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [51] - [52] = + }, -- end of [52] + [53] = { ["heading"] = -1.7994767003775, ["point"] = @@ -1274,8 +1302,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [52] - [53] = + }, -- end of [53] + [54] = { ["heading"] = -1.7994767003775, ["point"] = @@ -1296,8 +1324,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [53] - [54] = + }, -- end of [54] + [55] = { ["heading"] = -1.7994767003775, ["point"] = @@ -1318,8 +1346,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [54] - [55] = + }, -- end of [55] + [56] = { ["heading"] = -1.7994767003775, ["point"] = @@ -1340,8 +1368,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Average", - }, -- end of [55] - [56] = + }, -- end of [56] + [57] = { ["heading"] = 0, ["point"] = @@ -1362,8 +1390,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Excellent", - }, -- end of [56] - [57] = + }, -- end of [57] + [58] = { ["heading"] = 0, ["point"] = @@ -1384,8 +1412,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Excellent", - }, -- end of [57] - [58] = + }, -- end of [58] + [59] = { ["heading"] = 0, ["point"] = @@ -1406,8 +1434,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Excellent", - }, -- end of [58] - [59] = + }, -- end of [59] + [60] = { ["heading"] = 0, ["point"] = @@ -1428,8 +1456,8 @@ unitsByNum = ["playerCanDrive"] = true, ["country"] = "russia", ["skill"] = "Excellent", - }, -- end of [59] - [60] = + }, -- end of [60] + [61] = { ["alt"] = 2000, ["point"] = @@ -1456,8 +1484,8 @@ unitsByNum = ["skill"] = "Client", ["callsign"] = 104, ["groupId"] = 20, - }, -- end of [60] - [61] = + }, -- end of [61] + [62] = { ["alt"] = 2000, ["point"] = @@ -1484,8 +1512,8 @@ unitsByNum = ["skill"] = "Client", ["callsign"] = 105, ["groupId"] = 20, - }, -- end of [61] - [62] = + }, -- end of [62] + [63] = { ["alt"] = 2000, ["point"] = @@ -1512,8 +1540,8 @@ unitsByNum = ["skill"] = "Client", ["callsign"] = 106, ["groupId"] = 20, - }, -- end of [62] - [63] = + }, -- end of [63] + [64] = { ["alt"] = 500, ["point"] = @@ -1540,8 +1568,8 @@ unitsByNum = ["skill"] = "High", ["callsign"] = 100, ["groupId"] = 2, - }, -- end of [63] - [64] = + }, -- end of [64] + [65] = { ["alt"] = 500, ["point"] = @@ -1568,8 +1596,8 @@ unitsByNum = ["skill"] = "High", ["callsign"] = 101, ["groupId"] = 2, - }, -- end of [64] - [65] = + }, -- end of [65] + [66] = { ["alt"] = 500, ["point"] = @@ -1604,8 +1632,8 @@ unitsByNum = ["callsign"] = 103, ["skill"] = "Random", ["groupId"] = 3, - }, -- end of [65] - [66] = + }, -- end of [66] + [67] = { ["alt"] = 500, ["point"] = @@ -1640,16 +1668,17 @@ unitsByNum = ["callsign"] = 102, ["skill"] = "Random", ["groupId"] = 3, - }, -- end of [66] - [67] = + }, -- end of [67] + [68] = { ["alt"] = 0, ["point"] = { - ["y"] = 266228, - ["x"] = -161996, + ["y"] = 265153, + ["x"] = -163065, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 1 unit1", @@ -1657,140 +1686,140 @@ unitsByNum = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -161996, + ["x"] = -163065, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000064, ["coalition"] = "neutral", - ["y"] = 266228, + ["type"] = "PERRY", + ["groupId"] = 7007, + ["y"] = 265153, ["country"] = "australia", - }, -- end of [67] - [68] = + }, -- end of [68] + [69] = { - ["alt"] = 61, + ["alt"] = 65, ["type"] = "Sandbox", ["point"] = { - ["y"] = 690788, - ["x"] = -285547, + ["y"] = 693778, + ["x"] = -286660, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 690788, + ["y"] = 693778, ["groupName"] = "USA static 1", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285547, + ["x"] = -286660, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 1", ["unitId"] = 7005, ["heading"] = 0, ["groupId"] = 7005, - }, -- end of [68] - [69] = + }, -- end of [69] + [70] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692663, - ["x"] = -286548, + ["y"] = 693761, + ["x"] = -284648, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286548, - ["y"] = 692663, - ["heading"] = 1.4977557600419, + ["x"] = -284648, + ["y"] = 693761, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, ["coalition"] = "blue", - }, -- end of [69] - [70] = + }, -- end of [70] + [71] = { - ["alt"] = 62, + ["alt"] = 73, ["point"] = { - ["y"] = 692678, - ["x"] = -286576, + ["y"] = 693771, + ["x"] = -284456, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286576, - ["y"] = 692678, - ["heading"] = 1.4977557629417, + ["x"] = -284456, + ["y"] = 693771, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, ["coalition"] = "blue", - }, -- end of [70] - [71] = + }, -- end of [71] + [72] = { - ["alt"] = 63, + ["alt"] = 72, ["point"] = { - ["y"] = 692774, - ["x"] = -286539, + ["y"] = 693781, + ["x"] = -284639, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286539, - ["y"] = 692774, - ["heading"] = 1.497755762398, + ["x"] = -284639, + ["y"] = 693781, + ["heading"] = 1.4977557542423, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, ["coalition"] = "blue", - }, -- end of [71] - [72] = + }, -- end of [72] + [73] = { - ["alt"] = 62, + ["alt"] = 72, ["point"] = { - ["y"] = 692553, - ["x"] = -286525, + ["y"] = 693653, + ["x"] = -284699, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000058, + ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -286525, - ["y"] = 692553, - ["heading"] = 1.4977557625792, + ["x"] = -284699, + ["y"] = 693653, + ["heading"] = 1.4977557629417, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, ["coalition"] = "blue", - }, -- end of [72] - [73] = + }, -- end of [73] + [74] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -1798,14 +1827,14 @@ unitsByNum = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 2 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000063, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, ["groupName"] = "AUSTRALIA air 2", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7010, @@ -1816,13 +1845,13 @@ unitsByNum = [3] = 1, ["name"] = "Enfield11", }, -- end of ["callsign"] - }, -- end of [73] - [74] = + }, -- end of [74] + [75] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1831,14 +1860,14 @@ unitsByNum = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 1 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000062, + ["heading"] = 1.6162179734619, + ["groupId"] = 7005, ["groupName"] = "USA air 1", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7009, @@ -1849,8 +1878,8 @@ unitsByNum = [3] = 1, ["name"] = "Colt11", }, -- end of ["callsign"] - }, -- end of [74] - [75] = + }, -- end of [75] + [76] = { ["alt"] = 48, ["point"] = @@ -1869,12 +1898,12 @@ unitsByNum = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [75] - [76] = + }, -- end of [76] + [77] = { ["alt"] = 48, ["point"] = @@ -1893,18 +1922,18 @@ unitsByNum = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000061, + ["groupId"] = 7004, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [76] - [77] = + }, -- end of [77] + [78] = { - ["alt"] = 72, + ["alt"] = 70, ["point"] = { - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1915,21 +1944,21 @@ unitsByNum = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 694712, - ["x"] = -286007, + ["y"] = 691224, + ["x"] = -283405, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, ["countryId"] = 2, ["groupId"] = 7006, - }, -- end of [77] - [78] = + }, -- end of [78] + [79] = { - ["alt"] = 61, + ["alt"] = 65, ["point"] = { - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1940,20 +1969,20 @@ unitsByNum = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693989, - ["x"] = -288108, + ["y"] = 693655, + ["x"] = -286667, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, ["countryId"] = 2, ["groupId"] = 7017, - }, -- end of [78] - [79] = + }, -- end of [79] + [80] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -1962,14 +1991,14 @@ unitsByNum = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 3 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000069, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, ["groupName"] = "USA air 3", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7020, @@ -1980,37 +2009,37 @@ unitsByNum = [3] = 1, ["name"] = "Colt11", }, -- end of ["callsign"] - }, -- end of [79] - [80] = + }, -- end of [80] + [81] = { - ["alt"] = 60, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 691139, - ["x"] = -286038, + ["y"] = 693960, + ["x"] = -287585, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 691139, + ["y"] = 693960, ["groupName"] = "USA static 3", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -286038, + ["x"] = -287585, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 3", ["unitId"] = 7016, ["heading"] = 0, ["groupId"] = 7016, - }, -- end of [80] - [81] = + }, -- end of [81] + [82] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -2018,14 +2047,14 @@ unitsByNum = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 4 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000070, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, ["groupName"] = "AUSTRALIA air 4", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7021, @@ -2036,16 +2065,17 @@ unitsByNum = [3] = 1, ["name"] = "Enfield11", }, -- end of ["callsign"] - }, -- end of [81] - [82] = + }, -- end of [82] + [83] = { ["alt"] = 0, ["point"] = { - ["y"] = 266588, - ["x"] = -163302, + ["y"] = 267048, + ["x"] = -161099, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 2 unit1", @@ -2053,111 +2083,111 @@ unitsByNum = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -163302, + ["x"] = -161099, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000071, ["coalition"] = "neutral", - ["y"] = 266588, + ["type"] = "PERRY", + ["groupId"] = 7014, + ["y"] = 267048, ["country"] = "australia", - }, -- end of [82] - [83] = + }, -- end of [83] + [84] = { - ["alt"] = 60, + ["alt"] = 66, ["point"] = { - ["y"] = 692171, - ["x"] = -286749, + ["y"] = 691761, + ["x"] = -284967, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286749, - ["y"] = 692171, - ["heading"] = 1.4977557591357, + ["x"] = -284967, + ["y"] = 691761, + ["heading"] = 1.4977557594982, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, ["coalition"] = "blue", - }, -- end of [83] - [84] = + }, -- end of [84] + [85] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692204, - ["x"] = -286580, + ["y"] = 691809, + ["x"] = -284861, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286580, - ["y"] = 692204, - ["heading"] = 1.4977557614918, + ["x"] = -284861, + ["y"] = 691809, + ["heading"] = 1.4977557625792, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, ["coalition"] = "blue", - }, -- end of [84] - [85] = + }, -- end of [85] + [86] = { - ["alt"] = 61, + ["alt"] = 66, ["point"] = { - ["y"] = 692150, - ["x"] = -286560, + ["y"] = 691744, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286560, - ["y"] = 692150, - ["heading"] = 1.4977557614918, + ["x"] = -284982, + ["y"] = 691744, + ["heading"] = 1.4977557573233, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, ["coalition"] = "blue", - }, -- end of [85] - [86] = + }, -- end of [86] + [87] = { - ["alt"] = 60, + ["alt"] = 65, ["point"] = { - ["y"] = 691995, - ["x"] = -286713, + ["y"] = 691757, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000065, + ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -286713, - ["y"] = 691995, - ["heading"] = 1.4977557627604, + ["x"] = -285098, + ["y"] = 691757, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, ["coalition"] = "blue", - }, -- end of [86] - [87] = + }, -- end of [87] + [88] = { ["alt"] = 48, ["point"] = @@ -2170,7 +2200,7 @@ unitsByNum = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286407, @@ -2180,8 +2210,8 @@ unitsByNum = ["unitName"] = "USA gnd 4 unit1", ["unitId"] = 7018, ["coalition"] = "blue", - }, -- end of [87] - [88] = + }, -- end of [88] + [89] = { ["alt"] = 48, ["point"] = @@ -2194,7 +2224,7 @@ unitsByNum = ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000068, + ["groupId"] = 7011, ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["x"] = -286447, @@ -2204,109 +2234,109 @@ unitsByNum = ["unitName"] = "USA gnd 4 unit2", ["unitId"] = 7019, ["coalition"] = "blue", - }, -- end of [88] - [89] = + }, -- end of [89] + [90] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692563, - ["x"] = -288904, + ["y"] = 695073, + ["x"] = -287442, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288904, - ["y"] = 692563, - ["heading"] = 1.4977557725472, + ["x"] = -287442, + ["y"] = 695073, + ["heading"] = 1.4977557701918, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, ["coalition"] = "blue", - }, -- end of [89] - [90] = + }, -- end of [90] + [91] = { - ["alt"] = 56, + ["alt"] = 68, ["point"] = { - ["y"] = 692623, - ["x"] = -288844, + ["y"] = 695090, + ["x"] = -287590, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288844, - ["y"] = 692623, - ["heading"] = 1.4977557660227, + ["x"] = -287590, + ["y"] = 695090, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, ["coalition"] = "blue", - }, -- end of [90] - [91] = + }, -- end of [91] + [92] = { - ["alt"] = 55, + ["alt"] = 69, ["point"] = { - ["y"] = 692459, - ["x"] = -288865, + ["y"] = 695151, + ["x"] = -287518, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -288865, - ["y"] = 692459, - ["heading"] = 1.4977557638479, + ["x"] = -287518, + ["y"] = 695151, + ["heading"] = 1.4977557660229, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, ["coalition"] = "blue", - }, -- end of [91] - [92] = + }, -- end of [92] + [93] = { - ["alt"] = 55, + ["alt"] = 68, ["point"] = { - ["y"] = 692675, - ["x"] = -289069, + ["y"] = 694882, + ["x"] = -287479, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000072, + ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -289069, - ["y"] = 692675, - ["heading"] = 1.4977557685601, + ["x"] = -287479, + ["y"] = 694882, + ["heading"] = 1.4977557575044, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, ["coalition"] = "blue", - }, -- end of [92] - [93] = + }, -- end of [93] + [94] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2315,14 +2345,14 @@ unitsByNum = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 5 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000076, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, ["groupName"] = "USA air 5", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7031, @@ -2333,8 +2363,8 @@ unitsByNum = [3] = 1, ["name"] = "Colt11", }, -- end of ["callsign"] - }, -- end of [93] - [94] = + }, -- end of [94] + [95] = { ["alt"] = 48, ["point"] = @@ -2353,12 +2383,12 @@ unitsByNum = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [94] - [95] = + }, -- end of [95] + [96] = { ["alt"] = 48, ["point"] = @@ -2377,18 +2407,18 @@ unitsByNum = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000075, + ["groupId"] = 7018, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [95] - [96] = + }, -- end of [96] + [97] = { ["alt"] = 73, ["point"] = { - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2399,21 +2429,21 @@ unitsByNum = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 694850, - ["x"] = -285204, + ["y"] = 695241, + ["x"] = -285338, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, ["countryId"] = 2, ["groupId"] = 7028, - }, -- end of [96] - [97] = + }, -- end of [97] + [98] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -2421,14 +2451,14 @@ unitsByNum = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 6 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000077, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, ["groupName"] = "AUSTRALIA air 6", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7032, @@ -2439,55 +2469,56 @@ unitsByNum = [3] = 1, ["name"] = "Enfield11", }, -- end of ["callsign"] - }, -- end of [97] - [98] = + }, -- end of [98] + [99] = { - ["alt"] = 69, + ["alt"] = 68, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693432, - ["x"] = -285294, + ["y"] = 693480, + ["x"] = -285622, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693432, + ["y"] = 693480, ["groupName"] = "USA static 5", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -285294, + ["x"] = -285622, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 5", ["unitId"] = 7027, ["heading"] = 0, ["groupId"] = 7027, - }, -- end of [98] - [99] = + }, -- end of [99] + [100] = { ["alt"] = 0, ["point"] = { - ["y"] = 267963, - ["x"] = -165895, + ["y"] = 268869, + ["x"] = -163156, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000078, + ["unitName"] = "AUSTRALIA shp 3 unit1", + ["heading"] = 0, + ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -165895, - ["y"] = 267963, - ["heading"] = 0, - ["country"] = "australia", - ["unitName"] = "AUSTRALIA shp 3 unit1", - ["unitId"] = 7033, + ["x"] = -163156, + ["speed"] = 0, ["coalition"] = "neutral", - }, -- end of [99] - [100] = + ["type"] = "PERRY", + ["groupId"] = 7021, + ["y"] = 268869, + ["country"] = "australia", + }, -- end of [100] + [101] = { ["alt"] = 48, ["point"] = @@ -2506,12 +2537,12 @@ unitsByNum = ["x"] = -286407, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [100] - [101] = + }, -- end of [101] + [102] = { ["alt"] = 48, ["point"] = @@ -2530,17 +2561,17 @@ unitsByNum = ["x"] = -286447, ["speed"] = 0, ["type"] = "M-113", - ["groupId"] = 1000082, + ["groupId"] = 7025, ["coalition"] = "blue", ["y"] = 686871, ["country"] = "usa", - }, -- end of [101] - [102] = + }, -- end of [102] + [103] = { - ["alt"] = 1996, + ["alt"] = 1997, ["point"] = { - ["y"] = 682741, + ["y"] = 682727, ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", @@ -2549,14 +2580,14 @@ unitsByNum = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "USA air 7 unit1", - ["heading"] = 1.6162179835615, - ["groupId"] = 1000083, + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, ["groupName"] = "USA air 7", - ["speed"] = 138.82033106075, + ["speed"] = 138.85196364465, ["countryId"] = 2, ["x"] = -288608, ["coalition"] = "blue", - ["y"] = 682741, + ["y"] = 682727, ["country"] = "usa", ["type"] = "B-52H", ["unitId"] = 7042, @@ -2567,110 +2598,110 @@ unitsByNum = [3] = 1, ["name"] = "Colt11", }, -- end of ["callsign"] - }, -- end of [102] - [103] = + }, -- end of [103] + [104] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692747, - ["x"] = -287036, + ["y"] = 693098, + ["x"] = -284021, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", ["speed"] = 0, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287036, - ["y"] = 692747, - ["heading"] = 1.4977557703724, + ["x"] = -284021, + ["y"] = 693098, + ["heading"] = 1.4977557645728, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, ["coalition"] = "blue", - }, -- end of [103] - [104] = + }, -- end of [104] + [105] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 692716, - ["x"] = -286920, + ["y"] = 693012, + ["x"] = -284053, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 5.0056692998623e-05, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -286920, - ["y"] = 692716, - ["heading"] = 1.4977557703724, + ["x"] = -284053, + ["y"] = 693012, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, ["coalition"] = "blue", - }, -- end of [104] - [105] = + }, -- end of [105] + [106] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 692580, - ["x"] = -287056, + ["y"] = 693026, + ["x"] = -283898, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.00018869274936151, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287056, - ["y"] = 692580, - ["heading"] = 1.4977557642103, + ["x"] = -283898, + ["y"] = 693026, + ["heading"] = 1.5077557625432, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, ["coalition"] = "blue", - }, -- end of [105] - [106] = + }, -- end of [106] + [107] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 692752, - ["x"] = -287189, + ["y"] = 693093, + ["x"] = -284127, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0, + ["speed"] = 0.0040063578450385, ["type"] = "M-1 Abrams", - ["groupId"] = 1000079, + ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -287189, - ["y"] = 692752, - ["heading"] = 1.4977557678351, + ["x"] = -284127, + ["y"] = 693093, + ["heading"] = 1.4877557641795, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, ["coalition"] = "blue", - }, -- end of [106] - [107] = + }, -- end of [107] + [108] = { - ["alt"] = 1997, + ["alt"] = 1998, ["point"] = { - ["y"] = 319610, - ["x"] = -198571, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] ["alt_type"] = "BARO", ["coalitionId"] = 0, @@ -2678,14 +2709,14 @@ unitsByNum = ["skill"] = "High", ["category"] = "plane", ["unitName"] = "AUSTRALIA air 8 unit1", - ["heading"] = 2.1995924685911, - ["groupId"] = 1000084, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, ["groupName"] = "AUSTRALIA air 8", - ["speed"] = 180.44764340673, + ["speed"] = 180.49294253728, ["countryId"] = 21, - ["x"] = -198571, + ["x"] = -198560, ["coalition"] = "neutral", - ["y"] = 319610, + ["y"] = 319595, ["country"] = "australia", ["type"] = "FA-18C_hornet", ["unitId"] = 7043, @@ -2696,16 +2727,17 @@ unitsByNum = [3] = 1, ["name"] = "Enfield11", }, -- end of ["callsign"] - }, -- end of [107] - [108] = + }, -- end of [108] + [109] = { ["alt"] = 0, ["point"] = { - ["y"] = 268804, - ["x"] = -165342, + ["y"] = 266075, + ["x"] = -162226, }, -- end of ["point"] ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["category"] = "ship", ["unitName"] = "AUSTRALIA shp 4 unit1", @@ -2713,21 +2745,21 @@ unitsByNum = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -165342, + ["x"] = -162226, ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 1000085, ["coalition"] = "neutral", - ["y"] = 268804, + ["type"] = "PERRY", + ["groupId"] = 7028, + ["y"] = 266075, ["country"] = "australia", - }, -- end of [108] - [109] = + }, -- end of [109] + [110] = { - ["alt"] = 67, + ["alt"] = 55, ["point"] = { - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2738,35 +2770,35 @@ unitsByNum = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 691664, - ["x"] = -284503, + ["y"] = 689703, + ["x"] = -286460, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, ["countryId"] = 2, ["groupId"] = 7039, - }, -- end of [109] - [110] = + }, -- end of [110] + [111] = { - ["alt"] = 61, + ["alt"] = 70, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693155, - ["x"] = -287187, + ["y"] = 694696, + ["x"] = -287053, }, -- end of ["point"] ["categoryStatic"] = "Fortifications", ["coalitionId"] = 2, - ["y"] = 693155, + ["y"] = 694696, ["groupName"] = "USA static 7", ["country"] = "usa", ["countryId"] = 2, - ["x"] = -287187, + ["x"] = -287053, ["coalition"] = "blue", ["category"] = "static", ["unitName"] = "USA static 7", ["unitId"] = 7038, ["heading"] = 0, ["groupId"] = 7038, - }, -- end of [110] + }, -- end of [111] } -- end of unitsByNum diff --git a/Example DBs/mist_DBs_zonesByName.lua b/Example DBs/mist_DBs_zonesByName.lua index 0cf08c8..df6e698 100644 --- a/Example DBs/mist_DBs_zonesByName.lua +++ b/Example DBs/mist_DBs_zonesByName.lua @@ -2,15 +2,34 @@ zonesByName = { ["LZ zone"] = { - ["y"] = 614105.71428571, ["radius"] = 3000, ["zoneId"] = 2, + ["color"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + [4] = 0.14901960784314, + }, -- end of ["color"] + ["properties"] = + { + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 614105.71428571, + ["x"] = -245328.57142857, + ["name"] = "LZ zone", ["point"] = { ["y"] = 0, ["x"] = -245328.57142857, ["z"] = 614105.71428571, }, -- end of ["point"] + ["type"] = 0, + }, -- end of ["LZ zone"] + ["explosion zone"] = + { + ["radius"] = 3000, + ["zoneId"] = 1, ["color"] = { [1] = 1, @@ -18,21 +37,25 @@ zonesByName = [3] = 1, [4] = 0.14901960784314, }, -- end of ["color"] - ["x"] = -245328.57142857, + ["properties"] = + { + }, -- end of ["properties"] ["hidden"] = false, - ["name"] = "LZ zone", - }, -- end of ["LZ zone"] - ["explosion zone"] = - { ["y"] = 673819.99999999, - ["radius"] = 3000, - ["zoneId"] = 1, + ["x"] = -271900, + ["name"] = "explosion zone", ["point"] = { ["y"] = 0, ["x"] = -271900, ["z"] = 673819.99999999, }, -- end of ["point"] + ["type"] = 0, + }, -- end of ["explosion zone"] + ["cloneZone"] = + { + ["radius"] = 3000, + ["zoneId"] = 3, ["color"] = { [1] = 1, @@ -40,31 +63,20 @@ zonesByName = [3] = 1, [4] = 0.14901960784314, }, -- end of ["color"] - ["x"] = -271900, + ["properties"] = + { + }, -- end of ["properties"] ["hidden"] = false, - ["name"] = "explosion zone", - }, -- end of ["explosion zone"] - ["cloneZone"] = - { ["y"] = 692534.28571428, - ["radius"] = 3000, - ["zoneId"] = 3, + ["x"] = -285971.42857143, + ["name"] = "cloneZone", ["point"] = { ["y"] = 0, ["x"] = -285971.42857143, ["z"] = 692534.28571428, }, -- end of ["point"] - ["color"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - [4] = 0.14901960784314, - }, -- end of ["color"] - ["x"] = -285971.42857143, - ["hidden"] = false, - ["name"] = "cloneZone", + ["type"] = 0, }, -- end of ["cloneZone"] ["shipZone"] = { @@ -90,5 +102,6 @@ zonesByName = ["x"] = -163182.90396786, ["z"] = 267139.69375223, }, -- end of ["point"] + ["type"] = 0, }, -- end of ["shipZone"] } -- end of zonesByName diff --git a/Example DBs/mist_DBs_zonesByNum.lua b/Example DBs/mist_DBs_zonesByNum.lua index 317cdcf..44cd7a3 100644 --- a/Example DBs/mist_DBs_zonesByNum.lua +++ b/Example DBs/mist_DBs_zonesByNum.lua @@ -2,15 +2,34 @@ zonesByNum = { [1] = { - ["y"] = 614105.71428571, ["radius"] = 3000, + ["zoneId"] = 2, + ["color"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + [4] = 0.14901960784314, + }, -- end of ["color"] + ["properties"] = + { + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 614105.71428571, + ["x"] = -245328.57142857, + ["name"] = "LZ zone", + ["type"] = 0, ["point"] = { ["y"] = 0, ["x"] = -245328.57142857, ["z"] = 614105.71428571, }, -- end of ["point"] - ["name"] = "LZ zone", + }, -- end of [1] + [2] = + { + ["radius"] = 3000, + ["zoneId"] = 3, ["color"] = { [1] = 1, @@ -18,31 +37,20 @@ zonesByNum = [3] = 1, [4] = 0.14901960784314, }, -- end of ["color"] - ["x"] = -245328.57142857, + ["properties"] = + { + }, -- end of ["properties"] ["hidden"] = false, - ["zoneId"] = 2, - }, -- end of [1] - [2] = - { ["y"] = 692534.28571428, - ["radius"] = 3000, + ["x"] = -285971.42857143, + ["name"] = "cloneZone", + ["type"] = 0, ["point"] = { ["y"] = 0, ["x"] = -285971.42857143, ["z"] = 692534.28571428, }, -- end of ["point"] - ["name"] = "cloneZone", - ["color"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - [4] = 0.14901960784314, - }, -- end of ["color"] - ["x"] = -285971.42857143, - ["hidden"] = false, - ["zoneId"] = 3, }, -- end of [2] [3] = { @@ -62,6 +70,7 @@ zonesByNum = ["y"] = 267139.69375223, ["x"] = -163182.90396786, ["name"] = "shipZone", + ["type"] = 0, ["point"] = { ["y"] = 0, @@ -71,15 +80,8 @@ zonesByNum = }, -- end of [3] [4] = { - ["y"] = 673819.99999999, ["radius"] = 3000, - ["point"] = - { - ["y"] = 0, - ["x"] = -271900, - ["z"] = 673819.99999999, - }, -- end of ["point"] - ["name"] = "explosion zone", + ["zoneId"] = 1, ["color"] = { [1] = 1, @@ -87,8 +89,19 @@ zonesByNum = [3] = 1, [4] = 0.14901960784314, }, -- end of ["color"] - ["x"] = -271900, + ["properties"] = + { + }, -- end of ["properties"] ["hidden"] = false, - ["zoneId"] = 1, + ["y"] = 673819.99999999, + ["x"] = -271900, + ["name"] = "explosion zone", + ["type"] = 0, + ["point"] = + { + ["y"] = 0, + ["x"] = -271900, + ["z"] = 673819.99999999, + }, -- end of ["point"] }, -- end of [4] } -- end of zonesByNum diff --git a/mist.lua b/mist.lua index f4b65ca..0d68b29 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 100 +mist.build = 101 -- forward declaration of log shorthand local log @@ -79,7 +79,7 @@ do -- the main scope local function initDBs() -- mist.DBs scope mist.DBs = {} - + mist.DBs.markList = {} mist.DBs.missionData = {} if env.mission then @@ -5030,7 +5030,7 @@ do -- mist.debug scope if type(sVal) == 'string' or type(sVal) == 'number' then if sName == 'log' then mistSettings[sName] = sVal - log:setLevel(sVal) + mist.log:setLevel(sVal) elseif sName == 'dbLog' then mistSettings[sName] = sVal dblog:setLevel(sVal) @@ -5229,7 +5229,8 @@ do -- mist.debug scope else trigger.action.outText('Error: insufficient libraries to run mist.debug.writeTypes, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua \n writeTypes table written to DCS.log file instead.', 10) log:warn('mist.debug.writeTypes: $1', output) - end + end + return output end -- write CLSIDs -- write livery names @@ -6692,6 +6693,8 @@ do -- mist.demos scope end + + do --[[ stuff for marker panels marker.add() add marker. Point of these functions is to simplify process and to store all mark panels added. @@ -6787,7 +6790,7 @@ do end mist.marker = {} - mist.marker.list = {} + local function markSpamFilter(recList, spamBlockOn) for id, name in pairs(recList) do @@ -6851,42 +6854,47 @@ do function handle:onEvent(e) if world.event.S_EVENT_MARK_ADDED == e.id and e.idx then usedMarks[e.idx] = e.idx - if not mist.marker.list[e.idx] then + if not mist.DBs.markList[e.idx] then --log:info('create maker DB: $1', e.idx) - mist.marker.list[e.idx] = {time = e.time, pos = e.pos, groupId = e.groupId, mType = 'panel', text = e.text, markId = e.idx, coalition = e.coalition} + mist.DBs.markList[e.idx] = {time = e.time, pos = e.pos, groupId = e.groupId, mType = 'panel', text = e.text, markId = e.idx, coalition = e.coalition} if e.unit then - mist.marker.list[e.idx].unit = e.initiaor:getName() + mist.DBs.markList[e.idx].unit = e.initiaor:getName() end --log:info(mist.marker.list[e.idx]) end elseif world.event.S_EVENT_MARK_CHANGE == e.id and e.idx then - if mist.marker.list[e.idx] then - mist.marker.list[e.idx].text = e.text + if mist.DBs.markList[e.idx] then + mist.DBs.markList[e.idx].text = e.text end elseif world.event.S_EVENT_MARK_REMOVE == e.id and e.idx then - if mist.marker.list[e.idx] then - mist.marker.list[e.idx] = nil + if mist.DBs.markList[e.idx] then + mist.DBs.markList[e.idx] = nil end end end local function removeMark(id) - --log:info("Removing Mark: $1", id) + --log:info("Removing Mark: $1", id + local removed = false if type(id) == 'table' then for ind, val in pairs(id) do trigger.action.removeMark(val) - mist.marker.list[val] = nil + mist.DBs.markList[val] = nil + removed = true end else trigger.action.removeMark(id) - mist.marker.list[id] = nil + mist.DBs.markList[id] = nil + removed = true end + return removed end world.addEventHandler(handle) function mist.marker.setDefault(vars) + local anyChange = false if vars and type(vars) == 'table' then for l1, l1Data in pairs(vars) do if type(l1Data) == 'table' then @@ -6896,13 +6904,16 @@ do for l2, l2Data in pairs(l1Data) do userDefs[l1][l2] = l2Data + anyChange = true end else userDefs[l1] = l1Data + anyChange = true end end end + return anyChange end function mist.marker.add(vars) @@ -6913,7 +6924,7 @@ do local markFor = vars.markFor local markForCoa = vars.markForCoa -- optional, can be used if you just want to mark to a specific coa/all local id = vars.id or vars.markId or vars.markid - local mType = vars.mType or 0 + local mType = vars.mType or vars.markType or vars.type or 0 local color = vars.color local fillColor = vars.fillColor local lineType = vars.lineType or 2 @@ -6943,9 +6954,9 @@ do ]] local lId = id or name - if mist.marker.list[id] then ---------- NEED A BETTER WAY TO ASSOCIATE THE ID VALUE. CUrrnetly deleting from table and checking if that deleted entry exists which it wont. + if mist.DBs.markList[id] then ---------- NEED A BETTER WAY TO ASSOCIATE THE ID VALUE. CUrrnetly deleting from table and checking if that deleted entry exists which it wont. --log:warn('active mark to be removed: $1', id) - name = mist.marker.list[id].name or id + name = mist.DBs.markList[id].name or id removeMark(id) elseif usedMarks[id] then --log:info('exists in usedMarks: $1', id) @@ -6958,13 +6969,12 @@ do usedMarks[id] = usedId -- redefine the value used end if name then - if usedId == 0 then - usedId = iterate() - end usedMarks[name] = usedId end - + if usedId == 0 then + usedId = iterate() + end if mType then if type(mType) == 'string' then for i = 1, #tNames do @@ -7112,7 +7122,7 @@ do if markScope ~= 'table' then -- create marks - mist.marker.list[usedId] = data-- add to the DB + mist.DBs.markList[usedId] = data-- add to the DB else if #markForTable > 0 then @@ -7124,7 +7134,7 @@ do for i = 1, #markForTable do local newId = iterate() local data = {markId = newId, text = text, pos = pos[i], markFor = markForTable[i], markType = 'panel', name = name, readOnly = readOnly, time = timer.getTime()} - mist.marker.list[newId] = data + mist.DBs.markList[newId] = data table.insert(list, data) draw(data) @@ -7184,7 +7194,7 @@ do fCal[#fCal+1] = message local data = {coa = coa, markId = usedId, pos = pos, markFor = markFor, color = color, readOnly = readOnly, message = message, fillColor = fillColor, lineType = lineType, markType = tNames[mType], name = name, radius = radius, text = text, fontSize = fontSize, time = timer.getTime()} - mist.marker.list[usedId] = data + mist.DBs.markList[usedId] = data if mType == 7 or mType == 1 then local s = "trigger.action.markupToAll(" @@ -7219,29 +7229,30 @@ do end function mist.marker.remove(id) - removeMark(id) + return removeMark(id) end function mist.marker.get(id) - if mist.marker.lis[id] then - return mist.marker.lis[id] + if mist.DBs.markList[id] then + return mist.DBs.markList[id] end local names = {} - for markId, data in pairs(mist.marker.list) do + for markId, data in pairs(mist.DBs.markList) do if data.name and data.name == id then table.insert(names, data) end end - if #names > 0 then + if #names > 1 then return names end end - --function mist.marker.coords(pos, cType, markFor, id) -- wrapper function to just display coordinates of a specific format at location - - - --end - + --[[ + function mist.marker.circle(v) + + + end +]] end --- Time conversion functions. -- @section mist.time @@ -8123,6 +8134,16 @@ do -- group tasks scope return leader:getPosition().p end end + + function mist.groupIsDead(groupName) -- copy more or less from on station + if Group.getByName(groupName) then + local gp = Group.getByName(groupName) + if #gp:getUnits() > 0 or gp:isExist() == true then + return false + end + end + return true + end end @@ -8242,7 +8263,6 @@ do -- mist.Logger scope -- @usage -- log everything --myLogger:setLevel(3) function mist.Logger:setLevel(level) - env.info('set Level ' .. level) if not level then self.level = 2 else diff --git a/mist_4_5_100.lua b/mist_4_5_101.lua similarity index 99% rename from mist_4_5_100.lua rename to mist_4_5_101.lua index f4b65ca..0d68b29 100644 --- a/mist_4_5_100.lua +++ b/mist_4_5_101.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 100 +mist.build = 101 -- forward declaration of log shorthand local log @@ -79,7 +79,7 @@ do -- the main scope local function initDBs() -- mist.DBs scope mist.DBs = {} - + mist.DBs.markList = {} mist.DBs.missionData = {} if env.mission then @@ -5030,7 +5030,7 @@ do -- mist.debug scope if type(sVal) == 'string' or type(sVal) == 'number' then if sName == 'log' then mistSettings[sName] = sVal - log:setLevel(sVal) + mist.log:setLevel(sVal) elseif sName == 'dbLog' then mistSettings[sName] = sVal dblog:setLevel(sVal) @@ -5229,7 +5229,8 @@ do -- mist.debug scope else trigger.action.outText('Error: insufficient libraries to run mist.debug.writeTypes, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua \n writeTypes table written to DCS.log file instead.', 10) log:warn('mist.debug.writeTypes: $1', output) - end + end + return output end -- write CLSIDs -- write livery names @@ -6692,6 +6693,8 @@ do -- mist.demos scope end + + do --[[ stuff for marker panels marker.add() add marker. Point of these functions is to simplify process and to store all mark panels added. @@ -6787,7 +6790,7 @@ do end mist.marker = {} - mist.marker.list = {} + local function markSpamFilter(recList, spamBlockOn) for id, name in pairs(recList) do @@ -6851,42 +6854,47 @@ do function handle:onEvent(e) if world.event.S_EVENT_MARK_ADDED == e.id and e.idx then usedMarks[e.idx] = e.idx - if not mist.marker.list[e.idx] then + if not mist.DBs.markList[e.idx] then --log:info('create maker DB: $1', e.idx) - mist.marker.list[e.idx] = {time = e.time, pos = e.pos, groupId = e.groupId, mType = 'panel', text = e.text, markId = e.idx, coalition = e.coalition} + mist.DBs.markList[e.idx] = {time = e.time, pos = e.pos, groupId = e.groupId, mType = 'panel', text = e.text, markId = e.idx, coalition = e.coalition} if e.unit then - mist.marker.list[e.idx].unit = e.initiaor:getName() + mist.DBs.markList[e.idx].unit = e.initiaor:getName() end --log:info(mist.marker.list[e.idx]) end elseif world.event.S_EVENT_MARK_CHANGE == e.id and e.idx then - if mist.marker.list[e.idx] then - mist.marker.list[e.idx].text = e.text + if mist.DBs.markList[e.idx] then + mist.DBs.markList[e.idx].text = e.text end elseif world.event.S_EVENT_MARK_REMOVE == e.id and e.idx then - if mist.marker.list[e.idx] then - mist.marker.list[e.idx] = nil + if mist.DBs.markList[e.idx] then + mist.DBs.markList[e.idx] = nil end end end local function removeMark(id) - --log:info("Removing Mark: $1", id) + --log:info("Removing Mark: $1", id + local removed = false if type(id) == 'table' then for ind, val in pairs(id) do trigger.action.removeMark(val) - mist.marker.list[val] = nil + mist.DBs.markList[val] = nil + removed = true end else trigger.action.removeMark(id) - mist.marker.list[id] = nil + mist.DBs.markList[id] = nil + removed = true end + return removed end world.addEventHandler(handle) function mist.marker.setDefault(vars) + local anyChange = false if vars and type(vars) == 'table' then for l1, l1Data in pairs(vars) do if type(l1Data) == 'table' then @@ -6896,13 +6904,16 @@ do for l2, l2Data in pairs(l1Data) do userDefs[l1][l2] = l2Data + anyChange = true end else userDefs[l1] = l1Data + anyChange = true end end end + return anyChange end function mist.marker.add(vars) @@ -6913,7 +6924,7 @@ do local markFor = vars.markFor local markForCoa = vars.markForCoa -- optional, can be used if you just want to mark to a specific coa/all local id = vars.id or vars.markId or vars.markid - local mType = vars.mType or 0 + local mType = vars.mType or vars.markType or vars.type or 0 local color = vars.color local fillColor = vars.fillColor local lineType = vars.lineType or 2 @@ -6943,9 +6954,9 @@ do ]] local lId = id or name - if mist.marker.list[id] then ---------- NEED A BETTER WAY TO ASSOCIATE THE ID VALUE. CUrrnetly deleting from table and checking if that deleted entry exists which it wont. + if mist.DBs.markList[id] then ---------- NEED A BETTER WAY TO ASSOCIATE THE ID VALUE. CUrrnetly deleting from table and checking if that deleted entry exists which it wont. --log:warn('active mark to be removed: $1', id) - name = mist.marker.list[id].name or id + name = mist.DBs.markList[id].name or id removeMark(id) elseif usedMarks[id] then --log:info('exists in usedMarks: $1', id) @@ -6958,13 +6969,12 @@ do usedMarks[id] = usedId -- redefine the value used end if name then - if usedId == 0 then - usedId = iterate() - end usedMarks[name] = usedId end - + if usedId == 0 then + usedId = iterate() + end if mType then if type(mType) == 'string' then for i = 1, #tNames do @@ -7112,7 +7122,7 @@ do if markScope ~= 'table' then -- create marks - mist.marker.list[usedId] = data-- add to the DB + mist.DBs.markList[usedId] = data-- add to the DB else if #markForTable > 0 then @@ -7124,7 +7134,7 @@ do for i = 1, #markForTable do local newId = iterate() local data = {markId = newId, text = text, pos = pos[i], markFor = markForTable[i], markType = 'panel', name = name, readOnly = readOnly, time = timer.getTime()} - mist.marker.list[newId] = data + mist.DBs.markList[newId] = data table.insert(list, data) draw(data) @@ -7184,7 +7194,7 @@ do fCal[#fCal+1] = message local data = {coa = coa, markId = usedId, pos = pos, markFor = markFor, color = color, readOnly = readOnly, message = message, fillColor = fillColor, lineType = lineType, markType = tNames[mType], name = name, radius = radius, text = text, fontSize = fontSize, time = timer.getTime()} - mist.marker.list[usedId] = data + mist.DBs.markList[usedId] = data if mType == 7 or mType == 1 then local s = "trigger.action.markupToAll(" @@ -7219,29 +7229,30 @@ do end function mist.marker.remove(id) - removeMark(id) + return removeMark(id) end function mist.marker.get(id) - if mist.marker.lis[id] then - return mist.marker.lis[id] + if mist.DBs.markList[id] then + return mist.DBs.markList[id] end local names = {} - for markId, data in pairs(mist.marker.list) do + for markId, data in pairs(mist.DBs.markList) do if data.name and data.name == id then table.insert(names, data) end end - if #names > 0 then + if #names > 1 then return names end end - --function mist.marker.coords(pos, cType, markFor, id) -- wrapper function to just display coordinates of a specific format at location - - - --end - + --[[ + function mist.marker.circle(v) + + + end +]] end --- Time conversion functions. -- @section mist.time @@ -8123,6 +8134,16 @@ do -- group tasks scope return leader:getPosition().p end end + + function mist.groupIsDead(groupName) -- copy more or less from on station + if Group.getByName(groupName) then + local gp = Group.getByName(groupName) + if #gp:getUnits() > 0 or gp:isExist() == true then + return false + end + end + return true + end end @@ -8242,7 +8263,6 @@ do -- mist.Logger scope -- @usage -- log everything --myLogger:setLevel(3) function mist.Logger:setLevel(level) - env.info('set Level ' .. level) if not level then self.level = 2 else From 20f49ee454d8857d6ee190ae7dbf38a175fb34fa Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Tue, 7 Sep 2021 04:59:23 -0600 Subject: [PATCH 13/16] Build 102 Fixed: bug with mist.getLeadingPos where the position appeared to be reversed from what it was expecting Added: mist.marker.drawZone. This function is a quick and easy way to render trigger zones on the F10 map. Modified: mist.marker.add to also accept coa as variable name for markForCoa Modified: mist.marker.add to accept number value for markForCoa WIP: Updates to message display code. Currently commented out. --- mist.lua | 167 +++++++++++++++++++++++++-- mist_4_5_101.lua => mist_4_5_102.lua | 167 +++++++++++++++++++++++++-- 2 files changed, 314 insertions(+), 20 deletions(-) rename mist_4_5_101.lua => mist_4_5_102.lua (98%) diff --git a/mist.lua b/mist.lua index 0d68b29..1e5146a 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 101 +mist.build = 102 -- forward declaration of log shorthand local log @@ -3139,10 +3139,11 @@ function mist.getLeadingPos(vars) 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 - + heading = heading * -1 -- rotated value appears to be opposite of what was expected local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = for i = 1, #unitPosTbl do local rotatedVec2 = mist.vec.rotateVec2(mist.utils.makeVec2(unitPosTbl[i]), heading) @@ -5135,6 +5136,9 @@ do -- mist.debug scope end end end + + + -- write all object types in mission. function mist.debug.writeTypes(fName) local wt = 'mistDebugWriteTypes.lua' @@ -5986,15 +5990,130 @@ do -- mist.msg scope end end end - +--[[ local function mistdisplayV5() - --[[thoughts to improve upon - event handler based activeClients table. - display messages only when there is an update - possibly co-routine it. - ]] - end + --thoughts to improve upon + --event handler based activeClients table. + --display messages only when there is an update + --possibly co-routine it. + + + + local activeClients = {} + for clientId, clientData in pairs(mist.DBs.humansById) do + if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then + activeClients[clientData.groupId] = clientData.groupName + end + end + + --[f caSlots == true and caMSGtoGroup == true then + + --end + + + if #messageList > 0 then + if displayActive == false then + displayActive = true + end + --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') + local msgTableText = {} + local msgTableSound = {} + + for messageId, messageData in pairs(messageList) do + if messageData.displayedFor > messageData.displayTime then + messageData:remove() -- now using the remove/destroy function. + else + if messageData.displayedFor then + messageData.displayedFor = messageData.displayedFor + messageDisplayRate + end + local nextSound = 1000 + local soundIndex = 0 + + if messageData.multSound and #messageData.multSound > 0 then + for index, sData in pairs(messageData.multSound) do + if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played + nextSound = sData.time + soundIndex = index + end + end + if soundIndex ~= 0 then + messageData.multSound[soundIndex].played = true + end + end + + for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants + if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists + if messageData.text and messageData.update then -- text + if not msgTableText[recData] then -- create table entry for text + msgTableText[recData] = {} + msgTableText[recData].text = {} + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else -- add to table entry and adjust display time if needed + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' + else + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else + msgTableText[recData].displayTime = 1 + end + end + end + if soundIndex ~= 0 then + msgTableSound[recData] = messageData.multSound[soundIndex].file + end + end + + end + messageData.update = nil + + end + end + ------- new display + + if caSlots == true and caMSGtoGroup == false then + if msgTableText.RED then + trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText.RED.text), msgTableText.RED.displayTime, true) + + end + if msgTableText.BLUE then + trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText.BLUE.text), msgTableText.BLUE.displayTime, true) + end + end + + for index, msgData in pairs(msgTableText) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, true) + end + end + --- new audio + if msgTableSound.RED then + trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound.RED) + end + if msgTableSound.BLUE then + trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound.BLUE) + end + + + for index, file in pairs(msgTableSound) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outSoundForGroup(index, file) + end + end + else + mist.removeFunction(displayFuncId) + displayActive = false + end + end +]] local function mistdisplayV4() local activeClients = {} @@ -6922,7 +7041,7 @@ do local pos = vars.point or vars.points or vars.pos local text = vars.text or '' local markFor = vars.markFor - local markForCoa = vars.markForCoa -- optional, can be used if you just want to mark to a specific coa/all + local markForCoa = vars.markForCoa or vars.coa -- optional, can be used if you just want to mark to a specific coa/all local id = vars.id or vars.markId or vars.markid local mType = vars.mType or vars.markType or vars.type or 0 local color = vars.color @@ -7021,6 +7140,9 @@ do end end end + elseif type(markForCoa) == 'number' and markForCoa >=-1 and markForCoa <= #coas then + coa = markForCoa + markScore = 'coa' end @@ -7247,6 +7369,31 @@ do end end + function mist.marker.drawZone(name, v) + if mist.DBs.zonesByName[name] then + --log:warn(mist.DBs.zonesByName[name]) + local vars = v or {} + local ref = mist.utils.deepCopy(mist.DBs.zonesByName[name]) + + if ref.type == 2 then -- it is a quad, but use freeform cause it isnt as bugged + vars.mType = 6 + vars.point = ref.verticies + else + vars.mType = 2 + vars.radius = ref.radius + vars.point = ref.point + end + + + if not (vars.ignoreColor and vars.ignoreColor == true) and not vars.fillColor then + vars.fillColor = ref.color + end + + --log:warn(vars) + return mist.marker.add(vars) + end + + end --[[ function mist.marker.circle(v) diff --git a/mist_4_5_101.lua b/mist_4_5_102.lua similarity index 98% rename from mist_4_5_101.lua rename to mist_4_5_102.lua index 0d68b29..1e5146a 100644 --- a/mist_4_5_101.lua +++ b/mist_4_5_102.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 101 +mist.build = 102 -- forward declaration of log shorthand local log @@ -3139,10 +3139,11 @@ function mist.getLeadingPos(vars) 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 - + heading = heading * -1 -- rotated value appears to be opposite of what was expected local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = for i = 1, #unitPosTbl do local rotatedVec2 = mist.vec.rotateVec2(mist.utils.makeVec2(unitPosTbl[i]), heading) @@ -5135,6 +5136,9 @@ do -- mist.debug scope end end end + + + -- write all object types in mission. function mist.debug.writeTypes(fName) local wt = 'mistDebugWriteTypes.lua' @@ -5986,15 +5990,130 @@ do -- mist.msg scope end end end - +--[[ local function mistdisplayV5() - --[[thoughts to improve upon - event handler based activeClients table. - display messages only when there is an update - possibly co-routine it. - ]] - end + --thoughts to improve upon + --event handler based activeClients table. + --display messages only when there is an update + --possibly co-routine it. + + + + local activeClients = {} + for clientId, clientData in pairs(mist.DBs.humansById) do + if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then + activeClients[clientData.groupId] = clientData.groupName + end + end + + --[f caSlots == true and caMSGtoGroup == true then + + --end + + + if #messageList > 0 then + if displayActive == false then + displayActive = true + end + --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') + local msgTableText = {} + local msgTableSound = {} + + for messageId, messageData in pairs(messageList) do + if messageData.displayedFor > messageData.displayTime then + messageData:remove() -- now using the remove/destroy function. + else + if messageData.displayedFor then + messageData.displayedFor = messageData.displayedFor + messageDisplayRate + end + local nextSound = 1000 + local soundIndex = 0 + + if messageData.multSound and #messageData.multSound > 0 then + for index, sData in pairs(messageData.multSound) do + if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played + nextSound = sData.time + soundIndex = index + end + end + if soundIndex ~= 0 then + messageData.multSound[soundIndex].played = true + end + end + + for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants + if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists + if messageData.text and messageData.update then -- text + if not msgTableText[recData] then -- create table entry for text + msgTableText[recData] = {} + msgTableText[recData].text = {} + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else -- add to table entry and adjust display time if needed + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' + else + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else + msgTableText[recData].displayTime = 1 + end + end + end + if soundIndex ~= 0 then + msgTableSound[recData] = messageData.multSound[soundIndex].file + end + end + + end + messageData.update = nil + + end + end + ------- new display + + if caSlots == true and caMSGtoGroup == false then + if msgTableText.RED then + trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText.RED.text), msgTableText.RED.displayTime, true) + + end + if msgTableText.BLUE then + trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText.BLUE.text), msgTableText.BLUE.displayTime, true) + end + end + + for index, msgData in pairs(msgTableText) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, true) + end + end + --- new audio + if msgTableSound.RED then + trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound.RED) + end + if msgTableSound.BLUE then + trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound.BLUE) + end + + + for index, file in pairs(msgTableSound) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outSoundForGroup(index, file) + end + end + else + mist.removeFunction(displayFuncId) + displayActive = false + end + end +]] local function mistdisplayV4() local activeClients = {} @@ -6922,7 +7041,7 @@ do local pos = vars.point or vars.points or vars.pos local text = vars.text or '' local markFor = vars.markFor - local markForCoa = vars.markForCoa -- optional, can be used if you just want to mark to a specific coa/all + local markForCoa = vars.markForCoa or vars.coa -- optional, can be used if you just want to mark to a specific coa/all local id = vars.id or vars.markId or vars.markid local mType = vars.mType or vars.markType or vars.type or 0 local color = vars.color @@ -7021,6 +7140,9 @@ do end end end + elseif type(markForCoa) == 'number' and markForCoa >=-1 and markForCoa <= #coas then + coa = markForCoa + markScore = 'coa' end @@ -7247,6 +7369,31 @@ do end end + function mist.marker.drawZone(name, v) + if mist.DBs.zonesByName[name] then + --log:warn(mist.DBs.zonesByName[name]) + local vars = v or {} + local ref = mist.utils.deepCopy(mist.DBs.zonesByName[name]) + + if ref.type == 2 then -- it is a quad, but use freeform cause it isnt as bugged + vars.mType = 6 + vars.point = ref.verticies + else + vars.mType = 2 + vars.radius = ref.radius + vars.point = ref.point + end + + + if not (vars.ignoreColor and vars.ignoreColor == true) and not vars.fillColor then + vars.fillColor = ref.color + end + + --log:warn(vars) + return mist.marker.add(vars) + end + + end --[[ function mist.marker.circle(v) From f657c5d5a6436ac8687f53be73a17e12fd47eb05 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Wed, 6 Oct 2021 20:51:33 -0600 Subject: [PATCH 14/16] Shape Functions and linkUnit Added linkUnit value to DB for statics added shape functions insideShape circleInCircle circleInPoly polyInPoly polyInCircle -Added error handling for get2DDist and get3DDist if a value is missing. --- mist.lua | 146 +++++++++++++++++++++++++-- mist_4_5_102.lua => mist_4_5_103.lua | 146 +++++++++++++++++++++++++-- 2 files changed, 278 insertions(+), 14 deletions(-) rename mist_4_5_102.lua => mist_4_5_103.lua (98%) diff --git a/mist.lua b/mist.lua index 1e5146a..e10f0d1 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 102 +mist.build = 103 -- forward declaration of log shorthand local log @@ -253,6 +253,7 @@ do -- the main scope if category == 'static' then units_tbl[unit_num].categoryStatic = unit_data.category units_tbl[unit_num].shape_name = unit_data.shape_name + units_tbl[unit_num].linkUnit = unit_data.linkUnit if unit_data.mass then units_tbl[unit_num].mass = unit_data.mass end @@ -836,6 +837,8 @@ do -- the main scope newTable.units[1].canCargo = data.canCargo newTable.units[1].categoryStatic = data.categoryStatic newTable.units[1].type = data.type + newTable.units[1].linkUnit = data.linkUnit + mistAddedObjects[index] = nil break end @@ -2780,6 +2783,114 @@ function mist.getDeadMapObjsInPolygonZone(zone) end return map_objs end +mist.shape = {} +function mist.shape.insideShape(shape1, shape2, full) + if shape1.radius then -- probably a circle + if shape2.radius then + return mist.shape.circleInCircle(shape1, shape2, full) + elseif shape2[1] then + return mist.shape.circleInPoly(shape1, shape2, full) + end + + elseif shape1[1] then -- shape1 is probably a polygon + if shape2.radius then + return mist.shape.polyInCircle(shape1, shape2, full) + elseif shape2[1] then + return mist.shape.polyInPoly(shape1, shape2, full) + end + end + return false +end + +function mist.shape.circleInCircle(c1, c2, full) + if not full then -- quick partial check + if mist.utils.get2DDist(c1.point, c2.point) <= c2.radius then + return true + end + end + local theta = mist.utils.getHeadingPoints(c2.point, c1.point) -- heading from + if full then + return mist.utils.get2DDist(mist.projectPoint(c1.point, c1.radius, theta), c2.point) <= c2.radius + else + return mist.utils.get2DDist(mist.projectPoint(c1.point, c1.radius, theta + math.pi), c2.point) <= c2.radius + end + return false +end + + +function mist.shape.circleInPoly(circle, poly, full) + + if poly and type(poly) == 'table' and circle and type(circle) == 'table' and circle.radius and circle.point then + if not full then + for i = 1, #poly do + if mist.utils.get2DDist(circle.point, poly[i]) <= circle.radius then + return true + end + end + end + -- no point is inside of the zone, now check if any part is + local count = 0 + for i = 1, #poly do + local theta -- heading of each set of points + if i == #poly then + theta = mist.utils.getHeadingPoints(poly[i],poly[1]) + else + theta = mist.utils.getHeadingPoints(poly[i],poly[i+1]) + end + -- offset + local pPoint = mist.projectPoint(circle.point, circle.radius, theta - (math.pi/180)) + local oPoint = mist.projectPoint(circle.point, circle.radius, theta + (math.pi/180)) + + + if mist.pointInPolygon(pPoint, poly) == true then + if (full and mist.pointInPolygon(oPoint, poly) == true) or not full then + return true + + end + + end + end + + end + return false +end + + +function mist.shape.polyInPoly(p1, p2, full) + local count = 0 + for i = 1, #p1 do + + if mist.pointInPolygon(p1[i], p2) then + count = count + 1 + end + if (not full) and count > 0 then + return true + end + end + if count == #p1 then + return true + end + + return false +end + +function mist.shape.polyInCircle(poly, circle, full) + local count = 0 + for i = 1, #poly do + if mist.utils.get2DDist(circle.point, poly[i]) <= circle.radius then + if full then + count = count + 1 + else + return true + end + end + end + if count == #poly then + return true + end + + return false +end function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. Code from http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm --[[local type_tbl = { @@ -2867,7 +2978,7 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) for k = 1, #zone_names do local zone = mist.DBs.zonesByName[zone_names[k]] if zone then - zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z, verts = zone.vertices} + zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z, verts = zone.verticies} end end @@ -3014,7 +3125,8 @@ end function mist.getAvgPoint(points) local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 for i = 1, #points do - local nPoint = mist.utils.makeVec3(points[i]) + --log:warn(points[i]) + local nPoint = mist.utils.makeVec3(points[i]) if nPoint.z then avgX = avgX + nPoint.x avgY = avgY + nPoint.y @@ -4585,6 +4697,12 @@ do -- mist.util scope -- @tparam Vec2|Vec3 point2 second point -- @treturn number distance between given points. function mist.utils.get2DDist(point1, point2) + if not point1 then + log:warn("mist.utils.get2DDist 1st input value is nil") + end + if not point2 then + log:warn("mist.utils.get2DDist 2nd input value is nil") + end point1 = mist.utils.makeVec3(point1) point2 = mist.utils.makeVec3(point2) return mist.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) @@ -4595,6 +4713,12 @@ do -- mist.util scope -- @tparam Vec3 point2 second point -- @treturn number distancen between given points in 3D space. function mist.utils.get3DDist(point1, point2) + if not point1 then + log:warn("mist.utils.get2DDist 1st input value is nil") + end + if not point2 then + log:warn("mist.utils.get2DDist 2nd input value is nil") + end return mist.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) end @@ -5236,8 +5360,15 @@ do -- mist.debug scope end return output end - -- write CLSIDs - -- write livery names + function mist.debug.writeWeapons(unit) + + end + + function mist.debug.mark(msg, coord) + + mist.marker.add({point = coord, text = msg}) + log:warn('debug.mark: $1 $2', msg, coord) + end end --- 3D Vector functions @@ -7392,8 +7523,9 @@ do --log:warn(vars) return mist.marker.add(vars) end - end + + --[[ function mist.marker.circle(v) @@ -8048,7 +8180,7 @@ do -- group tasks scope if type(zoneName) == 'string' then local zone = mist.DBs.zonesByName[zoneName] if zone.type and zone.type == 2 then - return mist.getRandomPointInPoly(zone.vertices) + return mist.getRandomPointInPoly(zone.verticies) else return mist.getRandPointInCircle(zone.point, zone.radius, innerRadius, maxA, minA) end diff --git a/mist_4_5_102.lua b/mist_4_5_103.lua similarity index 98% rename from mist_4_5_102.lua rename to mist_4_5_103.lua index 1e5146a..e10f0d1 100644 --- a/mist_4_5_102.lua +++ b/mist_4_5_103.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 102 +mist.build = 103 -- forward declaration of log shorthand local log @@ -253,6 +253,7 @@ do -- the main scope if category == 'static' then units_tbl[unit_num].categoryStatic = unit_data.category units_tbl[unit_num].shape_name = unit_data.shape_name + units_tbl[unit_num].linkUnit = unit_data.linkUnit if unit_data.mass then units_tbl[unit_num].mass = unit_data.mass end @@ -836,6 +837,8 @@ do -- the main scope newTable.units[1].canCargo = data.canCargo newTable.units[1].categoryStatic = data.categoryStatic newTable.units[1].type = data.type + newTable.units[1].linkUnit = data.linkUnit + mistAddedObjects[index] = nil break end @@ -2780,6 +2783,114 @@ function mist.getDeadMapObjsInPolygonZone(zone) end return map_objs end +mist.shape = {} +function mist.shape.insideShape(shape1, shape2, full) + if shape1.radius then -- probably a circle + if shape2.radius then + return mist.shape.circleInCircle(shape1, shape2, full) + elseif shape2[1] then + return mist.shape.circleInPoly(shape1, shape2, full) + end + + elseif shape1[1] then -- shape1 is probably a polygon + if shape2.radius then + return mist.shape.polyInCircle(shape1, shape2, full) + elseif shape2[1] then + return mist.shape.polyInPoly(shape1, shape2, full) + end + end + return false +end + +function mist.shape.circleInCircle(c1, c2, full) + if not full then -- quick partial check + if mist.utils.get2DDist(c1.point, c2.point) <= c2.radius then + return true + end + end + local theta = mist.utils.getHeadingPoints(c2.point, c1.point) -- heading from + if full then + return mist.utils.get2DDist(mist.projectPoint(c1.point, c1.radius, theta), c2.point) <= c2.radius + else + return mist.utils.get2DDist(mist.projectPoint(c1.point, c1.radius, theta + math.pi), c2.point) <= c2.radius + end + return false +end + + +function mist.shape.circleInPoly(circle, poly, full) + + if poly and type(poly) == 'table' and circle and type(circle) == 'table' and circle.radius and circle.point then + if not full then + for i = 1, #poly do + if mist.utils.get2DDist(circle.point, poly[i]) <= circle.radius then + return true + end + end + end + -- no point is inside of the zone, now check if any part is + local count = 0 + for i = 1, #poly do + local theta -- heading of each set of points + if i == #poly then + theta = mist.utils.getHeadingPoints(poly[i],poly[1]) + else + theta = mist.utils.getHeadingPoints(poly[i],poly[i+1]) + end + -- offset + local pPoint = mist.projectPoint(circle.point, circle.radius, theta - (math.pi/180)) + local oPoint = mist.projectPoint(circle.point, circle.radius, theta + (math.pi/180)) + + + if mist.pointInPolygon(pPoint, poly) == true then + if (full and mist.pointInPolygon(oPoint, poly) == true) or not full then + return true + + end + + end + end + + end + return false +end + + +function mist.shape.polyInPoly(p1, p2, full) + local count = 0 + for i = 1, #p1 do + + if mist.pointInPolygon(p1[i], p2) then + count = count + 1 + end + if (not full) and count > 0 then + return true + end + end + if count == #p1 then + return true + end + + return false +end + +function mist.shape.polyInCircle(poly, circle, full) + local count = 0 + for i = 1, #poly do + if mist.utils.get2DDist(circle.point, poly[i]) <= circle.radius then + if full then + count = count + 1 + else + return true + end + end + end + if count == #poly then + return true + end + + return false +end function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. Code from http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm --[[local type_tbl = { @@ -2867,7 +2978,7 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) for k = 1, #zone_names do local zone = mist.DBs.zonesByName[zone_names[k]] if zone then - zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z, verts = zone.vertices} + zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z, verts = zone.verticies} end end @@ -3014,7 +3125,8 @@ end function mist.getAvgPoint(points) local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 for i = 1, #points do - local nPoint = mist.utils.makeVec3(points[i]) + --log:warn(points[i]) + local nPoint = mist.utils.makeVec3(points[i]) if nPoint.z then avgX = avgX + nPoint.x avgY = avgY + nPoint.y @@ -4585,6 +4697,12 @@ do -- mist.util scope -- @tparam Vec2|Vec3 point2 second point -- @treturn number distance between given points. function mist.utils.get2DDist(point1, point2) + if not point1 then + log:warn("mist.utils.get2DDist 1st input value is nil") + end + if not point2 then + log:warn("mist.utils.get2DDist 2nd input value is nil") + end point1 = mist.utils.makeVec3(point1) point2 = mist.utils.makeVec3(point2) return mist.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) @@ -4595,6 +4713,12 @@ do -- mist.util scope -- @tparam Vec3 point2 second point -- @treturn number distancen between given points in 3D space. function mist.utils.get3DDist(point1, point2) + if not point1 then + log:warn("mist.utils.get2DDist 1st input value is nil") + end + if not point2 then + log:warn("mist.utils.get2DDist 2nd input value is nil") + end return mist.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) end @@ -5236,8 +5360,15 @@ do -- mist.debug scope end return output end - -- write CLSIDs - -- write livery names + function mist.debug.writeWeapons(unit) + + end + + function mist.debug.mark(msg, coord) + + mist.marker.add({point = coord, text = msg}) + log:warn('debug.mark: $1 $2', msg, coord) + end end --- 3D Vector functions @@ -7392,8 +7523,9 @@ do --log:warn(vars) return mist.marker.add(vars) end - end + + --[[ function mist.marker.circle(v) @@ -8048,7 +8180,7 @@ do -- group tasks scope if type(zoneName) == 'string' then local zone = mist.DBs.zonesByName[zoneName] if zone.type and zone.type == 2 then - return mist.getRandomPointInPoly(zone.vertices) + return mist.getRandomPointInPoly(zone.verticies) else return mist.getRandPointInCircle(zone.point, zone.radius, innerRadius, maxA, minA) end From d1e57e4107afe10a4ae67eeec76871dd2460c3d6 Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Mon, 17 Jan 2022 02:24:39 -0700 Subject: [PATCH 15/16] Hotfix some bugs Fixed: verifyDB to check for empty string from static objects because it apparently can happen. Fixed: checkSpawnedEventsNew to better handle errors from dbUpdate Fixed: getUnitsInPolygon was erroneously checking for category 14 instead of 1 Fixed: getUNitsInZones had an incorrectly named variable that defined an entry as nil. --- mist.lua | 28 +++++++++++++++++----------- mist_4_5_103.lua => mist_4_5_104.lua | 28 +++++++++++++++++----------- 2 files changed, 34 insertions(+), 22 deletions(-) rename mist_4_5_103.lua => mist_4_5_104.lua (99%) diff --git a/mist.lua b/mist.lua index e10f0d1..3302d7f 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 103 +mist.build = 104 -- forward declaration of log shorthand local log @@ -927,7 +927,10 @@ do -- the main scope if stillExists == true and (updated == true or not mist.DBs.groupsByName[name]) then --dbLog:info('Get Table') - writeGroups[#writeGroups+1] = {data = dbUpdate(name, gData.type), isUpdated = updated} + local dbData = dbUpdate(name, gData.type) + if dbData and type(dbData) == 'table' then + writeGroups[#writeGroups+1] = {data = dbData, isUpdated = updated} + end end -- Work done, so remove @@ -935,7 +938,7 @@ do -- the main scope tempSpawnedGroups[name] = nil tempSpawnGroupsCounter = tempSpawnGroupsCounter - 1 end - end + end end local function updateDBTables() @@ -1226,12 +1229,15 @@ do -- the main scope for i = 1, #st do local s = st[i] if StaticObject.isExist(s) then - if not mist.DBs.unitsByName[s:getName()] then - --env.info(StaticObject.getID(s) .. ' Not found in DB yet') - tempSpawnedGroups[s:getName()] = {type = 'static'} - tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 - end - end + local name = s:getName() + if not mist.DBs.unitsByName[name] then + dbLog:warn('$1 Not found in DB yet. ID: $2', name, StaticObject.getID(s)) + if string.len(name) > 0 then -- because in this mission someone sent the name was returning as an empty string. Gotta be careful. + tempSpawnedGroups[s:getName()] = {type = 'static'} + tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 + end + end + end end end @@ -2941,7 +2947,7 @@ function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) for i =1, #units do local lUnit = units[i] local lCat = lUnit:getCategory() - if ((lCat == 14 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then + if ((lCat == 1 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then inZoneUnits[#inZoneUnits + 1] = lUnit end end @@ -2964,7 +2970,7 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local zones = {} if zone_names and type(zone_names) == 'string' then - zone_names = {zoneNames} + zone_names = {zone_names} end for k = 1, #unit_names do diff --git a/mist_4_5_103.lua b/mist_4_5_104.lua similarity index 99% rename from mist_4_5_103.lua rename to mist_4_5_104.lua index e10f0d1..3302d7f 100644 --- a/mist_4_5_103.lua +++ b/mist_4_5_104.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 103 +mist.build = 104 -- forward declaration of log shorthand local log @@ -927,7 +927,10 @@ do -- the main scope if stillExists == true and (updated == true or not mist.DBs.groupsByName[name]) then --dbLog:info('Get Table') - writeGroups[#writeGroups+1] = {data = dbUpdate(name, gData.type), isUpdated = updated} + local dbData = dbUpdate(name, gData.type) + if dbData and type(dbData) == 'table' then + writeGroups[#writeGroups+1] = {data = dbData, isUpdated = updated} + end end -- Work done, so remove @@ -935,7 +938,7 @@ do -- the main scope tempSpawnedGroups[name] = nil tempSpawnGroupsCounter = tempSpawnGroupsCounter - 1 end - end + end end local function updateDBTables() @@ -1226,12 +1229,15 @@ do -- the main scope for i = 1, #st do local s = st[i] if StaticObject.isExist(s) then - if not mist.DBs.unitsByName[s:getName()] then - --env.info(StaticObject.getID(s) .. ' Not found in DB yet') - tempSpawnedGroups[s:getName()] = {type = 'static'} - tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 - end - end + local name = s:getName() + if not mist.DBs.unitsByName[name] then + dbLog:warn('$1 Not found in DB yet. ID: $2', name, StaticObject.getID(s)) + if string.len(name) > 0 then -- because in this mission someone sent the name was returning as an empty string. Gotta be careful. + tempSpawnedGroups[s:getName()] = {type = 'static'} + tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 + end + end + end end end @@ -2941,7 +2947,7 @@ function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) for i =1, #units do local lUnit = units[i] local lCat = lUnit:getCategory() - if ((lCat == 14 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then + if ((lCat == 1 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then inZoneUnits[#inZoneUnits + 1] = lUnit end end @@ -2964,7 +2970,7 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local zones = {} if zone_names and type(zone_names) == 'string' then - zone_names = {zoneNames} + zone_names = {zone_names} end for k = 1, #unit_names do From 45fd759aaee3ae95a4ef8ec01c9386aa1d54833a Mon Sep 17 00:00:00 2001 From: mrSkortch Date: Fri, 11 Feb 2022 01:58:17 -0700 Subject: [PATCH 16/16] Build 106 - Added mist.DBs.drawingsByName and mist.DBs.drawingIndexed. They are a table of points -Added new callsigns to mist.DBs.const.callsigns -Added mist.marker.drawShape. mist.shape.getPointOnSegment -Added mist.shape.segmentInsersect -Added mist.mapValue -Added mist.utils.hexToRGB -Added mist.getWindBearingAndVel -Updated mist.messages to only display a message if the messages has been updated. This should prevent spamming the message log. Fixed: Bug with mist.marker.add() associated with text boxes Fixed: Zone radius value of verticies present Updated: DB Sample Files --- Example DBs/mist_DBs_MEgroupsById.lua | 60 +- Example DBs/mist_DBs_MEgroupsByName.lua | 60 +- Example DBs/mist_DBs_MEunits.lua | 68 +- Example DBs/mist_DBs_MEunitsByCat.lua | 60 +- Example DBs/mist_DBs_MEunitsById.lua | 60 +- Example DBs/mist_DBs_MEunitsByName.lua | 60 +- Example DBs/mist_DBs_MEunitsByNum.lua | 60 +- Example DBs/mist_DBs_aliveUnits.lua | 1701 ++++++++++---------- Example DBs/mist_DBs_const.lua | 204 ++- Example DBs/mist_DBs_deadObjects.lua | 220 +-- Example DBs/mist_DBs_drawingByName.lua | 232 +++ Example DBs/mist_DBs_drawingIndexed.lua | 266 +++ Example DBs/mist_DBs_dynGroupsAdded.lua | 426 ++--- Example DBs/mist_DBs_groupsById.lua | 440 ++--- Example DBs/mist_DBs_groupsByName.lua | 494 +++--- Example DBs/mist_DBs_markList.lua | 8 +- Example DBs/mist_DBs_missionData.lua | 2 +- Example DBs/mist_DBs_removedAliveUnits.lua | 112 +- Example DBs/mist_DBs_units.lua | 486 +++--- Example DBs/mist_DBs_unitsByCat.lua | 494 +++--- Example DBs/mist_DBs_unitsById.lua | 494 +++--- Example DBs/mist_DBs_unitsByName.lua | 494 +++--- Example DBs/mist_DBs_unitsByNum.lua | 494 +++--- Example DBs/mist_DBs_zonesByName.lua | 207 ++- Example DBs/mist_DBs_zonesByNum.lua | 159 +- mist.lua | 654 ++++++-- mist_4_5_104.lua => mist_4_5_106.lua | 654 ++++++-- 27 files changed, 5010 insertions(+), 3659 deletions(-) create mode 100644 Example DBs/mist_DBs_drawingByName.lua create mode 100644 Example DBs/mist_DBs_drawingIndexed.lua rename mist_4_5_104.lua => mist_4_5_106.lua (93%) diff --git a/Example DBs/mist_DBs_MEgroupsById.lua b/Example DBs/mist_DBs_MEgroupsById.lua index 0dddf0b..575c69f 100644 --- a/Example DBs/mist_DBs_MEgroupsById.lua +++ b/Example DBs/mist_DBs_MEgroupsById.lua @@ -1414,25 +1414,25 @@ MEgroupsById = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] + ["unitId"] = 45, ["groupId"] = 31, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cargoBob", ["x"] = -292007.14285714, - ["y"] = 675199.99999999, + ["coalition"] = "blue", ["mass"] = 371, - ["unitId"] = 45, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", + ["y"] = 675199.99999999, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [1] }, -- end of ["units"] }, -- end of [31] @@ -1449,25 +1449,25 @@ MEgroupsById = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] + ["unitId"] = 46, ["groupId"] = 32, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["y"] = 674842.85714285, + ["coalition"] = "blue", ["mass"] = 1337, - ["unitId"] = 46, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", + ["y"] = 674842.85714285, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [1] }, -- end of ["units"] }, -- end of [32] @@ -1832,25 +1832,25 @@ MEgroupsById = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 41, + ["country"] = "usa", + ["unitId"] = 64, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.27295572, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["unitId"] = 64, + ["groupId"] = 41, + ["coalition"] = "blue", ["y"] = 443849.03844635, - ["countryId"] = 2, }, -- end of [1] }, -- end of ["units"] }, -- end of [41] @@ -2113,25 +2113,25 @@ MEgroupsById = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 40, + ["country"] = "usa", + ["unitId"] = 63, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.45423175, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1", - ["unitId"] = 63, + ["groupId"] = 40, + ["coalition"] = "blue", ["y"] = 443856.28948724, - ["countryId"] = 2, }, -- end of [1] }, -- end of ["units"] }, -- end of [40] diff --git a/Example DBs/mist_DBs_MEgroupsByName.lua b/Example DBs/mist_DBs_MEgroupsByName.lua index d015693..fc9196d 100644 --- a/Example DBs/mist_DBs_MEgroupsByName.lua +++ b/Example DBs/mist_DBs_MEgroupsByName.lua @@ -488,25 +488,25 @@ MEgroupsByName = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] + ["unitId"] = 46, ["groupId"] = 32, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["y"] = 674842.85714285, + ["coalition"] = "blue", ["mass"] = 1337, - ["unitId"] = 46, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", + ["y"] = 674842.85714285, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [1] }, -- end of ["units"] }, -- end of ["cloneCargoBase"] @@ -1052,25 +1052,25 @@ MEgroupsByName = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 41, + ["country"] = "usa", + ["unitId"] = 64, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.27295572, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["unitId"] = 64, + ["groupId"] = 41, + ["coalition"] = "blue", ["y"] = 443849.03844635, - ["countryId"] = 2, }, -- end of [1] }, -- end of ["units"] }, -- end of ["static_on_ship1 #001"] @@ -1086,25 +1086,25 @@ MEgroupsByName = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 40, + ["country"] = "usa", + ["unitId"] = 63, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.45423175, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1", - ["unitId"] = 63, + ["groupId"] = 40, + ["coalition"] = "blue", ["y"] = 443856.28948724, - ["countryId"] = 2, }, -- end of [1] }, -- end of ["units"] }, -- end of ["static_on_ship1"] @@ -1121,25 +1121,25 @@ MEgroupsByName = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] + ["unitId"] = 45, ["groupId"] = 31, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cargoBob", ["x"] = -292007.14285714, - ["y"] = 675199.99999999, + ["coalition"] = "blue", ["mass"] = 371, - ["unitId"] = 45, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", + ["y"] = 675199.99999999, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [1] }, -- end of ["units"] }, -- end of ["cargoBob"] diff --git a/Example DBs/mist_DBs_MEunits.lua b/Example DBs/mist_DBs_MEunits.lua index a3094e1..695c718 100644 --- a/Example DBs/mist_DBs_MEunits.lua +++ b/Example DBs/mist_DBs_MEunits.lua @@ -1311,25 +1311,25 @@ MEunits = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, ["unitId"] = 45, + ["groupName"] = "cargoBob", + ["countryId"] = 2, + ["y"] = 675199.99999999, + ["mass"] = 371, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", ["x"] = -292007.14285714, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 31, }, -- end of [1] }, -- end of ["units"] }, -- end of [4] @@ -1346,25 +1346,25 @@ MEunits = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 674842.85714285, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cloneCargoBase", - ["groupId"] = 32, - ["countryId"] = 2, - ["mass"] = 1337, ["unitId"] = 46, + ["groupName"] = "cloneCargoBase", + ["countryId"] = 2, + ["y"] = 674842.85714285, + ["mass"] = 1337, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 32, }, -- end of [1] }, -- end of ["units"] }, -- end of [5] @@ -1380,25 +1380,25 @@ MEunits = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443856.28948724, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443856.28948724, ["x"] = -355322.45423175, - ["unitId"] = 63, + ["groupId"] = 40, ["category"] = "static", ["unitName"] = "static_on_ship1", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 40, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 63, }, -- end of [1] }, -- end of ["units"] }, -- end of [6] @@ -1414,25 +1414,25 @@ MEunits = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443849.03844635, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443849.03844635, ["x"] = -355322.27295572, - ["unitId"] = 64, + ["groupId"] = 41, ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 41, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 64, }, -- end of [1] }, -- end of ["units"] }, -- end of [7] diff --git a/Example DBs/mist_DBs_MEunitsByCat.lua b/Example DBs/mist_DBs_MEunitsByCat.lua index 0c01469..598e45f 100644 --- a/Example DBs/mist_DBs_MEunitsByCat.lua +++ b/Example DBs/mist_DBs_MEunitsByCat.lua @@ -477,92 +477,92 @@ MEunitsByCat = [5] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] + ["unitId"] = 45, ["groupId"] = 31, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cargoBob", ["x"] = -292007.14285714, - ["y"] = 675199.99999999, + ["coalition"] = "blue", ["mass"] = 371, - ["unitId"] = 45, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", + ["y"] = 675199.99999999, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [5] [6] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] + ["unitId"] = 46, ["groupId"] = 32, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["y"] = 674842.85714285, + ["coalition"] = "blue", ["mass"] = 1337, - ["unitId"] = 46, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", + ["y"] = 674842.85714285, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [6] [7] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 40, + ["country"] = "usa", + ["unitId"] = 63, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.45423175, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1", - ["unitId"] = 63, + ["groupId"] = 40, + ["coalition"] = "blue", ["y"] = 443856.28948724, - ["countryId"] = 2, }, -- end of [7] [8] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 41, + ["country"] = "usa", + ["unitId"] = 64, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.27295572, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["unitId"] = 64, + ["groupId"] = 41, + ["coalition"] = "blue", ["y"] = 443849.03844635, - ["countryId"] = 2, }, -- end of [8] [9] = { diff --git a/Example DBs/mist_DBs_MEunitsById.lua b/Example DBs/mist_DBs_MEunitsById.lua index a74e7fb..50a85d5 100644 --- a/Example DBs/mist_DBs_MEunitsById.lua +++ b/Example DBs/mist_DBs_MEunitsById.lua @@ -1022,48 +1022,48 @@ MEunitsById = [45] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] + ["unitId"] = 45, ["groupId"] = 31, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cargoBob", ["x"] = -292007.14285714, - ["y"] = 675199.99999999, + ["coalition"] = "blue", ["mass"] = 371, - ["unitId"] = 45, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", + ["y"] = 675199.99999999, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [45] [46] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] + ["unitId"] = 46, ["groupId"] = 32, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["y"] = 674842.85714285, + ["coalition"] = "blue", ["mass"] = 1337, - ["unitId"] = 46, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", + ["y"] = 674842.85714285, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [46] [47] = { @@ -1454,47 +1454,47 @@ MEunitsById = }, -- end of [62] [63] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 40, + ["country"] = "usa", + ["unitId"] = 63, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.45423175, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1", - ["unitId"] = 63, + ["groupId"] = 40, + ["coalition"] = "blue", ["y"] = 443856.28948724, - ["countryId"] = 2, }, -- end of [63] [64] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 41, + ["country"] = "usa", + ["unitId"] = 64, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.27295572, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["unitId"] = 64, + ["groupId"] = 41, + ["coalition"] = "blue", ["y"] = 443849.03844635, - ["countryId"] = 2, }, -- end of [64] [65] = { diff --git a/Example DBs/mist_DBs_MEunitsByName.lua b/Example DBs/mist_DBs_MEunitsByName.lua index a488525..e4013f5 100644 --- a/Example DBs/mist_DBs_MEunitsByName.lua +++ b/Example DBs/mist_DBs_MEunitsByName.lua @@ -365,25 +365,25 @@ MEunitsByName = ["cloneCargoBase"] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] + ["unitId"] = 46, ["groupId"] = 32, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["y"] = 674842.85714285, + ["coalition"] = "blue", ["mass"] = 1337, - ["unitId"] = 46, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", + ["y"] = 674842.85714285, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of ["cloneCargoBase"] ["USTanks2_1"] = { @@ -512,25 +512,25 @@ MEunitsByName = }, -- end of ["Unit #006"] ["static_on_ship1"] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 40, + ["country"] = "usa", + ["unitId"] = 63, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.45423175, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1", - ["unitId"] = 63, + ["groupId"] = 40, + ["coalition"] = "blue", ["y"] = 443856.28948724, - ["countryId"] = 2, }, -- end of ["static_on_ship1"] ["tent"] = { @@ -1226,25 +1226,25 @@ MEunitsByName = }, -- end of ["Ground-1-1"] ["static_on_ship1 #001"] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 41, + ["country"] = "usa", + ["unitId"] = 64, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.27295572, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["unitId"] = 64, + ["groupId"] = 41, + ["coalition"] = "blue", ["y"] = 443849.03844635, - ["countryId"] = 2, }, -- end of ["static_on_ship1 #001"] ["RuTent1"] = { @@ -1643,25 +1643,25 @@ MEunitsByName = ["cargoBob"] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] + ["unitId"] = 45, ["groupId"] = 31, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cargoBob", ["x"] = -292007.14285714, - ["y"] = 675199.99999999, + ["coalition"] = "blue", ["mass"] = 371, - ["unitId"] = 45, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", + ["y"] = 675199.99999999, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of ["cargoBob"] ["USTanks2_4"] = { diff --git a/Example DBs/mist_DBs_MEunitsByNum.lua b/Example DBs/mist_DBs_MEunitsByNum.lua index e1bcc74..43f92ad 100644 --- a/Example DBs/mist_DBs_MEunitsByNum.lua +++ b/Example DBs/mist_DBs_MEunitsByNum.lua @@ -247,92 +247,92 @@ MEunitsByNum = [11] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] + ["unitId"] = 45, ["groupId"] = 31, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cargoBob", ["x"] = -292007.14285714, - ["y"] = 675199.99999999, + ["coalition"] = "blue", ["mass"] = 371, - ["unitId"] = 45, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", + ["y"] = 675199.99999999, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [11] [12] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] + ["unitId"] = 46, ["groupId"] = 32, - ["country"] = "usa", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["groupName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["y"] = 674842.85714285, + ["coalition"] = "blue", ["mass"] = 1337, - ["unitId"] = 46, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", + ["y"] = 674842.85714285, + ["country"] = "usa", ["countryId"] = 2, - ["categoryStatic"] = "Cargos", - ["coalition"] = "blue", }, -- end of [12] [13] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 40, + ["country"] = "usa", + ["unitId"] = 63, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.45423175, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1", - ["unitId"] = 63, + ["groupId"] = 40, + ["coalition"] = "blue", ["y"] = 443856.28948724, - ["countryId"] = 2, }, -- end of [13] [14] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["groupId"] = 41, + ["country"] = "usa", + ["unitId"] = 64, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["country"] = "usa", - ["coalition"] = "blue", + ["heading"] = 0, + ["countryId"] = 2, ["x"] = -355322.27295572, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["unitId"] = 64, + ["groupId"] = 41, + ["coalition"] = "blue", ["y"] = 443849.03844635, - ["countryId"] = 2, }, -- end of [14] [15] = { diff --git a/Example DBs/mist_DBs_aliveUnits.lua b/Example DBs/mist_DBs_aliveUnits.lua index 5f4628a..b846438 100644 --- a/Example DBs/mist_DBs_aliveUnits.lua +++ b/Example DBs/mist_DBs_aliveUnits.lua @@ -175,11 +175,11 @@ aliveUnits = }, -- end of [16788224] [16792320] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -193,18 +193,18 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694877, + ["x"] = -285009, ["coalition"] = "blue", - ["type"] = "Hawk cwar", + ["type"] = "Hawk ln", ["groupId"] = 35, - ["unitId"] = 58, - ["unitName"] = "Unit #008", + ["unitId"] = 57, + ["unitName"] = "Unit #007", ["pos"] = { - ["y"] = 60.085838317871, - ["x"] = -285216.25, - ["z"] = 689799.4375, + ["y"] = 74.050750732422, + ["x"] = -285008.96875, + ["z"] = 694877.4375, }, -- end of ["pos"] }, -- end of [16792320] [16794368] = @@ -213,7 +213,7 @@ aliveUnits = ["point"] = { ["y"] = 686871, - ["x"] = -286447, + ["x"] = -286407, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -226,28 +226,62 @@ aliveUnits = ["type"] = "M-113", ["groupId"] = 7004, ["groupName"] = "USA gnd 2", - ["unitName"] = "USA gnd 2 unit2", + ["unitName"] = "USA gnd 2 unit1", ["countryId"] = 2, - ["x"] = -286447, + ["x"] = -286407, ["country"] = "usa", ["heading"] = 0, - ["unitId"] = 7008, + ["unitId"] = 7007, ["y"] = 686871, ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.876796607959, - ["x"] = -286447.15625, + ["y"] = 47.951913858982, + ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16794368] - [16798464] = + [16796416] = { - ["alt"] = 68, + ["alt"] = 62, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 690314, + ["x"] = -284956, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16796416, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["speed"] = 0, + ["heading"] = 1.497755755511, + ["country"] = "usa", + ["groupName"] = "USA gnd 3", + ["countryId"] = 2, + ["y"] = 690314, + ["x"] = -284956, + ["coalition"] = "blue", + ["type"] = "M-1 Abrams", + ["groupId"] = 7008, + ["unitId"] = 7015, + ["unitName"] = "USA gnd 3 unit4", + ["pos"] = + { + ["y"] = 62.104196563333, + ["x"] = -284955.8128938, + ["z"] = 690313.50394304, + }, -- end of ["pos"] + }, -- end of [16796416] + [16798464] = + { + ["alt"] = 73, + ["point"] = + { + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -257,101 +291,67 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557591357, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691751, + ["x"] = -283221, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7015, - ["unitId"] = 7024, - ["unitName"] = "USA gnd 5 unit2", + ["unitId"] = 7023, + ["unitName"] = "USA gnd 5 unit1", ["pos"] = { - ["y"] = 68.242343870855, - ["x"] = -287590.1449949, - ["z"] = 695089.53310439, + ["y"] = 73.060448716327, + ["x"] = -283223.65801962, + ["z"] = 691751.91357136, }, -- end of ["pos"] }, -- end of [16798464] [16800512] = { - ["alt"] = 1998, + ["alt"] = 1997, ["point"] = { - ["y"] = 319595, - ["x"] = -198560, + ["y"] = 682727, + ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", - ["coalitionId"] = 0, - ["livery_id"] = "Australian 75th Squadron", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", ["skill"] = "High", ["unit"] = { ["id_"] = 16800512, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 180.49294253728, - ["heading"] = 2.1995924992708, - ["groupId"] = 7020, - ["unitName"] = "AUSTRALIA air 6 unit1", - ["groupName"] = "AUSTRALIA air 6", + ["speed"] = 138.85196364465, + ["heading"] = 1.6162179734619, + ["groupId"] = 7019, + ["unitName"] = "USA air 5 unit1", + ["groupName"] = "USA air 5", ["callsign"] = { - [1] = 1, + [1] = 4, [2] = 1, [3] = 1, - ["name"] = "Enfield11", + ["name"] = "Colt11", }, -- end of ["callsign"] - ["coalition"] = "neutral", - ["x"] = -198560, - ["unitId"] = 7032, - ["type"] = "FA-18C_hornet", - ["country"] = "australia", - ["y"] = 319595, - ["countryId"] = 21, + ["coalition"] = "blue", + ["x"] = -288608, + ["unitId"] = 7031, + ["type"] = "B-52H", + ["country"] = "usa", + ["y"] = 682727, + ["countryId"] = 2, ["pos"] = { - ["y"] = 1982.9801268833, - ["x"] = -199243.67266703, - ["z"] = 320534.47014546, + ["y"] = 1987.3907815825, + ["x"] = -288648.02914749, + ["z"] = 683613.54764354, }, -- end of ["pos"] }, -- end of [16800512] - [16802560] = - { - ["alt"] = 48, - ["point"] = - { - ["y"] = 686871, - ["x"] = -286407, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16802560, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-113", - ["groupId"] = 7025, - ["groupName"] = "USA gnd 8", - ["unitName"] = "USA gnd 8 unit1", - ["countryId"] = 2, - ["x"] = -286407, - ["country"] = "usa", - ["heading"] = 0, - ["unitId"] = 7040, - ["y"] = 686871, - ["coalition"] = "blue", - ["pos"] = - { - ["y"] = 47.951913858982, - ["x"] = -286407.15625, - ["z"] = 686871.4375, - }, -- end of ["pos"] - }, -- end of [16802560] [16778240] = { ["country"] = "russia", @@ -424,9 +424,9 @@ aliveUnits = ["countryId"] = 0, ["pos"] = { - ["y"] = 505.76930271528, - ["x"] = -244659.22325279, - ["z"] = 604147.642762, + ["y"] = 508.23984253819, + ["x"] = -244656.30510529, + ["z"] = 604145.48703791, }, -- end of ["pos"] }, -- end of [16782336] [16784384] = @@ -552,18 +552,18 @@ aliveUnits = ["y"] = 185783.38833846, ["pos"] = { - ["y"] = -2.0085389614105, - ["x"] = -244767.30964541, - ["z"] = 185823.78915671, + ["y"] = -2.0082261562347, + ["x"] = -244762.02599275, + ["z"] = 185818.17850341, }, -- end of ["pos"] }, -- end of [16790528] [16792576] = { - ["alt"] = 72, + ["alt"] = 74, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -573,74 +573,65 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557542423, + ["heading"] = 0, ["country"] = "usa", - ["groupName"] = "USA gnd 1", + ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 694952, + ["x"] = -284964, ["coalition"] = "blue", - ["type"] = "M-1 Abrams", - ["groupId"] = 7001, - ["unitId"] = 7001, - ["unitName"] = "USA gnd 1 unit1", + ["type"] = "Hawk cwar", + ["groupId"] = 35, + ["unitId"] = 58, + ["unitName"] = "Unit #008", ["pos"] = { - ["y"] = 72.200818460582, - ["x"] = -284652.55858872, - ["z"] = 693755.91988087, + ["y"] = 74.311630249023, + ["x"] = -284964.125, + ["z"] = 694951.5, }, -- end of ["pos"] }, -- end of [16792576] [16794624] = { - ["alt"] = 1997, + ["alt"] = 48, ["point"] = { - ["y"] = 682727, - ["x"] = -288608, + ["y"] = 686871, + ["x"] = -286447, }, -- end of ["point"] - ["alt_type"] = "BARO", ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", + ["skill"] = "Average", ["unit"] = { ["id_"] = 16794624, }, -- end of ["unit"] - ["category"] = "plane", - ["speed"] = 138.85196364465, - ["heading"] = 1.6162179734619, - ["groupId"] = 7005, - ["unitName"] = "USA air 1 unit1", - ["groupName"] = "USA air 1", - ["callsign"] = - { - [1] = 4, - [2] = 1, - [3] = 1, - ["name"] = "Colt11", - }, -- end of ["callsign"] - ["coalition"] = "blue", - ["x"] = -288608, - ["unitId"] = 7009, - ["type"] = "B-52H", - ["country"] = "usa", - ["y"] = 682727, + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-113", + ["groupId"] = 7004, + ["groupName"] = "USA gnd 2", + ["unitName"] = "USA gnd 2 unit2", ["countryId"] = 2, + ["x"] = -286447, + ["country"] = "usa", + ["heading"] = 0, + ["unitId"] = 7008, + ["y"] = 686871, + ["coalition"] = "blue", ["pos"] = { - ["y"] = 1991.4670941319, - ["x"] = -288665.65259277, - ["z"] = 684001.27794778, + ["y"] = 47.876796607959, + ["x"] = -286447.15625, + ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16794624] [16798720] = { - ["alt"] = 69, + ["alt"] = 74, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -650,57 +641,65 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557660229, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691898, + ["x"] = -283194, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7015, - ["unitId"] = 7025, - ["unitName"] = "USA gnd 5 unit3", + ["unitId"] = 7024, + ["unitName"] = "USA gnd 5 unit2", ["pos"] = { - ["y"] = 69.449898336486, - ["x"] = -287518.40594793, - ["z"] = 695151.14068808, + ["y"] = 73.602359921368, + ["x"] = -283198.99441689, + ["z"] = 691897.7610464, }, -- end of ["pos"] }, -- end of [16798720] [16800768] = { - ["alt"] = 0, + ["alt"] = 1998, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] + ["alt_type"] = "BARO", ["coalitionId"] = 0, - ["livery_id"] = "ReubenJames", - ["skill"] = "Average", + ["livery_id"] = "Australian 75th Squadron", + ["skill"] = "High", ["unit"] = { ["id_"] = 16800768, }, -- end of ["unit"] - ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 7021, - ["groupName"] = "AUSTRALIA shp 3", - ["unitName"] = "AUSTRALIA shp 3 unit1", + ["category"] = "plane", + ["speed"] = 180.49294253728, + ["heading"] = 2.1995924992708, + ["groupId"] = 7020, + ["unitName"] = "AUSTRALIA air 6 unit1", + ["groupName"] = "AUSTRALIA air 6", + ["callsign"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + ["name"] = "Enfield11", + }, -- end of ["callsign"] ["coalition"] = "neutral", - ["x"] = -163156, + ["x"] = -198560, + ["unitId"] = 7032, + ["type"] = "FA-18C_hornet", ["country"] = "australia", - ["y"] = 268869, - ["heading"] = 0, - ["unitId"] = 7033, + ["y"] = 319595, ["countryId"] = 21, ["pos"] = { - ["y"] = 0, - ["x"] = -163156.453125, - ["z"] = 268869.0625, + ["y"] = 1982.9801268833, + ["x"] = -199243.67266703, + ["z"] = 320534.47014546, }, -- end of ["pos"] }, -- end of [16800768] [16802816] = @@ -709,7 +708,7 @@ aliveUnits = ["point"] = { ["y"] = 686871, - ["x"] = -286447, + ["x"] = -286407, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -722,18 +721,18 @@ aliveUnits = ["type"] = "M-113", ["groupId"] = 7025, ["groupName"] = "USA gnd 8", - ["unitName"] = "USA gnd 8 unit2", + ["unitName"] = "USA gnd 8 unit1", ["countryId"] = 2, - ["x"] = -286447, + ["x"] = -286407, ["country"] = "usa", ["heading"] = 0, - ["unitId"] = 7041, + ["unitId"] = 7040, ["y"] = 686871, ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.876796607959, - ["x"] = -286447.15625, + ["y"] = 47.951913858982, + ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16802816] @@ -834,45 +833,58 @@ aliveUnits = }, -- end of [16786688] [16790784] = { - ["alt"] = 60, + ["alt"] = 2000, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 636428.57142857, + ["x"] = -318142.85714286, }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", + ["alt_type"] = "BARO", + ["livery_id"] = "104th FS Maryland ANG, Baltimore (MD)", + ["onboard_num"] = "52", ["unit"] = { ["id_"] = 16790784, }, -- end of ["unit"] - ["category"] = "vehicle", - ["speed"] = 0, - ["heading"] = 0, + ["category"] = "plane", + ["unitName"] = "A-10C Client #1_unit", + ["AddPropAircraft"] = + { + }, -- end of ["AddPropAircraft"] + ["type"] = "A-10C", + ["speed"] = 138.88888888889, ["country"] = "usa", - ["groupName"] = "teleGroup", - ["countryId"] = 2, - ["y"] = 689785, - ["x"] = -285145, + ["psi"] = 0.67060113146646, + ["groupId"] = 6, + ["groupName"] = "A-10C Client #1", + ["skill"] = "Client", ["coalition"] = "blue", - ["type"] = "Hawk tr", - ["groupId"] = 35, - ["unitId"] = 52, - ["unitName"] = "Unit #002", + ["x"] = -318142.85714286, + ["callsign"] = + { + [1] = 3, + [2] = 1, + [3] = 1, + ["name"] = "Uzi11", + }, -- end of ["callsign"] + ["heading"] = -0.67060113146646, + ["unitId"] = 11, + ["y"] = 636428.57142857, + ["countryId"] = 2, ["pos"] = { - ["y"] = 60.353408813477, - ["x"] = -285145.125, - ["z"] = 689785.3125, + ["y"] = 1912.3736665438, + ["x"] = -314625.75359652, + ["z"] = 633651.41337382, }, -- end of ["pos"] }, -- end of [16790784] [16792832] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -882,170 +894,25 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557542423, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692292, + ["x"] = -284982, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7001, - ["unitId"] = 7002, - ["unitName"] = "USA gnd 1 unit2", + ["unitId"] = 7001, + ["unitName"] = "USA gnd 1 unit1", ["pos"] = { - ["y"] = 73.104113727721, - ["x"] = -284455.82134373, - ["z"] = 693770.54507245, + ["y"] = 67.288836055423, + ["x"] = -284973.22177254, + ["z"] = 692290.16685181, }, -- end of ["pos"] }, -- end of [16792832] [16794880] = - { - ["alt"] = 1998, - ["point"] = - { - ["y"] = 319595, - ["x"] = -198560, - }, -- end of ["point"] - ["alt_type"] = "BARO", - ["coalitionId"] = 0, - ["livery_id"] = "Australian 75th Squadron", - ["skill"] = "High", - ["unit"] = - { - ["id_"] = 16794880, - }, -- end of ["unit"] - ["category"] = "plane", - ["speed"] = 180.49294253728, - ["heading"] = 2.1995924992708, - ["groupId"] = 7006, - ["unitName"] = "AUSTRALIA air 2 unit1", - ["groupName"] = "AUSTRALIA air 2", - ["callsign"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - ["name"] = "Enfield11", - }, -- end of ["callsign"] - ["coalition"] = "neutral", - ["x"] = -198560, - ["unitId"] = 7010, - ["type"] = "FA-18C_hornet", - ["country"] = "australia", - ["y"] = 319595, - ["countryId"] = 21, - ["pos"] = - { - ["y"] = 1988.2813909589, - ["x"] = -199535.70144928, - ["z"] = 320936.00557625, - }, -- end of ["pos"] - }, -- end of [16794880] - [16796928] = - { - ["alt"] = 48, - ["point"] = - { - ["y"] = 686871, - ["x"] = -286407, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16796928, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["speed"] = 0, - ["heading"] = 0, - ["country"] = "usa", - ["groupName"] = "USA gnd 4", - ["countryId"] = 2, - ["y"] = 686871, - ["x"] = -286407, - ["coalition"] = "blue", - ["type"] = "M-113", - ["groupId"] = 7011, - ["unitId"] = 7018, - ["unitName"] = "USA gnd 4 unit1", - ["pos"] = - { - ["y"] = 47.951913858982, - ["x"] = -286407.15625, - ["z"] = 686871.4375, - }, -- end of ["pos"] - }, -- end of [16796928] - [16798976] = - { - ["alt"] = 68, - ["point"] = - { - ["y"] = 694882, - ["x"] = -287479, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16798976, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["speed"] = 0, - ["heading"] = 1.4977557575044, - ["country"] = "usa", - ["groupName"] = "USA gnd 5", - ["countryId"] = 2, - ["y"] = 694882, - ["x"] = -287479, - ["coalition"] = "blue", - ["type"] = "M-1 Abrams", - ["groupId"] = 7015, - ["unitId"] = 7026, - ["unitName"] = "USA gnd 5 unit4", - ["pos"] = - { - ["y"] = 67.549932193396, - ["x"] = -287479.33570923, - ["z"] = 694882.45568802, - }, -- end of ["pos"] - }, -- end of [16798976] - [16801024] = - { - ["alt"] = 73, - ["point"] = - { - ["y"] = 693098, - ["x"] = -284021, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16801024, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["speed"] = 0, - ["heading"] = 1.4977557645728, - ["country"] = "usa", - ["groupName"] = "USA gnd 7", - ["countryId"] = 2, - ["y"] = 693098, - ["x"] = -284021, - ["coalition"] = "blue", - ["type"] = "M-1 Abrams", - ["groupId"] = 7022, - ["unitId"] = 7034, - ["unitName"] = "USA gnd 7 unit1", - ["pos"] = - { - ["y"] = 73.449123755413, - ["x"] = -284025.43622442, - ["z"] = 693098.87273888, - }, -- end of ["pos"] - }, -- end of [16801024] - [16803072] = { ["alt"] = 1997, ["point"] = @@ -1059,14 +926,14 @@ aliveUnits = ["skill"] = "High", ["unit"] = { - ["id_"] = 16803072, + ["id_"] = 16794880, }, -- end of ["unit"] ["category"] = "plane", ["speed"] = 138.85196364465, ["heading"] = 1.6162179734619, - ["groupId"] = 7026, - ["unitName"] = "USA air 7 unit1", - ["groupName"] = "USA air 7", + ["groupId"] = 7005, + ["unitName"] = "USA air 1 unit1", + ["groupName"] = "USA air 1", ["callsign"] = { [1] = 4, @@ -1076,16 +943,119 @@ aliveUnits = }, -- end of ["callsign"] ["coalition"] = "blue", ["x"] = -288608, - ["unitId"] = 7042, + ["unitId"] = 7009, ["type"] = "B-52H", ["country"] = "usa", ["y"] = 682727, ["countryId"] = 2, ["pos"] = { - ["y"] = 1986.5427819389, - ["x"] = -288642.36046096, - ["z"] = 683488.83206213, + ["y"] = 1991.4670941319, + ["x"] = -288665.65259277, + ["z"] = 684001.27794778, + }, -- end of ["pos"] + }, -- end of [16794880] + [16798976] = + { + ["alt"] = 72, + ["point"] = + { + ["y"] = 691826, + ["x"] = -283357, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16798976, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["speed"] = 0, + ["heading"] = 1.4977557538798, + ["country"] = "usa", + ["groupName"] = "USA gnd 5", + ["countryId"] = 2, + ["y"] = 691826, + ["x"] = -283357, + ["coalition"] = "blue", + ["type"] = "M-1 Abrams", + ["groupId"] = 7015, + ["unitId"] = 7025, + ["unitName"] = "USA gnd 5 unit3", + ["pos"] = + { + ["y"] = 72.12411776751, + ["x"] = -283357.17133258, + ["z"] = 691826.36193748, + }, -- end of ["pos"] + }, -- end of [16798976] + [16801024] = + { + ["alt"] = 0, + ["point"] = + { + ["y"] = 268107, + ["x"] = -163693, + }, -- end of ["point"] + ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16801024, + }, -- end of ["unit"] + ["category"] = "ship", + ["speed"] = 0, + ["type"] = "PERRY", + ["groupId"] = 7021, + ["groupName"] = "AUSTRALIA shp 3", + ["unitName"] = "AUSTRALIA shp 3 unit1", + ["coalition"] = "neutral", + ["x"] = -163693, + ["country"] = "australia", + ["y"] = 268107, + ["heading"] = 0, + ["unitId"] = 7033, + ["countryId"] = 21, + ["pos"] = + { + ["y"] = 0, + ["x"] = -163693.34375, + ["z"] = 268106.96875, + }, -- end of ["pos"] + }, -- end of [16801024] + [16803072] = + { + ["alt"] = 48, + ["point"] = + { + ["y"] = 686871, + ["x"] = -286447, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16803072, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-113", + ["groupId"] = 7025, + ["groupName"] = "USA gnd 8", + ["unitName"] = "USA gnd 8 unit2", + ["countryId"] = 2, + ["x"] = -286447, + ["country"] = "usa", + ["heading"] = 0, + ["unitId"] = 7041, + ["y"] = 686871, + ["coalition"] = "blue", + ["pos"] = + { + ["y"] = 47.876796607959, + ["x"] = -286447.15625, + ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16803072] [16778752] = @@ -1115,8 +1085,8 @@ aliveUnits = ["pos"] = { ["y"] = 0, - ["x"] = -87204.18841578, - ["z"] = 74429.879538476, + ["x"] = -87203.760480064, + ["z"] = 74430.905392154, }, -- end of ["pos"] }, -- end of [16778752] [16780800] = @@ -1232,11 +1202,11 @@ aliveUnits = }, -- end of [16786944] [16791040] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1250,27 +1220,27 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 694968, + ["x"] = -285046, ["coalition"] = "blue", - ["type"] = "Hawk sr", + ["type"] = "Hawk tr", ["groupId"] = 35, - ["unitId"] = 53, - ["unitName"] = "Unit #003", + ["unitId"] = 52, + ["unitName"] = "Unit #002", ["pos"] = { - ["y"] = 60.798156738281, - ["x"] = -285166.40625, - ["z"] = 689947.8125, + ["y"] = 73.912696838379, + ["x"] = -285046.125, + ["z"] = 694968, }, -- end of ["pos"] }, -- end of [16791040] [16793088] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1280,57 +1250,65 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557542423, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692208, + ["x"] = -284870, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7001, - ["unitId"] = 7003, - ["unitName"] = "USA gnd 1 unit3", + ["unitId"] = 7002, + ["unitName"] = "USA gnd 1 unit2", ["pos"] = { - ["y"] = 72.269631188927, - ["x"] = -284638.74305088, - ["z"] = 693780.59223319, + ["y"] = 67.240456886011, + ["x"] = -284870.4375, + ["z"] = 692207.9375, }, -- end of ["pos"] }, -- end of [16793088] [16795136] = { - ["alt"] = 0, + ["alt"] = 1998, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] + ["alt_type"] = "BARO", ["coalitionId"] = 0, - ["livery_id"] = "ReubenJames", - ["skill"] = "Average", + ["livery_id"] = "Australian 75th Squadron", + ["skill"] = "High", ["unit"] = { ["id_"] = 16795136, }, -- end of ["unit"] - ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 7007, - ["groupName"] = "AUSTRALIA shp 1", - ["unitName"] = "AUSTRALIA shp 1 unit1", + ["category"] = "plane", + ["speed"] = 180.49294253728, + ["heading"] = 2.1995924992708, + ["groupId"] = 7006, + ["unitName"] = "AUSTRALIA air 2 unit1", + ["groupName"] = "AUSTRALIA air 2", + ["callsign"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + ["name"] = "Enfield11", + }, -- end of ["callsign"] ["coalition"] = "neutral", - ["x"] = -163065, + ["x"] = -198560, + ["unitId"] = 7010, + ["type"] = "FA-18C_hornet", ["country"] = "australia", - ["y"] = 265153, - ["heading"] = 0, - ["unitId"] = 7011, + ["y"] = 319595, ["countryId"] = 21, ["pos"] = { - ["y"] = 0, - ["x"] = -163065.140625, - ["z"] = 265152.96875, + ["y"] = 1988.2813909589, + ["x"] = -199535.70144928, + ["z"] = 320936.00557625, }, -- end of ["pos"] }, -- end of [16795136] [16797184] = @@ -1339,7 +1317,7 @@ aliveUnits = ["point"] = { ["y"] = 686871, - ["x"] = -286447, + ["x"] = -286407, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1354,26 +1332,60 @@ aliveUnits = ["groupName"] = "USA gnd 4", ["countryId"] = 2, ["y"] = 686871, - ["x"] = -286447, + ["x"] = -286407, ["coalition"] = "blue", ["type"] = "M-113", ["groupId"] = 7011, - ["unitId"] = 7019, - ["unitName"] = "USA gnd 4 unit2", + ["unitId"] = 7018, + ["unitName"] = "USA gnd 4 unit1", ["pos"] = { - ["y"] = 47.876796607959, - ["x"] = -286447.15625, + ["y"] = 47.951913858982, + ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16797184] - [16801280] = + [16799232] = { - ["alt"] = 73, + ["alt"] = 72, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 691852, + ["x"] = -283362, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16799232, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["speed"] = 0, + ["heading"] = 1.4977557720036, + ["country"] = "usa", + ["groupName"] = "USA gnd 5", + ["countryId"] = 2, + ["y"] = 691852, + ["x"] = -283362, + ["coalition"] = "blue", + ["type"] = "M-1 Abrams", + ["groupId"] = 7015, + ["unitId"] = 7026, + ["unitName"] = "USA gnd 5 unit4", + ["pos"] = + { + ["y"] = 72.166241925805, + ["x"] = -283361.7937593, + ["z"] = 691852.30478528, + }, -- end of ["pos"] + }, -- end of [16799232] + [16801280] = + { + ["alt"] = 59, + ["point"] = + { + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1382,66 +1394,66 @@ aliveUnits = ["id_"] = 16801280, }, -- end of ["unit"] ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, - ["heading"] = 1.4877557641795, + ["speed"] = 0, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692769, + ["x"] = -287355, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7022, - ["unitId"] = 7035, - ["unitName"] = "USA gnd 7 unit2", + ["unitId"] = 7034, + ["unitName"] = "USA gnd 7 unit1", ["pos"] = { - ["y"] = 73.066103941006, - ["x"] = -284053.49892158, - ["z"] = 693012.19131309, + ["y"] = 59.238122595386, + ["x"] = -287358.35658634, + ["z"] = 692769.94557295, }, -- end of ["pos"] }, -- end of [16801280] [16803328] = { - ["alt"] = 1998, + ["alt"] = 1997, ["point"] = { - ["y"] = 319595, - ["x"] = -198560, + ["y"] = 682727, + ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", - ["coalitionId"] = 0, - ["livery_id"] = "Australian 75th Squadron", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", ["skill"] = "High", ["unit"] = { ["id_"] = 16803328, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 180.49294253728, - ["heading"] = 2.1995924992708, - ["groupId"] = 7027, - ["unitName"] = "AUSTRALIA air 8 unit1", - ["groupName"] = "AUSTRALIA air 8", + ["speed"] = 138.85196364465, + ["heading"] = 1.6162179734619, + ["groupId"] = 7026, + ["unitName"] = "USA air 7 unit1", + ["groupName"] = "USA air 7", ["callsign"] = { - [1] = 1, + [1] = 4, [2] = 1, [3] = 1, - ["name"] = "Enfield11", + ["name"] = "Colt11", }, -- end of ["callsign"] - ["coalition"] = "neutral", - ["x"] = -198560, - ["unitId"] = 7043, - ["type"] = "FA-18C_hornet", - ["country"] = "australia", - ["y"] = 319595, - ["countryId"] = 21, + ["coalition"] = "blue", + ["x"] = -288608, + ["unitId"] = 7042, + ["type"] = "B-52H", + ["country"] = "usa", + ["y"] = 682727, + ["countryId"] = 2, ["pos"] = { - ["y"] = 1981.902511151, - ["x"] = -199142.78627169, - ["z"] = 320395.75279009, + ["y"] = 1986.5427819389, + ["x"] = -288642.36046096, + ["z"] = 683488.83206213, }, -- end of ["pos"] }, -- end of [16803328] [16779008] = @@ -1590,18 +1602,18 @@ aliveUnits = ["y"] = 653171.42857143, ["pos"] = { - ["y"] = 10.568131374762, - ["x"] = -293132.56916307, - ["z"] = 653229.31101923, + ["y"] = 10.573285658245, + ["x"] = -293125.28492283, + ["z"] = 653221.89168815, }, -- end of ["pos"] }, -- end of [16787200] [16791296] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1615,27 +1627,27 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 695126, + ["x"] = -285098, ["coalition"] = "blue", - ["type"] = "Hawk pcp", + ["type"] = "Hawk sr", ["groupId"] = 35, - ["unitId"] = 54, - ["unitName"] = "Unit #004", + ["unitId"] = 53, + ["unitName"] = "Unit #003", ["pos"] = { - ["y"] = 59.9983253479, - ["x"] = -285297.625, - ["z"] = 689856.375, + ["y"] = 73.909408569336, + ["x"] = -285097.78125, + ["z"] = 695126.4375, }, -- end of ["pos"] }, -- end of [16791296] [16793344] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1645,108 +1657,100 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557629417, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692374, + ["x"] = -284971, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7001, - ["unitId"] = 7004, - ["unitName"] = "USA gnd 1 unit4", + ["unitId"] = 7003, + ["unitName"] = "USA gnd 1 unit3", ["pos"] = { - ["y"] = 71.997656902822, - ["x"] = -284698.71782492, - ["z"] = 693652.50385317, + ["y"] = 67.619678071864, + ["x"] = -284962.54069446, + ["z"] = 692372.41661837, }, -- end of ["pos"] }, -- end of [16793344] [16795392] = { - ["alt"] = 66, + ["alt"] = 0, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] - ["coalitionId"] = 2, + ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["unit"] = { ["id_"] = 16795392, }, -- end of ["unit"] - ["category"] = "vehicle", + ["category"] = "ship", ["speed"] = 0, - ["heading"] = 1.4977557594982, - ["country"] = "usa", - ["groupName"] = "USA gnd 3", - ["countryId"] = 2, - ["y"] = 691761, - ["x"] = -284967, - ["coalition"] = "blue", - ["type"] = "M-1 Abrams", - ["groupId"] = 7008, - ["unitId"] = 7012, - ["unitName"] = "USA gnd 3 unit1", + ["type"] = "PERRY", + ["groupId"] = 7007, + ["groupName"] = "AUSTRALIA shp 1", + ["unitName"] = "AUSTRALIA shp 1 unit1", + ["coalition"] = "neutral", + ["x"] = -164471, + ["country"] = "australia", + ["y"] = 267081, + ["heading"] = 0, + ["unitId"] = 7011, + ["countryId"] = 21, ["pos"] = { - ["y"] = 65.668038424368, - ["x"] = -284974.27915004, - ["z"] = 691761.52921714, + ["y"] = 0, + ["x"] = -164470.953125, + ["z"] = 267080.75, }, -- end of ["pos"] }, -- end of [16795392] [16797440] = { - ["alt"] = 1997, + ["alt"] = 48, ["point"] = { - ["y"] = 682727, - ["x"] = -288608, + ["y"] = 686871, + ["x"] = -286447, }, -- end of ["point"] - ["alt_type"] = "BARO", ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", + ["skill"] = "Average", ["unit"] = { ["id_"] = 16797440, }, -- end of ["unit"] - ["category"] = "plane", - ["speed"] = 138.85196364465, - ["heading"] = 1.6162179734619, - ["groupId"] = 7012, - ["unitName"] = "USA air 3 unit1", - ["groupName"] = "USA air 3", - ["callsign"] = - { - [1] = 4, - [2] = 1, - [3] = 1, - ["name"] = "Colt11", - }, -- end of ["callsign"] - ["coalition"] = "blue", - ["x"] = -288608, - ["unitId"] = 7020, - ["type"] = "B-52H", + ["category"] = "vehicle", + ["speed"] = 0, + ["heading"] = 0, ["country"] = "usa", - ["y"] = 682727, + ["groupName"] = "USA gnd 4", ["countryId"] = 2, + ["y"] = 686871, + ["x"] = -286447, + ["coalition"] = "blue", + ["type"] = "M-113", + ["groupId"] = 7011, + ["unitId"] = 7019, + ["unitName"] = "USA gnd 4 unit2", ["pos"] = { - ["y"] = 1988.5854966465, - ["x"] = -288653.69584605, - ["z"] = 683738.21954942, + ["y"] = 47.876796607959, + ["x"] = -286447.15625, + ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16797440] [16801536] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1755,58 +1759,66 @@ aliveUnits = ["id_"] = 16801536, }, -- end of ["unit"] ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, - ["heading"] = 1.5077557625432, + ["speed"] = 0, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692754, + ["x"] = -287476, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7022, - ["unitId"] = 7036, - ["unitName"] = "USA gnd 7 unit3", + ["unitId"] = 7035, + ["unitName"] = "USA gnd 7 unit2", ["pos"] = { - ["y"] = 73.827574370095, - ["x"] = -283897.97030909, - ["z"] = 693025.56614306, + ["y"] = 59.222299098578, + ["x"] = -287476.21777116, + ["z"] = 692753.69256042, }, -- end of ["pos"] }, -- end of [16801536] [16803584] = { - ["alt"] = 0, + ["alt"] = 1998, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] + ["alt_type"] = "BARO", ["coalitionId"] = 0, - ["livery_id"] = "ReubenJames", - ["skill"] = "Average", + ["livery_id"] = "Australian 75th Squadron", + ["skill"] = "High", ["unit"] = { ["id_"] = 16803584, }, -- end of ["unit"] - ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 7028, - ["groupName"] = "AUSTRALIA shp 4", - ["unitName"] = "AUSTRALIA shp 4 unit1", + ["category"] = "plane", + ["speed"] = 180.49294253728, + ["heading"] = 2.1995924992708, + ["groupId"] = 7027, + ["unitName"] = "AUSTRALIA air 8 unit1", + ["groupName"] = "AUSTRALIA air 8", + ["callsign"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + ["name"] = "Enfield11", + }, -- end of ["callsign"] ["coalition"] = "neutral", - ["x"] = -162226, + ["x"] = -198560, + ["unitId"] = 7043, + ["type"] = "FA-18C_hornet", ["country"] = "australia", - ["y"] = 266075, - ["heading"] = 0, - ["unitId"] = 7044, + ["y"] = 319595, ["countryId"] = 21, ["pos"] = { - ["y"] = 0, - ["x"] = -162225.578125, - ["z"] = 266075.21875, + ["y"] = 1981.902511151, + ["x"] = -199142.78627169, + ["z"] = 320395.75279009, }, -- end of ["pos"] }, -- end of [16803584] [16779264] = @@ -1836,7 +1848,7 @@ aliveUnits = ["pos"] = { ["y"] = 0, - ["x"] = -356011.92788773, + ["x"] = -356010.2612211, ["z"] = 444653.03125, }, -- end of ["pos"] }, -- end of [16779264] @@ -1872,6 +1884,38 @@ aliveUnits = ["z"] = 445199.90625, }, -- end of ["pos"] }, -- end of [16781312] + [16783360] = + { + ["point"] = + { + ["y"] = 654665.71428571, + ["x"] = -292962.85714286, + }, -- end of ["point"] + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16783360, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["unitName"] = "RuBTRs4", + ["heading"] = -1.7994767003775, + ["unitId"] = 30, + ["groupName"] = "RuBTRs", + ["countryId"] = 0, + ["coalition"] = "red", + ["x"] = -292962.85714286, + ["type"] = "BTR-80", + ["groupId"] = 13, + ["country"] = "russia", + ["playerCanDrive"] = true, + ["y"] = 654665.71428571, + ["pos"] = + { + ["y"] = 11.950934404379, + ["x"] = -293001.18163074, + ["z"] = 654663.33660475, + }, -- end of ["pos"] + }, -- end of [16783360] [16785408] = { ["alt"] = 2000, @@ -1912,9 +1956,9 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 1987.9963939735, - ["x"] = -277035.05136533, - ["z"] = 663222.28561488, + ["y"] = 1987.9862179962, + ["x"] = -277039.54944886, + ["z"] = 663219.26272566, }, -- end of ["pos"] }, -- end of [16785408] [16787456] = @@ -1944,18 +1988,18 @@ aliveUnits = ["y"] = 653211.42857143, ["pos"] = { - ["y"] = 10.578705771489, - ["x"] = -293125.35483757, - ["z"] = 653211.79188619, + ["y"] = 10.578737878163, + ["x"] = -293125.46162944, + ["z"] = 653211.70008691, }, -- end of ["pos"] }, -- end of [16787456] [16791552] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1969,27 +2013,61 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 694892, + ["x"] = -285039, ["coalition"] = "blue", - ["type"] = "Hawk ln", + ["type"] = "Hawk pcp", ["groupId"] = 35, - ["unitId"] = 55, - ["unitName"] = "Unit #005", + ["unitId"] = 54, + ["unitName"] = "Unit #004", ["pos"] = { - ["y"] = 60.672706604004, - ["x"] = -285057.90625, - ["z"] = 689796.125, + ["y"] = 73.954246520996, + ["x"] = -285038.8125, + ["z"] = 694892.4375, }, -- end of ["pos"] }, -- end of [16791552] - [16795648] = + [16793600] = { - ["alt"] = 66, + ["alt"] = 68, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 692388, + ["x"] = -284932, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16793600, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["speed"] = 0, + ["heading"] = 1.4977557602231, + ["country"] = "usa", + ["groupName"] = "USA gnd 1", + ["countryId"] = 2, + ["y"] = 692388, + ["x"] = -284932, + ["coalition"] = "blue", + ["type"] = "M-1 Abrams", + ["groupId"] = 7001, + ["unitId"] = 7004, + ["unitName"] = "USA gnd 1 unit4", + ["pos"] = + { + ["y"] = 67.771455646655, + ["x"] = -284932.00965646, + ["z"] = 692388.36656636, + }, -- end of ["pos"] + }, -- end of [16793600] + [16795648] = + { + ["alt"] = 62, + ["point"] = + { + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1999,108 +2077,74 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557625792, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690419, + ["x"] = -284972, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7008, - ["unitId"] = 7013, - ["unitName"] = "USA gnd 3 unit2", + ["unitId"] = 7012, + ["unitName"] = "USA gnd 3 unit1", ["pos"] = { - ["y"] = 66.202428226177, - ["x"] = -284860.57541592, - ["z"] = 691809.18734628, + ["y"] = 61.94913810018, + ["x"] = -284968.89655888, + ["z"] = 690416.83778872, }, -- end of ["pos"] }, -- end of [16795648] [16797696] = { - ["alt"] = 1998, + ["alt"] = 1997, ["point"] = { - ["y"] = 319595, - ["x"] = -198560, + ["y"] = 682727, + ["x"] = -288608, }, -- end of ["point"] ["alt_type"] = "BARO", - ["coalitionId"] = 0, - ["livery_id"] = "Australian 75th Squadron", + ["coalitionId"] = 2, + ["livery_id"] = "usaf standard", ["skill"] = "High", ["unit"] = { ["id_"] = 16797696, }, -- end of ["unit"] ["category"] = "plane", - ["speed"] = 180.49294253728, - ["heading"] = 2.1995924992708, - ["groupId"] = 7013, - ["unitName"] = "AUSTRALIA air 4 unit1", - ["groupName"] = "AUSTRALIA air 4", + ["speed"] = 138.85196364465, + ["heading"] = 1.6162179734619, + ["groupId"] = 7012, + ["unitName"] = "USA air 3 unit1", + ["groupName"] = "USA air 3", ["callsign"] = { - [1] = 1, + [1] = 4, [2] = 1, [3] = 1, - ["name"] = "Enfield11", + ["name"] = "Colt11", }, -- end of ["callsign"] - ["coalition"] = "neutral", - ["x"] = -198560, - ["unitId"] = 7021, - ["type"] = "FA-18C_hornet", - ["country"] = "australia", - ["y"] = 319595, - ["countryId"] = 21, + ["coalition"] = "blue", + ["x"] = -288608, + ["unitId"] = 7020, + ["type"] = "B-52H", + ["country"] = "usa", + ["y"] = 682727, + ["countryId"] = 2, ["pos"] = { - ["y"] = 1984.4381141247, - ["x"] = -199333.93720144, - ["z"] = 320658.58260143, + ["y"] = 1988.5854966465, + ["x"] = -288653.69584605, + ["z"] = 683738.21954942, }, -- end of ["pos"] }, -- end of [16797696] - [16799744] = - { - ["alt"] = 48, - ["point"] = - { - ["y"] = 686871, - ["x"] = -286407, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16799744, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-113", - ["groupId"] = 7018, - ["groupName"] = "USA gnd 6", - ["unitName"] = "USA gnd 6 unit1", - ["countryId"] = 2, - ["x"] = -286407, - ["country"] = "usa", - ["heading"] = 0, - ["unitId"] = 7029, - ["y"] = 686871, - ["coalition"] = "blue", - ["pos"] = - { - ["y"] = 47.951913858982, - ["x"] = -286407.15625, - ["z"] = 686871.4375, - }, -- end of ["pos"] - }, -- end of [16799744] [16801792] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2109,25 +2153,60 @@ aliveUnits = ["id_"] = 16801792, }, -- end of ["unit"] ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, - ["heading"] = 1.4877557641795, + ["speed"] = 0, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692726, + ["x"] = -287538, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7022, - ["unitId"] = 7037, - ["unitName"] = "USA gnd 7 unit4", + ["unitId"] = 7036, + ["unitName"] = "USA gnd 7 unit3", ["pos"] = { - ["y"] = 72.86544323544, - ["x"] = -284127.15798047, - ["z"] = 693093.5300743, + ["y"] = 59.030057380211, + ["x"] = -287538.03020083, + ["z"] = 692726.00406844, }, -- end of ["pos"] }, -- end of [16801792] + [16803840] = + { + ["alt"] = 0, + ["point"] = + { + ["y"] = 265427, + ["x"] = -164284, + }, -- end of ["point"] + ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16803840, + }, -- end of ["unit"] + ["category"] = "ship", + ["speed"] = 0, + ["type"] = "PERRY", + ["groupId"] = 7028, + ["groupName"] = "AUSTRALIA shp 4", + ["unitName"] = "AUSTRALIA shp 4 unit1", + ["coalition"] = "neutral", + ["x"] = -164284, + ["country"] = "australia", + ["y"] = 265427, + ["heading"] = 0, + ["unitId"] = 7044, + ["countryId"] = 21, + ["pos"] = + { + ["y"] = 0, + ["x"] = -164283.859375, + ["z"] = 265426.875, + }, -- end of ["pos"] + }, -- end of [16803840] [16781568] = { ["alt"] = 500, @@ -2166,38 +2245,6 @@ aliveUnits = ["z"] = 615841.88237501, }, -- end of ["pos"] }, -- end of [16781568] - [16783616] = - { - ["point"] = - { - ["y"] = 654705.71428571, - ["x"] = -293002.85714286, - }, -- end of ["point"] - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16783616, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["unitName"] = "RuBTRs5", - ["heading"] = -1.7994767003775, - ["unitId"] = 31, - ["groupName"] = "RuBTRs", - ["countryId"] = 0, - ["coalition"] = "red", - ["x"] = -293002.85714286, - ["type"] = "BTR-80", - ["groupId"] = 13, - ["country"] = "russia", - ["playerCanDrive"] = true, - ["y"] = 654705.71428571, - ["pos"] = - { - ["y"] = 12.108674123943, - ["x"] = -293049.90666016, - ["z"] = 654690.7394103, - }, -- end of ["pos"] - }, -- end of [16783616] [16785664] = { ["alt"] = 500, @@ -2270,18 +2317,18 @@ aliveUnits = ["y"] = 653251.42857143, ["pos"] = { - ["y"] = 10.550800822096, - ["x"] = -293165.35664945, - ["z"] = 653251.79444434, + ["y"] = 10.550834639592, + ["x"] = -293165.46162943, + ["z"] = 653251.70008691, }, -- end of ["pos"] }, -- end of [16787712] [16791808] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2295,27 +2342,27 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 695084, + ["x"] = -284914, ["coalition"] = "blue", ["type"] = "Hawk ln", ["groupId"] = 35, - ["unitId"] = 56, - ["unitName"] = "Unit #006", + ["unitId"] = 55, + ["unitName"] = "Unit #005", ["pos"] = { - ["y"] = 60.813724517822, - ["x"] = -285191.375, - ["z"] = 689972.5, + ["y"] = 74.842834472656, + ["x"] = -284914, + ["z"] = 695083.5625, }, -- end of ["pos"] }, -- end of [16791808] [16795904] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2325,57 +2372,65 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557573233, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690558, + ["x"] = -284846, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7008, - ["unitId"] = 7014, - ["unitName"] = "USA gnd 3 unit3", + ["unitId"] = 7013, + ["unitName"] = "USA gnd 3 unit2", ["pos"] = { - ["y"] = 65.613190076765, - ["x"] = -284981.99382804, - ["z"] = 691744.15185067, + ["y"] = 62.854867766404, + ["x"] = -284846.46341879, + ["z"] = 690558.47076276, }, -- end of ["pos"] }, -- end of [16795904] [16797952] = { - ["alt"] = 0, + ["alt"] = 1998, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 319595, + ["x"] = -198560, }, -- end of ["point"] + ["alt_type"] = "BARO", ["coalitionId"] = 0, - ["livery_id"] = "ReubenJames", - ["skill"] = "Average", + ["livery_id"] = "Australian 75th Squadron", + ["skill"] = "High", ["unit"] = { ["id_"] = 16797952, }, -- end of ["unit"] - ["category"] = "ship", - ["speed"] = 0, - ["type"] = "PERRY", - ["groupId"] = 7014, - ["groupName"] = "AUSTRALIA shp 2", - ["unitName"] = "AUSTRALIA shp 2 unit1", + ["category"] = "plane", + ["speed"] = 180.49294253728, + ["heading"] = 2.1995924992708, + ["groupId"] = 7013, + ["unitName"] = "AUSTRALIA air 4 unit1", + ["groupName"] = "AUSTRALIA air 4", + ["callsign"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + ["name"] = "Enfield11", + }, -- end of ["callsign"] ["coalition"] = "neutral", - ["x"] = -161099, + ["x"] = -198560, + ["unitId"] = 7021, + ["type"] = "FA-18C_hornet", ["country"] = "australia", - ["y"] = 267048, - ["heading"] = 0, - ["unitId"] = 7022, + ["y"] = 319595, ["countryId"] = 21, ["pos"] = { - ["y"] = 0, - ["x"] = -161098.828125, - ["z"] = 267047.71875, + ["y"] = 1984.4381141247, + ["x"] = -199333.93720144, + ["z"] = 320658.58260143, }, -- end of ["pos"] }, -- end of [16797952] [16800000] = @@ -2384,7 +2439,7 @@ aliveUnits = ["point"] = { ["y"] = 686871, - ["x"] = -286447, + ["x"] = -286407, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2397,21 +2452,55 @@ aliveUnits = ["type"] = "M-113", ["groupId"] = 7018, ["groupName"] = "USA gnd 6", - ["unitName"] = "USA gnd 6 unit2", + ["unitName"] = "USA gnd 6 unit1", ["countryId"] = 2, - ["x"] = -286447, + ["x"] = -286407, ["country"] = "usa", ["heading"] = 0, - ["unitId"] = 7030, + ["unitId"] = 7029, ["y"] = 686871, ["coalition"] = "blue", ["pos"] = { - ["y"] = 47.876796607959, - ["x"] = -286447.15625, + ["y"] = 47.951913858982, + ["x"] = -286407.15625, ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16800000] + [16802048] = + { + ["alt"] = 59, + ["point"] = + { + ["y"] = 692766, + ["x"] = -287511, + }, -- end of ["point"] + ["coalitionId"] = 2, + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16802048, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["speed"] = 0, + ["heading"] = 1.4977557605856, + ["country"] = "usa", + ["groupName"] = "USA gnd 7", + ["countryId"] = 2, + ["y"] = 692766, + ["x"] = -287511, + ["coalition"] = "blue", + ["type"] = "M-1 Abrams", + ["groupId"] = 7022, + ["unitId"] = 7037, + ["unitName"] = "USA gnd 7 unit4", + ["pos"] = + { + ["y"] = 59.194805123349, + ["x"] = -287511.05258727, + ["z"] = 692766.47421955, + }, -- end of ["pos"] + }, -- end of [16802048] [16777728] = { ["point"] = @@ -2477,9 +2566,9 @@ aliveUnits = ["coalition"] = "red", ["pos"] = { - ["y"] = 504.74683163756, - ["x"] = -238890.14085771, - ["z"] = 615859.871189, + ["y"] = 506.90896808275, + ["x"] = -238890.09765484, + ["z"] = 615859.43884751, }, -- end of ["pos"] }, -- end of [16781824] [16783872] = @@ -2509,9 +2598,9 @@ aliveUnits = ["y"] = 654745.71428571, ["pos"] = { - ["y"] = 12.084689792163, - ["x"] = -293047.55373527, - ["z"] = 654726.74612589, + ["y"] = 12.092081669295, + ["x"] = -293045.32029431, + ["z"] = 654735.67442175, }, -- end of ["pos"] }, -- end of [16783872] [16785920] = @@ -2553,9 +2642,9 @@ aliveUnits = ["coalition"] = "blue", ["pos"] = { - ["y"] = 878.19875528093, - ["x"] = -297388.94747588, - ["z"] = 630756.80669453, + ["y"] = 803.26614010437, + ["x"] = -297356.80664321, + ["z"] = 630659.45639512, }, -- end of ["pos"] }, -- end of [16785920] [16787968] = @@ -2585,18 +2674,18 @@ aliveUnits = ["y"] = 653291.42857143, ["pos"] = { - ["y"] = 10.50833521483, - ["x"] = -293205.33993311, - ["z"] = 653291.76519743, + ["y"] = 10.508593796065, + ["x"] = -293205.47520804, + ["z"] = 653291.70292073, }, -- end of ["pos"] }, -- end of [16787968] [16792064] = { - ["alt"] = 60, + ["alt"] = 73, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2610,61 +2699,27 @@ aliveUnits = ["country"] = "usa", ["groupName"] = "teleGroup", ["countryId"] = 2, - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694985, + ["x"] = -285104, ["coalition"] = "blue", ["type"] = "Hawk ln", ["groupId"] = 35, - ["unitId"] = 57, - ["unitName"] = "Unit #007", + ["unitId"] = 56, + ["unitName"] = "Unit #006", ["pos"] = { - ["y"] = 60.498825073242, - ["x"] = -285149.125, - ["z"] = 689859.75, + ["y"] = 73.475082397461, + ["x"] = -285103.90625, + ["z"] = 694984.875, }, -- end of ["pos"] }, -- end of [16792064] - [16794112] = - { - ["alt"] = 48, - ["point"] = - { - ["y"] = 686871, - ["x"] = -286407, - }, -- end of ["point"] - ["coalitionId"] = 2, - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16794112, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["speed"] = 0, - ["type"] = "M-113", - ["groupId"] = 7004, - ["groupName"] = "USA gnd 2", - ["unitName"] = "USA gnd 2 unit1", - ["countryId"] = 2, - ["x"] = -286407, - ["country"] = "usa", - ["heading"] = 0, - ["unitId"] = 7007, - ["y"] = 686871, - ["coalition"] = "blue", - ["pos"] = - { - ["y"] = 47.951913858982, - ["x"] = -286407.15625, - ["z"] = 686871.4375, - }, -- end of ["pos"] - }, -- end of [16794112] [16796160] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2674,99 +2729,91 @@ aliveUnits = }, -- end of ["unit"] ["category"] = "vehicle", ["speed"] = 0, - ["heading"] = 1.4977557640291, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690360, + ["x"] = -285032, ["coalition"] = "blue", ["type"] = "M-1 Abrams", ["groupId"] = 7008, - ["unitId"] = 7015, - ["unitName"] = "USA gnd 3 unit4", + ["unitId"] = 7014, + ["unitName"] = "USA gnd 3 unit3", ["pos"] = { - ["y"] = 65.202388017452, - ["x"] = -285098.05627546, - ["z"] = 691756.83934286, + ["y"] = 61.763868858352, + ["x"] = -285032.15427946, + ["z"] = 690360.06593797, }, -- end of ["pos"] }, -- end of [16796160] [16798208] = { - ["alt"] = 69, + ["alt"] = 0, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] - ["coalitionId"] = 2, + ["coalitionId"] = 0, + ["livery_id"] = "ReubenJames", ["skill"] = "Average", ["unit"] = { ["id_"] = 16798208, }, -- end of ["unit"] - ["category"] = "vehicle", + ["category"] = "ship", ["speed"] = 0, - ["heading"] = 1.4977557701918, - ["country"] = "usa", - ["groupName"] = "USA gnd 5", - ["countryId"] = 2, - ["y"] = 695073, - ["x"] = -287442, - ["coalition"] = "blue", - ["type"] = "M-1 Abrams", - ["groupId"] = 7015, - ["unitId"] = 7023, - ["unitName"] = "USA gnd 5 unit1", + ["type"] = "PERRY", + ["groupId"] = 7014, + ["groupName"] = "AUSTRALIA shp 2", + ["unitName"] = "AUSTRALIA shp 2 unit1", + ["coalition"] = "neutral", + ["x"] = -162283, + ["country"] = "australia", + ["y"] = 267810, + ["heading"] = 0, + ["unitId"] = 7022, + ["countryId"] = 21, ["pos"] = { - ["y"] = 69.448234452506, - ["x"] = -287444.96647698, - ["z"] = 695072.71255626, + ["y"] = 0, + ["x"] = -162282.96875, + ["z"] = 267810.09375, }, -- end of ["pos"] }, -- end of [16798208] [16800256] = { - ["alt"] = 1997, + ["alt"] = 48, ["point"] = { - ["y"] = 682727, - ["x"] = -288608, + ["y"] = 686871, + ["x"] = -286447, }, -- end of ["point"] - ["alt_type"] = "BARO", ["coalitionId"] = 2, - ["livery_id"] = "usaf standard", - ["skill"] = "High", + ["skill"] = "Average", ["unit"] = { ["id_"] = 16800256, }, -- end of ["unit"] - ["category"] = "plane", - ["speed"] = 138.85196364465, - ["heading"] = 1.6162179734619, - ["groupId"] = 7019, - ["unitName"] = "USA air 5 unit1", - ["groupName"] = "USA air 5", - ["callsign"] = - { - [1] = 4, - [2] = 1, - [3] = 1, - ["name"] = "Colt11", - }, -- end of ["callsign"] - ["coalition"] = "blue", - ["x"] = -288608, - ["unitId"] = 7031, - ["type"] = "B-52H", - ["country"] = "usa", - ["y"] = 682727, + ["category"] = "vehicle", + ["speed"] = 0, + ["type"] = "M-113", + ["groupId"] = 7018, + ["groupName"] = "USA gnd 6", + ["unitName"] = "USA gnd 6 unit2", ["countryId"] = 2, + ["x"] = -286447, + ["country"] = "usa", + ["heading"] = 0, + ["unitId"] = 7030, + ["y"] = 686871, + ["coalition"] = "blue", ["pos"] = { - ["y"] = 1987.3907815825, - ["x"] = -288648.02914749, - ["z"] = 683613.54764354, + ["y"] = 47.876796607959, + ["x"] = -286447.15625, + ["z"] = 686871.4375, }, -- end of ["pos"] }, -- end of [16800256] } -- end of aliveUnits diff --git a/Example DBs/mist_DBs_const.lua b/Example DBs/mist_DBs_const.lua index 8253999..54c3551 100644 --- a/Example DBs/mist_DBs_const.lua +++ b/Example DBs/mist_DBs_const.lua @@ -141,58 +141,166 @@ const = { ["groupLimit"] = 9, }, -- end of ["rules"] - ["aircraft"] = + ["TRANSPORT"] = { - ["Uzi"] = 3, - ["Pontiac"] = 8, - ["Chevy"] = 7, - ["Dodge"] = 5, - ["Ford"] = 6, - ["Enfield"] = 1, - ["Colt"] = 4, - ["Springfield"] = 2, - }, -- end of ["aircraft"] - ["unique"] = - { - ["A10"] = + ["unique"] = { - ["Boar"] = 10, - ["Pig"] = 11, - ["rules"] = + ["b52"] = { - ["canUseAircraft"] = true, - ["appliesTo"] = + ["rules"] = { - [1] = "A-10C", - [2] = "A-10A", - }, -- end of ["appliesTo"] - }, -- end of ["rules"] - ["Tusk"] = 12, - ["Hawg"] = 9, - }, -- end of ["A10"] - }, -- end of ["unique"] - ["JTAC"] = - { - ["Ferret"] = 10, - ["Finger"] = 8, - ["Deathstar"] = 15, - ["Pointer"] = 4, - ["Anvil"] = 16, - ["Darknight"] = 2, - ["Whiplash"] = 7, - ["Warrior"] = 3, - ["Eyeball"] = 5, - ["Mantis"] = 18, - ["Playboy"] = 12, - ["Axeman"] = 1, - ["Moonbeam"] = 6, - ["Hammer"] = 13, - ["Shaba"] = 11, - ["Badger"] = 19, - ["Jaguar"] = 14, - ["Firefly"] = 17, - ["Pinpoint"] = 9, - }, -- end of ["JTAC"] + ["canUseAircraft"] = true, + ["appliesTo"] = + { + [1] = "B-52H", + }, -- end of ["appliesTo"] + }, -- end of ["rules"] + ["Dump"] = 10, + ["Kenworth"] = 11, + ["Buff"] = 9, + }, -- end of ["b52"] + ["f15e"] = + { + ["Rage"] = 17, + ["rules"] = + { + ["canUseAircraft"] = true, + ["appliesTo"] = + { + [1] = "F-15E", + }, -- end of ["appliesTo"] + }, -- end of ["rules"] + ["Trek"] = 12, + ["Thud"] = 10, + ["Sled"] = 14, + ["Gunny"] = 11, + ["Dude"] = 9, + ["Tahoe"] = 18, + ["Jazz"] = 16, + ["Best"] = 15, + ["Sniper"] = 13, + }, -- end of ["f15e"] + ["A10"] = + { + ["Boar"] = 10, + ["Pig"] = 11, + ["rules"] = + { + ["canUseAircraft"] = true, + ["appliesTo"] = + { + [1] = "A-10C_2", + [2] = "A-10C", + [3] = "A-10A", + }, -- end of ["appliesTo"] + }, -- end of ["rules"] + ["Tusk"] = 12, + ["Hawg"] = 9, + }, -- end of ["A10"] + ["f16"] = + { + ["rules"] = + { + ["canUseAircraft"] = true, + ["appliesTo"] = + { + [1] = "F-16C_50", + [2] = "F-16C bl.52d", + [3] = "F-16C bl.50", + [4] = "F-16A MLU", + [5] = "F-16A", + }, -- end of ["appliesTo"] + }, -- end of ["rules"] + ["Panther"] = 15, + ["Weasel"] = 17, + ["Viper"] = 9, + ["Lobo"] = 11, + ["Jedi"] = 20, + ["Ninja"] = 19, + ["Python"] = 13, + ["Wild"] = 18, + ["Rattler"] = 14, + ["Wolf"] = 16, + ["Cowboy"] = 12, + ["Venom"] = 10, + }, -- end of ["f16"] + ["b1"] = + { + ["Dark"] = 10, + ["rules"] = + { + ["canUseAircraft"] = true, + ["appliesTo"] = + { + [1] = "B-1B", + }, -- end of ["appliesTo"] + }, -- end of ["rules"] + ["Vader"] = 11, + ["Bone"] = 9, + }, -- end of ["b1"] + ["f18"] = + { + ["Jury"] = 14, + ["rules"] = + { + ["canUseAircraft"] = true, + ["appliesTo"] = + { + [1] = "FA-18C_hornet", + [2] = "F/A-18C", + }, -- end of ["appliesTo"] + }, -- end of ["rules"] + ["Ram"] = 16, + ["Roman"] = 12, + ["Hornet"] = 9, + ["Squid"] = 10, + ["Snake"] = 20, + ["Hawk"] = 17, + ["Devil"] = 18, + ["Check"] = 19, + ["Ragin"] = 11, + ["Jokey"] = 15, + ["Sting"] = 13, + }, -- end of ["f18"] + }, -- end of ["unique"] + ["Trash"] = 10, + ["aircraft"] = + { + ["Uzi"] = 3, + ["Pontiac"] = 8, + ["Chevy"] = 7, + ["Dodge"] = 5, + ["Ford"] = 6, + ["Enfield"] = 1, + ["Colt"] = 4, + ["Springfield"] = 2, + }, -- end of ["aircraft"] + ["JTAC"] = + { + ["Ferret"] = 10, + ["Finger"] = 8, + ["Deathstar"] = 15, + ["Pointer"] = 4, + ["Anvil"] = 16, + ["Darknight"] = 2, + ["Whiplash"] = 7, + ["Warrior"] = 3, + ["Eyeball"] = 5, + ["Mantis"] = 18, + ["Playboy"] = 12, + ["Axeman"] = 1, + ["Moonbeam"] = 6, + ["Hammer"] = 13, + ["Shaba"] = 11, + ["Badger"] = 19, + ["Jaguar"] = 14, + ["Firefly"] = 17, + ["Pinpoint"] = 9, + }, -- end of ["JTAC"] + ["Ascot"] = 12, + ["Cargo"] = 11, + ["Heavy"] = 9, + }, -- end of ["TRANSPORT"] ["TANKER"] = { ["Texaco"] = 1, diff --git a/Example DBs/mist_DBs_deadObjects.lua b/Example DBs/mist_DBs_deadObjects.lua index 83a387d..f8de8f4 100644 --- a/Example DBs/mist_DBs_deadObjects.lua +++ b/Example DBs/mist_DBs_deadObjects.lua @@ -1,58 +1,12 @@ deadObjects = { - [16783360] = - { - ["objectPos"] = - { - ["y"] = 11.949347758943, - ["x"] = -293002.76155801, - ["z"] = 654661.93956923, - }, -- end of ["objectPos"] - ["objectType"] = "vehicle", - ["objectData"] = - { - ["point"] = - { - ["y"] = 654665.71428571, - ["x"] = -292962.85714286, - }, -- end of ["point"] - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16783360, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["unitName"] = "RuBTRs4", - ["type"] = "BTR-80", - ["groupId"] = 13, - ["groupName"] = "RuBTRs", - ["countryId"] = 0, - ["coalition"] = "red", - ["x"] = -292962.85714286, - ["y"] = 654665.71428571, - ["heading"] = -1.7994767003775, - ["unitId"] = 30, - ["playerCanDrive"] = true, - ["country"] = "russia", - ["pos"] = - { - ["y"] = 11.942705180761, - ["x"] = -292999.01167319, - ["z"] = 654661.6137778, - }, -- end of ["pos"] - }, -- end of ["objectData"] - ["object"] = - { - ["id_"] = 16783360, - }, -- end of ["object"] - }, -- end of [16783360] [16782592] = { ["objectPos"] = { - ["y"] = 11.745858960922, - ["x"] = -292853.03376572, - ["z"] = 654539.31845625, + ["y"] = 11.75361563721, + ["x"] = -292856.39553252, + ["z"] = 654542.61205442, }, -- end of ["objectPos"] ["objectType"] = "vehicle", ["objectData"] = @@ -82,9 +36,9 @@ deadObjects = ["country"] = "russia", ["pos"] = { - ["y"] = 11.750308354347, - ["x"] = -292852.11861931, - ["z"] = 654539.33966137, + ["y"] = 11.754341371009, + ["x"] = -292856.19491841, + ["z"] = 654542.5822736, }, -- end of ["pos"] }, -- end of ["objectData"] ["object"] = @@ -92,59 +46,13 @@ deadObjects = ["id_"] = 16782592, }, -- end of ["object"] }, -- end of [16782592] - [16783616] = - { - ["objectPos"] = - { - ["y"] = 12.114658336158, - ["x"] = -293052.09177348, - ["z"] = 654688.79118826, - }, -- end of ["objectPos"] - ["objectType"] = "vehicle", - ["objectData"] = - { - ["point"] = - { - ["y"] = 654705.71428571, - ["x"] = -293002.85714286, - }, -- end of ["point"] - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16783616, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["unitName"] = "RuBTRs5", - ["type"] = "BTR-80", - ["groupId"] = 13, - ["groupName"] = "RuBTRs", - ["countryId"] = 0, - ["coalition"] = "red", - ["x"] = -293002.85714286, - ["y"] = 654705.71428571, - ["heading"] = -1.7994767003775, - ["unitId"] = 31, - ["playerCanDrive"] = true, - ["country"] = "russia", - ["pos"] = - { - ["y"] = 12.108674123943, - ["x"] = -293049.90666016, - ["z"] = 654690.7394103, - }, -- end of ["pos"] - }, -- end of ["objectData"] - ["object"] = - { - ["id_"] = 16783616, - }, -- end of ["object"] - }, -- end of [16783616] [16782848] = { ["objectPos"] = { - ["y"] = 11.895307197448, - ["x"] = -292885.90343864, - ["z"] = 654581.74191148, + ["y"] = 11.829393615855, + ["x"] = -292900.70531913, + ["z"] = 654582.31756955, }, -- end of ["objectPos"] ["objectType"] = "vehicle", ["objectData"] = @@ -174,9 +82,9 @@ deadObjects = ["country"] = "russia", ["pos"] = { - ["y"] = 11.896243705612, - ["x"] = -292885.8154643, - ["z"] = 654581.81480703, + ["y"] = 11.835539878247, + ["x"] = -292898.99755273, + ["z"] = 654582.04906262, }, -- end of ["pos"] }, -- end of ["objectData"] ["object"] = @@ -184,59 +92,13 @@ deadObjects = ["id_"] = 16782848, }, -- end of ["object"] }, -- end of [16782848] - [16783872] = - { - ["objectPos"] = - { - ["y"] = 12.083325901948, - ["x"] = -293047.96598556, - ["z"] = 654725.0984902, - }, -- end of ["objectPos"] - ["objectType"] = "vehicle", - ["objectData"] = - { - ["point"] = - { - ["y"] = 654745.71428571, - ["x"] = -293042.85714286, - }, -- end of ["point"] - ["skill"] = "Average", - ["unit"] = - { - ["id_"] = 16783872, - }, -- end of ["unit"] - ["category"] = "vehicle", - ["unitName"] = "RuBTRs6", - ["type"] = "BTR-80", - ["groupId"] = 13, - ["groupName"] = "RuBTRs", - ["countryId"] = 0, - ["coalition"] = "red", - ["x"] = -293042.85714286, - ["y"] = 654745.71428571, - ["heading"] = -1.7994767003775, - ["unitId"] = 32, - ["playerCanDrive"] = true, - ["country"] = "russia", - ["pos"] = - { - ["y"] = 12.084689792163, - ["x"] = -293047.55373527, - ["z"] = 654726.74612589, - }, -- end of ["pos"] - }, -- end of ["objectData"] - ["object"] = - { - ["id_"] = 16783872, - }, -- end of ["object"] - }, -- end of [16783872] [16783104] = { ["objectPos"] = { - ["y"] = 11.916789886161, - ["x"] = -292939.16858087, - ["z"] = 654619.78649539, + ["y"] = 11.923311694265, + ["x"] = -292943.35378497, + ["z"] = 654623.45115955, }, -- end of ["objectPos"] ["objectType"] = "vehicle", ["objectData"] = @@ -266,9 +128,9 @@ deadObjects = ["country"] = "russia", ["pos"] = { - ["y"] = 11.927206059256, - ["x"] = -292936.5144784, - ["z"] = 654619.49063824, + ["y"] = 11.931074299111, + ["x"] = -292941.20047403, + ["z"] = 654623.11353253, }, -- end of ["pos"] }, -- end of ["objectData"] ["object"] = @@ -276,4 +138,50 @@ deadObjects = ["id_"] = 16783104, }, -- end of ["object"] }, -- end of [16783104] + [16783616] = + { + ["objectPos"] = + { + ["y"] = 12.057971873824, + ["x"] = -293013.37808746, + ["z"] = 654700.95592945, + }, -- end of ["objectPos"] + ["objectType"] = "vehicle", + ["objectData"] = + { + ["point"] = + { + ["y"] = 654705.71428571, + ["x"] = -293002.85714286, + }, -- end of ["point"] + ["skill"] = "Average", + ["unit"] = + { + ["id_"] = 16783616, + }, -- end of ["unit"] + ["category"] = "vehicle", + ["unitName"] = "RuBTRs5", + ["type"] = "BTR-80", + ["groupId"] = 13, + ["groupName"] = "RuBTRs", + ["countryId"] = 0, + ["coalition"] = "red", + ["x"] = -293002.85714286, + ["y"] = 654705.71428571, + ["heading"] = -1.7994767003775, + ["unitId"] = 31, + ["playerCanDrive"] = true, + ["country"] = "russia", + ["pos"] = + { + ["y"] = 12.057955079325, + ["x"] = -293012.83464525, + ["z"] = 654701.02104299, + }, -- end of ["pos"] + }, -- end of ["objectData"] + ["object"] = + { + ["id_"] = 16783616, + }, -- end of ["object"] + }, -- end of [16783616] } -- end of deadObjects diff --git a/Example DBs/mist_DBs_drawingByName.lua b/Example DBs/mist_DBs_drawingByName.lua new file mode 100644 index 0000000..62b9170 --- /dev/null +++ b/Example DBs/mist_DBs_drawingByName.lua @@ -0,0 +1,232 @@ +drawingByName = +{ + ["Blue Line"] = + { + ["visible"] = true, + ["mapY"] = 653204.31828899, + ["primitiveType"] = "Line", + ["layer"] = "Author", + ["closed"] = false, + ["thickness"] = 8, + ["lineMode"] = "segments", + ["style"] = "solid", + ["layerName"] = "Author", + ["name"] = "Blue Line", + ["points"] = + { + [1] = + { + ["y"] = 653204.31828899, + ["x"] = -91302.340018104, + }, -- end of [1] + [2] = + { + ["y"] = 723491.4290735, + ["x"] = -90143.761268909, + }, -- end of [2] + [3] = + { + ["y"] = 725036.2007391, + ["x"] = -129921.63165795, + }, -- end of [3] + [4] = + { + ["y"] = 669810.61369412, + ["x"] = -127604.47415956, + }, -- end of [4] + [5] = + { + ["y"] = 707271.32658477, + ["x"] = -161203.25788622, + }, -- end of [5] + }, -- end of ["points"] + ["mapX"] = -91302.340018104, + ["colorString"] = "0x0000ffff", + }, -- end of ["Blue Line"] + ["Text Box 1"] = + { + ["visible"] = true, + ["fontSize"] = 24, + ["mapY"] = 821584.42983871, + ["primitiveType"] = "TextBox", + ["layer"] = "Author", + ["font"] = "DejaVuLGCSansCondensed.ttf", + ["mapX"] = -217973.61659679, + ["colorString"] = "0x004040ff", + ["name"] = "Text Box 1", + ["angle"] = 0, + ["text"] = "Objective HERE", + ["fillColorString"] = "0x00000080", + ["borderThickness"] = 4, + ["layerName"] = "Author", + }, -- end of ["Text Box 1"] + ["Red Line"] = + { + ["visible"] = true, + ["mapY"] = 624626.04247551, + ["primitiveType"] = "Line", + ["layer"] = "Author", + ["closed"] = false, + ["thickness"] = 8, + ["lineMode"] = "segment", + ["style"] = "solid", + ["layerName"] = "Author", + ["name"] = "Red Line", + ["points"] = + { + [1] = + { + ["y"] = 624626.04247551, + ["x"] = -35304.367140331, + }, -- end of [1] + [2] = + { + ["y"] = 650887.1607906, + ["x"] = -87440.410854119, + }, -- end of [2] + }, -- end of ["points"] + ["mapX"] = -35304.367140331, + ["colorString"] = "0xff0000ff", + }, -- end of ["Red Line"] + ["ellipse"] = + { + ["visible"] = true, + ["points"] = + { + [1] = + { + ["y"] = 830250.78116076, + ["x"] = 11345.221862616, + }, -- end of [1] + [2] = + { + ["y"] = 830744.08029641, + ["x"] = 5911.6635979767, + }, -- end of [2] + [3] = + { + ["y"] = 829981.52257348, + ["x"] = -2199.1070035738, + }, -- end of [3] + [4] = + { + ["y"] = 828015.0750406, + ["x"] = -12434.354329222, + }, -- end of [4] + [5] = + { + ["y"] = 824978.74784743, + ["x"] = -24096.563188272, + }, -- end of [5] + [6] = + { + ["y"] = 821079.46167442, + ["x"] = -36390.973319689, + }, -- end of [6] + [7] = + { + ["y"] = 816582.94643038, + ["x"] = -48479.740990492, + }, -- end of [7] + [8] = + { + ["y"] = 811795.63219835, + ["x"] = -59539.036661549, + }, -- end of [8] + [9] = + { + ["y"] = 807043.76653182, + ["x"] = -68815.187609226, + }, -- end of [9] + [10] = + { + ["y"] = 802651.18122316, + ["x"] = -75676.039476005, + }, -- end of [10] + [11] = + { + ["y"] = 798917.22370205, + ["x"] = -79654.036545258, + }, -- end of [11] + [12] = + { + ["y"] = 796096.35700289, + ["x"] = -80478.084890666, + }, -- end of [12] + [13] = + { + ["y"] = 794380.81852954, + ["x"] = -78092.026979294, + }, -- end of [13] + [14] = + { + ["y"] = 793887.51939389, + ["x"] = -72658.468714655, + }, -- end of [14] + [15] = + { + ["y"] = 794650.07711682, + ["x"] = -64547.698113104, + }, -- end of [15] + [16] = + { + ["y"] = 796616.5246497, + ["x"] = -54312.450787456, + }, -- end of [16] + [17] = + { + ["y"] = 799652.85184287, + ["x"] = -42650.241928406, + }, -- end of [17] + [18] = + { + ["y"] = 803552.13801588, + ["x"] = -30355.831796989, + }, -- end of [18] + [19] = + { + ["y"] = 808048.65325992, + ["x"] = -18267.064126186, + }, -- end of [19] + [20] = + { + ["y"] = 812835.96749195, + ["x"] = -7207.7684551292, + }, -- end of [20] + [21] = + { + ["y"] = 817587.83315848, + ["x"] = 2068.3824925484, + }, -- end of [21] + [22] = + { + ["y"] = 821980.41846714, + ["x"] = 8929.234359327, + }, -- end of [22] + [23] = + { + ["y"] = 825714.37598825, + ["x"] = 12907.23142858, + }, -- end of [23] + [24] = + { + ["y"] = 828535.24268741, + ["x"] = 13731.279773988, + }, -- end of [24] + }, -- end of ["points"] + ["layer"] = "Author", + ["r1"] = 49818.886215397, + ["mapY"] = 812315.79984515, + ["layerName"] = "Author", + ["name"] = "ellipse", + ["fillColorString"] = "0xffffff80", + ["thickness"] = 8, + ["polygonMode"] = "oval", + ["style"] = "solid", + ["colorString"] = "0x008000ff", + ["mapX"] = -33373.402558339, + ["angle"] = 19, + ["r2"] = 9268.6299935624, + ["primitiveType"] = "Polygon", + }, -- end of ["ellipse"] +} -- end of drawingByName diff --git a/Example DBs/mist_DBs_drawingIndexed.lua b/Example DBs/mist_DBs_drawingIndexed.lua new file mode 100644 index 0000000..8fbeb07 --- /dev/null +++ b/Example DBs/mist_DBs_drawingIndexed.lua @@ -0,0 +1,266 @@ +drawingIndexed = +{ + [1] = + { + ["visible"] = true, + ["hiddenOnPlanner"] = false, + ["mapY"] = 687961.68076485, + ["primitiveType"] = "Line", + ["layer"] = "Author", + ["closed"] = false, + ["thickness"] = 8, + ["colorString"] = "0xff0000ff", + ["style"] = "solid", + ["layerName"] = "Author", + ["name"] = "Red Line", + ["points"] = + { + [1] = + { + ["y"] = 687961.68076485, + ["x"] = -129535.43874155, + }, -- end of [1] + [2] = + { + ["y"] = 687961.68076485, + ["x"] = -129535.43874155, + }, -- end of [2] + [3] = + { + ["y"] = 686803.10201565, + ["x"] = -126832.08832676, + }, -- end of [3] + }, -- end of ["points"] + ["mapX"] = -129535.43874155, + ["lineMode"] = "segments", + }, -- end of [1] + [2] = + { + ["visible"] = true, + ["mapY"] = 624626.04247551, + ["primitiveType"] = "Line", + ["layer"] = "Author", + ["closed"] = false, + ["thickness"] = 8, + ["lineMode"] = "segment", + ["style"] = "solid", + ["layerName"] = "Author", + ["name"] = "Red Line", + ["points"] = + { + [1] = + { + ["y"] = 624626.04247551, + ["x"] = -35304.367140331, + }, -- end of [1] + [2] = + { + ["y"] = 650887.1607906, + ["x"] = -87440.410854119, + }, -- end of [2] + }, -- end of ["points"] + ["mapX"] = -35304.367140331, + ["colorString"] = "0xff0000ff", + }, -- end of [2] + [3] = + { + ["visible"] = true, + ["mapY"] = 653204.31828899, + ["primitiveType"] = "Line", + ["layer"] = "Author", + ["closed"] = false, + ["thickness"] = 8, + ["lineMode"] = "segments", + ["style"] = "solid", + ["layerName"] = "Author", + ["name"] = "Blue Line", + ["points"] = + { + [1] = + { + ["y"] = 653204.31828899, + ["x"] = -91302.340018104, + }, -- end of [1] + [2] = + { + ["y"] = 723491.4290735, + ["x"] = -90143.761268909, + }, -- end of [2] + [3] = + { + ["y"] = 725036.2007391, + ["x"] = -129921.63165795, + }, -- end of [3] + [4] = + { + ["y"] = 669810.61369412, + ["x"] = -127604.47415956, + }, -- end of [4] + [5] = + { + ["y"] = 707271.32658477, + ["x"] = -161203.25788622, + }, -- end of [5] + }, -- end of ["points"] + ["mapX"] = -91302.340018104, + ["colorString"] = "0x0000ffff", + }, -- end of [3] + [4] = + { + ["visible"] = true, + ["points"] = + { + [1] = + { + ["y"] = 830250.78116076, + ["x"] = 11345.221862616, + }, -- end of [1] + [2] = + { + ["y"] = 830744.08029641, + ["x"] = 5911.6635979767, + }, -- end of [2] + [3] = + { + ["y"] = 829981.52257348, + ["x"] = -2199.1070035738, + }, -- end of [3] + [4] = + { + ["y"] = 828015.0750406, + ["x"] = -12434.354329222, + }, -- end of [4] + [5] = + { + ["y"] = 824978.74784743, + ["x"] = -24096.563188272, + }, -- end of [5] + [6] = + { + ["y"] = 821079.46167442, + ["x"] = -36390.973319689, + }, -- end of [6] + [7] = + { + ["y"] = 816582.94643038, + ["x"] = -48479.740990492, + }, -- end of [7] + [8] = + { + ["y"] = 811795.63219835, + ["x"] = -59539.036661549, + }, -- end of [8] + [9] = + { + ["y"] = 807043.76653182, + ["x"] = -68815.187609226, + }, -- end of [9] + [10] = + { + ["y"] = 802651.18122316, + ["x"] = -75676.039476005, + }, -- end of [10] + [11] = + { + ["y"] = 798917.22370205, + ["x"] = -79654.036545258, + }, -- end of [11] + [12] = + { + ["y"] = 796096.35700289, + ["x"] = -80478.084890666, + }, -- end of [12] + [13] = + { + ["y"] = 794380.81852954, + ["x"] = -78092.026979294, + }, -- end of [13] + [14] = + { + ["y"] = 793887.51939389, + ["x"] = -72658.468714655, + }, -- end of [14] + [15] = + { + ["y"] = 794650.07711682, + ["x"] = -64547.698113104, + }, -- end of [15] + [16] = + { + ["y"] = 796616.5246497, + ["x"] = -54312.450787456, + }, -- end of [16] + [17] = + { + ["y"] = 799652.85184287, + ["x"] = -42650.241928406, + }, -- end of [17] + [18] = + { + ["y"] = 803552.13801588, + ["x"] = -30355.831796989, + }, -- end of [18] + [19] = + { + ["y"] = 808048.65325992, + ["x"] = -18267.064126186, + }, -- end of [19] + [20] = + { + ["y"] = 812835.96749195, + ["x"] = -7207.7684551292, + }, -- end of [20] + [21] = + { + ["y"] = 817587.83315848, + ["x"] = 2068.3824925484, + }, -- end of [21] + [22] = + { + ["y"] = 821980.41846714, + ["x"] = 8929.234359327, + }, -- end of [22] + [23] = + { + ["y"] = 825714.37598825, + ["x"] = 12907.23142858, + }, -- end of [23] + [24] = + { + ["y"] = 828535.24268741, + ["x"] = 13731.279773988, + }, -- end of [24] + }, -- end of ["points"] + ["layer"] = "Author", + ["r1"] = 49818.886215397, + ["mapY"] = 812315.79984515, + ["layerName"] = "Author", + ["name"] = "ellipse", + ["fillColorString"] = "0xffffff80", + ["thickness"] = 8, + ["polygonMode"] = "oval", + ["style"] = "solid", + ["colorString"] = "0x008000ff", + ["mapX"] = -33373.402558339, + ["angle"] = 19, + ["r2"] = 9268.6299935624, + ["primitiveType"] = "Polygon", + }, -- end of [4] + [5] = + { + ["visible"] = true, + ["fontSize"] = 24, + ["mapY"] = 821584.42983871, + ["primitiveType"] = "TextBox", + ["layer"] = "Author", + ["font"] = "DejaVuLGCSansCondensed.ttf", + ["mapX"] = -217973.61659679, + ["colorString"] = "0x004040ff", + ["name"] = "Text Box 1", + ["angle"] = 0, + ["text"] = "Objective HERE", + ["fillColorString"] = "0x00000080", + ["borderThickness"] = 4, + ["layerName"] = "Author", + }, -- end of [5] +} -- end of drawingIndexed diff --git a/Example DBs/mist_DBs_dynGroupsAdded.lua b/Example DBs/mist_DBs_dynGroupsAdded.lua index 891d013..2652bdf 100644 --- a/Example DBs/mist_DBs_dynGroupsAdded.lua +++ b/Example DBs/mist_DBs_dynGroupsAdded.lua @@ -9,11 +9,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -23,8 +23,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285145, - ["y"] = 689785, + ["x"] = -285046, + ["y"] = 694968, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -33,11 +33,11 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -47,8 +47,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285166, - ["y"] = 689948, + ["x"] = -285098, + ["y"] = 695126, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -57,11 +57,11 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -71,8 +71,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285298, - ["y"] = 689856, + ["x"] = -285039, + ["y"] = 694892, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -81,11 +81,11 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -95,8 +95,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285058, - ["y"] = 689796, + ["x"] = -284914, + ["y"] = 695084, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -105,11 +105,11 @@ dynGroupsAdded = }, -- end of [4] [5] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -119,8 +119,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285191, - ["y"] = 689973, + ["x"] = -285104, + ["y"] = 694985, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -129,11 +129,11 @@ dynGroupsAdded = }, -- end of [5] [6] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -143,8 +143,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285149, - ["y"] = 689860, + ["x"] = -285009, + ["y"] = 694877, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -153,11 +153,11 @@ dynGroupsAdded = }, -- end of [6] [7] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -167,8 +167,8 @@ dynGroupsAdded = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285216, - ["y"] = 689799, + ["x"] = -284964, + ["y"] = 694952, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -197,8 +197,8 @@ dynGroupsAdded = ["alt"] = 0, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -209,12 +209,12 @@ dynGroupsAdded = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -163065, + ["x"] = -164471, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7007, - ["y"] = 265153, + ["y"] = 267081, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -237,26 +237,26 @@ dynGroupsAdded = { [1] = { - ["alt"] = 65, + ["alt"] = 62, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693778, - ["x"] = -286660, + ["y"] = 693698, + ["x"] = -287512, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693778, - ["groupName"] = "USA static 1", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -286660, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 1", + ["unitId"] = 7005, + ["y"] = 693698, + ["x"] = -287512, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, ["groupId"] = 7005, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -278,11 +278,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -292,9 +292,9 @@ dynGroupsAdded = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284648, - ["y"] = 693761, - ["heading"] = 1.4977557542423, + ["x"] = -284982, + ["y"] = 692292, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -302,11 +302,11 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -316,9 +316,9 @@ dynGroupsAdded = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284456, - ["y"] = 693771, - ["heading"] = 1.4977557542423, + ["x"] = -284870, + ["y"] = 692208, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -326,11 +326,11 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -340,9 +340,9 @@ dynGroupsAdded = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284639, - ["y"] = 693781, - ["heading"] = 1.4977557542423, + ["x"] = -284971, + ["y"] = 692374, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -350,11 +350,11 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692388, + ["x"] = -284932, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -364,9 +364,9 @@ dynGroupsAdded = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284699, - ["y"] = 693653, - ["heading"] = 1.4977557629417, + ["x"] = -284932, + ["y"] = 692388, + ["heading"] = 1.4977557602231, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -566,11 +566,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 70, + ["alt"] = 57, ["point"] = { - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -581,8 +581,8 @@ dynGroupsAdded = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -609,11 +609,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 65, + ["alt"] = 63, ["point"] = { - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -624,8 +624,8 @@ dynGroupsAdded = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -710,22 +710,22 @@ dynGroupsAdded = ["type"] = "Sandbox", ["point"] = { - ["y"] = 693960, - ["x"] = -287585, + ["y"] = 692858, + ["x"] = -286636, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693960, - ["groupName"] = "USA static 3", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287585, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 3", + ["unitId"] = 7016, + ["y"] = 692858, + ["x"] = -286636, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, ["groupId"] = 7016, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -803,8 +803,8 @@ dynGroupsAdded = ["alt"] = 0, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -815,12 +815,12 @@ dynGroupsAdded = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -161099, + ["x"] = -162283, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7014, - ["y"] = 267048, + ["y"] = 267810, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -843,11 +843,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -857,9 +857,9 @@ dynGroupsAdded = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284967, - ["y"] = 691761, - ["heading"] = 1.4977557594982, + ["x"] = -284972, + ["y"] = 690419, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -867,11 +867,11 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -881,9 +881,9 @@ dynGroupsAdded = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284861, - ["y"] = 691809, - ["heading"] = 1.4977557625792, + ["x"] = -284846, + ["y"] = 690558, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -891,11 +891,11 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -905,9 +905,9 @@ dynGroupsAdded = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284982, - ["y"] = 691744, - ["heading"] = 1.4977557573233, + ["x"] = -285032, + ["y"] = 690360, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -915,11 +915,11 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690314, + ["x"] = -284956, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -929,9 +929,9 @@ dynGroupsAdded = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -285098, - ["y"] = 691757, - ["heading"] = 1.4977557640291, + ["x"] = -284956, + ["y"] = 690314, + ["heading"] = 1.497755755511, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -1023,11 +1023,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 69, + ["alt"] = 73, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1037,9 +1037,9 @@ dynGroupsAdded = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287442, - ["y"] = 695073, - ["heading"] = 1.4977557701918, + ["x"] = -283221, + ["y"] = 691751, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -1047,11 +1047,11 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 68, + ["alt"] = 74, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1061,9 +1061,9 @@ dynGroupsAdded = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287590, - ["y"] = 695090, - ["heading"] = 1.4977557591357, + ["x"] = -283194, + ["y"] = 691898, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -1071,11 +1071,11 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 69, + ["alt"] = 72, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691826, + ["x"] = -283357, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1085,9 +1085,9 @@ dynGroupsAdded = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287518, - ["y"] = 695151, - ["heading"] = 1.4977557660229, + ["x"] = -283357, + ["y"] = 691826, + ["heading"] = 1.4977557538798, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -1095,11 +1095,11 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 68, + ["alt"] = 72, ["point"] = { - ["y"] = 694882, - ["x"] = -287479, + ["y"] = 691852, + ["x"] = -283362, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1109,9 +1109,9 @@ dynGroupsAdded = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287479, - ["y"] = 694882, - ["heading"] = 1.4977557575044, + ["x"] = -283362, + ["y"] = 691852, + ["heading"] = 1.4977557720036, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -1257,11 +1257,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 73, + ["alt"] = 62, ["point"] = { - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1272,8 +1272,8 @@ dynGroupsAdded = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -1354,26 +1354,26 @@ dynGroupsAdded = { [1] = { - ["alt"] = 68, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693480, - ["x"] = -285622, + ["y"] = 692897, + ["x"] = -286503, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693480, - ["groupName"] = "USA static 5", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285622, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 5", + ["unitId"] = 7027, + ["y"] = 692897, + ["x"] = -286503, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, ["groupId"] = 7027, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -1397,8 +1397,8 @@ dynGroupsAdded = ["alt"] = 0, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 268107, + ["x"] = -163693, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -1409,12 +1409,12 @@ dynGroupsAdded = ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -163156, + ["x"] = -163693, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7021, - ["y"] = 268869, + ["y"] = 268107, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -1557,11 +1557,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693098, - ["x"] = -284021, + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1571,9 +1571,9 @@ dynGroupsAdded = ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284021, - ["y"] = 693098, - ["heading"] = 1.4977557645728, + ["x"] = -287355, + ["y"] = 692769, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -1581,23 +1581,23 @@ dynGroupsAdded = }, -- end of [1] [2] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284053, - ["y"] = 693012, - ["heading"] = 1.4877557641795, + ["x"] = -287476, + ["y"] = 692754, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -1605,23 +1605,23 @@ dynGroupsAdded = }, -- end of [2] [3] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -283898, - ["y"] = 693026, - ["heading"] = 1.5077557625432, + ["x"] = -287538, + ["y"] = 692726, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -1629,23 +1629,23 @@ dynGroupsAdded = }, -- end of [3] [4] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692766, + ["x"] = -287511, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284127, - ["y"] = 693093, - ["heading"] = 1.4877557641795, + ["x"] = -287511, + ["y"] = 692766, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -1727,8 +1727,8 @@ dynGroupsAdded = ["alt"] = 0, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 265427, + ["x"] = -164284, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -1739,12 +1739,12 @@ dynGroupsAdded = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -162226, + ["x"] = -164284, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7028, - ["y"] = 266075, + ["y"] = 265427, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -1767,11 +1767,11 @@ dynGroupsAdded = { [1] = { - ["alt"] = 55, + ["alt"] = 63, ["point"] = { - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1782,8 +1782,8 @@ dynGroupsAdded = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -1810,26 +1810,26 @@ dynGroupsAdded = { [1] = { - ["alt"] = 70, + ["alt"] = 56, ["type"] = "Sandbox", ["point"] = { - ["y"] = 694696, - ["x"] = -287053, + ["y"] = 691971, + ["x"] = -288088, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 694696, - ["groupName"] = "USA static 7", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287053, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 7", + ["unitId"] = 7038, + ["y"] = 691971, + ["x"] = -288088, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, ["groupId"] = 7038, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, diff --git a/Example DBs/mist_DBs_groupsById.lua b/Example DBs/mist_DBs_groupsById.lua index 6bb2060..f9e473a 100644 --- a/Example DBs/mist_DBs_groupsById.lua +++ b/Example DBs/mist_DBs_groupsById.lua @@ -1414,25 +1414,25 @@ groupsById = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, ["unitId"] = 45, + ["groupName"] = "cargoBob", + ["countryId"] = 2, + ["y"] = 675199.99999999, + ["mass"] = 371, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", ["x"] = -292007.14285714, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 31, }, -- end of [1] }, -- end of ["units"] }, -- end of [31] @@ -1449,25 +1449,25 @@ groupsById = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 674842.85714285, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cloneCargoBase", - ["groupId"] = 32, - ["countryId"] = 2, - ["mass"] = 1337, ["unitId"] = 46, + ["groupName"] = "cloneCargoBase", + ["countryId"] = 2, + ["y"] = 674842.85714285, + ["mass"] = 1337, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 32, }, -- end of [1] }, -- end of ["units"] }, -- end of [32] @@ -1592,11 +1592,11 @@ groupsById = { [1] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1606,8 +1606,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285145, - ["y"] = 689785, + ["x"] = -285046, + ["y"] = 694968, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -1616,11 +1616,11 @@ groupsById = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1630,8 +1630,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285166, - ["y"] = 689948, + ["x"] = -285098, + ["y"] = 695126, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -1640,11 +1640,11 @@ groupsById = }, -- end of [2] [3] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1654,8 +1654,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285298, - ["y"] = 689856, + ["x"] = -285039, + ["y"] = 694892, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -1664,11 +1664,11 @@ groupsById = }, -- end of [3] [4] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1678,8 +1678,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285058, - ["y"] = 689796, + ["x"] = -284914, + ["y"] = 695084, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -1688,11 +1688,11 @@ groupsById = }, -- end of [4] [5] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1702,8 +1702,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285191, - ["y"] = 689973, + ["x"] = -285104, + ["y"] = 694985, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -1712,11 +1712,11 @@ groupsById = }, -- end of [5] [6] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1726,8 +1726,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285149, - ["y"] = 689860, + ["x"] = -285009, + ["y"] = 694877, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -1736,11 +1736,11 @@ groupsById = }, -- end of [6] [7] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1750,8 +1750,8 @@ groupsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285216, - ["y"] = 689799, + ["x"] = -284964, + ["y"] = 694952, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -1934,25 +1934,25 @@ groupsById = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443856.28948724, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443856.28948724, ["x"] = -355322.45423175, - ["unitId"] = 63, + ["groupId"] = 40, ["category"] = "static", ["unitName"] = "static_on_ship1", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 40, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 63, }, -- end of [1] }, -- end of ["units"] }, -- end of [40] @@ -1968,25 +1968,25 @@ groupsById = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443849.03844635, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443849.03844635, ["x"] = -355322.27295572, - ["unitId"] = 64, + ["groupId"] = 41, ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 41, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 64, }, -- end of [1] }, -- end of ["units"] }, -- end of [41] @@ -2255,8 +2255,8 @@ groupsById = ["alt"] = 0, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 265427, + ["x"] = -164284, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2267,12 +2267,12 @@ groupsById = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -162226, + ["x"] = -164284, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7028, - ["y"] = 266075, + ["y"] = 265427, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -2295,11 +2295,11 @@ groupsById = { [1] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2309,9 +2309,9 @@ groupsById = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284648, - ["y"] = 693761, - ["heading"] = 1.4977557542423, + ["x"] = -284982, + ["y"] = 692292, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -2319,11 +2319,11 @@ groupsById = }, -- end of [1] [2] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2333,9 +2333,9 @@ groupsById = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284456, - ["y"] = 693771, - ["heading"] = 1.4977557542423, + ["x"] = -284870, + ["y"] = 692208, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -2343,11 +2343,11 @@ groupsById = }, -- end of [2] [3] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2357,9 +2357,9 @@ groupsById = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284639, - ["y"] = 693781, - ["heading"] = 1.4977557542423, + ["x"] = -284971, + ["y"] = 692374, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -2367,11 +2367,11 @@ groupsById = }, -- end of [3] [4] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692388, + ["x"] = -284932, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2381,9 +2381,9 @@ groupsById = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284699, - ["y"] = 693653, - ["heading"] = 1.4977557629417, + ["x"] = -284932, + ["y"] = 692388, + ["heading"] = 1.4977557602231, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -2517,11 +2517,11 @@ groupsById = { [1] = { - ["alt"] = 65, + ["alt"] = 63, ["point"] = { - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2532,8 +2532,8 @@ groupsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -2562,8 +2562,8 @@ groupsById = ["alt"] = 0, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 268107, + ["x"] = -163693, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2574,12 +2574,12 @@ groupsById = ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -163156, + ["x"] = -163693, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7021, - ["y"] = 268869, + ["y"] = 268107, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -2668,11 +2668,11 @@ groupsById = { [1] = { - ["alt"] = 70, + ["alt"] = 57, ["point"] = { - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2683,8 +2683,8 @@ groupsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -2713,8 +2713,8 @@ groupsById = ["alt"] = 0, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2725,12 +2725,12 @@ groupsById = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -161099, + ["x"] = -162283, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7014, - ["y"] = 267048, + ["y"] = 267810, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -2819,11 +2819,11 @@ groupsById = { [1] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693098, - ["x"] = -284021, + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2833,9 +2833,9 @@ groupsById = ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284021, - ["y"] = 693098, - ["heading"] = 1.4977557645728, + ["x"] = -287355, + ["y"] = 692769, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -2843,23 +2843,23 @@ groupsById = }, -- end of [1] [2] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284053, - ["y"] = 693012, - ["heading"] = 1.4877557641795, + ["x"] = -287476, + ["y"] = 692754, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -2867,23 +2867,23 @@ groupsById = }, -- end of [2] [3] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -283898, - ["y"] = 693026, - ["heading"] = 1.5077557625432, + ["x"] = -287538, + ["y"] = 692726, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2891,23 +2891,23 @@ groupsById = }, -- end of [3] [4] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692766, + ["x"] = -287511, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284127, - ["y"] = 693093, - ["heading"] = 1.4877557641795, + ["x"] = -287511, + ["y"] = 692766, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -2989,8 +2989,8 @@ groupsById = ["alt"] = 0, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -3001,12 +3001,12 @@ groupsById = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -163065, + ["x"] = -164471, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7007, - ["y"] = 265153, + ["y"] = 267081, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -3095,11 +3095,11 @@ groupsById = { [1] = { - ["alt"] = 69, + ["alt"] = 73, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3109,9 +3109,9 @@ groupsById = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287442, - ["y"] = 695073, - ["heading"] = 1.4977557701918, + ["x"] = -283221, + ["y"] = 691751, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -3119,11 +3119,11 @@ groupsById = }, -- end of [1] [2] = { - ["alt"] = 68, + ["alt"] = 74, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3133,9 +3133,9 @@ groupsById = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287590, - ["y"] = 695090, - ["heading"] = 1.4977557591357, + ["x"] = -283194, + ["y"] = 691898, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -3143,11 +3143,11 @@ groupsById = }, -- end of [2] [3] = { - ["alt"] = 69, + ["alt"] = 72, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691826, + ["x"] = -283357, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3157,9 +3157,9 @@ groupsById = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287518, - ["y"] = 695151, - ["heading"] = 1.4977557660229, + ["x"] = -283357, + ["y"] = 691826, + ["heading"] = 1.4977557538798, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -3167,11 +3167,11 @@ groupsById = }, -- end of [3] [4] = { - ["alt"] = 68, + ["alt"] = 72, ["point"] = { - ["y"] = 694882, - ["x"] = -287479, + ["y"] = 691852, + ["x"] = -283362, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3181,9 +3181,9 @@ groupsById = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287479, - ["y"] = 694882, - ["heading"] = 1.4977557575044, + ["x"] = -283362, + ["y"] = 691852, + ["heading"] = 1.4977557720036, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -3317,26 +3317,26 @@ groupsById = { [1] = { - ["alt"] = 70, + ["alt"] = 56, ["type"] = "Sandbox", ["point"] = { - ["y"] = 694696, - ["x"] = -287053, + ["y"] = 691971, + ["x"] = -288088, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 694696, - ["groupName"] = "USA static 7", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287053, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 7", + ["unitId"] = 7038, + ["y"] = 691971, + ["x"] = -288088, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, ["groupId"] = 7038, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -3424,11 +3424,11 @@ groupsById = { [1] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3438,9 +3438,9 @@ groupsById = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284967, - ["y"] = 691761, - ["heading"] = 1.4977557594982, + ["x"] = -284972, + ["y"] = 690419, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -3448,11 +3448,11 @@ groupsById = }, -- end of [1] [2] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3462,9 +3462,9 @@ groupsById = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284861, - ["y"] = 691809, - ["heading"] = 1.4977557625792, + ["x"] = -284846, + ["y"] = 690558, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -3472,11 +3472,11 @@ groupsById = }, -- end of [2] [3] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3486,9 +3486,9 @@ groupsById = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284982, - ["y"] = 691744, - ["heading"] = 1.4977557573233, + ["x"] = -285032, + ["y"] = 690360, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -3496,11 +3496,11 @@ groupsById = }, -- end of [3] [4] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690314, + ["x"] = -284956, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3510,9 +3510,9 @@ groupsById = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -285098, - ["y"] = 691757, - ["heading"] = 1.4977557640291, + ["x"] = -284956, + ["y"] = 690314, + ["heading"] = 1.497755755511, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -3596,22 +3596,22 @@ groupsById = ["type"] = "Sandbox", ["point"] = { - ["y"] = 693960, - ["x"] = -287585, + ["y"] = 692858, + ["x"] = -286636, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693960, - ["groupName"] = "USA static 3", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287585, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 3", + ["unitId"] = 7016, + ["y"] = 692858, + ["x"] = -286636, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, ["groupId"] = 7016, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -3687,11 +3687,11 @@ groupsById = { [1] = { - ["alt"] = 55, + ["alt"] = 63, ["point"] = { - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -3702,8 +3702,8 @@ groupsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, diff --git a/Example DBs/mist_DBs_groupsByName.lua b/Example DBs/mist_DBs_groupsByName.lua index a47f6ef..3d35283 100644 --- a/Example DBs/mist_DBs_groupsByName.lua +++ b/Example DBs/mist_DBs_groupsByName.lua @@ -10,11 +10,11 @@ groupsByName = { [1] = { - ["alt"] = 65, + ["alt"] = 63, ["point"] = { - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -25,8 +25,8 @@ groupsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -343,25 +343,25 @@ groupsByName = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 674842.85714285, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cloneCargoBase", - ["groupId"] = 32, - ["countryId"] = 2, - ["mass"] = 1337, ["unitId"] = 46, + ["groupName"] = "cloneCargoBase", + ["countryId"] = 2, + ["y"] = 674842.85714285, + ["mass"] = 1337, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 32, }, -- end of [1] }, -- end of ["units"] }, -- end of ["cloneCargoBase"] @@ -929,25 +929,25 @@ groupsByName = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443856.28948724, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443856.28948724, ["x"] = -355322.45423175, - ["unitId"] = 63, + ["groupId"] = 40, ["category"] = "static", ["unitName"] = "static_on_ship1", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 40, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 63, }, -- end of [1] }, -- end of ["units"] }, -- end of ["static_on_ship1"] @@ -1115,26 +1115,26 @@ groupsByName = { [1] = { - ["alt"] = 65, + ["alt"] = 62, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693778, - ["x"] = -286660, + ["y"] = 693698, + ["x"] = -287512, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693778, - ["groupName"] = "USA static 1", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -286660, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 1", + ["unitId"] = 7005, + ["y"] = 693698, + ["x"] = -287512, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, ["groupId"] = 7005, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -1216,22 +1216,22 @@ groupsByName = ["type"] = "Sandbox", ["point"] = { - ["y"] = 693960, - ["x"] = -287585, + ["y"] = 692858, + ["x"] = -286636, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693960, - ["groupName"] = "USA static 3", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287585, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 3", + ["unitId"] = 7016, + ["y"] = 692858, + ["x"] = -286636, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, ["groupId"] = 7016, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -1255,8 +1255,8 @@ groupsByName = ["alt"] = 0, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -1267,12 +1267,12 @@ groupsByName = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -161099, + ["x"] = -162283, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7014, - ["y"] = 267048, + ["y"] = 267810, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -1297,8 +1297,8 @@ groupsByName = ["alt"] = 0, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 265427, + ["x"] = -164284, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -1309,12 +1309,12 @@ groupsByName = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -162226, + ["x"] = -164284, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7028, - ["y"] = 266075, + ["y"] = 265427, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -1337,11 +1337,11 @@ groupsByName = { [1] = { - ["alt"] = 73, + ["alt"] = 62, ["point"] = { - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1352,8 +1352,8 @@ groupsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -1697,26 +1697,26 @@ groupsByName = { [1] = { - ["alt"] = 70, + ["alt"] = 56, ["type"] = "Sandbox", ["point"] = { - ["y"] = 694696, - ["x"] = -287053, + ["y"] = 691971, + ["x"] = -288088, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 694696, - ["groupName"] = "USA static 7", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287053, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 7", + ["unitId"] = 7038, + ["y"] = 691971, + ["x"] = -288088, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, ["groupId"] = 7038, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -1741,25 +1741,25 @@ groupsByName = [1] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, ["unitId"] = 45, + ["groupName"] = "cargoBob", + ["countryId"] = 2, + ["y"] = 675199.99999999, + ["mass"] = 371, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", ["x"] = -292007.14285714, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 31, }, -- end of [1] }, -- end of ["units"] }, -- end of ["cargoBob"] @@ -1919,11 +1919,11 @@ groupsByName = { [1] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1933,9 +1933,9 @@ groupsByName = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284648, - ["y"] = 693761, - ["heading"] = 1.4977557542423, + ["x"] = -284982, + ["y"] = 692292, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -1943,11 +1943,11 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1957,9 +1957,9 @@ groupsByName = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284456, - ["y"] = 693771, - ["heading"] = 1.4977557542423, + ["x"] = -284870, + ["y"] = 692208, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -1967,11 +1967,11 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1981,9 +1981,9 @@ groupsByName = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284639, - ["y"] = 693781, - ["heading"] = 1.4977557542423, + ["x"] = -284971, + ["y"] = 692374, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -1991,11 +1991,11 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692388, + ["x"] = -284932, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2005,9 +2005,9 @@ groupsByName = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284699, - ["y"] = 693653, - ["heading"] = 1.4977557629417, + ["x"] = -284932, + ["y"] = 692388, + ["heading"] = 1.4977557602231, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -2066,11 +2066,11 @@ groupsByName = { [1] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2080,8 +2080,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285145, - ["y"] = 689785, + ["x"] = -285046, + ["y"] = 694968, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -2090,11 +2090,11 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2104,8 +2104,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285166, - ["y"] = 689948, + ["x"] = -285098, + ["y"] = 695126, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -2114,11 +2114,11 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2128,8 +2128,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285298, - ["y"] = 689856, + ["x"] = -285039, + ["y"] = 694892, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -2138,11 +2138,11 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2152,8 +2152,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285058, - ["y"] = 689796, + ["x"] = -284914, + ["y"] = 695084, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -2162,11 +2162,11 @@ groupsByName = }, -- end of [4] [5] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2176,8 +2176,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285191, - ["y"] = 689973, + ["x"] = -285104, + ["y"] = 694985, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -2186,11 +2186,11 @@ groupsByName = }, -- end of [5] [6] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2200,8 +2200,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285149, - ["y"] = 689860, + ["x"] = -285009, + ["y"] = 694877, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -2210,11 +2210,11 @@ groupsByName = }, -- end of [6] [7] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2224,8 +2224,8 @@ groupsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285216, - ["y"] = 689799, + ["x"] = -284964, + ["y"] = 694952, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -2310,8 +2310,8 @@ groupsByName = ["alt"] = 0, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 268107, + ["x"] = -163693, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2322,12 +2322,12 @@ groupsByName = ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -163156, + ["x"] = -163693, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7021, - ["y"] = 268869, + ["y"] = 268107, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -2457,11 +2457,11 @@ groupsByName = { [1] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693098, - ["x"] = -284021, + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2471,9 +2471,9 @@ groupsByName = ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284021, - ["y"] = 693098, - ["heading"] = 1.4977557645728, + ["x"] = -287355, + ["y"] = 692769, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -2481,23 +2481,23 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284053, - ["y"] = 693012, - ["heading"] = 1.4877557641795, + ["x"] = -287476, + ["y"] = 692754, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -2505,23 +2505,23 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -283898, - ["y"] = 693026, - ["heading"] = 1.5077557625432, + ["x"] = -287538, + ["y"] = 692726, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2529,23 +2529,23 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692766, + ["x"] = -287511, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284127, - ["y"] = 693093, - ["heading"] = 1.4877557641795, + ["x"] = -287511, + ["y"] = 692766, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -2740,26 +2740,26 @@ groupsByName = { [1] = { - ["alt"] = 68, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693480, - ["x"] = -285622, + ["y"] = 692897, + ["x"] = -286503, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693480, - ["groupName"] = "USA static 5", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285622, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 5", + ["unitId"] = 7027, + ["y"] = 692897, + ["x"] = -286503, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, ["groupId"] = 7027, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -2955,11 +2955,11 @@ groupsByName = { [1] = { - ["alt"] = 69, + ["alt"] = 73, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2969,9 +2969,9 @@ groupsByName = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287442, - ["y"] = 695073, - ["heading"] = 1.4977557701918, + ["x"] = -283221, + ["y"] = 691751, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -2979,11 +2979,11 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 68, + ["alt"] = 74, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2993,9 +2993,9 @@ groupsByName = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287590, - ["y"] = 695090, - ["heading"] = 1.4977557591357, + ["x"] = -283194, + ["y"] = 691898, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -3003,11 +3003,11 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 69, + ["alt"] = 72, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691826, + ["x"] = -283357, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3017,9 +3017,9 @@ groupsByName = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287518, - ["y"] = 695151, - ["heading"] = 1.4977557660229, + ["x"] = -283357, + ["y"] = 691826, + ["heading"] = 1.4977557538798, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -3027,11 +3027,11 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 68, + ["alt"] = 72, ["point"] = { - ["y"] = 694882, - ["x"] = -287479, + ["y"] = 691852, + ["x"] = -283362, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3041,9 +3041,9 @@ groupsByName = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287479, - ["y"] = 694882, - ["heading"] = 1.4977557575044, + ["x"] = -283362, + ["y"] = 691852, + ["heading"] = 1.4977557720036, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -3135,11 +3135,11 @@ groupsByName = { [1] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3149,9 +3149,9 @@ groupsByName = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284967, - ["y"] = 691761, - ["heading"] = 1.4977557594982, + ["x"] = -284972, + ["y"] = 690419, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -3159,11 +3159,11 @@ groupsByName = }, -- end of [1] [2] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3173,9 +3173,9 @@ groupsByName = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284861, - ["y"] = 691809, - ["heading"] = 1.4977557625792, + ["x"] = -284846, + ["y"] = 690558, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -3183,11 +3183,11 @@ groupsByName = }, -- end of [2] [3] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3197,9 +3197,9 @@ groupsByName = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284982, - ["y"] = 691744, - ["heading"] = 1.4977557573233, + ["x"] = -285032, + ["y"] = 690360, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -3207,11 +3207,11 @@ groupsByName = }, -- end of [3] [4] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690314, + ["x"] = -284956, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -3221,9 +3221,9 @@ groupsByName = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -285098, - ["y"] = 691757, - ["heading"] = 1.4977557640291, + ["x"] = -284956, + ["y"] = 690314, + ["heading"] = 1.497755755511, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -3484,8 +3484,8 @@ groupsByName = ["alt"] = 0, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -3496,12 +3496,12 @@ groupsByName = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -163065, + ["x"] = -164471, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7007, - ["y"] = 265153, + ["y"] = 267081, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -3526,25 +3526,25 @@ groupsByName = { [1] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443849.03844635, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443849.03844635, ["x"] = -355322.27295572, - ["unitId"] = 64, + ["groupId"] = 41, ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 41, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 64, }, -- end of [1] }, -- end of ["units"] }, -- end of ["static_on_ship1 #001"] @@ -3823,11 +3823,11 @@ groupsByName = { [1] = { - ["alt"] = 55, + ["alt"] = 63, ["point"] = { - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -3838,8 +3838,8 @@ groupsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -3866,11 +3866,11 @@ groupsByName = { [1] = { - ["alt"] = 70, + ["alt"] = 57, ["point"] = { - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -3881,8 +3881,8 @@ groupsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, diff --git a/Example DBs/mist_DBs_markList.lua b/Example DBs/mist_DBs_markList.lua index 25100f2..1c9641e 100644 --- a/Example DBs/mist_DBs_markList.lua +++ b/Example DBs/mist_DBs_markList.lua @@ -140,11 +140,11 @@ markList = ["pos"] = { ["y"] = 0, - ["x"] = -355263.93360573, + ["x"] = -355264.17692343, [1] = { ["y"] = 0, - ["x"] = -355263.93360573, + ["x"] = -355264.17692343, ["z"] = 443853.03125, }, -- end of [1] ["z"] = 443853.03125, @@ -293,11 +293,11 @@ markList = ["pos"] = { ["y"] = 0, - ["x"] = -356064.09419542, + ["x"] = -356063.91153006, [1] = { ["y"] = 0, - ["x"] = -356064.09419542, + ["x"] = -356063.91153006, ["z"] = 444653.03125, }, -- end of [1] ["z"] = 444653.03125, diff --git a/Example DBs/mist_DBs_missionData.lua b/Example DBs/mist_DBs_missionData.lua index 4aa2080..1623ebc 100644 --- a/Example DBs/mist_DBs_missionData.lua +++ b/Example DBs/mist_DBs_missionData.lua @@ -1,6 +1,6 @@ missionData = { - ["version"] = 19, + ["version"] = 20, ["files"] = { }, -- end of ["files"] diff --git a/Example DBs/mist_DBs_removedAliveUnits.lua b/Example DBs/mist_DBs_removedAliveUnits.lua index d5dce08..d36d74a 100644 --- a/Example DBs/mist_DBs_removedAliveUnits.lua +++ b/Example DBs/mist_DBs_removedAliveUnits.lua @@ -96,38 +96,38 @@ removedAliveUnits = ["z"] = 681535.125, }, -- end of ["pos"] }, -- end of [16790016] - [16790272] = + [16782592] = { ["point"] = { - ["y"] = 681535.14285714, - ["x"] = -287156.85714286, + ["y"] = 654545.71428571, + ["x"] = -292842.85714286, }, -- end of ["point"] ["skill"] = "Average", ["unit"] = { - ["id_"] = 16790272, + ["id_"] = 16782592, }, -- end of ["unit"] ["category"] = "vehicle", - ["unitName"] = "Unit #008", - ["heading"] = 0, - ["unitId"] = 58, - ["groupName"] = "teleGroup", - ["countryId"] = 2, - ["coalition"] = "blue", - ["x"] = -287156.85714286, - ["type"] = "Hawk cwar", - ["groupId"] = 35, - ["country"] = "usa", + ["unitName"] = "RuBTRs1", + ["heading"] = -1.7994767003775, + ["unitId"] = 27, + ["groupName"] = "RuBTRs", + ["countryId"] = 0, + ["coalition"] = "red", + ["x"] = -292842.85714286, + ["type"] = "BTR-80", + ["groupId"] = 13, + ["country"] = "russia", ["playerCanDrive"] = true, - ["y"] = 681535.14285714, + ["y"] = 654545.71428571, ["pos"] = { - ["y"] = 34.752384185791, - ["x"] = -287156.84375, - ["z"] = 681535.125, + ["y"] = 11.754341371009, + ["x"] = -292856.19491841, + ["z"] = 654542.5822736, }, -- end of ["pos"] - }, -- end of [16790272] + }, -- end of [16782592] [16782848] = { ["point"] = @@ -155,9 +155,9 @@ removedAliveUnits = ["y"] = 654585.71428571, ["pos"] = { - ["y"] = 11.896243705612, - ["x"] = -292885.8154643, - ["z"] = 654581.81480703, + ["y"] = 11.835539878247, + ["x"] = -292898.99755273, + ["z"] = 654582.04906262, }, -- end of ["pos"] }, -- end of [16782848] [16783104] = @@ -187,43 +187,43 @@ removedAliveUnits = ["y"] = 654625.71428571, ["pos"] = { - ["y"] = 11.927206059256, - ["x"] = -292936.5144784, - ["z"] = 654619.49063824, + ["y"] = 11.931074299111, + ["x"] = -292941.20047403, + ["z"] = 654623.11353253, }, -- end of ["pos"] }, -- end of [16783104] - [16783360] = + [16783616] = { ["point"] = { - ["y"] = 654665.71428571, - ["x"] = -292962.85714286, + ["y"] = 654705.71428571, + ["x"] = -293002.85714286, }, -- end of ["point"] ["skill"] = "Average", ["unit"] = { - ["id_"] = 16783360, + ["id_"] = 16783616, }, -- end of ["unit"] ["category"] = "vehicle", - ["unitName"] = "RuBTRs4", + ["unitName"] = "RuBTRs5", ["heading"] = -1.7994767003775, - ["unitId"] = 30, + ["unitId"] = 31, ["groupName"] = "RuBTRs", ["countryId"] = 0, ["coalition"] = "red", - ["x"] = -292962.85714286, + ["x"] = -293002.85714286, ["type"] = "BTR-80", ["groupId"] = 13, ["country"] = "russia", ["playerCanDrive"] = true, - ["y"] = 654665.71428571, + ["y"] = 654705.71428571, ["pos"] = { - ["y"] = 11.942705180761, - ["x"] = -292999.01167319, - ["z"] = 654661.6137778, + ["y"] = 12.057955079325, + ["x"] = -293012.83464525, + ["z"] = 654701.02104299, }, -- end of ["pos"] - }, -- end of [16783360] + }, -- end of [16783616] [16788736] = { ["point"] = @@ -320,36 +320,36 @@ removedAliveUnits = ["z"] = 681535.125, }, -- end of ["pos"] }, -- end of [16789248] - [16782592] = + [16790272] = { ["point"] = { - ["y"] = 654545.71428571, - ["x"] = -292842.85714286, + ["y"] = 681535.14285714, + ["x"] = -287156.85714286, }, -- end of ["point"] ["skill"] = "Average", ["unit"] = { - ["id_"] = 16782592, + ["id_"] = 16790272, }, -- end of ["unit"] ["category"] = "vehicle", - ["unitName"] = "RuBTRs1", - ["heading"] = -1.7994767003775, - ["unitId"] = 27, - ["groupName"] = "RuBTRs", - ["countryId"] = 0, - ["coalition"] = "red", - ["x"] = -292842.85714286, - ["type"] = "BTR-80", - ["groupId"] = 13, - ["country"] = "russia", + ["unitName"] = "Unit #008", + ["heading"] = 0, + ["unitId"] = 58, + ["groupName"] = "teleGroup", + ["countryId"] = 2, + ["coalition"] = "blue", + ["x"] = -287156.85714286, + ["type"] = "Hawk cwar", + ["groupId"] = 35, + ["country"] = "usa", ["playerCanDrive"] = true, - ["y"] = 654545.71428571, + ["y"] = 681535.14285714, ["pos"] = { - ["y"] = 11.750308354347, - ["x"] = -292852.11861931, - ["z"] = 654539.33966137, + ["y"] = 34.752384185791, + ["x"] = -287156.84375, + ["z"] = 681535.125, }, -- end of ["pos"] - }, -- end of [16782592] + }, -- end of [16790272] } -- end of removedAliveUnits diff --git a/Example DBs/mist_DBs_units.lua b/Example DBs/mist_DBs_units.lua index 770a0e8..cb722ce 100644 --- a/Example DBs/mist_DBs_units.lua +++ b/Example DBs/mist_DBs_units.lua @@ -55,8 +55,8 @@ units = ["alt"] = 0, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -67,12 +67,12 @@ units = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -163065, + ["x"] = -164471, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7007, - ["y"] = 265153, + ["y"] = 267081, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -97,8 +97,8 @@ units = ["alt"] = 0, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -109,12 +109,12 @@ units = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -161099, + ["x"] = -162283, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7014, - ["y"] = 267048, + ["y"] = 267810, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -139,8 +139,8 @@ units = ["alt"] = 0, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 268107, + ["x"] = -163693, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -151,12 +151,12 @@ units = ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -163156, + ["x"] = -163693, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7021, - ["y"] = 268869, + ["y"] = 268107, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -181,8 +181,8 @@ units = ["alt"] = 0, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 265427, + ["x"] = -164284, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -193,12 +193,12 @@ units = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -162226, + ["x"] = -164284, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7028, - ["y"] = 266075, + ["y"] = 265427, ["country"] = "australia", }, -- end of [1] }, -- end of ["units"] @@ -802,25 +802,25 @@ units = [1] = { ["shape_name"] = "ab-212_cargo", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] - ["country"] = "usa", + ["groupId"] = 31, ["mass"] = 371, - ["categoryStatic"] = "Cargos", + ["heading"] = 0, ["groupName"] = "cargoBob", - ["type"] = "uh1h_cargo", - ["countryId"] = 2, + ["country"] = "usa", + ["y"] = 675199.99999999, ["x"] = -292007.14285714, - ["unitId"] = 45, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", - ["groupId"] = 31, + ["countryId"] = 2, + ["unitId"] = 45, ["coalition"] = "blue", - ["y"] = 675199.99999999, }, -- end of [1] }, -- end of ["units"] }, -- end of [4] @@ -837,25 +837,25 @@ units = [1] = { ["shape_name"] = "ab-212_cargo", - ["heading"] = 0, + ["type"] = "uh1h_cargo", ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] - ["country"] = "usa", + ["groupId"] = 32, ["mass"] = 1337, - ["categoryStatic"] = "Cargos", + ["heading"] = 0, ["groupName"] = "cloneCargoBase", - ["type"] = "uh1h_cargo", - ["countryId"] = 2, + ["country"] = "usa", + ["y"] = 674842.85714285, ["x"] = -291678.57142856, - ["unitId"] = 46, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", - ["groupId"] = 32, + ["countryId"] = 2, + ["unitId"] = 46, ["coalition"] = "blue", - ["y"] = 674842.85714285, }, -- end of [1] }, -- end of ["units"] }, -- end of [5] @@ -872,24 +872,24 @@ units = [1] = { ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["country"] = "usa", - ["categoryStatic"] = "Helicopters", + ["unitId"] = 63, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["groupId"] = 40, - ["countryId"] = 2, + ["country"] = "usa", + ["y"] = 443856.28948724, ["x"] = -355322.45423175, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1", - ["unitId"] = 63, + ["groupId"] = 40, + ["countryId"] = 2, ["coalition"] = "blue", - ["y"] = 443856.28948724, }, -- end of [1] }, -- end of ["units"] }, -- end of [6] @@ -906,24 +906,24 @@ units = [1] = { ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["country"] = "usa", - ["categoryStatic"] = "Helicopters", + ["unitId"] = 64, ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["groupId"] = 41, - ["countryId"] = 2, + ["country"] = "usa", + ["y"] = 443849.03844635, ["x"] = -355322.27295572, - ["type"] = "AH-1W", + ["categoryStatic"] = "Helicopters", ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["unitId"] = 64, + ["groupId"] = 41, + ["countryId"] = 2, ["coalition"] = "blue", - ["y"] = 443849.03844635, }, -- end of [1] }, -- end of ["units"] }, -- end of [7] @@ -937,26 +937,26 @@ units = { [1] = { - ["alt"] = 65, + ["alt"] = 62, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693778, - ["x"] = -286660, + ["y"] = 693698, + ["x"] = -287512, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693778, - ["groupName"] = "USA static 1", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -286660, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 1", + ["unitId"] = 7005, + ["y"] = 693698, + ["x"] = -287512, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, ["groupId"] = 7005, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -978,11 +978,11 @@ units = { [1] = { - ["alt"] = 70, + ["alt"] = 57, ["point"] = { - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -993,8 +993,8 @@ units = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -1021,11 +1021,11 @@ units = { [1] = { - ["alt"] = 65, + ["alt"] = 63, ["point"] = { - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1036,8 +1036,8 @@ units = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -1068,22 +1068,22 @@ units = ["type"] = "Sandbox", ["point"] = { - ["y"] = 693960, - ["x"] = -287585, + ["y"] = 692858, + ["x"] = -286636, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693960, - ["groupName"] = "USA static 3", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287585, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 3", + ["unitId"] = 7016, + ["y"] = 692858, + ["x"] = -286636, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, ["groupId"] = 7016, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -1105,11 +1105,11 @@ units = { [1] = { - ["alt"] = 73, + ["alt"] = 62, ["point"] = { - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1120,8 +1120,8 @@ units = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -1148,26 +1148,26 @@ units = { [1] = { - ["alt"] = 68, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693480, - ["x"] = -285622, + ["y"] = 692897, + ["x"] = -286503, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693480, - ["groupName"] = "USA static 5", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285622, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 5", + ["unitId"] = 7027, + ["y"] = 692897, + ["x"] = -286503, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, ["groupId"] = 7027, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -1189,11 +1189,11 @@ units = { [1] = { - ["alt"] = 55, + ["alt"] = 63, ["point"] = { - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1204,8 +1204,8 @@ units = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -1232,26 +1232,26 @@ units = { [1] = { - ["alt"] = 70, + ["alt"] = 56, ["type"] = "Sandbox", ["point"] = { - ["y"] = 694696, - ["x"] = -287053, + ["y"] = 691971, + ["x"] = -288088, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 694696, - ["groupName"] = "USA static 7", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287053, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 7", + ["unitId"] = 7038, + ["y"] = 691971, + ["x"] = -288088, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, ["groupId"] = 7038, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [1] }, -- end of ["units"] ["countryId"] = 2, @@ -1540,11 +1540,11 @@ units = { [1] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1554,8 +1554,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285145, - ["y"] = 689785, + ["x"] = -285046, + ["y"] = 694968, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -1564,11 +1564,11 @@ units = }, -- end of [1] [2] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1578,8 +1578,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285166, - ["y"] = 689948, + ["x"] = -285098, + ["y"] = 695126, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -1588,11 +1588,11 @@ units = }, -- end of [2] [3] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1602,8 +1602,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285298, - ["y"] = 689856, + ["x"] = -285039, + ["y"] = 694892, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -1612,11 +1612,11 @@ units = }, -- end of [3] [4] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1626,8 +1626,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285058, - ["y"] = 689796, + ["x"] = -284914, + ["y"] = 695084, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -1636,11 +1636,11 @@ units = }, -- end of [4] [5] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1650,8 +1650,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285191, - ["y"] = 689973, + ["x"] = -285104, + ["y"] = 694985, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -1660,11 +1660,11 @@ units = }, -- end of [5] [6] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1674,8 +1674,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285149, - ["y"] = 689860, + ["x"] = -285009, + ["y"] = 694877, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -1684,11 +1684,11 @@ units = }, -- end of [6] [7] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1698,8 +1698,8 @@ units = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285216, - ["y"] = 689799, + ["x"] = -284964, + ["y"] = 694952, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -1763,11 +1763,11 @@ units = { [1] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1777,9 +1777,9 @@ units = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284648, - ["y"] = 693761, - ["heading"] = 1.4977557542423, + ["x"] = -284982, + ["y"] = 692292, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -1787,11 +1787,11 @@ units = }, -- end of [1] [2] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1801,9 +1801,9 @@ units = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284456, - ["y"] = 693771, - ["heading"] = 1.4977557542423, + ["x"] = -284870, + ["y"] = 692208, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -1811,11 +1811,11 @@ units = }, -- end of [2] [3] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1825,9 +1825,9 @@ units = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284639, - ["y"] = 693781, - ["heading"] = 1.4977557542423, + ["x"] = -284971, + ["y"] = 692374, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -1835,11 +1835,11 @@ units = }, -- end of [3] [4] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692388, + ["x"] = -284932, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1849,9 +1849,9 @@ units = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284699, - ["y"] = 693653, - ["heading"] = 1.4977557629417, + ["x"] = -284932, + ["y"] = 692388, + ["heading"] = 1.4977557602231, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -1943,11 +1943,11 @@ units = { [1] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1957,9 +1957,9 @@ units = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284967, - ["y"] = 691761, - ["heading"] = 1.4977557594982, + ["x"] = -284972, + ["y"] = 690419, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -1967,11 +1967,11 @@ units = }, -- end of [1] [2] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1981,9 +1981,9 @@ units = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284861, - ["y"] = 691809, - ["heading"] = 1.4977557625792, + ["x"] = -284846, + ["y"] = 690558, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -1991,11 +1991,11 @@ units = }, -- end of [2] [3] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2005,9 +2005,9 @@ units = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284982, - ["y"] = 691744, - ["heading"] = 1.4977557573233, + ["x"] = -285032, + ["y"] = 690360, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -2015,11 +2015,11 @@ units = }, -- end of [3] [4] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690314, + ["x"] = -284956, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2029,9 +2029,9 @@ units = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -285098, - ["y"] = 691757, - ["heading"] = 1.4977557640291, + ["x"] = -284956, + ["y"] = 690314, + ["heading"] = 1.497755755511, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -2123,11 +2123,11 @@ units = { [1] = { - ["alt"] = 69, + ["alt"] = 73, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2137,9 +2137,9 @@ units = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287442, - ["y"] = 695073, - ["heading"] = 1.4977557701918, + ["x"] = -283221, + ["y"] = 691751, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -2147,11 +2147,11 @@ units = }, -- end of [1] [2] = { - ["alt"] = 68, + ["alt"] = 74, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2161,9 +2161,9 @@ units = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287590, - ["y"] = 695090, - ["heading"] = 1.4977557591357, + ["x"] = -283194, + ["y"] = 691898, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -2171,11 +2171,11 @@ units = }, -- end of [2] [3] = { - ["alt"] = 69, + ["alt"] = 72, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691826, + ["x"] = -283357, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2185,9 +2185,9 @@ units = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287518, - ["y"] = 695151, - ["heading"] = 1.4977557660229, + ["x"] = -283357, + ["y"] = 691826, + ["heading"] = 1.4977557538798, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -2195,11 +2195,11 @@ units = }, -- end of [3] [4] = { - ["alt"] = 68, + ["alt"] = 72, ["point"] = { - ["y"] = 694882, - ["x"] = -287479, + ["y"] = 691852, + ["x"] = -283362, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2209,9 +2209,9 @@ units = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287479, - ["y"] = 694882, - ["heading"] = 1.4977557575044, + ["x"] = -283362, + ["y"] = 691852, + ["heading"] = 1.4977557720036, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -2369,11 +2369,11 @@ units = { [1] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693098, - ["x"] = -284021, + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2383,9 +2383,9 @@ units = ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284021, - ["y"] = 693098, - ["heading"] = 1.4977557645728, + ["x"] = -287355, + ["y"] = 692769, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -2393,23 +2393,23 @@ units = }, -- end of [1] [2] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284053, - ["y"] = 693012, - ["heading"] = 1.4877557641795, + ["x"] = -287476, + ["y"] = 692754, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -2417,23 +2417,23 @@ units = }, -- end of [2] [3] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -283898, - ["y"] = 693026, - ["heading"] = 1.5077557625432, + ["x"] = -287538, + ["y"] = 692726, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2441,23 +2441,23 @@ units = }, -- end of [3] [4] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692766, + ["x"] = -287511, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284127, - ["y"] = 693093, - ["heading"] = 1.4877557641795, + ["x"] = -287511, + ["y"] = 692766, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, diff --git a/Example DBs/mist_DBs_unitsByCat.lua b/Example DBs/mist_DBs_unitsByCat.lua index fc11863..aff121c 100644 --- a/Example DBs/mist_DBs_unitsByCat.lua +++ b/Example DBs/mist_DBs_unitsByCat.lua @@ -389,8 +389,8 @@ unitsByCat = ["alt"] = 0, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -401,12 +401,12 @@ unitsByCat = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -163065, + ["x"] = -164471, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7007, - ["y"] = 265153, + ["y"] = 267081, ["country"] = "australia", }, -- end of [8] [9] = @@ -414,8 +414,8 @@ unitsByCat = ["alt"] = 0, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -426,12 +426,12 @@ unitsByCat = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -161099, + ["x"] = -162283, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7014, - ["y"] = 267048, + ["y"] = 267810, ["country"] = "australia", }, -- end of [9] [10] = @@ -439,8 +439,8 @@ unitsByCat = ["alt"] = 0, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 268107, + ["x"] = -163693, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -451,12 +451,12 @@ unitsByCat = ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -163156, + ["x"] = -163693, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7021, - ["y"] = 268869, + ["y"] = 268107, ["country"] = "australia", }, -- end of [10] [11] = @@ -464,8 +464,8 @@ unitsByCat = ["alt"] = 0, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 265427, + ["x"] = -164284, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -476,12 +476,12 @@ unitsByCat = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -162226, + ["x"] = -164284, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7028, - ["y"] = 266075, + ["y"] = 265427, ["country"] = "australia", }, -- end of [11] }, -- end of ["ship"] @@ -577,92 +577,92 @@ unitsByCat = [5] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, ["unitId"] = 45, + ["groupName"] = "cargoBob", + ["countryId"] = 2, + ["y"] = 675199.99999999, + ["mass"] = 371, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", ["x"] = -292007.14285714, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 31, }, -- end of [5] [6] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 674842.85714285, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cloneCargoBase", - ["groupId"] = 32, - ["countryId"] = 2, - ["mass"] = 1337, ["unitId"] = 46, + ["groupName"] = "cloneCargoBase", + ["countryId"] = 2, + ["y"] = 674842.85714285, + ["mass"] = 1337, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 32, }, -- end of [6] [7] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443856.28948724, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443856.28948724, ["x"] = -355322.45423175, - ["unitId"] = 63, + ["groupId"] = 40, ["category"] = "static", ["unitName"] = "static_on_ship1", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 40, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 63, }, -- end of [7] [8] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443849.03844635, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443849.03844635, ["x"] = -355322.27295572, - ["unitId"] = 64, + ["groupId"] = 41, ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 41, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 64, }, -- end of [8] [9] = { @@ -795,34 +795,34 @@ unitsByCat = }, -- end of [14] [15] = { - ["alt"] = 65, + ["alt"] = 62, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693778, - ["x"] = -286660, + ["y"] = 693698, + ["x"] = -287512, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693778, - ["groupName"] = "USA static 1", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -286660, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 1", + ["unitId"] = 7005, + ["y"] = 693698, + ["x"] = -287512, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, ["groupId"] = 7005, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [15] [16] = { - ["alt"] = 70, + ["alt"] = 57, ["point"] = { - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -833,8 +833,8 @@ unitsByCat = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -843,11 +843,11 @@ unitsByCat = }, -- end of [16] [17] = { - ["alt"] = 65, + ["alt"] = 63, ["point"] = { - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -858,8 +858,8 @@ unitsByCat = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -872,30 +872,30 @@ unitsByCat = ["type"] = "Sandbox", ["point"] = { - ["y"] = 693960, - ["x"] = -287585, + ["y"] = 692858, + ["x"] = -286636, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693960, - ["groupName"] = "USA static 3", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287585, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 3", + ["unitId"] = 7016, + ["y"] = 692858, + ["x"] = -286636, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, ["groupId"] = 7016, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [18] [19] = { - ["alt"] = 73, + ["alt"] = 62, ["point"] = { - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -906,8 +906,8 @@ unitsByCat = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -916,34 +916,34 @@ unitsByCat = }, -- end of [19] [20] = { - ["alt"] = 68, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693480, - ["x"] = -285622, + ["y"] = 692897, + ["x"] = -286503, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693480, - ["groupName"] = "USA static 5", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285622, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 5", + ["unitId"] = 7027, + ["y"] = 692897, + ["x"] = -286503, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, ["groupId"] = 7027, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [20] [21] = { - ["alt"] = 55, + ["alt"] = 63, ["point"] = { - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -954,8 +954,8 @@ unitsByCat = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -964,26 +964,26 @@ unitsByCat = }, -- end of [21] [22] = { - ["alt"] = 70, + ["alt"] = 56, ["type"] = "Sandbox", ["point"] = { - ["y"] = 694696, - ["x"] = -287053, + ["y"] = 691971, + ["x"] = -288088, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 694696, - ["groupName"] = "USA static 7", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287053, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 7", + ["unitId"] = 7038, + ["y"] = 691971, + ["x"] = -288088, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, ["groupId"] = 7038, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [22] }, -- end of ["static"] ["plane"] = @@ -1831,11 +1831,11 @@ unitsByCat = }, -- end of [11] [12] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1845,8 +1845,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285145, - ["y"] = 689785, + ["x"] = -285046, + ["y"] = 694968, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -1855,11 +1855,11 @@ unitsByCat = }, -- end of [12] [13] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1869,8 +1869,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285166, - ["y"] = 689948, + ["x"] = -285098, + ["y"] = 695126, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -1879,11 +1879,11 @@ unitsByCat = }, -- end of [13] [14] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1893,8 +1893,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285298, - ["y"] = 689856, + ["x"] = -285039, + ["y"] = 694892, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -1903,11 +1903,11 @@ unitsByCat = }, -- end of [14] [15] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1917,8 +1917,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285058, - ["y"] = 689796, + ["x"] = -284914, + ["y"] = 695084, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -1927,11 +1927,11 @@ unitsByCat = }, -- end of [15] [16] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1941,8 +1941,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285191, - ["y"] = 689973, + ["x"] = -285104, + ["y"] = 694985, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -1951,11 +1951,11 @@ unitsByCat = }, -- end of [16] [17] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1965,8 +1965,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285149, - ["y"] = 689860, + ["x"] = -285009, + ["y"] = 694877, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -1975,11 +1975,11 @@ unitsByCat = }, -- end of [17] [18] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1989,8 +1989,8 @@ unitsByCat = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285216, - ["y"] = 689799, + ["x"] = -284964, + ["y"] = 694952, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -2241,11 +2241,11 @@ unitsByCat = }, -- end of [29] [30] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2255,9 +2255,9 @@ unitsByCat = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284648, - ["y"] = 693761, - ["heading"] = 1.4977557542423, + ["x"] = -284982, + ["y"] = 692292, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -2265,11 +2265,11 @@ unitsByCat = }, -- end of [30] [31] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2279,9 +2279,9 @@ unitsByCat = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284456, - ["y"] = 693771, - ["heading"] = 1.4977557542423, + ["x"] = -284870, + ["y"] = 692208, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -2289,11 +2289,11 @@ unitsByCat = }, -- end of [31] [32] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2303,9 +2303,9 @@ unitsByCat = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284639, - ["y"] = 693781, - ["heading"] = 1.4977557542423, + ["x"] = -284971, + ["y"] = 692374, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -2313,11 +2313,11 @@ unitsByCat = }, -- end of [32] [33] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692388, + ["x"] = -284932, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2327,9 +2327,9 @@ unitsByCat = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284699, - ["y"] = 693653, - ["heading"] = 1.4977557629417, + ["x"] = -284932, + ["y"] = 692388, + ["heading"] = 1.4977557602231, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -2385,11 +2385,11 @@ unitsByCat = }, -- end of [35] [36] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2399,9 +2399,9 @@ unitsByCat = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284967, - ["y"] = 691761, - ["heading"] = 1.4977557594982, + ["x"] = -284972, + ["y"] = 690419, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -2409,11 +2409,11 @@ unitsByCat = }, -- end of [36] [37] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2423,9 +2423,9 @@ unitsByCat = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284861, - ["y"] = 691809, - ["heading"] = 1.4977557625792, + ["x"] = -284846, + ["y"] = 690558, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -2433,11 +2433,11 @@ unitsByCat = }, -- end of [37] [38] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2447,9 +2447,9 @@ unitsByCat = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284982, - ["y"] = 691744, - ["heading"] = 1.4977557573233, + ["x"] = -285032, + ["y"] = 690360, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -2457,11 +2457,11 @@ unitsByCat = }, -- end of [38] [39] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690314, + ["x"] = -284956, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2471,9 +2471,9 @@ unitsByCat = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -285098, - ["y"] = 691757, - ["heading"] = 1.4977557640291, + ["x"] = -284956, + ["y"] = 690314, + ["heading"] = 1.497755755511, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -2529,11 +2529,11 @@ unitsByCat = }, -- end of [41] [42] = { - ["alt"] = 69, + ["alt"] = 73, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2543,9 +2543,9 @@ unitsByCat = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287442, - ["y"] = 695073, - ["heading"] = 1.4977557701918, + ["x"] = -283221, + ["y"] = 691751, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -2553,11 +2553,11 @@ unitsByCat = }, -- end of [42] [43] = { - ["alt"] = 68, + ["alt"] = 74, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2567,9 +2567,9 @@ unitsByCat = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287590, - ["y"] = 695090, - ["heading"] = 1.4977557591357, + ["x"] = -283194, + ["y"] = 691898, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -2577,11 +2577,11 @@ unitsByCat = }, -- end of [43] [44] = { - ["alt"] = 69, + ["alt"] = 72, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691826, + ["x"] = -283357, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2591,9 +2591,9 @@ unitsByCat = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287518, - ["y"] = 695151, - ["heading"] = 1.4977557660229, + ["x"] = -283357, + ["y"] = 691826, + ["heading"] = 1.4977557538798, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -2601,11 +2601,11 @@ unitsByCat = }, -- end of [44] [45] = { - ["alt"] = 68, + ["alt"] = 72, ["point"] = { - ["y"] = 694882, - ["x"] = -287479, + ["y"] = 691852, + ["x"] = -283362, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2615,9 +2615,9 @@ unitsByCat = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287479, - ["y"] = 694882, - ["heading"] = 1.4977557575044, + ["x"] = -283362, + ["y"] = 691852, + ["heading"] = 1.4977557720036, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -2721,11 +2721,11 @@ unitsByCat = }, -- end of [49] [50] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693098, - ["x"] = -284021, + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2735,9 +2735,9 @@ unitsByCat = ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284021, - ["y"] = 693098, - ["heading"] = 1.4977557645728, + ["x"] = -287355, + ["y"] = 692769, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -2745,23 +2745,23 @@ unitsByCat = }, -- end of [50] [51] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284053, - ["y"] = 693012, - ["heading"] = 1.4877557641795, + ["x"] = -287476, + ["y"] = 692754, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -2769,23 +2769,23 @@ unitsByCat = }, -- end of [51] [52] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -283898, - ["y"] = 693026, - ["heading"] = 1.5077557625432, + ["x"] = -287538, + ["y"] = 692726, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2793,23 +2793,23 @@ unitsByCat = }, -- end of [52] [53] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692766, + ["x"] = -287511, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284127, - ["y"] = 693093, - ["heading"] = 1.4877557641795, + ["x"] = -287511, + ["y"] = 692766, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, diff --git a/Example DBs/mist_DBs_unitsById.lua b/Example DBs/mist_DBs_unitsById.lua index b9a6ec7..b46d4f7 100644 --- a/Example DBs/mist_DBs_unitsById.lua +++ b/Example DBs/mist_DBs_unitsById.lua @@ -1022,48 +1022,48 @@ unitsById = [45] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, ["unitId"] = 45, + ["groupName"] = "cargoBob", + ["countryId"] = 2, + ["y"] = 675199.99999999, + ["mass"] = 371, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", ["x"] = -292007.14285714, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 31, }, -- end of [45] [46] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 674842.85714285, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cloneCargoBase", - ["groupId"] = 32, - ["countryId"] = 2, - ["mass"] = 1337, ["unitId"] = 46, + ["groupName"] = "cloneCargoBase", + ["countryId"] = 2, + ["y"] = 674842.85714285, + ["mass"] = 1337, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 32, }, -- end of [46] [47] = { @@ -1201,11 +1201,11 @@ unitsById = }, -- end of [51] [52] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1215,8 +1215,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285145, - ["y"] = 689785, + ["x"] = -285046, + ["y"] = 694968, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -1225,11 +1225,11 @@ unitsById = }, -- end of [52] [53] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1239,8 +1239,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285166, - ["y"] = 689948, + ["x"] = -285098, + ["y"] = 695126, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -1249,11 +1249,11 @@ unitsById = }, -- end of [53] [54] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1263,8 +1263,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285298, - ["y"] = 689856, + ["x"] = -285039, + ["y"] = 694892, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -1273,11 +1273,11 @@ unitsById = }, -- end of [54] [55] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1287,8 +1287,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285058, - ["y"] = 689796, + ["x"] = -284914, + ["y"] = 695084, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -1297,11 +1297,11 @@ unitsById = }, -- end of [55] [56] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1311,8 +1311,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285191, - ["y"] = 689973, + ["x"] = -285104, + ["y"] = 694985, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -1321,11 +1321,11 @@ unitsById = }, -- end of [56] [57] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1335,8 +1335,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285149, - ["y"] = 689860, + ["x"] = -285009, + ["y"] = 694877, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -1345,11 +1345,11 @@ unitsById = }, -- end of [57] [58] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1359,8 +1359,8 @@ unitsById = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285216, - ["y"] = 689799, + ["x"] = -284964, + ["y"] = 694952, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -1468,47 +1468,47 @@ unitsById = }, -- end of [62] [63] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443856.28948724, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443856.28948724, ["x"] = -355322.45423175, - ["unitId"] = 63, + ["groupId"] = 40, ["category"] = "static", ["unitName"] = "static_on_ship1", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 40, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 63, }, -- end of [63] [64] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443849.03844635, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443849.03844635, ["x"] = -355322.27295572, - ["unitId"] = 64, + ["groupId"] = 41, ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 41, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 64, }, -- end of [64] [65] = { @@ -1695,11 +1695,11 @@ unitsById = }, -- end of [7030] [7015] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690314, + ["x"] = -284956, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1709,9 +1709,9 @@ unitsById = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -285098, - ["y"] = 691757, - ["heading"] = 1.4977557640291, + ["x"] = -284956, + ["y"] = 690314, + ["heading"] = 1.497755755511, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -1756,22 +1756,22 @@ unitsById = ["type"] = "Sandbox", ["point"] = { - ["y"] = 693960, - ["x"] = -287585, + ["y"] = 692858, + ["x"] = -286636, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693960, - ["groupName"] = "USA static 3", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287585, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 3", + ["unitId"] = 7016, + ["y"] = 692858, + ["x"] = -286636, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, ["groupId"] = 7016, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [7016] [7032] = { @@ -1808,11 +1808,11 @@ unitsById = }, -- end of [7032] [7001] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1822,9 +1822,9 @@ unitsById = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284648, - ["y"] = 693761, - ["heading"] = 1.4977557542423, + ["x"] = -284982, + ["y"] = 692292, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -1832,11 +1832,11 @@ unitsById = }, -- end of [7001] [7017] = { - ["alt"] = 65, + ["alt"] = 63, ["point"] = { - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1847,8 +1847,8 @@ unitsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -1860,8 +1860,8 @@ unitsById = ["alt"] = 0, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 268107, + ["x"] = -163693, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -1872,21 +1872,21 @@ unitsById = ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -163156, + ["x"] = -163693, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7021, - ["y"] = 268869, + ["y"] = 268107, ["country"] = "australia", }, -- end of [7033] [7002] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1896,9 +1896,9 @@ unitsById = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284456, - ["y"] = 693771, - ["heading"] = 1.4977557542423, + ["x"] = -284870, + ["y"] = 692208, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -1930,11 +1930,11 @@ unitsById = }, -- end of [7018] [7034] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693098, - ["x"] = -284021, + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1944,9 +1944,9 @@ unitsById = ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284021, - ["y"] = 693098, - ["heading"] = 1.4977557645728, + ["x"] = -287355, + ["y"] = 692769, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -1954,11 +1954,11 @@ unitsById = }, -- end of [7034] [7003] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1968,9 +1968,9 @@ unitsById = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284639, - ["y"] = 693781, - ["heading"] = 1.4977557542423, + ["x"] = -284971, + ["y"] = 692374, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -2002,23 +2002,23 @@ unitsById = }, -- end of [7019] [7035] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284053, - ["y"] = 693012, - ["heading"] = 1.4877557641795, + ["x"] = -287476, + ["y"] = 692754, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -2026,11 +2026,11 @@ unitsById = }, -- end of [7035] [7004] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692388, + ["x"] = -284932, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2040,9 +2040,9 @@ unitsById = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284699, - ["y"] = 693653, - ["heading"] = 1.4977557629417, + ["x"] = -284932, + ["y"] = 692388, + ["heading"] = 1.4977557602231, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -2083,23 +2083,23 @@ unitsById = }, -- end of [7020] [7036] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -283898, - ["y"] = 693026, - ["heading"] = 1.5077557625432, + ["x"] = -287538, + ["y"] = 692726, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2107,26 +2107,26 @@ unitsById = }, -- end of [7036] [7005] = { - ["alt"] = 65, + ["alt"] = 62, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693778, - ["x"] = -286660, + ["y"] = 693698, + ["x"] = -287512, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693778, - ["groupName"] = "USA static 1", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -286660, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 1", + ["unitId"] = 7005, + ["y"] = 693698, + ["x"] = -287512, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, ["groupId"] = 7005, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [7005] [7021] = { @@ -2163,23 +2163,23 @@ unitsById = }, -- end of [7021] [7037] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692766, + ["x"] = -287511, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284127, - ["y"] = 693093, - ["heading"] = 1.4877557641795, + ["x"] = -287511, + ["y"] = 692766, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -2187,11 +2187,11 @@ unitsById = }, -- end of [7037] [7006] = { - ["alt"] = 70, + ["alt"] = 57, ["point"] = { - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2202,8 +2202,8 @@ unitsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -2215,8 +2215,8 @@ unitsById = ["alt"] = 0, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2227,36 +2227,36 @@ unitsById = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -161099, + ["x"] = -162283, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7014, - ["y"] = 267048, + ["y"] = 267810, ["country"] = "australia", }, -- end of [7022] [7038] = { - ["alt"] = 70, + ["alt"] = 56, ["type"] = "Sandbox", ["point"] = { - ["y"] = 694696, - ["x"] = -287053, + ["y"] = 691971, + ["x"] = -288088, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 694696, - ["groupName"] = "USA static 7", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287053, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 7", + ["unitId"] = 7038, + ["y"] = 691971, + ["x"] = -288088, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, ["groupId"] = 7038, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [7038] [7007] = { @@ -2284,11 +2284,11 @@ unitsById = }, -- end of [7007] [7023] = { - ["alt"] = 69, + ["alt"] = 73, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2298,9 +2298,9 @@ unitsById = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287442, - ["y"] = 695073, - ["heading"] = 1.4977557701918, + ["x"] = -283221, + ["y"] = 691751, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -2308,11 +2308,11 @@ unitsById = }, -- end of [7023] [7039] = { - ["alt"] = 55, + ["alt"] = 63, ["point"] = { - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2323,8 +2323,8 @@ unitsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -2357,11 +2357,11 @@ unitsById = }, -- end of [7008] [7024] = { - ["alt"] = 68, + ["alt"] = 74, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2371,9 +2371,9 @@ unitsById = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287590, - ["y"] = 695090, - ["heading"] = 1.4977557591357, + ["x"] = -283194, + ["y"] = 691898, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -2438,11 +2438,11 @@ unitsById = }, -- end of [7009] [7025] = { - ["alt"] = 69, + ["alt"] = 72, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691826, + ["x"] = -283357, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2452,9 +2452,9 @@ unitsById = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287518, - ["y"] = 695151, - ["heading"] = 1.4977557660229, + ["x"] = -283357, + ["y"] = 691826, + ["heading"] = 1.4977557538798, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -2519,11 +2519,11 @@ unitsById = }, -- end of [7010] [7026] = { - ["alt"] = 68, + ["alt"] = 72, ["point"] = { - ["y"] = 694882, - ["x"] = -287479, + ["y"] = 691852, + ["x"] = -283362, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2533,9 +2533,9 @@ unitsById = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287479, - ["y"] = 694882, - ["heading"] = 1.4977557575044, + ["x"] = -283362, + ["y"] = 691852, + ["heading"] = 1.4977557720036, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -2579,8 +2579,8 @@ unitsById = ["alt"] = 0, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2591,36 +2591,36 @@ unitsById = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -163065, + ["x"] = -164471, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7007, - ["y"] = 265153, + ["y"] = 267081, ["country"] = "australia", }, -- end of [7011] [7027] = { - ["alt"] = 68, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693480, - ["x"] = -285622, + ["y"] = 692897, + ["x"] = -286503, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693480, - ["groupName"] = "USA static 5", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285622, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 5", + ["unitId"] = 7027, + ["y"] = 692897, + ["x"] = -286503, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, ["groupId"] = 7027, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [7027] [7043] = { @@ -2657,11 +2657,11 @@ unitsById = }, -- end of [7043] [7012] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2671,9 +2671,9 @@ unitsById = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284967, - ["y"] = 691761, - ["heading"] = 1.4977557594982, + ["x"] = -284972, + ["y"] = 690419, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -2681,11 +2681,11 @@ unitsById = }, -- end of [7012] [7028] = { - ["alt"] = 73, + ["alt"] = 62, ["point"] = { - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2696,8 +2696,8 @@ unitsById = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -2709,8 +2709,8 @@ unitsById = ["alt"] = 0, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 265427, + ["x"] = -164284, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2721,21 +2721,21 @@ unitsById = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -162226, + ["x"] = -164284, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7028, - ["y"] = 266075, + ["y"] = 265427, ["country"] = "australia", }, -- end of [7044] [7013] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2745,9 +2745,9 @@ unitsById = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284861, - ["y"] = 691809, - ["heading"] = 1.4977557625792, + ["x"] = -284846, + ["y"] = 690558, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -2779,11 +2779,11 @@ unitsById = }, -- end of [7029] [7014] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2793,9 +2793,9 @@ unitsById = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284982, - ["y"] = 691744, - ["heading"] = 1.4977557573233, + ["x"] = -285032, + ["y"] = 690360, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, diff --git a/Example DBs/mist_DBs_unitsByName.lua b/Example DBs/mist_DBs_unitsByName.lua index 3a313c6..41d2f6e 100644 --- a/Example DBs/mist_DBs_unitsByName.lua +++ b/Example DBs/mist_DBs_unitsByName.lua @@ -101,11 +101,11 @@ unitsByName = }, -- end of ["AUSTRALIA air 8 unit1"] ["Unit #007"] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -115,8 +115,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285149, - ["y"] = 689860, + ["x"] = -285009, + ["y"] = 694877, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -181,23 +181,23 @@ unitsByName = }, -- end of ["2ship2"] ["USA gnd 7 unit3"] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -283898, - ["y"] = 693026, - ["heading"] = 1.5077557625432, + ["x"] = -287538, + ["y"] = 692726, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -268,11 +268,11 @@ unitsByName = }, -- end of ["1ship1"] ["Unit #005"] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -282,8 +282,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285058, - ["y"] = 689796, + ["x"] = -284914, + ["y"] = 695084, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -314,11 +314,11 @@ unitsByName = }, -- end of ["RuBTRs2"] ["USA gnd 1 unit3"] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -328,9 +328,9 @@ unitsByName = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284639, - ["y"] = 693781, - ["heading"] = 1.4977557542423, + ["x"] = -284971, + ["y"] = 692374, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -338,11 +338,11 @@ unitsByName = }, -- end of ["USA gnd 1 unit3"] ["Unit #004"] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -352,8 +352,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285298, - ["y"] = 689856, + ["x"] = -285039, + ["y"] = 694892, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -453,25 +453,25 @@ unitsByName = ["cloneCargoBase"] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 674842.85714285, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cloneCargoBase", - ["groupId"] = 32, - ["countryId"] = 2, - ["mass"] = 1337, ["unitId"] = 46, + ["groupName"] = "cloneCargoBase", + ["countryId"] = 2, + ["y"] = 674842.85714285, + ["mass"] = 1337, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 32, }, -- end of ["cloneCargoBase"] ["USTanks2_1"] = { @@ -611,11 +611,11 @@ unitsByName = }, -- end of ["RuTent2"] ["Unit #006"] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -625,8 +625,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285191, - ["y"] = 689973, + ["x"] = -285104, + ["y"] = 694985, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -679,11 +679,11 @@ unitsByName = }, -- end of ["tent"] ["USA gnd 1 unit1"] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -693,9 +693,9 @@ unitsByName = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284648, - ["y"] = 693761, - ["heading"] = 1.4977557542423, + ["x"] = -284982, + ["y"] = 692292, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -753,26 +753,26 @@ unitsByName = }, -- end of ["Ka-50s_1_1"] ["USA static 7"] = { - ["alt"] = 70, + ["alt"] = 56, ["type"] = "Sandbox", ["point"] = { - ["y"] = 694696, - ["x"] = -287053, + ["y"] = 691971, + ["x"] = -288088, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 694696, - ["groupName"] = "USA static 7", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287053, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 7", + ["unitId"] = 7038, + ["y"] = 691971, + ["x"] = -288088, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, ["groupId"] = 7038, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of ["USA static 7"] ["Ground-1-1"] = { @@ -798,34 +798,34 @@ unitsByName = }, -- end of ["Ground-1-1"] ["USA static 1"] = { - ["alt"] = 65, + ["alt"] = 62, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693778, - ["x"] = -286660, + ["y"] = 693698, + ["x"] = -287512, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693778, - ["groupName"] = "USA static 1", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -286660, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 1", + ["unitId"] = 7005, + ["y"] = 693698, + ["x"] = -287512, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, ["groupId"] = 7005, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of ["USA static 1"] ["AUSTRALIA shp 4 unit1"] = { ["alt"] = 0, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 265427, + ["x"] = -164284, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -836,12 +836,12 @@ unitsByName = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -162226, + ["x"] = -164284, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7028, - ["y"] = 266075, + ["y"] = 265427, ["country"] = "australia", }, -- end of ["AUSTRALIA shp 4 unit1"] ["US Ship #1"] = @@ -927,8 +927,8 @@ unitsByName = ["alt"] = 0, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -939,12 +939,12 @@ unitsByName = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -163065, + ["x"] = -164471, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7007, - ["y"] = 265153, + ["y"] = 267081, ["country"] = "australia", }, -- end of ["AUSTRALIA shp 1 unit1"] ["RuBTRs3"] = @@ -1008,8 +1008,8 @@ unitsByName = ["alt"] = 0, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -1020,12 +1020,12 @@ unitsByName = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -161099, + ["x"] = -162283, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7014, - ["y"] = 267048, + ["y"] = 267810, ["country"] = "australia", }, -- end of ["AUSTRALIA shp 2 unit1"] ["USA static 3"] = @@ -1034,42 +1034,42 @@ unitsByName = ["type"] = "Sandbox", ["point"] = { - ["y"] = 693960, - ["x"] = -287585, + ["y"] = 692858, + ["x"] = -286636, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693960, - ["groupName"] = "USA static 3", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287585, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 3", + ["unitId"] = 7016, + ["y"] = 692858, + ["x"] = -286636, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, ["groupId"] = 7016, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of ["USA static 3"] ["USA gnd 7 unit2"] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284053, - ["y"] = 693012, - ["heading"] = 1.4877557641795, + ["x"] = -287476, + ["y"] = 692754, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -1142,11 +1142,11 @@ unitsByName = }, -- end of ["Su-33 Client #2Unit"] ["USA gnd 7 unit1"] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693098, - ["x"] = -284021, + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1156,9 +1156,9 @@ unitsByName = ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284021, - ["y"] = 693098, - ["heading"] = 1.4977557645728, + ["x"] = -287355, + ["y"] = 692769, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -1166,23 +1166,23 @@ unitsByName = }, -- end of ["USA gnd 7 unit1"] ["USA gnd 7 unit4"] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692766, + ["x"] = -287511, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284127, - ["y"] = 693093, - ["heading"] = 1.4877557641795, + ["x"] = -287511, + ["y"] = 692766, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -1293,8 +1293,8 @@ unitsByName = ["alt"] = 0, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 268107, + ["x"] = -163693, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -1305,12 +1305,12 @@ unitsByName = ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -163156, + ["x"] = -163693, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7021, - ["y"] = 268869, + ["y"] = 268107, ["country"] = "australia", }, -- end of ["AUSTRALIA shp 3 unit1"] ["Unit #1"] = @@ -1337,26 +1337,26 @@ unitsByName = }, -- end of ["Unit #1"] ["USA static 5"] = { - ["alt"] = 68, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693480, - ["x"] = -285622, + ["y"] = 692897, + ["x"] = -286503, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693480, - ["groupName"] = "USA static 5", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285622, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 5", + ["unitId"] = 7027, + ["y"] = 692897, + ["x"] = -286503, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, ["groupId"] = 7027, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of ["USA static 5"] ["RuTanks4"] = { @@ -1437,11 +1437,11 @@ unitsByName = }, -- end of ["AUSTRALIA air 6 unit1"] ["USA gnd 3 unit2"] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1451,9 +1451,9 @@ unitsByName = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284861, - ["y"] = 691809, - ["heading"] = 1.4977557625792, + ["x"] = -284846, + ["y"] = 690558, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -1461,11 +1461,11 @@ unitsByName = }, -- end of ["USA gnd 3 unit2"] ["USA static 6"] = { - ["alt"] = 73, + ["alt"] = 62, ["point"] = { - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1476,8 +1476,8 @@ unitsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -1510,25 +1510,25 @@ unitsByName = }, -- end of ["USA gnd 6 unit2"] ["static_on_ship1"] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443856.28948724, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443856.28948724, ["x"] = -355322.45423175, - ["unitId"] = 63, + ["groupId"] = 40, ["category"] = "static", ["unitName"] = "static_on_ship1", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 40, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 63, }, -- end of ["static_on_ship1"] ["USA air 5 unit1"] = { @@ -1565,11 +1565,11 @@ unitsByName = }, -- end of ["USA air 5 unit1"] ["USA gnd 5 unit4"] = { - ["alt"] = 68, + ["alt"] = 72, ["point"] = { - ["y"] = 694882, - ["x"] = -287479, + ["y"] = 691852, + ["x"] = -283362, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1579,9 +1579,9 @@ unitsByName = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287479, - ["y"] = 694882, - ["heading"] = 1.4977557575044, + ["x"] = -283362, + ["y"] = 691852, + ["heading"] = 1.4977557720036, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -1611,11 +1611,11 @@ unitsByName = }, -- end of ["RuBTRs5"] ["USA gnd 5 unit3"] = { - ["alt"] = 69, + ["alt"] = 72, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691826, + ["x"] = -283357, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1625,9 +1625,9 @@ unitsByName = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287518, - ["y"] = 695151, - ["heading"] = 1.4977557660229, + ["x"] = -283357, + ["y"] = 691826, + ["heading"] = 1.4977557538798, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -1735,11 +1735,11 @@ unitsByName = }, -- end of ["static"] ["USA gnd 5 unit2"] = { - ["alt"] = 68, + ["alt"] = 74, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1749,9 +1749,9 @@ unitsByName = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287590, - ["y"] = 695090, - ["heading"] = 1.4977557591357, + ["x"] = -283194, + ["y"] = 691898, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -1759,11 +1759,11 @@ unitsByName = }, -- end of ["USA gnd 5 unit2"] ["USA gnd 5 unit1"] = { - ["alt"] = 69, + ["alt"] = 73, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1773,9 +1773,9 @@ unitsByName = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287442, - ["y"] = 695073, - ["heading"] = 1.4977557701918, + ["x"] = -283221, + ["y"] = 691751, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -1882,11 +1882,11 @@ unitsByName = }, -- end of ["Pilot #001"] ["USA gnd 3 unit4"] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690314, + ["x"] = -284956, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1896,9 +1896,9 @@ unitsByName = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -285098, - ["y"] = 691757, - ["heading"] = 1.4977557640291, + ["x"] = -284956, + ["y"] = 690314, + ["heading"] = 1.497755755511, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -1906,11 +1906,11 @@ unitsByName = }, -- end of ["USA gnd 3 unit4"] ["USA gnd 3 unit3"] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1920,9 +1920,9 @@ unitsByName = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284982, - ["y"] = 691744, - ["heading"] = 1.4977557573233, + ["x"] = -285032, + ["y"] = 690360, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -1930,11 +1930,11 @@ unitsByName = }, -- end of ["USA gnd 3 unit3"] ["USA gnd 3 unit1"] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1944,9 +1944,9 @@ unitsByName = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284967, - ["y"] = 691761, - ["heading"] = 1.4977557594982, + ["x"] = -284972, + ["y"] = 690419, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -2008,11 +2008,11 @@ unitsByName = }, -- end of ["USA air 7 unit1"] ["USA static 4"] = { - ["alt"] = 65, + ["alt"] = 63, ["point"] = { - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2023,8 +2023,8 @@ unitsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -2076,11 +2076,11 @@ unitsByName = }, -- end of ["RU Farp"] ["Unit #002"] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2090,8 +2090,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285145, - ["y"] = 689785, + ["x"] = -285046, + ["y"] = 694968, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -2125,25 +2125,25 @@ unitsByName = ["cargoBob"] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, ["unitId"] = 45, + ["groupName"] = "cargoBob", + ["countryId"] = 2, + ["y"] = 675199.99999999, + ["mass"] = 371, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", ["x"] = -292007.14285714, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 31, }, -- end of ["cargoBob"] ["USA air 1 unit1"] = { @@ -2180,11 +2180,11 @@ unitsByName = }, -- end of ["USA air 1 unit1"] ["USA gnd 1 unit4"] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692388, + ["x"] = -284932, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2194,9 +2194,9 @@ unitsByName = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284699, - ["y"] = 693653, - ["heading"] = 1.4977557629417, + ["x"] = -284932, + ["y"] = 692388, + ["heading"] = 1.4977557602231, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -2507,11 +2507,11 @@ unitsByName = }, -- end of ["Ground-2-1"] ["USA gnd 1 unit2"] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2521,9 +2521,9 @@ unitsByName = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284456, - ["y"] = 693771, - ["heading"] = 1.4977557542423, + ["x"] = -284870, + ["y"] = 692208, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -2555,11 +2555,11 @@ unitsByName = }, -- end of ["USA gnd 4 unit2"] ["Unit #008"] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2569,8 +2569,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285216, - ["y"] = 689799, + ["x"] = -284964, + ["y"] = 694952, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -2651,11 +2651,11 @@ unitsByName = }, -- end of ["RuBTRs6"] ["Unit #003"] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2665,8 +2665,8 @@ unitsByName = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285166, - ["y"] = 689948, + ["x"] = -285098, + ["y"] = 695126, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -2731,33 +2731,33 @@ unitsByName = }, -- end of ["RuBTRs4"] ["static_on_ship1 #001"] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443849.03844635, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443849.03844635, ["x"] = -355322.27295572, - ["unitId"] = 64, + ["groupId"] = 41, ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 41, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 64, }, -- end of ["static_on_ship1 #001"] ["USA static 8"] = { - ["alt"] = 55, + ["alt"] = 63, ["point"] = { - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2768,8 +2768,8 @@ unitsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -2778,11 +2778,11 @@ unitsByName = }, -- end of ["USA static 8"] ["USA static 2"] = { - ["alt"] = 70, + ["alt"] = 57, ["point"] = { - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2793,8 +2793,8 @@ unitsByName = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, diff --git a/Example DBs/mist_DBs_unitsByNum.lua b/Example DBs/mist_DBs_unitsByNum.lua index 89e5948..11d7247 100644 --- a/Example DBs/mist_DBs_unitsByNum.lua +++ b/Example DBs/mist_DBs_unitsByNum.lua @@ -247,92 +247,92 @@ unitsByNum = [11] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 675199.99999999, ["x"] = -292007.14285714, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 675199.99999999, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cargoBob", - ["groupId"] = 31, - ["countryId"] = 2, - ["mass"] = 371, ["unitId"] = 45, + ["groupName"] = "cargoBob", + ["countryId"] = 2, + ["y"] = 675199.99999999, + ["mass"] = 371, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cargoBob", ["x"] = -292007.14285714, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 31, }, -- end of [11] [12] = { ["shape_name"] = "ab-212_cargo", - ["type"] = "uh1h_cargo", + ["heading"] = 0, ["point"] = { ["y"] = 674842.85714285, ["x"] = -291678.57142856, }, -- end of ["point"] - ["categoryStatic"] = "Cargos", - ["y"] = 674842.85714285, + ["country"] = "usa", ["coalition"] = "blue", - ["groupName"] = "cloneCargoBase", - ["groupId"] = 32, - ["countryId"] = 2, - ["mass"] = 1337, ["unitId"] = 46, + ["groupName"] = "cloneCargoBase", + ["countryId"] = 2, + ["y"] = 674842.85714285, + ["mass"] = 1337, + ["categoryStatic"] = "Cargos", ["category"] = "static", ["unitName"] = "cloneCargoBase", ["x"] = -291678.57142856, - ["heading"] = 0, - ["country"] = "usa", + ["type"] = "uh1h_cargo", + ["groupId"] = 32, }, -- end of [12] [13] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443856.28948724, ["x"] = -355322.45423175, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443856.28948724, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443856.28948724, ["x"] = -355322.45423175, - ["unitId"] = 63, + ["groupId"] = 40, ["category"] = "static", ["unitName"] = "static_on_ship1", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 40, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 63, }, -- end of [13] [14] = { - ["heading"] = 0, + ["type"] = "AH-1W", ["point"] = { ["y"] = 443849.03844635, ["x"] = -355322.27295572, }, -- end of ["point"] - ["categoryStatic"] = "Helicopters", - ["y"] = 443849.03844635, + ["country"] = "usa", + ["coalition"] = "blue", ["livery_id"] = "USA Marines", ["groupName"] = "static_on_ship1 #001", - ["coalition"] = "blue", ["countryId"] = 2, + ["y"] = 443849.03844635, ["x"] = -355322.27295572, - ["unitId"] = 64, + ["groupId"] = 41, ["category"] = "static", ["unitName"] = "static_on_ship1 #001", - ["type"] = "AH-1W", - ["country"] = "usa", - ["groupId"] = 41, + ["categoryStatic"] = "Helicopters", + ["heading"] = 0, + ["unitId"] = 64, }, -- end of [14] [15] = { @@ -556,11 +556,11 @@ unitsByNum = }, -- end of [24] [25] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689785, - ["x"] = -285145, + ["y"] = 694968, + ["x"] = -285046, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -570,8 +570,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285145, - ["y"] = 689785, + ["x"] = -285046, + ["y"] = 694968, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #002", @@ -580,11 +580,11 @@ unitsByNum = }, -- end of [25] [26] = { - ["alt"] = 61, + ["alt"] = 74, ["point"] = { - ["y"] = 689948, - ["x"] = -285166, + ["y"] = 695126, + ["x"] = -285098, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -594,8 +594,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285166, - ["y"] = 689948, + ["x"] = -285098, + ["y"] = 695126, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #003", @@ -604,11 +604,11 @@ unitsByNum = }, -- end of [26] [27] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689856, - ["x"] = -285298, + ["y"] = 694892, + ["x"] = -285039, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -618,8 +618,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285298, - ["y"] = 689856, + ["x"] = -285039, + ["y"] = 694892, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #004", @@ -628,11 +628,11 @@ unitsByNum = }, -- end of [27] [28] = { - ["alt"] = 61, + ["alt"] = 75, ["point"] = { - ["y"] = 689796, - ["x"] = -285058, + ["y"] = 695084, + ["x"] = -284914, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -642,8 +642,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285058, - ["y"] = 689796, + ["x"] = -284914, + ["y"] = 695084, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #005", @@ -652,11 +652,11 @@ unitsByNum = }, -- end of [28] [29] = { - ["alt"] = 61, + ["alt"] = 73, ["point"] = { - ["y"] = 689973, - ["x"] = -285191, + ["y"] = 694985, + ["x"] = -285104, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -666,8 +666,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285191, - ["y"] = 689973, + ["x"] = -285104, + ["y"] = 694985, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #006", @@ -676,11 +676,11 @@ unitsByNum = }, -- end of [29] [30] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689860, - ["x"] = -285149, + ["y"] = 694877, + ["x"] = -285009, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -690,8 +690,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285149, - ["y"] = 689860, + ["x"] = -285009, + ["y"] = 694877, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #007", @@ -700,11 +700,11 @@ unitsByNum = }, -- end of [30] [31] = { - ["alt"] = 60, + ["alt"] = 74, ["point"] = { - ["y"] = 689799, - ["x"] = -285216, + ["y"] = 694952, + ["x"] = -284964, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -714,8 +714,8 @@ unitsByNum = ["groupId"] = 35, ["groupName"] = "teleGroup", ["countryId"] = 2, - ["x"] = -285216, - ["y"] = 689799, + ["x"] = -284964, + ["y"] = 694952, ["heading"] = 0, ["country"] = "usa", ["unitName"] = "Unit #008", @@ -1674,8 +1674,8 @@ unitsByNum = ["alt"] = 0, ["point"] = { - ["y"] = 265153, - ["x"] = -163065, + ["y"] = 267081, + ["x"] = -164471, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -1686,44 +1686,44 @@ unitsByNum = ["unitId"] = 7011, ["groupName"] = "AUSTRALIA shp 1", ["countryId"] = 21, - ["x"] = -163065, + ["x"] = -164471, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7007, - ["y"] = 265153, + ["y"] = 267081, ["country"] = "australia", }, -- end of [68] [69] = { - ["alt"] = 65, + ["alt"] = 62, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693778, - ["x"] = -286660, + ["y"] = 693698, + ["x"] = -287512, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693778, - ["groupName"] = "USA static 1", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -286660, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 1", + ["unitId"] = 7005, + ["y"] = 693698, + ["x"] = -287512, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 1", - ["unitId"] = 7005, - ["heading"] = 0, ["groupId"] = 7005, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [69] [70] = { - ["alt"] = 72, + ["alt"] = 67, ["point"] = { - ["y"] = 693761, - ["x"] = -284648, + ["y"] = 692292, + ["x"] = -284982, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1733,9 +1733,9 @@ unitsByNum = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284648, - ["y"] = 693761, - ["heading"] = 1.4977557542423, + ["x"] = -284982, + ["y"] = 692292, + ["heading"] = 1.4977557593169, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit1", ["unitId"] = 7001, @@ -1743,11 +1743,11 @@ unitsByNum = }, -- end of [70] [71] = { - ["alt"] = 73, + ["alt"] = 67, ["point"] = { - ["y"] = 693771, - ["x"] = -284456, + ["y"] = 692208, + ["x"] = -284870, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1757,9 +1757,9 @@ unitsByNum = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284456, - ["y"] = 693771, - ["heading"] = 1.4977557542423, + ["x"] = -284870, + ["y"] = 692208, + ["heading"] = 1.4977557696476, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit2", ["unitId"] = 7002, @@ -1767,11 +1767,11 @@ unitsByNum = }, -- end of [71] [72] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693781, - ["x"] = -284639, + ["y"] = 692374, + ["x"] = -284971, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1781,9 +1781,9 @@ unitsByNum = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284639, - ["y"] = 693781, - ["heading"] = 1.4977557542423, + ["x"] = -284971, + ["y"] = 692374, + ["heading"] = 1.4977557676538, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit3", ["unitId"] = 7003, @@ -1791,11 +1791,11 @@ unitsByNum = }, -- end of [72] [73] = { - ["alt"] = 72, + ["alt"] = 68, ["point"] = { - ["y"] = 693653, - ["x"] = -284699, + ["y"] = 692388, + ["x"] = -284932, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -1805,9 +1805,9 @@ unitsByNum = ["groupId"] = 7001, ["groupName"] = "USA gnd 1", ["countryId"] = 2, - ["x"] = -284699, - ["y"] = 693653, - ["heading"] = 1.4977557629417, + ["x"] = -284932, + ["y"] = 692388, + ["heading"] = 1.4977557602231, ["country"] = "usa", ["unitName"] = "USA gnd 1 unit4", ["unitId"] = 7004, @@ -1929,11 +1929,11 @@ unitsByNum = }, -- end of [77] [78] = { - ["alt"] = 70, + ["alt"] = 57, ["point"] = { - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1944,8 +1944,8 @@ unitsByNum = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 2", - ["y"] = 691224, - ["x"] = -283405, + ["y"] = 691173, + ["x"] = -286924, ["coalition"] = "blue", ["unitId"] = 7006, ["heading"] = 0, @@ -1954,11 +1954,11 @@ unitsByNum = }, -- end of [78] [79] = { - ["alt"] = 65, + ["alt"] = 63, ["point"] = { - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -1969,8 +1969,8 @@ unitsByNum = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 4", - ["y"] = 693655, - ["x"] = -286667, + ["y"] = 694197, + ["x"] = -287544, ["coalition"] = "blue", ["unitId"] = 7017, ["heading"] = 0, @@ -2016,22 +2016,22 @@ unitsByNum = ["type"] = "Sandbox", ["point"] = { - ["y"] = 693960, - ["x"] = -287585, + ["y"] = 692858, + ["x"] = -286636, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693960, - ["groupName"] = "USA static 3", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287585, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 3", + ["unitId"] = 7016, + ["y"] = 692858, + ["x"] = -286636, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 3", - ["unitId"] = 7016, - ["heading"] = 0, ["groupId"] = 7016, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [81] [82] = { @@ -2071,8 +2071,8 @@ unitsByNum = ["alt"] = 0, ["point"] = { - ["y"] = 267048, - ["x"] = -161099, + ["y"] = 267810, + ["x"] = -162283, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2083,21 +2083,21 @@ unitsByNum = ["unitId"] = 7022, ["groupName"] = "AUSTRALIA shp 2", ["countryId"] = 21, - ["x"] = -161099, + ["x"] = -162283, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7014, - ["y"] = 267048, + ["y"] = 267810, ["country"] = "australia", }, -- end of [83] [84] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691761, - ["x"] = -284967, + ["y"] = 690419, + ["x"] = -284972, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2107,9 +2107,9 @@ unitsByNum = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284967, - ["y"] = 691761, - ["heading"] = 1.4977557594982, + ["x"] = -284972, + ["y"] = 690419, + ["heading"] = 1.4977557640291, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit1", ["unitId"] = 7012, @@ -2117,11 +2117,11 @@ unitsByNum = }, -- end of [84] [85] = { - ["alt"] = 66, + ["alt"] = 63, ["point"] = { - ["y"] = 691809, - ["x"] = -284861, + ["y"] = 690558, + ["x"] = -284846, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2131,9 +2131,9 @@ unitsByNum = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284861, - ["y"] = 691809, - ["heading"] = 1.4977557625792, + ["x"] = -284846, + ["y"] = 690558, + ["heading"] = 1.4977557580482, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit2", ["unitId"] = 7013, @@ -2141,11 +2141,11 @@ unitsByNum = }, -- end of [85] [86] = { - ["alt"] = 66, + ["alt"] = 62, ["point"] = { - ["y"] = 691744, - ["x"] = -284982, + ["y"] = 690360, + ["x"] = -285032, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2155,9 +2155,9 @@ unitsByNum = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -284982, - ["y"] = 691744, - ["heading"] = 1.4977557573233, + ["x"] = -285032, + ["y"] = 690360, + ["heading"] = 1.4977557565984, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit3", ["unitId"] = 7014, @@ -2165,11 +2165,11 @@ unitsByNum = }, -- end of [86] [87] = { - ["alt"] = 65, + ["alt"] = 62, ["point"] = { - ["y"] = 691757, - ["x"] = -285098, + ["y"] = 690314, + ["x"] = -284956, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2179,9 +2179,9 @@ unitsByNum = ["groupId"] = 7008, ["groupName"] = "USA gnd 3", ["countryId"] = 2, - ["x"] = -285098, - ["y"] = 691757, - ["heading"] = 1.4977557640291, + ["x"] = -284956, + ["y"] = 690314, + ["heading"] = 1.497755755511, ["country"] = "usa", ["unitName"] = "USA gnd 3 unit4", ["unitId"] = 7015, @@ -2237,11 +2237,11 @@ unitsByNum = }, -- end of [89] [90] = { - ["alt"] = 69, + ["alt"] = 73, ["point"] = { - ["y"] = 695073, - ["x"] = -287442, + ["y"] = 691751, + ["x"] = -283221, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2251,9 +2251,9 @@ unitsByNum = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287442, - ["y"] = 695073, - ["heading"] = 1.4977557701918, + ["x"] = -283221, + ["y"] = 691751, + ["heading"] = 1.4977557703725, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit1", ["unitId"] = 7023, @@ -2261,11 +2261,11 @@ unitsByNum = }, -- end of [90] [91] = { - ["alt"] = 68, + ["alt"] = 74, ["point"] = { - ["y"] = 695090, - ["x"] = -287590, + ["y"] = 691898, + ["x"] = -283194, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2275,9 +2275,9 @@ unitsByNum = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287590, - ["y"] = 695090, - ["heading"] = 1.4977557591357, + ["x"] = -283194, + ["y"] = 691898, + ["heading"] = 1.4977557634854, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit2", ["unitId"] = 7024, @@ -2285,11 +2285,11 @@ unitsByNum = }, -- end of [91] [92] = { - ["alt"] = 69, + ["alt"] = 72, ["point"] = { - ["y"] = 695151, - ["x"] = -287518, + ["y"] = 691826, + ["x"] = -283357, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2299,9 +2299,9 @@ unitsByNum = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287518, - ["y"] = 695151, - ["heading"] = 1.4977557660229, + ["x"] = -283357, + ["y"] = 691826, + ["heading"] = 1.4977557538798, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit3", ["unitId"] = 7025, @@ -2309,11 +2309,11 @@ unitsByNum = }, -- end of [92] [93] = { - ["alt"] = 68, + ["alt"] = 72, ["point"] = { - ["y"] = 694882, - ["x"] = -287479, + ["y"] = 691852, + ["x"] = -283362, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2323,9 +2323,9 @@ unitsByNum = ["groupId"] = 7015, ["groupName"] = "USA gnd 5", ["countryId"] = 2, - ["x"] = -287479, - ["y"] = 694882, - ["heading"] = 1.4977557575044, + ["x"] = -283362, + ["y"] = 691852, + ["heading"] = 1.4977557720036, ["country"] = "usa", ["unitName"] = "USA gnd 5 unit4", ["unitId"] = 7026, @@ -2414,11 +2414,11 @@ unitsByNum = }, -- end of [96] [97] = { - ["alt"] = 73, + ["alt"] = 62, ["point"] = { - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2429,8 +2429,8 @@ unitsByNum = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 6", - ["y"] = 695241, - ["x"] = -285338, + ["y"] = 691602, + ["x"] = -285948, ["coalition"] = "blue", ["unitId"] = 7028, ["heading"] = 0, @@ -2472,34 +2472,34 @@ unitsByNum = }, -- end of [98] [99] = { - ["alt"] = 68, + ["alt"] = 63, ["type"] = "Sandbox", ["point"] = { - ["y"] = 693480, - ["x"] = -285622, + ["y"] = 692897, + ["x"] = -286503, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 693480, - ["groupName"] = "USA static 5", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -285622, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 5", + ["unitId"] = 7027, + ["y"] = 692897, + ["x"] = -286503, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 5", - ["unitId"] = 7027, - ["heading"] = 0, ["groupId"] = 7027, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [99] [100] = { ["alt"] = 0, ["point"] = { - ["y"] = 268869, - ["x"] = -163156, + ["y"] = 268107, + ["x"] = -163693, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2510,12 +2510,12 @@ unitsByNum = ["unitId"] = 7033, ["groupName"] = "AUSTRALIA shp 3", ["countryId"] = 21, - ["x"] = -163156, + ["x"] = -163693, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7021, - ["y"] = 268869, + ["y"] = 268107, ["country"] = "australia", }, -- end of [100] [101] = @@ -2601,11 +2601,11 @@ unitsByNum = }, -- end of [103] [104] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693098, - ["x"] = -284021, + ["y"] = 692769, + ["x"] = -287355, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", @@ -2615,9 +2615,9 @@ unitsByNum = ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284021, - ["y"] = 693098, - ["heading"] = 1.4977557645728, + ["x"] = -287355, + ["y"] = 692769, + ["heading"] = 1.4977557591357, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit1", ["unitId"] = 7034, @@ -2625,23 +2625,23 @@ unitsByNum = }, -- end of [104] [105] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693012, - ["x"] = -284053, + ["y"] = 692754, + ["x"] = -287476, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 5.0056692998623e-05, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284053, - ["y"] = 693012, - ["heading"] = 1.4877557641795, + ["x"] = -287476, + ["y"] = 692754, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit2", ["unitId"] = 7035, @@ -2649,23 +2649,23 @@ unitsByNum = }, -- end of [105] [106] = { - ["alt"] = 74, + ["alt"] = 59, ["point"] = { - ["y"] = 693026, - ["x"] = -283898, + ["y"] = 692726, + ["x"] = -287538, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.00018869274936151, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -283898, - ["y"] = 693026, - ["heading"] = 1.5077557625432, + ["x"] = -287538, + ["y"] = 692726, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit3", ["unitId"] = 7036, @@ -2673,23 +2673,23 @@ unitsByNum = }, -- end of [106] [107] = { - ["alt"] = 73, + ["alt"] = 59, ["point"] = { - ["y"] = 693093, - ["x"] = -284127, + ["y"] = 692766, + ["x"] = -287511, }, -- end of ["point"] ["coalitionId"] = 2, ["skill"] = "Average", ["category"] = "vehicle", - ["speed"] = 0.0040063578450385, + ["speed"] = 0, ["type"] = "M-1 Abrams", ["groupId"] = 7022, ["groupName"] = "USA gnd 7", ["countryId"] = 2, - ["x"] = -284127, - ["y"] = 693093, - ["heading"] = 1.4877557641795, + ["x"] = -287511, + ["y"] = 692766, + ["heading"] = 1.4977557605856, ["country"] = "usa", ["unitName"] = "USA gnd 7 unit4", ["unitId"] = 7037, @@ -2733,8 +2733,8 @@ unitsByNum = ["alt"] = 0, ["point"] = { - ["y"] = 266075, - ["x"] = -162226, + ["y"] = 265427, + ["x"] = -164284, }, -- end of ["point"] ["coalitionId"] = 0, ["livery_id"] = "ReubenJames", @@ -2745,21 +2745,21 @@ unitsByNum = ["unitId"] = 7044, ["groupName"] = "AUSTRALIA shp 4", ["countryId"] = 21, - ["x"] = -162226, + ["x"] = -164284, ["speed"] = 0, ["coalition"] = "neutral", ["type"] = "PERRY", ["groupId"] = 7028, - ["y"] = 266075, + ["y"] = 265427, ["country"] = "australia", }, -- end of [109] [110] = { - ["alt"] = 55, + ["alt"] = 63, ["point"] = { - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, }, -- end of ["point"] ["categoryStatic"] = "Cargos", ["coalitionId"] = 2, @@ -2770,8 +2770,8 @@ unitsByNum = ["type"] = "uh1h_cargo", ["country"] = "usa", ["groupName"] = "USA static 8", - ["y"] = 689703, - ["x"] = -286460, + ["y"] = 693814, + ["x"] = -287262, ["coalition"] = "blue", ["unitId"] = 7039, ["heading"] = 0, @@ -2780,25 +2780,25 @@ unitsByNum = }, -- end of [110] [111] = { - ["alt"] = 70, + ["alt"] = 56, ["type"] = "Sandbox", ["point"] = { - ["y"] = 694696, - ["x"] = -287053, + ["y"] = 691971, + ["x"] = -288088, }, -- end of ["point"] - ["categoryStatic"] = "Fortifications", - ["coalitionId"] = 2, - ["y"] = 694696, - ["groupName"] = "USA static 7", ["country"] = "usa", - ["countryId"] = 2, - ["x"] = -287053, + ["coalitionId"] = 2, ["coalition"] = "blue", + ["groupName"] = "USA static 7", + ["unitId"] = 7038, + ["y"] = 691971, + ["x"] = -288088, + ["countryId"] = 2, ["category"] = "static", ["unitName"] = "USA static 7", - ["unitId"] = 7038, - ["heading"] = 0, ["groupId"] = 7038, + ["heading"] = 0, + ["categoryStatic"] = "Fortifications", }, -- end of [111] } -- end of unitsByNum diff --git a/Example DBs/mist_DBs_zonesByName.lua b/Example DBs/mist_DBs_zonesByName.lua index df6e698..9bd17e6 100644 --- a/Example DBs/mist_DBs_zonesByName.lua +++ b/Example DBs/mist_DBs_zonesByName.lua @@ -1,83 +1,5 @@ zonesByName = { - ["LZ zone"] = - { - ["radius"] = 3000, - ["zoneId"] = 2, - ["color"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - [4] = 0.14901960784314, - }, -- end of ["color"] - ["properties"] = - { - }, -- end of ["properties"] - ["hidden"] = false, - ["y"] = 614105.71428571, - ["x"] = -245328.57142857, - ["name"] = "LZ zone", - ["point"] = - { - ["y"] = 0, - ["x"] = -245328.57142857, - ["z"] = 614105.71428571, - }, -- end of ["point"] - ["type"] = 0, - }, -- end of ["LZ zone"] - ["explosion zone"] = - { - ["radius"] = 3000, - ["zoneId"] = 1, - ["color"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - [4] = 0.14901960784314, - }, -- end of ["color"] - ["properties"] = - { - }, -- end of ["properties"] - ["hidden"] = false, - ["y"] = 673819.99999999, - ["x"] = -271900, - ["name"] = "explosion zone", - ["point"] = - { - ["y"] = 0, - ["x"] = -271900, - ["z"] = 673819.99999999, - }, -- end of ["point"] - ["type"] = 0, - }, -- end of ["explosion zone"] - ["cloneZone"] = - { - ["radius"] = 3000, - ["zoneId"] = 3, - ["color"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - [4] = 0.14901960784314, - }, -- end of ["color"] - ["properties"] = - { - }, -- end of ["properties"] - ["hidden"] = false, - ["y"] = 692534.28571428, - ["x"] = -285971.42857143, - ["name"] = "cloneZone", - ["point"] = - { - ["y"] = 0, - ["x"] = -285971.42857143, - ["z"] = 692534.28571428, - }, -- end of ["point"] - ["type"] = 0, - }, -- end of ["cloneZone"] ["shipZone"] = { ["radius"] = 3000, @@ -104,4 +26,133 @@ zonesByName = }, -- end of ["point"] ["type"] = 0, }, -- end of ["shipZone"] + ["LZ zone"] = + { + ["radius"] = 3000, + ["zoneId"] = 2, + ["color"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + [4] = 0.14901960784314, + }, -- end of ["color"] + ["properties"] = + { + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 614105.71428571, + ["x"] = -245328.57142857, + ["name"] = "LZ zone", + ["point"] = + { + ["y"] = 0, + ["x"] = -245328.57142857, + ["z"] = 614105.71428571, + }, -- end of ["point"] + ["type"] = 0, + }, -- end of ["LZ zone"] + ["quad"] = + { + ["radius"] = 13592.958647037, + ["zoneId"] = 339, + ["color"] = + { + [1] = 1, + [2] = 0, + [3] = 0, + [4] = 0.14901960784314, + }, -- end of ["color"] + ["properties"] = + { + ["Property Value "] = "Eyyyyyyyy", + ["Prop 2 is an"] = "empty string", + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 590545.61946051, + ["x"] = -151821.41786062, + ["name"] = "quad", + ["point"] = + { + ["y"] = 0, + ["x"] = -151821.41786062, + ["z"] = 590545.61946051, + }, -- end of ["point"] + ["type"] = 2, + ["verticies"] = + { + [1] = + { + ["y"] = 583845.85427019, + ["x"] = -156926.00086276, + }, -- end of [1] + [2] = + { + ["y"] = 594153.18533222, + ["x"] = -161637.92363397, + }, -- end of [2] + [3] = + { + ["y"] = 601908.22489317, + ["x"] = -144360.87347286, + }, -- end of [3] + [4] = + { + ["y"] = 582275.21334645, + ["x"] = -144360.87347286, + }, -- end of [4] + }, -- end of ["verticies"] + }, -- end of ["quad"] + ["cloneZone"] = + { + ["radius"] = 3000, + ["zoneId"] = 3, + ["color"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + [4] = 0.14901960784314, + }, -- end of ["color"] + ["properties"] = + { + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 692534.28571428, + ["x"] = -285971.42857143, + ["name"] = "cloneZone", + ["point"] = + { + ["y"] = 0, + ["x"] = -285971.42857143, + ["z"] = 692534.28571428, + }, -- end of ["point"] + ["type"] = 0, + }, -- end of ["cloneZone"] + ["explosion zone"] = + { + ["radius"] = 3000, + ["zoneId"] = 1, + ["color"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + [4] = 0.14901960784314, + }, -- end of ["color"] + ["properties"] = + { + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 673819.99999999, + ["x"] = -271900, + ["name"] = "explosion zone", + ["point"] = + { + ["y"] = 0, + ["x"] = -271900, + ["z"] = 673819.99999999, + }, -- end of ["point"] + ["type"] = 0, + }, -- end of ["explosion zone"] } -- end of zonesByName diff --git a/Example DBs/mist_DBs_zonesByNum.lua b/Example DBs/mist_DBs_zonesByNum.lua index 44cd7a3..f4a8699 100644 --- a/Example DBs/mist_DBs_zonesByNum.lua +++ b/Example DBs/mist_DBs_zonesByNum.lua @@ -1,32 +1,6 @@ zonesByNum = { [1] = - { - ["radius"] = 3000, - ["zoneId"] = 2, - ["color"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - [4] = 0.14901960784314, - }, -- end of ["color"] - ["properties"] = - { - }, -- end of ["properties"] - ["hidden"] = false, - ["y"] = 614105.71428571, - ["x"] = -245328.57142857, - ["name"] = "LZ zone", - ["type"] = 0, - ["point"] = - { - ["y"] = 0, - ["x"] = -245328.57142857, - ["z"] = 614105.71428571, - }, -- end of ["point"] - }, -- end of [1] - [2] = { ["radius"] = 3000, ["zoneId"] = 3, @@ -51,34 +25,8 @@ zonesByNum = ["x"] = -285971.42857143, ["z"] = 692534.28571428, }, -- end of ["point"] - }, -- end of [2] - [3] = - { - ["radius"] = 3000, - ["zoneId"] = 174, - ["color"] = - { - [1] = 1, - [2] = 1, - [3] = 1, - [4] = 0.15, - }, -- end of ["color"] - ["properties"] = - { - }, -- end of ["properties"] - ["hidden"] = false, - ["y"] = 267139.69375223, - ["x"] = -163182.90396786, - ["name"] = "shipZone", - ["type"] = 0, - ["point"] = - { - ["y"] = 0, - ["x"] = -163182.90396786, - ["z"] = 267139.69375223, - }, -- end of ["point"] - }, -- end of [3] - [4] = + }, -- end of [1] + [2] = { ["radius"] = 3000, ["zoneId"] = 1, @@ -103,5 +51,108 @@ zonesByNum = ["x"] = -271900, ["z"] = 673819.99999999, }, -- end of ["point"] + }, -- end of [2] + [3] = + { + ["radius"] = 3000, + ["zoneId"] = 2, + ["color"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + [4] = 0.14901960784314, + }, -- end of ["color"] + ["properties"] = + { + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 614105.71428571, + ["x"] = -245328.57142857, + ["name"] = "LZ zone", + ["type"] = 0, + ["point"] = + { + ["y"] = 0, + ["x"] = -245328.57142857, + ["z"] = 614105.71428571, + }, -- end of ["point"] + }, -- end of [3] + [4] = + { + ["radius"] = 3000, + ["zoneId"] = 174, + ["color"] = + { + [1] = 1, + [2] = 1, + [3] = 1, + [4] = 0.15, + }, -- end of ["color"] + ["properties"] = + { + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 267139.69375223, + ["x"] = -163182.90396786, + ["name"] = "shipZone", + ["type"] = 0, + ["point"] = + { + ["y"] = 0, + ["x"] = -163182.90396786, + ["z"] = 267139.69375223, + }, -- end of ["point"] }, -- end of [4] + [5] = + { + ["radius"] = 13592.958647037, + ["zoneId"] = 339, + ["color"] = + { + [1] = 1, + [2] = 0, + [3] = 0, + [4] = 0.14901960784314, + }, -- end of ["color"] + ["properties"] = + { + ["Property Value "] = "Eyyyyyyyy", + ["Prop 2 is an"] = "empty string", + }, -- end of ["properties"] + ["hidden"] = false, + ["y"] = 590545.61946051, + ["x"] = -151821.41786062, + ["name"] = "quad", + ["point"] = + { + ["y"] = 0, + ["x"] = -151821.41786062, + ["z"] = 590545.61946051, + }, -- end of ["point"] + ["type"] = 2, + ["verticies"] = + { + [1] = + { + ["y"] = 583845.85427019, + ["x"] = -156926.00086276, + }, -- end of [1] + [2] = + { + ["y"] = 594153.18533222, + ["x"] = -161637.92363397, + }, -- end of [2] + [3] = + { + ["y"] = 601908.22489317, + ["x"] = -144360.87347286, + }, -- end of [3] + [4] = + { + ["y"] = 582275.21334645, + ["x"] = -144360.87347286, + }, -- end of [4] + }, -- end of ["verticies"] + }, -- end of [5] } -- end of zonesByNum diff --git a/mist.lua b/mist.lua index 3302d7f..de1499c 100644 --- a/mist.lua +++ b/mist.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 104 +mist.build = 106 -- forward declaration of log shorthand local log @@ -115,6 +115,17 @@ do -- the main scope zone.properties[prop.key] = prop.value end end + end + if zone.verticies then -- trust but verify + local r = 0 + for i = 1, #zone.verticies do + local dist = mist.utils.get2DDist(zone.point, zone.verticies[i]) + if dist > r then + r = mist.utils.deepCopy(dist) + end + end + zone.radius = r + end mist.DBs.zonesByName[zone_data.name] = zone @@ -123,6 +134,85 @@ do -- the main scope end end end + + mist.DBs.drawingByName = {} + mist.DBs.drawingIndexed = {} + + if env.mission.drawings and env.mission.drawings.layers then + for i = 1, #env.mission.drawings.layers do + local l = env.mission.drawings.layers[i] + + for j = 1, #l.objects do + local copy = mist.utils.deepCopy(l.objects[j]) + --log:warn(copy) + local doOffset = false + copy.layer = l.name + + local theta = copy.angle or 0 + theta = math.rad(theta) + if copy.primitiveType == "Polygon" then + + if copy.polygonMode == 'rect' then + local h, w = copy.height, copy.width + copy.points = {} + copy.points[1] = {x = h/2, y = w/2} + copy.points[2] = {x = -h/2, y = w/2} + copy.points[3] = {x = -h/2, y = -w/2} + copy.points[4] = {x = h/2, y = -w/2} + doOffset = true + elseif copy.polygonMode == "circle" then + copy.points = {x = copy.mapX, y = copy.mapY} + elseif copy.polygonMode == 'oval' then + -- oval bugs. Scale and rotation are off. + copy.points = {} + local numPoints = 24 + local angleStep = (math.pi*2)/numPoints + doOffset = true + for v = 1, numPoints do + local pointAngle = v * angleStep + local x = copy.r1 * math.cos(pointAngle) + local y = copy.r2 * math.sin(pointAngle) + + table.insert(copy.points,{x=x,y=y}) + + end + elseif copy.polygonMode == "arrow" then + doOffset = true + end + + -- NOTE TO SELF. FIGURE OUT WHICH SHAPES NEED TO BE OFFSET. OVAL YES. + --log:warn('check offset') + if theta ~= 0 and copy.points and doOffset == true then + + --log:warn('offsetting Values') + for p = 1, #copy.points do + local offset = mist.vec.rotateVec2(copy.points[p], theta) + copy.points[p] = offset + end + --log:warn(copy.points[1]) + end + + end + if copy.points and #copy.points > 1 then + for u = 1, #copy.points do + copy.points[u].x = copy.points[u].x + copy.mapX + copy.points[u].y = copy.points[u].y + copy.mapY + end + + end + if mist.DBs.drawingByName[copy.name] then + log:warn("Drawing by the name of [ $1 ] already exists in DB. Failed to add to mist.DBs.drawingByName.", copy.name) + else + + mist.DBs.drawingByName[copy.name] = copy + end + table.insert(mist.DBs.drawingIndexed, copy) + end + + end + + end + mist.DBs.navPoints = {} mist.DBs.units = {} @@ -319,6 +409,11 @@ do -- the main scope ['Arco'] = 2, ['Shell'] = 3, }, + ['TRANSPORT'] = { + ['Heavy'] = 9, + ['Trash'] = 10, + ['Cargo'] = 11, + ['Ascot'] = 12, ['JTAC'] = { ['Axeman'] = 1, ['Darknight'] = 2, @@ -360,14 +455,105 @@ do -- the main scope ['rules'] = { ['canUseAircraft'] = true, ['appliesTo'] = { - 'A-10C', + 'A-10C_2', + 'A-10C', 'A-10A', }, }, - }, - }, - }, - } + }, + ['f16'] = { + Viper = 9, + Venom = 10, + Lobo = 11, + Cowboy = 12, + Python = 13, + Rattler =14, + Panther = 15, + Wolf = 16, + Weasel = 17, + Wild = 18, + Ninja = 19, + Jedi = 20, + rules = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'F-16C_50', + 'F-16C bl.52d', + 'F-16C bl.50', + 'F-16A MLU', + 'F-16A', + }, + }, + + }, + ['f18'] = { + ['Hornet'] = 9, + ['Squid'] = 10, + ['Ragin'] = 11, + ['Roman'] = 12, + Sting = 13, + Jury =14, + Jokey = 15, + Ram = 16, + Hawk = 17, + Devil = 18, + Check = 19, + Snake = 20, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + + "FA-18C_hornet", + 'F/A-18C', + }, + }, + }, + ['b1'] = { + ['Bone'] = 9, + ['Dark'] = 10, + ['Vader'] = 11, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'B-1B', + }, + }, + }, + ['b52'] = { + ['Buff'] = 9, + ['Dump'] = 10, + ['Kenworth'] = 11, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'B-52H', + }, + }, + }, + ['f15e'] = { + ['Dude'] = 9, + ['Thud'] = 10, + ['Gunny'] = 11, + ['Trek'] = 12, + Sniper = 13, + Sled =14, + Best = 15, + Jazz = 16, + Rage = 17, + Tahoe = 18, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'F-15E', + --'F-15ERAZBAM', + }, + }, + }, + + }, + }, + }, + } mist.DBs.const.shapeNames = { ["Landmine"] = "landmine", ["FARP CP Blindage"] = "kp_ug", @@ -554,8 +740,8 @@ do -- the main scope mist.DBs.MEgroupsById = mist.utils.deepCopy(mist.DBs.groupsById) mist.DBs.deadObjects = {} - - do + + do local mt = {} function mt.__newindex(t, key, val) @@ -875,6 +1061,7 @@ do -- the main scope --dbLog:info('iterate') for name, gData in pairs(tempSpawnedGroups) do --env.info(name) + --dbLog:info(gData) local updated = false local stillExists = false if not gData.checked then @@ -882,9 +1069,9 @@ do -- the main scope local _g = gData.gp or Group.getByName(name) if mist.DBs.groupsByName[name] then -- first check group level properties, groupId, countryId, coalition - -- dbLog:info('Found in DBs, check if updated') + --dbLog:info('Found in DBs, check if updated') local dbTable = mist.DBs.groupsByName[name] - -- dbLog:info(dbTable) + --dbLog:info(dbTable) if gData.type ~= 'static' then -- dbLog:info('Not static') @@ -905,11 +1092,11 @@ do -- the main scope end --dbLog:info('Updated: $1', updated) if updated == false and gData.type ~= 'static' then -- time to check units - --dbLog:info('No Group Mismatch, Check Units') + --dbLog:info('No Group Mismatch, Check Units') if _g and _g:isExist() == true then stillExists = true for index, uObject in pairs(_g:getUnits()) do - --dbLog:info(index) + --dbLog:info(index) if mist.DBs.unitsByName[uObject:getName()] then --dbLog:info('UnitByName table exists') local uTable = mist.DBs.unitsByName[uObject:getName()] @@ -931,14 +1118,13 @@ do -- the main scope if dbData and type(dbData) == 'table' then writeGroups[#writeGroups+1] = {data = dbData, isUpdated = updated} end - end -- Work done, so remove end tempSpawnedGroups[name] = nil tempSpawnGroupsCounter = tempSpawnGroupsCounter - 1 end - end + end end local function updateDBTables() @@ -1058,19 +1244,20 @@ do -- the main scope local function groupSpawned(event) -- dont need to add units spawned in at the start of the mission if mist is loaded in init line if event.id == world.event.S_EVENT_BIRTH and timer.getTime0() < timer.getAbsTime() then - --dbLog:info('unitSpawnEvent') - + --log:info('unitSpawnEvent') + --log:info(event) + --log:info(event.initiator:getTypeName()) --table.insert(tempSpawnedUnits,(event.initiator)) ------- -- New functionality below. ------- if Object.getCategory(event.initiator) == 1 and not Unit.getPlayerName(event.initiator) then -- simple player check, will need to later check to see if unit was spawned with a player in a flight - --dbLog:info('Object is a Unit') + --log:info('Object is a Unit') if Unit.getGroup(event.initiator) then - --dbLog:info(Unit.getGroup(event.initiator):getName()) + -- log:info(Unit.getGroup(event.initiator):getName()) local g = Unit.getGroup(event.initiator) if not tempSpawnedGroups[g:getName()] then - --dbLog:info('added') + --log:info('added') tempSpawnedGroups[g:getName()] = {type = 'group', gp = g} tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 end @@ -1078,7 +1265,7 @@ do -- the main scope log:error('Group not accessible by unit in event handler. This is a DCS bug') end elseif Object.getCategory(event.initiator) == 3 or Object.getCategory(event.initiator) == 6 then - --dbLog:info('Object is Static') + --log:info('Object is Static') tempSpawnedGroups[StaticObject.getName(event.initiator)] = {type = 'static'} tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 end @@ -1236,8 +1423,8 @@ do -- the main scope tempSpawnedGroups[s:getName()] = {type = 'static'} tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 end - end - end + end + end end end @@ -1519,7 +1706,11 @@ do -- the main scope end if newGroup.clone and mist.DBs.groupsByName[newGroup.name] or not newGroup.name then - newGroup.name = tostring(newCountry .. tostring(typeName) .. mistDynAddIndex[typeName]) + --if newGroup.baseName then + -- idea of later. So custmozed naming can be created + -- else + newGroup.name = tostring(newCountry .. tostring(typeName) .. mistDynAddIndex[typeName]) + --end end if not newGroup.hidden then @@ -1604,11 +1795,11 @@ do -- the main scope end end else -- if aircraft and no route assigned. make a quick and stupid route so AI doesnt RTB immediately - if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then + --if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then newGroup.route = {} newGroup.route.points = {} newGroup.route.points[1] = {} - end + --end end newGroup.country = newCountry @@ -1629,7 +1820,7 @@ do -- the main scope end end - --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') + --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupPushedToAddGroup.lua') --log:warn(newGroup) -- sanitize table newGroup.groupName = nil @@ -2898,6 +3089,52 @@ function mist.shape.polyInCircle(poly, circle, full) return false end +function mist.shape.getPointOnSegment(point, seg, isSeg) + local p = mist.utils.makeVec2(point) + local s1 = mist.utils.makeVec2(seg[1]) + local s2 = mist.utils.makeVec2(seg[2]) + + + local cx, cy = p.x - s1.x, p.y - s1.y + local dx, dy = s2.x - s1.x, s2.x - s1.y + local d = (dx*dx + dy*dy) + + if d == 0 then + return {x = s1.x, y = s1.y} + end + local u = (cx*dx + cy*dy)/d + if isSeg then + if u < 0 then + u = 0 + elseif u > 1 then + u = 1 + end + end + return {x = s1.x + u*dx, y = s1.y + u*dy} +end + + +function mist.shape.segmentIntersect(segA, segB) + local dx1, dy1 = segA[2].x - segA[1].x, segA[2] - segA[1].y + local dx2, dy2 = segB[2].x - segB[1].x, segB[2] - segB[1].y + local dx3, dy3 = segA[1].x - segB[1].x, segA[1].y - segB[1].y + local d = dx1*dy2 - dy1*dx2 + if d == 0 then + return false + end + local t1 = (dx2*dy3 - dy2*dx3)/d + if t1 < 0 or t1 > 1 then + return false + end + local t2 = (dx1*dy3 - dy1*dx3)/d + if t2 < 0 or t2 > 1 then + return false + end + -- point of intersection + return true, segA[1].x + t1*dx1, segA[1].y + t1*dy1 +end + + function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. Code from http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm --[[local type_tbl = { point = {'table'}, @@ -2936,6 +3173,10 @@ function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. end end +function mist.mapValue(val, inMin, inMax, outMin, outMax) + return (val - inMin) * (outMax - outMin) / (inMax - inMin) + outMin +end + function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) local units = {} @@ -2989,7 +3230,6 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) end local in_zone_units = {} - for units_ind = 1, #units do local lUnit = units[units_ind] local unit_pos = lUnit:getPosition().p @@ -4449,6 +4689,25 @@ do -- mist.util scope function mist.utils.celsiusToFahrenheit(c) return c*(9/5)+32 end + + function mist.utils.hexToRGB(hex, l) -- because for some reason the draw tools use hex when everything is rgba 0 - 1 + local int = 255 + if l then + int = 1 + end + if hex and type(hex) == 'string' then + local val = {} + hex = string.gsub(hex, '0x', '') + if string.len(hex) == 8 then + val[1] = tonumber("0x"..hex:sub(1,2)) / int + val[2] = tonumber("0x"..hex:sub(3,4)) / int + val[3] = tonumber("0x"..hex:sub(5,6)) / int + val[4] = tonumber("0x"..hex:sub(7,8)) / int + + return val + end + end + end function mist.utils.converter(t1, t2, val) if type(t1) == 'string' then @@ -6108,6 +6367,8 @@ do -- mist.msg scope local caSlots = false local caMSGtoGroup = false + local anyUpdate = false + local lastMessageTime = nil if env.mission.groundControl then -- just to be sure? for index, value in pairs(env.mission.groundControl) do @@ -6127,130 +6388,127 @@ do -- mist.msg scope end end end ---[[ + local function mistdisplayV5() - --thoughts to improve upon - --event handler based activeClients table. - --display messages only when there is an update - --possibly co-routine it. - - - - local activeClients = {} - - for clientId, clientData in pairs(mist.DBs.humansById) do - if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then - activeClients[clientData.groupId] = clientData.groupName - end - end - - --[f caSlots == true and caMSGtoGroup == true then - - --end - + --log:warn("mistdisplayV5: $1", timer.getTime()) + local clearView = true if #messageList > 0 then - if displayActive == false then - displayActive = true - end - --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') - local msgTableText = {} - local msgTableSound = {} + --log:warn('Updates: $1', anyUpdate) + if anyUpdate == true then + local activeClients = {} - for messageId, messageData in pairs(messageList) do - if messageData.displayedFor > messageData.displayTime then - messageData:remove() -- now using the remove/destroy function. - else - if messageData.displayedFor then - messageData.displayedFor = messageData.displayedFor + messageDisplayRate - end - local nextSound = 1000 - local soundIndex = 0 + for clientId, clientData in pairs(mist.DBs.humansById) do + if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then + activeClients[clientData.groupId] = clientData.groupName + end + end + anyUpdate = false + if displayActive == false then + displayActive = true + end + --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') + local msgTableText = {} + local msgTableSound = {} - if messageData.multSound and #messageData.multSound > 0 then - for index, sData in pairs(messageData.multSound) do - if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played - nextSound = sData.time - soundIndex = index - end - end - if soundIndex ~= 0 then - messageData.multSound[soundIndex].played = true - end - end + for mInd, messageData in pairs(messageList) do + if messageData.displayedFor > messageData.displayTime then + messageData:remove() -- now using the remove/destroy function. + else + if messageData.displayedFor then + messageData.displayedFor = messageData.displayedFor + messageDisplayRate + end + local nextSound = 1000 + local soundIndex = 0 - for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants - if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists - if messageData.text and messageData.update then -- text - if not msgTableText[recData] then -- create table entry for text - msgTableText[recData] = {} - msgTableText[recData].text = {} - if recData == 'RED' or recData == 'BLUE' then - msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' - end - msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text - msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor - else -- add to table entry and adjust display time if needed - if recData == 'RED' or recData == 'BLUE' then - msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' - else - msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' - end - msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text - if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then - msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor - else - msgTableText[recData].displayTime = 1 - end - end - end - if soundIndex ~= 0 then - msgTableSound[recData] = messageData.multSound[soundIndex].file - end - end - - end - messageData.update = nil + if messageData.multSound and #messageData.multSound > 0 then + for index, sData in pairs(messageData.multSound) do + if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played + nextSound = sData.time + soundIndex = index + end + end + if soundIndex ~= 0 then + messageData.multSound[soundIndex].played = true + end + end - end - end - ------- new display + for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants + if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists + if messageData.text then -- text + if not msgTableText[recData] then -- create table entry for text + msgTableText[recData] = {} + msgTableText[recData].text = {} + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else -- add to table entry and adjust display time if needed + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' + else + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' + end + table.insert(msgTableText[recData].text, messageData.text) + if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else + --msgTableText[recData].displayTime = 10 + end + end + end + if soundIndex ~= 0 then + msgTableSound[recData] = messageData.multSound[soundIndex].file + end + end + + end + messageData.update = nil - if caSlots == true and caMSGtoGroup == false then - if msgTableText.RED then - trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText.RED.text), msgTableText.RED.displayTime, true) + end + + end + ------- new display - end - if msgTableText.BLUE then - trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText.BLUE.text), msgTableText.BLUE.displayTime, true) - end - end + if caSlots == true and caMSGtoGroup == false then + if msgTableText.RED then + trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText.RED.text), msgTableText.RED.displayTime, clearView) - for index, msgData in pairs(msgTableText) do - if type(index) == 'number' then -- its a groupNumber - trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, true) - end - end - --- new audio - if msgTableSound.RED then - trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound.RED) - end - if msgTableSound.BLUE then - trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound.BLUE) - end + end + if msgTableText.BLUE then + trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText.BLUE.text), msgTableText.BLUE.displayTime, clearView) + end + end + + for index, msgData in pairs(msgTableText) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, clearView) + end + end + --- new audio + if msgTableSound.RED then + trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound.RED) + end + if msgTableSound.BLUE then + trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound.BLUE) + end - for index, file in pairs(msgTableSound) do - if type(index) == 'number' then -- its a groupNumber - trigger.action.outSoundForGroup(index, file) - end - end + for index, file in pairs(msgTableSound) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outSoundForGroup(index, file) + end + end + + end + else mist.removeFunction(displayFuncId) displayActive = false end end -]] + local function mistdisplayV4() local activeClients = {} @@ -6409,14 +6667,14 @@ end]] ]] - + local new = {} new.text = vars.text -- The actual message new.displayTime = vars.displayTime -- How long will the message appear for new.displayedFor = 0 -- how long the message has been displayed so far new.name = vars.name -- ID to overwrite the older message (if it exists) Basically it replaces a message that is displayed with new text. new.addedAt = timer.getTime() - new.update = true + --log:warn('New Message: $1', new.text) if vars.multSound and vars.multSound[1] then new.multSound = vars.multSound @@ -6507,13 +6765,14 @@ end]] messageList[i].text = new.text messageList[i].msgFor = new.msgFor messageList[i].multSound = new.multSound - messageList[i].update = true + anyUpdate = true + --log:warn('Message updated: $1', new.messageID) return messageList[i].messageID end end end end - + anyUpdate = true messageID = messageID + 1 new.messageID = messageID @@ -6527,7 +6786,7 @@ end]] if displayActive == false then displayActive = true - displayFuncId = mist.scheduleFunction(mistdisplayV4, {}, timer.getTime() + messageDisplayRate, messageDisplayRate) + displayFuncId = mist.scheduleFunction(mistdisplayV5, {}, timer.getTime() + messageDisplayRate, messageDisplayRate) end return messageID @@ -6538,6 +6797,7 @@ end]] for i, msgData in pairs(messageList) do if messageList[i] == self then table.remove(messageList, i) + anyUpdate = true return true --removal successful end end @@ -6548,6 +6808,7 @@ end]] for i, msgData in pairs(messageList) do if messageList[i].messageID == id then table.remove(messageList, i) + anyUpdate = true return true --removal successful end end @@ -6984,14 +7245,6 @@ do local usedMarks = {} - local typeBase = { - ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, - ['MiG-21Bis'] = {'Mig-21'}, - ['MiG-15bis'] = {'Mig-15'}, - ['FW-190D9'] = {'FW-190'}, - ['Bf-109K-4'] = {'Bf-109'}, - } - local mDefs = { coa = { ['red'] = {fillColor = {.8, 0 , 0, .5}, color = {.8, 0 , 0, .5}, lineType = 2, fontSize = 16}, @@ -7012,7 +7265,7 @@ do local altNames = {['poly'] = 7, ['lines'] = 1, ['polygon'] = 7 } local function draw(s) - --log:warn(s) + --log:warn(s) if type(s) == 'table' then local mType = s.markType if mType == 'panel' then @@ -7032,7 +7285,7 @@ do elseif mType == 'arrow' then trigger.action.arrowToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.color, s.fillColor, s.lineType, s.readOnly, s.message) elseif mType == 'text' then - trigger.action.textToAll(s.coa, s.markId, s.pos[1], s.color, s.fillColor, fontSize, s.readOnly, s.text) + trigger.action.textToAll(s.coa, s.markId, s.pos[1], s.color, s.fillColor, s.fontSize, s.readOnly, s.text) elseif mType == 'quad' then trigger.action.quadToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.pos[3], s.pos[4], s.color, s.fillColor, s.lineType, s.readOnly, s.message) end @@ -7078,6 +7331,9 @@ do val[i] = val[i]/255 -- convert RGB values from 0-255 to 0-1 equivilent. end end + elseif type(val) == 'string' then + val = mist.utils.hexToRGB(val) + end return val end @@ -7136,12 +7392,14 @@ do local removed = false if type(id) == 'table' then for ind, val in pairs(id) do - trigger.action.removeMark(val) - mist.DBs.markList[val] = nil - removed = true + if type(val) == 'number' then + trigger.action.removeMark(val) + mist.DBs.markList[val] = nil + removed = true + end end else - trigger.action.removeMark(id) + trigger.action.removeMark(id) mist.DBs.markList[id] = nil removed = true end @@ -7437,7 +7695,7 @@ do if mType == 5 then -- text to all if not fontSize then - fontSize = checkDefs('fondSize', coa) or 16 + fontSize = checkDefs('fontSize', coa) or 16 end fCal[#fCal+1] = fontSize else @@ -7450,8 +7708,12 @@ do readOnly = true end fCal[#fCal+1] = readOnly - fCal[#fCal+1] = message + if mType == 5 then + fCal[#fCal+1] = text + else + fCal[#fCal+1] = message + end local data = {coa = coa, markId = usedId, pos = pos, markFor = markFor, color = color, readOnly = readOnly, message = message, fillColor = fillColor, lineType = lineType, markType = tNames[mType], name = name, radius = radius, text = text, fontSize = fontSize, time = timer.getTime()} mist.DBs.markList[usedId] = data @@ -7531,6 +7793,75 @@ do end end + function mist.marker.drawShape(name, v) + if mist.DBs.drawingByName[name] then + + local d = v or {} + local o = mist.utils.deepCopy(mist.DBs.drawingByName[name]) + mist.marker.add({point = {x = o.mapX, z = o.mapY}, text = name}) + --log:warn(o) + d.points = o.points or {} + if o.primitiveType == "Polygon" then + d.mType = 7 + + if o.polygonMode == "rect" then + d.mType = 6 + elseif o.polygonMode == "circle" then + d.mType = 2 + d.points = {x = o.mapX, y = o.mapY} + d.radius = o.radius + end + elseif o.primitiveType == "TextBox" then + d.mType = 5 + d.points = {x = o.mapX, y = o.mapY} + d.text = o.text or d.text + d.fontSize = d.fontSize or o.fontSize + end + -- NOTE TO SELF. FIGURE OUT WHICH SHAPES NEED TO BE OFFSET. OVAL YES. + + if o.fillColorString and not d.fillColor then + d.fillColor = mist.utils.hexToRGB(o.fillColorString) + end + if o.colorString then + d.color = mist.utils.hexToRGB(o.colorString) + end + + + if o.thickness == 0 then + d.lineType = 0 + elseif o.style == 'solid' then + d.lineType = 1 + elseif o.style == 'dot' then + d.lineType = 2 + elseif o.style == 'dash' then + d.lineType = 3 + else + d.lineType = 1 + end + + + if o.primitiveType == "Line" and #d.points >= 2 then + d.mType = 1 + local rtn = {} + for i = 1, #d.points -1 do + local var = mist.utils.deepCopy(d) + var.points = {} + var.points[1] = d.points[i] + var.points[2] = d.points[i+1] + table.insert(rtn, mist.marker.add(var)) + end + return rtn + else + if d.mType then + --log:warn(d) + return mist.marker.add(d) + end + end + end + + + end + --[[ function mist.marker.circle(v) @@ -8224,6 +8555,19 @@ do -- group tasks scope end return newCoord end + + function mist.getWindBearingAndVel(p) + local point = mist.utils.makeVec3(o) + local gLevel = land.getHeight({x = point.x, y = point.z}) + if point.y <= gLevel then + point.y = gLevel + 10 + end + local t = atmosphere.getWind(point) + local bearing = math.tan(t.z/t.x) + local vel = math.sqrt(t.x^2 + t.z^2) + return bearing, vel + + end function mist.groupToRandomPoint(vars) local group = vars.group --Required diff --git a/mist_4_5_104.lua b/mist_4_5_106.lua similarity index 93% rename from mist_4_5_104.lua rename to mist_4_5_106.lua index 3302d7f..de1499c 100644 --- a/mist_4_5_104.lua +++ b/mist_4_5_106.lua @@ -35,7 +35,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 5 -mist.build = 104 +mist.build = 106 -- forward declaration of log shorthand local log @@ -115,6 +115,17 @@ do -- the main scope zone.properties[prop.key] = prop.value end end + end + if zone.verticies then -- trust but verify + local r = 0 + for i = 1, #zone.verticies do + local dist = mist.utils.get2DDist(zone.point, zone.verticies[i]) + if dist > r then + r = mist.utils.deepCopy(dist) + end + end + zone.radius = r + end mist.DBs.zonesByName[zone_data.name] = zone @@ -123,6 +134,85 @@ do -- the main scope end end end + + mist.DBs.drawingByName = {} + mist.DBs.drawingIndexed = {} + + if env.mission.drawings and env.mission.drawings.layers then + for i = 1, #env.mission.drawings.layers do + local l = env.mission.drawings.layers[i] + + for j = 1, #l.objects do + local copy = mist.utils.deepCopy(l.objects[j]) + --log:warn(copy) + local doOffset = false + copy.layer = l.name + + local theta = copy.angle or 0 + theta = math.rad(theta) + if copy.primitiveType == "Polygon" then + + if copy.polygonMode == 'rect' then + local h, w = copy.height, copy.width + copy.points = {} + copy.points[1] = {x = h/2, y = w/2} + copy.points[2] = {x = -h/2, y = w/2} + copy.points[3] = {x = -h/2, y = -w/2} + copy.points[4] = {x = h/2, y = -w/2} + doOffset = true + elseif copy.polygonMode == "circle" then + copy.points = {x = copy.mapX, y = copy.mapY} + elseif copy.polygonMode == 'oval' then + -- oval bugs. Scale and rotation are off. + copy.points = {} + local numPoints = 24 + local angleStep = (math.pi*2)/numPoints + doOffset = true + for v = 1, numPoints do + local pointAngle = v * angleStep + local x = copy.r1 * math.cos(pointAngle) + local y = copy.r2 * math.sin(pointAngle) + + table.insert(copy.points,{x=x,y=y}) + + end + elseif copy.polygonMode == "arrow" then + doOffset = true + end + + -- NOTE TO SELF. FIGURE OUT WHICH SHAPES NEED TO BE OFFSET. OVAL YES. + --log:warn('check offset') + if theta ~= 0 and copy.points and doOffset == true then + + --log:warn('offsetting Values') + for p = 1, #copy.points do + local offset = mist.vec.rotateVec2(copy.points[p], theta) + copy.points[p] = offset + end + --log:warn(copy.points[1]) + end + + end + if copy.points and #copy.points > 1 then + for u = 1, #copy.points do + copy.points[u].x = copy.points[u].x + copy.mapX + copy.points[u].y = copy.points[u].y + copy.mapY + end + + end + if mist.DBs.drawingByName[copy.name] then + log:warn("Drawing by the name of [ $1 ] already exists in DB. Failed to add to mist.DBs.drawingByName.", copy.name) + else + + mist.DBs.drawingByName[copy.name] = copy + end + table.insert(mist.DBs.drawingIndexed, copy) + end + + end + + end + mist.DBs.navPoints = {} mist.DBs.units = {} @@ -319,6 +409,11 @@ do -- the main scope ['Arco'] = 2, ['Shell'] = 3, }, + ['TRANSPORT'] = { + ['Heavy'] = 9, + ['Trash'] = 10, + ['Cargo'] = 11, + ['Ascot'] = 12, ['JTAC'] = { ['Axeman'] = 1, ['Darknight'] = 2, @@ -360,14 +455,105 @@ do -- the main scope ['rules'] = { ['canUseAircraft'] = true, ['appliesTo'] = { - 'A-10C', + 'A-10C_2', + 'A-10C', 'A-10A', }, }, - }, - }, - }, - } + }, + ['f16'] = { + Viper = 9, + Venom = 10, + Lobo = 11, + Cowboy = 12, + Python = 13, + Rattler =14, + Panther = 15, + Wolf = 16, + Weasel = 17, + Wild = 18, + Ninja = 19, + Jedi = 20, + rules = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'F-16C_50', + 'F-16C bl.52d', + 'F-16C bl.50', + 'F-16A MLU', + 'F-16A', + }, + }, + + }, + ['f18'] = { + ['Hornet'] = 9, + ['Squid'] = 10, + ['Ragin'] = 11, + ['Roman'] = 12, + Sting = 13, + Jury =14, + Jokey = 15, + Ram = 16, + Hawk = 17, + Devil = 18, + Check = 19, + Snake = 20, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + + "FA-18C_hornet", + 'F/A-18C', + }, + }, + }, + ['b1'] = { + ['Bone'] = 9, + ['Dark'] = 10, + ['Vader'] = 11, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'B-1B', + }, + }, + }, + ['b52'] = { + ['Buff'] = 9, + ['Dump'] = 10, + ['Kenworth'] = 11, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'B-52H', + }, + }, + }, + ['f15e'] = { + ['Dude'] = 9, + ['Thud'] = 10, + ['Gunny'] = 11, + ['Trek'] = 12, + Sniper = 13, + Sled =14, + Best = 15, + Jazz = 16, + Rage = 17, + Tahoe = 18, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'F-15E', + --'F-15ERAZBAM', + }, + }, + }, + + }, + }, + }, + } mist.DBs.const.shapeNames = { ["Landmine"] = "landmine", ["FARP CP Blindage"] = "kp_ug", @@ -554,8 +740,8 @@ do -- the main scope mist.DBs.MEgroupsById = mist.utils.deepCopy(mist.DBs.groupsById) mist.DBs.deadObjects = {} - - do + + do local mt = {} function mt.__newindex(t, key, val) @@ -875,6 +1061,7 @@ do -- the main scope --dbLog:info('iterate') for name, gData in pairs(tempSpawnedGroups) do --env.info(name) + --dbLog:info(gData) local updated = false local stillExists = false if not gData.checked then @@ -882,9 +1069,9 @@ do -- the main scope local _g = gData.gp or Group.getByName(name) if mist.DBs.groupsByName[name] then -- first check group level properties, groupId, countryId, coalition - -- dbLog:info('Found in DBs, check if updated') + --dbLog:info('Found in DBs, check if updated') local dbTable = mist.DBs.groupsByName[name] - -- dbLog:info(dbTable) + --dbLog:info(dbTable) if gData.type ~= 'static' then -- dbLog:info('Not static') @@ -905,11 +1092,11 @@ do -- the main scope end --dbLog:info('Updated: $1', updated) if updated == false and gData.type ~= 'static' then -- time to check units - --dbLog:info('No Group Mismatch, Check Units') + --dbLog:info('No Group Mismatch, Check Units') if _g and _g:isExist() == true then stillExists = true for index, uObject in pairs(_g:getUnits()) do - --dbLog:info(index) + --dbLog:info(index) if mist.DBs.unitsByName[uObject:getName()] then --dbLog:info('UnitByName table exists') local uTable = mist.DBs.unitsByName[uObject:getName()] @@ -931,14 +1118,13 @@ do -- the main scope if dbData and type(dbData) == 'table' then writeGroups[#writeGroups+1] = {data = dbData, isUpdated = updated} end - end -- Work done, so remove end tempSpawnedGroups[name] = nil tempSpawnGroupsCounter = tempSpawnGroupsCounter - 1 end - end + end end local function updateDBTables() @@ -1058,19 +1244,20 @@ do -- the main scope local function groupSpawned(event) -- dont need to add units spawned in at the start of the mission if mist is loaded in init line if event.id == world.event.S_EVENT_BIRTH and timer.getTime0() < timer.getAbsTime() then - --dbLog:info('unitSpawnEvent') - + --log:info('unitSpawnEvent') + --log:info(event) + --log:info(event.initiator:getTypeName()) --table.insert(tempSpawnedUnits,(event.initiator)) ------- -- New functionality below. ------- if Object.getCategory(event.initiator) == 1 and not Unit.getPlayerName(event.initiator) then -- simple player check, will need to later check to see if unit was spawned with a player in a flight - --dbLog:info('Object is a Unit') + --log:info('Object is a Unit') if Unit.getGroup(event.initiator) then - --dbLog:info(Unit.getGroup(event.initiator):getName()) + -- log:info(Unit.getGroup(event.initiator):getName()) local g = Unit.getGroup(event.initiator) if not tempSpawnedGroups[g:getName()] then - --dbLog:info('added') + --log:info('added') tempSpawnedGroups[g:getName()] = {type = 'group', gp = g} tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 end @@ -1078,7 +1265,7 @@ do -- the main scope log:error('Group not accessible by unit in event handler. This is a DCS bug') end elseif Object.getCategory(event.initiator) == 3 or Object.getCategory(event.initiator) == 6 then - --dbLog:info('Object is Static') + --log:info('Object is Static') tempSpawnedGroups[StaticObject.getName(event.initiator)] = {type = 'static'} tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 end @@ -1236,8 +1423,8 @@ do -- the main scope tempSpawnedGroups[s:getName()] = {type = 'static'} tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 end - end - end + end + end end end @@ -1519,7 +1706,11 @@ do -- the main scope end if newGroup.clone and mist.DBs.groupsByName[newGroup.name] or not newGroup.name then - newGroup.name = tostring(newCountry .. tostring(typeName) .. mistDynAddIndex[typeName]) + --if newGroup.baseName then + -- idea of later. So custmozed naming can be created + -- else + newGroup.name = tostring(newCountry .. tostring(typeName) .. mistDynAddIndex[typeName]) + --end end if not newGroup.hidden then @@ -1604,11 +1795,11 @@ do -- the main scope end end else -- if aircraft and no route assigned. make a quick and stupid route so AI doesnt RTB immediately - if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then + --if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then newGroup.route = {} newGroup.route.points = {} newGroup.route.points[1] = {} - end + --end end newGroup.country = newCountry @@ -1629,7 +1820,7 @@ do -- the main scope end end - --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') + --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupPushedToAddGroup.lua') --log:warn(newGroup) -- sanitize table newGroup.groupName = nil @@ -2898,6 +3089,52 @@ function mist.shape.polyInCircle(poly, circle, full) return false end +function mist.shape.getPointOnSegment(point, seg, isSeg) + local p = mist.utils.makeVec2(point) + local s1 = mist.utils.makeVec2(seg[1]) + local s2 = mist.utils.makeVec2(seg[2]) + + + local cx, cy = p.x - s1.x, p.y - s1.y + local dx, dy = s2.x - s1.x, s2.x - s1.y + local d = (dx*dx + dy*dy) + + if d == 0 then + return {x = s1.x, y = s1.y} + end + local u = (cx*dx + cy*dy)/d + if isSeg then + if u < 0 then + u = 0 + elseif u > 1 then + u = 1 + end + end + return {x = s1.x + u*dx, y = s1.y + u*dy} +end + + +function mist.shape.segmentIntersect(segA, segB) + local dx1, dy1 = segA[2].x - segA[1].x, segA[2] - segA[1].y + local dx2, dy2 = segB[2].x - segB[1].x, segB[2] - segB[1].y + local dx3, dy3 = segA[1].x - segB[1].x, segA[1].y - segB[1].y + local d = dx1*dy2 - dy1*dx2 + if d == 0 then + return false + end + local t1 = (dx2*dy3 - dy2*dx3)/d + if t1 < 0 or t1 > 1 then + return false + end + local t2 = (dx1*dy3 - dy1*dx3)/d + if t2 < 0 or t2 > 1 then + return false + end + -- point of intersection + return true, segA[1].x + t1*dx1, segA[1].y + t1*dy1 +end + + function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. Code from http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm --[[local type_tbl = { point = {'table'}, @@ -2936,6 +3173,10 @@ function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. end end +function mist.mapValue(val, inMin, inMax, outMin, outMax) + return (val - inMin) * (outMax - outMin) / (inMax - inMin) + outMin +end + function mist.getUnitsInPolygon(unit_names, polyZone, max_alt) local units = {} @@ -2989,7 +3230,6 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) end local in_zone_units = {} - for units_ind = 1, #units do local lUnit = units[units_ind] local unit_pos = lUnit:getPosition().p @@ -4449,6 +4689,25 @@ do -- mist.util scope function mist.utils.celsiusToFahrenheit(c) return c*(9/5)+32 end + + function mist.utils.hexToRGB(hex, l) -- because for some reason the draw tools use hex when everything is rgba 0 - 1 + local int = 255 + if l then + int = 1 + end + if hex and type(hex) == 'string' then + local val = {} + hex = string.gsub(hex, '0x', '') + if string.len(hex) == 8 then + val[1] = tonumber("0x"..hex:sub(1,2)) / int + val[2] = tonumber("0x"..hex:sub(3,4)) / int + val[3] = tonumber("0x"..hex:sub(5,6)) / int + val[4] = tonumber("0x"..hex:sub(7,8)) / int + + return val + end + end + end function mist.utils.converter(t1, t2, val) if type(t1) == 'string' then @@ -6108,6 +6367,8 @@ do -- mist.msg scope local caSlots = false local caMSGtoGroup = false + local anyUpdate = false + local lastMessageTime = nil if env.mission.groundControl then -- just to be sure? for index, value in pairs(env.mission.groundControl) do @@ -6127,130 +6388,127 @@ do -- mist.msg scope end end end ---[[ + local function mistdisplayV5() - --thoughts to improve upon - --event handler based activeClients table. - --display messages only when there is an update - --possibly co-routine it. - - - - local activeClients = {} - - for clientId, clientData in pairs(mist.DBs.humansById) do - if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then - activeClients[clientData.groupId] = clientData.groupName - end - end - - --[f caSlots == true and caMSGtoGroup == true then - - --end - + --log:warn("mistdisplayV5: $1", timer.getTime()) + local clearView = true if #messageList > 0 then - if displayActive == false then - displayActive = true - end - --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') - local msgTableText = {} - local msgTableSound = {} + --log:warn('Updates: $1', anyUpdate) + if anyUpdate == true then + local activeClients = {} - for messageId, messageData in pairs(messageList) do - if messageData.displayedFor > messageData.displayTime then - messageData:remove() -- now using the remove/destroy function. - else - if messageData.displayedFor then - messageData.displayedFor = messageData.displayedFor + messageDisplayRate - end - local nextSound = 1000 - local soundIndex = 0 + for clientId, clientData in pairs(mist.DBs.humansById) do + if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then + activeClients[clientData.groupId] = clientData.groupName + end + end + anyUpdate = false + if displayActive == false then + displayActive = true + end + --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') + local msgTableText = {} + local msgTableSound = {} - if messageData.multSound and #messageData.multSound > 0 then - for index, sData in pairs(messageData.multSound) do - if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played - nextSound = sData.time - soundIndex = index - end - end - if soundIndex ~= 0 then - messageData.multSound[soundIndex].played = true - end - end + for mInd, messageData in pairs(messageList) do + if messageData.displayedFor > messageData.displayTime then + messageData:remove() -- now using the remove/destroy function. + else + if messageData.displayedFor then + messageData.displayedFor = messageData.displayedFor + messageDisplayRate + end + local nextSound = 1000 + local soundIndex = 0 - for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants - if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists - if messageData.text and messageData.update then -- text - if not msgTableText[recData] then -- create table entry for text - msgTableText[recData] = {} - msgTableText[recData].text = {} - if recData == 'RED' or recData == 'BLUE' then - msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' - end - msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text - msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor - else -- add to table entry and adjust display time if needed - if recData == 'RED' or recData == 'BLUE' then - msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' - else - msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' - end - msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text - if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then - msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor - else - msgTableText[recData].displayTime = 1 - end - end - end - if soundIndex ~= 0 then - msgTableSound[recData] = messageData.multSound[soundIndex].file - end - end - - end - messageData.update = nil + if messageData.multSound and #messageData.multSound > 0 then + for index, sData in pairs(messageData.multSound) do + if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played + nextSound = sData.time + soundIndex = index + end + end + if soundIndex ~= 0 then + messageData.multSound[soundIndex].played = true + end + end - end - end - ------- new display + for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants + if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists + if messageData.text then -- text + if not msgTableText[recData] then -- create table entry for text + msgTableText[recData] = {} + msgTableText[recData].text = {} + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else -- add to table entry and adjust display time if needed + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' + else + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' + end + table.insert(msgTableText[recData].text, messageData.text) + if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else + --msgTableText[recData].displayTime = 10 + end + end + end + if soundIndex ~= 0 then + msgTableSound[recData] = messageData.multSound[soundIndex].file + end + end + + end + messageData.update = nil - if caSlots == true and caMSGtoGroup == false then - if msgTableText.RED then - trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText.RED.text), msgTableText.RED.displayTime, true) + end + + end + ------- new display - end - if msgTableText.BLUE then - trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText.BLUE.text), msgTableText.BLUE.displayTime, true) - end - end + if caSlots == true and caMSGtoGroup == false then + if msgTableText.RED then + trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText.RED.text), msgTableText.RED.displayTime, clearView) - for index, msgData in pairs(msgTableText) do - if type(index) == 'number' then -- its a groupNumber - trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, true) - end - end - --- new audio - if msgTableSound.RED then - trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound.RED) - end - if msgTableSound.BLUE then - trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound.BLUE) - end + end + if msgTableText.BLUE then + trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText.BLUE.text), msgTableText.BLUE.displayTime, clearView) + end + end + + for index, msgData in pairs(msgTableText) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, clearView) + end + end + --- new audio + if msgTableSound.RED then + trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound.RED) + end + if msgTableSound.BLUE then + trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound.BLUE) + end - for index, file in pairs(msgTableSound) do - if type(index) == 'number' then -- its a groupNumber - trigger.action.outSoundForGroup(index, file) - end - end + for index, file in pairs(msgTableSound) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outSoundForGroup(index, file) + end + end + + end + else mist.removeFunction(displayFuncId) displayActive = false end end -]] + local function mistdisplayV4() local activeClients = {} @@ -6409,14 +6667,14 @@ end]] ]] - + local new = {} new.text = vars.text -- The actual message new.displayTime = vars.displayTime -- How long will the message appear for new.displayedFor = 0 -- how long the message has been displayed so far new.name = vars.name -- ID to overwrite the older message (if it exists) Basically it replaces a message that is displayed with new text. new.addedAt = timer.getTime() - new.update = true + --log:warn('New Message: $1', new.text) if vars.multSound and vars.multSound[1] then new.multSound = vars.multSound @@ -6507,13 +6765,14 @@ end]] messageList[i].text = new.text messageList[i].msgFor = new.msgFor messageList[i].multSound = new.multSound - messageList[i].update = true + anyUpdate = true + --log:warn('Message updated: $1', new.messageID) return messageList[i].messageID end end end end - + anyUpdate = true messageID = messageID + 1 new.messageID = messageID @@ -6527,7 +6786,7 @@ end]] if displayActive == false then displayActive = true - displayFuncId = mist.scheduleFunction(mistdisplayV4, {}, timer.getTime() + messageDisplayRate, messageDisplayRate) + displayFuncId = mist.scheduleFunction(mistdisplayV5, {}, timer.getTime() + messageDisplayRate, messageDisplayRate) end return messageID @@ -6538,6 +6797,7 @@ end]] for i, msgData in pairs(messageList) do if messageList[i] == self then table.remove(messageList, i) + anyUpdate = true return true --removal successful end end @@ -6548,6 +6808,7 @@ end]] for i, msgData in pairs(messageList) do if messageList[i].messageID == id then table.remove(messageList, i) + anyUpdate = true return true --removal successful end end @@ -6984,14 +7245,6 @@ do local usedMarks = {} - local typeBase = { - ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, - ['MiG-21Bis'] = {'Mig-21'}, - ['MiG-15bis'] = {'Mig-15'}, - ['FW-190D9'] = {'FW-190'}, - ['Bf-109K-4'] = {'Bf-109'}, - } - local mDefs = { coa = { ['red'] = {fillColor = {.8, 0 , 0, .5}, color = {.8, 0 , 0, .5}, lineType = 2, fontSize = 16}, @@ -7012,7 +7265,7 @@ do local altNames = {['poly'] = 7, ['lines'] = 1, ['polygon'] = 7 } local function draw(s) - --log:warn(s) + --log:warn(s) if type(s) == 'table' then local mType = s.markType if mType == 'panel' then @@ -7032,7 +7285,7 @@ do elseif mType == 'arrow' then trigger.action.arrowToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.color, s.fillColor, s.lineType, s.readOnly, s.message) elseif mType == 'text' then - trigger.action.textToAll(s.coa, s.markId, s.pos[1], s.color, s.fillColor, fontSize, s.readOnly, s.text) + trigger.action.textToAll(s.coa, s.markId, s.pos[1], s.color, s.fillColor, s.fontSize, s.readOnly, s.text) elseif mType == 'quad' then trigger.action.quadToAll(s.coa, s.markId, s.pos[1], s.pos[2], s.pos[3], s.pos[4], s.color, s.fillColor, s.lineType, s.readOnly, s.message) end @@ -7078,6 +7331,9 @@ do val[i] = val[i]/255 -- convert RGB values from 0-255 to 0-1 equivilent. end end + elseif type(val) == 'string' then + val = mist.utils.hexToRGB(val) + end return val end @@ -7136,12 +7392,14 @@ do local removed = false if type(id) == 'table' then for ind, val in pairs(id) do - trigger.action.removeMark(val) - mist.DBs.markList[val] = nil - removed = true + if type(val) == 'number' then + trigger.action.removeMark(val) + mist.DBs.markList[val] = nil + removed = true + end end else - trigger.action.removeMark(id) + trigger.action.removeMark(id) mist.DBs.markList[id] = nil removed = true end @@ -7437,7 +7695,7 @@ do if mType == 5 then -- text to all if not fontSize then - fontSize = checkDefs('fondSize', coa) or 16 + fontSize = checkDefs('fontSize', coa) or 16 end fCal[#fCal+1] = fontSize else @@ -7450,8 +7708,12 @@ do readOnly = true end fCal[#fCal+1] = readOnly - fCal[#fCal+1] = message + if mType == 5 then + fCal[#fCal+1] = text + else + fCal[#fCal+1] = message + end local data = {coa = coa, markId = usedId, pos = pos, markFor = markFor, color = color, readOnly = readOnly, message = message, fillColor = fillColor, lineType = lineType, markType = tNames[mType], name = name, radius = radius, text = text, fontSize = fontSize, time = timer.getTime()} mist.DBs.markList[usedId] = data @@ -7531,6 +7793,75 @@ do end end + function mist.marker.drawShape(name, v) + if mist.DBs.drawingByName[name] then + + local d = v or {} + local o = mist.utils.deepCopy(mist.DBs.drawingByName[name]) + mist.marker.add({point = {x = o.mapX, z = o.mapY}, text = name}) + --log:warn(o) + d.points = o.points or {} + if o.primitiveType == "Polygon" then + d.mType = 7 + + if o.polygonMode == "rect" then + d.mType = 6 + elseif o.polygonMode == "circle" then + d.mType = 2 + d.points = {x = o.mapX, y = o.mapY} + d.radius = o.radius + end + elseif o.primitiveType == "TextBox" then + d.mType = 5 + d.points = {x = o.mapX, y = o.mapY} + d.text = o.text or d.text + d.fontSize = d.fontSize or o.fontSize + end + -- NOTE TO SELF. FIGURE OUT WHICH SHAPES NEED TO BE OFFSET. OVAL YES. + + if o.fillColorString and not d.fillColor then + d.fillColor = mist.utils.hexToRGB(o.fillColorString) + end + if o.colorString then + d.color = mist.utils.hexToRGB(o.colorString) + end + + + if o.thickness == 0 then + d.lineType = 0 + elseif o.style == 'solid' then + d.lineType = 1 + elseif o.style == 'dot' then + d.lineType = 2 + elseif o.style == 'dash' then + d.lineType = 3 + else + d.lineType = 1 + end + + + if o.primitiveType == "Line" and #d.points >= 2 then + d.mType = 1 + local rtn = {} + for i = 1, #d.points -1 do + local var = mist.utils.deepCopy(d) + var.points = {} + var.points[1] = d.points[i] + var.points[2] = d.points[i+1] + table.insert(rtn, mist.marker.add(var)) + end + return rtn + else + if d.mType then + --log:warn(d) + return mist.marker.add(d) + end + end + end + + + end + --[[ function mist.marker.circle(v) @@ -8224,6 +8555,19 @@ do -- group tasks scope end return newCoord end + + function mist.getWindBearingAndVel(p) + local point = mist.utils.makeVec3(o) + local gLevel = land.getHeight({x = point.x, y = point.z}) + if point.y <= gLevel then + point.y = gLevel + 10 + end + local t = atmosphere.getWind(point) + local bearing = math.tan(t.z/t.x) + local vel = math.sqrt(t.x^2 + t.z^2) + return bearing, vel + + end function mist.groupToRandomPoint(vars) local group = vars.group --Required