From c69314b5f062aadc35dba96ff52690708bd85be8 Mon Sep 17 00:00:00 2001 From: David Pierron Date: Wed, 1 Jan 2025 14:37:45 +0100 Subject: [PATCH] - added dynamic slots support in MiST v4.5.128-DYNSLOTS-01 (forked from the official MiST 4.5.128) - added dynamic slots support in CTLD - added dyn slots in the test mission --- CTLD.lua | 88 +- mist.lua | 3405 ++++++++++++++++++++++++++++++++++++++-------- test-mission.miz | Bin 528160 -> 586037 bytes 3 files changed, 2878 insertions(+), 615 deletions(-) diff --git a/CTLD.lua b/CTLD.lua index af57212..695ab30 100644 --- a/CTLD.lua +++ b/CTLD.lua @@ -50,7 +50,7 @@ ctld.staticBugWorkaround = false -- DCS had a bug where destroying statics woul ctld.disableAllSmoke = false -- if true, all smoke is diabled at pickup and drop off zones regardless of settings below. Leave false to respect settings below -- Allow units to CTLD by aircraft type and not by pilot name - this is done everytime a player enters a new unit -ctld.addPlayerAircraftByType = false +ctld.addPlayerAircraftByType = true ctld.hoverPickup = true -- if set to false you can load crates with the F10 menu instead of hovering... Only if not using real crates! ctld.loadCrateFromMenu = false -- if set to true, you can load crates with the F10 menu OR hovering, in case of using choppers and planes for example. @@ -5283,8 +5283,9 @@ function ctld.addTransportF10MenuOptions(_unitName) if _groupId then ctld.logTrace("_groupId = %s", ctld.p(_groupId)) + ctld.logTrace("ctld.addedTo = %s", ctld.p(ctld.addedTo)) if ctld.addedTo[tostring(_groupId)] == nil then - + ctld.logTrace("adding CTLD menu for _groupId = %s", ctld.p(_groupId)) local _rootPath = missionCommands.addSubMenuForGroup(_groupId, "CTLD") local _unitActions = ctld.getUnitActions(_unitTypename) @@ -5433,6 +5434,8 @@ function ctld.addTransportF10MenuOptions(_unitName) end ctld.addedTo[tostring(_groupId)] = true + ctld.logTrace("ctld.addedTo = %s", ctld.p(ctld.addedTo)) + ctld.logTrace("done adding CTLD menu for _groupId = %s", ctld.p(_groupId)) end end end @@ -5492,7 +5495,9 @@ function ctld.addRadioListCommand(_side) if _groupId then + ctld.logTrace("ctld.addedTo = %s", ctld.p(ctld.addedTo)) if ctld.addedTo[tostring(_groupId)] == nil then + ctld.logTrace("adding List Radio Beacons for _groupId = %s", ctld.p(_groupId)) missionCommands.addCommandForGroup(_groupId, "List Radio Beacons", nil, ctld.listRadioBeacons, { _playerUnit:getName() }) ctld.addedTo[tostring(_groupId)] = true end @@ -7373,10 +7378,7 @@ function ctld.eventHandler:onEvent(event) end -- check that we know the event - if not ( - event.id == 15 -- S_EVENT_BIRTH" - or event.id == 20 -- S_EVENT_PLAYER_ENTER_UNIT - ) then + if event.id ~= 20 then -- S_EVENT_PLAYER_ENTER_UNIT return end @@ -7384,47 +7386,63 @@ function ctld.eventHandler:onEvent(event) local unitName = nil if event.initiator ~= nil and event.initiator.getName then unitName = event.initiator:getName() - ctld.logTrace("unitName = %s", ctld.p(unitName)) + ctld.logDebug("caught event S_EVENT_PLAYER_ENTER_UNIT for unit [%s]", ctld.p(unitName)) end if not unitName then ctld.logWarning("no unitname found in event %s", ctld.p(event)) return end - if mist.DBs.humansByName[unitName] then -- it's a human unit - ctld.logDebug("caught event BIRTH for human unit [%s]", ctld.p(unitName)) - local _unit = Unit.getByName(unitName) - if _unit ~= nil then - -- assign transport pilot - ctld.logTrace("_unit = %s", ctld.p(_unit)) - - local playerTypeName = _unit:getTypeName() - ctld.logTrace("playerTypeName = %s", ctld.p(playerTypeName)) - - -- Allow units to CTLD by aircraft type and not by pilot name - if ctld.addPlayerAircraftByType then - for _,aircraftType in pairs(ctld.aircraftTypeTable) do - if aircraftType == playerTypeName then - ctld.logTrace("adding by aircraft type, unitName = %s", ctld.p(unitName)) - -- add transport unit to the list - table.insert(ctld.transportPilotNames, unitName) - -- add transport radio menu - ctld.addTransportF10MenuOptions(unitName) - break + local nextSteps = coroutine.create(function() + ctld.logTrace("in the 'nextSteps' coroutine") + if mist.DBs.humansByName[unitName] then -- it's a human unit + ctld.logDebug("caught event S_EVENT_PLAYER_ENTER_UNIT for human unit [%s]", ctld.p(unitName)) + local _unit = Unit.getByName(unitName) + if _unit ~= nil then + -- assign transport pilot + ctld.logTrace("_unit = %s", ctld.p(_unit)) + + local playerTypeName = _unit:getTypeName() + ctld.logTrace("playerTypeName = %s", ctld.p(playerTypeName)) + + -- Allow units to CTLD by aircraft type and not by pilot name + if ctld.addPlayerAircraftByType then + for _,aircraftType in pairs(ctld.aircraftTypeTable) do + if aircraftType == playerTypeName then + ctld.logTrace("adding by aircraft type, unitName = %s", ctld.p(unitName)) + -- add transport unit to the list + table.insert(ctld.transportPilotNames, unitName) + -- add transport radio menu + ctld.addTransportF10MenuOptions(unitName) + break + end end - end - else - for _, _unitName in pairs(ctld.transportPilotNames) do - if _unitName == unitName then - ctld.logTrace("adding by transportPilotNames, unitName = %s", ctld.p(unitName)) - -- add transport radio menu - ctld.addTransportF10MenuOptions(unitName) - break + else + for _, _unitName in pairs(ctld.transportPilotNames) do + if _unitName == unitName then + ctld.logTrace("adding by transportPilotNames, unitName = %s", ctld.p(unitName)) + -- add transport radio menu + ctld.addTransportF10MenuOptions(unitName) + break + end end end end end + end) + + if not mist.DBs.humansByName[unitName] then + -- give a few milliseconds for MiST to handle the BIRTH event too + ctld.logTrace("give MiST some time to handle the BIRTH event too") + timer.scheduleFunction(function() + ctld.logTrace("resuming the 'nextSteps' coroutine in a timer") + coroutine.resume(nextSteps) + end, nil, timer.getTime() + 0.5) + else + ctld.logTrace("resuming the 'nextSteps' coroutine immediately") + coroutine.resume(nextSteps) end + end -- initialize the random number generator to make it almost random diff --git a/mist.lua b/mist.lua index fbf4f6a..d5a07df 100644 --- a/mist.lua +++ b/mist.lua @@ -34,17 +34,19 @@ mist = {} -- don't change these mist.majorVersion = 4 -mist.minorVersion = 4 -mist.build = 90 +mist.minorVersion = 5 +mist.build = "128-DYNSLOTS-01" -- 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 @@ -62,8 +64,8 @@ do -- the main scope local updateAliveUnitsCounter = 0 local updateTenthSecond = 0 - local mistGpId = 7000 - local mistUnitId = 7000 + local mistGpId = 70000 + local mistUnitId = 70000 local mistDynAddIndex = {[' air '] = 0, [' hel '] = 0, [' gnd '] = 0, [' bld '] = 0, [' static '] = 0, [' shp '] = 0} local scheduledTasks = {} @@ -73,11 +75,11 @@ do -- the main scope mist.nextGroupId = 1 mist.nextUnitId = 1 - local dbLog + local function initDBs() -- mist.DBs scope mist.DBs = {} - + mist.DBs.markList = {} mist.DBs.missionData = {} if env.mission then @@ -90,29 +92,100 @@ do -- the main scope 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 + -- if we add more coalition specific data then bullseye should be categorized by coaliton. For now its just the bullseye table mist.DBs.missionData.bullseye = {} + mist.DBs.missionData.countries = {} end - mist.DBs.zonesByName = {} - mist.DBs.zonesByNum = {} + + 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 + 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 + - 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 + 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 + + elseif copy.primitiveType == "Line" and copy.closed == true then + table.insert(copy.points, mist.utils.deepCopy(copy.points[1])) + end + if copy.points and #copy.points > 1 then + for u = 1, #copy.points do + copy.points[u].x = mist.utils.round(copy.points[u].x + copy.mapX, 2) + copy.points[u].y = mist.utils.round(copy.points[u].y + copy.mapY, 2) + 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 + + local abRef = {units = {}, airbase = {}} + for ind, val in pairs(world.getAirbases()) do + local cat = "airbase" + if Airbase.getDesc(val).category > 0 then + cat = "units" end + abRef[cat][tonumber(val:getID())] = {name = val:getName()} + end + mist.DBs.navPoints = {} mist.DBs.units = {} @@ -122,6 +195,7 @@ do -- the main scope if string.lower(coa_name_miz) == 'neutrals' then coa_name = 'neutral' end + local coaEnum = coalition.side[string.upper(coa_name)] if type(coa_data) == 'table' then mist.DBs.units[coa_name] = {} @@ -151,34 +225,50 @@ 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.missionData.countries[countryName] = coa_name 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 + 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 + local helipadId + local airdromeId + + if group_data.route and group_data.route.points and group_data.route.points[1] then + if group_data.route.points[1].airdromeId then + airdromeId = group_data.route.points[1].airdromeId + --table.insert(abRef.airbase[group_data.route.points[1].airdromeId], group_data.groupId) + elseif group_data.route.points[1].helipadId then + helipadId = group_data.route.points[1].helipadId + --table.insert(abRef.units[group_data.route.points[1].helipadId], group_data.groupId) + end + end 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 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 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].coalitionId = coaEnum 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 @@ -196,7 +286,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 @@ -206,6 +296,8 @@ do -- the main scope 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].coalitionId = coaEnum + units_tbl[unit_num].country = countryName units_tbl[unit_num].countryId = cntry_data.id units_tbl[unit_num].heading = unit_data.heading @@ -228,11 +320,17 @@ do -- the main scope 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 - + + if helipadId then + units_tbl[unit_num].helipadId = mist.utils.deepCopy(helipadId) + end + if airdromeId then + units_tbl[unit_num].airdromeId = mist.utils.deepCopy(airdromeId) + end units_tbl[unit_num].groupName = groupName units_tbl[unit_num].groupId = group_data.groupId - + units_tbl[unit_num].linkUnit = unit_data.linkUnit if unit_data.AddPropAircraft then units_tbl[unit_num].AddPropAircraft = unit_data.AddPropAircraft end @@ -240,6 +338,13 @@ 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 + if group_data.linkOffset then + if group_data.route and group_data.route.points and group_data.route.points[1] and group_data.route.points[1].linkUnit then + units_tbl[unit_num].linkUnit = group_data.route.points[1].linkUnit + end + units_tbl[unit_num].offset = unit_data.offsets + end + if unit_data.mass then units_tbl[unit_num].mass = unit_data.mass end @@ -247,14 +352,21 @@ do -- the main scope if unit_data.canCargo then units_tbl[unit_num].canCargo = unit_data.canCargo end + + if unit_data.category == "Heliports" then + if not abRef.units[unit_data.unitId] then + abRef.units[unit_data.unitId] = {name = unit_data.name} + end + + 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 --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 @@ -286,6 +398,36 @@ do -- the main scope mist.DBs.removedAliveUnits = {} -- will be filled in by the "updateAliveUnits" coroutine in mist.main. mist.DBs.const = {} + + mist.DBs.const.nato = { + a = "alpha", + b = "bravo", + c = "charlie", + d = "delta", + e = "echo", + f = "foxtrot", + g = "golf", + h = "hotel", + i = "india", + j = "juliett", + k = "kilo", + l = "lima", + m = "mike", + n = "november", + o = "oscar", + p = "papa", + q = "quebec", + r = "romeo", + s = "sierra", + t = "tango", + u = "uniform", + v = "victor", + w = "whiskey", + x = "xray", + y = "yankee", + z = "zulu", + + } -- not accessible by SSE, must use static list :-/ mist.DBs.const.callsigns = { @@ -305,6 +447,11 @@ do -- the main scope ['Arco'] = 2, ['Shell'] = 3, }, + ['TRANSPORT'] = { + ['Heavy'] = 9, + ['Trash'] = 10, + ['Cargo'] = 11, + ['Ascot'] = 12, ['JTAC'] = { ['Axeman'] = 1, ['Darknight'] = 2, @@ -346,14 +493,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", @@ -443,6 +681,40 @@ 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", + ["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", + ["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", } @@ -461,6 +733,10 @@ do -- the main scope -- end --Build DBs + + --dbLog:echo(abRef) + mist.DBs.spawnsByBase = {} + 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 @@ -470,22 +746,41 @@ do -- the main scope 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) + local copy = mist.utils.deepCopy(unit_data) + local num = #mist.DBs.unitsByNum + 1 + copy.dbNum = num + + mist.DBs.unitsByName[unit_data.unitName] = mist.utils.deepCopy(copy) + mist.DBs.unitsById[unit_data.unitId] = mist.utils.deepCopy(copy) 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)) + table.insert(mist.DBs.unitsByCat[unit_data.category], mist.utils.deepCopy(copy)) --dbLog:info('inserting $1', unit_data.unitName) - table.insert(mist.DBs.unitsByNum, mist.utils.deepCopy(unit_data)) + table.insert(mist.DBs.unitsByNum, mist.utils.deepCopy(copy)) 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) + mist.DBs.humansByName[unit_data.unitName] = mist.utils.deepCopy(copy) + mist.DBs.humansById[unit_data.unitId] = mist.utils.deepCopy(copy) --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 + if unit_data.airdromeId then + --log:echo(unit_data.airdromeId) + --log:echo(abRef.airbase[unit_data.airdromeId]) + if not mist.DBs.spawnsByBase[abRef.airbase[unit_data.airdromeId].name] then + mist.DBs.spawnsByBase[abRef.airbase[unit_data.airdromeId].name] = {} + end + table.insert(mist.DBs.spawnsByBase[abRef.airbase[unit_data.airdromeId].name], unit_data.unitName) + end + if unit_data.helipadId and abRef.units[unit_data.helipadId] and abRef.units[unit_data.helipadId].name then + if not mist.DBs.spawnsByBase[abRef.units[unit_data.helipadId].name] then + mist.DBs.spawnsByBase[abRef.units[unit_data.helipadId].name] = {} + end + table.insert(mist.DBs.spawnsByBase[abRef.units[unit_data.helipadId].name], unit_data.unitName) + end + end end end @@ -493,7 +788,60 @@ do -- the main scope end end 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) + --log:warn(zone) + zone.point = {} -- point is used by SSE + zone.point.x = zone_data.x + zone.point.y = land.getHeight({x = zone_data.x, y = zone_data.y}) + 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 tostring(prop.value) ~= "" then + 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 + if zone.linkUnit then + local uRef = mist.DBs.unitsByName[zone.linkUnit] + if uRef then + if zone.verticies then + local offset = {} + for i = 1, #zone.verticies do + table.insert(offset, {dist = mist.utils.get2DDist(uRef.point, zone.verticies[i]), heading = mist.getHeadingPoints(uRef.point, zone.verticies[i]) + uRef.heading}) + end + zone.offset = offset + else + zone.offset = {dist = mist.utils.get2DDist(uRef.point, zone.point), heading = mist.getHeadingPoints(uRef.point, zone.point) + uRef.heading} + 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 + zones_by_num se are different objects.. don't want them linked.]] + end + end + end + --DynDBs mist.DBs.MEunits = mist.utils.deepCopy(mist.DBs.units) mist.DBs.MEunitsByName = mist.utils.deepCopy(mist.DBs.unitsByName) @@ -504,8 +852,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) @@ -553,6 +901,7 @@ do -- the main scope if not static_found then val.objectPos = pos.p val.objectType = 'building' + val.typeName = Object.getTypeName(val.object) end else val.objectType = 'unknown' @@ -567,10 +916,10 @@ do -- the main scope 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) + mist.nextUnitId = mist.utils.deepCopy(idData.unitId) end if idData.groupId > mist.nextGroupId then - mist.nextGroupId = mist.utils.deepCopy(idData.groupId) + mist.nextGroupId = mist.utils.deepCopy(idData.groupId) end end end @@ -579,6 +928,7 @@ do -- the main scope end local function updateAliveUnits() -- coroutine function + --log:warn("updateALiveUnits") local lalive_units = mist.DBs.aliveUnits -- local references for faster execution local lunits = mist.DBs.unitsByNum local ldeepcopy = mist.utils.deepCopy @@ -595,7 +945,7 @@ do -- the main scope 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 + if unit and unit:isExist() == true then ----dbLog:info("unit named $1 alive!", lunits[i].unitName) -- spammy local pos = unit:getPosition() local newtbl = ldeepcopy(lunits[i]) @@ -609,6 +959,7 @@ do -- the main scope end end if i%units_per_run == 0 then + --log:warn("yield: $1", i) coroutine.yield() end end @@ -622,9 +973,10 @@ do -- the main scope end end - local function dbUpdate(event, objType) - --dbLog:info('dbUpdate') + local function dbUpdate(event, oType, origGroupName) + --dbLog:info('dbUpdate: $1', event) local newTable = {} + local objType = oType newTable.startTime = 0 if type(event) == 'string' then -- if name of an object. local newObject @@ -632,15 +984,16 @@ do -- the main scope newObject = Group.getByName(event) elseif StaticObject.getByName(event) then newObject = StaticObject.getByName(event) + objType = "static" -- 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() + local objName = newObject:getName() + newTable.name = origGroupName or objName newTable.groupId = tonumber(newObject:getID()) - newTable.groupName = newObject:getName() + newTable.groupName = origGroupName or objName local unitOneRef if objType == 'static' then unitOneRef = newObject @@ -649,9 +1002,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(Object.getCategory(newObject)) + 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 @@ -698,15 +1056,16 @@ do -- the main scope newTable.units = {} if objType == 'group' then for unitId, unitData in pairs(unitOneRef) do + local point = unitData:getPoint() 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].x = mist.utils.round(point.x) + newTable.units[unitId].y = mist.utils.round(point.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].alt = mist.utils.round(point.y) newTable.units[unitId].speed = mist.vec.mag(unitData:getVelocity()) newTable.units[unitId].heading = mist.getHeading(unitData, true) @@ -714,6 +1073,24 @@ do -- the main scope newTable.units[unitId].type = unitData:getTypeName() newTable.units[unitId].unitId = tonumber(unitData:getID()) + local pName = unitData:getPlayerName() + --log:warn("pName: '$1'", pName) + local unitName = newTable.units[unitId].unitName + --log:warn("unitName: '$1'", unitName) + --log:warn("mist.DBs.MEunitsByName[unitName]: '$1'", mist.DBs.MEunitsByName[unitName]) + if (pName and pName ~= "") and not mist.DBs.MEunitsByName[unitName] then + newTable.dynamicSlot = timer.getTime() + if not mist.DBs.humansById[unitId] then + mist.DBs.humansById[unitId] = newTable.units[unitId] + --log:info("added human by id: $1", unitId) + --log:info("mist.DBs.humansById: $1", mist.DBs.humansById) + end + if not mist.DBs.humansByName[unitName] then + mist.DBs.humansByName[unitName] = newTable.units[unitId] + --log:info("added human by name: $1", unitName) + --log:info("mist.DBs.humansByName: $1", mist.DBs.humansByName) + end + end newTable.units[unitId].groupName = newTable.groupName newTable.units[unitId].groupId = newTable.groupId @@ -723,7 +1100,7 @@ do -- the main scope 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 + if mist.stringMatch(data.name, unitName) == true then found = true newTable.units[unitId].livery_id = data.livery_id newTable.units[unitId].skill = data.skill @@ -733,7 +1110,11 @@ do -- the main scope mistAddedObjects[index] = nil end if found == false then - newTable.units[unitId].skill = "High" + if newTable.dynamicSlot then + newTable.units[unitId].skill = "Client" + else + newTable.units[unitId].skill = "High" + end 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 @@ -744,15 +1125,16 @@ do -- the main scope end else -- its a static newTable.category = 'static' + local point = newObject:getPoint() 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].x = mist.utils.round(point.x) + newTable.units[1].y = mist.utils.round(point.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].alt = mist.utils.round(point.y) newTable.units[1].heading = mist.getHeading(newObject, true) newTable.units[1].type = newObject:getTypeName() newTable.units[1].unitId = tonumber(newObject:getID()) @@ -762,7 +1144,7 @@ do -- the main scope 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 + if Object.getCategory(newObject) == 6 and newObject:getCargoDisplayName() then local mass = newObject:getCargoDisplayName() mass = string.gsub(mass, ' ', '') mass = string.gsub(mass, 'kg', '') @@ -782,16 +1164,20 @@ 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 end end end + --dbLog:warn(newTable) --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:warn(newTable) --dbLog:info('endDbUpdate') return newTable end @@ -818,18 +1204,20 @@ do -- the main scope --dbLog:info('iterate') for name, gData in pairs(tempSpawnedGroups) do --env.info(name) + --dbLog:warn(gData) local updated = false local stillExists = false + local staticGroupName 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') + --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') + --dbLog:info('Not static') if _g and _g:isExist() == true then stillExists = true @@ -847,22 +1235,32 @@ do -- the main scope 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 + if updated == false then + if 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 -- it is a static object + local ref = mist.DBs.unitsByName[name] + if ref then + staticGroupName = ref.groupName + else + stillExists = true + end + end else stillExists = true @@ -870,8 +1268,14 @@ 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, staticGroupName) + if dbData and type(dbData) == 'table' then + if dbData.name then + writeGroups[#writeGroups+1] = {data = dbData, isUpdated = updated} + else + dbLog:warn("dbUpdate failed to populate data: $1 $2 $3", name, gData.type, gData) + end + end end -- Work done, so remove end @@ -881,6 +1285,166 @@ do -- the main scope end end + local updateChecker = {} + + + local function writeDBTables(newEntry) + local ldeepCopy = mist.utils.deepCopy + local newTable = newEntry.data + --dbLog:info(newTable) + + local state = 0 + if not newTable.name then + dbLog:warn("Failed to add to database; sufficent data missing $1", newTable) + return false + end + + if updateChecker[newTable.name] then + dbLog:warn("Failed to add to database: $1. Stopped at state: $2", newTable.name, updateChecker[newTable.name]) + return false + else + --dbLog:info('define default state') + updateChecker[newTable.name] = 0 + --dbLog:info('define default state1') + state = updateChecker[newTable.name] + --dbLog:info('define default state2') + end + + local updated = newEntry.isUpdated + local mistCategory + --dbLog:info('define categoryy') + 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') + state = 1 + for newId, newUnitData in pairs(newTable.units) do + --dbLog:info(newId) + newUnitData.category = mistCategory + + --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. + state = 1.1 + --dbLog:info('Updating Unit Tables') + local refNum = mist.DBs.unitsByName[newUnitData.unitName].dbNum + 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 + state = 1.2 + --dbLog:info('updateByNum') + if refNum then -- easy way + --dbLog:info('refNum exists, Rewriting for unitsByCat') + mist.DBs.unitsByNum[refNum] = ldeepCopy(newUnitData) + else --- the hard way + --dbLog:info('iterate unitsByNum') + 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 + end + else + state = 1.3 + --dbLog:info('Unitname not in use, add as normal') + newUnitData.dbNum = #mist.DBs.unitsByNum + 1 + mist.DBs.unitsByCat[mistCategory][#mist.DBs.unitsByCat[mistCategory] + 1] = ldeepCopy(newUnitData) + mist.DBs.unitsByNum[#mist.DBs.unitsByNum + 1] = ldeepCopy(newUnitData) + end + if newUnitData.unitId then + --dbLog:info('byId') + mist.DBs.unitsById[tonumber(newUnitData.unitId)] = ldeepCopy(newUnitData) + end + + if newTable.dynamicSlot then + mist.DBs.humansByName[newTable.units[1].unitName] = ldeepCopy(newUnitData) + if newUnitData.unitId then + mist.DBs.humansById[newTable.units[1].unitId] = ldeepCopy(newUnitData) + end + 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') + state = 2 + if not mist.DBs.units[newTable.coalition] then + mist.DBs.units[newTable.coalition] = {} + end + state = 3 + 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 + state = 4 + if not mist.DBs.units[newTable.coalition][newTable.country][mistCategory] then + mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] = {} + end + state = 5 + 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 + --dbLog:info('adding to DBs Units') + mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][#mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] + 1] = ldeepCopy(newTable) + end + state = 6 + + if newTable.groupId then + --dbLog:info('Make groupsById') + mist.DBs.groupsById[newTable.groupId] = ldeepCopy(newTable) + end + --dbLog:info('make groupsByName') + mist.DBs.groupsByName[newTable.name] = ldeepCopy(newTable) + --dbLog:info('add to dynGroups') + mist.DBs.dynGroupsAdded[#mist.DBs.dynGroupsAdded + 1] = ldeepCopy(newTable) + --dbLog:info('clear entry') + + + + updateChecker[newTable.name] = nil + --dbLog:info('return') + return true + end + + function mist.forceAddToDB(object) + -- object is static object or group. + -- call dbUpdate to get the table + + local tbl = dbUpdate(object) + if tbl then + local res = writeDBTables(tbl) + if not res then + log:warn("Failed to force add to DBs: $1", object) + end + end + -- call writeDBTables with that table. + end + local function updateDBTables() local i = #writeGroups @@ -889,108 +1453,26 @@ do -- the main scope 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 + --dbLog:info('updateDBTables: $1', #writeGroups) + + for x = i, 1, -1 do + --dbLog:info(x) + local res = writeDBTables(writeGroups[x]) + if res and res == true then + --dbLog:info('result: complete') + writeGroups[x] = nil 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() + writeGroups[x] = nil end end + if x%savesPerRun == 0 then + --dbLog:info("yield") + coroutine.yield() + end if timer.getTime() > lastUpdateTime then lastUpdateTime = timer.getTime() end + --dbLog:info('endUpdateTables') end end @@ -998,27 +1480,31 @@ 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') - - --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} + + if Object.getCategory(event.initiator) == 1 then + --log:info('Object is a Unit') + local g = Unit.getGroup(event.initiator) + if g and event.initiator:getPlayerName() ~= "" and not mist.DBs.MEunitsByName[event.initiator:getName()] then + -- log:info(Unit.getGroup(event.initiator):getName()) + local gName = g:getName() + if not tempSpawnedGroups[gName] then + --log:warn('addedTo tempSpawnedGroups: $1', gName) + tempSpawnedGroups[gName] = {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') + --log:info('staticSpawnEvent') + --log:info(event) + --log:info(event.initiator:getTypeName()) + --table.insert(tempSpawnedUnits,(event.initiator)) + ------- + -- New functionality below. + ------- + --log:info(event.initiator:getName()) + --log:info('Object is Static') tempSpawnedGroups[StaticObject.getName(event.initiator)] = {type = 'static'} tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1 end @@ -1030,8 +1516,9 @@ do -- the main scope local function doScheduledFunctions() local i = 1 while i <= #scheduledTasks do + local refTime = timer.getTime() if not scheduledTasks[i].rep then -- not a repeated process - if scheduledTasks[i].t <= timer.getTime() then + if scheduledTasks[i].t <= refTime 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))) @@ -1043,14 +1530,14 @@ do -- the main scope 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 + if scheduledTasks[i].st and scheduledTasks[i].st <= refTime 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 + elseif scheduledTasks[i].t <= refTime 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) + 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 @@ -1076,52 +1563,63 @@ do -- the main scope id = tostring(original_id) .. ' #' .. tostring(id_ind) id_ind = id_ind + 1 end - + local valid 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 + if Object.isExist(val.object) then + 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]] + valid = true 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 + if Object.isExist(val.object) then + local pos = Object.getPosition(val.object) + if pos then + val.objectPos = pos.p + end + val.objectType = mist.DBs.removedAliveUnits[val.object.id_].category + valid = true 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 + if Object.isExist(val.object) then + 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' + val.typeName = Object.getTypeName(val.object) + end + else + val.objectType = 'unknown' end - if not static_found then - val.objectPos = pos.p - val.objectType = 'building' - end - else - val.objectType = 'unknown' + valid = true end end - mist.DBs.deadObjects[id] = val + if valid then + mist.DBs.deadObjects[id] = val + end end end end @@ -1169,10 +1667,13 @@ 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 + 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 @@ -1180,6 +1681,7 @@ do -- the main scope end end + --- init function. -- creates logger, adds default event handler @@ -1189,7 +1691,7 @@ do -- the main scope -- create logger mist.log = mist.Logger:new("MIST", mistSettings.logLevel) - dbLog = mist.Logger:new('MISTDB', 'warn') + dbLog = mist.Logger:new('MISTDB', mistSettings.dbLog) log = mist.log -- log shorthand -- set warning log level, showing only @@ -1251,7 +1753,7 @@ do -- the main scope coroutines.updateAliveUnits = nil end end - + doScheduledFunctions() end -- end of mist.main @@ -1284,8 +1786,10 @@ 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) + + local newObj = mist.utils.deepCopy(n) + --log:warn(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 @@ -1343,7 +1847,7 @@ do -- the main scope end if not newObj.heading then - newObj.heading = math.random(360) + newObj.heading = math.rad(math.random(360)) end if newObj.categoryStatic then @@ -1366,7 +1870,7 @@ do -- the main scope 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) + --log:warn(newObj) coalition.addStaticObject(country.id[newCountry], newObj) return newObj @@ -1379,8 +1883,10 @@ 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 if newGroup.countryId then @@ -1452,7 +1958,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 @@ -1537,16 +2047,33 @@ 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 - - --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') + -- update and verify any self tasks + if newGroup.route and newGroup.route.points then + --log:warn(newGroup.route.points) + 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.name ..'.lua') --log:warn(newGroup) -- sanitize table newGroup.groupName = nil @@ -1559,7 +2086,7 @@ do -- the main scope 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 @@ -1759,7 +2286,12 @@ do if metric then s = s .. ' at ' .. mist.utils.round(alt, 0) else - s = s .. ' at ' .. mist.utils.round(mist.utils.metersToFeet(alt), 0) + s = s .. ' at ' + local rounded = mist.utils.round(mist.utils.metersToFeet(alt/1000), 0) + s = s .. rounded + if rounded > 0 then + s = s .. "000" + end end end return s @@ -1816,10 +2348,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 = {} @@ -1834,10 +2366,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 @@ -2214,9 +2746,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 @@ -2277,12 +2825,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 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 @@ -2310,12 +2861,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 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 @@ -2340,12 +2894,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 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 @@ -2368,12 +2924,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] 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 @@ -2398,12 +2956,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 @@ -2426,12 +2986,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 @@ -2456,11 +3018,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 @@ -2482,11 +3046,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 @@ -2517,7 +3083,154 @@ do return units_tbl end -function mist.getDeadMapObjsInZones(zone_names) +function mist.getUnitsByAttribute(att, rnum, id) + local cEntry = {} + cEntry.type = att.type or att.typeName or att.typename + cEntry.country = att.country + cEntry.coalition = att.coalition + cEntry.skill = att.skill + cEntry.category = 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.type = att.type or att.typeName or att.typename + cEntry.country = att.country + cEntry.coalition = att.coalition + cEntry.skill = att.skill + cEntry.category = 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 == 'type' 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 == 'type' 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.getDeadMapObjectsFromPoint(p, radius, filters) + local map_objs = {} + local fCheck = filters or {} + local filter = {} + local r = radius or p.radius or 100 + local point = mist.utils.makeVec3(p) + local filterSize = 0 + for fInd, fVal in pairs(fCheck) do + filterSize = filterSize + 1 + filter[string.lower(fInd)] = true + filter[string.lower(fVal)] = true + + end + for obj_id, obj in pairs(mist.DBs.deadObjects) do + log:warn(obj) + if obj.objectType and obj.objectType == 'building' then --dead map object + if ((point.x - obj.objectPos.x)^2 + (point.z - obj.objectPos.z)^2)^0.5 <= r then + if filterSize == 0 or (obj.typeName and filter[string.lower(obj.typeName)])then + map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) + end + end + end + end + return map_objs +end + +function mist.getDeadMapObjsInZones(zone_names, filters) -- zone_names: table of zone names -- returns: table of dead map objects (indexed numerically) local map_objs = {} @@ -2527,31 +3240,198 @@ function mist.getDeadMapObjsInZones(zone_names) 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 + for i = 1, #zones do + local rtn = mist.getDeadMapObjectsFromPoint(zones[i], nil, filters) + for j = 1, #rtn do + map_objs[#map_objs + 1] = rtn[j] + end + end + return map_objs end -function mist.getDeadMapObjsInPolygonZone(zone) +function mist.getDeadMapObjsInPolygonZone(zone, filters) -- zone_names: table of zone names -- returns: table of dead map objects (indexed numerically) + local filter = {} + local fCheck = filters or {} + local filterSize = 0 + for fInd, fVal in pairs(fCheck) do + filterSize = filterSize + 1 + filter[string.lower(fInd)] = true + filter[string.lower(fVal)] = true + + end 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 + if mist.pointInPolygon(obj.objectPos, zone) and (filterSize == 0 or filter[string.lower(obj.objectData.type)]) then map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) end end 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.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.y - 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(seg1, seg2) + local segA = {mist.utils.makeVec2(seg1[1]), mist.utils.makeVec2(seg1[2])} + local segB = {mist.utils.makeVec2(seg2[1]), mist.utils.makeVec2(seg2[2])} + + local dx1, dy1 = segA[2].x - segA[1].x, segA[2].y - segA[1].y + local dx2, dy2 = segB[2].x - segB[1].x, segB[2].y - 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, {x = segA[1].x + t1*dx1, y = 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 = { @@ -2591,17 +3471,23 @@ 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 = {} 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 = Object.getCategory(lUnit) + if lUnit:isExist() == true and ((lCat == 1 and lUnit:isActive()) or lCat ~= 1) and mist.pointInPolygon(lUnit:getPosition().p, polyZone, max_alt) then + inZoneUnits[#inZoneUnits + 1] = lUnit end end @@ -2609,8 +3495,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 @@ -2622,41 +3507,54 @@ function mist.getUnitsInZones(unit_names, zone_names, zone_type) local units = {} local zones = {} - + + if zone_names and type(zone_names) == 'string' then + zone_names = {zone_names} + end for k = 1, #unit_names do - local unit = Unit.getByName(unit_names[k]) - if unit then + + local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) + if unit and unit:isExist() == true then units[#units + 1] = unit end end 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.verticies} end end 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 = Object.getCategory(lUnit) + 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 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] - 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] - break - 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 @@ -2679,15 +3577,15 @@ 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]) - if unit then + local unit = Unit.getByName(unit_names[k]) or StaticObject.getByName(unit_names[k]) + if unit and unit:isExist() == true then units[#units + 1] = unit end end for k = 1, #zone_unit_names do - local unit = Unit.getByName(zone_unit_names[k]) - if unit then + local unit = Unit.getByName(zone_unit_names[k]) or StaticObject.getByName(zone_unit_names[k]) + if unit and unit:isExist() == true then zone_units[#zone_units + 1] = unit end end @@ -2695,15 +3593,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 = Object.getCategory(lUnit) + 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 @@ -2713,7 +3614,7 @@ function mist.getUnitsInMovingZones(unit_names, zone_unit_names, radius, zone_ty end function mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) - log:info("$1, $2, $3, $4, $5", 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 = {} @@ -2721,19 +3622,25 @@ 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 - unit_info1[#unit_info1 + 1] = {} - unit_info1[#unit_info1].unit = unit1 - unit_info1[#unit_info1].pos = unit1:getPosition().p + if unit1 then + local lCat = Object.getCategory(unit1) + if ((lCat == 1 and unit1:isActive()) or lCat ~= 1) and unit1:isExist() == true then + unit_info1[#unit_info1 + 1] = {} + unit_info1[#unit_info1].unit = unit1 + unit_info1[#unit_info1].pos = unit1:getPosition().p + end end end for unitset2_ind = 1, #unitset2 do local unit2 = Unit.getByName(unitset2[unitset2_ind]) - if unit2 and unit2:isActive() == true then - unit_info2[#unit_info2 + 1] = {} - unit_info2[#unit_info2].unit = unit2 - unit_info2[#unit_info2].pos = unit2:getPosition().p + if unit2 then + local lCat = Object.getCategory(unit2) + if ((lCat == 1 and unit2:isActive()) or lCat ~= 1) and unit2:isExist() == true then + unit_info2[#unit_info2 + 1] = {} + unit_info2[#unit_info2].unit = unit2 + unit_info2[#unit_info2].pos = unit2:getPosition().p + end end end @@ -2766,7 +3673,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 @@ -2789,7 +3697,7 @@ function mist.getAvgPos(unitNames) elseif StaticObject.getByName(unitNames[i]) then unit = StaticObject.getByName(unitNames[i]) end - if unit then + if unit and unit:isExist() == true then local pos = unit:getPosition().p if pos then -- you never know O.o avgX = avgX + pos.x @@ -2859,13 +3767,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 @@ -2891,10 +3799,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) @@ -2985,8 +3894,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 @@ -3018,17 +4066,18 @@ do -- group functions scope --- Returns group data table of give group. function mist.getCurrentGroupData(gpName) - local dbData = mist.getGroupData(gpName) + local dbData = mist.getGroupData(gpName) or {} if Group.getByName(gpName) and Group.getByName(gpName):isExist() == true then local newGroup = Group.getByName(gpName) - local newData = {} + local newData = mist.utils.deepCopy(dbData) 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 @@ -3037,6 +4086,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() @@ -3051,30 +4103,31 @@ do -- group functions scope 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 + local pos = unitData:getPosition() + newData.units[unitNum].x = pos.p.x + newData.units[unitNum].y = pos.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].heading = math.atan2(pos.x.z, pos.x.x) + newData.units[unitNum].alt = pos.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 + elseif StaticObject.getByName(gpName) and StaticObject.getByName(gpName):isExist() == true and dbData.units 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) + local pos =staticObj:getPosition() + dbData.units[1].x = pos.p.x + dbData.units[1].y = pos.p.z + dbData.units[1].alt = pos.p.y + dbData.units[1].heading = math.atan2(pos.x.z, pos.x.x) return dbData end end - function mist.getGroupData(gpName) + function mist.getGroupData(gpName, route) local found = false local newData = {} if mist.DBs.groupsByName[gpName] then @@ -3115,14 +4168,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 @@ -3132,6 +4188,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) @@ -3147,40 +4207,48 @@ do -- group functions scope unitId = mist.DBs.MEunitsByName[unitIdent].unitId else log:error("Unit not found in mist.DBs.MEunitsByName: $1", unitIdent) + return {} end - end - local gpId = mist.DBs.MEunitsById[unitId].groupId + elseif type(unitIdent) == "number" and not mist.DBs.MEunitsById[unitIdent] then + log:error("Unit not found in mist.DBs.MEunitsBId: $1", unitIdent) + return {} + end + local ref = mist.DBs.MEunitsById[unitId] + + if ref then + 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 + 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_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 + return unitData.payload + end + end + end + end + end + end + end + end + end + end + end + end else log:error('Need string or number. Got: $1', type(unitIdent)) - return false + return {} end log:warn("Couldn't find payload for unit: $1", unitIdent) - return + return {} end function mist.getGroupPayload(groupIdent) @@ -3190,6 +4258,7 @@ do -- group functions scope gpId = mist.DBs.MEgroupsByName[groupIdent].groupId else log:error('$1 not found in mist.DBs.MEgroupsByName', groupIdent) + return {} end end @@ -3198,10 +4267,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 @@ -3219,20 +4288,60 @@ do -- group functions scope end else log:error('Need string or number. Got: $1', type(groupIdent)) - return false + return {} end log:warn("Couldn't find payload for group: $1", groupIdent) - return - + 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 + local gp = mist.utils.deepCopy(group_data) + gp.category = obj_cat_name + gp.country = cntry_data.id + return gp + 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) 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 @@ -3240,9 +4349,17 @@ do -- group functions scope elseif vars.groupName then gpName = vars.groupName else - log:error('Missing field groupName or gpName in variable table') + log:error('Missing field groupName or gpName in variable table. Table: $1', vars) 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 @@ -3250,8 +4367,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 @@ -3272,18 +4390,33 @@ do -- group functions scope 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 string.lower(newGroupData.category) == 'ship' then - validTerrain = {'SHALLOW_WATER' , 'WATER'} - elseif string.lower(newGroupData.category) == 'vehicle' then - validTerrain = {'LAND', 'ROAD'} + if vars.anyTerrain then + -- do nothing + elseif 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 @@ -3303,7 +4436,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 @@ -3381,20 +4514,46 @@ 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(vars.route) + end + -- log:warn(tempRoute) + 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 + end + + + --log:warn(newGroupData) --mist.debug.writeData(mist.utils.serialize,{'teleportToPoint', newGroupData}, 'newGroupData.lua') if string.lower(newGroupData.category) == 'static' then - --log:info(newGroupData) + --log:warn(newGroupData) return mist.dynAddStatic(newGroupData) end return mist.dynAdd(newGroupData) 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() @@ -3405,9 +4564,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 @@ -3416,10 +4575,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() @@ -3428,9 +4594,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 @@ -3440,10 +4606,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 @@ -3451,9 +4622,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 = {} @@ -3463,6 +4634,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 @@ -3673,6 +4849,9 @@ do -- group functions scope highNum = secondNum end local total = 1 + if highNum > 50 then + return math.random(lowNum, highNum) + end 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 @@ -3688,14 +4867,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) @@ -3823,6 +5008,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 @@ -4024,7 +5228,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 @@ -4032,7 +5236,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 @@ -4041,11 +5245,22 @@ 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. + if north then + local p1 = mist.utils.makeVec3(point1) + return mist.utils.getDir(mist.vec.sub(mist.utils.makeVec3(point2), p1), p1) + 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 @@ -4067,6 +5282,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}) @@ -4077,6 +5298,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 @@ -4260,21 +5487,21 @@ do -- mist.util scope -- 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 +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 @@ -4425,6 +5652,123 @@ function mist.utils.oneLineSerialize(tbl) end end +function mist.utils.tableShowSorted(tbls, v) + local vars = v or {} + local loc = vars.loc or "" + local indent = vars.indent or "" + local tableshow_tbls = vars.tableshow_tbls or {} + local tbl = tbls 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' + + local sorted = {} + local function byteCompare(str1, str2) + local shorter = string.len(str1) + if shorter > string.len(str2) then + shorter = string.len(str2) + end + for i = 1, shorter do + local b1 = string.byte(str1, i) + local b2 = string.byte(str2, i) + + if b1 < b2 then + return true + elseif b1 > b2 then + return false + end + + end + return false + end + for ind, val in pairs(tbl) do -- serialize its fields + local indS = tostring(ind) + local ins = {ind = indS, val = val} + local index + if #sorted > 0 then + local found = false + for i = 1, #sorted do + if byteCompare(indS, tostring(sorted[i].ind)) == true then + index = i + break + end + + end + end + if index then + table.insert(sorted, index, ins) + else + table.insert(sorted, ins) + end + + end + --log:warn(sorted) + for i = 1, #sorted do + local ind = sorted[i].ind + local val = sorted[i].val + + 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] = ' already defined: ' .. tableshow_tbls[val] .. ',\n' + else + tableshow_tbls[val] = loc .. '["' .. ind .. '"]' + --tbl_str[#tbl_str + 1] = tostring(val) .. ' ' + tbl_str[#tbl_str + 1] = mist.utils.tableShowSorted(val, {loc = loc .. '["' .. ind .. '"]', indent = indent .. ' ', tableshow_tbls = 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] = ', C function\n' + else + if (string.sub(info.source, 1, 2) == [[./]]) then + tbl_str[#tbl_str + 1] = string.format('%q', 'function, defined in (' .. '-' .. info.lastlinedefined .. ')' .. info.source) ..',\n' + else + tbl_str[#tbl_str + 1] = string.format('%q', 'function, defined in (' .. '-' .. 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 + --- Returns table in a easy readable string representation. -- this function is not meant for serialization because it uses -- newlines for better readability. @@ -4444,7 +5788,7 @@ function mist.utils.tableShow(tbl, loc, indent, tableshow_tbls) --based on seria tbl_str[#tbl_str + 1] = indent .. '{\n' - for ind,val in pairs(tbl) do -- serialize its fields + for ind, val in pairs(tbl) do if type(ind) == "number" then tbl_str[#tbl_str + 1] = indent tbl_str[#tbl_str + 1] = loc .. '[' @@ -4507,6 +5851,23 @@ end do -- mist.debug scope mist.debug = {} + function mist.debug.changeSetting(s) + if type(s) == 'table' then + for sName, sVal in pairs(s) do + if type(sVal) == 'string' or type(sVal) == 'number' then + if sName == 'log' then + mistSettings[sName] = sVal + mist.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. @@ -4514,11 +5875,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.tableShowSorted(g)) + else + + f:write(mist.utils.tableShowSorted(_G)) + end f:close() log:info('Wrote debug data to $1', fdir) --trigger.action.outText(errmsg, 10) @@ -4526,8 +5900,8 @@ do -- mist.debug scope 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 + 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 @@ -4562,6 +5936,141 @@ 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 + return output + end + 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 @@ -4633,6 +6142,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. @@ -4826,8 +6342,8 @@ 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]) - if unit then + local unit = Unit.getByName(units[i]) or StaticObject.getByName(units[i]) + if unit and unit:isExist() == true then local pos = unit:getPosition().p if mist.pointInPolygon(pos, zone, maxalt) then num_in_zone = num_in_zone + 1 @@ -4913,7 +6429,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) @@ -5282,13 +6804,16 @@ do -- mist.msg scope local caSlots = false local caMSGtoGroup = false + local anyUpdate = false + local anySound = false + local lastMessageTime = math.huge 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 env.mission.groundControl[index][roleName][rIndex] > 0 then + if type(rVal) == 'number' and rVal > 0 then caSlots = true break end @@ -5303,11 +6828,131 @@ do -- mist.msg scope 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. - ]] + log:warn("mistdisplayV5: $1", timer.getTime()) + + local clearView = true + if #messageList > 0 then + log:warn('Updates: $1', anyUpdate) + if anyUpdate == true or anySound == true then + 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 displayActive == false then + displayActive = true + end + --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') + local msgTableText = {} + local msgTableSound = {} + local curTime = timer.getTime() + for mInd, messageData in pairs(messageList) do + log:warn(messageData) + if messageData.displayTill < curTime then + log:warn('remove') + messageData:remove() -- now using the remove/destroy function. + else + if messageData.displayedFor then + messageData.displayedFor = curTime - messageData.addedAt + end + + local soundIndex = 0 + local refSound = 100000 + if messageData.multSound and #messageData.multSound > 0 then + anySound = true + for index, sData in pairs(messageData.multSound) do + if sData.time <= messageData.displayedFor and sData.played == false and sData.time < refSound then -- find index of the next sound to be played + refSound = 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 + 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 + + end + + end + ------- new display + if anyUpdate == true then + 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) + + 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 + 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 + + end + + anyUpdate = false + anySound = false + + else + mist.removeFunction(displayFuncId) + displayActive = false + end end local function mistdisplayV4() @@ -5468,14 +7113,16 @@ 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.displayTill = timer.getTime() + vars.displayTime 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 + new.clearView = vars.clearView or true + --log:warn('New Message: $1', new.text) if vars.multSound and vars.multSound[1] then new.multSound = vars.multSound @@ -5560,19 +7207,20 @@ end]] if messageList[i].name then if messageList[i].name == vars.name then --log:info('updateMessage') + messageList[i].displayTill = timer.getTime() + messageList[i].displayTime 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 + 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 @@ -5597,6 +7245,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 @@ -5607,6 +7256,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 @@ -6007,6 +7657,9 @@ 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. @@ -6026,98 +7679,397 @@ 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 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 + + local usedMarks = {} + + local mDefs = { + coa = { + ['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 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 + --log:echo(s) + + if mType == 'panel' then + local markScope = s.markScope or "all" + 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, 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 + 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 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, 4 do + if val[i] then + 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 + else + val[i] = 0.8 + log:warn("index $1 of color to mist.marker.add was missing, defaulted to 0.8", i) + end + end + elseif type(val) == 'string' then + val = mist.utils.hexToRGB(val) + + 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.DBs.markList[e.idx] then + --log:info('create maker DB: $1', e.idx) + 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.DBs.markList[e.idx].unit = e.initiator: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.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.DBs.markList[e.idx] then + mist.DBs.markList[e.idx] = nil + end + end + + end + + local function getMarkId(id) + if mist.DBs.markList[id] then + return id + else + for mEntry, mData in pairs(mist.DBs.markList) do + if id == mData.name or id == mData.id then + return mData.markId + end + end + end + + + end + + + local function removeMark(id) + --log:info("Removing Mark: $1", id) + local removed = false + if type(id) == 'table' then + for ind, val in pairs(id) do + local r + if type(val) == "table" and val.markId then + r = val.markId + else + r = getMarkId(val) + end + if r then + trigger.action.removeMark(r) + mist.DBs.markList[r] = nil + removed = true + end + end + + else + local r = getMarkId(id) + if r then + trigger.action.removeMark(r) + mist.DBs.markList[r] = nil + removed = true + end + 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 + if not userDefs[l1] then + userDefs[l1] = {} + end + + 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(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 + function mist.marker.add(vars) + --log:warn('markerFunc') + --log:warn(vars) + local pos = vars.point or vars.points or vars.pos + local text = vars.text or '' + local markFor = vars.markFor + 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 + local fillColor = vars.fillColor + 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 + + pos = mist.utils.deepCopy(pos) + 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.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.DBs.markList[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 - local markType = 'all' + if name then + usedMarks[name] = usedId + end + + if usedId == 0 then + usedId = iterate() + 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 + --log:warn("coa is string") + 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 + elseif type(markForCoa) == 'number' and markForCoa >=-1 and markForCoa <= #coas then + coa = markForCoa + --log:warn("coa is number") + markScope = 'coa' + end + markFor = coa + elseif 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' - log:info(markFor) + markScope = 'table' + --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) 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 + local matches = 0 + for name, index in pairs (coalition.side) do if listData == string.lower(name) then - markType = '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 @@ -6160,61 +8112,269 @@ do end end else - markType = 'all' + 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.DBs.markList[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], markScope = markScope, markFor = markForTable[i], markType = 'panel', name = name, readOnly = readOnly, time = timer.getTime()} + mist.DBs.markList[newId] = data + table.insert(list, data) - + draw(data) + + end + return list + end + end - - - if markType ~= 'table' then - local newId = iterate() - local data = {markId = newId, text = text, pos = pos, markType = markType, 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 + + local likeARainCoat = false + if mType == 7 then + local score = 0 + for i = 1, #pos do + if i < #pos then + local val = ((pos[i+1].x - pos[i].x)*(pos[i+1].z + pos[i].z)) + --log:warn("$1 index score is: $2", i, val) + score = score + val + else + score = score + ((pos[1].x - pos[i].x)*(pos[1].z + pos[i].z)) + end + end + --log:warn(score) + if score > 0 then -- it is anti-clockwise. Due to DCS bug make it clockwise. + likeARainCoat = true + --log:warn('flip') + + for i = #pos, 1, -1 do + fCal[#fCal+1] = pos[i] + end + end + end + if likeARainCoat == false then + for i = 1, #pos do + fCal[#fCal+1] = pos[i] + end + 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('fontSize', 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 + 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 + + if mType == 7 or mType == 1 then + local s = "trigger.action.markupToAll(" - -- 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 - + 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 + + 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 + + return removeMark(id) end function mist.marker.get(id) - + if mist.DBs.markList[id] then + return mist.DBs.markList[id] + end + local names = {} + 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 >= 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.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.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) + + + end +]] end --- Time conversion functions. -- @section mist.time @@ -6430,6 +8590,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. @@ -6453,7 +8614,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 @@ -6475,17 +8636,17 @@ 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 = {} 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 @@ -6515,10 +8676,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 @@ -6626,6 +8787,13 @@ do -- group tasks scope return end + + function mist.insertTaskToWP(wp, task) + if not wp.task then + wp.task = {["id"] = "ComboTask", ["params"] = {tasks = {}}} + end + table.insert(wp.task.params.tasks, task) + end function mist.ground.patrol(gpData, pType, form, speed) local vars = {} @@ -6822,14 +8990,19 @@ 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())) - 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 @@ -6854,14 +9027,21 @@ 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.zonesByName[zoneName] + if zone.type and zone.type == 2 then + return mist.getRandomPointInPoly(zone.verticies) + else + return mist.getRandPointInCircle(zone.point, zone.radius, innerRadius, maxA, minA) + end + end return false 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 +9053,8 @@ do -- group tasks scope minR = mist.utils.get2DDist(avg, zone[i]) end end + --log:warn('minR: $1', minR) + --log:warn('Radius: $1', radius) local lSpawnPos = {} for j = 1, 100 do newCoord = mist.getRandPointInCircle(avg, radius) @@ -6880,12 +9062,25 @@ do -- group tasks scope break end if j == 100 then - newCoord = mist.getRandPointInCircle(avg, 50000) + newCoord = mist.getRandPointInCircle(avg, radius) log:warn("Failed to find point in poly; Giving random point from center of the poly") end end return newCoord end + + function mist.getWindBearingAndVel(p) + local point = mist.utils.makeVec3(p) + 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.atan2(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 @@ -6941,25 +9136,25 @@ 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 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 @@ -6973,7 +9168,7 @@ do -- group tasks scope vars.headingDegrees = heading vars.speed = speed vars.point = mist.utils.zoneToVec3(zone) - + vars.disableRoads = disableRoads mist.groupToRandomPoint(vars) return @@ -7042,7 +9237,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) @@ -7061,26 +9256,54 @@ do -- group tasks scope end function mist.getLeadPos(group) - if type(group) == 'string' then -- group name - group = Group.getByName(group) - end + local gObj + if type(group) == 'string' then -- group name + gObj = Group.getByName(group) + elseif type(group) == "table" then + gObj = group + end - local units = group:getUnits() + if gObj then + local units = gObj: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 + local leader = units[1] + if leader then + if Unit.isExist(leader) then + return leader:getPoint() + elseif #units > 1 then + for i = 2, #units do + if Unit.isExist(units[i]) then + return units[i]:getPoint() + end + end + + end + end + end + log:error("Group passed to mist.getLeadPos might be dead: $1", group) end + + function mist.groupIsDead(groupName) -- copy more or less from on station + local gp = Group.getByName(groupName) + if gp then + if #gp:getUnits() > 0 and gp:isExist() == true then + return false + end + end + return true + end + + function mist.pointInZone(point, zone) + local ref = mist.utils.deepCopy(zone) + if type(zone) == 'string' then + ref = mist.DBs.zonesByName[zone] + end + if ref.verticies then + return mist.pointInPolygon(point, ref.verticies) + else + return mist.utils.get2DDist(point, ref.point) < ref.radius + end + end end @@ -7200,10 +9423,10 @@ do -- mist.Logger scope -- @usage -- log everything --myLogger:setLevel(3) function mist.Logger:setLevel(level) - if not level then - self.level = 2 - else + self.level = 2 + if level then if type(level) == 'string' then + level = string.lower(level) if level == 'none' or level == 'off' then self.level = 0 elseif level == 'error' then @@ -7215,8 +9438,6 @@ do -- mist.Logger scope end elseif type(level) == 'number' then self.level = level - else - self.level = 2 end end end @@ -7288,6 +9509,30 @@ do -- mist.Logger scope end end end + --- Logs a message, disregarding the log level and displays a message out text box. + -- @tparam string text the text with keywords to substitute. + -- @param ... variables to be used for substitution. + -- @usage myLogger:msg("Always logged!") + + function mist.Logger:echo(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 + trigger.action.outText(text, 30) + end + + + --- Logs a warning. -- logs a message prefixed with this loggers tag to dcs.log as diff --git a/test-mission.miz b/test-mission.miz index 2a6b27cb5ae7e1eb7e14773df8a5d891d0324d74..73c680b3a193ef5e0c2af909d5dc1d1e20bfe830 100644 GIT binary patch delta 185302 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

o-t1@E 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 L=kfWy2?Y8tc=4bJ