From 5506a5af6b3ac7629151a9144d0c13867f742a03 Mon Sep 17 00:00:00 2001 From: Ciaran Fisher Date: Sun, 20 Mar 2016 12:01:55 +0000 Subject: [PATCH 1/3] New Features Added ability to disable hover pickup and instead load crates with F10 Added new function - ctld.removeExtractZone to stop an extract zone after a while Added ability to limit the number of AA systems that can be built and active at one time --- CTLD.lua | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 189 insertions(+), 12 deletions(-) diff --git a/CTLD.lua b/CTLD.lua index 16d8c47..6956406 100644 --- a/CTLD.lua +++ b/CTLD.lua @@ -13,7 +13,12 @@ Contributors: - Steggles - https://github.com/Bob7heBuilder - Version: 1.52 - 20/02/2015 - BUG FIX - Disabled Crate static until ED bug is fixed + Version: 1.60 - 20/03/2015 + - Added ability to disable hover pickup and instead load crates with F10 + - Added new function - ctld.removeExtractZone to stop an extract zone after a while + - Added ability to limit the number of AA systems that can be built and active at one time + + ]] ctld = {} -- DONT REMOVE! @@ -22,14 +27,17 @@ ctld = {} -- DONT REMOVE! -- ********************* USER CONFIGURATION ****************************** -- ************************************************************************ -ctld.staticBugFix = true -- When statics are destroyed, DCS Crashes. Set this to FALSE when this bug is fixed :) +ctld.staticBugFix = true -- When statics are destroyed, DCS Crashes. Set this to FALSE when this bug is fixed or if you want to use REAL sling loads :) 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 +ctld.hoverPickup = true -- if set to false you can load crates with the F10 menu instead of hovering + ctld.enableCrates = true -- if false, Helis will not be able to spawn or unpack crates so will be normal CTTS ctld.slingLoad = false -- if false, crates can be used WITHOUT slingloading, by hovering above the crate, simulating slingloading but not the weight... -- There are some bug with Sling-loading that can cause crashes, if these occur set slingLoad to false -- to use the other method. +-- Set staticBugFix to FALSE if use set ctld.slingLoad to TRUE ctld.enableSmokeDrop = true -- if false, helis and c-130 will not be able to drop smoke @@ -82,6 +90,19 @@ ctld.hoverTime = 10 -- Time to hold hover above a crate for loading in seconds -- end of Simulated Sling load configuration +-- AA SYSTEM CONFIG -- +-- Sets a limit on the number of active AA systems that can be built for RED. +-- A system is counted as Active if its fully functional and has all parts +-- If a system is partially destroyed, it no longer counts towards the total +-- When this limit is hit, a player will still be able to get crates for an AA system, just unable +-- to unpack them + +ctld.AASystemLimitRED = 20 -- Red side limit + +ctld.AASystemLimitBLUE = 20 -- Blue side limit + +--END AA SYSTEM CONFIG -- + -- ***************** JTAC CONFIGURATION ***************** ctld.JTAC_LIMIT_RED = 10 -- max number of JTAC Crates for the RED Side @@ -642,8 +663,9 @@ function ctld.createExtractZone(_zone, _flagNumber, _smoke) trigger.action.setUserFlag(_flagNumber, 0) --start at 0 - local _details = { point = _pos3, name = _zone, smoke = _smoke, flag = _flagNumber, radius = _triggerZone.radius } - table.insert(ctld.extractZones, _details) + local _details = { point = _pos3, name = _zone, smoke = _smoke, flag = _flagNumber, radius = _triggerZone.radius} + + ctld.extractZones[_zone.."-".._flagNumber] = _details if _smoke ~= nil and _smoke > -1 then @@ -651,6 +673,14 @@ function ctld.createExtractZone(_zone, _flagNumber, _smoke) _smokeFunction = function(_args) + local _extractDetails = ctld.extractZones[_zone.."-".._flagNumber] + -- check zone is still active + if _extractDetails == nil then + -- stop refreshing smoke, zone is done + return + end + + trigger.action.smoke(_args.point, _args.smoke) --refresh in 5 minutes timer.scheduleFunction(_smokeFunction, _args, timer.getTime() + 300) @@ -661,6 +691,29 @@ function ctld.createExtractZone(_zone, _flagNumber, _smoke) end end + +-- Removes an extraction zone +-- +-- The smoke will take up to 5 minutes to disappear depending on the last time the smoke was activated +-- +-- The ctld.removeExtractZone function needs to be called once in a trigger action do script. +-- +-- e.g. ctld.removeExtractZone("extractzone1", 2) will remove an extraction zone at trigger zone "extractzone1" +-- that was setup with flag 2 +-- +-- +-- +function ctld.removeExtractZone(_zone,_flagNumber) + + local _extractDetails = ctld.extractZones[_zone.."-".._flagNumber] + + if _extractDetails ~= nil then + --remove zone + ctld.extractZones[_zone.."-".._flagNumber] = nil + + end +end + -- CONTINUOUS TRIGGER FUNCTION -- This function will count the current number of extractable RED and BLUE -- GROUPS in a zone and store the values in two flags @@ -1141,7 +1194,7 @@ function ctld.spawnCrateStatic(_country, _unitId, _point, _name, _weight,_side) local _crate local _spawnedCrate - if ctld.staticBugFix then + if ctld.staticBugFix and ctld.slingLoad == false then local _groupId = mist.getNextGroupId() local _groupName = "Crate Group #".._groupId @@ -1162,7 +1215,7 @@ function ctld.spawnCrateStatic(_country, _unitId, _point, _name, _weight,_side) _group.category = Group.Category.GROUND; _group.country = _country; - local _spawnedGroup = Group.getByName(mist.dynAdd(_group).name) + local _spawnedGroup = Group.getByName(mist.dynAdd(_group).name) -- Turn off AI trigger.action.setGroupAIOff(_spawnedGroup) @@ -2193,6 +2246,53 @@ function ctld.checkHoverStatus() end end +function ctld.loadNearbyCrate(_name) + local _transUnit = ctld.getTransportUnit(_name) + + if _transUnit ~= nil then + + if ctld.inAir(_transUnit) then + ctld.displayMessageToGroup(_transUnit, "You must land before you can load a crate!", 10,true) + return + end + + if ctld.inTransitSlingLoadCrates[_name] == nil then + local _crates = ctld.getCratesAndDistance(_transUnit) + + for _, _crate in pairs(_crates) do + + if _crate.dist < 50.0 then + ctld.displayMessageToGroup(_transUnit, "Loaded " .. _crate.details.desc .. " crate!", 10,true) + + if _transUnit:getCoalition() == 1 then + ctld.spawnedCratesRED[_crate.crateUnit:getName()] = nil + else + ctld.spawnedCratesBLUE[_crate.crateUnit:getName()] = nil + end + + _crate.crateUnit:destroy() + + local _copiedCrate = mist.utils.deepCopy(_crate.details) + + ctld.inTransitSlingLoadCrates[_name] = _copiedCrate + return + end + end + + ctld.displayMessageToGroup(_transUnit, "No Crates within 50m to load!", 10,true) + + else + -- crate onboard + + local _currentCrate = mist.utils.deepCopy(ctld.inTransitSlingLoadCrates[_name]) + + ctld.displayMessageToGroup(_transUnit, "You already have a ".._currentCrate.desc.." crate onboard!", 10,true) + end + end + + +end + --recreates beacons to make sure they work! function ctld.refreshRadioBeacons() @@ -2763,7 +2863,11 @@ function ctld.dropSlingCrate(_args) local _currentCrate = ctld.inTransitSlingLoadCrates[_heli:getName()] if _currentCrate == nil then - ctld.displayMessageToGroup(_heli, "You are not currently transporting any crates. \n\nTo Pickup a crate, hover for 10 seconds above the crate", 10) + if ctld.hoverPickup then + ctld.displayMessageToGroup(_heli, "You are not currently transporting any crates. \n\nTo Pickup a crate, hover for "..ctld.hoverTime.." seconds above the crate", 10) + else + ctld.displayMessageToGroup(_heli, "You are not currently transporting any crates. \n\nTo Pickup a crate - land and use F10 Crate Commands to load one.", 10) + end else local _heli = ctld.getTransportUnit(_args[1]) @@ -3350,7 +3454,18 @@ function ctld.unpackAASystem(_heli, _nearestCrate, _nearbyCrates,_aaSystemTempla end end - if _txt ~= "" then + local _activeLaunchers = ctld.countCompleteAASystems(_heli) + + local _allowed = ctld.getAllowedAASystems(_heli) + + env.info("Active: ".._activeLaunchers.." Allowed: ".._allowed) + + if _activeLaunchers + 1 > _allowed then + trigger.action.outTextForCoalition(_heli:getCoalition(), "Out of parts for AA Systems. Current limit is ".._allowed.." \n", 10) + return + end + + if _txt ~= "" then ctld.displayMessageToGroup(_heli, "Cannot build ".._aaSystemTemplate.name.."\n" .. _txt .. "\n\nOr the crates are not close enough together", 20) return else @@ -3377,11 +3492,70 @@ function ctld.unpackAASystem(_heli, _nearestCrate, _nearbyCrates,_aaSystemTempla ctld.processCallback({unit = _heli, crate = _nearestCrate , spawnedGroup = _spawnedGroup, action = "unpack"}) - trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully deployed a full ".._aaSystemTemplate.name.." to the field", 10) + trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully deployed a full ".._aaSystemTemplate.name.." to the field. \n\nAA Active System limit is: ".._allowed, 10) end end +--count the number of captured cities, sets the amount of allowed AA Systems +function ctld.getAllowedAASystems(_heli) + + if _heli:getCoalition() == 1 then + return ctld.AASystemLimitBLUE + else + return ctld.AASystemLimitRED + end + + +end + + +function ctld.countCompleteAASystems(_heli) + + local _count = 0 + + for _groupName, _hawkDetails in pairs(ctld.completeAASystems) do + + local _hawkGroup = Group.getByName(_groupName) + + -- env.info(_groupName..": "..mist.utils.tableShow(_hawkDetails)) + if _hawkGroup ~= nil and _hawkGroup:getCoalition() == _heli:getCoalition() then + + local _units = _hawkGroup:getUnits() + + if _units ~=nil and #_units > 0 then + --get the system template + local _aaSystemTemplate = _hawkDetails.system + + local _uniqueTypes = {} -- stores each unique part of system + local _types = {} + local _points = {} + + if _units ~= nil and #_units > 0 then + + for x = 1, #_units do + if _units[x]:getLife() > 0 then + + --this allows us to count each type once + _uniqueTypes[_units[x]:getTypeName()] = _units[x]:getTypeName() + + table.insert(_points, _units[x]:getPoint()) + table.insert(_types, _units[x]:getTypeName()) + end + end + end + + -- do we have the correct number of unique pieces and do we have enough points for all the pieces + if ctld.countTableEntries(_uniqueTypes) == _aaSystemTemplate.count and #_points >= _aaSystemTemplate.count then + _count = _count +1 + end + end + end + end + + return _count +end + function ctld.repairAASystem(_heli, _nearestCrate,_aaSystem) @@ -4224,6 +4398,9 @@ function ctld.addF10MenuOptions() if ctld.enabledFOBBuilding or ctld.enableCrates then local _crateCommands = missionCommands.addSubMenuForGroup(_groupId, "CTLD Commands", _rootPath) + if ctld.hoverPickup == false then + missionCommands.addCommandForGroup(_groupId, "Load Nearby Crate", _crateCommands, ctld.loadNearbyCrate, _unitName ) + end missionCommands.addCommandForGroup(_groupId, "Unpack Any Crate", _crateCommands, ctld.unpackCrates, { _unitName }) @@ -4386,7 +4563,7 @@ ctld.jtacLaserPointCodes = {} function ctld.JTACAutoLase(_jtacGroupName, _laserCode, _smoke, _lock, _colour) if ctld.jtacStop[_jtacGroupName] == true then - ctld.jtacStop[_jtacGroupName] = nil + ctld.jtacStop[_jtacGroupName] = nil -- allow it to be started again ctld.cleanupJTAC(_jtacGroupName) return end @@ -5391,7 +5568,7 @@ timer.scheduleFunction(ctld.checkAIStatus, nil, timer.getTime() + 1) timer.scheduleFunction(ctld.checkTransportStatus, nil, timer.getTime() + 5) timer.scheduleFunction(ctld.refreshRadioBeacons, nil, timer.getTime() + 5) -if ctld.enableCrates == true and ctld.slingLoad == false then +if ctld.enableCrates == true and ctld.slingLoad == false and ctld.hoverPickup then timer.scheduleFunction(ctld.checkHoverStatus, nil, timer.getTime() + 1) end @@ -5467,4 +5644,4 @@ env.info("CTLD READY") -- for key, value in pairs(getmetatable(_spawnedCrate)) do -- env.info(tostring(key)) -- env.info(tostring(value)) --- end +-- end \ No newline at end of file From 925523853feedcd585c524bcd3ac08016b6fc44f Mon Sep 17 00:00:00 2001 From: Ciaran Fisher Date: Sun, 20 Mar 2016 12:02:57 +0000 Subject: [PATCH 2/3] Updated Mist --- mist.lua | 9991 +++++++++++++++++++++++++++--------------------------- 1 file changed, 5031 insertions(+), 4960 deletions(-) diff --git a/mist.lua b/mist.lua index ad4d2d0..1b42f52 100644 --- a/mist.lua +++ b/mist.lua @@ -14,855 +14,869 @@ mist = {} -- don't change these mist.majorVersion = 4 -mist.minorVersion = 0 -mist.build = 57 +mist.minorVersion = 1 +mist.build = 61 -------------------------------------------------------------------------------------------------------------- -- the main area do - local coroutines = {} - - local tempSpawnedUnits = {} -- birth events added here - local mistAddedObjects = {} -- mist.dynAdd unit data added here - local mistAddedGroups = {} -- mist.dynAdd groupdata added here - local writeGroups = {} - local lastUpdateTime = 0 - - local function update_alive_units() -- coroutine function - local lalive_units = mist.DBs.aliveUnits -- local references for faster execution - local lunits = mist.DBs.unitsByNum - local ldeepcopy = mist.utils.deepCopy - local lUnit = Unit - local lremovedAliveUnits = mist.DBs.removedAliveUnits - local updatedUnits = {} - - if #lunits > 0 then - local units_per_run = math.ceil(#lunits/20) - if units_per_run < 5 then - units_per_run = 5 - end - - for i = 1, #lunits do - if lunits[i].category ~= 'static' then -- can't get statics with Unit.getByName :( - local unit = lUnit.getByName(lunits[i].unitName) - if unit then - --print('unit named ' .. lunits[i].unitName .. ' alive!') - local pos = unit:getPosition() - local newtbl = ldeepcopy(lunits[i]) - if pos then - newtbl['pos'] = pos.p - end - newtbl['unit'] = unit - --newtbl['rt_id'] = unit.id_ - lalive_units[unit.id_] = newtbl - updatedUnits[unit.id_] = true - end - end - if i%units_per_run == 0 then - --print('yielding at: ' .. tostring(i)) - coroutine.yield() - --print('resuming at: ' .. tostring(i)) - end - end - -- All units updated, remove any "alive" units that were not updated- they are dead! - for unit_id, unit in pairs(lalive_units) do - if not updatedUnits[unit_id] then - lremovedAliveUnits[unit_id] = unit - lalive_units[unit_id] = nil - end - end - end - end - - local function dbUpdate(event) - local newTable = {} - - newTable['startTime'] = 0 - - if type(event) == 'string' then -- if name of an object. - local newObject - local newType = 'group' - if Group.getByName(event) then - newObject = Group.getByName(event) - elseif StaticObject.getByName(event) then - newObject = StaticObject.getByName(event) - newType = 'static' - -- env.info('its static') - else - env.info('WTF') - return false - end - + local coroutines = {} + + local tempSpawnedUnits = {} -- birth events added here + local mistAddedObjects = {} -- mist.dynAdd unit data added here + local mistAddedGroups = {} -- mist.dynAdd groupdata added here + local writeGroups = {} + local lastUpdateTime = 0 + + local function update_alive_units() -- coroutine function + local lalive_units = mist.DBs.aliveUnits -- local references for faster execution + local lunits = mist.DBs.unitsByNum + local ldeepcopy = mist.utils.deepCopy + local lUnit = Unit + local lremovedAliveUnits = mist.DBs.removedAliveUnits + local updatedUnits = {} + + if #lunits > 0 then + local units_per_run = math.ceil(#lunits/20) + if units_per_run < 5 then + units_per_run = 5 + end + + for i = 1, #lunits do + if lunits[i].category ~= 'static' then -- can't get statics with Unit.getByName :( + local unit = lUnit.getByName(lunits[i].unitName) + if unit then + --print('unit named ' .. lunits[i].unitName .. ' alive!') + local pos = unit:getPosition() + local newtbl = ldeepcopy(lunits[i]) + if pos then + newtbl['pos'] = pos.p + end + newtbl['unit'] = unit + --newtbl['rt_id'] = unit.id_ + lalive_units[unit.id_] = newtbl + updatedUnits[unit.id_] = true + end + end + if i%units_per_run == 0 then + --print('yielding at: ' .. tostring(i)) + coroutine.yield() + --print('resuming at: ' .. tostring(i)) + end + end + -- All units updated, remove any "alive" units that were not updated- they are dead! + for unit_id, unit in pairs(lalive_units) do + if not updatedUnits[unit_id] then + lremovedAliveUnits[unit_id] = unit + lalive_units[unit_id] = nil + end + end + end + end + + local function dbUpdate(event) + local newTable = {} + + newTable['startTime'] = 0 + + if type(event) == 'string' then -- if name of an object. + local newObject + local newType = 'group' + if Group.getByName(event) then + newObject = Group.getByName(event) + elseif StaticObject.getByName(event) then + newObject = StaticObject.getByName(event) + newType = 'static' + -- env.info('its static') + else + env.info('WTF') + return false + end + - - newTable.name = newObject:getName() - newTable.groupId = tonumber(newObject:getID()) - newTable.groupName = newObject:getName() - local unitOneRef - if newType == 'static' then - unitOneRef = newObject - newTable.countryId = tonumber(newObject:getCountry()) - newTable.coalitionId = tonumber(newObject:getCoalition()) - newTable.category = 'static' - else - unitOneRef = newObject:getUnits() - newTable.countryId = tonumber(unitOneRef[1]:getCountry()) - newTable.coalitionId = tonumber(unitOneRef[1]:getCoalition()) - newTable.category = tonumber(newObject:getCategory()) - end - for countryData, countryId in pairs(country.id) do - if newTable.country and string.upper(countryData) == string.upper(newTable.country) or countryId == newTable.countryId then - newTable['countryId'] = countryId - newTable['country'] = string.lower(countryData) - for coaData, coaId in pairs(coalition.side) do - if coaId == coalition.getCountryCoalition(countryId) then - newTable['coalition'] = string.lower(coaData) - end - end - end - end - for catData, catId in pairs(Unit.Category) do - if newType == 'group' and Group.getByName(newTable.groupName):isExist() then - if catId == Group.getByName(newTable.groupName):getCategory() then - newTable['category'] = string.lower(catData) - end - elseif newType == 'static' and StaticObject.getByName(newTable.groupName):isExist() then - if catId == StaticObject.getByName(newTable.groupName):getCategory() then - newTable['category'] = string.lower(catData) - end - - end - end - local gfound = false - for index, data in pairs(mistAddedGroups) do - if mist.stringMatch(data.name, newTable.groupName) == true then - gfound = true - newTable.task = data.task - newTable.modulation = data.modulation - newTable.uncontrolled = data.uncontrolled - newTable.radioSet = data.radioSet - newTable.hidden = data.hidden - newTable.startTime = data.start_time - mistAddedGroups[index] = nil - end - end - - if gfound == false then - newTable.uncontrolled = false - newTable.hidden = false - end - - newTable.units = {} - if newType == 'group' then - for unitId, unitData in pairs(unitOneRef) do - newTable.units[unitId] = {} - newTable.units[unitId].unitName = unitData:getName() - - newTable.units[unitId].x = mist.utils.round(unitData:getPosition().p.x) - newTable.units[unitId].y = mist.utils.round(unitData:getPosition().p.z) - newTable.units[unitId].point = {} - newTable.units[unitId].point.x = newTable.units[unitId].x - newTable.units[unitId].point.y = newTable.units[unitId].y - newTable.units[unitId].alt = mist.utils.round(unitData:getPosition().p.y) - newTable.units[unitId].speed = mist.vec.mag(unitData:getVelocity()) - - newTable.units[unitId].heading = mist.getHeading(unitData, true) + + newTable.name = newObject:getName() + newTable.groupId = tonumber(newObject:getID()) + newTable.groupName = newObject:getName() + local unitOneRef + if newType == 'static' then + unitOneRef = newObject + newTable.countryId = tonumber(newObject:getCountry()) + newTable.coalitionId = tonumber(newObject:getCoalition()) + newTable.category = 'static' + else + unitOneRef = newObject:getUnits() + newTable.countryId = tonumber(unitOneRef[1]:getCountry()) + newTable.coalitionId = tonumber(unitOneRef[1]:getCoalition()) + newTable.category = tonumber(newObject:getCategory()) + end + for countryData, countryId in pairs(country.id) do + if newTable.country and string.upper(countryData) == string.upper(newTable.country) or countryId == newTable.countryId then + newTable['countryId'] = countryId + newTable['country'] = string.lower(countryData) + for coaData, coaId in pairs(coalition.side) do + if coaId == coalition.getCountryCoalition(countryId) then + newTable['coalition'] = string.lower(coaData) + end + end + end + end + for catData, catId in pairs(Unit.Category) do + if newType == 'group' and Group.getByName(newTable.groupName):isExist() then + if catId == Group.getByName(newTable.groupName):getCategory() then + newTable['category'] = string.lower(catData) + end + elseif newType == 'static' and StaticObject.getByName(newTable.groupName):isExist() then + if catId == StaticObject.getByName(newTable.groupName):getCategory() then + newTable['category'] = string.lower(catData) + end + + end + end + local gfound = false + for index, data in pairs(mistAddedGroups) do + if mist.stringMatch(data.name, newTable.groupName) == true then + gfound = true + newTable.task = data.task + newTable.modulation = data.modulation + newTable.uncontrolled = data.uncontrolled + newTable.radioSet = data.radioSet + newTable.hidden = data.hidden + newTable.startTime = data.start_time + mistAddedGroups[index] = nil + end + end + + if gfound == false then + newTable.uncontrolled = false + newTable.hidden = false + end + + newTable.units = {} + if newType == 'group' then + for unitId, unitData in pairs(unitOneRef) do + newTable.units[unitId] = {} + newTable.units[unitId].unitName = unitData:getName() + + newTable.units[unitId].x = mist.utils.round(unitData:getPosition().p.x) + newTable.units[unitId].y = mist.utils.round(unitData:getPosition().p.z) + newTable.units[unitId].point = {} + newTable.units[unitId].point.x = newTable.units[unitId].x + newTable.units[unitId].point.y = newTable.units[unitId].y + newTable.units[unitId].alt = mist.utils.round(unitData:getPosition().p.y) + newTable.units[unitId].speed = mist.vec.mag(unitData:getVelocity()) + + newTable.units[unitId].heading = mist.getHeading(unitData, true) - newTable.units[unitId].type = unitData:getTypeName() - newTable.units[unitId].unitId = tonumber(unitData:getID()) - - - newTable.units[unitId].groupName = newTable.groupName - newTable.units[unitId].groupId = newTable.groupId - newTable.units[unitId].countryId = newTable.countryId - newTable.units[unitId].coalitionId = newTable.coalitionId - newTable.units[unitId].coalition = newTable.coalition - newTable.units[unitId].country = newTable.country - local found = false - for index, data in pairs(mistAddedObjects) do - if mist.stringMatch(data.name, newTable.units[unitId].unitName) == true then - found = true - newTable.units[unitId].livery_id = data.livery_id - newTable.units[unitId].skill = data.skill - newTable.units[unitId].alt_type = data.alt_type - newTable.units[unitId].callsign = data.callsign - newTable.units[unitId].psi = data.psi - mistAddedObjects[index] = nil - end - if found == false then - newTable.units[unitId].skill = "High" - newTable.units[unitId].alt_type = "BARO" - end - end - - end - else -- its a static - newTable.category = 'static' - newTable.units[1] = {} - newTable.units[1].unitName = newObject:getName() - newTable.units[1].category = 'static' - newTable.units[1].x = mist.utils.round(newObject:getPosition().p.x) - newTable.units[1].y = mist.utils.round(newObject:getPosition().p.z) - newTable.units[1].point = {} - newTable.units[1].point.x = newTable.units[1].x - newTable.units[1].point.y = newTable.units[1].y - newTable.units[1].alt = mist.utils.round(newObject:getPosition().p.y) - newTable.units[1].heading = mist.getHeading(newObject, true) - newTable.units[1].type = newObject:getTypeName() - newTable.units[1].unitId = tonumber(newObject:getID()) - newTable.units[1].groupName = newTable.name - newTable.units[1].groupId = newTable.groupId - newTable.units[1].countryId = newTable.countryId - newTable.units[1].country = newTable.country - newTable.units[1].coalitionId = newTable.coalitionId - newTable.units[1].coalition = newTable.coalition - if newObject:getCategory() == 6 and newObject:getCargoDisplayName() then - local mass = newObject:getCargoDisplayName() - mass = string.gsub(mass, ' ', '') - mass = string.gsub(mass, 'kg', '') - newTable.units[1].mass = tonumber(mass) - newTable.units[1].categoryStatic = 'Cargos' - newTable.units[1].canCargo = true - newTable.units[1].shape_name = 'ab-212_cargo' - end - - ----- search mist added objects for extra data if applicable - for index, data in pairs(mistAddedObjects) do - if mist.stringMatch(data.name, newTable.units[1].unitName) == true then - newTable.units[1].shape_name = data.shape_name -- for statics - newTable.units[1].livery_id = data.livery_id - newTable.units[1].airdromeId = data.airdromeId - newTable.units[1].mass = data.mass - newTable.units[1].canCargo = data.canCargo - newTable.units[1].categoryStatic = data.categoryStatic - newTable.units[1].type = 'cargo1' - mistAddedObjects[index] = nil - end - end - end - end - - newTable['timeAdded'] = timer.getAbsTime() -- only on the dynGroupsAdded table. For other reference, see start time - --mist.debug.dumpDBs() - --end - - return newTable - end - + newTable.units[unitId].type = unitData:getTypeName() + newTable.units[unitId].unitId = tonumber(unitData:getID()) + + + newTable.units[unitId].groupName = newTable.groupName + newTable.units[unitId].groupId = newTable.groupId + newTable.units[unitId].countryId = newTable.countryId + newTable.units[unitId].coalitionId = newTable.coalitionId + newTable.units[unitId].coalition = newTable.coalition + newTable.units[unitId].country = newTable.country + local found = false + for index, data in pairs(mistAddedObjects) do + if mist.stringMatch(data.name, newTable.units[unitId].unitName) == true then + found = true + newTable.units[unitId].livery_id = data.livery_id + newTable.units[unitId].skill = data.skill + newTable.units[unitId].alt_type = data.alt_type + newTable.units[unitId].callsign = data.callsign + newTable.units[unitId].psi = data.psi + mistAddedObjects[index] = nil + end + if found == false then + newTable.units[unitId].skill = "High" + newTable.units[unitId].alt_type = "BARO" + end + end + + end + else -- its a static + newTable.category = 'static' + newTable.units[1] = {} + newTable.units[1].unitName = newObject:getName() + newTable.units[1].category = 'static' + newTable.units[1].x = mist.utils.round(newObject:getPosition().p.x) + newTable.units[1].y = mist.utils.round(newObject:getPosition().p.z) + newTable.units[1].point = {} + newTable.units[1].point.x = newTable.units[1].x + newTable.units[1].point.y = newTable.units[1].y + newTable.units[1].alt = mist.utils.round(newObject:getPosition().p.y) + newTable.units[1].heading = mist.getHeading(newObject, true) + newTable.units[1].type = newObject:getTypeName() + newTable.units[1].unitId = tonumber(newObject:getID()) + newTable.units[1].groupName = newTable.name + newTable.units[1].groupId = newTable.groupId + newTable.units[1].countryId = newTable.countryId + newTable.units[1].country = newTable.country + newTable.units[1].coalitionId = newTable.coalitionId + newTable.units[1].coalition = newTable.coalition + if newObject:getCategory() == 6 and newObject:getCargoDisplayName() then + local mass = newObject:getCargoDisplayName() + mass = string.gsub(mass, ' ', '') + mass = string.gsub(mass, 'kg', '') + newTable.units[1].mass = tonumber(mass) + newTable.units[1].categoryStatic = 'Cargos' + newTable.units[1].canCargo = true + newTable.units[1].shape_name = 'ab-212_cargo' + end + + ----- search mist added objects for extra data if applicable + for index, data in pairs(mistAddedObjects) do + if mist.stringMatch(data.name, newTable.units[1].unitName) == true then + newTable.units[1].shape_name = data.shape_name -- for statics + newTable.units[1].livery_id = data.livery_id + newTable.units[1].airdromeId = data.airdromeId + newTable.units[1].mass = data.mass + newTable.units[1].canCargo = data.canCargo + newTable.units[1].categoryStatic = data.categoryStatic + newTable.units[1].type = 'cargo1' + mistAddedObjects[index] = nil + end + end + end + end + --mist.debug.writeData(mist.utils.serialize,{'msg', newTable}, timer.getAbsTime() ..'Group.lua') + newTable['timeAdded'] = timer.getAbsTime() -- only on the dynGroupsAdded table. For other reference, see start time + --mist.debug.dumpDBs() + --end + + return newTable + end + - - local function checkSpawnedEvents() - if #tempSpawnedUnits > 0 then - local groupsToAdd = {} - local ltemp = tempSpawnedUnits - local ltable = table + + local function checkSpawnedEvents() + if #tempSpawnedUnits > 0 then + local groupsToAdd = {} + local added = false + local ltemp = tempSpawnedUnits + local ltable = table - local updatesPerRun = math.ceil(#tempSpawnedUnits/20) - if updatesPerRun < 5 then - updatesPerRun = 5 - end - for x = 1, #tempSpawnedUnits do - local spawnedObj = ltemp[x] - if spawnedObj and spawnedObj:isExist() then - local found = false - for index, name in pairs(groupsToAdd) do - if spawnedObj:getCategory() == 1 then -- normal groups - if mist.stringMatch(spawnedObj:getGroup():getName(), name) == true then - found = true - break - end - elseif spawnedObj:getCategory() == 3 or spawnedObj:getCategory() == 6 then -- static objects - if mist.stringMatch(spawnedObj:getName(), name) == true then - found = true - break - end - end - end - -- for some reason cargo objects are returning as category == 6. - if found == false then - if spawnedObj:getCategory() == 1 then -- normal groups - groupsToAdd[#groupsToAdd + 1] = spawnedObj:getGroup():getName() - elseif spawnedObj:getCategory() == 3 or spawnedObj:getCategory() == 6 then -- static objects - groupsToAdd[#groupsToAdd + 1] = spawnedObj:getName() - end - end - end - + local updatesPerRun = math.ceil(#tempSpawnedUnits/20) + if updatesPerRun < 5 then + updatesPerRun = 5 + end + for x = 1, #tempSpawnedUnits do + local spawnedObj = ltemp[x] + if spawnedObj and spawnedObj:isExist() then + local found = false + for name, val in pairs(groupsToAdd) do + if spawnedObj:getCategory() == 1 then -- normal groups + if mist.stringMatch(spawnedObj:getGroup():getName(), name) == true then + found = true + break + end + elseif spawnedObj:getCategory() == 3 or spawnedObj:getCategory() == 6 then -- static objects + if mist.stringMatch(spawnedObj:getName(), name) == true then + found = true + break + end + end + end + -- for some reason cargo objects are returning as category == 6. + if found == false then + added = true + if spawnedObj:getCategory() == 1 then -- normal groups + groupsToAdd[spawnedObj:getGroup():getName()] = true + elseif spawnedObj:getCategory() == 3 or spawnedObj:getCategory() == 6 then -- static objects + groupsToAdd[spawnedObj:getName()] = true + end + + end + end - table.remove(ltemp, x) - if x%updatesPerRun == 0 then - coroutine.yield() - end - - end - - - if #groupsToAdd > 0 then - for groupId, groupName in pairs(groupsToAdd) do - if not mist.DBs.groupsByName[groupName] or mist.DBs.groupsByName[groupName] and mist.DBs.groupsByName[groupName].startTime + 10 < timer.getAbsTime() then - writeGroups[#writeGroups + 1] = dbUpdate(groupName) - end - end - end - end - end - - - local function updateDBTables() - local i = 0 - for index, newTable in pairs(writeGroups) do - i = i + 1 - end - local savesPerRun = math.ceil(i/10) - if savesPerRun < 5 then - savesPerRun = 5 - end - if i > 0 then - local ldeepCopy = mist.utils.deepCopy - for x = 1, i do - local newTable = writeGroups[x] - local mistCategory - if type(newTable.category) == 'string' then - mistCategory = string.lower(newTable.category) - end + table.remove(ltemp, x) + if x%updatesPerRun == 0 then + coroutine.yield() + end + 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 - for newId, newUnitData in pairs(newTable.units) do - newUnitData.category = mistCategory - if newUnitData.unitId then - mist.DBs.unitsById[tonumber(newUnitData.unitId)] = ldeepCopy(newUnitData) - end - - mist.DBs.unitsByName[newUnitData.unitName] = ldeepCopy(newUnitData) - mist.DBs.unitsByCat[mistCategory][#mist.DBs.unitsByCat[mistCategory] + 1] = ldeepCopy(newUnitData) - mist.DBs.unitsByNum[#mist.DBs.unitsByNum + 1] = ldeepCopy(newUnitData) - end - -- this is a really annoying DB to populate. Gotta create new tables in case its missing - if not mist.DBs.units[newTable.coalition] then - mist.DBs.units[newTable.coalition] = {} - end + if added == true then + for groupName, val in pairs(groupsToAdd) do + local dataChanged = false + if mist.DBs.groupsByName[groupName] then + for _index, data in pairs(mist.DBs.groupsByName[groupName]) do + if data.unitName ~= spawnedObj:getName() and data.unitId ~= spawnedObj:getID() and data.type ~= spawnedObj:getTypeName() then + dataChanged = true + break + end + end + if dataChanged == false then + groupsToAdd[groupName] = false + end + end + if groupsToAdd[groupName] == true or not mist.DBs.groupsByName[groupName] then + writeGroups[#writeGroups + 1] = dbUpdate(groupName) + end + end + end + end + end + + + local function updateDBTables() + + local i = 0 + for index, newTable in pairs(writeGroups) do + i = i + 1 + end + local savesPerRun = math.ceil(i/10) + if savesPerRun < 5 then + savesPerRun = 5 + end + if i > 0 then + local ldeepCopy = mist.utils.deepCopy + for x = 1, i do + local newTable = writeGroups[x] + local mistCategory + if type(newTable.category) == 'string' then + mistCategory = string.lower(newTable.category) + 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 - mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][#mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] + 1] = ldeepCopy(newTable) - - if newTable.groupId then - mist.DBs.groupsById[newTable.groupId] = ldeepCopy(newTable) - end - - mist.DBs.groupsByName[newTable.name] = ldeepCopy(newTable) - mist.DBs.dynGroupsAdded[#mist.DBs.dynGroupsAdded + 1] = ldeepCopy(newTable) - - writeGroups[x] = nil - if x%savesPerRun == 0 then - coroutine.yield() - end - end - if timer.getTime() > lastUpdateTime then - lastUpdateTime = timer.getTime() - end - end - end - - local update_alive_units_counter = 0 - local write_DB_table_counter = 0 - local check_spawn_events_counter = 0 - - -- THE MAIN FUNCTION -- Accessed 100 times/sec. - mist.main = function() - timer.scheduleFunction(mist.main, {}, timer.getTime() + 0.01) --reschedule first in case of Lua error - ---------------------------------------------------------------------------------------------------------- - --area to add new stuff in - write_DB_table_counter = write_DB_table_counter + 1 - if write_DB_table_counter == 10 then - - write_DB_table_counter = 0 - - if not coroutines.updateDBTables then - coroutines['updateDBTables'] = coroutine.create(updateDBTables) - end - - coroutine.resume(coroutines.updateDBTables) - - if coroutine.status(coroutines.updateDBTables) == 'dead' then - coroutines.updateDBTables = nil - end - end + 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 + for newId, newUnitData in pairs(newTable.units) do + newUnitData.category = mistCategory + if newUnitData.unitId then + mist.DBs.unitsById[tonumber(newUnitData.unitId)] = ldeepCopy(newUnitData) + end + + mist.DBs.unitsByName[newUnitData.unitName] = ldeepCopy(newUnitData) + mist.DBs.unitsByCat[mistCategory][#mist.DBs.unitsByCat[mistCategory] + 1] = ldeepCopy(newUnitData) + mist.DBs.unitsByNum[#mist.DBs.unitsByNum + 1] = ldeepCopy(newUnitData) + end + -- this is a really annoying DB to populate. Gotta create new tables in case its missing + if not mist.DBs.units[newTable.coalition] then + mist.DBs.units[newTable.coalition] = {} + end - check_spawn_events_counter = check_spawn_events_counter + 1 - if check_spawn_events_counter == 10 then - - check_spawn_events_counter = 0 - - if not coroutines.checkSpawnedEvents then - coroutines['checkSpawnedEvents'] = coroutine.create(checkSpawnedEvents) - end - - coroutine.resume(coroutines.checkSpawnedEvents) - - if coroutine.status(coroutines.checkSpawnedEvents) == 'dead' then - coroutines.checkSpawnedEvents = nil - end - end - - ----------------------------------------------------------------------------------------------------------- - --updating alive units - update_alive_units_counter = update_alive_units_counter + 1 - if update_alive_units_counter == 5 then - update_alive_units_counter = 0 - - if not coroutines.update_alive_units then - coroutines['update_alive_units'] = coroutine.create(update_alive_units) - end - - coroutine.resume(coroutines.update_alive_units) - - if coroutine.status(coroutines.update_alive_units) == 'dead' then - coroutines.update_alive_units = nil - end - end - - mist.do_scheduled_functions() - end -- end of mist.main - -------------------------------------------- - ------------ mist dyn add stuff for coroutines - local mistGpId = 7000 - local mistUnitId = 7000 - local mistDynAddIndex = 1 - - - mist.nextGroupId = 1 - mist.nextUnitId = 1 - - mist.getNextUnitId = function() - mist.nextUnitId = mist.nextUnitId + 1 - if mist.nextUnitId > 6900 then - mist.nextUnitId = 14000 - end - return mist.nextUnitId - end - - mist.getNextGroupId = function() - mist.nextGroupId = mist.nextGroupId + 1 - if mist.nextGroupId > 6900 then - mist.nextGroupId = 14000 - end - return mist.nextGroupId - end - - mist.getLastDBUpdateTime = function() - return lastUpdateTime - end - - local function groupSpawned(event) - if event.id == world.event.S_EVENT_BIRTH and timer.getTime0() < timer.getAbsTime()then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line - table.insert(tempSpawnedUnits,(event.initiator)) - end - 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 + mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory][#mist.DBs.units[newTable.coalition][(newTable.country)][mistCategory] + 1] = ldeepCopy(newTable) + + if newTable.groupId then + mist.DBs.groupsById[newTable.groupId] = ldeepCopy(newTable) + end + + mist.DBs.groupsByName[newTable.name] = ldeepCopy(newTable) + mist.DBs.dynGroupsAdded[#mist.DBs.dynGroupsAdded + 1] = ldeepCopy(newTable) + + writeGroups[x] = nil + if x%savesPerRun == 0 then + coroutine.yield() + end + end + if timer.getTime() > lastUpdateTime then + lastUpdateTime = timer.getTime() + end + end + end + + local update_alive_units_counter = 0 + local write_DB_table_counter = 0 + local check_spawn_events_counter = 0 + + -- THE MAIN FUNCTION -- Accessed 100 times/sec. + mist.main = function() + timer.scheduleFunction(mist.main, {}, timer.getTime() + 0.01) --reschedule first in case of Lua error + ---------------------------------------------------------------------------------------------------------- + --area to add new stuff in + write_DB_table_counter = write_DB_table_counter + 1 + if write_DB_table_counter == 10 then + + write_DB_table_counter = 0 + + if not coroutines.updateDBTables then + coroutines['updateDBTables'] = coroutine.create(updateDBTables) + end + + coroutine.resume(coroutines.updateDBTables) + + if coroutine.status(coroutines.updateDBTables) == 'dead' then + coroutines.updateDBTables = nil + end + end - - - - mist.dynAddStatic = function(staticObj) - local newObj = {} - newObj.groupId = staticObj.groupId - newObj.category = staticObj.category - newObj.type = staticObj.type - newObj.unitId = staticObj.unitId - newObj.y = staticObj.y - newObj.x = staticObj.x - newObj.heading = staticObj.heading - newObj.name = staticObj.name - newObj.dead = staticObj.dead - newObj.country = staticObj.country - newObj.countryId = staticObj.countryId - newObj.clone = staticObj.clone - newObj.shape_name = staticObj.shape_name - newObj.canCargo = staticObj.canCargo - newObj.mass = staticObj.mass - newObj.categoryStatic = staticObj.categoryStatic - if staticObj.units then -- if its mist format - newObj.groupId = staticObj.units[1].groupId - newObj.category = staticObj.units[1].category - newObj.type = staticObj.units[1].type - newObj.unitId = staticObj.units[1].unitId - newObj.y = staticObj.units[1].y - newObj.x = staticObj.units[1].x - newObj.heading = staticObj.units[1].heading - newObj.name = staticObj.units[1].name - newObj.dead = staticObj.units[1].dead - newObj.country = staticObj.units[1].country - newObj.countryId = staticObj.units[1].countryId - newObj.shape_name = staticObj.units[1].shape_name - newObj.canCargo = staticObj.units[1].canCargo - newObj.mass = staticObj.units[1].mass - newObj.categoryStatic = staticObj.units[1].categoryStatic - end - - if not newObj.country then - return false - end - - local newCountry = newObj.country - if newObj.countryId then - newCountry = newObj.countryId - end - for countryId, countryName in pairs(country.name) do - if type(newObj.country) == 'string' then - if tostring(countryName) == string.upper(newObj.country) then - newCountry = countryName - end - elseif type(newObj.country) == 'number' then - if countryId == newObj.country then - newCountry = countryName - end - end - end - - if newObj.clone or not newObj.groupId then - mistGpId = mistGpId + 1 - newObj.groupId = mistGpId - end - - if newObj.clone or not newObj.unitId then - mistUnitId = mistUnitId + 1 - newObj.unitId = mistUnitId - end - - if newObj.clone or not newObj.name then - mistDynAddIndex = mistDynAddIndex + 1 - newObj.name = (newCountry .. ' static ' .. mistDynAddIndex) - end - - if not newObj.dead then - newObj.dead = false - end - - if not newObj.heading then - newObj.heading = math.random(360) - end - - if newObj.categoryStatic then - newObj.category = newObj.categoryStatic - end - if newObj.mass then - newObj.category = 'Cargos' - end - 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 - coalition.addStaticObject(country.id[newCountry], newObj) + check_spawn_events_counter = check_spawn_events_counter + 1 + if check_spawn_events_counter == 10 then + + check_spawn_events_counter = 0 + + if not coroutines.checkSpawnedEvents then + coroutines['checkSpawnedEvents'] = coroutine.create(checkSpawnedEvents) + end + + coroutine.resume(coroutines.checkSpawnedEvents) + + if coroutine.status(coroutines.checkSpawnedEvents) == 'dead' then + coroutines.checkSpawnedEvents = nil + end + end + + ----------------------------------------------------------------------------------------------------------- + --updating alive units + update_alive_units_counter = update_alive_units_counter + 1 + if update_alive_units_counter == 5 then + update_alive_units_counter = 0 + + if not coroutines.update_alive_units then + coroutines['update_alive_units'] = coroutine.create(update_alive_units) + end + + coroutine.resume(coroutines.update_alive_units) + + if coroutine.status(coroutines.update_alive_units) == 'dead' then + coroutines.update_alive_units = nil + end + end + + mist.do_scheduled_functions() + end -- end of mist.main + -------------------------------------------- + ------------ mist dyn add stuff for coroutines + local mistGpId = 7000 + local mistUnitId = 7000 + local mistDynAddIndex = 1 + + + mist.nextGroupId = 1 + mist.nextUnitId = 1 + + mist.getNextUnitId = function() + mist.nextUnitId = mist.nextUnitId + 1 + if mist.nextUnitId > 6900 then + mist.nextUnitId = 14000 + end + return mist.nextUnitId + end + + mist.getNextGroupId = function() + mist.nextGroupId = mist.nextGroupId + 1 + if mist.nextGroupId > 6900 then + mist.nextGroupId = 14000 + end + return mist.nextGroupId + end + + mist.getLastDBUpdateTime = function() + return lastUpdateTime + end + + local function groupSpawned(event) + if event.id == world.event.S_EVENT_BIRTH and timer.getTime0() < timer.getAbsTime()then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line + table.insert(tempSpawnedUnits,(event.initiator)) + end + end - return newObj - end - return false - end + + + + mist.dynAddStatic = function(staticObj) + local newObj = {} + newObj.groupId = staticObj.groupId + newObj.category = staticObj.category + newObj.type = staticObj.type + newObj.unitId = staticObj.unitId + newObj.y = staticObj.y + newObj.x = staticObj.x + newObj.heading = staticObj.heading + newObj.name = staticObj.name + newObj.dead = staticObj.dead + newObj.country = staticObj.country + newObj.countryId = staticObj.countryId + newObj.clone = staticObj.clone + newObj.shape_name = staticObj.shape_name + newObj.canCargo = staticObj.canCargo + newObj.mass = staticObj.mass + newObj.categoryStatic = staticObj.categoryStatic + if staticObj.units then -- if its mist format + newObj.groupId = staticObj.units[1].groupId + newObj.category = staticObj.units[1].category + newObj.type = staticObj.units[1].type + newObj.unitId = staticObj.units[1].unitId + newObj.y = staticObj.units[1].y + newObj.x = staticObj.units[1].x + newObj.heading = staticObj.units[1].heading + newObj.name = staticObj.units[1].name + newObj.dead = staticObj.units[1].dead + newObj.country = staticObj.units[1].country + newObj.countryId = staticObj.units[1].countryId + newObj.shape_name = staticObj.units[1].shape_name + newObj.canCargo = staticObj.units[1].canCargo + newObj.mass = staticObj.units[1].mass + newObj.categoryStatic = staticObj.units[1].categoryStatic + end + + if not newObj.country then + return false + end + + local newCountry = newObj.country + if newObj.countryId then + newCountry = newObj.countryId + end + for countryId, countryName in pairs(country.name) do + if type(newObj.country) == 'string' then + if tostring(countryName) == string.upper(newObj.country) then + newCountry = countryName + end + elseif type(newObj.country) == 'number' then + if countryId == newObj.country then + newCountry = countryName + end + end + end + + if newObj.clone or not newObj.groupId then + mistGpId = mistGpId + 1 + newObj.groupId = mistGpId + end + + if newObj.clone or not newObj.unitId then + mistUnitId = mistUnitId + 1 + newObj.unitId = mistUnitId + end + + if newObj.clone or not newObj.name then + mistDynAddIndex = mistDynAddIndex + 1 + newObj.name = (country.name[newCountry] .. ' static ' .. mistDynAddIndex) + end + + if not newObj.dead then + newObj.dead = false + end + + if not newObj.heading then + newObj.heading = math.random(360) + end + + if newObj.categoryStatic then + newObj.category = newObj.categoryStatic + end + if newObj.mass then + newObj.category = 'Cargos' + end + 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 + coalition.addStaticObject(country.id[newCountry], newObj) - mist.dynAdd = function(newGroup) -- same as coalition.add function in SSE. checks the passed data to see if its valid. + return newObj + end + return false + end + + mist.dynAdd = function(newGroup) -- 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 -- - - + + - --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua') - local cntry = newGroup.country - if newGroup.countryId then - cntry = newGroup.countryId - end - - local groupType = newGroup.category - local newCountry = '' - -- validate data - for countryId, countryName in pairs(country.name) do - if type(cntry) == 'string' then - if tostring(countryName) == string.upper(cntry) then - newCountry = countryName - end - elseif type(cntry) == 'number' then - if countryId == cntry then - newCountry = countryName - end - end - end - - if newCountry == '' then - return false - end - - local newCat = '' - for catName, catId in pairs(Unit.Category) do - if type(groupType) == 'string' then - if tostring(catName) == string.upper(groupType) then - newCat = catName - end - elseif type(groupType) == 'number' then - if catId == groupType then - newCat = catName - end - end - - if catName == 'GROUND_UNIT' and (string.upper(groupType) == 'VEHICLE' or string.upper(groupType) == 'GROUND') then - newCat = 'GROUND_UNIT' - elseif catName == 'AIRPLANE' and string.upper(groupType) == 'PLANE' then - newCat = 'AIRPLANE' - end - end - local typeName - if newCat == 'GROUND_UNIT' then - typeName = ' gnd ' - elseif newCat == 'AIRPLANE' then - typeName = ' air ' - elseif newCat == 'HELICOPTER' then - typeName = ' hel ' - elseif newCat == 'SHIP' then - typeName = ' shp ' - elseif newCat == 'BUILDING' then - typeName = ' bld ' - end - if newGroup.clone or not newGroup.groupId then - mistDynAddIndex = mistDynAddIndex + 1 - mistGpId = mistGpId + 1 - newGroup.groupId = mistGpId - end - if newGroup.groupName or newGroup.name then - if newGroup.groupName then - newGroup['name'] = newGroup.groupName - elseif newGroup.name then - newGroup['name'] = newGroup.name - end - end - - if newGroup.clone and mist.DBs.groupsByName[newGroup.name] or not newGroup.name then - newGroup['name'] = tostring(tostring(cntry) .. tostring(typeName) .. mistDynAddIndex) - end - - if not newGroup.hidden then - newGroup.hidden = false - end - - if not newGroup.visible then - newGroup.visible = false - end - - if (newGroup.start_time and type(newGroup.start_time) ~= 'number') or not newGroup.start_time then - if newGroup.startTime then - newGroup.start_time = mist.utils.round(newGroup.startTime) - else - newGroup.start_time = 0 - end - end - - - for unitIndex, unitData in pairs(newGroup.units) do - local originalName = newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name - if newGroup.clone or not unitData.unitId then - mistUnitId = mistUnitId + 1 - newGroup.units[unitIndex]['unitId'] = mistUnitId - end - if newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name then - if newGroup.units[unitIndex].unitName then - newGroup.units[unitIndex].name = newGroup.units[unitIndex].unitName - elseif newGroup.units[unitIndex].name then - newGroup.units[unitIndex].name = newGroup.units[unitIndex].name - end - end - if newGroup.clone or not unitData.name then - newGroup.units[unitIndex].name = tostring(newGroup.name .. ' unit' .. unitIndex) - end - - if not unitData.skill then - newGroup.units[unitIndex].skill = 'Random' - end - - if not unitData.alt then - if newCat == 'AIRPLANE' then - newGroup.units[unitIndex].alt = 2000 - newGroup.units[unitIndex].alt_type = 'RADIO' - newGroup.units[unitIndex].speed = 150 - elseif newCat == 'HELICOPTER' then - newGroup.units[unitIndex].alt = 500 - newGroup.units[unitIndex].alt_type = 'RADIO' - newGroup.units[unitIndex].speed = 60 - else - --[[env.info('check height') - newGroup.units[unitIndex].alt = land.getHeight({x = newGroup.units[unitIndex].x, y = newGroup.units[unitIndex].y}) - newGroup.units[unitIndex].alt_type = 'BARO']] - end - + --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua') + local cntry = newGroup.country + if newGroup.countryId then + cntry = newGroup.countryId + end + + local groupType = newGroup.category + local newCountry = '' + -- validate data + for countryId, countryName in pairs(country.name) do + if type(cntry) == 'string' then + cntry = cntry:gsub("%s+", "_") + if tostring(countryName) == string.upper(cntry) then + newCountry = countryName + end + elseif type(cntry) == 'number' then + if countryId == cntry then + newCountry = countryName + end + end + end + + if newCountry == '' then + return false + end + + local newCat = '' + for catName, catId in pairs(Unit.Category) do + if type(groupType) == 'string' then + if tostring(catName) == string.upper(groupType) then + newCat = catName + end + elseif type(groupType) == 'number' then + if catId == groupType then + newCat = catName + end + end + + if catName == 'GROUND_UNIT' and (string.upper(groupType) == 'VEHICLE' or string.upper(groupType) == 'GROUND') then + newCat = 'GROUND_UNIT' + elseif catName == 'AIRPLANE' and string.upper(groupType) == 'PLANE' then + newCat = 'AIRPLANE' + end + end + local typeName + if newCat == 'GROUND_UNIT' then + typeName = ' gnd ' + elseif newCat == 'AIRPLANE' then + typeName = ' air ' + elseif newCat == 'HELICOPTER' then + typeName = ' hel ' + elseif newCat == 'SHIP' then + typeName = ' shp ' + elseif newCat == 'BUILDING' then + typeName = ' bld ' + end + if newGroup.clone or not newGroup.groupId then + mistDynAddIndex = mistDynAddIndex + 1 + mistGpId = mistGpId + 1 + newGroup.groupId = mistGpId + end + if newGroup.groupName or newGroup.name then + if newGroup.groupName then + newGroup['name'] = newGroup.groupName + elseif newGroup.name then + newGroup['name'] = newGroup.name + end + end + + if newGroup.clone and mist.DBs.groupsByName[newGroup.name] or not newGroup.name then + newGroup['name'] = tostring(tostring(country.name[cntry]) .. tostring(typeName) .. mistDynAddIndex) + end + + if not newGroup.hidden then + newGroup.hidden = false + end + + if not newGroup.visible then + newGroup.visible = false + end + + if (newGroup.start_time and type(newGroup.start_time) ~= 'number') or not newGroup.start_time then + if newGroup.startTime then + newGroup.start_time = mist.utils.round(newGroup.startTime) + else + newGroup.start_time = 0 + end + end + + + for unitIndex, unitData in pairs(newGroup.units) do + local originalName = newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name + if newGroup.clone or not unitData.unitId then + mistUnitId = mistUnitId + 1 + newGroup.units[unitIndex]['unitId'] = mistUnitId + end + if newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name then + if newGroup.units[unitIndex].unitName then + newGroup.units[unitIndex].name = newGroup.units[unitIndex].unitName + elseif newGroup.units[unitIndex].name then + newGroup.units[unitIndex].name = newGroup.units[unitIndex].name + end + end + if newGroup.clone or not unitData.name then + newGroup.units[unitIndex].name = tostring(newGroup.name .. ' unit' .. unitIndex) + end + + if not unitData.skill then + newGroup.units[unitIndex].skill = 'Random' + end + + if not unitData.alt then + if newCat == 'AIRPLANE' then + newGroup.units[unitIndex].alt = 2000 + newGroup.units[unitIndex].alt_type = 'RADIO' + newGroup.units[unitIndex].speed = 150 + elseif newCat == 'HELICOPTER' then + newGroup.units[unitIndex].alt = 500 + newGroup.units[unitIndex].alt_type = 'RADIO' + newGroup.units[unitIndex].speed = 60 + else + --[[env.info('check height') + newGroup.units[unitIndex].alt = land.getHeight({x = newGroup.units[unitIndex].x, y = newGroup.units[unitIndex].y}) + newGroup.units[unitIndex].alt_type = 'BARO']] + end + - end - - if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then - if newGroup.units[unitIndex].alt_type and newGroup.units[unitIndex].alt_type ~= 'BARO' or not newGroup.units[unitIndex].alt_type then - newGroup.units[unitIndex].alt_type = 'RADIO' - end - if not unitData.speed then - if newCat == 'AIRPLANE' then - newGroup.units[unitIndex].speed = 150 - elseif newCat == 'HELICOPTER' then - newGroup.units[unitIndex].speed = 60 - end - end - if not unitData.payload then - newGroup.units[unitIndex].payload = mist.getPayload(originalName) - end - end - mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newGroup.units[unitIndex]) - end - mistAddedGroups[#mistAddedGroups + 1] = mist.utils.deepCopy(newGroup) - if newGroup.route and not newGroup.route.points then - if not newGroup.route.points and newGroup.route[1] then - local copyRoute = newGroup.route - newGroup.route = {} - newGroup.route.points = copyRoute - end - end - newGroup.country = newCountry - - - --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') - - -- sanitize table - newGroup.groupName = nil - newGroup.clone = nil - newGroup.category = nil - newGroup.country = nil - - newGroup.tasks = {} - - for unitIndex, unitData in pairs(newGroup.units) do - newGroup.units[unitIndex].unitName = nil - end - - coalition.addGroup(country.id[newCountry], Unit.Category[newCat], newGroup) - - return newGroup - - end + end + + if newCat == 'AIRPLANE' or newCat == 'HELICOPTER' then + if newGroup.units[unitIndex].alt_type and newGroup.units[unitIndex].alt_type ~= 'BARO' or not newGroup.units[unitIndex].alt_type then + newGroup.units[unitIndex].alt_type = 'RADIO' + end + if not unitData.speed then + if newCat == 'AIRPLANE' then + newGroup.units[unitIndex].speed = 150 + elseif newCat == 'HELICOPTER' then + newGroup.units[unitIndex].speed = 60 + end + end + if not unitData.payload then + newGroup.units[unitIndex].payload = mist.getPayload(originalName) + end + end + mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newGroup.units[unitIndex]) + end + mistAddedGroups[#mistAddedGroups + 1] = mist.utils.deepCopy(newGroup) + if newGroup.route and not newGroup.route.points then + if not newGroup.route.points and newGroup.route[1] then + local copyRoute = newGroup.route + newGroup.route = {} + newGroup.route.points = copyRoute + end + end + newGroup.country = newCountry + + + --mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroup.lua') + + -- sanitize table + newGroup.groupName = nil + newGroup.clone = nil + newGroup.category = nil + newGroup.country = nil + + newGroup.tasks = {} + + for unitIndex, unitData in pairs(newGroup.units) do + newGroup.units[unitIndex].unitName = nil + end + + coalition.addGroup(country.id[newCountry], Unit.Category[newCat], newGroup) + + return newGroup + + end --------------------------------------------------------------------------------------------- --Modified Slmod task scheduler, superior to timer.scheduleFunction - - local Tasks = {} - local task_id = 0 - --[[ mist.scheduleFunction: - int id = mist.schedule_task(f function, vars table, t number, rep number, st number) - id - integer id of this function task - f - function to run - vars - table of vars for that function - t - time to run function - rep - time between repetitions of this function (OPTIONAL) - st - time when repetitions of this function will stop automatically (OPTIONAL) - ]] - mist.scheduleFunction = function(f, vars, t, rep, st) - --verify correct types - assert(type(f) == 'function', 'variable 1, expected function, got ' .. type(f)) - assert(type(vars) == 'table' or vars == nil, 'variable 2, expected table or nil, got ' .. type(f)) - assert(type(t) == 'number', 'variable 3, expected number, got ' .. type(t)) - assert(type(rep) == 'number' or rep == nil, 'variable 4, expected number or nil, got ' .. type(rep)) - assert(type(st) == 'number' or st == nil, 'variable 5, expected number or nil, got ' .. type(st)) - if not vars then - vars = {} - end - task_id = task_id + 1 - table.insert(Tasks, {f = f, vars = vars, t = t, rep = rep, st = st, id = task_id}) - return task_id - end - - -- removes a scheduled function based on the function's id. returns true if successful, false if not successful. - mist.removeFunction = function(id) - local i = 1 - while i <= #Tasks do - if Tasks[i].id == id then - table.remove(Tasks, i) - else - i = i + 1 - end - end - end + + local Tasks = {} + local task_id = 0 + --[[ mist.scheduleFunction: + int id = mist.schedule_task(f function, vars table, t number, rep number, st number) + id - integer id of this function task + f - function to run + vars - table of vars for that function + t - time to run function + rep - time between repetitions of this function (OPTIONAL) + st - time when repetitions of this function will stop automatically (OPTIONAL) + ]] + mist.scheduleFunction = function(f, vars, t, rep, st) + --verify correct types + assert(type(f) == 'function', 'variable 1, expected function, got ' .. type(f)) + assert(type(vars) == 'table' or vars == nil, 'variable 2, expected table or nil, got ' .. type(f)) + assert(type(t) == 'number', 'variable 3, expected number, got ' .. type(t)) + assert(type(rep) == 'number' or rep == nil, 'variable 4, expected number or nil, got ' .. type(rep)) + assert(type(st) == 'number' or st == nil, 'variable 5, expected number or nil, got ' .. type(st)) + if not vars then + vars = {} + end + task_id = task_id + 1 + table.insert(Tasks, {f = f, vars = vars, t = t, rep = rep, st = st, id = task_id}) + return task_id + end + + -- removes a scheduled function based on the function's id. returns true if successful, false if not successful. + mist.removeFunction = function(id) + local i = 1 + while i <= #Tasks do + if Tasks[i].id == id then + table.remove(Tasks, i) + else + i = i + 1 + end + end + end - -------------------------------------------------------------------------------------------------------------------- - -- not intended for users to use this function. - mist.do_scheduled_functions = function() - local i = 1 - while i <= #Tasks do - if not Tasks[i].rep then -- not a repeated process - if Tasks[i].t <= timer.getTime() then - local Task = Tasks[i] -- local reference - table.remove(Tasks, i) - local err, errmsg = pcall(Task.f, unpack(Task.vars, 1, table.maxn(Task.vars))) - if not err then - env.info('mist.scheduleFunction, error in scheduled function: ' .. errmsg) - end - --Task.f(unpack(Task.vars, 1, table.maxn(Task.vars))) -- do the task, do not increment i - else - i = i + 1 - end - else - if Tasks[i].st and Tasks[i].st <= timer.getTime() then --if a stoptime was specified, and the stop time exceeded - table.remove(Tasks, i) -- stop time exceeded, do not execute, do not increment i - elseif Tasks[i].t <= timer.getTime() then - local Task = Tasks[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 - env.info('mist.scheduleFunction, error in scheduled function: ' .. errmsg) - end - --Tasks[i].f(unpack(Tasks[i].vars, 1, table.maxn(Tasks[i].vars))) -- do the task - i = i + 1 - else - i = i + 1 - end - end - end - end + -------------------------------------------------------------------------------------------------------------------- + -- not intended for users to use this function. + mist.do_scheduled_functions = function() + local i = 1 + while i <= #Tasks do + if not Tasks[i].rep then -- not a repeated process + if Tasks[i].t <= timer.getTime() then + local Task = Tasks[i] -- local reference + table.remove(Tasks, i) + local err, errmsg = pcall(Task.f, unpack(Task.vars, 1, table.maxn(Task.vars))) + if not err then + env.info('mist.scheduleFunction, error in scheduled function: ' .. errmsg) + end + --Task.f(unpack(Task.vars, 1, table.maxn(Task.vars))) -- do the task, do not increment i + else + i = i + 1 + end + else + if Tasks[i].st and Tasks[i].st <= timer.getTime() then --if a stoptime was specified, and the stop time exceeded + table.remove(Tasks, i) -- stop time exceeded, do not execute, do not increment i + elseif Tasks[i].t <= timer.getTime() then + local Task = Tasks[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 + env.info('mist.scheduleFunction, error in scheduled function: ' .. errmsg) + end + --Tasks[i].f(unpack(Tasks[i].vars, 1, table.maxn(Tasks[i].vars))) -- do the task + i = i + 1 + else + i = i + 1 + end + end + end + end - + - local idNum = 0 + local idNum = 0 - --Simplified event handler - mist.addEventHandler = function(f) --id is optional! - local handler = {} - idNum = idNum + 1 - handler.id = idNum - handler.f = f - handler.onEvent = function(self, event) - self.f(event) - end - world.addEventHandler(handler) - return handler.id - end + --Simplified event handler + mist.addEventHandler = function(f) --id is optional! + local handler = {} + idNum = idNum + 1 + handler.id = idNum + handler.f = f + handler.onEvent = function(self, event) + self.f(event) + end + world.addEventHandler(handler) + return handler.id + end - mist.removeEventHandler = function(id) - for key, handler in pairs(world.eventHandlers) do - if handler.id and handler.id == id then - world.eventHandlers[key] = nil - return true - end - end - return false - end + mist.removeEventHandler = function(id) + for key, handler in pairs(world.eventHandlers) do + if handler.id and handler.id == id then + world.eventHandlers[key] = nil + return true + end + end + return false + end - mist.addEventHandler(groupSpawned) --- mist.scheduleFunction(checkSpawnedEvents, {}, timer.getTime() + 5, 1) - + mist.addEventHandler(groupSpawned) +-- mist.scheduleFunction(checkSpawnedEvents, {}, timer.getTime() + 5, 1) + end ------------------------------------------------------------------------------------------------------------ @@ -872,135 +886,167 @@ end mist.utils = {} mist.utils.toDegree = function(angle) - return angle*180/math.pi + return angle*180/math.pi end mist.utils.toRadian = function(angle) - return angle*math.pi/180 + return angle*math.pi/180 end mist.utils.metersToNM = function(meters) - return meters/1852 + return meters/1852 end mist.utils.metersToFeet = function(meters) - return meters/0.3048 + return meters/0.3048 end mist.utils.NMToMeters = function(NM) - return NM*1852 + return NM*1852 end mist.utils.feetToMeters = function(feet) - return feet*0.3048 + return feet*0.3048 end mist.utils.mpsToKnots = function(mps) - return mps*3600/1852 + return mps*3600/1852 end mist.utils.mpsToKmph = function(mps) - return mps*3.6 + return mps*3.6 end mist.utils.knotsToMps = function(knots) - return knots*1852/3600 + return knots*1852/3600 end mist.utils.kmphToMps = function(kmph) - return kmph/3.6 + return kmph/3.6 end function mist.utils.makeVec2(Vec3) - if Vec3.z then - return {x = Vec3.x, y = Vec3.z} - else - return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. - end + if Vec3.z then + return {x = Vec3.x, y = Vec3.z} + else + return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. + end end function mist.utils.makeVec3(Vec2, y) - if not Vec2.z then - if not y then - y = 0 - end - return {x = Vec2.x, y = y, z = Vec2.y} - else - return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. - end + if not Vec2.z then + if Vec2.alt and not y then + y = Vec2.alt + elseif not y then + y = 0 + end + return {x = Vec2.x, y = y, z = Vec2.y} + else + return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. + end end function mist.utils.makeVec3GL(Vec2, offset) - local adj = offset or 0 - - if not Vec2.z then - return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} - else - return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} - end + local adj = offset or 0 + + if not Vec2.z then + return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} + else + return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} + end end mist.utils.zoneToVec3 = function(zone) - local new = {} - if type(zone) == 'table' and zone.point then - new.x = zone.point.x - new.y = zone.point.y - new.z = zone.point.z - return new - elseif type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - if zone then - new.x = zone.point.x - new.y = zone.point.y - new.z = zone.point.z - return new - end - end + local new = {} + if type(zone) == 'table' and zone.point then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + elseif type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + if zone then + new.x = zone.point.x + new.y = zone.point.y + new.z = zone.point.z + return new + end + end end -- gets heading-error corrected direction from point along vector vec. function mist.utils.getDir(vec, point) - local dir = math.atan2(vec.z, vec.x) - dir = dir + mist.getNorthCorrection(point) - if dir < 0 then - dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi - end - return dir + local dir = math.atan2(vec.z, vec.x) + if point then + dir = dir + mist.getNorthCorrection(point) + end + if dir < 0 then + dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi + end + return dir end -- gets distance in meters between two points (2 dimensional) function mist.utils.get2DDist(point1, point2) - point1 = mist.utils.makeVec3(point1) - point2 = mist.utils.makeVec3(point2) - return mist.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) + point1 = mist.utils.makeVec3(point1) + point2 = mist.utils.makeVec3(point2) + return mist.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) end -- gets distance in meters between two points (3 dimensional) function mist.utils.get3DDist(point1, point2) - return mist.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) + return mist.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) end +function mist.utils.vecToWP(vec) + local newWP = {} + newWP.x = vec.x + newWP.y = vec.y + if vec.z then + newWP.alt = vec.y + newWP.y = vec.z + else + newWP.alt = land.getHeight({x = vec.x, y = vec.y}) + end + return newWP +end +function mist.utils.unitToWP(pUnit) + local unit = mist.utils.deepCopy(pUnit) + if type(unit) == 'string' then + if Unit.getByName(unit) then + unit = Unit.getByName(unit) + end + end + if unit:isExist() == true then + local new = mist.utils.vecToWP(unit:getPosition().p) + new.speed = mist.vec.mag(unit:getVelocity()) + new.alt_type = "BARO" + + return new + end + return false +end --from http://lua-users.org/wiki/CopyTable mist.utils.deepCopy = function(object) - local lookup_table = {} - local function _copy(object) - if type(object) ~= "table" then - return object - elseif lookup_table[object] then - return lookup_table[object] - end - local new_table = {} - lookup_table[object] = new_table - for index, value in pairs(object) do - new_table[_copy(index)] = _copy(value) - end - return setmetatable(new_table, getmetatable(object)) - end - return _copy(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(object)) + end + return _copy(object) end -- From http://lua-users.org/wiki/SimpleRound @@ -1010,14 +1056,23 @@ mist.utils.round = function(num, idp) return math.floor(num * mult + 0.5) / mult end +mist.utils.roundTbl = function(tbl, idp) + for id, val in pairs(tbl) do + if type(val) == 'number' then + tbl[id] = mist.utils.round(val, idp) + end + end + return tbl +end + -- porting in Slmod's dostring mist.utils.dostring = function(s) - local f, err = loadstring(s) - if f then - return true, f() - else - return false, err - end + local f, err = loadstring(s) + if f then + return true, f() + else + return false, err + end end @@ -1037,328 +1092,328 @@ var_tbl must have a string at one of the following table keys: "text", "msg", or the table key "display_mode" must be either a string or nil, and the table key "coa" must be either a string or nil. ]] function mist.utils.typeCheck(fname, type_tbl, var_tbl) - --env.info('type check') - for type_key, type_val in pairs(type_tbl) do - --print('type_key:') - --print(type_key) - --print('type_val:') - --print(type_val) - - --type_key can be a table of accepted keys- so try to find one that is not nil - local type_key_str = '' - local act_key = type_key -- actual key within var_tbl - necessary to use for multiple possible key variables. Initialize to type_key - if type(type_key) == 'table' then - - for i = 1, #type_key do - if i ~= 1 then - type_key_str = type_key_str .. '/' - end - type_key_str = type_key_str .. tostring(type_key[i]) - if var_tbl[type_key[i]] ~= nil then - act_key = type_key[i] -- found a non-nil entry, make act_key now this val. - end - end - else - type_key_str = tostring(type_key) - end - - local err_msg = 'Error in function ' .. fname .. ', parameter "' .. type_key_str .. '", expected: ' - local passed_check = false - - if type(type_tbl[type_key]) == 'table' then - --print('err_msg, before and after:') - --print(err_msg) - for j = 1, #type_tbl[type_key] do - - if j == 1 then - err_msg = err_msg .. type_tbl[type_key][j] - else - err_msg = err_msg .. ' or ' .. type_tbl[type_key][j] - end - - if type(var_tbl[act_key]) == type_tbl[type_key][j] then - passed_check = true - end - end - --print(err_msg) - else - --print('err_msg, before and after:') - --print(err_msg) - err_msg = err_msg .. type_tbl[type_key] - --print(err_msg) - if type(var_tbl[act_key]) == type_tbl[type_key] then - passed_check = true - - end - - end - - if not passed_check then - err_msg = err_msg .. ', got ' .. type(var_tbl[act_key]) - return false, err_msg - end - end - return true + --env.info('type check') + for type_key, type_val in pairs(type_tbl) do + --print('type_key:') + --print(type_key) + --print('type_val:') + --print(type_val) + + --type_key can be a table of accepted keys- so try to find one that is not nil + local type_key_str = '' + local act_key = type_key -- actual key within var_tbl - necessary to use for multiple possible key variables. Initialize to type_key + if type(type_key) == 'table' then + + for i = 1, #type_key do + if i ~= 1 then + type_key_str = type_key_str .. '/' + end + type_key_str = type_key_str .. tostring(type_key[i]) + if var_tbl[type_key[i]] ~= nil then + act_key = type_key[i] -- found a non-nil entry, make act_key now this val. + end + end + else + type_key_str = tostring(type_key) + end + + local err_msg = 'Error in function ' .. fname .. ', parameter "' .. type_key_str .. '", expected: ' + local passed_check = false + + if type(type_tbl[type_key]) == 'table' then + --print('err_msg, before and after:') + --print(err_msg) + for j = 1, #type_tbl[type_key] do + + if j == 1 then + err_msg = err_msg .. type_tbl[type_key][j] + else + err_msg = err_msg .. ' or ' .. type_tbl[type_key][j] + end + + if type(var_tbl[act_key]) == type_tbl[type_key][j] then + passed_check = true + end + end + --print(err_msg) + else + --print('err_msg, before and after:') + --print(err_msg) + err_msg = err_msg .. type_tbl[type_key] + --print(err_msg) + if type(var_tbl[act_key]) == type_tbl[type_key] then + passed_check = true + + end + + end + + if not passed_check then + err_msg = err_msg .. ', got ' .. type(var_tbl[act_key]) + return false, err_msg + end + end + return true end --porting in Slmod's "safestring" basic serialize mist.utils.basicSerialize = function(s) - if s == nil then - return "\"\"" - else - if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then - return tostring(s) - elseif type(s) == 'string' then - s = string.format('%q', s) - return s - end - end + if s == nil then + return "\"\"" + else + if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then + return tostring(s) + elseif type(s) == 'string' then + s = string.format('%q', s) + return s + end + end end --porting in Slmod's serialize_slmod mist.utils.serialize = function(name, value, level) - -----Based on ED's serialize_simple2 - local basicSerialize = function (o) - if type(o) == "number" then - return tostring(o) - elseif type(o) == "boolean" then - return tostring(o) - else -- assume it is a string - return mist.utils.basicSerialize(o) - end - end - - local serialize_to_t = function (name, value, level) - ----Based on ED's serialize_simple2 + -----Based on ED's serialize_simple2 + local basicSerialize = function (o) + if type(o) == "number" then + return tostring(o) + elseif type(o) == "boolean" then + return tostring(o) + else -- assume it is a string + return mist.utils.basicSerialize(o) + end + end + + local serialize_to_t = function (name, value, level) + ----Based on ED's serialize_simple2 - local var_str_tbl = {} - if level == nil then level = "" end - if level ~= "" then level = level.." " end - - table.insert(var_str_tbl, level .. name .. " = ") - - if type(value) == "number" or type(value) == "string" or type(value) == "boolean" then - table.insert(var_str_tbl, basicSerialize(value) .. ",\n") - elseif type(value) == "table" then - table.insert(var_str_tbl, "\n"..level.."{\n") - - for k,v in pairs(value) do -- serialize its fields - local key - if type(k) == "number" then - key = string.format("[%s]", k) - else - key = string.format("[%q]", k) - end + local var_str_tbl = {} + if level == nil then level = "" end + if level ~= "" then level = level.." " end + + table.insert(var_str_tbl, level .. name .. " = ") + + if type(value) == "number" or type(value) == "string" or type(value) == "boolean" then + table.insert(var_str_tbl, basicSerialize(value) .. ",\n") + elseif type(value) == "table" then + table.insert(var_str_tbl, "\n"..level.."{\n") + + for k,v in pairs(value) do -- serialize its fields + local key + if type(k) == "number" then + key = string.format("[%s]", k) + else + key = string.format("[%q]", k) + end - table.insert(var_str_tbl, mist.utils.serialize(key, v, level.." ")) + table.insert(var_str_tbl, mist.utils.serialize(key, v, level.." ")) - end - if level == "" then - table.insert(var_str_tbl, level.."} -- end of "..name.."\n") + end + if level == "" then + table.insert(var_str_tbl, level.."} -- end of "..name.."\n") - else - table.insert(var_str_tbl, level.."}, -- end of "..name.."\n") + else + table.insert(var_str_tbl, level.."}, -- end of "..name.."\n") - end - else - env.info("Cannot serialize a "..type(value)) - end - return var_str_tbl - end - - local t_str = serialize_to_t(name, value, level) - - return table.concat(t_str) + end + else + env.info("Cannot serialize a "..type(value)) + end + return var_str_tbl + end + + local t_str = serialize_to_t(name, value, level) + + return table.concat(t_str) end -- porting in slmod's serialize_wcycles mist.utils.serializeWithCycles = function(name, value, saved) - --mostly straight out of Programming in Lua - local basicSerialize = function (o) - if type(o) == "number" then - return tostring(o) - elseif type(o) == "boolean" then - return tostring(o) - else -- assume it is a string - return mist.utils.basicSerialize(o) - end - end - - local t_str = {} - saved = saved or {} -- initial value - if ((type(value) == 'string') or (type(value) == 'number') or (type(value) == 'table') or (type(value) == 'boolean')) then - table.insert(t_str, name .. " = ") - if type(value) == "number" or type(value) == "string" or type(value) == "boolean" then - table.insert(t_str, basicSerialize(value) .. "\n") - else + --mostly straight out of Programming in Lua + local basicSerialize = function (o) + if type(o) == "number" then + return tostring(o) + elseif type(o) == "boolean" then + return tostring(o) + else -- assume it is a string + return mist.utils.basicSerialize(o) + end + end + + local t_str = {} + saved = saved or {} -- initial value + if ((type(value) == 'string') or (type(value) == 'number') or (type(value) == 'table') or (type(value) == 'boolean')) then + table.insert(t_str, name .. " = ") + if type(value) == "number" or type(value) == "string" or type(value) == "boolean" then + table.insert(t_str, basicSerialize(value) .. "\n") + else - if saved[value] then -- value already saved? - table.insert(t_str, saved[value] .. "\n") - else - saved[value] = name -- save name for next time - table.insert(t_str, "{}\n") - for k,v in pairs(value) do -- save its fields - local fieldname = string.format("%s[%s]", name, basicSerialize(k)) - table.insert(t_str, mist.utils.serializeWithCycles(fieldname, v, saved)) - end - end - end - return table.concat(t_str) - else - return "" - end + if saved[value] then -- value already saved? + table.insert(t_str, saved[value] .. "\n") + else + saved[value] = name -- save name for next time + table.insert(t_str, "{}\n") + for k,v in pairs(value) do -- save its fields + local fieldname = string.format("%s[%s]", name, basicSerialize(k)) + table.insert(t_str, mist.utils.serializeWithCycles(fieldname, v, saved)) + end + end + end + return table.concat(t_str) + else + return "" + end end -- porting in Slmod's serialize_slmod2 mist.utils.oneLineSerialize = function(tbl) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function - if type(tbl) == 'table' then --function only works for tables! + if type(tbl) == 'table' then --function only works for tables! - local tbl_str = {} + local tbl_str = {} - tbl_str[#tbl_str + 1] = '{ ' - - for ind,val in pairs(tbl) do -- serialize its fields - if type(ind) == "number" then - tbl_str[#tbl_str + 1] = '[' - tbl_str[#tbl_str + 1] = tostring(ind) - tbl_str[#tbl_str + 1] = '] = ' - else --must be a string - tbl_str[#tbl_str + 1] = '[' - tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(ind) - tbl_str[#tbl_str + 1] = '] = ' - end - - if ((type(val) == 'number') or (type(val) == 'boolean')) then - tbl_str[#tbl_str + 1] = tostring(val) - tbl_str[#tbl_str + 1] = ', ' - elseif type(val) == 'string' then - tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(val) - tbl_str[#tbl_str + 1] = ', ' - elseif type(val) == 'nil' then -- won't ever happen, right? - tbl_str[#tbl_str + 1] = 'nil, ' - elseif type(val) == 'table' then - tbl_str[#tbl_str + 1] = mist.utils.oneLineSerialize(val) - tbl_str[#tbl_str + 1] = ', ' --I think this is right, I just added it - else - env.info('unable to serialize value type ' .. mist.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind)) - end - - end - tbl_str[#tbl_str + 1] = '}' - return table.concat(tbl_str) - end + tbl_str[#tbl_str + 1] = '{ ' + + for ind,val in pairs(tbl) do -- serialize its fields + if type(ind) == "number" then + tbl_str[#tbl_str + 1] = '[' + tbl_str[#tbl_str + 1] = tostring(ind) + tbl_str[#tbl_str + 1] = '] = ' + else --must be a string + tbl_str[#tbl_str + 1] = '[' + tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(ind) + tbl_str[#tbl_str + 1] = '] = ' + end + + if ((type(val) == 'number') or (type(val) == 'boolean')) then + tbl_str[#tbl_str + 1] = tostring(val) + tbl_str[#tbl_str + 1] = ', ' + elseif type(val) == 'string' then + tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(val) + tbl_str[#tbl_str + 1] = ', ' + elseif type(val) == 'nil' then -- won't ever happen, right? + tbl_str[#tbl_str + 1] = 'nil, ' + elseif type(val) == 'table' then + tbl_str[#tbl_str + 1] = mist.utils.oneLineSerialize(val) + tbl_str[#tbl_str + 1] = ', ' --I think this is right, I just added it + else + env.info('unable to serialize value type ' .. mist.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind)) + end + + end + tbl_str[#tbl_str + 1] = '}' + return table.concat(tbl_str) + end end --Function to create string for viewing the contents of a table -NOT for serialization mist.utils.tableShow = function(tbl, loc, indent, tableshow_tbls) --based on serialize_slmod, this is a _G serialization - tableshow_tbls = tableshow_tbls or {} --create table of tables - loc = loc or "" - indent = indent or "" - if type(tbl) == 'table' then --function only works for tables! - tableshow_tbls[tbl] = loc - - local tbl_str = {} + tableshow_tbls = tableshow_tbls or {} --create table of tables + loc = loc or "" + indent = indent or "" + if type(tbl) == 'table' then --function only works for tables! + tableshow_tbls[tbl] = loc + + local tbl_str = {} - tbl_str[#tbl_str + 1] = indent .. '{\n' - - for ind,val in pairs(tbl) do -- serialize its fields - if type(ind) == "number" then - tbl_str[#tbl_str + 1] = indent - tbl_str[#tbl_str + 1] = loc .. '[' - tbl_str[#tbl_str + 1] = tostring(ind) - tbl_str[#tbl_str + 1] = '] = ' - else - tbl_str[#tbl_str + 1] = indent - tbl_str[#tbl_str + 1] = loc .. '[' - tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(ind) - tbl_str[#tbl_str + 1] = '] = ' - end - - if ((type(val) == 'number') or (type(val) == 'boolean')) then - tbl_str[#tbl_str + 1] = tostring(val) - tbl_str[#tbl_str + 1] = ',\n' - elseif type(val) == 'string' then - tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(val) - tbl_str[#tbl_str + 1] = ',\n' - elseif type(val) == 'nil' then -- won't ever happen, right? - tbl_str[#tbl_str + 1] = 'nil,\n' - elseif type(val) == 'table' then - if tableshow_tbls[val] then - tbl_str[#tbl_str + 1] = tostring(val) .. ' already defined: ' .. tableshow_tbls[val] .. ',\n' - else - tableshow_tbls[val] = loc .. '[' .. mist.utils.basicSerialize(ind) .. ']' - tbl_str[#tbl_str + 1] = tostring(val) .. ' ' - tbl_str[#tbl_str + 1] = mist.utils.tableShow(val, loc .. '[' .. mist.utils.basicSerialize(ind).. ']', indent .. ' ', tableshow_tbls) - tbl_str[#tbl_str + 1] = ',\n' - end - elseif type(val) == 'function' then - if debug and debug.getinfo then - local fcnname = tostring(val) - local info = debug.getinfo(val, "S") - if info.what == "C" then - tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', C function') .. ',\n' - else - if (string.sub(info.source, 1, 2) == [[./]]) then - tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')' .. info.source) ..',\n' - else - tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')') ..',\n' - end - end - - else - tbl_str[#tbl_str + 1] = 'a function,\n' - end - else - tbl_str[#tbl_str + 1] = 'unable to serialize value type ' .. mist.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind) - end - end - - tbl_str[#tbl_str + 1] = indent .. '}' - return table.concat(tbl_str) - end + tbl_str[#tbl_str + 1] = indent .. '{\n' + + for ind,val in pairs(tbl) do -- serialize its fields + if type(ind) == "number" then + tbl_str[#tbl_str + 1] = indent + tbl_str[#tbl_str + 1] = loc .. '[' + tbl_str[#tbl_str + 1] = tostring(ind) + tbl_str[#tbl_str + 1] = '] = ' + else + tbl_str[#tbl_str + 1] = indent + tbl_str[#tbl_str + 1] = loc .. '[' + tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(ind) + tbl_str[#tbl_str + 1] = '] = ' + end + + if ((type(val) == 'number') or (type(val) == 'boolean')) then + tbl_str[#tbl_str + 1] = tostring(val) + tbl_str[#tbl_str + 1] = ',\n' + elseif type(val) == 'string' then + tbl_str[#tbl_str + 1] = mist.utils.basicSerialize(val) + tbl_str[#tbl_str + 1] = ',\n' + elseif type(val) == 'nil' then -- won't ever happen, right? + tbl_str[#tbl_str + 1] = 'nil,\n' + elseif type(val) == 'table' then + if tableshow_tbls[val] then + tbl_str[#tbl_str + 1] = tostring(val) .. ' already defined: ' .. tableshow_tbls[val] .. ',\n' + else + tableshow_tbls[val] = loc .. '[' .. mist.utils.basicSerialize(ind) .. ']' + tbl_str[#tbl_str + 1] = tostring(val) .. ' ' + tbl_str[#tbl_str + 1] = mist.utils.tableShow(val, loc .. '[' .. mist.utils.basicSerialize(ind).. ']', indent .. ' ', tableshow_tbls) + tbl_str[#tbl_str + 1] = ',\n' + end + elseif type(val) == 'function' then + if debug and debug.getinfo then + local fcnname = tostring(val) + local info = debug.getinfo(val, "S") + if info.what == "C" then + tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', C function') .. ',\n' + else + if (string.sub(info.source, 1, 2) == [[./]]) then + tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')' .. info.source) ..',\n' + else + tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')') ..',\n' + end + end + + else + tbl_str[#tbl_str + 1] = 'a function,\n' + end + else + tbl_str[#tbl_str + 1] = 'unable to serialize value type ' .. mist.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind) + end + end + + tbl_str[#tbl_str + 1] = indent .. '}' + return table.concat(tbl_str) + end end mist.debug = {} mist.debug.dump_G = function(fname) - if lfs and io then - local fdir = lfs.writedir() .. [[Logs\]] .. fname - local f = io.open(fdir, 'w') - f:write(mist.utils.tableShow(_G)) - f:close() - local errmsg = 'mist.debug.dump_G wrote data to ' .. fdir - env.info(errmsg) - trigger.action.outText(errmsg, 10) - else - local errmsg = 'Error: insufficient libraries to run mist.debug.dump_G, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua' - env.info(errmsg) - trigger.action.outText(errmsg, 10) - end + if lfs and io then + local fdir = lfs.writedir() .. [[Logs\]] .. fname + local f = io.open(fdir, 'w') + f:write(mist.utils.tableShow(_G)) + f:close() + local errmsg = 'mist.debug.dump_G wrote data to ' .. fdir + env.info(errmsg) + trigger.action.outText(errmsg, 10) + else + local errmsg = 'Error: insufficient libraries to run mist.debug.dump_G, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua' + env.info(errmsg) + trigger.action.outText(errmsg, 10) + end end mist.debug.writeData = function(fcn, fcnVars, fname) - if lfs and io then - local fdir = lfs.writedir() .. [[Logs\]] .. fname - local f = io.open(fdir, 'w') - f:write(fcn(unpack(fcnVars, 1, table.maxn(fcnVars)))) - f:close() - local errmsg = 'mist.debug.writeData wrote data to ' .. fdir - env.info(errmsg) - trigger.action.outText(errmsg, 10) - else - local errmsg = 'Error: insufficient libraries to run mist.debug.writeData, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua' - env.info(errmsg) - trigger.action.outText(errmsg, 10) - end + if lfs and io then + local fdir = lfs.writedir() .. [[Logs\]] .. fname + local f = io.open(fdir, 'w') + f:write(fcn(unpack(fcnVars, 1, table.maxn(fcnVars)))) + f:close() + local errmsg = 'mist.debug.writeData wrote data to ' .. fdir + env.info(errmsg) + trigger.action.outText(errmsg, 10) + else + local errmsg = 'Error: insufficient libraries to run mist.debug.writeData, you must disable the sanitization of the io and lfs libraries in ./Scripts/MissionScripting.lua' + env.info(errmsg) + trigger.action.outText(errmsg, 10) + end end mist.debug.dumpDBs = function() - for DBname, DB in pairs(mist.DBs) do - if type(DB) == 'table' and type(DBname) == 'string' then - mist.debug.writeData(mist.utils.serialize, {DBname, DB}, 'mist_DBs_' .. DBname .. '.lua') - end - end + for DBname, DB in pairs(mist.DBs) do + if type(DB) == 'table' and type(DBname) == 'string' then + mist.debug.writeData(mist.utils.serialize, {DBname, DB}, 'mist_DBs_' .. DBname .. '.lua') + end + end end ----------------------------------------------------------------------------------------------------------------- @@ -1366,49 +1421,49 @@ end mist.vec = {} mist.vec.add = function(vec1, vec2) - return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} + return {x = vec1.x + vec2.x, y = vec1.y + vec2.y, z = vec1.z + vec2.z} end mist.vec.sub = function(vec1, vec2) - return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} + return {x = vec1.x - vec2.x, y = vec1.y - vec2.y, z = vec1.z - vec2.z} end mist.vec.scalarMult = function(vec, mult) - return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} + return {x = vec.x*mult, y = vec.y*mult, z = vec.z*mult} end mist.vec.scalar_mult = mist.vec.scalarMult mist.vec.dp = function(vec1, vec2) - return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z + return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z end mist.vec.cp = function(vec1, vec2) - return { x = vec1.y*vec2.z - vec1.z*vec2.y, y = vec1.z*vec2.x - vec1.x*vec2.z, z = vec1.x*vec2.y - vec1.y*vec2.x} + return { x = vec1.y*vec2.z - vec1.z*vec2.y, y = vec1.z*vec2.x - vec1.x*vec2.z, z = vec1.x*vec2.y - vec1.y*vec2.x} end mist.vec.mag = function(vec) - return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 + return (vec.x^2 + vec.y^2 + vec.z^2)^0.5 end mist.vec.getUnitVec = function(vec) - local mag = mist.vec.mag(vec) - return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } + local mag = mist.vec.mag(vec) + return { x = vec.x/mag, y = vec.y/mag, z = vec.z/mag } end mist.vec.rotateVec2 = function(vec2, theta) - return { x = vec2.x*math.cos(theta) - vec2.y*math.sin(theta), y = vec2.x*math.sin(theta) + vec2.y*math.cos(theta)} + return { x = vec2.x*math.cos(theta) - vec2.y*math.sin(theta), y = vec2.x*math.sin(theta) + vec2.y*math.cos(theta)} end --------------------------------------------------------------------------------------------------------------------------- -- acc- the accuracy of each easting/northing. 0, 1, 2, 3, 4, or 5. mist.tostringMGRS = function(MGRS, acc) - if acc == 0 then - return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph - else - return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', mist.utils.round(MGRS.Easting/(10^(5-acc)), 0)) - .. ' ' .. string.format('%0' .. acc .. 'd', mist.utils.round(MGRS.Northing/(10^(5-acc)), 0)) - end + if acc == 0 then + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph + else + return MGRS.UTMZone .. ' ' .. MGRS.MGRSDigraph .. ' ' .. string.format('%0' .. acc .. 'd', mist.utils.round(MGRS.Easting/(10^(5-acc)), 0)) + .. ' ' .. string.format('%0' .. acc .. 'd', mist.utils.round(MGRS.Northing/(10^(5-acc)), 0)) + end end --[[acc: @@ -1419,173 +1474,174 @@ So: 42.32 - acc of 2. ]] mist.tostringLL = function(lat, lon, acc, DMS) - - local latHemi, lonHemi - if lat > 0 then - latHemi = 'N' - else - latHemi = 'S' - end - - if lon > 0 then - lonHemi = 'E' - else - lonHemi = 'W' - end - - lat = math.abs(lat) - lon = math.abs(lon) - - local latDeg = math.floor(lat) - local latMin = (lat - latDeg)*60 - - local lonDeg = math.floor(lon) - local lonMin = (lon - lonDeg)*60 - - if DMS then -- degrees, minutes, and seconds. - local oldLatMin = latMin - latMin = math.floor(latMin) - local latSec = mist.utils.round((oldLatMin - latMin)*60, acc) - - local oldLonMin = lonMin - lonMin = math.floor(lonMin) - local lonSec = mist.utils.round((oldLonMin - lonMin)*60, acc) - - if latSec == 60 then - latSec = 0 - latMin = latMin + 1 - end - - if lonSec == 60 then - lonSec = 0 - lonMin = lonMin + 1 - end - - local secFrmtStr -- create the formatting string for the seconds place - if acc <= 0 then -- no decimal place. - secFrmtStr = '%02d' - else - local width = 3 + acc -- 01.310 - that's a width of 6, for example. - secFrmtStr = '%0' .. width .. '.' .. acc .. 'f' - end - - return string.format('%02d', latDeg) .. ' ' .. string.format('%02d', latMin) .. '\' ' .. string.format(secFrmtStr, latSec) .. '"' .. latHemi .. ' ' - .. string.format('%02d', lonDeg) .. ' ' .. string.format('%02d', lonMin) .. '\' ' .. string.format(secFrmtStr, lonSec) .. '"' .. lonHemi + + local latHemi, lonHemi + if lat > 0 then + latHemi = 'N' + else + latHemi = 'S' + end + + if lon > 0 then + lonHemi = 'E' + else + lonHemi = 'W' + end + + lat = math.abs(lat) + lon = math.abs(lon) + + local latDeg = math.floor(lat) + local latMin = (lat - latDeg)*60 + + local lonDeg = math.floor(lon) + local lonMin = (lon - lonDeg)*60 + + if DMS then -- degrees, minutes, and seconds. + local oldLatMin = latMin + latMin = math.floor(latMin) + local latSec = mist.utils.round((oldLatMin - latMin)*60, acc) + + local oldLonMin = lonMin + lonMin = math.floor(lonMin) + local lonSec = mist.utils.round((oldLonMin - lonMin)*60, acc) + + if latSec == 60 then + latSec = 0 + latMin = latMin + 1 + end + + if lonSec == 60 then + lonSec = 0 + lonMin = lonMin + 1 + end + + local secFrmtStr -- create the formatting string for the seconds place + if acc <= 0 then -- no decimal place. + secFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + secFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format('%02d', latMin) .. '\' ' .. string.format(secFrmtStr, latSec) .. '"' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format('%02d', lonMin) .. '\' ' .. string.format(secFrmtStr, lonSec) .. '"' .. lonHemi - else -- degrees, decimal minutes. - latMin = mist.utils.round(latMin, acc) - lonMin = mist.utils.round(lonMin, acc) - - if latMin == 60 then - latMin = 0 - latDeg = latDeg + 1 - end - - if lonMin == 60 then - lonMin = 0 - lonDeg = lonDeg + 1 - end - - local minFrmtStr -- create the formatting string for the minutes place - if acc <= 0 then -- no decimal place. - minFrmtStr = '%02d' - else - local width = 3 + acc -- 01.310 - that's a width of 6, for example. - minFrmtStr = '%0' .. width .. '.' .. acc .. 'f' - end - - return string.format('%02d', latDeg) .. ' ' .. string.format(minFrmtStr, latMin) .. '\'' .. latHemi .. ' ' - .. string.format('%02d', lonDeg) .. ' ' .. string.format(minFrmtStr, lonMin) .. '\'' .. lonHemi - - end + else -- degrees, decimal minutes. + latMin = mist.utils.round(latMin, acc) + lonMin = mist.utils.round(lonMin, acc) + + if latMin == 60 then + latMin = 0 + latDeg = latDeg + 1 + end + + if lonMin == 60 then + lonMin = 0 + lonDeg = lonDeg + 1 + end + + local minFrmtStr -- create the formatting string for the minutes place + if acc <= 0 then -- no decimal place. + minFrmtStr = '%02d' + else + local width = 3 + acc -- 01.310 - that's a width of 6, for example. + minFrmtStr = '%0' .. width .. '.' .. acc .. 'f' + end + + return string.format('%02d', latDeg) .. ' ' .. string.format(minFrmtStr, latMin) .. '\'' .. latHemi .. ' ' + .. string.format('%02d', lonDeg) .. ' ' .. string.format(minFrmtStr, lonMin) .. '\'' .. lonHemi + + end end --[[ required: az - radian required: dist - meters - optional: alt - meters (set to false or nil if you don't want to use it). - optional: metric - set true to get dist and alt in km and m. - precision will always be nearest degree and NM or km.]] + optional: alt - meters (set to false or nil if you don't want to use it). + optional: metric - set true to get dist and alt in km and m. + precision will always be nearest degree and NM or km.]] mist.tostringBR = function(az, dist, alt, metric) - az = mist.utils.round(mist.utils.toDegree(az), 0) - - if metric then - dist = mist.utils.round(dist/1000, 0) - else - dist = mist.utils.round(mist.utils.metersToNM(dist), 0) - end - - local s = string.format('%03d', az) .. ' for ' .. dist - - if alt then - if metric then - s = s .. ' at ' .. mist.utils.round(alt, 0) - else - s = s .. ' at ' .. mist.utils.round(mist.utils.metersToFeet(alt), 0) - end - end - return s + az = mist.utils.round(mist.utils.toDegree(az), 0) + + if metric then + dist = mist.utils.round(dist/1000, 0) + else + dist = mist.utils.round(mist.utils.metersToNM(dist), 0) + end + + local s = string.format('%03d', az) .. ' for ' .. dist + + if alt then + if metric then + s = s .. ' at ' .. mist.utils.round(alt, 0) + else + s = s .. ' at ' .. mist.utils.round(mist.utils.metersToFeet(alt), 0) + end + end + return s end -mist.getNorthCorrection = function(point) --gets the correction needed for true north - if not point.z then --Vec2; convert to Vec3 - point.z = point.y - point.y = 0 - end - local lat, lon = coord.LOtoLL(point) - local north_posit = coord.LLtoLO(lat + 1, lon) - return math.atan2(north_posit.z - point.z, north_posit.x - point.x) +mist.getNorthCorrection = function(gPoint) --gets the correction needed for true north + local point = mist.utils.deepCopy(gPoint) + if not point.z then --Vec2; convert to Vec3 + point.z = point.y + point.y = 0 + end + local lat, lon = coord.LOtoLL(point) + local north_posit = coord.LLtoLO(lat + 1, lon) + return math.atan2(north_posit.z - point.z, north_posit.x - point.x) end mist.getUnitSkill = function(unitName) - if Unit.getByName(unitName) and Unit.getByName(unitName):isExist() == true then - local lunit = Unit.getByName(unitName) - for name, data in pairs(mist.DBs.unitsByName) do - if name == unitName and data.type == lunit:getTypeName() and data.unitId == lunit:getID() and data.skill then - return data.skill - end - end - end - return false + if Unit.getByName(unitName) and Unit.getByName(unitName):isExist() == true then + local lunit = Unit.getByName(unitName) + for name, data in pairs(mist.DBs.unitsByName) do + if name == unitName and data.type == lunit:getTypeName() and data.unitId == lunit:getID() and data.skill then + return data.skill + end + end + end + return false end function mist.getGroupPoints(groupIdent) -- if groupname exists in env.mission, then returns table of the group's points in numerical order, such as: { [1] = {x = 299435.224, y = -1146632.6773}, [2] = { x = 663324.6563, y = 322424.1112}} - -- refactor to search by groupId and allow groupId and groupName as inputs - local gpId = groupIdent - if type(groupIdent) == 'string' and not tonumber(groupIdent) then - gpId = mist.DBs.MEgroupsByName[groupIdent].groupId - end - - for coa_name, coa_data in pairs(env.mission.coalition) do - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - for obj_type_name, obj_type_data in pairs(cntry_data) do - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - for group_num, group_data in pairs(obj_type_data.group) do - if group_data and group_data.groupId == gpId then -- this is the group we are looking for - if group_data.route and group_data.route.points and #group_data.route.points > 0 then - local points = {} - for point_num, point in pairs(group_data.route.points) do - if not point.point then - points[point_num] = { x = point.x, y = point.y } - else - points[point_num] = point.point --it's possible that the ME could move to the point = Vec2 notation. - end - end - return points - end - return - end --if group_data and group_data.name and group_data.name == 'groupname' - end --for group_num, group_data in pairs(obj_type_data.group) do - end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then - end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then - end --for obj_type_name, obj_type_data in pairs(cntry_data) do - end --for cntry_id, cntry_data in pairs(coa_data.country) do - end --if coa_data.country then --there is a country table - end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then - end --for coa_name, coa_data in pairs(mission.coalition) do + -- refactor to search by groupId and allow groupId and groupName as inputs + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + gpId = mist.DBs.MEgroupsByName[groupIdent].groupId + end + + for coa_name, coa_data in pairs(env.mission.coalition) do + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + for obj_type_name, obj_type_data in pairs(cntry_data) do + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_type_data.group) do + if group_data and group_data.groupId == gpId then -- this is the group we are looking for + if group_data.route and group_data.route.points and #group_data.route.points > 0 then + local points = {} + for point_num, point in pairs(group_data.route.points) do + if not point.point then + points[point_num] = { x = point.x, y = point.y } + else + points[point_num] = point.point --it's possible that the ME could move to the point = Vec2 notation. + end + end + return points + end + return + end --if group_data and group_data.name and group_data.name == 'groupname' + end --for group_num, group_data in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do end @@ -1593,204 +1649,204 @@ end --[[ table attitude = getAttitude(string unitname) -- will work on any unit, even if not an aircraft. attitude = { - Heading = number, -- in radians, range of 0 to 2*pi, relative to true north - Pitch = number, -- in radians, range of -pi/2 to pi/2 - Roll = number, -- in radians, range of 0 to 2*pi, right roll is positive direction - - --Yaw, AoA, ClimbAngle - relative to earth reference- DOES NOT TAKE INTO ACCOUNT WIND. - Yaw = number, -- in radians, range of -pi to pi, right yaw is positive direction - AoA = number, -- in radians, range of -pi to pi, rotation of aircraft to the right in comparison to flight direction being positive - ClimbAngle = number, -- in radians, range of -pi/2 to pi/2 - - --Maybe later? - AxialVel = table, velocity of the aircraft transformed into directions of aircraft axes - Speed = number -- absolute velocity in meters/sec + Heading = number, -- in radians, range of 0 to 2*pi, relative to true north + Pitch = number, -- in radians, range of -pi/2 to pi/2 + Roll = number, -- in radians, range of 0 to 2*pi, right roll is positive direction + + --Yaw, AoA, ClimbAngle - relative to earth reference- DOES NOT TAKE INTO ACCOUNT WIND. + Yaw = number, -- in radians, range of -pi to pi, right yaw is positive direction + AoA = number, -- in radians, range of -pi to pi, rotation of aircraft to the right in comparison to flight direction being positive + ClimbAngle = number, -- in radians, range of -pi/2 to pi/2 + + --Maybe later? + AxialVel = table, velocity of the aircraft transformed into directions of aircraft axes + Speed = number -- absolute velocity in meters/sec - } + } ]] function mist.getAttitude(unit) - local unitpos = unit:getPosition() - if unitpos then - - local Heading = math.atan2(unitpos.x.z, unitpos.x.x) - - Heading = Heading + mist.getNorthCorrection(unitpos.p) - - if Heading < 0 then - Heading = Heading + 2*math.pi -- put heading in range of 0 to 2*pi - end - ---- heading complete.---- - - local Pitch = math.asin(unitpos.x.y) - ---- pitch complete.---- - - -- now get roll: - --maybe not the best way to do it, but it works. - - --first, make a vector that is perpendicular to y and unitpos.x with cross product - local cp = mist.vec.cp(unitpos.x, {x = 0, y = 1, z = 0}) - - --now, get dot product of of this cross product with unitpos.z - local dp = mist.vec.dp(cp, unitpos.z) - - --now get the magnitude of the roll (magnitude of the angle between two vectors is acos(vec1.vec2/|vec1||vec2|) - local Roll = math.acos(dp/(mist.vec.mag(cp)*mist.vec.mag(unitpos.z))) + local unitpos = unit:getPosition() + if unitpos then + + local Heading = math.atan2(unitpos.x.z, unitpos.x.x) + + Heading = Heading + mist.getNorthCorrection(unitpos.p) + + if Heading < 0 then + Heading = Heading + 2*math.pi -- put heading in range of 0 to 2*pi + end + ---- heading complete.---- + + local Pitch = math.asin(unitpos.x.y) + ---- pitch complete.---- + + -- now get roll: + --maybe not the best way to do it, but it works. + + --first, make a vector that is perpendicular to y and unitpos.x with cross product + local cp = mist.vec.cp(unitpos.x, {x = 0, y = 1, z = 0}) + + --now, get dot product of of this cross product with unitpos.z + local dp = mist.vec.dp(cp, unitpos.z) + + --now get the magnitude of the roll (magnitude of the angle between two vectors is acos(vec1.vec2/|vec1||vec2|) + local Roll = math.acos(dp/(mist.vec.mag(cp)*mist.vec.mag(unitpos.z))) - --now, have to get sign of roll. - -- by convention, making right roll positive - -- to get sign of roll, use the y component of unitpos.z. For right roll, y component is negative. - - if unitpos.z.y > 0 then -- left roll, flip the sign of the roll - Roll = -Roll - end - ---- roll complete. ---- - - --now, work on yaw, AoA, climb, and abs velocity - local Yaw - local AoA - local ClimbAngle - - -- get unit velocity - local unitvel = unit:getVelocity() - if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! - local AxialVel = {} --unit velocity transformed into aircraft axes directions - - --transform velocity components in direction of aircraft axes. - AxialVel.x = mist.vec.dp(unitpos.x, unitvel) - AxialVel.y = mist.vec.dp(unitpos.y, unitvel) - AxialVel.z = mist.vec.dp(unitpos.z, unitvel) - - --Yaw is the angle between unitpos.x and the x and z velocities - --define right yaw as positive - Yaw = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = 0, z = AxialVel.z})/mist.vec.mag({x = AxialVel.x, y = 0, z = AxialVel.z})) - - --now set correct direction: - if AxialVel.z > 0 then - Yaw = -Yaw - end - - -- AoA is angle between unitpos.x and the x and y velocities - AoA = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = AxialVel.y, z = 0})/mist.vec.mag({x = AxialVel.x, y = AxialVel.y, z = 0})) - - --now set correct direction: - if AxialVel.y > 0 then - AoA = -AoA - end - - ClimbAngle = math.asin(unitvel.y/mist.vec.mag(unitvel)) - end - return { Heading = Heading, Pitch = Pitch, Roll = Roll, Yaw = Yaw, AoA = AoA, ClimbAngle = ClimbAngle} - else - env.info('unit:getPosition() is nil!') - end + --now, have to get sign of roll. + -- by convention, making right roll positive + -- to get sign of roll, use the y component of unitpos.z. For right roll, y component is negative. + + if unitpos.z.y > 0 then -- left roll, flip the sign of the roll + Roll = -Roll + end + ---- roll complete. ---- + + --now, work on yaw, AoA, climb, and abs velocity + local Yaw + local AoA + local ClimbAngle + + -- get unit velocity + local unitvel = unit:getVelocity() + if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! + local AxialVel = {} --unit velocity transformed into aircraft axes directions + + --transform velocity components in direction of aircraft axes. + AxialVel.x = mist.vec.dp(unitpos.x, unitvel) + AxialVel.y = mist.vec.dp(unitpos.y, unitvel) + AxialVel.z = mist.vec.dp(unitpos.z, unitvel) + + --Yaw is the angle between unitpos.x and the x and z velocities + --define right yaw as positive + Yaw = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = 0, z = AxialVel.z})/mist.vec.mag({x = AxialVel.x, y = 0, z = AxialVel.z})) + + --now set correct direction: + if AxialVel.z > 0 then + Yaw = -Yaw + end + + -- AoA is angle between unitpos.x and the x and y velocities + AoA = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = AxialVel.y, z = 0})/mist.vec.mag({x = AxialVel.x, y = AxialVel.y, z = 0})) + + --now set correct direction: + if AxialVel.y > 0 then + AoA = -AoA + end + + ClimbAngle = math.asin(unitvel.y/mist.vec.mag(unitvel)) + end + return { Heading = Heading, Pitch = Pitch, Roll = Roll, Yaw = Yaw, AoA = AoA, ClimbAngle = ClimbAngle} + else + env.info('unit:getPosition() is nil!') + end end function mist.getHeading(unit, rawHeading) - local unitpos = unit:getPosition() - if unitpos then - local Heading = math.atan2(unitpos.x.z, unitpos.x.x) - if not rawHeading then - Heading = Heading + mist.getNorthCorrection(unitpos.p) - end - if Heading < 0 then - Heading = Heading + 2*math.pi -- put heading in range of 0 to 2*pi - end - return Heading - end + local unitpos = unit:getPosition() + if unitpos then + local Heading = math.atan2(unitpos.x.z, unitpos.x.x) + if not rawHeading then + Heading = Heading + mist.getNorthCorrection(unitpos.p) + end + if Heading < 0 then + Heading = Heading + 2*math.pi -- put heading in range of 0 to 2*pi + end + return Heading + end end function mist.getPitch(unit) - local unitpos = unit:getPosition() - if unitpos then - return math.asin(unitpos.x.y) - end + local unitpos = unit:getPosition() + if unitpos then + return math.asin(unitpos.x.y) + end end function mist.getRoll(unit) - local unitpos = unit:getPosition() - if unitpos then - -- now get roll: - --maybe not the best way to do it, but it works. - - --first, make a vector that is perpendicular to y and unitpos.x with cross product - local cp = mist.vec.cp(unitpos.x, {x = 0, y = 1, z = 0}) - - --now, get dot product of of this cross product with unitpos.z - local dp = mist.vec.dp(cp, unitpos.z) - - --now get the magnitude of the roll (magnitude of the angle between two vectors is acos(vec1.vec2/|vec1||vec2|) - local Roll = math.acos(dp/(mist.vec.mag(cp)*mist.vec.mag(unitpos.z))) + local unitpos = unit:getPosition() + if unitpos then + -- now get roll: + --maybe not the best way to do it, but it works. + + --first, make a vector that is perpendicular to y and unitpos.x with cross product + local cp = mist.vec.cp(unitpos.x, {x = 0, y = 1, z = 0}) + + --now, get dot product of of this cross product with unitpos.z + local dp = mist.vec.dp(cp, unitpos.z) + + --now get the magnitude of the roll (magnitude of the angle between two vectors is acos(vec1.vec2/|vec1||vec2|) + local Roll = math.acos(dp/(mist.vec.mag(cp)*mist.vec.mag(unitpos.z))) - --now, have to get sign of roll. - -- by convention, making right roll positive - -- to get sign of roll, use the y component of unitpos.z. For right roll, y component is negative. - - if unitpos.z.y > 0 then -- left roll, flip the sign of the roll - Roll = -Roll - end - return Roll - end + --now, have to get sign of roll. + -- by convention, making right roll positive + -- to get sign of roll, use the y component of unitpos.z. For right roll, y component is negative. + + if unitpos.z.y > 0 then -- left roll, flip the sign of the roll + Roll = -Roll + end + return Roll + end end function mist.getYaw(unit) - local unitpos = unit:getPosition() - if unitpos then - -- get unit velocity - local unitvel = unit:getVelocity() - if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! - local AxialVel = {} --unit velocity transformed into aircraft axes directions - - --transform velocity components in direction of aircraft axes. - AxialVel.x = mist.vec.dp(unitpos.x, unitvel) - AxialVel.y = mist.vec.dp(unitpos.y, unitvel) - AxialVel.z = mist.vec.dp(unitpos.z, unitvel) - - --Yaw is the angle between unitpos.x and the x and z velocities - --define right yaw as positive - local Yaw = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = 0, z = AxialVel.z})/mist.vec.mag({x = AxialVel.x, y = 0, z = AxialVel.z})) - - --now set correct direction: - if AxialVel.z > 0 then - Yaw = -Yaw - end - return Yaw - end - end + local unitpos = unit:getPosition() + if unitpos then + -- get unit velocity + local unitvel = unit:getVelocity() + if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! + local AxialVel = {} --unit velocity transformed into aircraft axes directions + + --transform velocity components in direction of aircraft axes. + AxialVel.x = mist.vec.dp(unitpos.x, unitvel) + AxialVel.y = mist.vec.dp(unitpos.y, unitvel) + AxialVel.z = mist.vec.dp(unitpos.z, unitvel) + + --Yaw is the angle between unitpos.x and the x and z velocities + --define right yaw as positive + local Yaw = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = 0, z = AxialVel.z})/mist.vec.mag({x = AxialVel.x, y = 0, z = AxialVel.z})) + + --now set correct direction: + if AxialVel.z > 0 then + Yaw = -Yaw + end + return Yaw + end + end end function mist.getAoA(unit) - local unitpos = unit:getPosition() - if unitpos then - local unitvel = unit:getVelocity() - if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! - local AxialVel = {} --unit velocity transformed into aircraft axes directions - - --transform velocity components in direction of aircraft axes. - AxialVel.x = mist.vec.dp(unitpos.x, unitvel) - AxialVel.y = mist.vec.dp(unitpos.y, unitvel) - AxialVel.z = mist.vec.dp(unitpos.z, unitvel) - - -- AoA is angle between unitpos.x and the x and y velocities - local AoA = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = AxialVel.y, z = 0})/mist.vec.mag({x = AxialVel.x, y = AxialVel.y, z = 0})) - - --now set correct direction: - if AxialVel.y > 0 then - AoA = -AoA - end - return AoA - end - end + local unitpos = unit:getPosition() + if unitpos then + local unitvel = unit:getVelocity() + if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! + local AxialVel = {} --unit velocity transformed into aircraft axes directions + + --transform velocity components in direction of aircraft axes. + AxialVel.x = mist.vec.dp(unitpos.x, unitvel) + AxialVel.y = mist.vec.dp(unitpos.y, unitvel) + AxialVel.z = mist.vec.dp(unitpos.z, unitvel) + + -- AoA is angle between unitpos.x and the x and y velocities + local AoA = math.acos(mist.vec.dp({x = 1, y = 0, z = 0}, {x = AxialVel.x, y = AxialVel.y, z = 0})/mist.vec.mag({x = AxialVel.x, y = AxialVel.y, z = 0})) + + --now set correct direction: + if AxialVel.y > 0 then + AoA = -AoA + end + return AoA + end + end end function mist.getClimbAngle(unit) - local unitpos = unit:getPosition() - if unitpos then - local unitvel = unit:getVelocity() - if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! - return math.asin(unitvel.y/mist.vec.mag(unitvel)) - end - end + local unitpos = unit:getPosition() + if unitpos then + local unitvel = unit:getVelocity() + if mist.vec.mag(unitvel) ~= 0 then --must have non-zero velocity! + return math.asin(unitvel.y/mist.vec.mag(unitvel)) + end + end end ----------------------------------------------------------------------------------------------------------- -- Database building @@ -1799,22 +1855,22 @@ mist.DBs = {} mist.DBs.missionData = {} ----------------------------------------- if env.mission then - - mist.DBs.missionData['startTime'] = env.mission.start_time - mist.DBs.missionData['theatre'] = env.mission.theatre - mist.DBs.missionData['version'] = env.mission.version - mist.DBs.missionData['files'] = {} - if type(env.mission.resourceCounter) == 'table' then - for fIndex, fData in pairs (env.mission.resourceCounter) do - mist.DBs.missionData.files[#mist.DBs.missionData.files + 1] = mist.utils.deepCopy(fIndex) - end - end - mist.DBs.missionData['bullseye'] = {['red'] = {}, ['blue'] = {}} -- if we add more coalition specific data then bullsye should be categorized by coaliton. For now its just the bullseye table - mist.DBs.missionData.bullseye.red['x'] = env.mission.coalition.red.bullseye.x --should it be point.x? - mist.DBs.missionData.bullseye.red['y'] = env.mission.coalition.red.bullseye.y - mist.DBs.missionData.bullseye.blue['x'] = env.mission.coalition.blue.bullseye.x - mist.DBs.missionData.bullseye.blue['y'] = env.mission.coalition.blue.bullseye.y - + + mist.DBs.missionData['startTime'] = env.mission.start_time + mist.DBs.missionData['theatre'] = env.mission.theatre + mist.DBs.missionData['version'] = env.mission.version + mist.DBs.missionData['files'] = {} + if type(env.mission.resourceCounter) == 'table' then + for fIndex, fData in pairs (env.mission.resourceCounter) do + mist.DBs.missionData.files[#mist.DBs.missionData.files + 1] = mist.utils.deepCopy(fIndex) + end + end + mist.DBs.missionData['bullseye'] = {['red'] = {}, ['blue'] = {}} -- if we add more coalition specific data then bullsye should be categorized by coaliton. For now its just the bullseye table + mist.DBs.missionData.bullseye.red['x'] = env.mission.coalition.red.bullseye.x --should it be point.x? + mist.DBs.missionData.bullseye.red['y'] = env.mission.coalition.red.bullseye.y + mist.DBs.missionData.bullseye.blue['x'] = env.mission.coalition.blue.bullseye.x + mist.DBs.missionData.bullseye.blue['y'] = env.mission.coalition.blue.bullseye.y + end ---------------------------------------- @@ -1824,19 +1880,19 @@ mist.DBs.zonesByNum = {} if env.mission.triggers and env.mission.triggers.zones then - for zone_ind, zone_data in pairs(env.mission.triggers.zones) do - if type(zone_data) == 'table' then - local zone = mist.utils.deepCopy(zone_data) - zone['point'] = {} -- point is used by SSE - zone['point']['x'] = zone_data.x - zone['point']['y'] = 0 - zone['point']['z'] = zone_data.y - - mist.DBs.zonesByName[zone_data.name] = zone - mist.DBs.zonesByNum[#mist.DBs.zonesByNum + 1] = mist.utils.deepCopy(zone) --[[deepcopy so that the zone in zones_by_name and the zone in - zones_by_num se are different objects.. don't want them linked.]] - end - end + for zone_ind, zone_data in pairs(env.mission.triggers.zones) do + if type(zone_data) == 'table' then + local zone = mist.utils.deepCopy(zone_data) + zone['point'] = {} -- point is used by SSE + zone['point']['x'] = zone_data.x + zone['point']['y'] = 0 + zone['point']['z'] = zone_data.y + + mist.DBs.zonesByName[zone_data.name] = zone + mist.DBs.zonesByNum[#mist.DBs.zonesByNum + 1] = mist.utils.deepCopy(zone) --[[deepcopy so that the zone in zones_by_name and the zone in + zones_by_num se are different objects.. don't want them linked.]] + end + end end mist.DBs.navPoints = {} @@ -1844,140 +1900,140 @@ mist.DBs.units = {} --Build mist.db.units and mist.DBs.navPoints for coa_name, coa_data in pairs(env.mission.coalition) do - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - mist.DBs.units[coa_name] = {} - - ---------------------------------------------- - -- build nav points DB - mist.DBs.navPoints[coa_name] = {} - if coa_data.nav_points then --navpoints - --mist.debug.writeData (mist.utils.serialize,{'NavPoints',coa_data.nav_points}, 'NavPoints.txt') - for nav_ind, nav_data in pairs(coa_data.nav_points) do - - if type(nav_data) == 'table' then - mist.DBs.navPoints[coa_name][nav_ind] = mist.utils.deepCopy(nav_data) + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + mist.DBs.units[coa_name] = {} + + ---------------------------------------------- + -- build nav points DB + mist.DBs.navPoints[coa_name] = {} + if coa_data.nav_points then --navpoints + --mist.debug.writeData (mist.utils.serialize,{'NavPoints',coa_data.nav_points}, 'NavPoints.txt') + for nav_ind, nav_data in pairs(coa_data.nav_points) do + + if type(nav_data) == 'table' then + mist.DBs.navPoints[coa_name][nav_ind] = mist.utils.deepCopy(nav_data) - mist.DBs.navPoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. - mist.DBs.navPoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. - mist.DBs.navPoints[coa_name][nav_ind]['point']['x'] = nav_data.x - mist.DBs.navPoints[coa_name][nav_ind]['point']['y'] = 0 - mist.DBs.navPoints[coa_name][nav_ind]['point']['z'] = nav_data.y - end - end - end - ------------------------------------------------- - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - - local countryName = string.lower(cntry_data.name) - mist.DBs.units[coa_name][countryName] = {} - mist.DBs.units[coa_name][countryName]["countryId"] = cntry_data.id + mist.DBs.navPoints[coa_name][nav_ind]['name'] = nav_data.callsignStr -- name is a little bit more self-explanatory. + mist.DBs.navPoints[coa_name][nav_ind]['point'] = {} -- point is used by SSE, support it. + mist.DBs.navPoints[coa_name][nav_ind]['point']['x'] = nav_data.x + mist.DBs.navPoints[coa_name][nav_ind]['point']['y'] = 0 + mist.DBs.navPoints[coa_name][nav_ind]['point']['z'] = nav_data.y + end + end + end + ------------------------------------------------- + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + + local countryName = string.lower(cntry_data.name) + mist.DBs.units[coa_name][countryName] = {} + mist.DBs.units[coa_name][countryName]["countryId"] = cntry_data.id - if type(cntry_data) == 'table' then --just making sure - - for obj_type_name, obj_type_data in pairs(cntry_data) do - - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check - - local category = obj_type_name - - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - - mist.DBs.units[coa_name][countryName][category] = {} - - for group_num, group_data in pairs(obj_type_data.group) do - - if group_data and group_data.units and type(group_data.units) == 'table' then --making sure again- this is a valid group - - mist.DBs.units[coa_name][countryName][category][group_num] = {} - local groupName = group_data.name - if env.mission.version > 7 then - groupName = env.getValueDictByKey(groupName) - end - mist.DBs.units[coa_name][countryName][category][group_num]["groupName"] = groupName - mist.DBs.units[coa_name][countryName][category][group_num]["groupId"] = group_data.groupId - mist.DBs.units[coa_name][countryName][category][group_num]["category"] = category - mist.DBs.units[coa_name][countryName][category][group_num]["coalition"] = coa_name - mist.DBs.units[coa_name][countryName][category][group_num]["country"] = countryName - mist.DBs.units[coa_name][countryName][category][group_num]["countryId"] = cntry_data.id - mist.DBs.units[coa_name][countryName][category][group_num]["startTime"] = group_data.start_time - mist.DBs.units[coa_name][countryName][category][group_num]["task"] = group_data.task - mist.DBs.units[coa_name][countryName][category][group_num]["hidden"] = group_data.hidden - - mist.DBs.units[coa_name][countryName][category][group_num]["units"] = {} - - mist.DBs.units[coa_name][countryName][category][group_num]["radioSet"] = group_data.radioSet - mist.DBs.units[coa_name][countryName][category][group_num]["uncontrolled"] = group_data.uncontrolled - mist.DBs.units[coa_name][countryName][category][group_num]["frequency"] = group_data.frequency - mist.DBs.units[coa_name][countryName][category][group_num]["modulation"] = group_data.modulation + if type(cntry_data) == 'table' then --just making sure + + for obj_type_name, obj_type_data in pairs(cntry_data) do + + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then --should be an unncessary check + + local category = obj_type_name + + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + + mist.DBs.units[coa_name][countryName][category] = {} + + for group_num, group_data in pairs(obj_type_data.group) do + + if group_data and group_data.units and type(group_data.units) == 'table' then --making sure again- this is a valid group + + mist.DBs.units[coa_name][countryName][category][group_num] = {} + local groupName = group_data.name + if env.mission.version > 7 then + groupName = env.getValueDictByKey(groupName) + end + mist.DBs.units[coa_name][countryName][category][group_num]["groupName"] = groupName + mist.DBs.units[coa_name][countryName][category][group_num]["groupId"] = group_data.groupId + mist.DBs.units[coa_name][countryName][category][group_num]["category"] = category + mist.DBs.units[coa_name][countryName][category][group_num]["coalition"] = coa_name + mist.DBs.units[coa_name][countryName][category][group_num]["country"] = countryName + mist.DBs.units[coa_name][countryName][category][group_num]["countryId"] = cntry_data.id + mist.DBs.units[coa_name][countryName][category][group_num]["startTime"] = group_data.start_time + mist.DBs.units[coa_name][countryName][category][group_num]["task"] = group_data.task + mist.DBs.units[coa_name][countryName][category][group_num]["hidden"] = group_data.hidden + + mist.DBs.units[coa_name][countryName][category][group_num]["units"] = {} + + mist.DBs.units[coa_name][countryName][category][group_num]["radioSet"] = group_data.radioSet + mist.DBs.units[coa_name][countryName][category][group_num]["uncontrolled"] = group_data.uncontrolled + mist.DBs.units[coa_name][countryName][category][group_num]["frequency"] = group_data.frequency + mist.DBs.units[coa_name][countryName][category][group_num]["modulation"] = group_data.modulation - for unit_num, unit_data in pairs(group_data.units) do - local units_tbl = mist.DBs.units[coa_name][countryName][category][group_num]["units"] --pointer to the units table for this group - - units_tbl[unit_num] = {} - if env.mission.version > 7 then - units_tbl[unit_num]["unitName"] = env.getValueDictByKey(unit_data.name) - else - units_tbl[unit_num]["unitName"] = unit_data.name - end - units_tbl[unit_num]["type"] = unit_data.type - units_tbl[unit_num]["skill"] = unit_data.skill --will be nil for statics - units_tbl[unit_num]["unitId"] = unit_data.unitId - units_tbl[unit_num]["category"] = category - units_tbl[unit_num]["coalition"] = coa_name - units_tbl[unit_num]["country"] = countryName - units_tbl[unit_num]["countryId"] = cntry_data.id - units_tbl[unit_num]["heading"] = unit_data.heading - units_tbl[unit_num]["playerCanDrive"] = unit_data.playerCanDrive - units_tbl[unit_num]["alt"] = unit_data.alt - units_tbl[unit_num]["alt_type"] = unit_data.alt_type - units_tbl[unit_num]["speed"] = unit_data.speed - units_tbl[unit_num]["livery_id"] = unit_data.livery_id - if unit_data.point then --ME currently does not work like this, but it might one day - units_tbl[unit_num]["point"] = unit_data.point - else - units_tbl[unit_num]["point"] = {} - units_tbl[unit_num]["point"]["x"] = unit_data.x - units_tbl[unit_num]["point"]["y"] = unit_data.y - end - units_tbl[unit_num]['x'] = unit_data.x - units_tbl[unit_num]['y'] = unit_data.y - - units_tbl[unit_num]["callsign"] = unit_data.callsign - units_tbl[unit_num]["onboard_num"] = unit_data.onboard_num - units_tbl[unit_num]["hardpoint_racks"] = unit_data.hardpoint_racks - units_tbl[unit_num]["psi"] = unit_data.psi + for unit_num, unit_data in pairs(group_data.units) do + local units_tbl = mist.DBs.units[coa_name][countryName][category][group_num]["units"] --pointer to the units table for this group + + units_tbl[unit_num] = {} + if env.mission.version > 7 then + units_tbl[unit_num]["unitName"] = env.getValueDictByKey(unit_data.name) + else + units_tbl[unit_num]["unitName"] = unit_data.name + end + units_tbl[unit_num]["type"] = unit_data.type + units_tbl[unit_num]["skill"] = unit_data.skill --will be nil for statics + units_tbl[unit_num]["unitId"] = unit_data.unitId + units_tbl[unit_num]["category"] = category + units_tbl[unit_num]["coalition"] = coa_name + units_tbl[unit_num]["country"] = countryName + units_tbl[unit_num]["countryId"] = cntry_data.id + units_tbl[unit_num]["heading"] = unit_data.heading + units_tbl[unit_num]["playerCanDrive"] = unit_data.playerCanDrive + units_tbl[unit_num]["alt"] = unit_data.alt + units_tbl[unit_num]["alt_type"] = unit_data.alt_type + units_tbl[unit_num]["speed"] = unit_data.speed + units_tbl[unit_num]["livery_id"] = unit_data.livery_id + if unit_data.point then --ME currently does not work like this, but it might one day + units_tbl[unit_num]["point"] = unit_data.point + else + units_tbl[unit_num]["point"] = {} + units_tbl[unit_num]["point"]["x"] = unit_data.x + units_tbl[unit_num]["point"]["y"] = unit_data.y + end + units_tbl[unit_num]['x'] = unit_data.x + units_tbl[unit_num]['y'] = unit_data.y + + units_tbl[unit_num]["callsign"] = unit_data.callsign + units_tbl[unit_num]["onboard_num"] = unit_data.onboard_num + units_tbl[unit_num]["hardpoint_racks"] = unit_data.hardpoint_racks + units_tbl[unit_num]["psi"] = unit_data.psi - - units_tbl[unit_num]["groupName"] = groupName - units_tbl[unit_num]["groupId"] = group_data.groupId - - if unit_data.AddPropAircraft then - units_tbl[unit_num]["AddPropAircraft"] = unit_data.AddPropAircraft - end - - if category == 'static' then - units_tbl[unit_num]["categoryStatic"] = unit_data.category - units_tbl[unit_num]["shape_name"] = unit_data.shape_name - if unit_data.mass then - units_tbl[unit_num]["mass"] = unit_data.mass - end - - if unit_data.canCargo then - units_tbl[unit_num]["canCargo"] = unit_data.canCargo - end - end - - end --for unit_num, unit_data in pairs(group_data.units) do - end --if group_data and group_data.units then - end --for group_num, group_data in pairs(obj_type_data.group) do - end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then - end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then - end --for obj_type_name, obj_type_data in pairs(cntry_data) do - end --if type(cntry_data) == 'table' then - end --for cntry_id, cntry_data in pairs(coa_data.country) do - end --if coa_data.country then --there is a country table - end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + + units_tbl[unit_num]["groupName"] = groupName + units_tbl[unit_num]["groupId"] = group_data.groupId + + if unit_data.AddPropAircraft then + units_tbl[unit_num]["AddPropAircraft"] = unit_data.AddPropAircraft + end + + if category == 'static' then + units_tbl[unit_num]["categoryStatic"] = unit_data.category + units_tbl[unit_num]["shape_name"] = unit_data.shape_name + if unit_data.mass then + units_tbl[unit_num]["mass"] = unit_data.mass + end + + if unit_data.canCargo then + units_tbl[unit_num]["canCargo"] = unit_data.canCargo + end + end + + end --for unit_num, unit_data in pairs(group_data.units) do + end --if group_data and group_data.units then + end --for group_num, group_data in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --if type(cntry_data) == 'table' then + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then end --for coa_name, coa_data in pairs(mission.coalition) do mist.DBs.unitsByName = {} @@ -2005,64 +2061,64 @@ mist.DBs.aliveUnits = {} -- will be filled in by the "update_alive_units" corou mist.DBs.removedAliveUnits = {} -- will be filled in by the "update_alive_units" coroutine in mist.main. -- create mist.DBs.oldAliveUnits -- do - -- local intermediate_alive_units = {} -- between 0 and 0.5 secs old - -- local function make_old_alive_units() -- called every 0.5 secs, makes the old_alive_units DB which is just a copy of alive_units that is 0.5 to 1 sec old - -- if intermediate_alive_units then - -- mist.DBs.oldAliveUnits = mist.utils.deepCopy(intermediate_alive_units) - -- end - -- intermediate_alive_units = mist.utils.deepCopy(mist.DBs.aliveUnits) - -- timer.scheduleFunction(make_old_alive_units, nil, timer.getTime() + 0.5) - -- end - - -- make_old_alive_units() + -- local intermediate_alive_units = {} -- between 0 and 0.5 secs old + -- local function make_old_alive_units() -- called every 0.5 secs, makes the old_alive_units DB which is just a copy of alive_units that is 0.5 to 1 sec old + -- if intermediate_alive_units then + -- mist.DBs.oldAliveUnits = mist.utils.deepCopy(intermediate_alive_units) + -- end + -- intermediate_alive_units = mist.utils.deepCopy(mist.DBs.aliveUnits) + -- timer.scheduleFunction(make_old_alive_units, nil, timer.getTime() + 0.5) + -- end + + -- make_old_alive_units() -- end --Build DBs for coa_name, coa_data in pairs(mist.DBs.units) do - for cntry_name, cntry_data in pairs(coa_data) do - for category_name, category_data in pairs(cntry_data) do - if type(category_data) == 'table' then - for group_ind, group_data in pairs(category_data) do - if type(group_data) == 'table' and group_data.units and type(group_data.units) == 'table' and #group_data.units > 0 then -- OCD paradigm programming - mist.DBs.groupsByName[group_data.groupName] = mist.utils.deepCopy(group_data) - mist.DBs.groupsById[group_data.groupId] = mist.utils.deepCopy(group_data) - for unit_ind, unit_data in pairs(group_data.units) do - mist.DBs.unitsByName[unit_data.unitName] = mist.utils.deepCopy(unit_data) - mist.DBs.unitsById[unit_data.unitId] = mist.utils.deepCopy(unit_data) - - mist.DBs.unitsByCat[unit_data.category] = mist.DBs.unitsByCat[unit_data.category] or {} -- future-proofing against new categories... - table.insert(mist.DBs.unitsByCat[unit_data.category], mist.utils.deepCopy(unit_data)) - --print('inserting ' .. unit_data.unitName) - table.insert(mist.DBs.unitsByNum, mist.utils.deepCopy(unit_data)) - - if unit_data.skill and (unit_data.skill == "Client" or unit_data.skill == "Player") then - mist.DBs.humansByName[unit_data.unitName] = mist.utils.deepCopy(unit_data) - mist.DBs.humansById[unit_data.unitId] = mist.utils.deepCopy(unit_data) - --if Unit.getByName(unit_data.unitName) then - -- mist.DBs.activeHumans[unit_data.unitName] = mist.utils.deepCopy(unit_data) - -- mist.DBs.activeHumans[unit_data.unitName].playerName = Unit.getByName(unit_data.unitName):getPlayerName() - --end - end - end - end - end - end - end - end + for cntry_name, cntry_data in pairs(coa_data) do + for category_name, category_data in pairs(cntry_data) do + if type(category_data) == 'table' then + for group_ind, group_data in pairs(category_data) do + if type(group_data) == 'table' and group_data.units and type(group_data.units) == 'table' and #group_data.units > 0 then -- OCD paradigm programming + mist.DBs.groupsByName[group_data.groupName] = mist.utils.deepCopy(group_data) + mist.DBs.groupsById[group_data.groupId] = mist.utils.deepCopy(group_data) + for unit_ind, unit_data in pairs(group_data.units) do + mist.DBs.unitsByName[unit_data.unitName] = mist.utils.deepCopy(unit_data) + mist.DBs.unitsById[unit_data.unitId] = mist.utils.deepCopy(unit_data) + + mist.DBs.unitsByCat[unit_data.category] = mist.DBs.unitsByCat[unit_data.category] or {} -- future-proofing against new categories... + table.insert(mist.DBs.unitsByCat[unit_data.category], mist.utils.deepCopy(unit_data)) + --print('inserting ' .. unit_data.unitName) + table.insert(mist.DBs.unitsByNum, mist.utils.deepCopy(unit_data)) + + if unit_data.skill and (unit_data.skill == "Client" or unit_data.skill == "Player") then + mist.DBs.humansByName[unit_data.unitName] = mist.utils.deepCopy(unit_data) + mist.DBs.humansById[unit_data.unitId] = mist.utils.deepCopy(unit_data) + --if Unit.getByName(unit_data.unitName) then + -- mist.DBs.activeHumans[unit_data.unitName] = mist.utils.deepCopy(unit_data) + -- mist.DBs.activeHumans[unit_data.unitName].playerName = Unit.getByName(unit_data.unitName):getPlayerName() + --end + end + end + end + end + end + end + end end -------------- -------- mist unitID funcs do - for id, idData in pairs(mist.DBs.unitsById) do - if idData.unitId > mist.nextUnitId then - mist.nextUnitId = mist.utils.deepCopy(idData.unitId) - end - if idData.groupId > mist.nextGroupId then - mist.nextGroupId = mist.utils.deepCopy(idData.groupId) - end - end + for id, idData in pairs(mist.DBs.unitsById) do + if idData.unitId > mist.nextUnitId then + mist.nextUnitId = mist.utils.deepCopy(idData.unitId) + end + if idData.groupId > mist.nextGroupId then + mist.nextGroupId = mist.utils.deepCopy(idData.groupId) + end + end end --DynDBs @@ -2079,159 +2135,159 @@ mist.DBs.MEgroupsById = mist.utils.deepCopy(mist.DBs.groupsById) mist.DBs.deadObjects = {} do - local mt = {} - - mt.__newindex = function(t, key, val) - --------------------------------------------------------------- - local original_key = key --only for duplicate runtime IDs. - local key_ind = 1 - while mist.DBs.deadObjects[key] do - --print('duplicate runtime id of previously dead object- key: ' .. tostring(key)) - key = tostring(original_key) .. ' #' .. tostring(key_ind) - key_ind = key_ind + 1 - end - --------------------------------------------------------------- - - if mist.DBs.aliveUnits and mist.DBs.aliveUnits[val.object.id_] then - --print('object found in alive_units') - val['objectData'] = mist.utils.deepCopy(mist.DBs.aliveUnits[val.object.id_]) - local pos = Object.getPosition(val.object) - if pos then - val['objectPos'] = pos.p - end - val['objectType'] = mist.DBs.aliveUnits[val.object.id_].category - - elseif mist.DBs.removedAliveUnits and mist.DBs.removedAliveUnits[val.object.id_] then -- it didn't exist in alive_units, check old_alive_units - --print('object found in old_alive_units') - val['objectData'] = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) - local pos = Object.getPosition(val.object) - if pos then - val['objectPos'] = pos.p - end - val['objectType'] = mist.DBs.removedAliveUnits[val.object.id_].category - - else --attempt to determine if static object... - --print('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... - --print('correlated dead static object to position') - val['objectData'] = static - val['objectPos'] = pos.p - val['objectType'] = 'static' - static_found = true - break - end - end - if not static_found then - val['objectPos'] = pos.p - val['objectType'] = 'building' - end - else - val['objectType'] = 'unknown' - end - end - rawset(t, key, val) - end + local mt = {} + + mt.__newindex = function(t, key, val) + --------------------------------------------------------------- + local original_key = key --only for duplicate runtime IDs. + local key_ind = 1 + while mist.DBs.deadObjects[key] do + --print('duplicate runtime id of previously dead object- key: ' .. tostring(key)) + key = tostring(original_key) .. ' #' .. tostring(key_ind) + key_ind = key_ind + 1 + end + --------------------------------------------------------------- + + if mist.DBs.aliveUnits and mist.DBs.aliveUnits[val.object.id_] then + --print('object found in alive_units') + val['objectData'] = mist.utils.deepCopy(mist.DBs.aliveUnits[val.object.id_]) + local pos = Object.getPosition(val.object) + if pos then + val['objectPos'] = pos.p + end + val['objectType'] = mist.DBs.aliveUnits[val.object.id_].category + + elseif mist.DBs.removedAliveUnits and mist.DBs.removedAliveUnits[val.object.id_] then -- it didn't exist in alive_units, check old_alive_units + --print('object found in old_alive_units') + val['objectData'] = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) + local pos = Object.getPosition(val.object) + if pos then + val['objectPos'] = pos.p + end + val['objectType'] = mist.DBs.removedAliveUnits[val.object.id_].category + + else --attempt to determine if static object... + --print('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... + --print('correlated dead static object to position') + val['objectData'] = static + val['objectPos'] = pos.p + val['objectType'] = 'static' + static_found = true + break + end + end + if not static_found then + val['objectPos'] = pos.p + val['objectType'] = 'building' + end + else + val['objectType'] = 'unknown' + end + end + rawset(t, key, val) + end - setmetatable(mist.DBs.deadObjects, mt) + setmetatable(mist.DBs.deadObjects, mt) end -- Event handler to start creating the dead_objects table do - local function addDeadObject(event) - if event.id == world.event.S_EVENT_DEAD or event.id == world.event.S_EVENT_CRASH then - if event.initiator and event.initiator.id_ and event.initiator.id_ > 0 then - - local id = event.initiator.id_ -- initial ID, could change if there is a duplicate id_ already dead. - local val = {object = event.initiator} -- the new entry in mist.DBs.deadObjects. - - --------------------------------------------------------------- - local original_id = id --only for duplicate runtime IDs. - local id_ind = 1 - while mist.DBs.deadObjects[id] do - --print('duplicate runtime id of previously dead object- id: ' .. tostring(id)) - id = tostring(original_id) .. ' #' .. tostring(id_ind) - id_ind = id_ind + 1 - end - --------------------------------------------------------------- - - if mist.DBs.aliveUnits and mist.DBs.aliveUnits[val.object.id_] then - --print('object found in alive_units') - val['objectData'] = mist.utils.deepCopy(mist.DBs.aliveUnits[val.object.id_]) - local pos = Object.getPosition(val.object) - if pos then - val['objectPos'] = pos.p - end - val['objectType'] = mist.DBs.aliveUnits[val.object.id_].category - --[[if mist.DBs.activeHumans[Unit.getName(val.object)] then - --trigger.action.outText('remove via death: ' .. Unit.getName(val.object),20) - mist.DBs.activeHumans[Unit.getName(val.object)] = nil - end]] - elseif mist.DBs.removedAliveUnits and mist.DBs.removedAliveUnits[val.object.id_] then -- it didn't exist in alive_units, check old_alive_units - --print('object found in old_alive_units') - val['objectData'] = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) - local pos = Object.getPosition(val.object) - if pos then - val['objectPos'] = pos.p - end - val['objectType'] = mist.DBs.removedAliveUnits[val.object.id_].category - - else --attempt to determine if static object... - --print('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... - --print('correlated dead static object to position') - val['objectData'] = static - val['objectPos'] = pos.p - val['objectType'] = 'static' - static_found = true - break - end - end - if not static_found then - val['objectPos'] = pos.p - val['objectType'] = 'building' - end - else - val['objectType'] = 'unknown' - end - end - mist.DBs.deadObjects[id] = val + local function addDeadObject(event) + if event.id == world.event.S_EVENT_DEAD or event.id == world.event.S_EVENT_CRASH then + if event.initiator and event.initiator.id_ and event.initiator.id_ > 0 then + + local id = event.initiator.id_ -- initial ID, could change if there is a duplicate id_ already dead. + local val = {object = event.initiator} -- the new entry in mist.DBs.deadObjects. + + --------------------------------------------------------------- + local original_id = id --only for duplicate runtime IDs. + local id_ind = 1 + while mist.DBs.deadObjects[id] do + --print('duplicate runtime id of previously dead object- id: ' .. tostring(id)) + id = tostring(original_id) .. ' #' .. tostring(id_ind) + id_ind = id_ind + 1 + end + --------------------------------------------------------------- + + if mist.DBs.aliveUnits and mist.DBs.aliveUnits[val.object.id_] then + --print('object found in alive_units') + val['objectData'] = mist.utils.deepCopy(mist.DBs.aliveUnits[val.object.id_]) + local pos = Object.getPosition(val.object) + if pos then + val['objectPos'] = pos.p + end + val['objectType'] = mist.DBs.aliveUnits[val.object.id_].category + --[[if mist.DBs.activeHumans[Unit.getName(val.object)] then + --trigger.action.outText('remove via death: ' .. Unit.getName(val.object),20) + mist.DBs.activeHumans[Unit.getName(val.object)] = nil + end]] + elseif mist.DBs.removedAliveUnits and mist.DBs.removedAliveUnits[val.object.id_] then -- it didn't exist in alive_units, check old_alive_units + --print('object found in old_alive_units') + val['objectData'] = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) + local pos = Object.getPosition(val.object) + if pos then + val['objectPos'] = pos.p + end + val['objectType'] = mist.DBs.removedAliveUnits[val.object.id_].category + + else --attempt to determine if static object... + --print('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... + --print('correlated dead static object to position') + val['objectData'] = static + val['objectPos'] = pos.p + val['objectType'] = 'static' + static_found = true + break + end + end + if not static_found then + val['objectPos'] = pos.p + val['objectType'] = 'building' + end + else + val['objectType'] = 'unknown' + end + end + mist.DBs.deadObjects[id] = val - end - end - end + end + end + end - - mist.addEventHandler(addDeadObject) - - --[[ - local function addClientsToActive(event) - if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT or event.id == world.event.S_EVENT_BIRTH then - env.info(mist.utils.tableShow(event)) - if Unit.getPlayerName(event.initiator) then - env.info(Unit.getPlayerName(event.initiator)) - local newU = mist.utils.deepCopy(mist.DBs.unitsByName[Unit.getName(event.initiator)]) - newU.playerName = Unit.getPlayerName(event.initiator) - mist.DBs.activeHumans[Unit.getName(event.initiator)] = newU - --trigger.action.outText('added: ' .. Unit.getName(event.initiator), 20) - end - elseif event.id == world.event.S_EVENT_PLAYER_LEAVE_UNIT and event.initiator then - if mist.DBs.activeHumans[Unit.getName(event.initiator)] then - mist.DBs.activeHumans[Unit.getName(event.initiator)] = nil - -- trigger.action.outText('removed via control: ' .. Unit.getName(event.initiator), 20) - end - end - end - - mist.addEventHandler(addClientsToActive)]] + + mist.addEventHandler(addDeadObject) + + --[[ + local function addClientsToActive(event) + if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT or event.id == world.event.S_EVENT_BIRTH then + env.info(mist.utils.tableShow(event)) + if Unit.getPlayerName(event.initiator) then + env.info(Unit.getPlayerName(event.initiator)) + local newU = mist.utils.deepCopy(mist.DBs.unitsByName[Unit.getName(event.initiator)]) + newU.playerName = Unit.getPlayerName(event.initiator) + mist.DBs.activeHumans[Unit.getName(event.initiator)] = newU + --trigger.action.outText('added: ' .. Unit.getName(event.initiator), 20) + end + elseif event.id == world.event.S_EVENT_PLAYER_LEAVE_UNIT and event.initiator then + if mist.DBs.activeHumans[Unit.getName(event.initiator)] then + mist.DBs.activeHumans[Unit.getName(event.initiator)] = nil + -- trigger.action.outText('removed via control: ' .. Unit.getName(event.initiator), 20) + end + end + end + + mist.addEventHandler(addClientsToActive)]] end @@ -2315,341 +2371,341 @@ Country names to be used in [c] and [-c] short-cuts: "Italy" ]] - --Assumption: will be passed a table of strings, sequential - local units_by_name = {} + --Assumption: will be passed a table of strings, sequential + local units_by_name = {} - local l_munits = mist.DBs.units --local reference for faster execution - for i = 1, #tbl do - local unit = tbl[i] - if unit:sub(1,4) == '[-u]' then --subtract a unit - if units_by_name[unit:sub(5)] then -- 5 to end - units_by_name[unit:sub(5)] = nil --remove - end - elseif unit:sub(1,3) == '[g]' then -- add a group - for coa, coa_tbl in pairs(l_munits) do - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' and group_tbl.groupName == unit:sub(4) then -- index 4 to end - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - elseif unit:sub(1,4) == '[-g]' then -- subtract a group - for coa, coa_tbl in pairs(l_munits) do - for country, country_table in pairs(coa_tbl) do - for unit_type, unit_type_tbl in pairs(country_table) do - if type(unit_type_tbl) == 'table' then - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' and group_tbl.groupName == unit:sub(5) then -- index 5 to end - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - elseif unit:sub(1,3) == '[c]' then -- add a country - local category = '' - local country_start = 4 - if unit:sub(4,15) == '[helicopter]' then - category = 'helicopter' - country_start = 16 - elseif unit:sub(4,10) == '[plane]' then - category = 'plane' - country_start = 11 - elseif unit:sub(4,9) == '[ship]' then - category = 'ship' - country_start = 10 - elseif unit:sub(4,12) == '[vehicle]' then - category = 'vehicle' - country_start = 13 - 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 - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - end - elseif unit:sub(1,4) == '[-c]' then -- subtract a country - local category = '' - local country_start = 5 - if unit:sub(5,16) == '[helicopter]' then - category = 'helicopter' - country_start = 17 - elseif unit:sub(5,11) == '[plane]' then - category = 'plane' - country_start = 12 - elseif unit:sub(5,10) == '[ship]' then - category = 'ship' - country_start = 11 - elseif unit:sub(5,13) == '[vehicle]' then - category = 'vehicle' - country_start = 14 - 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 - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - end - elseif unit:sub(1,6) == '[blue]' then -- add blue coalition - local category = '' - if unit:sub(7) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(7) == '[plane]' then - category = 'plane' - elseif unit:sub(7) == '[ship]' then - category = 'ship' - elseif unit:sub(7) == '[vehicle]' then - category = 'vehicle' - 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 - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - end - elseif unit:sub(1,7) == '[-blue]' then -- subtract blue coalition - local category = '' - if unit:sub(8) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(8) == '[plane]' then - category = 'plane' - elseif unit:sub(8) == '[ship]' then - category = 'ship' - elseif unit:sub(8) == '[vehicle]' then - category = 'vehicle' - 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 - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - end - elseif unit:sub(1,5) == '[red]' then -- add red coalition - local category = '' - if unit:sub(6) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(6) == '[plane]' then - category = 'plane' - elseif unit:sub(6) == '[ship]' then - category = 'ship' - elseif unit:sub(6) == '[vehicle]' then - category = 'vehicle' - 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 - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - end - elseif unit:sub(1,6) == '[-red]' then -- subtract red coalition - local category = '' - if unit:sub(7) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(7) == '[plane]' then - category = 'plane' - elseif unit:sub(7) == '[ship]' then - category = 'ship' - elseif unit:sub(7) == '[vehicle]' then - category = 'vehicle' - 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 - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - end - elseif unit:sub(1,5) == '[all]' then -- add all of a certain category (or all categories) - local category = '' - if unit:sub(6) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(6) == '[plane]' then - category = 'plane' - elseif unit:sub(6) == '[ship]' then - category = 'ship' - elseif unit:sub(6) == '[vehicle]' then - category = 'vehicle' - 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 - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - units_by_name[unit.unitName] = true --add - end - end - end - end - end - end - end - elseif unit:sub(1,6) == '[-all]' then -- subtract all of a certain category (or all categories) - local category = '' - if unit:sub(7) == '[helicopter]' then - category = 'helicopter' - elseif unit:sub(7) == '[plane]' then - category = 'plane' - elseif unit:sub(7) == '[ship]' then - category = 'ship' - elseif unit:sub(7) == '[vehicle]' then - category = 'vehicle' - 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 - for group_ind, group_tbl in pairs(unit_type_tbl) do - if type(group_tbl) == 'table' then - for unit_ind, unit in pairs(group_tbl.units) do - if units_by_name[unit.unitName] then - units_by_name[unit.unitName] = nil --remove - end - end - end - end - end - end - end - end - else -- just a regular unit - units_by_name[unit] = true --add - end - end - - local units_tbl = {} -- indexed sequentially - for unit_name, val in pairs(units_by_name) do - if val then - units_tbl[#units_tbl + 1] = unit_name -- add all the units to the table - end - end - - - units_tbl['processed'] = timer.getTime() --add the processed flag - return units_tbl + local l_munits = mist.DBs.units --local reference for faster execution + for i = 1, #tbl do + local unit = tbl[i] + if unit:sub(1,4) == '[-u]' then --subtract a unit + if units_by_name[unit:sub(5)] then -- 5 to end + units_by_name[unit:sub(5)] = nil --remove + end + elseif unit:sub(1,3) == '[g]' then -- add a group + for coa, coa_tbl in pairs(l_munits) do + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' and group_tbl.groupName == unit:sub(4) then -- index 4 to end + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + elseif unit:sub(1,4) == '[-g]' then -- subtract a group + for coa, coa_tbl in pairs(l_munits) do + for country, country_table in pairs(coa_tbl) do + for unit_type, unit_type_tbl in pairs(country_table) do + if type(unit_type_tbl) == 'table' then + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' and group_tbl.groupName == unit:sub(5) then -- index 5 to end + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + elseif unit:sub(1,3) == '[c]' then -- add a country + local category = '' + local country_start = 4 + if unit:sub(4,15) == '[helicopter]' then + category = 'helicopter' + country_start = 16 + elseif unit:sub(4,10) == '[plane]' then + category = 'plane' + country_start = 11 + elseif unit:sub(4,9) == '[ship]' then + category = 'ship' + country_start = 10 + elseif unit:sub(4,12) == '[vehicle]' then + category = 'vehicle' + country_start = 13 + 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 + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + end + elseif unit:sub(1,4) == '[-c]' then -- subtract a country + local category = '' + local country_start = 5 + if unit:sub(5,16) == '[helicopter]' then + category = 'helicopter' + country_start = 17 + elseif unit:sub(5,11) == '[plane]' then + category = 'plane' + country_start = 12 + elseif unit:sub(5,10) == '[ship]' then + category = 'ship' + country_start = 11 + elseif unit:sub(5,13) == '[vehicle]' then + category = 'vehicle' + country_start = 14 + 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 + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + end + elseif unit:sub(1,6) == '[blue]' then -- add blue coalition + local category = '' + if unit:sub(7) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(7) == '[plane]' then + category = 'plane' + elseif unit:sub(7) == '[ship]' then + category = 'ship' + elseif unit:sub(7) == '[vehicle]' then + category = 'vehicle' + 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 + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + end + elseif unit:sub(1,7) == '[-blue]' then -- subtract blue coalition + local category = '' + if unit:sub(8) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(8) == '[plane]' then + category = 'plane' + elseif unit:sub(8) == '[ship]' then + category = 'ship' + elseif unit:sub(8) == '[vehicle]' then + category = 'vehicle' + 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 + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + end + elseif unit:sub(1,5) == '[red]' then -- add red coalition + local category = '' + if unit:sub(6) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(6) == '[plane]' then + category = 'plane' + elseif unit:sub(6) == '[ship]' then + category = 'ship' + elseif unit:sub(6) == '[vehicle]' then + category = 'vehicle' + 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 + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + end + elseif unit:sub(1,6) == '[-red]' then -- subtract red coalition + local category = '' + if unit:sub(7) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(7) == '[plane]' then + category = 'plane' + elseif unit:sub(7) == '[ship]' then + category = 'ship' + elseif unit:sub(7) == '[vehicle]' then + category = 'vehicle' + 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 + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + end + elseif unit:sub(1,5) == '[all]' then -- add all of a certain category (or all categories) + local category = '' + if unit:sub(6) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(6) == '[plane]' then + category = 'plane' + elseif unit:sub(6) == '[ship]' then + category = 'ship' + elseif unit:sub(6) == '[vehicle]' then + category = 'vehicle' + 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 + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + units_by_name[unit.unitName] = true --add + end + end + end + end + end + end + end + elseif unit:sub(1,6) == '[-all]' then -- subtract all of a certain category (or all categories) + local category = '' + if unit:sub(7) == '[helicopter]' then + category = 'helicopter' + elseif unit:sub(7) == '[plane]' then + category = 'plane' + elseif unit:sub(7) == '[ship]' then + category = 'ship' + elseif unit:sub(7) == '[vehicle]' then + category = 'vehicle' + 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 + for group_ind, group_tbl in pairs(unit_type_tbl) do + if type(group_tbl) == 'table' then + for unit_ind, unit in pairs(group_tbl.units) do + if units_by_name[unit.unitName] then + units_by_name[unit.unitName] = nil --remove + end + end + end + end + end + end + end + end + else -- just a regular unit + units_by_name[unit] = true --add + end + end + + local units_tbl = {} -- indexed sequentially + for unit_name, val in pairs(units_by_name) do + if val then + units_tbl[#units_tbl + 1] = unit_name -- add all the units to the table + end + end + + + units_tbl['processed'] = timer.getTime() --add the processed flag + return units_tbl end mist.getDeadMapObjsInZones = function(zone_names) -- zone_names: table of zone names -- returns: table of dead map objects (indexed numerically) - local map_objs = {} - local zones = {} - for i = 1, #zone_names do - if mist.DBs.zonesByName[zone_names[i]] then - zones[#zones + 1] = mist.DBs.zonesByName[zone_names[i]] - end - end - for obj_id, obj in pairs(mist.DBs.deadObjects) do - if obj.objectType and obj.objectType == 'building' then --dead map object - for i = 1, #zones do - if ((zones[i].point.x - obj.objectPos.x)^2 + (zones[i].point.z - obj.objectPos.z)^2)^0.5 <= zones[i].radius then - map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) - end - end - end - end - return map_objs + local map_objs = {} + local zones = {} + for i = 1, #zone_names do + if mist.DBs.zonesByName[zone_names[i]] then + zones[#zones + 1] = mist.DBs.zonesByName[zone_names[i]] + end + end + for obj_id, obj in pairs(mist.DBs.deadObjects) do + if obj.objectType and obj.objectType == 'building' then --dead map object + for i = 1, #zones do + if ((zones[i].point.x - obj.objectPos.x)^2 + (zones[i].point.z - obj.objectPos.z)^2)^0.5 <= zones[i].radius then + map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) + end + end + end + end + return map_objs end mist.getDeadMapObjsInPolygonZone = function(zone) -- zone_names: table of zone names -- returns: table of dead map objects (indexed numerically) - local map_objs = {} - for obj_id, obj in pairs(mist.DBs.deadObjects) do - if obj.objectType and obj.objectType == 'building' then --dead map object - if mist.pointInPolygon(obj.objectPos, zone) then - map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) - end - end - end - return map_objs + local map_objs = {} + for obj_id, obj in pairs(mist.DBs.deadObjects) do + if obj.objectType and obj.objectType == 'building' then --dead map object + if mist.pointInPolygon(obj.objectPos, zone) then + map_objs[#map_objs + 1] = mist.utils.deepCopy(obj) + end + end + end + return map_objs end mist.flagFunc = {} @@ -2666,37 +2722,37 @@ initial_number ]] -- type_tbl - local type_tbl = { - [{'zones', 'zone'}] = {'table', 'string'}, - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.mapobjs_dead_zones', type_tbl, vars) - assert(err, errmsg) - local zones = vars.zones or vars.zone - local flag = vars.flag - local stopflag = vars.stopflag or -1 - local req_num = vars.req_num or vars.reqnum or 1 - local initial_number = vars.initial_number - - if type(zones) == 'string' then - zones = {zones} - end - - if not initial_number then - initial_number = #mist.getDeadMapObjsInZones(zones) - end - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if (#mist.getDeadMapObjsInZones(zones) - initial_number) >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - return - else - mist.scheduleFunction(mist.flagFunc.mapobjs_dead_zones, {{zones = zones, flag = flag, stopflag = stopflag, req_num = req_num, initial_number = initial_number}}, timer.getTime() + 1) - end - end + local type_tbl = { + [{'zones', 'zone'}] = {'table', 'string'}, + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.mapobjs_dead_zones', type_tbl, vars) + assert(err, errmsg) + local zones = vars.zones or vars.zone + local flag = vars.flag + local stopflag = vars.stopflag or -1 + local req_num = vars.req_num or vars.reqnum or 1 + local initial_number = vars.initial_number + + if type(zones) == 'string' then + zones = {zones} + end + + if not initial_number then + initial_number = #mist.getDeadMapObjsInZones(zones) + end + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if (#mist.getDeadMapObjsInZones(zones) - initial_number) >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + return + else + mist.scheduleFunction(mist.flagFunc.mapobjs_dead_zones, {{zones = zones, flag = flag, stopflag = stopflag, req_num = req_num, initial_number = initial_number}}, timer.getTime() + 1) + end + end end @@ -2713,90 +2769,90 @@ initial_number ]] -- type_tbl - local type_tbl = { - [{'zone', 'polyzone'}] = 'table', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.mapobjs_dead_polygon', type_tbl, vars) - assert(err, errmsg) - local zone = vars.zone or vars.polyzone - local flag = vars.flag - local stopflag = vars.stopflag or -1 - local req_num = vars.req_num or vars.reqnum or 1 - local initial_number = vars.initial_number - - if not initial_number then - initial_number = #mist.getDeadMapObjsInPolygonZone(zone) - end - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if (#mist.getDeadMapObjsInPolygonZone(zone) - initial_number) >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - return - else - mist.scheduleFunction(mist.flagFunc.mapobjs_dead_polygon, {{zone = zone, flag = flag, stopflag = stopflag, req_num = req_num, initial_number = initial_number}}, timer.getTime() + 1) - end - end + local type_tbl = { + [{'zone', 'polyzone'}] = 'table', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.mapobjs_dead_polygon', type_tbl, vars) + assert(err, errmsg) + local zone = vars.zone or vars.polyzone + local flag = vars.flag + local stopflag = vars.stopflag or -1 + local req_num = vars.req_num or vars.reqnum or 1 + local initial_number = vars.initial_number + + if not initial_number then + initial_number = #mist.getDeadMapObjsInPolygonZone(zone) + end + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if (#mist.getDeadMapObjsInPolygonZone(zone) - initial_number) >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + return + else + mist.scheduleFunction(mist.flagFunc.mapobjs_dead_polygon, {{zone = zone, flag = flag, stopflag = stopflag, req_num = req_num, initial_number = initial_number}}, timer.getTime() + 1) + end + end end function mist.pointInPolygon(point, poly, maxalt) --raycasting point in polygon. Code from http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm - --[[local type_tbl = { - point = {'table'}, - poly = {'table'}, - maxalt = {'number', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.pointInPolygon', type_tbl, {point, poly, maxalt}) - assert(err, errmsg) - ]] - point = mist.utils.makeVec3(point) - local px = point.x - local pz = point.z - local cn = 0 - local newpoly = mist.utils.deepCopy(poly) - - if not maxalt or (point.y <= maxalt) then - local polysize = #newpoly - newpoly[#newpoly + 1] = newpoly[1] - - newpoly[1] = mist.utils.makeVec3(newpoly[1]) - - for k = 1, polysize do - newpoly[k+1] = mist.utils.makeVec3(newpoly[k+1]) - if ((newpoly[k].z <= pz) and (newpoly[k+1].z > pz)) or ((newpoly[k].z > pz) and (newpoly[k+1].z <= pz)) then - local vt = (pz - newpoly[k].z) / (newpoly[k+1].z - newpoly[k].z) - if (px < newpoly[k].x + vt*(newpoly[k+1].x - newpoly[k].x)) then - cn = cn + 1 - end - end - end - - return cn%2 == 1 - else - return false - end + --[[local type_tbl = { + point = {'table'}, + poly = {'table'}, + maxalt = {'number', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.pointInPolygon', type_tbl, {point, poly, maxalt}) + assert(err, errmsg) + ]] + point = mist.utils.makeVec3(point) + local px = point.x + local pz = point.z + local cn = 0 + local newpoly = mist.utils.deepCopy(poly) + + if not maxalt or (point.y <= maxalt) then + local polysize = #newpoly + newpoly[#newpoly + 1] = newpoly[1] + + newpoly[1] = mist.utils.makeVec3(newpoly[1]) + + for k = 1, polysize do + newpoly[k+1] = mist.utils.makeVec3(newpoly[k+1]) + if ((newpoly[k].z <= pz) and (newpoly[k+1].z > pz)) or ((newpoly[k].z > pz) and (newpoly[k+1].z <= pz)) then + local vt = (pz - newpoly[k].z) / (newpoly[k+1].z - newpoly[k].z) + if (px < newpoly[k].x + vt*(newpoly[k+1].x - newpoly[k].x)) then + cn = cn + 1 + end + end + end + + return cn%2 == 1 + else + return false + end end mist.getUnitsInPolygon = function (unit_names, polyZone, max_alt) - local units = {} - - for i = 1, #unit_names do - units[#units + 1] = Unit.getByName(unitNames[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] - end - end - - return inZoneUnits + local units = {} + + for i = 1, #unit_names do + units[#units + 1] = Unit.getByName(unitNames[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] + end + end + + return inZoneUnits end function mist.flagFunc.units_in_polygon(vars) @@ -2812,360 +2868,360 @@ toggle = boolean or nil unitTableDef = table or nil ]] -- type_tbl - local type_tbl = { - [{'units', 'unit'}] = 'table', - [{'zone', 'polyzone'}] = 'table', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - [{'maxalt', 'alt'}] = {'number', 'nil'}, - interval = {'number', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - unitTableDef = {'table', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_polygon', type_tbl, vars) - assert(err, errmsg) - local units = vars.units or vars.unit - local zone = vars.zone or vars.polyzone - local flag = vars.flag - local stopflag = vars.stopflag or -1 - local interval = vars.interval or 1 - local maxalt = vars.maxalt or vars.alt - local req_num = vars.req_num or vars.reqnum or 1 - local toggle = vars.toggle or nil - local unitTableDef = vars.unitTableDef - - if not units.processed then - unitTableDef = mist.utils.deepCopy(units) - end - - if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts - units = mist.makeUnitTable(unitTableDef) - end + local type_tbl = { + [{'units', 'unit'}] = 'table', + [{'zone', 'polyzone'}] = 'table', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + [{'maxalt', 'alt'}] = {'number', 'nil'}, + interval = {'number', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + unitTableDef = {'table', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_polygon', type_tbl, vars) + assert(err, errmsg) + local units = vars.units or vars.unit + local zone = vars.zone or vars.polyzone + local flag = vars.flag + local stopflag = vars.stopflag or -1 + local interval = vars.interval or 1 + local maxalt = vars.maxalt or vars.alt + local req_num = vars.req_num or vars.reqnum or 1 + local toggle = vars.toggle or nil + local unitTableDef = vars.unitTableDef + + if not units.processed then + unitTableDef = mist.utils.deepCopy(units) + end + + if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts + units = mist.makeUnitTable(unitTableDef) + end - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then - local num_in_zone = 0 - for i = 1, #units do - local unit = Unit.getByName(units[i]) - if unit then - local pos = unit:getPosition().p - if mist.pointInPolygon(pos, zone, maxalt) then - num_in_zone = num_in_zone + 1 - if num_in_zone >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - break - end - end - end - end - if toggle and (num_in_zone < req_num) and trigger.misc.getUserFlag(flag) > 0 then - trigger.action.setUserFlag(flag, false) - end - -- do another check in case stopflag was set true by this function - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then - mist.scheduleFunction(mist.flagFunc.units_in_polygon, {{units = units, zone = zone, flag = flag, stopflag = stopflag, interval = interval, req_num = req_num, maxalt = maxalt, toggle = toggle, unitTableDef = unitTableDef}}, timer.getTime() + interval) - end - end - + 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 pos = unit:getPosition().p + if mist.pointInPolygon(pos, zone, maxalt) then + num_in_zone = num_in_zone + 1 + if num_in_zone >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + break + end + end + end + end + if toggle and (num_in_zone < req_num) and trigger.misc.getUserFlag(flag) > 0 then + trigger.action.setUserFlag(flag, false) + end + -- do another check in case stopflag was set true by this function + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == 0) then + mist.scheduleFunction(mist.flagFunc.units_in_polygon, {{units = units, zone = zone, flag = flag, stopflag = stopflag, interval = interval, req_num = req_num, maxalt = maxalt, toggle = toggle, unitTableDef = unitTableDef}}, timer.getTime() + interval) + end + end + end function mist.getUnitsInZones(unit_names, zone_names, zone_type) - - zone_type = zone_type or 'cylinder' - if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then - zone_type = 'cylinder' - end - if zone_type == 's' or zone_type == 'spherical' or zone_type == 'S' then - zone_type = 'sphere' - end - - assert(zone_type == 'cylinder' or zone_type == 'sphere', 'invalid zone_type: ' .. tostring(zone_type)) + + zone_type = zone_type or 'cylinder' + if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then + zone_type = 'cylinder' + end + if zone_type == 's' or zone_type == 'spherical' or zone_type == 'S' then + zone_type = 'sphere' + end + + assert(zone_type == 'cylinder' or zone_type == 'sphere', 'invalid zone_type: ' .. tostring(zone_type)) - local units = {} - local zones = {} + local units = {} + local zones = {} - for k = 1, #unit_names do - local unit = Unit.getByName(unit_names[k]) - if unit then - units[#units + 1] = unit - end - end - - - for k = 1, #zone_names do - local zone = trigger.misc.getZone(zone_names[k]) - if zone then - zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z} - end - end - - local in_zone_units = {} - - for units_ind = 1, #units do - 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 - end - end - end - return in_zone_units + for k = 1, #unit_names do + local unit = Unit.getByName(unit_names[k]) + if unit then + units[#units + 1] = unit + end + end + + + for k = 1, #zone_names do + local zone = trigger.misc.getZone(zone_names[k]) + if zone then + zones[#zones + 1] = {radius = zone.radius, x = zone.point.x, y = zone.point.y, z = zone.point.z} + end + end + + local in_zone_units = {} + + for units_ind = 1, #units do + 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 + end + end + end + return in_zone_units end function mist.flagFunc.units_in_zones(vars) - --[[vars needs to be: - units = table, - zones = table, - flag = number, - stopflag = number or nil, - zone_type = string or nil, - req_num = number or nil, - interval = number or nil - toggle = boolean or nil - ]] - -- type_tbl - local type_tbl = { - units = 'table', - zones = 'table', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - [{'zone_type', 'zonetype'}] = {'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - unitTableDef = {'table', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_zones', type_tbl, vars) - assert(err, errmsg) - local units = vars.units - local zones = vars.zones - local flag = vars.flag - local stopflag = vars.stopflag or -1 - local zone_type = vars.zone_type or vars.zonetype or 'cylinder' - local req_num = vars.req_num or vars.reqnum or 1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - local unitTableDef = vars.unitTableDef - - if not units.processed then - unitTableDef = mist.utils.deepCopy(units) - end - - if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts - units = mist.makeUnitTable(unitTableDef) - end - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - - local in_zone_units = mist.getUnitsInZones(units, zones, zone_type) - - if #in_zone_units >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - elseif #in_zone_units < req_num and toggle then - trigger.action.setUserFlag(flag, false) - end - -- do another check in case stopflag was set true by this function - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.units_in_zones, {{units = units, zones = zones, flag = flag, stopflag = stopflag, zone_type = zone_type, req_num = req_num, interval = interval, toggle = toggle, unitTableDef = unitTableDef}}, timer.getTime() + interval) - end - end - + --[[vars needs to be: + units = table, + zones = table, + flag = number, + stopflag = number or nil, + zone_type = string or nil, + req_num = number or nil, + interval = number or nil + toggle = boolean or nil + ]] + -- type_tbl + local type_tbl = { + units = 'table', + zones = 'table', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + [{'zone_type', 'zonetype'}] = {'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + unitTableDef = {'table', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_zones', type_tbl, vars) + assert(err, errmsg) + local units = vars.units + local zones = vars.zones + local flag = vars.flag + local stopflag = vars.stopflag or -1 + local zone_type = vars.zone_type or vars.zonetype or 'cylinder' + local req_num = vars.req_num or vars.reqnum or 1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + local unitTableDef = vars.unitTableDef + + if not units.processed then + unitTableDef = mist.utils.deepCopy(units) + end + + if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts + units = mist.makeUnitTable(unitTableDef) + end + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + + local in_zone_units = mist.getUnitsInZones(units, zones, zone_type) + + if #in_zone_units >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + elseif #in_zone_units < req_num and toggle then + trigger.action.setUserFlag(flag, false) + end + -- do another check in case stopflag was set true by this function + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.units_in_zones, {{units = units, zones = zones, flag = flag, stopflag = stopflag, zone_type = zone_type, req_num = req_num, interval = interval, toggle = toggle, unitTableDef = unitTableDef}}, timer.getTime() + interval) + end + end + end function mist.getUnitsInMovingZones(unit_names, zone_unit_names, radius, zone_type) - - zone_type = zone_type or 'cylinder' - if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then - zone_type = 'cylinder' - end - if zone_type == 's' or zone_type == 'spherical' or zone_type == 'S' then - zone_type = 'sphere' - end - - assert(zone_type == 'cylinder' or zone_type == 'sphere', 'invalid zone_type: ' .. tostring(zone_type)) + + zone_type = zone_type or 'cylinder' + if zone_type == 'c' or zone_type == 'cylindrical' or zone_type == 'C' then + zone_type = 'cylinder' + end + if zone_type == 's' or zone_type == 'spherical' or zone_type == 'S' then + zone_type = 'sphere' + end + + assert(zone_type == 'cylinder' or zone_type == 'sphere', 'invalid zone_type: ' .. tostring(zone_type)) - local units = {} - local zone_units = {} + local units = {} + local zone_units = {} - for k = 1, #unit_names do - local unit = Unit.getByName(unit_names[k]) - if unit then - units[#units + 1] = unit - end - end - - for k = 1, #zone_unit_names do - local unit = Unit.getByName(zone_unit_names[k]) - if unit then - zone_units[#zone_units + 1] = unit - end - end + for k = 1, #unit_names do + local unit = Unit.getByName(unit_names[k]) + if unit then + units[#units + 1] = unit + end + end + + for k = 1, #zone_unit_names do + local unit = Unit.getByName(zone_unit_names[k]) + if unit then + zone_units[#zone_units + 1] = unit + end + end - local in_zone_units = {} - - for units_ind = 1, #units do - 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 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] - 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] - break - end - end - end - end - return in_zone_units + local in_zone_units = {} + + for units_ind = 1, #units do + 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 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] + 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] + break + end + end + end + end + return in_zone_units end function mist.flagFunc.units_in_moving_zones(vars) - --[[vars needs to be: - units = table, - zone_units = table, - radius = number, - flag = number, - stopflag = number or nil, - zone_type = string or nil, - req_num = number or nil, - interval = number or nil - toggle = boolean or nil - ]] - -- type_tbl - local type_tbl = { - units = 'table', - [{'zone_units', 'zoneunits'}] = 'table', - radius = 'number', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - [{'zone_type', 'zonetype'}] = {'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - unitTableDef = {'table', 'nil'}, - zUnitTableDef = {'table', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_moving_zones', type_tbl, vars) - assert(err, errmsg) - local units = vars.units - local zone_units = vars.zone_units or vars.zoneunits - local radius = vars.radius - local flag = vars.flag - local stopflag = vars.stopflag or -1 - local zone_type = vars.zone_type or vars.zonetype or 'cylinder' - local req_num = vars.req_num or vars.reqnum or 1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - local unitTableDef = vars.unitTableDef - local zUnitTableDef = vars.zUnitTableDef - - if not units.processed then - unitTableDef = mist.utils.deepCopy(units) - end - - if not zone_units.processed then - zUnitTableDef = mist.utils.deepCopy(zone_units) - end - - if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts - units = mist.makeUnitTable(unitTableDef) - end - - if (zone_units.processed and zone_units.processed < mist.getLastDBUpdateTime()) or not zone_units.processed then -- run unit table short cuts - zone_units = mist.makeUnitTable(zUnitTableDef) - end + --[[vars needs to be: + units = table, + zone_units = table, + radius = number, + flag = number, + stopflag = number or nil, + zone_type = string or nil, + req_num = number or nil, + interval = number or nil + toggle = boolean or nil + ]] + -- type_tbl + local type_tbl = { + units = 'table', + [{'zone_units', 'zoneunits'}] = 'table', + radius = 'number', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + [{'zone_type', 'zonetype'}] = {'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + unitTableDef = {'table', 'nil'}, + zUnitTableDef = {'table', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_moving_zones', type_tbl, vars) + assert(err, errmsg) + local units = vars.units + local zone_units = vars.zone_units or vars.zoneunits + local radius = vars.radius + local flag = vars.flag + local stopflag = vars.stopflag or -1 + local zone_type = vars.zone_type or vars.zonetype or 'cylinder' + local req_num = vars.req_num or vars.reqnum or 1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + local unitTableDef = vars.unitTableDef + local zUnitTableDef = vars.zUnitTableDef + + if not units.processed then + unitTableDef = mist.utils.deepCopy(units) + end + + if not zone_units.processed then + zUnitTableDef = mist.utils.deepCopy(zone_units) + end + + if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts + units = mist.makeUnitTable(unitTableDef) + end + + if (zone_units.processed and zone_units.processed < mist.getLastDBUpdateTime()) or not zone_units.processed then -- run unit table short cuts + zone_units = mist.makeUnitTable(zUnitTableDef) + end - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - - local in_zone_units = mist.getUnitsInMovingZones(units, zone_units, radius, zone_type) - - if #in_zone_units >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - elseif #in_zone_units < req_num and toggle then - trigger.action.setUserFlag(flag, false) - end - -- do another check in case stopflag was set true by this function - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.units_in_moving_zones, {{units = units, zone_units = zone_units, radius = radius, flag = flag, stopflag = stopflag, zone_type = zone_type, req_num = req_num, interval = interval, toggle = toggle, unitTableDef = unitTableDef, zUnitTableDef = zUnitTableDef}}, timer.getTime() + interval) - end - end - + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + + local in_zone_units = mist.getUnitsInMovingZones(units, zone_units, radius, zone_type) + + if #in_zone_units >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + elseif #in_zone_units < req_num and toggle then + trigger.action.setUserFlag(flag, false) + end + -- do another check in case stopflag was set true by this function + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.units_in_moving_zones, {{units = units, zone_units = zone_units, radius = radius, flag = flag, stopflag = stopflag, zone_type = zone_type, req_num = req_num, interval = interval, toggle = toggle, unitTableDef = unitTableDef, zUnitTableDef = zUnitTableDef}}, timer.getTime() + interval) + end + end + end mist.getUnitsLOS = function(unitset1, altoffset1, unitset2, altoffset2, radius) - radius = radius or math.huge - - local unit_info1 = {} - local unit_info2 = {} - - -- get the positions all in one step, saves execution time. - for unitset1_ind = 1, #unitset1 do - local unit1 = Unit.getByName(unitset1[unitset1_ind]) - 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 - 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 - end - end + radius = radius or math.huge + + local unit_info1 = {} + local unit_info2 = {} + + -- get the positions all in one step, saves execution time. + for unitset1_ind = 1, #unitset1 do + local unit1 = Unit.getByName(unitset1[unitset1_ind]) + 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 + 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 + end + end - local LOS_data = {} - -- now compute los - for unit1_ind = 1, #unit_info1 do - local unit_added = false - for unit2_ind = 1, #unit_info2 do - if radius == math.huge or (mist.vec.mag(mist.vec.sub(unit_info1[unit1_ind].pos, unit_info2[unit2_ind].pos)) < radius) then -- inside radius - local point1 = { x = unit_info1[unit1_ind].pos.x, y = unit_info1[unit1_ind].pos.y + altoffset1, z = unit_info1[unit1_ind].pos.z} - local point2 = { x = unit_info2[unit2_ind].pos.x, y = unit_info2[unit2_ind].pos.y + altoffset2, z = unit_info2[unit2_ind].pos.z} - if land.isVisible(point1, point2) then - if unit_added == false then - unit_added = true - LOS_data[#LOS_data + 1] = {} - LOS_data[#LOS_data]['unit'] = unit_info1[unit1_ind].unit - LOS_data[#LOS_data]['vis'] = {} - LOS_data[#LOS_data]['vis'][#LOS_data[#LOS_data]['vis'] + 1] = unit_info2[unit2_ind].unit - else - LOS_data[#LOS_data]['vis'][#LOS_data[#LOS_data]['vis'] + 1] = unit_info2[unit2_ind].unit - end - end - end - end - end - - return LOS_data + local LOS_data = {} + -- now compute los + for unit1_ind = 1, #unit_info1 do + local unit_added = false + for unit2_ind = 1, #unit_info2 do + if radius == math.huge or (mist.vec.mag(mist.vec.sub(unit_info1[unit1_ind].pos, unit_info2[unit2_ind].pos)) < radius) then -- inside radius + local point1 = { x = unit_info1[unit1_ind].pos.x, y = unit_info1[unit1_ind].pos.y + altoffset1, z = unit_info1[unit1_ind].pos.z} + local point2 = { x = unit_info2[unit2_ind].pos.x, y = unit_info2[unit2_ind].pos.y + altoffset2, z = unit_info2[unit2_ind].pos.z} + if land.isVisible(point1, point2) then + if unit_added == false then + unit_added = true + LOS_data[#LOS_data + 1] = {} + LOS_data[#LOS_data]['unit'] = unit_info1[unit1_ind].unit + LOS_data[#LOS_data]['vis'] = {} + LOS_data[#LOS_data]['vis'][#LOS_data[#LOS_data]['vis'] + 1] = unit_info2[unit2_ind].unit + else + LOS_data[#LOS_data]['vis'][#LOS_data[#LOS_data]['vis'] + 1] = unit_info2[unit2_ind].unit + end + end + end + end + end + + return LOS_data end mist.flagFunc.units_LOS = function(vars) @@ -3182,67 +3238,67 @@ req_num = number or nil toggle = boolean or nil ]] -- type_tbl - local type_tbl = { - [{'unitset1', 'units1'}] = 'table', - [{'altoffset1', 'alt1'}] = 'number', - [{'unitset2', 'units2'}] = 'table', - [{'altoffset2', 'alt2'}] = 'number', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - [{'req_num', 'reqnum'}] = {'number', 'nil'}, - interval = {'number', 'nil'}, - radius = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - unitTableDef1 = {'table', 'nil'}, - unitTableDef2 = {'table', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_LOS', type_tbl, vars) - assert(err, errmsg) - local unitset1 = vars.unitset1 or vars.units1 - local altoffset1 = vars.altoffset1 or vars.alt1 - local unitset2 = vars.unitset2 or vars.units2 - local altoffset2 = vars.altoffset2 or vars.alt2 - local flag = vars.flag - local stopflag = vars.stopflag or -1 - local interval = vars.interval or 1 - local radius = vars.radius or math.huge - local req_num = vars.req_num or vars.reqnum or 1 - local toggle = vars.toggle or nil - local unitTableDef1 = vars.unitTableDef1 - local unitTableDef2 = vars.unitTableDef2 - - if not unitset1.processed then - unitTableDef1 = mist.utils.deepCopy(unitset1) - end - - if not unitset2.processed then - unitTableDef2 = mist.utils.deepCopy(unitset2) - end - - if (unitset1.processed and unitset1.processed < mist.getLastDBUpdateTime()) or not unitset1.processed then -- run unit table short cuts - unitset1 = mist.makeUnitTable(unitTableDef1) - end - - if (unitset2.processed and unitset2.processed < mist.getLastDBUpdateTime()) or not unitset2.processed then -- run unit table short cuts - unitset2 = mist.makeUnitTable(unitTableDef2) - end - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - - local unitLOSdata = mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) - - if #unitLOSdata >= req_num and trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - elseif #unitLOSdata < req_num and toggle then - trigger.action.setUserFlag(flag, false) - end - -- do another check in case stopflag was set true by this function - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.units_LOS, {{unitset1 = unitset1, altoffset1 = altoffset1, unitset2 = unitset2, altoffset2 = altoffset2, flag = flag, stopflag = stopflag, radius = radius, req_num = req_num, interval = interval, toggle = toggle, unitTableDef1 = unitTableDef1, unitTableDef2 = unitTableDef2}}, timer.getTime() + interval) - end - end + local type_tbl = { + [{'unitset1', 'units1'}] = 'table', + [{'altoffset1', 'alt1'}] = 'number', + [{'unitset2', 'units2'}] = 'table', + [{'altoffset2', 'alt2'}] = 'number', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + [{'req_num', 'reqnum'}] = {'number', 'nil'}, + interval = {'number', 'nil'}, + radius = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + unitTableDef1 = {'table', 'nil'}, + unitTableDef2 = {'table', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_LOS', type_tbl, vars) + assert(err, errmsg) + local unitset1 = vars.unitset1 or vars.units1 + local altoffset1 = vars.altoffset1 or vars.alt1 + local unitset2 = vars.unitset2 or vars.units2 + local altoffset2 = vars.altoffset2 or vars.alt2 + local flag = vars.flag + local stopflag = vars.stopflag or -1 + local interval = vars.interval or 1 + local radius = vars.radius or math.huge + local req_num = vars.req_num or vars.reqnum or 1 + local toggle = vars.toggle or nil + local unitTableDef1 = vars.unitTableDef1 + local unitTableDef2 = vars.unitTableDef2 + + if not unitset1.processed then + unitTableDef1 = mist.utils.deepCopy(unitset1) + end + + if not unitset2.processed then + unitTableDef2 = mist.utils.deepCopy(unitset2) + end + + if (unitset1.processed and unitset1.processed < mist.getLastDBUpdateTime()) or not unitset1.processed then -- run unit table short cuts + unitset1 = mist.makeUnitTable(unitTableDef1) + end + + if (unitset2.processed and unitset2.processed < mist.getLastDBUpdateTime()) or not unitset2.processed then -- run unit table short cuts + unitset2 = mist.makeUnitTable(unitTableDef2) + end + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + + local unitLOSdata = mist.getUnitsLOS(unitset1, altoffset1, unitset2, altoffset2, radius) + + if #unitLOSdata >= req_num and trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + elseif #unitLOSdata < req_num and toggle then + trigger.action.setUserFlag(flag, false) + end + -- do another check in case stopflag was set true by this function + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.units_LOS, {{unitset1 = unitset1, altoffset1 = altoffset1, unitset2 = unitset2, altoffset2 = altoffset2, flag = flag, stopflag = stopflag, radius = radius, req_num = req_num, interval = interval, toggle = toggle, unitTableDef1 = unitTableDef1, unitTableDef2 = unitTableDef2}}, timer.getTime() + interval) + end + end end mist.flagFunc.group_alive = function(vars) @@ -3254,203 +3310,218 @@ interval stopFlag ]] - local type_tbl = { - [{'group', 'groupname', 'gp', 'groupName'}] = 'string', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive', type_tbl, vars) - assert(err, errmsg) - - local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname - local flag = vars.flag - local stopflag = vars.stopflag or -1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true and #Group.getByName(groupName):getUnits() > 0 then - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - else - if toggle then - trigger.action.setUserFlag(flag, false) - end - end - end - - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.group_alive, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle}}, timer.getTime() + interval) - end + local type_tbl = { + [{'group', 'groupname', 'gp', 'groupName'}] = 'string', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive', type_tbl, vars) + assert(err, errmsg) + + local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname + local flag = vars.flag + local stopflag = vars.stopflag or -1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true and #Group.getByName(groupName):getUnits() > 0 then + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + else + if toggle then + trigger.action.setUserFlag(flag, false) + end + end + end + + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.group_alive, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle}}, timer.getTime() + interval) + end end mist.flagFunc.group_dead = function(vars) - local type_tbl = { - [{'group', 'groupname', 'gp', 'groupName'}] = 'string', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_dead', type_tbl, vars) - assert(err, errmsg) - - local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname - local flag = vars.flag - local stopflag = vars.stopflag or -1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if (Group.getByName(groupName) and Group.getByName(groupName):isExist() == false) or (Group.getByName(groupName) and #Group.getByName(groupName):getUnits() < 1) or not Group.getByName(groupName) then - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - else - if toggle then - trigger.action.setUserFlag(flag, false) - end - end - end - - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.group_dead, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle}}, timer.getTime() + interval) - end + local type_tbl = { + [{'group', 'groupname', 'gp', 'groupName'}] = 'string', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_dead', type_tbl, vars) + assert(err, errmsg) + + local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname + local flag = vars.flag + local stopflag = vars.stopflag or -1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if (Group.getByName(groupName) and Group.getByName(groupName):isExist() == false) or (Group.getByName(groupName) and #Group.getByName(groupName):getUnits() < 1) or not Group.getByName(groupName) then + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + else + if toggle then + trigger.action.setUserFlag(flag, false) + end + end + end + + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.group_dead, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle}}, timer.getTime() + interval) + end end mist.flagFunc.group_alive_less_than = function(vars) - local type_tbl = { - [{'group', 'groupname', 'gp', 'groupName'}] = 'string', - percent = 'number', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive_less_than', type_tbl, vars) - assert(err, errmsg) - - local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname - local flag = vars.flag - local percent = vars.percent - local stopflag = vars.stopflag or -1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then - if Group.getByName(groupName):getSize()/Group.getByName(groupName):getInitialSize() < percent/100 then - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - else - if toggle then - trigger.action.setUserFlag(flag, false) - end - end - else - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - end - end - - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.group_alive_less_than, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle, percent = percent}}, timer.getTime() + interval) - end + local type_tbl = { + [{'group', 'groupname', 'gp', 'groupName'}] = 'string', + percent = 'number', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive_less_than', type_tbl, vars) + assert(err, errmsg) + + local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname + local flag = vars.flag + local percent = vars.percent + local stopflag = vars.stopflag or -1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then + if Group.getByName(groupName):getSize()/Group.getByName(groupName):getInitialSize() < percent/100 then + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + else + if toggle then + trigger.action.setUserFlag(flag, false) + end + end + else + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + end + end + + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.group_alive_less_than, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle, percent = percent}}, timer.getTime() + interval) + end end mist.flagFunc.group_alive_more_than = function(vars) - local type_tbl = { - [{'group', 'groupname', 'gp', 'groupName'}] = 'string', - percent = 'number', - flag = {'number', 'string'}, - stopflag = {'number', 'string', 'nil'}, - interval = {'number', 'nil'}, - toggle = {'boolean', 'nil'}, - } - - local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive_more_than', type_tbl, vars) - assert(err, errmsg) - - local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname - local flag = vars.flag - local percent = vars.percent - local stopflag = vars.stopflag or -1 - local interval = vars.interval or 1 - local toggle = vars.toggle or nil - - - if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then - if Group.getByName(groupName):getSize()/Group.getByName(groupName):getInitialSize() > percent/100 then - if trigger.misc.getUserFlag(flag) == 0 then - trigger.action.setUserFlag(flag, true) - end - else - if toggle and trigger.misc.getUserFlag(flag) == 1 then - trigger.action.setUserFlag(flag, false) - end - end - else --- just in case - if toggle and trigger.misc.getUserFlag(flag) == 1 then - trigger.action.setUserFlag(flag, false) - end - end - end - - if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then - mist.scheduleFunction(mist.flagFunc.group_alive_more_than, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle, percent = percent}}, timer.getTime() + interval) - end + local type_tbl = { + [{'group', 'groupname', 'gp', 'groupName'}] = 'string', + percent = 'number', + flag = {'number', 'string'}, + stopflag = {'number', 'string', 'nil'}, + interval = {'number', 'nil'}, + toggle = {'boolean', 'nil'}, + } + + local err, errmsg = mist.utils.typeCheck('mist.flagFunc.group_alive_more_than', type_tbl, vars) + assert(err, errmsg) + + local groupName = vars.groupName or vars.group or vars.gp or vars.Groupname + local flag = vars.flag + local percent = vars.percent + local stopflag = vars.stopflag or -1 + local interval = vars.interval or 1 + local toggle = vars.toggle or nil + + + if stopflag == -1 or (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then + if Group.getByName(groupName):getSize()/Group.getByName(groupName):getInitialSize() > percent/100 then + if trigger.misc.getUserFlag(flag) == 0 then + trigger.action.setUserFlag(flag, true) + end + else + if toggle and trigger.misc.getUserFlag(flag) == 1 then + trigger.action.setUserFlag(flag, false) + end + end + else --- just in case + if toggle and trigger.misc.getUserFlag(flag) == 1 then + trigger.action.setUserFlag(flag, false) + end + end + end + + if (type(trigger.misc.getUserFlag(stopflag)) == 'number' and trigger.misc.getUserFlag(stopflag) == 0) or (type(trigger.misc.getUserFlag(stopflag)) == 'boolean' and trigger.misc.getUserFlag(stopflag) == false) then + mist.scheduleFunction(mist.flagFunc.group_alive_more_than, {{groupName = groupName, flag = flag, stopflag = stopflag, interval = interval, toggle = toggle, percent = percent}}, timer.getTime() + interval) + end end +mist.getAvgPoint = function(points) + local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 + for i = 1, #points do + local nPoint = mist.utils.makeVec3(points[i]) + if nPoint.z then + avgX = avgX + nPoint.x + avgY = avgY + nPoint.y + avgZ = avgZ + nPoint.z + totNum = totNum + 1 + end + end + if totNum ~= 0 then + return {x = avgX/totNum, y = avgY/totNum, z = avgZ/totNum} + end +end --Gets the average position of a group of units (by name) mist.getAvgPos = function(unitNames) - local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 - for i = 1, #unitNames do - local unit - if Unit.getByName(unitNames[i]) then - unit = Unit.getByName(unitNames[i]) - elseif StaticObject.getByName(unitNames[i]) then - unit = StaticObject.getByName(unitNames[i]) - end - if unit then - local pos = unit:getPosition().p - if pos then -- you never know O.o - avgX = avgX + pos.x - avgY = avgY + pos.y - avgZ = avgZ + pos.z - totNum = totNum + 1 - end - end - end - if totNum ~= 0 then - return {x = avgX/totNum, y = avgY/totNum, z = avgZ/totNum} - end + local avgX, avgY, avgZ, totNum = 0, 0, 0, 0 + for i = 1, #unitNames do + local unit + if Unit.getByName(unitNames[i]) then + unit = Unit.getByName(unitNames[i]) + elseif StaticObject.getByName(unitNames[i]) then + unit = StaticObject.getByName(unitNames[i]) + end + if unit then + local pos = unit:getPosition().p + if pos then -- you never know O.o + avgX = avgX + pos.x + avgY = avgY + pos.y + avgZ = avgZ + pos.z + totNum = totNum + 1 + end + end + end + if totNum ~= 0 then + return {x = avgX/totNum, y = avgY/totNum, z = avgZ/totNum} + end end mist.getAvgGroupPos = function(groupName) - if type(groupName) == 'string' and Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then - groupName = Group.getByName(groupName) - end - local units = {} - for i = 1, #groupName:getSize() do - table.insert(units, groupName.getUnit(i):getName()) - end - - return mist.getAvgPos(units) + if type(groupName) == 'string' and Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then + groupName = Group.getByName(groupName) + end + local units = {} + for i = 1, #groupName:getSize() do + table.insert(units, groupName.getUnit(i):getName()) + end + + return mist.getAvgPos(units) end @@ -3459,115 +3530,115 @@ end mist.demos = {} mist.demos.printFlightData = function(unit) - if unit:isExist() then - local function printData(unit, prevVel, prevE, prevTime) - local angles = mist.getAttitude(unit) - if angles then - local Heading = angles.Heading - local Pitch = angles.Pitch - local Roll = angles.Roll - local Yaw = angles.Yaw - local AoA = angles.AoA - local ClimbAngle = angles.ClimbAngle - - if not Heading then - Heading = 'NA' - else - Heading = string.format('%12.2f', mist.utils.toDegree(Heading)) - end - - if not Pitch then - Pitch = 'NA' - else - Pitch = string.format('%12.2f', mist.utils.toDegree(Pitch)) - end - - if not Roll then - Roll = 'NA' - else - Roll = string.format('%12.2f', mist.utils.toDegree(Roll)) - end - - local AoAplusYaw = 'NA' - if AoA and Yaw then - AoAplusYaw = string.format('%12.2f', mist.utils.toDegree((AoA^2 + Yaw^2)^0.5)) - end - - if not Yaw then - Yaw = 'NA' - else - Yaw = string.format('%12.2f', mist.utils.toDegree(Yaw)) - end - - if not AoA then - AoA = 'NA' - else - AoA = string.format('%12.2f', mist.utils.toDegree(AoA)) - end - - if not ClimbAngle then - ClimbAngle = 'NA' - else - ClimbAngle = string.format('%12.2f', mist.utils.toDegree(ClimbAngle)) - end - local unitPos = unit:getPosition() - local unitVel = unit:getVelocity() - local curTime = timer.getTime() - local absVel = string.format('%12.2f', mist.vec.mag(unitVel)) - - - local unitAcc = 'NA' - local Gs = 'NA' - local axialGs = 'NA' - local transGs = 'NA' - if prevVel and prevTime then - local xAcc = (unitVel.x - prevVel.x)/(curTime - prevTime) - local yAcc = (unitVel.y - prevVel.y)/(curTime - prevTime) - local zAcc = (unitVel.z - prevVel.z)/(curTime - prevTime) - - unitAcc = string.format('%12.2f', mist.vec.mag({x = xAcc, y = yAcc, z = zAcc})) - Gs = string.format('%12.2f', mist.vec.mag({x = xAcc, y = yAcc + 9.81, z = zAcc})/9.81) - axialGs = string.format('%12.2f', mist.vec.dp({x = xAcc, y = yAcc + 9.81, z = zAcc}, unitPos.x)/9.81) - transGs = string.format('%12.2f', mist.vec.mag(mist.vec.cp({x = xAcc, y = yAcc + 9.81, z = zAcc}, unitPos.x))/9.81) - end - - local E = 0.5*mist.vec.mag(unitVel)^2 + 9.81*unitPos.p.y - - local energy = string.format('%12.2e', E) - - local dEdt = 'NA' - if prevE and prevTime then - dEdt = string.format('%12.2e', (E - prevE)/(curTime - prevTime)) - end - - trigger.action.outText(string.format('%-25s', 'Heading: ') .. Heading .. ' degrees\n' .. string.format('%-25s', 'Roll: ') .. Roll .. ' degrees\n' .. string.format('%-25s', 'Pitch: ') .. Pitch - .. ' degrees\n' .. string.format('%-25s', 'Yaw: ') .. Yaw .. ' degrees\n' .. string.format('%-25s', 'AoA: ') .. AoA .. ' degrees\n' .. string.format('%-25s', 'AoA plus Yaw: ') .. AoAplusYaw .. ' degrees\n' .. string.format('%-25s', 'Climb Angle: ') .. - ClimbAngle .. ' degrees\n' .. string.format('%-25s', 'Absolute Velocity: ') .. absVel .. ' m/s\n' .. string.format('%-25s', 'Absolute Acceleration: ') .. unitAcc ..' m/s^2\n' - .. string.format('%-25s', 'Axial G loading: ') .. axialGs .. ' g\n' .. string.format('%-25s', 'Transverse G loading: ') .. transGs .. ' g\n' .. string.format('%-25s', 'Absolute G loading: ') .. Gs .. ' g\n' .. string.format('%-25s', 'Energy: ') .. energy .. ' J/kg\n' .. string.format('%-25s', 'dE/dt: ') .. dEdt .. - ' J/(kg*s)', 1) + if unit:isExist() then + local function printData(unit, prevVel, prevE, prevTime) + local angles = mist.getAttitude(unit) + if angles then + local Heading = angles.Heading + local Pitch = angles.Pitch + local Roll = angles.Roll + local Yaw = angles.Yaw + local AoA = angles.AoA + local ClimbAngle = angles.ClimbAngle + + if not Heading then + Heading = 'NA' + else + Heading = string.format('%12.2f', mist.utils.toDegree(Heading)) + end + + if not Pitch then + Pitch = 'NA' + else + Pitch = string.format('%12.2f', mist.utils.toDegree(Pitch)) + end + + if not Roll then + Roll = 'NA' + else + Roll = string.format('%12.2f', mist.utils.toDegree(Roll)) + end + + local AoAplusYaw = 'NA' + if AoA and Yaw then + AoAplusYaw = string.format('%12.2f', mist.utils.toDegree((AoA^2 + Yaw^2)^0.5)) + end + + if not Yaw then + Yaw = 'NA' + else + Yaw = string.format('%12.2f', mist.utils.toDegree(Yaw)) + end + + if not AoA then + AoA = 'NA' + else + AoA = string.format('%12.2f', mist.utils.toDegree(AoA)) + end + + if not ClimbAngle then + ClimbAngle = 'NA' + else + ClimbAngle = string.format('%12.2f', mist.utils.toDegree(ClimbAngle)) + end + local unitPos = unit:getPosition() + local unitVel = unit:getVelocity() + local curTime = timer.getTime() + local absVel = string.format('%12.2f', mist.vec.mag(unitVel)) + + + local unitAcc = 'NA' + local Gs = 'NA' + local axialGs = 'NA' + local transGs = 'NA' + if prevVel and prevTime then + local xAcc = (unitVel.x - prevVel.x)/(curTime - prevTime) + local yAcc = (unitVel.y - prevVel.y)/(curTime - prevTime) + local zAcc = (unitVel.z - prevVel.z)/(curTime - prevTime) + + unitAcc = string.format('%12.2f', mist.vec.mag({x = xAcc, y = yAcc, z = zAcc})) + Gs = string.format('%12.2f', mist.vec.mag({x = xAcc, y = yAcc + 9.81, z = zAcc})/9.81) + axialGs = string.format('%12.2f', mist.vec.dp({x = xAcc, y = yAcc + 9.81, z = zAcc}, unitPos.x)/9.81) + transGs = string.format('%12.2f', mist.vec.mag(mist.vec.cp({x = xAcc, y = yAcc + 9.81, z = zAcc}, unitPos.x))/9.81) + end + + local E = 0.5*mist.vec.mag(unitVel)^2 + 9.81*unitPos.p.y + + local energy = string.format('%12.2e', E) + + local dEdt = 'NA' + if prevE and prevTime then + dEdt = string.format('%12.2e', (E - prevE)/(curTime - prevTime)) + end + + trigger.action.outText(string.format('%-25s', 'Heading: ') .. Heading .. ' degrees\n' .. string.format('%-25s', 'Roll: ') .. Roll .. ' degrees\n' .. string.format('%-25s', 'Pitch: ') .. Pitch + .. ' degrees\n' .. string.format('%-25s', 'Yaw: ') .. Yaw .. ' degrees\n' .. string.format('%-25s', 'AoA: ') .. AoA .. ' degrees\n' .. string.format('%-25s', 'AoA plus Yaw: ') .. AoAplusYaw .. ' degrees\n' .. string.format('%-25s', 'Climb Angle: ') .. + ClimbAngle .. ' degrees\n' .. string.format('%-25s', 'Absolute Velocity: ') .. absVel .. ' m/s\n' .. string.format('%-25s', 'Absolute Acceleration: ') .. unitAcc ..' m/s^2\n' + .. string.format('%-25s', 'Axial G loading: ') .. axialGs .. ' g\n' .. string.format('%-25s', 'Transverse G loading: ') .. transGs .. ' g\n' .. string.format('%-25s', 'Absolute G loading: ') .. Gs .. ' g\n' .. string.format('%-25s', 'Energy: ') .. energy .. ' J/kg\n' .. string.format('%-25s', 'dE/dt: ') .. dEdt .. + ' J/(kg*s)', 1) - return unitVel, E, curTime - end - end - - local function frameFinder(unit, prevVel, prevE, prevTime) - if unit:isExist() then - local currVel = unit:getVelocity() - if prevVel and (prevVel.x ~= currVel.x or prevVel.y ~= currVel.y or prevVel.z ~= currVel.z) or (prevTime and (timer.getTime() - prevTime) > 0.25) then - prevVel, prevE, prevTime = printData(unit, prevVel, prevE, prevTime) - end - mist.scheduleFunction(frameFinder, {unit, prevVel, prevE, prevTime}, timer.getTime() + 0.005) -- it can't go this fast, limited to the 100 times a sec check right now. - end - end - - - local curVel = unit:getVelocity() - local curTime = timer.getTime() - local curE = 0.5*mist.vec.mag(curVel)^2 + 9.81*unit:getPosition().p.y - frameFinder(unit, curVel, curE, curTime) - - end - + return unitVel, E, curTime + end + end + + local function frameFinder(unit, prevVel, prevE, prevTime) + if unit:isExist() then + local currVel = unit:getVelocity() + if prevVel and (prevVel.x ~= currVel.x or prevVel.y ~= currVel.y or prevVel.z ~= currVel.z) or (prevTime and (timer.getTime() - prevTime) > 0.25) then + prevVel, prevE, prevTime = printData(unit, prevVel, prevE, prevTime) + end + mist.scheduleFunction(frameFinder, {unit, prevVel, prevE, prevTime}, timer.getTime() + 0.005) -- it can't go this fast, limited to the 100 times a sec check right now. + end + end + + + local curVel = unit:getVelocity() + local curTime = timer.getTime() + local curE = 0.5*mist.vec.mag(curVel)^2 + 9.81*unit:getPosition().p.y + frameFinder(unit, curVel, curE, curTime) + + end + end -------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------- @@ -3582,82 +3653,82 @@ mist.air.fixedWing = {} mist.air.heli = {} mist.goRoute = function(group, path) - local misTask = { - id = 'Mission', - params = { - route = { - points = mist.utils.deepCopy(path), - }, - }, - } - if type(group) == 'string' then - group = Group.getByName(group) - end - local groupCon = nil - if group then - groupCon = group:getController() - if groupCon then - groupCon:setTask(misTask) - return true - end - end - --Controller.setTask(groupCon, misTask) - return false + local misTask = { + id = 'Mission', + params = { + route = { + points = mist.utils.deepCopy(path), + }, + }, + } + if type(group) == 'string' then + group = Group.getByName(group) + end + local groupCon = nil + if group then + groupCon = group:getController() + if groupCon then + groupCon:setTask(misTask) + return true + end + end + --Controller.setTask(groupCon, misTask) + return false end function mist.getGroupRoute(groupIdent, task) -- same as getGroupPoints but returns speed and formation type along with vec2 of point} - -- refactor to search by groupId and allow groupId and groupName as inputs - local gpId = groupIdent - if type(groupIdent) == 'string' and not tonumber(groupIdent) then - gpId = mist.DBs.MEgroupsByName[groupIdent].groupId - end - - for coa_name, coa_data in pairs(env.mission.coalition) do - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - for obj_type_name, obj_type_data in pairs(cntry_data) do - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - for group_num, group_data in pairs(obj_type_data.group) do - if group_data and group_data.groupId == gpId then -- this is the group we are looking for - if group_data.route and group_data.route.points and #group_data.route.points > 0 then - local points = {} - - for point_num, point in pairs(group_data.route.points) do - local routeData = {} - if not point.point then - routeData.x = point.x - routeData.y = point.y - else - routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation. - end - routeData.form = point.action - routeData.speed = point.speed - routeData.alt = point.alt - routeData.alt_type = point.alt_type - routeData.airdromeId = point.airdromeId - routeData.helipadId = point.helipadId - routeData.type = point.type - routeData.action = point.action - if task then - routeData.task = point.task - end - points[point_num] = routeData - end - - return points - end - return - end --if group_data and group_data.name and group_data.name == 'groupname' - end --for group_num, group_data in pairs(obj_type_data.group) do - end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then - end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then - end --for obj_type_name, obj_type_data in pairs(cntry_data) do - end --for cntry_id, cntry_data in pairs(coa_data.country) do - end --if coa_data.country then --there is a country table - end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then - end --for coa_name, coa_data in pairs(mission.coalition) do + -- refactor to search by groupId and allow groupId and groupName as inputs + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + gpId = mist.DBs.MEgroupsByName[groupIdent].groupId + end + + for coa_name, coa_data in pairs(env.mission.coalition) do + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + for obj_type_name, obj_type_data in pairs(cntry_data) do + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_type_data.group) do + if group_data and group_data.groupId == gpId then -- this is the group we are looking for + if group_data.route and group_data.route.points and #group_data.route.points > 0 then + local points = {} + + for point_num, point in pairs(group_data.route.points) do + local routeData = {} + if not point.point then + routeData.x = point.x + routeData.y = point.y + else + routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation. + end + routeData.form = point.action + routeData.speed = point.speed + routeData.alt = point.alt + routeData.alt_type = point.alt_type + routeData.airdromeId = point.airdromeId + routeData.helipadId = point.helipadId + routeData.type = point.type + routeData.action = point.action + if task then + routeData.task = point.task + end + points[point_num] = routeData + end + + return points + end + return + end --if group_data and group_data.name and group_data.name == 'groupname' + end --for group_num, group_data in pairs(obj_type_data.group) do + end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then + end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then + end --for obj_type_name, obj_type_data in pairs(cntry_data) do + end --for cntry_id, cntry_data in pairs(coa_data.country) do + end --if coa_data.country then --there is a country table + end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then + end --for coa_name, coa_data in pairs(mission.coalition) do end @@ -3668,177 +3739,177 @@ mist.ground.buildPath = function() end -- ???? -- No longer accepts path mist.ground.buildWP = function(point, overRideForm, overRideSpeed) - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - local form, speed - - if point.speed and not overRideSpeed then - wp.speed = point.speed - elseif type(overRideSpeed) == 'number' then - wp.speed = overRideSpeed - else - wp.speed = mist.utils.kmphToMps(20) - end - - if point.form and not overRideForm then - form = point.form - else - form = overRideForm - end - - if not form then - wp.action = 'Cone' - else - form = string.lower(form) - if form == 'off_road' or form == 'off road' then - wp.action = 'Off Road' - elseif form == 'on_road' or form == 'on road' then - wp.action = 'On Road' - elseif form == 'rank' or form == 'line_abrest' or form == 'line abrest' or form == 'lineabrest'then - wp.action = 'Rank' - elseif form == 'cone' then - wp.action = 'Cone' - elseif form == 'diamond' then - wp.action = 'Diamond' - elseif form == 'vee' then - wp.action = 'Vee' - elseif form == 'echelon_left' or form == 'echelon left' or form == 'echelonl' then - wp.action = 'EchelonL' - elseif form == 'echelon_right' or form == 'echelon right' or form == 'echelonr' then - wp.action = 'EchelonR' - else - wp.action = 'Cone' -- if nothing matched - end - end + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + local form, speed + + if point.speed and not overRideSpeed then + wp.speed = point.speed + elseif type(overRideSpeed) == 'number' then + wp.speed = overRideSpeed + else + wp.speed = mist.utils.kmphToMps(20) + end + + if point.form and not overRideForm then + form = point.form + else + form = overRideForm + end + + if not form then + wp.action = 'Cone' + else + form = string.lower(form) + if form == 'off_road' or form == 'off road' then + wp.action = 'Off Road' + elseif form == 'on_road' or form == 'on road' then + wp.action = 'On Road' + elseif form == 'rank' or form == 'line_abrest' or form == 'line abrest' or form == 'lineabrest'then + wp.action = 'Rank' + elseif form == 'cone' then + wp.action = 'Cone' + elseif form == 'diamond' then + wp.action = 'Diamond' + elseif form == 'vee' then + wp.action = 'Vee' + elseif form == 'echelon_left' or form == 'echelon left' or form == 'echelonl' then + wp.action = 'EchelonL' + elseif form == 'echelon_right' or form == 'echelon right' or form == 'echelonr' then + wp.action = 'EchelonR' + else + wp.action = 'Cone' -- if nothing matched + end + end - wp.type = 'Turning Point' + wp.type = 'Turning Point' - return wp + return wp end mist.fixedWing.buildWP = function(point, WPtype, speed, alt, altType) - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - - if alt and type(alt) == 'number' then - wp.alt = alt - else - wp.alt = 2000 - end - - if altType then - altType = string.lower(altType) - if altType == 'radio' or altType == 'agl' then - wp.alt_type = 'RADIO' - elseif altType == 'baro' or altType == 'asl' then - wp.alt_type = 'BARO' - end - else - wp.alt_type = 'RADIO' - end - - if point.speed then - speed = point.speed - end - - if point.type then - WPtype = point.type - end - - if not speed then - wp.speed = mist.utils.kmphToMps(500) - else - wp.speed = speed - end - - if not WPtype then - wp.action = 'Turning Point' - else - WPtype = string.lower(WPtype) - if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then - wp.action = 'Fly Over Point' - elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then - wp.action = 'Turning Point' - else - wp.action = 'Turning Point' - end - end - - wp.type = 'Turning Point' - return wp + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 2000 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or altType == 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or altType == 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = mist.utils.kmphToMps(500) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp end mist.heli.buildWP = function(point, WPtype, speed, alt, altType) - local wp = {} - wp.x = point.x - - if point.z then - wp.y = point.z - else - wp.y = point.y - end - - if alt and type(alt) == 'number' then - wp.alt = alt - else - wp.alt = 500 - end - - if altType then - altType = string.lower(altType) - if altType == 'radio' or altType == 'agl' then - wp.alt_type = 'RADIO' - elseif altType == 'baro' or altType == 'asl' then - wp.alt_type = 'BARO' - end - else - wp.alt_type = 'RADIO' - end - - if point.speed then - speed = point.speed - end - - if point.type then - WPtype = point.type - end - - if not speed then - wp.speed = mist.utils.kmphToMps(200) - else - wp.speed = speed - end - - if not WPtype then - wp.action = 'Turning Point' - else - WPtype = string.lower(WPtype) - if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then - wp.action = 'Fly Over Point' - elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then - wp.action = 'Turning Point' - else - wp.action = 'Turning Point' - end - end - - wp.type = 'Turning Point' - return wp + local wp = {} + wp.x = point.x + + if point.z then + wp.y = point.z + else + wp.y = point.y + end + + if alt and type(alt) == 'number' then + wp.alt = alt + else + wp.alt = 500 + end + + if altType then + altType = string.lower(altType) + if altType == 'radio' or altType == 'agl' then + wp.alt_type = 'RADIO' + elseif altType == 'baro' or altType == 'asl' then + wp.alt_type = 'BARO' + end + else + wp.alt_type = 'RADIO' + end + + if point.speed then + speed = point.speed + end + + if point.type then + WPtype = point.type + end + + if not speed then + wp.speed = mist.utils.kmphToMps(200) + else + wp.speed = speed + end + + if not WPtype then + wp.action = 'Turning Point' + else + WPtype = string.lower(WPtype) + if WPtype == 'flyover' or WPtype == 'fly over' or WPtype == 'fly_over' then + wp.action = 'Fly Over Point' + elseif WPtype == 'turningpoint' or WPtype == 'turning point' or WPtype == 'turning_point' then + wp.action = 'Turning Point' + else + wp.action = 'Turning Point' + end + end + + wp.type = 'Turning Point' + return wp end @@ -3850,234 +3921,234 @@ end -- need to return a Vec3 or Vec2? function mist.getRandPointInCircle(point, radius, innerRadius) - local theta = 2*math.pi*math.random() - local rad = math.random() + math.random() - if rad > 1 then - rad = 2 - rad - end - - local radMult - if innerRadius and innerRadius <= radius then - radMult = (radius - innerRadius)*rad + innerRadius - else - radMult = radius*rad - end - - if not point.z then --might as well work with vec2/3 - point.z = point.y - end - - local rndCoord - if radius > 0 then - rndCoord = {x = math.cos(theta)*radMult + point.x, y = math.sin(theta)*radMult + point.z} - else - rndCoord = {x = point.x, y = point.z} - end - return rndCoord + local theta = 2*math.pi*math.random() + local rad = math.random() + math.random() + if rad > 1 then + rad = 2 - rad + end + + local radMult + if innerRadius and innerRadius <= radius then + radMult = (radius - innerRadius)*rad + innerRadius + else + radMult = radius*rad + end + + if not point.z then --might as well work with vec2/3 + point.z = point.y + end + + local rndCoord + if radius > 0 then + rndCoord = {x = math.cos(theta)*radMult + point.x, y = math.sin(theta)*radMult + point.z} + else + rndCoord = {x = point.x, y = point.z} + end + return rndCoord end mist.getRandomPointInZone = function(zoneName, innerRadius) - 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) - end - return false + 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) + end + return false end mist.groupToRandomPoint = function(vars) - local group = vars.group --Required - local point = vars.point --required - local radius = vars.radius or 0 - local innerRadius = vars.innerRadius - local form = vars.form or 'Cone' - local heading = vars.heading or math.random()*2*math.pi - local headingDegrees = vars.headingDegrees - local speed = vars.speed or mist.utils.kmphToMps(20) - - - local useRoads - if not vars.disableRoads then - useRoads = true - else - useRoads = false - end - - local path = {} - - if headingDegrees then - heading = headingDegrees*math.pi/180 - end - - if heading >= 2*math.pi then - heading = heading - 2*math.pi - end - - local rndCoord = mist.getRandPointInCircle(point, radius, innerRadius) - - local offset = {} - local posStart = mist.getLeadPos(group) + local group = vars.group --Required + local point = vars.point --required + local radius = vars.radius or 0 + local innerRadius = vars.innerRadius + local form = vars.form or 'Cone' + local heading = vars.heading or math.random()*2*math.pi + local headingDegrees = vars.headingDegrees + local speed = vars.speed or mist.utils.kmphToMps(20) + + + local useRoads + if not vars.disableRoads then + useRoads = true + else + useRoads = false + end + + local path = {} + + if headingDegrees then + heading = headingDegrees*math.pi/180 + end + + if heading >= 2*math.pi then + heading = heading - 2*math.pi + end + + local rndCoord = mist.getRandPointInCircle(point, radius, innerRadius) + + local offset = {} + local posStart = mist.getLeadPos(group) - offset.x = mist.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) - offset.z = mist.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) - path[#path + 1] = mist.ground.buildWP(posStart, form, speed) + offset.x = mist.utils.round(math.sin(heading - (math.pi/2)) * 50 + rndCoord.x, 3) + offset.z = mist.utils.round(math.cos(heading + (math.pi/2)) * 50 + rndCoord.y, 3) + path[#path + 1] = mist.ground.buildWP(posStart, form, speed) - - if useRoads == true and ((point.x - posStart.x)^2 + (point.z - posStart.z)^2)^0.5 > radius * 1.3 then - path[#path + 1] = mist.ground.buildWP({['x'] = posStart.x + 11, ['z'] = posStart.z + 11}, 'off_road', speed) - path[#path + 1] = mist.ground.buildWP(posStart, 'on_road', speed) - path[#path + 1] = mist.ground.buildWP(offset, 'on_road', speed) - else - path[#path + 1] = mist.ground.buildWP({['x'] = posStart.x + 25, ['z'] = posStart.z + 25}, form, speed) - end - - path[#path + 1] = mist.ground.buildWP(offset, form, speed) - path[#path + 1] = mist.ground.buildWP(rndCoord, form, speed) - - mist.goRoute(group, path) - - return + + if useRoads == true and ((point.x - posStart.x)^2 + (point.z - posStart.z)^2)^0.5 > radius * 1.3 then + path[#path + 1] = mist.ground.buildWP({['x'] = posStart.x + 11, ['z'] = posStart.z + 11}, 'off_road', speed) + path[#path + 1] = mist.ground.buildWP(posStart, 'on_road', speed) + path[#path + 1] = mist.ground.buildWP(offset, 'on_road', speed) + else + path[#path + 1] = mist.ground.buildWP({['x'] = posStart.x + 25, ['z'] = posStart.z + 25}, form, speed) + end + + path[#path + 1] = mist.ground.buildWP(offset, form, speed) + path[#path + 1] = mist.ground.buildWP(rndCoord, form, speed) + + mist.goRoute(group, path) + + return end mist.groupRandomDistSelf = function(gpData, dist, form, heading, speed) - 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) + 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) - return + return end mist.groupToRandomZone = function(gpData, zone, form, heading, speed) - if type(gpData) == 'string' then - gpData = Group.getByName(gpData) - end - - if type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - elseif type(zone) == 'table' and not zone.radius then - zone = trigger.misc.getZone(zone[math.random(1, #zone)]) - end + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + if type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + elseif type(zone) == 'table' and not zone.radius then + zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + end - if speed then - speed = mist.utils.kmphToMps(speed) - end - - local vars = {} - vars.group = gpData - vars.radius = zone.radius - vars.form = form - vars.headingDegrees = heading - vars.speed = speed - vars.point = mist.utils.zoneToVec3(zone) - - mist.groupToRandomPoint(vars) + if speed then + speed = mist.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.radius = zone.radius + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.point = mist.utils.zoneToVec3(zone) + + mist.groupToRandomPoint(vars) - return + return end mist.isTerrainValid = function(coord, terrainTypes) -- vec2/3 and enum or table of acceptable terrain types - if coord.z then - coord.y = coord.z - end - local typeConverted = {} - - if type(terrainTypes) == 'string' then -- if its a string it does this check - for constId, constData in pairs(land.SurfaceType) do - if string.lower(constId) == string.lower(terrainTypes) or string.lower(constData) == string.lower(terrainTypes) then - table.insert(typeConverted, constId) - end - end - elseif type(terrainTypes) == 'table' then -- if its a table it does this check - for typeId, typeData in pairs(terrainTypes) do - for constId, constData in pairs(land.SurfaceType) do - if string.lower(constId) == string.lower(typeData) or string.lower(constData) == string.lower(typeId) then - table.insert(typeConverted, constId) - end - end - end - end - for validIndex, validData in pairs(typeConverted) do - if land.getSurfaceType(coord) == land.SurfaceType[validData] then - return true - end - end - return false + if coord.z then + coord.y = coord.z + end + local typeConverted = {} + + if type(terrainTypes) == 'string' then -- if its a string it does this check + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(terrainTypes) or string.lower(constData) == string.lower(terrainTypes) then + table.insert(typeConverted, constId) + end + end + elseif type(terrainTypes) == 'table' then -- if its a table it does this check + for typeId, typeData in pairs(terrainTypes) do + for constId, constData in pairs(land.SurfaceType) do + if string.lower(constId) == string.lower(typeData) or string.lower(constData) == string.lower(typeId) then + table.insert(typeConverted, constId) + end + end + end + end + for validIndex, validData in pairs(typeConverted) do + if land.getSurfaceType(coord) == land.SurfaceType[validData] then + return true + end + end + return false end mist.terrainHeightDiff = function(coord, searchSize) - local samples = {} - local searchRadius = 5 - if searchSize then - searchRadius = searchSize - end - if type(coord) == 'string' then - coord = mist.utils.zoneToVec3(coord) - end - - coord = mist.utils.makeVec2(coord) - - samples[#samples + 1] = land.getHeight(coord) - for i = 0, 360, 30 do - samples[#samples + 1] = land.getHeight({x = (coord.x + (math.sin(math.rad(i))*searchRadius)), y = (coord.y + (math.cos(math.rad(i))*searchRadius))}) - if searchRadius >= 20 then -- if search radius is sorta large, take a sample halfway between center and outer edge - samples[#samples + 1] = land.getHeight({x = (coord.x + (math.sin(math.rad(i))*(searchRadius/2))), y = (coord.y + (math.cos(math.rad(i))*(searchRadius/2)))}) - end - end - local tMax, tMin = 0, 1000000 - for index, height in pairs(samples) do - if height > tMax then - tMax = height - end - if height < tMin then - tMin = height - end - end - return mist.utils.round(tMax - tMin, 2) + local samples = {} + local searchRadius = 5 + if searchSize then + searchRadius = searchSize + end + if type(coord) == 'string' then + coord = mist.utils.zoneToVec3(coord) + end + + coord = mist.utils.makeVec2(coord) + + samples[#samples + 1] = land.getHeight(coord) + for i = 0, 360, 30 do + samples[#samples + 1] = land.getHeight({x = (coord.x + (math.sin(math.rad(i))*searchRadius)), y = (coord.y + (math.cos(math.rad(i))*searchRadius))}) + if searchRadius >= 20 then -- if search radius is sorta large, take a sample halfway between center and outer edge + samples[#samples + 1] = land.getHeight({x = (coord.x + (math.sin(math.rad(i))*(searchRadius/2))), y = (coord.y + (math.cos(math.rad(i))*(searchRadius/2)))}) + end + end + local tMax, tMin = 0, 1000000 + for index, height in pairs(samples) do + if height > tMax then + tMax = height + end + if height < tMin then + tMin = height + end + end + return mist.utils.round(tMax - tMin, 2) end mist.groupToPoint = function(gpData, point, form, heading, speed, useRoads) - if type(point) == 'string' then - point = trigger.misc.getZone(point) - end - if speed then - speed = mist.utils.kmphToMps(speed) - end - - local vars = {} - vars.group = gpData - vars.form = form - vars.headingDegrees = heading - vars.speed = speed - vars.disableRoads = useRoads - vars.point = mist.utils.zoneToVec3(point) - mist.groupToRandomPoint(vars) - - return + if type(point) == 'string' then + point = trigger.misc.getZone(point) + end + if speed then + speed = mist.utils.kmphToMps(speed) + end + + local vars = {} + vars.group = gpData + vars.form = form + vars.headingDegrees = heading + vars.speed = speed + vars.disableRoads = useRoads + vars.point = mist.utils.zoneToVec3(point) + mist.groupToRandomPoint(vars) + + return end mist.getLeadPos = function(group) - if type(group) == 'string' then -- group name - group = Group.getByName(group) - end - - local units = group:getUnits() - - local leader = units[1] - if not 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 + if type(group) == 'string' then -- group name + group = Group.getByName(group) + end + + local units = group:getUnits() + + local leader = units[1] + if not Unit.isExist(leader) then -- SHOULD be good, but if there is a bug, this code future-proofs it then. + local lowestInd = math.huge + for ind, unit in pairs(units) do + if Unit.isExist(unit) and ind < lowestInd then + lowestInd = ind + return unit:getPosition().p + end + end + end + if leader and Unit.isExist(leader) then -- maybe a little too paranoid now... + return leader:getPosition().p + end end -- end of Mission task functions @@ -4093,348 +4164,348 @@ end -------MESAGGES------ do - local messageList = {} - local messageDisplayRate = 0.1 -- this defines the max refresh rate of the message box it honestly only needs to go faster than this for precision timing stuff (which could be its own function) - local messageID = 0 - local displayActive = false - local displayFuncId = 0 - - local caSlots = false - local caMSGtoGroup = false - - if env.mission.groundControl then -- just to be sure? - for index, value in pairs(env.mission.groundControl) do - if type(value) == 'table' then - for roleName, roleVal in pairs(value) do - for rIndex, rVal in pairs(roleVal) do - if rIndex == 'red' or rIndex == 'blue' then - if env.mission.groundControl[index][roleName][rIndex] > 0 then - caSlots = true - break - end - end - end - end - elseif type(value) == 'boolean' and value == true then - caSlots = true - break - end - end - end - - local function mistdisplayV5() - --[[thoughts to improve upon - event handler based activeClients table. - display messages only when there is an update - possibly co-routine it. + local messageList = {} + local messageDisplayRate = 0.1 -- this defines the max refresh rate of the message box it honestly only needs to go faster than this for precision timing stuff (which could be its own function) + local messageID = 0 + local displayActive = false + local displayFuncId = 0 + + local caSlots = false + local caMSGtoGroup = false + + if env.mission.groundControl then -- just to be sure? + for index, value in pairs(env.mission.groundControl) do + if type(value) == 'table' then + for roleName, roleVal in pairs(value) do + for rIndex, rVal in pairs(roleVal) do + if rIndex == 'red' or rIndex == 'blue' then + if env.mission.groundControl[index][roleName][rIndex] > 0 then + caSlots = true + break + end + end + end + end + elseif type(value) == 'boolean' and value == true then + caSlots = true + break + end + end + end + + local function mistdisplayV5() + --[[thoughts to improve upon + event handler based activeClients table. + display messages only when there is an update + possibly co-routine it. ]] - end - - local function mistdisplayV4() - local activeClients = {} + end + + local function mistdisplayV4() + local activeClients = {} - for clientId, clientData in pairs(mist.DBs.humansById) do - if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then - activeClients[clientData.groupId] = clientData.groupName - end - end - - --[[if caSlots == true and caMSGtoGroup == true then - - end]] + for clientId, clientData in pairs(mist.DBs.humansById) do + if Unit.getByName(clientData.unitName) and Unit.getByName(clientData.unitName):isExist() == true then + activeClients[clientData.groupId] = clientData.groupName + end + end + + --[[if caSlots == true and caMSGtoGroup == true then + + end]] - - if #messageList > 0 then - if displayActive == false then - displayActive = true - end - --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') - local msgTableText = {} - local msgTableSound = {} - - for messageId, messageData in pairs(messageList) do - if messageData.displayedFor > messageData.displayTime then - messageData:remove() -- now using the remove/destroy function. - else - if messageData.displayedFor then - messageData.displayedFor = messageData.displayedFor + messageDisplayRate - end - local nextSound = 1000 - local soundIndex = 0 - - if messageData.multSound and #messageData.multSound > 0 then - for index, sData in pairs(messageData.multSound) do - if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played - nextSound = sData.time - soundIndex = index - end - end - if soundIndex ~= 0 then - messageData.multSound[soundIndex].played = true - end - end - - for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants - if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists - if messageData.text then -- text - if not msgTableText[recData] then -- create table entry for text - msgTableText[recData] = {} - msgTableText[recData].text = {} - if recData == 'RED' or recData == 'BLUE' then - msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' - end - msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text - msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor - else -- add to table entry and adjust display time if needed - if recData == 'RED' or recData == 'BLUE' then - msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' - else - msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' - end - msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text - if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then - msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor - else - msgTableText[recData].displayTime = 1 - end - end - end - if soundIndex ~= 0 then - msgTableSound[recData] = messageData.multSound[soundIndex].file - end - end - end - - - end - end - ------- new display - - if caSlots == true and caMSGtoGroup == false then - if msgTableText['RED'] then - trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText['RED'].text), msgTableText['RED'].displayTime, true) + + if #messageList > 0 then + if displayActive == false then + displayActive = true + end + --mist.debug.writeData(mist.utils.serialize,{'msg', messageList}, 'messageList.lua') + local msgTableText = {} + local msgTableSound = {} + + for messageId, messageData in pairs(messageList) do + if messageData.displayedFor > messageData.displayTime then + messageData:remove() -- now using the remove/destroy function. + else + if messageData.displayedFor then + messageData.displayedFor = messageData.displayedFor + messageDisplayRate + end + local nextSound = 1000 + local soundIndex = 0 + + if messageData.multSound and #messageData.multSound > 0 then + for index, sData in pairs(messageData.multSound) do + if sData.time <= messageData.displayedFor and sData.played == false and sData.time < nextSound then -- find index of the next sound to be played + nextSound = sData.time + soundIndex = index + end + end + if soundIndex ~= 0 then + messageData.multSound[soundIndex].played = true + end + end + + for recIndex, recData in pairs(messageData.msgFor) do -- iterate recipiants + if recData == 'RED' or recData == 'BLUE' or activeClients[recData] then -- rec exists + if messageData.text then -- text + if not msgTableText[recData] then -- create table entry for text + msgTableText[recData] = {} + msgTableText[recData].text = {} + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[1] = '-------Combined Arms Message-------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else -- add to table entry and adjust display time if needed + if recData == 'RED' or recData == 'BLUE' then + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- Combined Arms Message: \n' + else + msgTableText[recData].text[#msgTableText[recData].text + 1] = '\n ---------------- \n' + end + msgTableText[recData].text[#msgTableText[recData].text + 1] = messageData.text + if msgTableText[recData].displayTime < messageData.displayTime - messageData.displayedFor then + msgTableText[recData].displayTime = messageData.displayTime - messageData.displayedFor + else + msgTableText[recData].displayTime = 1 + end + end + end + if soundIndex ~= 0 then + msgTableSound[recData] = messageData.multSound[soundIndex].file + end + end + end + + + end + end + ------- new display + + if caSlots == true and caMSGtoGroup == false then + if msgTableText['RED'] then + trigger.action.outTextForCoalition(coalition.side.RED, table.concat(msgTableText['RED'].text), msgTableText['RED'].displayTime, true) - end - if msgTableText['BLUE'] then - trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText['BLUE'].text), msgTableText['BLUE'].displayTime, true) - end - end - - for index, msgData in pairs(msgTableText) do - if type(index) == 'number' then -- its a groupNumber - trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, true) - end - end - --- new audio - if msgTableSound['RED'] then - trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound['RED']) - end - if msgTableSound['BLUE'] then - trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound['BLUE']) - end - - - for index, file in pairs(msgTableSound) do - if type(index) == 'number' then -- its a groupNumber - trigger.action.outSoundForGroup(index, file) - end - end - else - mist.removeFunction(displayFuncId) - displayActive = false - end - - end - - local typeBase = { - ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, - ['MiG-21Bis'] = {'Mig-21'}, - ['MiG-15bis'] = {'Mig-15'}, - ['FW-190D9'] = {'FW-190'}, - ['Bf-109K-4'] = {'Bf-109'}, - } - - --[[mist.setCAGroupMSG = function(val) - if type(val) == 'boolean' then - caMSGtoGroup = val - return true - end - return false - end]] + end + if msgTableText['BLUE'] then + trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText['BLUE'].text), msgTableText['BLUE'].displayTime, true) + end + end + + for index, msgData in pairs(msgTableText) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outTextForGroup(index, table.concat(msgData.text), msgData.displayTime, true) + end + end + --- new audio + if msgTableSound['RED'] then + trigger.action.outSoundForCoalition(coalition.side.RED, msgTableSound['RED']) + end + if msgTableSound['BLUE'] then + trigger.action.outSoundForCoalition(coalition.side.BLUE, msgTableSound['BLUE']) + end + + + for index, file in pairs(msgTableSound) do + if type(index) == 'number' then -- its a groupNumber + trigger.action.outSoundForGroup(index, file) + end + end + else + mist.removeFunction(displayFuncId) + displayActive = false + end + + end + + local typeBase = { + ['Mi-8MT'] = {'Mi-8MTV2', 'Mi-8MTV', 'Mi-8'}, + ['MiG-21Bis'] = {'Mig-21'}, + ['MiG-15bis'] = {'Mig-15'}, + ['FW-190D9'] = {'FW-190'}, + ['Bf-109K-4'] = {'Bf-109'}, + } + + --[[mist.setCAGroupMSG = function(val) + if type(val) == 'boolean' then + caMSGtoGroup = val + return true + end + return false + end]] - mist.message = { - + mist.message = { + - add = function(vars) - local function msgSpamFilter(recList, spamBlockOn) - for id, name in pairs(recList) do - if name == spamBlockOn then - -- env.info('already on recList') - return recList - end - end - --env.info('add to recList') - table.insert(recList, spamBlockOn) - return recList - end - - --[[ - local vars = {} - vars.text = 'Hello World' - vars.displayTime = 20 - vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} - mist.message.add(vars) + add = function(vars) + local function msgSpamFilter(recList, spamBlockOn) + for id, name in pairs(recList) do + if name == spamBlockOn then + -- env.info('already on recList') + return recList + end + end + --env.info('add to recList') + table.insert(recList, spamBlockOn) + return recList + end + + --[[ + local vars = {} + vars.text = 'Hello World' + vars.displayTime = 20 + vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} + mist.message.add(vars) - Displays the message for all red coalition players. Players belonging to Ukraine and Georgia, and all A-10Cs on the map - - ]] - - - local new = {} - new.text = vars.text -- The actual message - new.displayTime = vars.displayTime -- How long will the message appear for - new.displayedFor = 0 -- how long the message has been displayed so far - new.name = vars.name -- ID to overwrite the older message (if it exists) Basically it replaces a message that is displayed with new text. - new.addedAt = timer.getTime() - new.update = true - - if vars.multSound and vars.multSound[1] then - new.multSound = vars.multSound - else - new.multSound = {} - end - - if vars.sound or vars.fileName then -- converts old sound file system into new multSound format - local sound = vars.sound - if vars.fileName then - sound = vars.fileName - end - new.multSound[#new.multSound+1] = {time = 0.1, file = sound} - end - - if #new.multSound > 0 then - for i, data in pairs(new.multSound) do - data.played = false - end - end - - local newMsgFor = {} -- list of all groups message displays for - for forIndex, forData in pairs(vars.msgFor) do - for list, listData in pairs(forData) do - for clientId, clientData in pairs(mist.DBs.humansById) do - forIndex = string.lower(forIndex) - if type(listData) == 'string' then - listData = string.lower(listData) - end - if (forIndex == 'coa' and (listData == string.lower(clientData.coalition) or listData == 'all')) or (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then -- - newMsgFor = msgSpamFilter(newMsgFor, clientData.groupId) -- so units dont get the same message twice if complex rules are given - --table.insert(newMsgFor, clientId) - elseif forIndex == 'unittypes' then - for typeId, typeData in pairs(listData) do - local found = false - for clientDataEntry, clientDataVal in pairs(clientData) do - if type(clientDataVal) == 'string' then - if mist.matchString(list, clientDataVal) == true or list == 'all' then - local sString = typeData - for rName, pTbl in pairs(typeBase) do -- just a quick check to see if the user may have meant something and got the specific type of the unit wrong - for pIndex, pName in pairs(pTbl) do - if mist.stringMatch(sString, pName) then - sString = rName - end - end - end - if sString == clientData.type then - found = true - newMsgFor = msgSpamFilter(newMsgFor, clientData.groupId) -- sends info oto other function to see if client is already recieving the current message. - --table.insert(newMsgFor, clientId) - end - end - end - if found == true then -- shouldn't this be elsewhere too? - break - end - end - end + Displays the message for all red coalition players. Players belonging to Ukraine and Georgia, and all A-10Cs on the map + + ]] + + + local new = {} + new.text = vars.text -- The actual message + new.displayTime = vars.displayTime -- How long will the message appear for + new.displayedFor = 0 -- how long the message has been displayed so far + new.name = vars.name -- ID to overwrite the older message (if it exists) Basically it replaces a message that is displayed with new text. + new.addedAt = timer.getTime() + new.update = true + + if vars.multSound and vars.multSound[1] then + new.multSound = vars.multSound + else + new.multSound = {} + end + + if vars.sound or vars.fileName then -- converts old sound file system into new multSound format + local sound = vars.sound + if vars.fileName then + sound = vars.fileName + end + new.multSound[#new.multSound+1] = {time = 0.1, file = sound} + end + + if #new.multSound > 0 then + for i, data in pairs(new.multSound) do + data.played = false + end + end + + local newMsgFor = {} -- list of all groups message displays for + for forIndex, forData in pairs(vars.msgFor) do + for list, listData in pairs(forData) do + for clientId, clientData in pairs(mist.DBs.humansById) do + forIndex = string.lower(forIndex) + if type(listData) == 'string' then + listData = string.lower(listData) + end + if (forIndex == 'coa' and (listData == string.lower(clientData.coalition) or listData == 'all')) or (forIndex == 'countries' and string.lower(clientData.country) == listData) or (forIndex == 'units' and string.lower(clientData.unitName) == listData) then -- + newMsgFor = msgSpamFilter(newMsgFor, clientData.groupId) -- so units dont get the same message twice if complex rules are given + --table.insert(newMsgFor, clientId) + elseif forIndex == 'unittypes' then + for typeId, typeData in pairs(listData) do + local found = false + for clientDataEntry, clientDataVal in pairs(clientData) do + if type(clientDataVal) == 'string' then + if mist.matchString(list, clientDataVal) == true or list == 'all' then + local sString = typeData + for rName, pTbl in pairs(typeBase) do -- just a quick check to see if the user may have meant something and got the specific type of the unit wrong + for pIndex, pName in pairs(pTbl) do + if mist.stringMatch(sString, pName) then + sString = rName + end + end + end + if sString == clientData.type then + found = true + newMsgFor = msgSpamFilter(newMsgFor, clientData.groupId) -- sends info oto other function to see if client is already recieving the current message. + --table.insert(newMsgFor, clientId) + end + end + end + if found == true then -- shouldn't this be elsewhere too? + break + end + end + end - end - end - for coaData, coaId in pairs(coalition.side) do - if string.lower(forIndex) == 'coa' or string.lower(forIndex) == 'ca' then - if listData == string.lower(coaData) or listData == 'all' then - newMsgFor = msgSpamFilter(newMsgFor, coaData) - end - end - end - end - end - - if #newMsgFor > 0 then - new.msgFor = newMsgFor -- I swear its not confusing - - else - return false - end - - - if vars.name and type(vars.name) == 'string' then - for i = 1, #messageList do - if messageList[i].name then - if messageList[i].name == vars.name then - --env.info('updateMessage') - messageList[i].displayedFor = 0 - messageList[i].addedAt = timer.getTime() - messageList[i].sound = new.sound - messageList[i].text = new.text - messageList[i].msgFor = new.msgFor - messageList[i].multSound = new.multSound - messageList[i].update = true - return messageList[i].messageID - end - end - end - end - - messageID = messageID + 1 - new.messageID = messageID + end + end + for coaData, coaId in pairs(coalition.side) do + if string.lower(forIndex) == 'coa' or string.lower(forIndex) == 'ca' then + if listData == string.lower(coaData) or listData == 'all' then + newMsgFor = msgSpamFilter(newMsgFor, coaData) + end + end + end + end + end + + if #newMsgFor > 0 then + new.msgFor = newMsgFor -- I swear its not confusing + + else + return false + end + + + if vars.name and type(vars.name) == 'string' then + for i = 1, #messageList do + if messageList[i].name then + if messageList[i].name == vars.name then + --env.info('updateMessage') + messageList[i].displayedFor = 0 + messageList[i].addedAt = timer.getTime() + messageList[i].sound = new.sound + messageList[i].text = new.text + messageList[i].msgFor = new.msgFor + messageList[i].multSound = new.multSound + messageList[i].update = true + return messageList[i].messageID + end + end + end + end + + messageID = messageID + 1 + new.messageID = messageID - --mist.debug.writeData(mist.utils.serialize,{'msg', new}, 'newMsg.lua') + --mist.debug.writeData(mist.utils.serialize,{'msg', new}, 'newMsg.lua') - - messageList[#messageList + 1] = new - - local mt = { __index = mist.message} - setmetatable(new, mt) + + messageList[#messageList + 1] = new + + local mt = { __index = mist.message} + setmetatable(new, mt) - if displayActive == false then - displayActive = true - displayFuncId = mist.scheduleFunction(mistdisplayV4, {}, timer.getTime() + messageDisplayRate, messageDisplayRate) - end - - return messageID - - end, - - remove = function(self) -- Now a self variable; the former functionality taken up by mist.message.removeById. - for i, msgData in pairs(messageList) do - if messageList[i] == self then - table.remove(messageList, i) - return true --removal successful - end - end - return false -- removal not successful this script fails at life! - end, - - removeById = function(id) -- This function is NOT passed a self variable; it is the remove by id function. - for i, msgData in pairs(messageList) do - if messageList[i].messageID == id then - table.remove(messageList, i) - return true --removal successful - end - end - return false -- removal not successful this script fails at life! - end, - } - + if displayActive == false then + displayActive = true + displayFuncId = mist.scheduleFunction(mistdisplayV4, {}, timer.getTime() + messageDisplayRate, messageDisplayRate) + end + + return messageID + + end, + + remove = function(self) -- Now a self variable; the former functionality taken up by mist.message.removeById. + for i, msgData in pairs(messageList) do + if messageList[i] == self then + table.remove(messageList, i) + return true --removal successful + end + end + return false -- removal not successful this script fails at life! + end, + + removeById = function(id) -- This function is NOT passed a self variable; it is the remove by id function. + for i, msgData in pairs(messageList) do + if messageList[i].messageID == id then + table.remove(messageList, i) + return true --removal successful + end + end + return false -- removal not successful this script fails at life! + end, + } + end -- End of message system -------------------------------------------------------------------------------------------------------------------------------------------- @@ -4487,12 +4558,12 @@ vars.units - table of unit names (NOT unitNameTable- maybe this should change). vars.acc - integer between 0 and 5, inclusive ]] mist.getMGRSString = function(vars) - local units = vars.units - local acc = vars.acc or 5 - local avgPos = mist.getAvgPos(units) - if avgPos then - return mist.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) - end + local units = vars.units + local acc = vars.acc or 5 + local avgPos = mist.getAvgPos(units) + if avgPos then + return mist.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(avgPos)), acc) + end end --[[ vars for mist.getLLString @@ -4503,14 +4574,14 @@ vars.DMS - if true, output in degrees, minutes, seconds. Otherwise, output in d ]] mist.getLLString = function(vars) - local units = vars.units - local acc = vars.acc or 3 - local DMS = vars.DMS - local avgPos = mist.getAvgPos(units) - if avgPos then - local lat, lon = coord.LOtoLL(avgPos) - return mist.tostringLL(lat, lon, acc, DMS) - end + local units = vars.units + local acc = vars.acc or 3 + local DMS = vars.DMS + local avgPos = mist.getAvgPos(units) + if avgPos then + local lat, lon = coord.LOtoLL(avgPos) + return mist.tostringLL(lat, lon, acc, DMS) + end end @@ -4521,20 +4592,20 @@ vars.alt - boolean, if used, includes altitude in string vars.metric - boolean, gives distance in km instead of NM. ]] mist.getBRString = function(vars) - local units = vars.units - local ref = mist.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. - local alt = vars.alt - local metric = vars.metric - local avgPos = mist.getAvgPos(units) - if avgPos then - local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} - local dir = mist.utils.getDir(vec, ref) - local dist = mist.utils.get2DDist(avgPos, ref) - if alt then - alt = avgPos.y - end - return mist.tostringBR(dir, dist, alt, metric) - end + local units = vars.units + local ref = mist.utils.makeVec3(vars.ref, 0) -- turn it into Vec3 if it is not already. + local alt = vars.alt + local metric = vars.metric + local avgPos = mist.getAvgPos(units) + if avgPos then + local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z} + local dir = mist.utils.getDir(vec, ref) + local dist = mist.utils.get2DDist(avgPos, ref) + if alt then + alt = avgPos.y + end + return mist.tostringBR(dir, dist, alt, metric) + end end -- Returns the Vec3 coordinates of the average position of the concentration of units most in the heading direction. @@ -4545,53 +4616,53 @@ vars.radius - number vars.headingDegrees - boolean, switches heading to degrees ]] mist.getLeadingPos = function(vars) - local units = vars.units - local heading = vars.heading - local radius = vars.radius - if vars.headingDegrees then - heading = mist.utils.toRadian(vars.headingDegrees) - end - - local unitPosTbl = {} - for i = 1, #units do - local unit = Unit.getByName(units[i]) - if unit and unit:isExist() then - unitPosTbl[#unitPosTbl + 1] = unit:getPosition().p - end - end - if #unitPosTbl > 0 then -- one more more units found. - -- first, find the unit most in the heading direction - local maxPos = -math.huge - - local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = - for i = 1, #unitPosTbl do - local rotatedVec2 = mist.vec.rotateVec2(mist.utils.makeVec2(unitPosTbl[i]), heading) - if (not maxPos) or maxPos < rotatedVec2.x then - maxPos = rotatedVec2.x - maxPosInd = i - end - end - - --now, get all the units around this unit... - local avgPos - if radius then - local maxUnitPos = unitPosTbl[maxPosInd] - local avgx, avgy, avgz, totNum = 0, 0, 0, 0 - for i = 1, #unitPosTbl do - if mist.utils.get2DDist(maxUnitPos, unitPosTbl[i]) <= radius then - avgx = avgx + unitPosTbl[i].x - avgy = avgy + unitPosTbl[i].y - avgz = avgz + unitPosTbl[i].z - totNum = totNum + 1 - end - end - avgPos = { x = avgx/totNum, y = avgy/totNum, z = avgz/totNum} - else - avgPos = unitPosTbl[maxPosInd] - end - - return avgPos - end + local units = vars.units + local heading = vars.heading + local radius = vars.radius + if vars.headingDegrees then + heading = mist.utils.toRadian(vars.headingDegrees) + end + + local unitPosTbl = {} + for i = 1, #units do + local unit = Unit.getByName(units[i]) + if unit and unit:isExist() then + unitPosTbl[#unitPosTbl + 1] = unit:getPosition().p + end + end + if #unitPosTbl > 0 then -- one more more units found. + -- first, find the unit most in the heading direction + local maxPos = -math.huge + + local maxPosInd -- maxPos - the furthest in direction defined by heading; maxPosInd = + for i = 1, #unitPosTbl do + local rotatedVec2 = mist.vec.rotateVec2(mist.utils.makeVec2(unitPosTbl[i]), heading) + if (not maxPos) or maxPos < rotatedVec2.x then + maxPos = rotatedVec2.x + maxPosInd = i + end + end + + --now, get all the units around this unit... + local avgPos + if radius then + local maxUnitPos = unitPosTbl[maxPosInd] + local avgx, avgy, avgz, totNum = 0, 0, 0, 0 + for i = 1, #unitPosTbl do + if mist.utils.get2DDist(maxUnitPos, unitPosTbl[i]) <= radius then + avgx = avgx + unitPosTbl[i].x + avgy = avgy + unitPosTbl[i].y + avgz = avgz + unitPosTbl[i].z + totNum = totNum + 1 + end + end + avgPos = { x = avgx/totNum, y = avgy/totNum, z = avgz/totNum} + else + avgPos = unitPosTbl[maxPosInd] + end + + return avgPos + end end @@ -4603,11 +4674,11 @@ vars.headingDegrees - boolean, switches heading to degrees vars.acc - number, 0 to 5. ]] mist.getLeadingMGRSString = function(vars) - local pos = mist.getLeadingPos(vars) - if pos then - local acc = vars.acc or 5 - return mist.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) - end + local pos = mist.getLeadingPos(vars) + if pos then + local acc = vars.acc or 5 + return mist.tostringMGRS(coord.LLtoMGRS(coord.LOtoLL(pos)), acc) + end end --[[ vars for mist.getLeadingLLString: @@ -4619,13 +4690,13 @@ vars.acc - number of digits after decimal point (can be negative) vars.DMS - boolean, true if you want DMS. ]] mist.getLeadingLLString = function(vars) - local pos = mist.getLeadingPos(vars) - if pos then - local acc = vars.acc or 3 - local DMS = vars.DMS - local lat, lon = coord.LOtoLL(pos) - return mist.tostringLL(lat, lon, acc, DMS) - end + local pos = mist.getLeadingPos(vars) + if pos then + local acc = vars.acc or 3 + local DMS = vars.DMS + local lat, lon = coord.LOtoLL(pos) + return mist.tostringLL(lat, lon, acc, DMS) + end end @@ -4640,26 +4711,26 @@ vars.alt - boolean, if true, include altitude. vars.ref - vec3/vec2 reference point. ]] mist.getLeadingBRString = function(vars) - local pos = mist.getLeadingPos(vars) - if pos then - local ref = vars.ref - local alt = vars.alt - local metric = vars.metric - - local vec = {x = pos.x - ref.x, y = pos.y - ref.y, z = pos.z - ref.z} - local dir = mist.utils.getDir(vec, ref) - local dist = mist.utils.get2DDist(pos, ref) - if alt then - alt = pos.y - end - return mist.tostringBR(dir, dist, alt, metric) - end + local pos = mist.getLeadingPos(vars) + if pos then + local ref = vars.ref + local alt = vars.alt + local metric = vars.metric + + local vec = {x = pos.x - ref.x, y = pos.y - ref.y, z = pos.z - ref.z} + local dir = mist.utils.getDir(vec, ref) + local dist = mist.utils.get2DDist(pos, ref) + if alt then + alt = pos.y + end + return mist.tostringBR(dir, dist, alt, metric) + end end --[[ vars for mist.message.add - vars.text = 'Hello World' - vars.displayTime = 20 - vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} + vars.text = 'Hello World' + vars.displayTime = 20 + vars.msgFor = {coa = {'red'}, countries = {'Ukraine', 'Georgia'}, unitTypes = {'A-10C'}} ]] @@ -4671,28 +4742,28 @@ vars.displayTime - self explanatory vars.msgFor - scope ]] mist.msgMGRS = function(vars) - local units = vars.units - local acc = vars.acc - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getMGRSString{units = units, acc = acc} - local newText - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - else - newText = s - end - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } + local units = vars.units + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getMGRSString{units = units, acc = acc} + local newText + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + else + newText = s + end + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } end --[[ vars for mist.msgLL @@ -4704,30 +4775,30 @@ vars.displayTime - self explanatory vars.msgFor - scope ]] mist.msgLL = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local acc = vars.acc - local DMS = vars.DMS - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getLLString{units = units, acc = acc, DMS = DMS} - local newText - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getLLString{units = units, acc = acc, DMS = DMS} + local newText + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } end @@ -4742,31 +4813,31 @@ vars.displayTime vars.msgFor - scope ]] mist.msgBR = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local ref = vars.ref -- vec2/vec3 will be handled in mist.getBRString - local alt = vars.alt - local metric = vars.metric - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getBRString{units = units, ref = ref, alt = alt, metric = metric} - local newText - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local ref = vars.ref -- vec2/vec3 will be handled in mist.getBRString + local alt = vars.alt + local metric = vars.metric + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getBRString{units = units, ref = ref, alt = alt, metric = metric} + local newText + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } end @@ -4783,13 +4854,13 @@ vars.displayTime vars.msgFor - scope ]] mist.msgBullseye = function(vars) - if string.lower(vars.ref) == 'red' then - vars.ref = mist.DBs.missionData.bullseye.red - mist.msgBR(vars) - elseif string.lower(vars.ref) == 'blue' then - vars.ref = mist.DBs.missionData.bullseye.blue - mist.msgBR(vars) - end + if string.lower(vars.ref) == 'red' then + vars.ref = mist.DBs.missionData.bullseye.red + mist.msgBR(vars) + elseif string.lower(vars.ref) == 'blue' then + vars.ref = mist.DBs.missionData.bullseye.blue + mist.msgBR(vars) + end end --[[ @@ -4803,13 +4874,13 @@ vars.msgFor - scope ]] mist.msgBRA = function(vars) - if Unit.getByName(vars.ref) and Unit.getByName(vars.ref):isExist() == true then - vars.ref = Unit.getByName(vars.ref):getPosition().p - if not vars.alt then - vars.alt = true - end - mist.msgBR(vars) - end + if Unit.getByName(vars.ref) and Unit.getByName(vars.ref):isExist() == true then + vars.ref = Unit.getByName(vars.ref):getPosition().p + if not vars.alt then + vars.alt = true + end + mist.msgBR(vars) + end end -------------------------------------------------------------------------------------------- @@ -4824,32 +4895,32 @@ vars.displayTime vars.msgFor - scope ]] mist.msgLeadingMGRS = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local acc = vars.acc - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} - local newText - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getLeadingMGRSString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc} + local newText + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } end @@ -4865,34 +4936,34 @@ vars.displayTime vars.msgFor - scope ]] mist.msgLeadingLL = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local acc = vars.acc - local DMS = vars.DMS - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} - local newText - - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local acc = vars.acc + local DMS = vars.DMS + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getLeadingLLString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, acc = acc, DMS = DMS} + local newText + + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } end @@ -4909,35 +4980,35 @@ vars.displayTime vars.msgFor - scope ]] mist.msgLeadingBR = function(vars) - local units = vars.units -- technically, I don't really need to do this, but it helps readability. - local heading = vars.heading - local radius = vars.radius - local headingDegrees = vars.headingDegrees - local metric = vars.metric - local alt = vars.alt - local ref = vars.ref -- vec2/vec3 will be handled in mist.getBRString - local text = vars.text - local displayTime = vars.displayTime - local msgFor = vars.msgFor - - local s = mist.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} - local newText - - if text then - if string.find(text, '%%s') then -- look for %s - newText = string.format(text, s) -- insert the coordinates into the message - else -- else, just append to the end. - newText = text .. s - end - else - newText = s - end - - mist.message.add{ - text = newText, - displayTime = displayTime, - msgFor = msgFor - } + local units = vars.units -- technically, I don't really need to do this, but it helps readability. + local heading = vars.heading + local radius = vars.radius + local headingDegrees = vars.headingDegrees + local metric = vars.metric + local alt = vars.alt + local ref = vars.ref -- vec2/vec3 will be handled in mist.getBRString + local text = vars.text + local displayTime = vars.displayTime + local msgFor = vars.msgFor + + local s = mist.getLeadingBRString{units = units, heading = heading, radius = radius, headingDegrees = headingDegrees, metric = metric, alt = alt, ref = ref} + local newText + + if text then + if string.find(text, '%%s') then -- look for %s + newText = string.format(text, s) -- insert the coordinates into the message + else -- else, just append to the end. + newText = text .. s + end + else + newText = s + end + + mist.message.add{ + text = newText, + displayTime = displayTime, + msgFor = msgFor + } end @@ -4948,799 +5019,799 @@ end -- start of sct Merge do -- all function uses of group and unit Ids must be in this do statement - - + + mist.groupTableCheck = function(groupData) - local isOk = false - - if groupData.country then - isOk = true - end - if groupData.category then - isOk = true - else - isOk = false - end - if groupData.units then - for unitId, unitData in pairs(groupData.units) do - if unitData.x and unitData.y and unitData.type then - isOk = true - end - end - else - isOk = false - end - - return isOk -end + local isOk = false + + if groupData.country then + isOk = true + end + if groupData.category then + isOk = true + else + isOk = false + end + if groupData.units then + for unitId, unitData in pairs(groupData.units) do + if unitData.x and unitData.y and unitData.type then + isOk = true + end + end + else + isOk = false + end + + return isOk +end mist.getCurrentGroupData = function(gpName) - local dbData = mist.getGroupData(gpName) - - if Group.getByName(gpName) and Group.getByName(gpName):isExist() == true then - local newGroup = Group.getByName(gpName) - local newData = {} - newData.name = gpName - newData.groupId = tonumber(newGroup:getID()) - newData.category = newGroup:getCategory() - newData.groupName = gpName + local dbData = mist.getGroupData(gpName) + + if Group.getByName(gpName) and Group.getByName(gpName):isExist() == true then + local newGroup = Group.getByName(gpName) + local newData = {} + newData.name = gpName + newData.groupId = tonumber(newGroup:getID()) + newData.category = newGroup:getCategory() + newData.groupName = gpName newData.hidden = dbData.hidden - - if newData.category == 2 then - newData.category = 'vehicle' - elseif newData.category == 3 then - newData.category = 'ship' - end + + if newData.category == 2 then + newData.category = 'vehicle' + elseif newData.category == 3 then + newData.category = 'ship' + end - newData.units = {} - local newUnits = newGroup:getUnits() - for unitNum, unitData in pairs(newGroup:getUnits()) do - newData.units[unitNum] = {} - newData.units[unitNum]["unitId"] = tonumber(unitData:getID()) - newData.units[unitNum]['point'] = unitData.point - newData.units[unitNum]['x'] = unitData:getPosition().p.x - newData.units[unitNum]['y'] = unitData:getPosition().p.z - newData.units[unitNum]["type"] = unitData:getTypeName() - newData.units[unitNum]["skill"] = mist.getUnitSkill(unitData:getName()) - - -- get velocity needed - newData.units[unitNum]["unitName"] = unitData:getName() - newData.units[unitNum]["heading"] = mist.getHeading(unitData, true) -- added to DBs - newData.units[unitNum]['alt'] = unitData:getPosition().p.y - newData.country = string.lower(country.name[unitData:getCountry()]) - newData.units[unitNum]['callsign'] = unitData:getCallsign() - end + newData.units = {} + local newUnits = newGroup:getUnits() + for unitNum, unitData in pairs(newGroup:getUnits()) do + newData.units[unitNum] = {} + newData.units[unitNum]["unitId"] = tonumber(unitData:getID()) + newData.units[unitNum]['point'] = unitData.point + newData.units[unitNum]['x'] = unitData:getPosition().p.x + newData.units[unitNum]['y'] = unitData:getPosition().p.z + newData.units[unitNum]["type"] = unitData:getTypeName() + newData.units[unitNum]["skill"] = mist.getUnitSkill(unitData:getName()) + + -- get velocity needed + newData.units[unitNum]["unitName"] = unitData:getName() + newData.units[unitNum]["heading"] = mist.getHeading(unitData, true) -- added to DBs + newData.units[unitNum]['alt'] = unitData:getPosition().p.y + newData.country = string.lower(country.name[unitData:getCountry()]) + newData.units[unitNum]['callsign'] = unitData:getCallsign() + end - return newData - elseif StaticObject.getByName(gpName) and StaticObject.getByName(gpName):isExist() == true then - local staticObj = StaticObject.getByName(gpName) - dbData.units[1].x = staticObj:getPosition().p.x - dbData.units[1].y = staticObj:getPosition().p.z - dbData.units[1].alt = staticObj:getPosition().p.y - dbData.units[1].heading = mist.getHeading(staticObj, true) - - return dbData - end + return newData + elseif StaticObject.getByName(gpName) and StaticObject.getByName(gpName):isExist() == true then + local staticObj = StaticObject.getByName(gpName) + dbData.units[1].x = staticObj:getPosition().p.x + dbData.units[1].y = staticObj:getPosition().p.z + dbData.units[1].alt = staticObj:getPosition().p.y + dbData.units[1].heading = mist.getHeading(staticObj, true) + + return dbData + end end mist.getGroupData = function(gpName) - local found = false - local newData = {} - if mist.DBs.groupsByName[gpName] then - newData = mist.utils.deepCopy(mist.DBs.groupsByName[gpName]) - found = true - end - - if found == false then - for groupName, groupData in pairs(mist.DBs.groupsByName) do - if mist.stringMatch(groupName, gpName) == true then - newData = mist.utils.deepCopy(groupData) - newData.groupName = groupName - found = true - break - end - end - end - - local payloads - if newData.category == 'plane' or newData.category == 'helicopter' then - payloads = mist.getGroupPayload(newData.groupName) - end - if found == true then - --newData.hidden = false -- maybe add this to DBs + local found = false + local newData = {} + if mist.DBs.groupsByName[gpName] then + newData = mist.utils.deepCopy(mist.DBs.groupsByName[gpName]) + found = true + end + + if found == false then + for groupName, groupData in pairs(mist.DBs.groupsByName) do + if mist.stringMatch(groupName, gpName) == true then + newData = mist.utils.deepCopy(groupData) + newData.groupName = groupName + found = true + break + end + end + end + + local payloads + if newData.category == 'plane' or newData.category == 'helicopter' then + payloads = mist.getGroupPayload(newData.groupName) + end + if found == true then + --newData.hidden = false -- maybe add this to DBs - for unitNum, unitData in pairs(newData.units) do - newData.units[unitNum] = {} - - newData.units[unitNum]["unitId"] = unitData.unitId - --newData.units[unitNum]['point'] = unitData.point - newData.units[unitNum]['x'] = unitData.point.x - newData.units[unitNum]['y'] = unitData.point.y - newData.units[unitNum]['alt'] = unitData.alt - newData.units[unitNum]['alt_type'] = unitData.alt_type - newData.units[unitNum]['speed'] = unitData.speed - newData.units[unitNum]["type"] = unitData.type - newData.units[unitNum]["skill"] = unitData.skill - newData.units[unitNum]["unitName"] = unitData.unitName - newData.units[unitNum]["heading"] = unitData.heading -- added to DBs - newData.units[unitNum]["playerCanDrive"] = unitData.playerCanDrive -- added to DBs - - - if newData.category == 'plane' or newData.category == 'helicopter' then - newData.units[unitNum]["payload"] = payloads[unitNum] - newData.units[unitNum]['livery_id'] = unitData.livery_id - newData.units[unitNum]['onboard_num'] = unitData.onboard_num - newData.units[unitNum]['callsign'] = unitData.callsign - newData.units[unitNum]['AddPropAircraft'] = unitData.AddPropAircraft - end - if newData.category == 'static' then - newData.units[unitNum]['categoryStatic'] = unitData.categoryStatic - newData.units[unitNum]['mass'] = unitData.mass - newData.units[unitNum]['canCargo'] = unitData.canCargo - newData.units[unitNum]['shape_name'] = unitData.shape_name - end - end - - return newData - else - env.info(gpName .. ' not found in mist.getGroupData') - return - end + for unitNum, unitData in pairs(newData.units) do + newData.units[unitNum] = {} + + newData.units[unitNum]["unitId"] = unitData.unitId + --newData.units[unitNum]['point'] = unitData.point + newData.units[unitNum]['x'] = unitData.point.x + newData.units[unitNum]['y'] = unitData.point.y + newData.units[unitNum]['alt'] = unitData.alt + newData.units[unitNum]['alt_type'] = unitData.alt_type + newData.units[unitNum]['speed'] = unitData.speed + newData.units[unitNum]["type"] = unitData.type + newData.units[unitNum]["skill"] = unitData.skill + newData.units[unitNum]["unitName"] = unitData.unitName + newData.units[unitNum]["heading"] = unitData.heading -- added to DBs + newData.units[unitNum]["playerCanDrive"] = unitData.playerCanDrive -- added to DBs + + + if newData.category == 'plane' or newData.category == 'helicopter' then + newData.units[unitNum]["payload"] = payloads[unitNum] + newData.units[unitNum]['livery_id'] = unitData.livery_id + newData.units[unitNum]['onboard_num'] = unitData.onboard_num + newData.units[unitNum]['callsign'] = unitData.callsign + newData.units[unitNum]['AddPropAircraft'] = unitData.AddPropAircraft + end + if newData.category == 'static' then + newData.units[unitNum]['categoryStatic'] = unitData.categoryStatic + newData.units[unitNum]['mass'] = unitData.mass + newData.units[unitNum]['canCargo'] = unitData.canCargo + newData.units[unitNum]['shape_name'] = unitData.shape_name + end + end + + return newData + else + env.info(gpName .. ' not found in mist.getGroupData') + return + end end mist.getPayload = function(unitIdent) - -- refactor to search by groupId and allow groupId and groupName as inputs - local unitId = unitIdent - if type(unitIdent) == 'string' and not tonumber(unitIdent) then - unitId = mist.DBs.MEunitsByName[unitIdent].unitId - end - local gpId = mist.DBs.MEunitsById[unitId].groupId - - if gpId and unitId then - for coa_name, coa_data in pairs(env.mission.coalition) do - if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - if coa_data.country then --there is a country table - for cntry_id, cntry_data in pairs(coa_data.country) do - for obj_type_name, obj_type_data in pairs(cntry_data) do - if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points - if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - for group_num, group_data in pairs(obj_type_data.group) do - if group_data and group_data.groupId == gpId then - for unitIndex, unitData in pairs(group_data.units) do --group index - if unitData.unitId == unitId then - return unitData.payload - end - end - end - end - end - end - end - end - end - end - end - else - env.info('mist.getPayload got ' .. type(unitIdent)) - return false - end - env.info('mist.getPayload, payload not found') - return + -- refactor to search by groupId and allow groupId and groupName as inputs + local unitId = unitIdent + if type(unitIdent) == 'string' and not tonumber(unitIdent) then + unitId = mist.DBs.MEunitsByName[unitIdent].unitId + end + local gpId = mist.DBs.MEunitsById[unitId].groupId + + if gpId and unitId then + for coa_name, coa_data in pairs(env.mission.coalition) do + if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then + if coa_data.country then --there is a country table + for cntry_id, cntry_data in pairs(coa_data.country) do + for obj_type_name, obj_type_data in pairs(cntry_data) do + if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points + if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! + for group_num, group_data in pairs(obj_type_data.group) do + if group_data and group_data.groupId == gpId then + for unitIndex, unitData in pairs(group_data.units) do --group index + if unitData.unitId == unitId then + return unitData.payload + end + end + end + end + end + end + end + end + end + end + end + else + env.info('mist.getPayload got ' .. type(unitIdent)) + return false + end + env.info('mist.getPayload, payload not found') + return end mist.getGroupPayload = function(groupIdent) - local gpId = groupIdent - if type(groupIdent) == 'string' and not tonumber(groupIdent) then - gpId = mist.DBs.MEgroupsByName[groupIdent].groupId - end - - if gpId 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 - local payloads = {} - for unitIndex, unitData in pairs(group_data.units) do --group index - payloads[unitIndex] = unitData.payload - end - return payloads - end - end - end - end - end - end - end - end - end - else - env.info('mist.getGroupPayload got ' .. type(groupName)) - return false - end - env.info('mist.getGroupPayload, payload not found') - return + local gpId = groupIdent + if type(groupIdent) == 'string' and not tonumber(groupIdent) then + gpId = mist.DBs.MEgroupsByName[groupIdent].groupId + end + + if gpId 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 + local payloads = {} + for unitIndex, unitData in pairs(group_data.units) do --group index + payloads[unitIndex] = unitData.payload + end + return payloads + end + end + end + end + end + end + end + end + end + else + env.info('mist.getGroupPayload got ' .. type(groupName)) + return false + end + env.info('mist.getGroupPayload, payload not found') + return end mist.teleportToPoint = function(vars) -- main teleport function that all of teleport/respawn functions call - local point = vars.point - - local gpName - if vars.gpName then - gpName = vars.gpName - elseif vars.groupName then - gpName = vars.groupName - else - env.info('teleportToPoint missing either vars.groupName or vars.gpName') - end - - local action = vars.action - - local disperse = vars.disperse or false - local maxDisp = vars.maxDisp - if not vars.maxDisp then - maxDisp = 200 - else - maxDisp = vars.maxDisp - end - local radius = vars.radius or 0 - local innerRadius = vars.innerRadius - - local route = vars.route - local dbData = false - - local newGroupData - if gpName and not vars.groupData then - if string.lower(action) == 'teleport' or string.lower(action) == 'tele' then - newGroupData = mist.getCurrentGroupData(gpName) - elseif string.lower(action) == 'respawn' then - newGroupData = mist.getGroupData(gpName) - dbData = true - elseif string.lower(action) == 'clone' then - newGroupData = mist.getGroupData(gpName) - newGroupData.clone = 'order66' - dbData = true - else - action = 'tele' - newGroupData = mist.getCurrentGroupData(gpName) - end - else - action = 'tele' - newGroupData = vars.groupData - end + local point = vars.point + + local gpName + if vars.gpName then + gpName = vars.gpName + elseif vars.groupName then + gpName = vars.groupName + else + env.info('teleportToPoint missing either vars.groupName or vars.gpName') + end + + local action = vars.action + + local disperse = vars.disperse or false + local maxDisp = vars.maxDisp + if not vars.maxDisp then + maxDisp = 200 + else + maxDisp = vars.maxDisp + end + local radius = vars.radius or 0 + local innerRadius = vars.innerRadius + + local route = vars.route + local dbData = false + + local newGroupData + if gpName and not vars.groupData then + if string.lower(action) == 'teleport' or string.lower(action) == 'tele' then + newGroupData = mist.getCurrentGroupData(gpName) + elseif string.lower(action) == 'respawn' then + newGroupData = mist.getGroupData(gpName) + dbData = true + elseif string.lower(action) == 'clone' then + newGroupData = mist.getGroupData(gpName) + newGroupData.clone = 'order66' + dbData = true + else + action = 'tele' + newGroupData = mist.getCurrentGroupData(gpName) + end + else + action = 'tele' + newGroupData = vars.groupData + end - local diff = {['x'] = 0, ['y'] = 0} - local newCoord, origCoord - if point then - local valid = false - - local validTerrain - if string.lower(newGroupData.category) == 'ship' then - validTerrain = {'SHALLOW_WATER' , 'WATER'} - elseif string.lower(newGroupData.category) == 'vehicle' then - validTerrain = {'LAND', 'ROAD'} - else - validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} - end - - for i = 1, 100 do - newCoord = mist.getRandPointInCircle(point, radius, innerRadius) - if mist.isTerrainValid(newCoord, validTerrain) then - origCoord = mist.utils.deepCopy(newCoord) - diff = {['x'] = (newCoord.x - newGroupData.units[1].x), ['y'] = (newCoord.y - newGroupData.units[1].y)} - valid = true - break - end - end - if valid == false then - env.info('mist.teleportToPoint; vars.point not a valid coordinate') - return false - end - end - if not newGroupData.country and mist.DBs.groupsByName[newGroupData.groupName].country then - newGroupData.country = mist.DBs.groupsByName[newGroupData.groupName].country - end - if not newGroupData.category and mist.DBs.groupsByName[newGroupData.groupName].category then - newGroupData.category = mist.DBs.groupsByName[newGroupData.groupName].category - end - - for unitNum, unitData in pairs(newGroupData.units) do - if disperse then - if maxDisp and type(maxDisp) == 'number' and unitNum ~= 1 then - newCoord = mist.getRandPointInCircle(origCoord, maxDisp) - --else - --newCoord = mist.getRandPointInCircle(zone.point, zone.radius) - end + local diff = {['x'] = 0, ['y'] = 0} + local newCoord, origCoord + if point then + local valid = false + + local validTerrain + if string.lower(newGroupData.category) == 'ship' then + validTerrain = {'SHALLOW_WATER' , 'WATER'} + elseif string.lower(newGroupData.category) == 'vehicle' then + validTerrain = {'LAND', 'ROAD'} + else + validTerrain = {'LAND', 'ROAD', 'SHALLOW_WATER', 'WATER', 'RUNWAY'} + end + + for i = 1, 100 do + newCoord = mist.getRandPointInCircle(point, radius, innerRadius) + if mist.isTerrainValid(newCoord, validTerrain) then + origCoord = mist.utils.deepCopy(newCoord) + diff = {['x'] = (newCoord.x - newGroupData.units[1].x), ['y'] = (newCoord.y - newGroupData.units[1].y)} + valid = true + break + end + end + if valid == false then + env.info('mist.teleportToPoint; vars.point not a valid coordinate') + return false + end + end + if not newGroupData.country and mist.DBs.groupsByName[newGroupData.groupName].country then + newGroupData.country = mist.DBs.groupsByName[newGroupData.groupName].country + end + if not newGroupData.category and mist.DBs.groupsByName[newGroupData.groupName].category then + newGroupData.category = mist.DBs.groupsByName[newGroupData.groupName].category + end + + for unitNum, unitData in pairs(newGroupData.units) do + if disperse then + if maxDisp and type(maxDisp) == 'number' and unitNum ~= 1 then + newCoord = mist.getRandPointInCircle(origCoord, maxDisp) + --else + --newCoord = mist.getRandPointInCircle(zone.point, zone.radius) + end - newGroupData.units[unitNum]['x'] = newCoord.x - newGroupData.units[unitNum]['y'] = newCoord.y - else - newGroupData.units[unitNum]["x"] = unitData.x + diff.x - newGroupData.units[unitNum]["y"] = unitData.y + diff.y - end - if point then - if (newGroupData.category == 'plane' or newGroupData.category == 'helicopter') then - if point.z and point.y > 0 and point.y > land.getHeight({newGroupData.units[unitNum]["x"], newGroupData.units[unitNum]["y"]}) + 10 then - newGroupData.units[unitNum]["alt"] = point.y - else - if newGroupData.category == 'plane' then - newGroupData.units[unitNum]["alt"] = land.getHeight({newGroupData.units[unitNum]["x"], newGroupData.units[unitNum]["y"]}) + math.random(300, 9000) - else - newGroupData.units[unitNum]["alt"] = land.getHeight({newGroupData.units[unitNum]["x"], newGroupData.units[unitNum]["y"]}) + math.random(200, 3000) - end - end - end - end - end - - if newGroupData.start_time then - newGroupData.startTime = newGroupData.start_time - end - - if newGroupData.startTime and newGroupData.startTime ~= 0 and dbData == true then - local timeDif = timer.getAbsTime() - timer.getTime0() - if timeDif > newGroupData.startTime then - newGroupData.startTime = 0 - else - newGroupData.startTime = newGroupData.startTime - timeDif - end - - end + newGroupData.units[unitNum]['x'] = newCoord.x + newGroupData.units[unitNum]['y'] = newCoord.y + else + newGroupData.units[unitNum]["x"] = unitData.x + diff.x + newGroupData.units[unitNum]["y"] = unitData.y + diff.y + end + if point then + if (newGroupData.category == 'plane' or newGroupData.category == 'helicopter') then + if point.z and point.y > 0 and point.y > land.getHeight({newGroupData.units[unitNum]["x"], newGroupData.units[unitNum]["y"]}) + 10 then + newGroupData.units[unitNum]["alt"] = point.y + else + if newGroupData.category == 'plane' then + newGroupData.units[unitNum]["alt"] = land.getHeight({newGroupData.units[unitNum]["x"], newGroupData.units[unitNum]["y"]}) + math.random(300, 9000) + else + newGroupData.units[unitNum]["alt"] = land.getHeight({newGroupData.units[unitNum]["x"], newGroupData.units[unitNum]["y"]}) + math.random(200, 3000) + end + end + end + end + end + + if newGroupData.start_time then + newGroupData.startTime = newGroupData.start_time + end + + if newGroupData.startTime and newGroupData.startTime ~= 0 and dbData == true then + local timeDif = timer.getAbsTime() - timer.getTime0() + if timeDif > newGroupData.startTime then + newGroupData.startTime = 0 + else + newGroupData.startTime = newGroupData.startTime - timeDif + end + + end - if route then - newGroupData.route = route - end - --mist.debug.writeData(mist.utils.serialize,{'teleportToPoint', newGroupData}, 'newGroupData.lua') - if string.lower(newGroupData.category) == 'static' then - return mist.dynAddStatic(newGroupData) - end - return mist.dynAdd(newGroupData) - + if route then + newGroupData.route = route + end + --mist.debug.writeData(mist.utils.serialize,{'teleportToPoint', newGroupData}, 'newGroupData.lua') + if string.lower(newGroupData.category) == 'static' then + return mist.dynAddStatic(newGroupData) + end + return mist.dynAdd(newGroupData) + end mist.respawnInZone = function(gpName, zone, disperse, maxDisp) - if type(gpName) == 'table' and gpName:getName() then - gpName = gpName:getName() - elseif type(gpName) == 'table' and gpName[1]:getName() then - gpName = math.random(#gpName) - else - gpName = tostring(gpName) - end - - if type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - elseif type(zone) == 'table' and not zone.radius then - zone = trigger.misc.getZone(zone[math.random(1, #zone)]) - end - local vars = {} - vars.gpName = gpName - vars.action = 'respawn' - vars.point = zone.point - vars.radius = zone.radius - vars.disperse = disperse - vars.maxDisp = maxDisp - return mist.teleportToPoint(vars) + if type(gpName) == 'table' and gpName:getName() then + gpName = gpName:getName() + elseif type(gpName) == 'table' and gpName[1]:getName() then + gpName = math.random(#gpName) + else + gpName = tostring(gpName) + end + + if type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + elseif type(zone) == 'table' and not zone.radius then + zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + end + local vars = {} + vars.gpName = gpName + vars.action = 'respawn' + vars.point = zone.point + vars.radius = zone.radius + vars.disperse = disperse + vars.maxDisp = maxDisp + return mist.teleportToPoint(vars) end mist.cloneInZone = function(gpName, zone, disperse, maxDisp) - - if type(gpName) == 'table' then - gpName = gpName:getName() - else - gpName = tostring(gpName) - end - - if type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - elseif type(zone) == 'table' and not zone.radius then - zone = trigger.misc.getZone(zone[math.random(1, #zone)]) - end - local vars = {} - vars.gpName = gpName - vars.action = 'clone' - vars.point = zone.point - vars.radius = zone.radius - vars.disperse = disperse - vars.maxDisp = maxDisp - return mist.teleportToPoint(vars) + + if type(gpName) == 'table' then + gpName = gpName:getName() + else + gpName = tostring(gpName) + end + + if type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + elseif type(zone) == 'table' and not zone.radius then + zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + end + local vars = {} + vars.gpName = gpName + vars.action = 'clone' + vars.point = zone.point + vars.radius = zone.radius + vars.disperse = disperse + vars.maxDisp = maxDisp + return mist.teleportToPoint(vars) end mist.teleportInZone = function(gpName, zone, disperse, maxDisp) -- groupName, zoneName or table of Zone Names, keepForm is a boolean - if type(gpName) == 'table' and gpName:getName() then - gpName = gpName:getName() - else - gpName = tostring(gpName) - end - - if type(zone) == 'string' then - zone = trigger.misc.getZone(zone) - elseif type(zone) == 'table' and not zone.radius then - zone = trigger.misc.getZone(zone[math.random(1, #zone)]) - end - - local vars = {} - vars.gpName = gpName - vars.action = 'tele' - vars.point = zone.point - vars.radius = zone.radius - vars.disperse = disperse - vars.maxDisp = maxDisp - return mist.teleportToPoint(vars) + if type(gpName) == 'table' and gpName:getName() then + gpName = gpName:getName() + else + gpName = tostring(gpName) + end + + if type(zone) == 'string' then + zone = trigger.misc.getZone(zone) + elseif type(zone) == 'table' and not zone.radius then + zone = trigger.misc.getZone(zone[math.random(1, #zone)]) + end + + local vars = {} + vars.gpName = gpName + vars.action = 'tele' + vars.point = zone.point + vars.radius = zone.radius + vars.disperse = disperse + vars.maxDisp = maxDisp + return mist.teleportToPoint(vars) end mist.respawnGroup = function(gpName, task) - local vars = {} - vars.gpName = gpName - vars.action = 'respawn' - if task and type(task) ~= 'number' then - vars.route = mist.getGroupRoute(gpName, 'task') - end - local newGroup = mist.teleportToPoint(vars) - if task and type(task) == 'number' then - local newRoute = mist.getGroupRoute(gpName, 'task') - mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) - end - return newGroup + local vars = {} + vars.gpName = gpName + vars.action = 'respawn' + if task and type(task) ~= 'number' then + vars.route = mist.getGroupRoute(gpName, 'task') + end + local newGroup = mist.teleportToPoint(vars) + if task and type(task) == 'number' then + local newRoute = mist.getGroupRoute(gpName, 'task') + mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) + end + return newGroup end mist.cloneGroup = function(gpName, task) - local vars = {} - vars.gpName = gpName - vars.action = 'clone' - if task and type(task) ~= 'number' then - vars.route = mist.getGroupRoute(gpName, 'task') - end - local newGroup = mist.teleportToPoint(vars) - if task and type(task) == 'number' then - local newRoute = mist.getGroupRoute(gpName, 'task') - mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) - end - return newGroup + local vars = {} + vars.gpName = gpName + vars.action = 'clone' + if task and type(task) ~= 'number' then + vars.route = mist.getGroupRoute(gpName, 'task') + end + local newGroup = mist.teleportToPoint(vars) + if task and type(task) == 'number' then + local newRoute = mist.getGroupRoute(gpName, 'task') + mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) + end + return newGroup end mist.teleportGroup = function(gpName, task) - local vars = {} - vars.gpName = gpName - vars.action = 'teleport' - if task and type(task) ~= 'number' then - vars.route = mist.getGroupRoute(gpName, 'task') - end - local newGroup = mist.teleportToPoint(vars) - if task and type(task) == 'number' then - local newRoute = mist.getGroupRoute(gpName, 'task') - mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) - end - return newGroup + local vars = {} + vars.gpName = gpName + vars.action = 'teleport' + if task and type(task) ~= 'number' then + vars.route = mist.getGroupRoute(gpName, 'task') + end + local newGroup = mist.teleportToPoint(vars) + if task and type(task) == 'number' then + local newRoute = mist.getGroupRoute(gpName, 'task') + mist.scheduleFunction(mist.goRoute, {newGroup, newRoute}, timer.getTime() + task) + end + return newGroup end mist.spawnRandomizedGroup = function(groupName, vars) -- need to debug - if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then - local gpData = mist.getGroupData(groupName) - gpData.units = mist.randomizeGroupOrder(gpData.units, vars) - gpData.route = mist.getGroupRoute(groupName, 'task') - - mist.dynAdd(gpData) - end - - return true + if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true then + local gpData = mist.getGroupData(groupName) + gpData.units = mist.randomizeGroupOrder(gpData.units, vars) + gpData.route = mist.getGroupRoute(groupName, 'task') + + mist.dynAdd(gpData) + end + + return true end - + mist.randomizeNumTable = function(vars) - local newTable = {} - - local excludeIndex = {} - local randomTable = {} - - if vars and vars.exclude and type(vars.exclude) == 'table' then - for index, data in pairs(vars.exclude) do - excludeIndex[data] = true - end - end - - local low, hi, size - - if vars.size then - size = vars.size - end - - if vars and vars.lowerLimit and type(vars.lowerLimit) == 'number' then - low = mist.utils.round(vars.lowerLimit) - else - low = 1 - end - - if vars and vars.upperLimit and type(vars.upperLimit) == 'number' then - hi = mist.utils.round(vars.upperLimit) - else - hi = size - end + local newTable = {} + + local excludeIndex = {} + local randomTable = {} + + if vars and vars.exclude and type(vars.exclude) == 'table' then + for index, data in pairs(vars.exclude) do + excludeIndex[data] = true + end + end + + local low, hi, size + + if vars.size then + size = vars.size + end + + if vars and vars.lowerLimit and type(vars.lowerLimit) == 'number' then + low = mist.utils.round(vars.lowerLimit) + else + low = 1 + end + + if vars and vars.upperLimit and type(vars.upperLimit) == 'number' then + hi = mist.utils.round(vars.upperLimit) + else + hi = size + end - local choices = {} - -- add to exclude list and create list of what to randomize - for i = 1, size do - if not (i >= low and i <= hi) then + local choices = {} + -- add to exclude list and create list of what to randomize + for i = 1, size do + if not (i >= low and i <= hi) then - excludeIndex[i] = true - end - if not excludeIndex[i] then - table.insert(choices, i) - else - newTable[i] = i - end - end + excludeIndex[i] = true + end + if not excludeIndex[i] then + table.insert(choices, i) + else + newTable[i] = i + end + end - for ind, num in pairs(choices) do - local found = false - local x = 0 - while found == false do - x = mist.random(size) -- get random number from list - local addNew = true - for index, _ in pairs(excludeIndex) do - if index == x then - addNew = false - break - end - end - if addNew == true then - excludeIndex[x] = true - found = true - end - excludeIndex[x] = true - - end - newTable[num] = x - end - --[[ - for i = 1, #newTable do - env.info(newTable[i]) - end - ]] - return newTable + for ind, num in pairs(choices) do + local found = false + local x = 0 + while found == false do + x = mist.random(size) -- get random number from list + local addNew = true + for index, _ in pairs(excludeIndex) do + if index == x then + addNew = false + break + end + end + if addNew == true then + excludeIndex[x] = true + found = true + end + excludeIndex[x] = true + + end + newTable[num] = x + end + --[[ + for i = 1, #newTable do + env.info(newTable[i]) + end + ]] + return newTable end mist.randomizeGroupOrder = function(passedUnits, vars) - -- figure out what to exclude, and send data to other func - local units = passedUnits - - if passedUnits.units then - units = passUnits.units - end - - local exclude = {} - local excludeNum = {} - if vars and vars.excludeType and type(vars.excludeType) == 'table' then - exclude = vars.excludeType - end - - if vars and vars.excludeNum and type(vars.excludeNum) == 'table' then - excludeNum = vars.excludeNum - end - - local low, hi - - if vars and vars.lowerLimit and type(vars.lowerLimit) == 'number' then - low = mist.utils.round(vars.lowerLimit) - else - low = 1 - end - - if vars and vars.upperLimit and type(vars.upperLimit) == 'number' then - hi = mist.utils.round(vars.upperLimit) - else - hi = #units - end - + -- figure out what to exclude, and send data to other func + local units = passedUnits + + if passedUnits.units then + units = passUnits.units + end + + local exclude = {} + local excludeNum = {} + if vars and vars.excludeType and type(vars.excludeType) == 'table' then + exclude = vars.excludeType + end + + if vars and vars.excludeNum and type(vars.excludeNum) == 'table' then + excludeNum = vars.excludeNum + end + + local low, hi + + if vars and vars.lowerLimit and type(vars.lowerLimit) == 'number' then + low = mist.utils.round(vars.lowerLimit) + else + low = 1 + end + + if vars and vars.upperLimit and type(vars.upperLimit) == 'number' then + hi = mist.utils.round(vars.upperLimit) + else + hi = #units + end + - local excludeNum = {} - for unitIndex, unitData in pairs(units) do - if unitIndex >= low and unitIndex <= hi then -- if within range - local found = false - if #exclude > 0 then - for excludeType, index in pairs(exclude) do -- check if excluded - if mist.stringMatch(excludeType, unitData.type) then -- if excluded - excludeNum[unitIndex] = unitIndex - found = true - end - end - end - else -- unitIndex is either to low, or to high: added to exclude list - excludeNum[unitIndex] = unitId - end - end - - local newGroup = {} - local newOrder = mist.randomizeNumTable({exclude = excludeNum, size = #units}) + local excludeNum = {} + for unitIndex, unitData in pairs(units) do + if unitIndex >= low and unitIndex <= hi then -- if within range + local found = false + if #exclude > 0 then + for excludeType, index in pairs(exclude) do -- check if excluded + if mist.stringMatch(excludeType, unitData.type) then -- if excluded + excludeNum[unitIndex] = unitIndex + found = true + end + end + end + else -- unitIndex is either to low, or to high: added to exclude list + excludeNum[unitIndex] = unitId + end + end + + local newGroup = {} + local newOrder = mist.randomizeNumTable({exclude = excludeNum, size = #units}) - for unitIndex, unitData in pairs(units) do - for i = 1, #newOrder do - if newOrder[i] == unitIndex then - newGroup[i] = mist.utils.deepCopy(units[i]) -- gets all of the unit data - newGroup[i].type = mist.utils.deepCopy(unitData.type) - newGroup[i].skill = mist.utils.deepCopy(unitData.skill) - newGroup[i].unitName = mist.utils.deepCopy(unitData.unitName) - newGroup[i].unitIndex = mist.utils.deepCopy(unitData.unitIndex) -- replaces the units data with a new type - end - end - end - return newGroup -end + for unitIndex, unitData in pairs(units) do + for i = 1, #newOrder do + if newOrder[i] == unitIndex then + newGroup[i] = mist.utils.deepCopy(units[i]) -- gets all of the unit data + newGroup[i].type = mist.utils.deepCopy(unitData.type) + newGroup[i].skill = mist.utils.deepCopy(unitData.skill) + newGroup[i].unitName = mist.utils.deepCopy(unitData.unitName) + newGroup[i].unitIndex = mist.utils.deepCopy(unitData.unitIndex) -- replaces the units data with a new type + end + end + end + return newGroup +end mist.ground.patrolRoute = function(vars) - - - local tempRoute = {} - local useRoute = {} - local gpData = vars.gpData - if type(gpData) == 'string' then - gpData = Group.getByName(gpData) - end - - local useGroupRoute - if not vars.useGroupRoute then - useGroupRoute = vars.gpData - else - useGroupRoute = vars.useGroupRoute - end - local routeProvided = false - if not vars.route then - if useGroupRoute then - tempRoute = mist.getGroupRoute(useGroupRoute) - end - else - useRoute = vars.route - local posStart = mist.getLeadPos(gpData) - useRoute[1] = mist.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed) - routeProvided = true - end - - - local overRideSpeed = vars.speed or 'default' - local pType = vars.pType - local offRoadForm = vars.offRoadForm or 'default' - local onRoadForm = vars.onRoadForm or 'default' - - if routeProvided == false and #tempRoute > 0 then - local posStart = mist.getLeadPos(gpData) - - - useRoute[#useRoute + 1] = mist.ground.buildWP(posStart, offRoadForm, overRideSpeed) - for i = 1, #tempRoute do - local tempForm = tempRoute[i].action - local tempSpeed = tempRoute[i].speed - - if offRoadForm == 'default' then - tempForm = tempRoute[i].action - end - if onRoadForm == 'default' then - onRoadForm = 'On Road' - end - if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then - tempForm = onRoadForm - else - tempForm = offRoadForm - end - - if type(overRideSpeed) == 'number' then - tempSpeed = overRideSpeed - end - - - useRoute[#useRoute + 1] = mist.ground.buildWP(tempRoute[i], tempForm, tempSpeed) - end - - if pType and string.lower(pType) == 'doubleback' then - local curRoute = mist.utils.deepCopy(useRoute) - for i = #curRoute, 2, -1 do - useRoute[#useRoute + 1] = mist.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed) - end - end - - useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP - end - - local cTask3 = {} - local newPatrol = {} - newPatrol.route = useRoute - newPatrol.gpData = gpData:getName() - cTask3[#cTask3 + 1] = 'mist.ground.patrolRoute(' - cTask3[#cTask3 + 1] = mist.utils.oneLineSerialize(newPatrol) - cTask3[#cTask3 + 1] = ')' - cTask3 = table.concat(cTask3) - local tempTask = { - id = 'WrappedAction', - params = { - action = { - id = 'Script', - params = { - command = cTask3, - - }, - }, - }, - } + + + local tempRoute = {} + local useRoute = {} + local gpData = vars.gpData + if type(gpData) == 'string' then + gpData = Group.getByName(gpData) + end + + local useGroupRoute + if not vars.useGroupRoute then + useGroupRoute = vars.gpData + else + useGroupRoute = vars.useGroupRoute + end + local routeProvided = false + if not vars.route then + if useGroupRoute then + tempRoute = mist.getGroupRoute(useGroupRoute) + end + else + useRoute = vars.route + local posStart = mist.getLeadPos(gpData) + useRoute[1] = mist.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed) + routeProvided = true + end + + + local overRideSpeed = vars.speed or 'default' + local pType = vars.pType + local offRoadForm = vars.offRoadForm or 'default' + local onRoadForm = vars.onRoadForm or 'default' + + if routeProvided == false and #tempRoute > 0 then + local posStart = mist.getLeadPos(gpData) + + + useRoute[#useRoute + 1] = mist.ground.buildWP(posStart, offRoadForm, overRideSpeed) + for i = 1, #tempRoute do + local tempForm = tempRoute[i].action + local tempSpeed = tempRoute[i].speed + + if offRoadForm == 'default' then + tempForm = tempRoute[i].action + end + if onRoadForm == 'default' then + onRoadForm = 'On Road' + end + if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then + tempForm = onRoadForm + else + tempForm = offRoadForm + end + + if type(overRideSpeed) == 'number' then + tempSpeed = overRideSpeed + end + + + useRoute[#useRoute + 1] = mist.ground.buildWP(tempRoute[i], tempForm, tempSpeed) + end + + if pType and string.lower(pType) == 'doubleback' then + local curRoute = mist.utils.deepCopy(useRoute) + for i = #curRoute, 2, -1 do + useRoute[#useRoute + 1] = mist.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed) + end + end + + useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP + end + + local cTask3 = {} + local newPatrol = {} + newPatrol.route = useRoute + newPatrol.gpData = gpData:getName() + cTask3[#cTask3 + 1] = 'mist.ground.patrolRoute(' + cTask3[#cTask3 + 1] = mist.utils.oneLineSerialize(newPatrol) + cTask3[#cTask3 + 1] = ')' + cTask3 = table.concat(cTask3) + local tempTask = { + id = 'WrappedAction', + params = { + action = { + id = 'Script', + params = { + command = cTask3, + + }, + }, + }, + } - - useRoute[#useRoute].task = tempTask - mist.goRoute(gpData, useRoute) - - return + + useRoute[#useRoute].task = tempTask + mist.goRoute(gpData, useRoute) + + return end mist.ground.patrol = function(gpData, pType, form, speed) - local vars = {} - - if type(gpData) == 'table' and gpData:getName() then - gpData = gpData:getName() - end - - vars.useGroupRoute = gpData - vars.gpData = gpData - vars.pType = pType - vars.offRoadForm = form - vars.speed = speed - - mist.ground.patrolRoute(vars) + local vars = {} + + if type(gpData) == 'table' and gpData:getName() then + gpData = gpData:getName() + end + + vars.useGroupRoute = gpData + vars.gpData = gpData + vars.pType = pType + vars.offRoadForm = form + vars.speed = speed + + mist.ground.patrolRoute(vars) - return + return end mist.random = function(firstNum, secondNum) -- no support for decimals - local lowNum, highNum - if not secondNum then - highNum = firstNum - lowNum = 1 - else - lowNum = firstNum - highNum = secondNum - end - local total = 1 - if math.abs(highNum - lowNum + 1) < 50 then -- if total values is less than 50 - total = math.modf(50/math.abs(highNum - lowNum + 1)) -- make x copies required to be above 50 - end - local choices = {} - for i = 1, total do -- iterate required number of times - for x = lowNum, highNum do -- iterate between the range - choices[#choices +1] = x -- add each entry to a table - end - end - local rtnVal = math.random(#choices) -- will now do a math.random of at least 50 choices - for i = 1, 10 do - rtnVal = math.random(#choices) -- iterate a few times for giggles - end - return choices[rtnVal] + local lowNum, highNum + if not secondNum then + highNum = firstNum + lowNum = 1 + else + lowNum = firstNum + highNum = secondNum + end + local total = 1 + if math.abs(highNum - lowNum + 1) < 50 then -- if total values is less than 50 + total = math.modf(50/math.abs(highNum - lowNum + 1)) -- make x copies required to be above 50 + end + local choices = {} + for i = 1, total do -- iterate required number of times + for x = lowNum, highNum do -- iterate between the range + choices[#choices +1] = x -- add each entry to a table + end + end + local rtnVal = math.random(#choices) -- will now do a math.random of at least 50 choices + for i = 1, 10 do + rtnVal = math.random(#choices) -- iterate a few times for giggles + end + return choices[rtnVal] end mist.stringMatch = function(s1, s2, bool) - local exclude = {'%-', '%(', '%)', '%_', '%[', '%]', '%.', '%#', '% ', '%{', '%}', '%$', '%%', '%?', '%+', '%^'} - if type(s1) == 'string' and type(s2) == 'string' then - for i , str in pairs(exclude) do - s1 = string.gsub(s1, str, '') - s2 = string.gsub(s2, str, '') - end - if not bool then - s1 = string.lower(s1) - s2 = string.lower(s2) - end - - if s1 == s2 then - return true - else - return false - end - else - env.info('mist.stringMatch; Either the first or second variable were not a string') - return false - end + local exclude = {'%-', '%(', '%)', '%_', '%[', '%]', '%.', '%#', '% ', '%{', '%}', '%$', '%%', '%?', '%+', '%^'} + if type(s1) == 'string' and type(s2) == 'string' then + for i , str in pairs(exclude) do + s1 = string.gsub(s1, str, '') + s2 = string.gsub(s2, str, '') + end + if not bool then + s1 = string.lower(s1) + s2 = string.lower(s2) + end + + if s1 == s2 then + return true + else + return false + end + else + env.info('mist.stringMatch; Either the first or second variable were not a string') + return false + end end mist.matchString = mist.stringMatch -- both commands work because order out type of I @@ -5751,88 +5822,88 @@ mist.time = {} -- if present current time in mil time is returned -- if number or table the time is converted into mil tim mist.time.convertToSec = function(timeTable) - - timeInSec = 0 - if timeTable and type(timeTable) == 'number' then - timeInSec = timeTable - elseif timeTable and type(timeTable) == 'table' and (timeTable.d or timeTable.h or timeTable.m or timeTable.s) then - if timeTable.d and type(timeTable.d) == 'number' then - timeInSec = timeInSec + (timeTable.d*86400) - end - if timeTable.h and type(timeTable.h) == 'number' then - timeInSec = timeInSec + (timeTable.h*3600) - end - if timeTable.m and type(timeTable.m) == 'number' then - timeInSec = timeInSec + (timeTable.m*60) - end - if timeTable.s and type(timeTable.s) == 'number' then - timeInSec = timeInSec + timeTable.s - end - - end - return timeInSec + + timeInSec = 0 + if timeTable and type(timeTable) == 'number' then + timeInSec = timeTable + elseif timeTable and type(timeTable) == 'table' and (timeTable.d or timeTable.h or timeTable.m or timeTable.s) then + if timeTable.d and type(timeTable.d) == 'number' then + timeInSec = timeInSec + (timeTable.d*86400) + end + if timeTable.h and type(timeTable.h) == 'number' then + timeInSec = timeInSec + (timeTable.h*3600) + end + if timeTable.m and type(timeTable.m) == 'number' then + timeInSec = timeInSec + (timeTable.m*60) + end + if timeTable.s and type(timeTable.s) == 'number' then + timeInSec = timeInSec + timeTable.s + end + + end + return timeInSec end mist.time.getDHMS = function(timeInSec) - if timeInSec and type(timeInSec) == 'number' then - local tbl = {d = 0, h = 0, m = 0, s = 0} - if timeInSec > 86400 then - while timeInSec > 86400 do - tbl.d = tbl.d + 1 - timeInSec = timeInSec - 86400 - end - end - if timeInSec > 3600 then - while timeInSec > 3600 do - tbl.h = tbl.h + 1 - timeInSec = timeInSec - 3600 - end - end - if timeInSec > 60 then - while timeInSec > 60 do - tbl.m = tbl.m + 1 - timeInSec = timeInSec - 60 - end - end - tbl.s = timeInSec - return tbl - else - env.info('mist.time.getDHMS didnt recieve number') - return - end + if timeInSec and type(timeInSec) == 'number' then + local tbl = {d = 0, h = 0, m = 0, s = 0} + if timeInSec > 86400 then + while timeInSec > 86400 do + tbl.d = tbl.d + 1 + timeInSec = timeInSec - 86400 + end + end + if timeInSec > 3600 then + while timeInSec > 3600 do + tbl.h = tbl.h + 1 + timeInSec = timeInSec - 3600 + end + end + if timeInSec > 60 then + while timeInSec > 60 do + tbl.m = tbl.m + 1 + timeInSec = timeInSec - 60 + end + end + tbl.s = timeInSec + return tbl + else + env.info('mist.time.getDHMS didnt recieve number') + return + end end mist.getMilString = function(theTime) - local timeInSec = 0 - if theTime then - timeInSec = mist.time.convertToSec(theTime) - else - timeInSec = mist.utils.round(timer.getAbsTime(), 0) - end - - local DHMS = mist.time.getDHMS(timeInSec) - - return tostring(string.format('%02d', DHMS.h) .. string.format('%02d',DHMS.m)) + local timeInSec = 0 + if theTime then + timeInSec = mist.time.convertToSec(theTime) + else + timeInSec = mist.utils.round(timer.getAbsTime(), 0) + end + + local DHMS = mist.time.getDHMS(timeInSec) + + return tostring(string.format('%02d', DHMS.h) .. string.format('%02d',DHMS.m)) end mist.getClockString = function(theTime, hour) - local timeInSec = 0 - if theTime then - timeInSec = mist.time.convertToSec(theTime) - else - timeInSec = mist.utils.round(timer.getAbsTime(), 0) - end - local DHMS = mist.time.getDHMS(timeInSec) - if hour then - if DHMS.h > 12 then - DHMS.h = DHMS.h - 12 - return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s) .. ' PM') - else - return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s) .. ' AM') - end - else - return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s)) - end + local timeInSec = 0 + if theTime then + timeInSec = mist.time.convertToSec(theTime) + else + timeInSec = mist.utils.round(timer.getAbsTime(), 0) + end + local DHMS = mist.time.getDHMS(timeInSec) + if hour then + if DHMS.h > 12 then + DHMS.h = DHMS.h - 12 + return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s) .. ' PM') + else + return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s) .. ' AM') + end + else + return tostring(string.format('%02d', DHMS.h) .. ':' .. string.format('%02d',DHMS.m) .. ':' .. string.format('%02d',DHMS.s)) + end end -- returns the date in string format @@ -5840,196 +5911,196 @@ end -- first val returns with the month as a string -- 2nd val defins if it should be written the American way or the wrong way. mist.time.getDate = function(convert) - local cal = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -- starts at june. 2011. 2012 is leap year, sigh. add a simple check for leap year - local date = {} - date.d = 0 - date.m = 6 - date.y = 2011 + local cal = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -- starts at june. 2011. 2012 is leap year, sigh. add a simple check for leap year + local date = {} + date.d = 0 + date.m = 6 + date.y = 2011 - local start = 0 - local timeInSec = mist.utils.round(timer.getAbsTime()) - if convert and type(convert) == 'number' then - timeInSec = convert - end - - while start < timeInSec do - - if date.d == cal[date.m] then - --if y % 4 >= 0 and i == 2 then -- for leap year. DCS doesnt do leapyear, but I am keeping the code dormant because maybe with WW2 the mission year may become relevant - - --else - date.m = date.m + 1 - date.d = 0 - --end - end - if date.m == 13 then - date.m = 1 - date.y = date.y + 1 - end - date.d = date.d + 1 - start = start + 86400 - end - return date + local start = 0 + local timeInSec = mist.utils.round(timer.getAbsTime()) + if convert and type(convert) == 'number' then + timeInSec = convert + end + + while start < timeInSec do + + if date.d == cal[date.m] then + --if y % 4 >= 0 and i == 2 then -- for leap year. DCS doesnt do leapyear, but I am keeping the code dormant because maybe with WW2 the mission year may become relevant + + --else + date.m = date.m + 1 + date.d = 0 + --end + end + if date.m == 13 then + date.m = 1 + date.y = date.y + 1 + end + date.d = date.d + 1 + start = start + 86400 + end + return date end mist.time.relativeToStart = function(time) - if type(time) == 'number' then - return time - timer.getTime0() - end + if type(time) == 'number' then + return time - timer.getTime0() + end end mist.getDateString = function(rtnType, murica, oTime) -- returns date based on time - local word = {'January', 'Feburary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' } -- 'etc - local curTime = 0 - if oTime then - curTime = oTime - else - curTime = mist.utils.round(timer.getAbsTime()) - end - local tbl = mist.time.getDate(curTime) - - if rtnType then - if murica then - return tostring(word[tbl.m] .. ' ' .. tbl.d .. ' ' .. tbl.y) - else - return tostring(tbl.d .. ' ' .. word[tbl.m] .. ' ' .. tbl.y) - end - else - if murica then - return tostring(tbl.m .. '.' .. tbl.d .. '.' .. tbl.y) - else - return tostring(tbl.d .. '.' .. tbl.m .. '.' .. tbl.y) - end - end + local word = {'January', 'Feburary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' } -- 'etc + local curTime = 0 + if oTime then + curTime = oTime + else + curTime = mist.utils.round(timer.getAbsTime()) + end + local tbl = mist.time.getDate(curTime) + + if rtnType then + if murica then + return tostring(word[tbl.m] .. ' ' .. tbl.d .. ' ' .. tbl.y) + else + return tostring(tbl.d .. ' ' .. word[tbl.m] .. ' ' .. tbl.y) + end + else + if murica then + return tostring(tbl.m .. '.' .. tbl.d .. '.' .. tbl.y) + else + return tostring(tbl.d .. '.' .. tbl.m .. '.' .. tbl.y) + end + end end --WIP mist.time.milToGame = function(milString, rtnType) --converts a military time. By default returns the abosolute time that event would occur. With optional value it returns how many seconds from time of call till that time. - local curTime = mist.utils.round(timer.getAbsTime()) - local milTimeInSec = 0 + local curTime = mist.utils.round(timer.getAbsTime()) + local milTimeInSec = 0 - if milString and type(milString) == 'string' and string.len(milString) >= 4 then - local hr = tonumber(string.sub(milString, 1, 2)) - local mi = tonumber(string.sub(milString, 3)) - milTimeInSec = milTimeInSec + (mi*60) + (hr*3600) - elseif milString and type(milString) == 'table' and (milString.d or milString.h or milString.m or milString.s) then - milTimeInSec = mist.time.convertToSec(milString) - end - - local startTime = timer.getTime0() - local daysOffset = 0 - if startTime > 86400 then - daysOffset = mist.utils.round(startTime/86400) - if daysOffset > 0 then - milTimeInSec = milTimeInSec *daysOffset - end - end - - if curTime > milTimeInSec then - milTimeInSec = milTimeInSec + 86400 - end - if rtnType then - milTimeInSec = milTimeInSec - startTime - end - return milTimeInSec + if milString and type(milString) == 'string' and string.len(milString) >= 4 then + local hr = tonumber(string.sub(milString, 1, 2)) + local mi = tonumber(string.sub(milString, 3)) + milTimeInSec = milTimeInSec + (mi*60) + (hr*3600) + elseif milString and type(milString) == 'table' and (milString.d or milString.h or milString.m or milString.s) then + milTimeInSec = mist.time.convertToSec(milString) + end + + local startTime = timer.getTime0() + local daysOffset = 0 + if startTime > 86400 then + daysOffset = mist.utils.round(startTime/86400) + if daysOffset > 0 then + milTimeInSec = milTimeInSec *daysOffset + end + end + + if curTime > milTimeInSec then + milTimeInSec = milTimeInSec + 86400 + end + if rtnType then + milTimeInSec = milTimeInSec - startTime + end + return milTimeInSec end mist.DBs.const = {} --[[ - ['LAND'] = 1, - ['SHALLOW_WATER'] = 2, - ['WATER'] = 3, - ['ROAD'] = 4, - ['RUNWAY'] = 5 + ['LAND'] = 1, + ['SHALLOW_WATER'] = 2, + ['WATER'] = 3, + ['ROAD'] = 4, + ['RUNWAY'] = 5 ]] --[[mist.DBs.const.ME_SSE_terms = { - ['ME'] = { - ['vehicle'] = {'GROUND', 'GROUND_UNIT'}, - ['plane'] = {'AIRPLANE'}, - }, - ['SSE'] = { - }, + ['ME'] = { + ['vehicle'] = {'GROUND', 'GROUND_UNIT'}, + ['plane'] = {'AIRPLANE'}, + }, + ['SSE'] = { + }, }]] mist.DBs.const.callsigns = { -- not accessible by SSE, must use static list :-/ - ['NATO'] = { - ['rules'] = { - ['groupLimit'] = 9, - }, - ['AWACS'] = { - ['Overlord'] = 1, - ['Magic'] = 2, - ['Wizard'] = 3, - ['Focus'] = 4, - ['Darkstar'] = 5, - }, - ['TANKER'] = { - ['Texaco'] = 1, - ['Arco'] = 2, - ['Shell'] = 3, - }, - ['JTAC'] = { - ['Axeman'] = 1, - ['Darknight'] = 2, - ['Warrior'] = 3, - ['Pointer'] = 4, - ['Eyeball'] = 5, - ['Moonbeam'] = 6, - ['Whiplash'] = 7, - ['Finger'] = 8, - ['Pinpoint'] = 9, - ['Ferret'] = 10, - ['Shaba'] = 11, - ['Playboy'] = 12, - ['Hammer'] = 13, - ['Jaguar'] = 14, - ['Deathstar'] = 15, - ['Anvil'] = 16, - ['Firefly'] = 17, - ['Mantis'] = 18, - ['Badger'] = 19, - }, - ['aircraft'] = { - ['Enfield'] = 1, - ['Springfield'] = 2, - ['Uzi'] = 3, - ['Colt'] = 4, - ['Dodge'] = 5, - ['Ford'] = 6, - ['Chevy'] = 7, - ['Pontiac'] = 8, - }, - - ['unique'] = { - ['A10'] = { - ['Hawg'] = 9, - ['Boar'] = 10, - ['Pig'] = 11, - ['Tusk'] = 12, - ['rules'] = { - ['canUseAircraft'] = true, - ['appliesTo'] = { - 'A-10C', - 'A-10A', - }, - }, - }, - }, - }, + ['NATO'] = { + ['rules'] = { + ['groupLimit'] = 9, + }, + ['AWACS'] = { + ['Overlord'] = 1, + ['Magic'] = 2, + ['Wizard'] = 3, + ['Focus'] = 4, + ['Darkstar'] = 5, + }, + ['TANKER'] = { + ['Texaco'] = 1, + ['Arco'] = 2, + ['Shell'] = 3, + }, + ['JTAC'] = { + ['Axeman'] = 1, + ['Darknight'] = 2, + ['Warrior'] = 3, + ['Pointer'] = 4, + ['Eyeball'] = 5, + ['Moonbeam'] = 6, + ['Whiplash'] = 7, + ['Finger'] = 8, + ['Pinpoint'] = 9, + ['Ferret'] = 10, + ['Shaba'] = 11, + ['Playboy'] = 12, + ['Hammer'] = 13, + ['Jaguar'] = 14, + ['Deathstar'] = 15, + ['Anvil'] = 16, + ['Firefly'] = 17, + ['Mantis'] = 18, + ['Badger'] = 19, + }, + ['aircraft'] = { + ['Enfield'] = 1, + ['Springfield'] = 2, + ['Uzi'] = 3, + ['Colt'] = 4, + ['Dodge'] = 5, + ['Ford'] = 6, + ['Chevy'] = 7, + ['Pontiac'] = 8, + }, + + ['unique'] = { + ['A10'] = { + ['Hawg'] = 9, + ['Boar'] = 10, + ['Pig'] = 11, + ['Tusk'] = 12, + ['rules'] = { + ['canUseAircraft'] = true, + ['appliesTo'] = { + 'A-10C', + 'A-10A', + }, + }, + }, + }, + }, } --[[ scope: - { - units = {...}, -- unit names. - coa = {...}, -- coa names - countries = {...}, -- country names - CA = {...}, -- looks just like coa. - unitTypes = { red = {}, blue = {}, all = {}, Russia = {},} - } - - + { + units = {...}, -- unit names. + coa = {...}, -- coa names + countries = {...}, -- country names + CA = {...}, -- looks just like coa. + unitTypes = { red = {}, blue = {}, all = {}, Russia = {},} + } + + scope examples: { units = { 'Hawg11', 'Hawg12' }, CA = {'blue'} } From 88edb9587266dd0fb43bd12c9524b11539a1bf4d Mon Sep 17 00:00:00 2001 From: Ciaran Fisher Date: Sun, 20 Mar 2016 12:52:20 +0000 Subject: [PATCH 3/3] Release 1.60 Updated README Tested and updated missions --- CTLD.lua | 8 +++--- Cargo Spawn Test.miz | Bin 84475 -> 87443 bytes Pickup-Dropoff-Demo.miz | Bin 485473 -> 488158 bytes README.md | 53 +++++++++++++++++++++++++++++++++++----- test-fob.miz | Bin 485352 -> 488037 bytes test-mission.miz | Bin 499351 -> 500476 bytes 6 files changed, 51 insertions(+), 10 deletions(-) diff --git a/CTLD.lua b/CTLD.lua index 6956406..9418c6d 100644 --- a/CTLD.lua +++ b/CTLD.lua @@ -31,7 +31,7 @@ ctld.staticBugFix = true -- When statics are destroyed, DCS Crashes. Set this t 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 -ctld.hoverPickup = true -- if set to false you can load crates with the F10 menu instead of hovering +ctld.hoverPickup = true -- if set to false you can load crates with the F10 menu instead of hovering... ctld.enableCrates = true -- if false, Helis will not be able to spawn or unpack crates so will be normal CTTS ctld.slingLoad = false -- if false, crates can be used WITHOUT slingloading, by hovering above the crate, simulating slingloading but not the weight... @@ -3355,7 +3355,7 @@ function ctld.getAASystemDetails(_hawkGroup,_aaSystemTemplate) local _hawkDetails = {} for _, _unit in pairs(_units) do - table.insert(_hawkDetails, { point = _unit:getPoint(), unit = _unit:getTypeName(), name = _unit:getName(), system=_aaSystemTemplate}) + table.insert(_hawkDetails, { point = _unit:getPoint(), unit = _unit:getTypeName(), name = _unit:getName(), system =_aaSystemTemplate}) end return _hawkDetails @@ -3492,7 +3492,7 @@ function ctld.unpackAASystem(_heli, _nearestCrate, _nearbyCrates,_aaSystemTempla ctld.processCallback({unit = _heli, crate = _nearestCrate , spawnedGroup = _spawnedGroup, action = "unpack"}) - trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully deployed a full ".._aaSystemTemplate.name.." to the field. \n\nAA Active System limit is: ".._allowed, 10) + trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully deployed a full ".._aaSystemTemplate.name.." to the field. \n\nAA Active System limit is: ".._allowed.."\nActive: "..(_activeLaunchers+1), 10) end end @@ -3525,7 +3525,7 @@ function ctld.countCompleteAASystems(_heli) if _units ~=nil and #_units > 0 then --get the system template - local _aaSystemTemplate = _hawkDetails.system + local _aaSystemTemplate = _hawkDetails[1].system local _uniqueTypes = {} -- stores each unique part of system local _types = {} diff --git a/Cargo Spawn Test.miz b/Cargo Spawn Test.miz index 730408d532f5b510a4fe129fe7e9d699fc11e888..ab009bc1fb219cb851dd1bd076e6534eb91f163f 100644 GIT binary patch delta 79425 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 z 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

*zk&Cu2NCB+N8xclEiD_3{$YV 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 delta 76430 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

Qc@i=)yk1~? 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 delta 76774 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 AtN;K2 diff --git a/README.md b/README.md index fcb6b15..9159a65 100644 --- a/README.md +++ b/README.md @@ -96,26 +96,34 @@ To use the real cargo sling behaviour, set the ```ctld.slingLoad``` option to `` -- ************************************************************************ -- ********************* USER CONFIGURATION ****************************** -- ************************************************************************ +ctld.staticBugFix = true -- When statics are destroyed, DCS Crashes. Set this to FALSE when this bug is fixed or if you want to use REAL sling loads :) + 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 +ctld.hoverPickup = true -- if set to false you can load crates with the F10 menu instead of hovering...! + ctld.enableCrates = true -- if false, Helis will not be able to spawn or unpack crates so will be normal CTTS ctld.slingLoad = false -- if false, crates can be used WITHOUT slingloading, by hovering above the crate, simulating slingloading but not the weight... -- There are some bug with Sling-loading that can cause crashes, if these occur set slingLoad to false -- to use the other method. +-- Set staticBugFix to FALSE if use set ctld.slingLoad to TRUE ctld.enableSmokeDrop = true -- if false, helis and c-130 will not be able to drop smoke ctld.maxExtractDistance = 125 -- max distance from vehicle to troops to allow a group extraction ctld.maximumDistanceLogistic = 200 -- max distance from vehicle to logistics to allow a loading or spawning operation ctld.maximumSearchDistance = 4000 -- max distance for troops to search for enemy -ctld.maximumMoveDistance = 1000 -- max distance for troops to move from drop point if no enemy is nearby +ctld.maximumMoveDistance = 2000 -- max distance for troops to move from drop point if no enemy is nearby ctld.numberOfTroops = 10 -- default number of troops to load on a transport heli or C-130 +ctld.enableFastRopeInsertion = true -- allows you to drop troops by fast rope +ctld.fastRopeMaximumHeight = 18.28 -- in meters which is 60 ft max fast rope (not rappell) safe height ctld.vehiclesForTransportRED = { "BRDM-2", "BTR_D" } -- vehicles to load onto Il-76 - Alternatives {"Strela-1 9P31","BMP-1"} ctld.vehiclesForTransportBLUE = { "M1045 HMMWV TOW", "M1043 HMMWV Armament" } -- vehicles to load onto c130 - Alternatives {"M1128 Stryker MGS","M1097 Avenger"} -ctld.hawkLaunchers = 3 -- controls how many launchers to add to the hawk when its spawned. +ctld.aaLaunchers = 3 -- controls how many launchers to add to the kub/buk when its spawned. +ctld.hawkLaunchers = 5 -- controls how many launchers to add to the hawk when its spawned. ctld.spawnRPGWithCoalition = true --spawns a friendly RPG unit with Coalition forces ctld.spawnStinger = false -- spawns a stinger / igla soldier with a group of 6 or more soldiers! @@ -125,7 +133,9 @@ ctld.enabledFOBBuilding = true -- if true, you can load a crate INTO a C-130 tha -- You can also enable troop Pickup at FOBS ctld.cratesRequiredForFOB = 3 -- The amount of crates required to build a FOB. Once built, helis can spawn crates at this outpost to be carried and deployed in another area. --- The crates can only be loaded and dropped by large aircraft, like the C-130 and listed in ctld.vehicleTransportEnabled +-- The large crates can only be loaded and dropped by large aircraft, like the C-130 and listed in ctld.vehicleTransportEnabled +-- Small FOB crates can be moved by helicopter. The FOB will require ctld.cratesRequiredForFOB larges crates and small crates are 1/3 of a large fob crate +-- To build the FOB entirely out of small crates you will need ctld.cratesRequiredForFOB * 3 ctld.troopPickupAtFOB = true -- if true, troops can also be picked up at a created FOB @@ -134,9 +144,34 @@ ctld.buildTimeFOB = 120 --time in seconds for the FOB to be built ctld.radioSound = "beacon.ogg" -- the name of the sound file to use for the FOB radio beacons. If this isnt added to the mission BEACONS WONT WORK! ctld.radioSoundFC3 = "beaconsilent.ogg" -- name of the second silent radio file, used so FC3 aircraft dont hear ALL the beacon noises... :) -ctld.deployedBeaconBattery = 20 -- the battery on deployed beacons will last for this number minutes before needing to be re-deployed +ctld.deployedBeaconBattery = 30 -- the battery on deployed beacons will last for this number minutes before needing to be re-deployed ctld.enabledRadioBeaconDrop = true -- if its set to false then beacons cannot be dropped by units + +ctld.allowRandomAiTeamPickups = false -- Allows the AI to randomize the loading of infantry teams (specified below) at pickup zones + +-- Simulated Sling load configuration + +ctld.minimumHoverHeight = 7.5 -- Lowest allowable height for crate hover +ctld.maximumHoverHeight = 12.0 -- Highest allowable height for crate hover +ctld.maxDistanceFromCrate = 5.5 -- Maximum distance from from crate for hover +ctld.hoverTime = 10 -- Time to hold hover above a crate for loading in seconds + +-- end of Simulated Sling load configuration + +-- AA SYSTEM CONFIG -- +-- Sets a limit on the number of active AA systems that can be built for RED. +-- A system is counted as Active if its fully functional and has all parts +-- If a system is partially destroyed, it no longer counts towards the total +-- When this limit is hit, a player will still be able to get crates for an AA system, just unable +-- to unpack them + +ctld.AASystemLimitRED = 20 -- Red side limit + +ctld.AASystemLimitBLUE = 20 -- Blue side limit + +--END AA SYSTEM CONFIG -- + ``` To change what units can be dropped from crates modify the spawnable crates section. An extra parameter, ```cratesRequired = NUMBER``` can be added so you need more than one crate to build a unit. This parameter cannot be used for the HAWK, BUK or KUB system as that is already broken into 3 crates. You can also specify the coalition side so RED and BLUE have different crates to drop. If the parameter is missing the crate will appear for both sides. @@ -326,7 +361,7 @@ Spawned beacons will broadcast on HF/FM, UHF and VHF until their battery runs ou **Again, beacons will not work if beacon.ogg and beaconsilent.ogg are not in the mission!** -#### Create Extract Zone +#### Create / Remove Extract Zone An extact zone is a zone where troops (not vehicles) can be dropped by transports and used to trigger another action based on the number of troops dropped. The radius of the zone sets how big the extract zone will be. When troops are dropped, the troops disappear and the number of troops dropped added to the flag number configured by the function. This means you can make a trigger such that 10 troops have to be rescued and dropped at the extract zone, and when this happens you can trigger another action. @@ -336,6 +371,10 @@ Where ```"extractzone1"``` is the name of a Trigger Zone added using the mission The settings for smoke are: Green = 0 , Red = 1, White = 2, Orange = 3, Blue = 4, NO SMOKE = -1 +An extract zone can be removed by using DO SCRIPT action of ```ctld.removeExtractZone("extractzone1", 2)```. Where again ```"extractzone1"``` is the name of a Trigger Zone added using the mission editor, ```2``` is the flag + +The smoke for the extract zone will take up to 5 minutes to disappate. + #### Count Extractable UNITS in zone You can count the number of extractable UNITS in a zone using: ```ctld.countDroppedUnitsInZone(_zone, _blueFlag, _redFlag)``` as a DO SCRIPT of a CONTINUOUS TRIGGER. @@ -478,7 +517,7 @@ Smoke colours are: Green = 0 , Red = 1, White = 2, Orange = 3, Blue = 4 The script doesn't care if the unit isn't activated when run, as it'll automatically activate when the JTAC is activated in the mission but there can be a delay of up to 30 seconds after activation for the JTAC to start searching for targets. -You can also change the name of a unit (unit, not group) to include "hpriority" to make it high priority for the JTAC, or "priority" to set it to be medium priority. JTAC's will prioritize targets within view by first marking hpriority targets, then priority targets, and finally all others. This works seemlessly with the all/vehicle/troop functionality as well. In this way you can have them lase SAMS, then AAA, then armor, or any other order you decide is preferable. +You can also change the **name of a unit*** (unit, not group) to include "**hpriority**" to make it high priority for the JTAC, or "**priority**" to set it to be medium priority. JTAC's will prioritize targets within view by first marking hpriority targets, then priority targets, and finally all others. This works seemlessly with the all/vehicle/troop functionality as well. In this way you can have them lase SAMS, then AAA, then armor, or any other order you decide is preferable. ### Pickup and Dropoff Zones Setup Pickup zones are used by transport aircraft and helicopters to load troops and vehicles. A transport unit must be inside of the radius of the trigger and the right side (RED or BLUE or BOTH) in order to load troops and vehicles. @@ -687,6 +726,8 @@ Once you've loaded the crate, fly to where you want to drop it and drop using th Once on the ground unpack as normal using the CTLD Commands Menu - CTLD->CTLD Commands->Unpack Crate +**Note: You can also set ```ctld.hoverPickup = false``` so you can load crates using the F10 menu instead of Hovering. ** + ### Real Sling Loading This uses the inbuilt DCS Sling cargo system and crates. Sling cargo weight differs drastically depending on what you are sling loading. The Huey will need to have 20% fuel and no armaments in order to be able to lift a HMMWV TOW crate! The Mi-8 has a higher max lifting weight than a Huey. diff --git a/test-fob.miz b/test-fob.miz index fd2d500edb23db416ddf1a4488eff719737efe42..7d97f9a389fe3d926bfeaa45880c62501a883217 100644 GIT binary patch delta 79428 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 z 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 C4Xs81 delta 76786 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�b+C4;e7EnZ4z|0qI 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 Ipa%c|0R2oavj6}9 delta 59454 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

M%~PO#K(iJ(AMSZ7-7!Bn(?9^4J=B6DMm zkMF}(>@C94?|Ugf9bm4!U6U}TTbLfde!U5($iYvGn~enK7ZATQulKl&(8P#mvZd(H z6d}6n0yj>aKuLwTqwAY;><`#xO(^#rIw3!}m8f|{gfrf$r+acR64?uP1jl==>piGz zVtl;LaObOZ=C?rESnR6B&k%VN?Pj|uAhMUh8YVcFWnW`y{U@^XfCj#!R6l!h!xjLt z6%!_sQd6gY2Fip~5GA$nSWGN>utg0 zm8Ma~DRW2ojZDni_ctg{Mcz8*Ay~Ie#cjoZ(`Q`5@nUOW^Oqi??L1$X)=z(I0glJ* zo$+(lHK*u9Y$JgrBV6a{uGNyVtnWL33&Mfh&TD-ULB3QNonw77_4;s&v8%Iw{}8(m zM2fj3nXF03ftSXUR-ZYnk4o%&{kfe}rbB~*U9Q&bCiD=Jw|*vWjzB={Q+2<)kEh$v z%kKa1gi=W@X&wYjqR>83kBmr~xm~t230LxA_6HhuTXjN17F})Jbm!9{KN|1=XXxX6 z44J|jABwaJpLdPMeiT4ms05_FmZc3PG)6#v218impnPKl z@gN4mI92QH2Df7xjRa4fc^Z>ZHb%OVYKBBVFeTwXVD-i-2Al=`kE*d}L2;sOpt)F! z;%aP2;C zjCiE4?cZ@BRYvONPG>>agoEPW2r&Q=S>QUhSr9J^%)e9x(hnC#^@{cdu7>^4-NpyO}Q8uYx(RO=<2f>P3pMIDTU z9o+x?-cYjB2L9uhzrs&ViDTF;t_Hfm5a_B}D#zR$8MDf20+&z>`+VWG_KFT#I@;j0 zn3oH2A@VS8BaZ}5``cO@c!{eJR6zS5a2o(d_W|+0e#0Jw*oiqtz`kS^t_vKG77Neu7WVlvW2CcLh0@=YRXKx7`@si2l2li! zT_`k+pZ}98B)Z{aQv;N6t%1Z2hh~B(i?CgfgP%Gqe*qD6>>iA;^#WAGNOYY%1 z2gXL#W>z+czU|p&M_D-Ui(*Lmw6$n8nUMl!_3rPRnNX{vQ&QloDTN8OzpXGg5M9UO zRXvO!F5U3*ek@-e3H~M|Rd;Jqi-~qQVz7E;cE*C|ce%sFBlY}U-Lxs1=zPxFMPKyo z(%Qa=FlM21aAj0705VJe##BV$g+qAhPpu@@ERXBXO!Xs>xp$DGu`RlH_AKf0lg5Sc zw_BBx)y}&CX(|!^|Mo5{#0@?PVq}h=KFkgm-)nr2zsh;Et4N8KgX8p_2EN&M{D|QP zdz{FU8GzMrIBkYqZQ2e$f6$V!Zy9$ajsnAR#(zMD0%WGGbi~VW=Wti#$FA)Y+`$DB zUnfabb=j3rn@m3xrw*WTMsr5RF3|38y2`bFizRCxO6TIV{D+>Cx&Kpfdf7I$WOn2r z#}(D3vj+cs{NT7H{Sz9=xm!oP0GavL{>yFQ)N&%Wx}muGXz3uV+f#=AjyV_yLtrys z4Je-YeHf@R{2?adbS8M;7^PQ*FTC?_PN{|ayVe z#dOp0K(-@6InX7t6jesqzo@rpDK99mKOpqi^QOJMU;~#YB{7U$hWBTDF$pIEg&!K? zm2xlZ@pIV*nKCRXA)<*>wMjLHVb87wEHmb<@tO+>FCb8t#WgHeGIrTvLNvE-yUEtNTiSy z-UKn-T#OwQ&IN`T9?vV>H}K8>wM{4p-2I<-#x;|$nuIv^z4Zij{$oX?ssaEa1Iu0d zAFe={6p?G0UJk6#ELH=(RB`;xmI$AE1)9*@p{es?oPI^zHpbb@2J&)vS2YPPb)9sEW4;6+Hjp77qhUL}1`~U3DMCBQ_dB~U z)Mm>>oI4J9YxaR;RIDgs?<=VpcCpn!TyWtarA(;hKTB161q^RiE3V(Is_uLv zfj84jX^O9I5}An1W+Zs?`Qg`D9zuR3D~p(4(T5xmih{<&;U~W$0YsaePTW#0lkg3- zQiwS-`#zndXHb!x&J3}piH$VI5Q-<;_fGXN-~=8ozvLC2vYXfxjK<6uikdc6aErQ0 z>V!=($$&WJ^A{wna3KxBC~ED)4NoOO;m;Jsby3;mho+vg$?iW@X(0pwFaNnJWmfpF zDrL|$3CE(2t<96*`)Wu$;A^mLiml89tC0RYAS=Y32(l`0jS<>WEW_{?ae=R$3C@T8 z>MIMD-qSKnY^7HHFU@1L{wM!3vLU=E6*~T4hOIoL^>EK3=|ro$JB;_wrD~iA+`p)3p_2oII(OEgF8HTGeWclqq{DL|&zDIuv#RLkMkOcdzN3RJ%10qgU z1FaC3kvp#Nz{pIb{|%&P2QSh`8lA~Ra9?oCG8`aI zOGxTeZ>)FfM=;2*b$i!S4}Vo_Z#Z?$CJoBrfEk8iioJU}DOD z0SYcBSZXpkPT35_MuDuUCqYCrifQ5e>_TlcX(l=QpPzO9yenik=QHo&&R3udZpoch zF$+&KiYkg5(j*z=0YV@MgLR&a;KvFif?;WXbgypJQteMHf-3Y_gF!|JGHQ8N)A2ND ziCO#CHN@|A7nW5W7Qk7ULEpEoOO1_M$LM=bdM8%i~^!$nB^@13s{=FrHb` z09$Cy$FZA<@NpGw7^4=Yg*hlM)?XGs%P2q|-C1qRs- zjj_vP&Ac3ZE*W4EM9SVcA7#^oXWVd33GF&!MF@|+HYlVDTyB)l;}_)JegE?sWQoBi zb$%;mdF%G@-s`$sHL&^eh4y+;D2_I{@sCt%UW*x1H5_T1e^TFuB@NmHTHQelPqPld zvNgS={I_RhICJM?l;?c9-Kr%h^Ur@cw4)1vi^jP^?oZiu>TBkC&nQV#opymnhwmt9VJTo(gbp66mgcTMW@?sp08_lEx__vw2QPUenn9#0ig zLIvNjD;3L}078BCw)|paLQvBeUwX4&Ome=~2m0$CZgYWzh-Qkl4^FRVEl5|J`mS5P zU+*uw+E00ee14rC3%+YF*Eer1QDx(oCt~65Yr3178E9HdFM;pk+}N*6I47yb;2#!S zTNGF&&e%g3zZCv%T^zD?v@#l&1nFlL8_Zw4J$>5F0$tG;r`rPzo9Nnpxo8>rh26OF zay$7;VNba_L?~*ld9*Jo2kCPsQEB=2&JsNn#g0{_8FCc>ipS)Ny zWjgj&KAy=&x{D@;lj^Nu|C*g$j6{7M>$&j*Cw?Ed+R^%SJ;2B74ZploDr~zI54WhW zURFxSh#$-8=7`ZVnYmGw_i&Lu;p%F5kKgk%aPS*umbay7xFMc@9qUZ4(_uDds#lX< zjC^BL*CR8Lv@C1bIf4C;EQVA^4!eDaJy#yr6`hpJC$AChFZYx_FD zulUonDC)4?#W>u$=6@o_V&(^7-Lo?Q%_i!#;8J>YrX6J`tmN~4Kj73 zatBQV!PS<$P&u_Ap$R_b*2JPvhR=1=_pE!F*{4$#W!0n&|fRPzr+b+*T7{w(u>%AYM;516ffMar)hQEP)VOXLf)siG}a6HS<01 zriLu1f~YTRZdSjbJz+`GP}A8*122cR1e@ST8InvEG>I28JSBL&SLOa^Gvvvn74LKHX6)5|#O-s<@e^ZwQMMoJtK)INmqXG{ zqWk&le+Efy>`YZE{7aBZp-JkK!3Vmu*6h~AkbRfbZBoKG{87(CmZ14Zr51`|lt`QL z@>LBhhni$G$RQK0G9g}`=zi%Y6gD!;?6CL;i4f4b+nG;KGDu>nW}4SO%gBu#pM@Xu z1F`z2@>{=WmI#*?yu@-^*PGy%0#$T$!5iuE0QdCxF`BiA!fnnci0_ZKi#QZ;X)i`I=wzV0{Xkt zUSzXEe&5yCq`O*05H~=p4+Kz|J)>?NH+8biDQ#Ngj2{|dS>2ewW26`+s1}DfLkaX+ zZuONB59tq<@)OSObu^;i;_GgEYHX*OKTyJWg$j|nhwSE~k$({xS7u8{`TRL$_ppVu zI$Y0Tx^;h$X%Eb`{GE?hg4Ky%Q?SAx+TiIR1?I&0$3w6+&WV>0^iSPju}pOoU?l#)vO zXH8NPnJ6FWLUfspdjdcN@<%UZ{~&W(?&kW|82v9E7Vp`ctwIH^4*pTHshMP*{S`#; z$VcYV4{^8hUYtS9R+V@)MlZ3lQ%6^_+Ar?oTnxSz^tx9z!Wm+XLHzZ@4J*_!| z9tE&5s#y{`1vD>Tw9{z!%+Z1V^f_#AA}l}X&A5{#V(f&8&0Zi4A}o6!oFTd}APm*qUd1uo(YtHmhUoP;9(16Zlv{T#KIH3n9zrbkX37xt|) zoaw8lu0h3IkbF3ZRRe|B%{h2Ahe7bYKr5W%nNXLrB5T3bq5P>3t)bgaTzZ zsM$6gI{dDl=Qi-iQ)d!c*C-%WPF;iSw+{MAJK{JJbzAbmhikC2F8q!$OPNn7UvQCB z0rrVub|hTDg4=271xOqVESn%WXbo?-p$XUF7~S#MJ%U5`R^XbW1N%)C%CAc=6<>$k z8t#z^8e(R0%9ms{_kDNQG&;54Hhk4qbEwp`U8__en$mzC*Aym*!6r!J(a@JMvyr9w z1Z<0jj&t9k{z!%a-YE(fNN-|*GYbW2?0{x)6I<2HtIiLQXO_%R_#uh_DF_R1ksIb& zsBv*Y@%#_SkxLXLhZM;S^#!COkj{eCIE6%PS4UVX>wb)}W_Q=dv`$OZxyl*Dgp&5)`d>d#5o{@LAM+Z@2`*(ICH&Cy=rY&oscjM5xr*}}?U#b7sGTc( z_a+ZdIoP&7rA8>IEz+n*iZWbt#AVdzSf(ItSF$d)vlfIT&GmKwb%Wi?8nC|!Y5 zUfnY!?%I~rZP8@U;L9=6JeXC6nG9l_e7aD04=+ex{Iy5!7%H9+^!Y&tcSYe~q!lmz zFL-GL@v6~aYX%iOPuKw4wAY1C)neA9fw#2u8Q&(j0^{(J40xz3xs=(=nVr#VXy=~? z*l++ddvf=qVT+LR+qY%jf!Oqo}E1 zPn-zx;NLIwjglWAC@F@s$as{3K&y&$Mb0s?QQACaeUdw0FQO-#w~2nvqmmf-onNKU zS@aSHBq`;$p|;+vAXg0#)*f7x5ygvwmB0e%RguJN%v%~MAF<48RN(WqvqR{Jil z<&p>T0wsbJI>f*0YCM7M=i}dtwxhXIXO}^yiIXmf8>2%XV;AJs zgL2ibGRZTCMK9&6N>5nzFGEp2%8TYUkdtAVUF?O_(*E&izUAC5<@m59A$6K@Fc!dG z93tfka;qVDdP2)gGzewvY*&Oc`nqAgIoC={lAaGjkW{dXKL*$rbmNiEJv?-0@SaFo zm-emr)`$b))@hLqrO3=T-P0j(cj|05=@jiY>VPV#Xi;!E2#9LhOb;G{K>3Y$?ftAu zuQvQb7SKN=LcCfpMj!!-r2xma90f3BF!xlsgnMtuz>M{*fUVnDWM11Vo);*Z*AQay zrn%;)t1B}mgDL7&Ol$kg7f{CrE7*qR04%nx?_O4zvIIPHX8D>5B!4PTV z|FqkQgFcXLZ{y8934(Q+AE4LRrxxmLU@&SdVl#9!(|1327mmRWH z!G@6`=~#tBJ3)y?L5Yfrm64NQo}QmqR}xxP*GNj!NYBYCQrk?_o87%PAtiP$r`*a*2O4l6_+Mm23HkO(N=HHrGT!q;pR z9#1CRDAd?0BtE*Cieg4-D-EppTT|80Go$tVw#QRoDYX}P(sIW?adog1sW!I|Sj+kY zvUD^=)R2Kf=EV}?&l&`3{M3H;Xno)Uwp7aBkw%(qWt;<-XOAPmydd1qzzA{D+f~j~ z>DS+8{;2U!3Mn;fqn91XuWEfP0r2Jg!`|v)lnp!R75;2r8DDyl^z}}l^uK;cmq;MoW_Z_xSIV07IauSn6O|?u|=^Z zT+*D0hW#^WCCxfV6^rh?XppdVX_^QpFao}7K1U3HDK|DKv=DhmM_@?4hhdS)q9jTo zNrDu?bXh0A_|3rvV(v&v7dJJsW#lq@klr%e(7ec~Rbhhz`g4%%G76!=J`n|H^iapp zFv&9vh_I6IW;mT({w9skFx_#s^^IwnRy~VRfm(3 zVYXp>Liwz;NJ&N?Ihv`PTKGF@x4|rim5}nqR11czi>lH$Pv1_TfL#$>2>}%;1&}Fxpl@{Zopb6EoL&iiAm4X=SGR@y?MexzKRK#K7P6Ed{iJs0$o&IETw$N zi2Jl+zGfpC4f{&d5t$l(4s3=fcKFODx*HCbmPx*>MVpVcKuYP_jSOL6Eq9p}KT(N4 z3Md~Mz?->~Q@ds(*!QM7^*dyPykYRPfJQ$C{#9Qb?C1G6@WK-qgXF>icLwY0Kb6gs zjm~7PohMi9Isuc;JzsHu(X4es?dFjn^X!=S8C(pDSjFro64zM1t+D3?B0;Z9;9zR; zC9&Lji(^U(nK1i~90nKr=U6YXORd0k4V1%|17ljtD4PwH4R0u;Sn=upeT$$Ky1M<3 zNa?PTtFeKpyS$Bu0?YUX3bN^jRuL}{f-SxvIHl71d!x13XkF-2k}ojr7h`N3Og$gs zN20RsMZZekmh$m7bM_a%#>&JPr5F3I1U(kIJ6>>_e3z=!Zn<|Z3KD^tI^fch_XCUq z@UPV89m|K#=*mwV;{}6LGPWoTegP7cT>#=+(B!K`%?0>l((=9hj`L0%Ev2aS#_Gj7n8+xi;{S>ljX@-O<6PciN)~Zeyg=y&RA8Sbz+#|B-e%s z-wof?Ec0%LHH_P-DO7t-I5wrf=TEF~kRred@+9p`_f0jEx3*dIPM7ekOP#MyyglI? z__owj9$yCTi`Mqrya&c{pKSq_auVnIj^-gu${xsn*_?)Sl&8XhqIT58ABVZXfZ;Xw z8bn|u%z!!!N{E#R>)4?502srC*mpyUc)V8+_k55p+MsS zgFM#GyTkQ)_P=il&Dsc!%0Nh0p6gUU{cYb{t)t{TVA%cv0yc4@&0-i$N%k_J8qy(W{5IkFC~6XWqtTgpsY_MDvC_+ z;~AX(j3(`-0dvXvK?$oX-%-YTrt2dWkT6alXPU3zklaDro+AlYN)d5t^C@s$vci$s z#preM^lZ*pM$20yNvBEC5EmS;z?7N!dh=Y>8Y(JLcS?5PQY zpo4vYwx{m*_??AwFz^7|G7nacauYo}EXjc6aPVTmg5KcDA{m6;4Sf$LRz=#{Dz&Adwq|K-J$Am*8)GisPOTKo_P!If?{65dhK8XRL3 z8u5@;g-9@y7Wje$aiR9O%87~(09gg{6#fKE?@@-l8GeZX!B?${!tlzhdGslvaTwgW zLwiLbT-wkRzoeK>`IzV9`mLLJTWeffmu?^5QimpK9N7LGyQ9npVh_CMDEw@B`(PTNHlJYtxwdL z(AMLvn8EzDGvLy%HwxtSh46JPRwg{m(4A=d%{`4>9Vuw~xD(873wznAUGZ1tJdd}z?LPe^kz|j zY5@Pa;8H)fKPUo6^3@hvjF$d^IK zvXnLSOYmI**{N&_!8N|lpt}6eXdp|V8>6K`bNM`iCcLIdhDyT0;)Fo9txXh7Be|Dh3Hh7}=m7*W(M^8iw-Ch?Mo)H*Kz)WtdA^m+>4@ zh;oIi!``3Ua0f55XliugH~w~mlz|k^yd=(#RC!h!UIy=|zkadbgPTK*U{va*4uucN zj4~RIqnl=AQI~E+9HBm$5sQXU5z3NTl&MZLsBu{t_apPqDx3Yf8@kkO38hA2u_3+nB<+Oe47In?5;Q-T!3w`U0cF+R~rf+p@8k^M@SVG;5k zj@-v-Y!@&?(l$y>9CWfVg0^K%sK79J(=9lFuczA?H#Mph(jOk9+;f=i>P;rGG7pN< z8>m^_S+D@E4+_aCCrny2ZUf}mCx+*Ui)*G6Pt#eRVSjcnhEl1Z)$c?kz4_Lt)#N-} z;^|$~sJroZ_#WRr^47S{VlH)U?wK>5@{{0yTV>Bj6yc%a()(c@Xm_Ttc*he@I{SDF zfqSKk5Wpnh>qN$-uganhqhw)`e5)oD(sft^p3z9_6ktuH6^zT2 zYbZRjCU_GQsW#3VP&JJ`bi_+E@-)ItgMYHXPc-d4FFUn-vHLIQ+__Gv8LpYS4 zTeuv6KAa3=5%O7!l3kYe!Aw2HfSIz(eB|sxE`zG`$4L&A-Mxs;Ge7U@iY&?_1{S@3#GARLe zqGs22sK>y(QiWc_#RL+lN&MY<=GHQrUyPQ(kL>G4CF11O9qPYaAfFA{FHt*aWHECw z%t)$_Po++hkjT7~LnDpw#}1%M(P*uiIP_!&!~-5vi|qwmjM5Q&$sCEx{MM0tVtT>F znrtFM8s84}A}k5$dOe}O&1i@eKt#sj`v~~cBR882o?ughWT-(-zuu6Up-~_`3 zRBS^bg;rtt;`Aq-aL61+;3-K@3WaO`IgQ-wBb z?^E=WD@IBGLT4~STMLm(KGjhXNH5)B0$D%5xF{ko-m$`rd!dG-SP-{*4Dp9P7Ub~o z8O;167KYfz8Yv{bCABzX#NUF!MAlpc$c?-0a%7IFv>^mK)S89zEItRxk+Fl(5BrZ1@w+d;{^jb?7e2jB4Bm&{u|p zsF-&22C0k77CWEaj%qqsy^RryTHG*Q!aj=5Xo^W&8V}ZcPQ>71XAc8<1#%#ppAyK&BvwQb{mz>f@$PC+MZ=I)aiyWafX zSfyja#W%{8J#u3sb{53XDWmZbLzF2g(LzrGDWi41jY5|WNk-UPXPtv|B4IJTD9rcV z%f!{{01Jj_*5{LxGN~DXC!#XALrh(>ADfwcYQJZGZiFn2{XRMvqDC~8n|)1WiH zeJB6*g4^ALq^{FBT$U>vE6d%S&Hz0w>`II+l}`xmVPv zU=m3Q7MMW)hqOHB3eCBwFsrw#jJ+MTE!N>CZ7pka>KIPFN6+t*G8Qs=uGkYz-Qj^D zof<3dmvIjk3az;e8{It^kW|5jgocTm6feo2R!f>ZbjCy=y&;m!X`l;^OT$k_Isl>{ zL|tr#&)`;W*MUGX1Phw9O1oD&V9(E#IAO7`kst7|Pj&XgD3E#R$CF{acW0G~L25iM zV>jNhorO%z{n zDyQFOO;p1{X6(S)^&HNGIAnrZ$C4XR&KJHRAhpTf!oQyslMSX6HBfmckqejnA ze24`*7F2~?uV6`gG%k1_jDsqZnrJkoV#GQ}7>*WX12%AZ5a6mShBa{$?Dz0ymLd14WL=Q0r+wfn7y6A@F<6v~W4g_TvGJ zlGerP!&iLe_sC4Y<;+P$4;74gGY2HPLoV>K0eY89<^#+sCY$w1csrU2KPk~8AD6qf z3D!W)%a3FV6Os^#V(x7TG#Z#9L84mo$CP>K=J{V949INZfTBD>v##|e7xf%-6Jau! zWwyuY5af}CB$n|`rGvf6u)Ti0$&~n z6^TjMD(_wIutukh^Cf)jL`ilOx0(q!V*NYWsEYG*Z^*a~bxW;fha4&mKim`^D+P5j zsOx)l^`0a3*kyD$ap|s{{tpdW`>t`w@Q@{T#W(d~fFN_u0i|*f+zs^-B+yL{q79;_ z9_NyU$A^4Ktv<@3=qd-R+6=(ORVb8!_^@7O4}aeiyiL2 z1YO1#zzz4`Tn+2B7bT=rBReADS+_P?IR=SFW^P)el;*&cYUje@jsRugt0xMKC7TI`4y8Hdg_h))7MG{E?36KW_Ia0T8Mwb=JB`?_aH-P! zpqsf=#B0+&@tqP?I86|M?Ka5C3W_$di_gTgMPDLS4?p?cGb(LWZUwxHq;K8|VeD{( zu-sT)66I&-r%fvKi=m2$X^e5JG=!GgRhmUpNoHktSmX^cq-#{mhQj8G9oc8aZBAZ={ zr3BSlDQVY0O*$K|V#AzoZS(@SR&GUy*o6Vd>!4m$H_WZ>Y&RU2gP<*z%W+_=&TJhV zm!lx%`6MT;1thc{B%B^3k{%?Q9we3?0EwpuNvH=&ss~Bo_k+SOg^rrz=I4LS+F!b^ zOVKChY>BUyWisd&I*Tnx{MP(tI4&1Kak}GW$edOpwP&cxK);$m(3(K-nn1{!Kxnlm zDDj?a}=$MUQFbuR@YZ6<80`@zNLfi0L z{S_@Cn)Yxlo0x80wC}Il&!#hLtwK{(urbW*DG&p?k_`X91-n~EF&%D=qgtW6tv2Qe z_8|*yt+ko~#MuyU3xnK%&StN(|Jx+w1T2T|LQvXNa2GRz8S{`U8HFJau0YPO>oIO1 zSxXUj5^TY6kbuSA*eyiz4C-S``Xcl?yIe?r*@4z-9uz^~as-?IFJWCgs@99m&GRw2IIgUPXh z{#ckWKy1ntu0EPQ)v z_7T8A=pv@e*m=dXxv{RRnyvLoiWh`OSjS6u*Cv;{(~o0bvH+1cyHqs?Ab*c5dZ97z zO*a>Hs+gMPos~ui88W*T%ElRVCwfEN?+s|gA1wgqbRrr-+#d|6y|9}@KPz)~Tf->o z#zx?BA9(vTAmekdv7ff@z$n-@_hVr>u*_!2{cUPF8Z;<3Ln^V#G=9`Iyy9ceCZZKB zdf?0Chb&m18#^R)D^0ipgu_|#pM_!zL!@LutiT8HdtREplL$%1iGg>1n)k|gr8-6n ztb*TCv%2h#vb;2SVu={I^qA_6*9R62Y>LKcv4_*--^e3Jqz}VFTh*$QHq_mR&i3*2 zQ(zwRA+WX zjqdB2ln@JXrl6T!SH6AIg+1~pIU>xSRhRT*Y3;G{2!oIRHabiwNWp$rvd=9j!?cqi z_%(UQ1oE2&h(xbuMZhbtF-hkK+cP(NUe7d#$lKfh^{#>RrthM!;&M*@;!oaGFD3tk zP0A~*>XI>Qx&W04f|V4+Qu>em@nMw5*Ak2sN5&%+CdB-d$AN9SZIt@Ig-k z-Z>?~{M-nf|A^FkZFGdq^J;ec($WrMh$M$GLr#qthO#@C9KLYJ_~V5#2`ZlZdx%wo z%Xn0&g=3{;(@etAgLX5r4DsY4#n+e8fQ`O8xUs`g0UU{)wA30;b3P>6u*epraHCO< zS!dIG6wF&H>kqVOoXfrysuU}QW!DVAfXs7JjJhlHf)$BfQ-XrJ8Cyxy|^bfUq@4=%+`&?n~2POqEQtr>{V?J${KltnJJ zRCaIyvXPl;g2%}Q!B9r%Vq)%m2)dlH(=A!O4CS&iPNWKHE<^J!@p6xph8&{CfaKp& z?L2FLD1SPeG?&*qx!QL8`DhNY@BnDv3*1S(xKh}Ha>C$MYFl^q)1#Wx!?&7)m#saj z(AK=Bo`j0Dk?jR9u*wNh+icDWn?xz#jTxnYzeyC<|8y~DGByvwJze(9j_3I5_6uku z_xpDketM2$#@aO;>r>A0X6ak2P}QuVUDFq~Q_Hwr3WYBpp-2wG1lCVOGi&098R5|f z`qnwIFb-M2%Fq*NqILr3nlY4xgk1C$MQ_af8=}FZrV}?<1t!0_%-TYs#)E_$?L^4| zsv2E$0r&u!Yzy$f{FgbWrqF{s(9CdR%g14I|7p}Vf z@#Dfk2KFb@cUSL4vhP}n15Fs29}uEII&jq@z537$b6Kk^*7^&4@DM?sr@&U!W+qV_ z4}yz?8nmMP=RUYJ`=ImVwicg%#c^%JgK!C4{*ouMeD2^y4#&y4cU7+XT7EIuonu9` zXB0R3au~QH(|v3Y(hJne(NPUiXcWajP|+3Xn@Nz3I3uQmGQK-jIif~wRWT<}H+ng4 z@OuIt7@rwEyqhu(7TW1t>`M_-{;&<_8_-S*Kd zr*YseD~(|V^O@7eN0?*5GKqIf!kwUS0r6$DqB3$Q^cVzMFgQ-ApTOGi<>K*k^SD4J z{9zf~pl~{Z(u-eV6x3BS#nKB9c(neQ36Lrk5=~0iznb-`I(~xn=Q)k}!7*ibDpE{s z4{eAO4xgTi5-+FWfAl^#cN_9AwtjvCxYGX->jU2^ZQQ#%|2{sRnvev9A|4*`zmqD3 z{+Vuqs#_pSH?9+;C%R>E2v2M#kYO1Dm%9SUAclVBcyZ^r41RO7;<*PP-C&@4iws3$d)!ezU8Sb)Rf#*y|jYOF(lzW!%fk zM{SSpgBAaP{Z0xG6^X*AD-&do;7DE^JzB`*{Ug@TG+-_NotcLoY6NO(8S95(ZEGrh zsVpOf)$_;kClQ4eH@}&}r8Wou!zmN*!S2SHDb=cm+C7Z z?Dp-zB*312YDsaU5e>2#?F?D?1kR+gougM$#m@XtxN_8F?K=Xia@NQCyjy0^KDpjZ zG!~yms0KaWBHhTp9yc=>b>t#JRcsqHc-Q&t3Umr2cN>!qbe}1&yXlI-06*9igZvD~ zkE||xL%TgO)X$#)T1hjFt%O+eyA<2BZ#^wPUHyKdN!ev5-D3E6$%ax6Ekw%*+ zFh3BB&QM`3w@22Nqi|+{qB#o}cHEfIzZg;=-ZAAFq9f$N_EIfb#^&COHeQt?L$A1G zrl&Dxp3UAK9uCjWkKbG_HDM-uw^is3@(gIt9y;}&*x79W@FXLyEQg?><;u+rSa6P9 zL`2V+x_`+m(nbTK8mXhNySzb4_Uvt}lgMaQEg1jCAc7^?X(!EQVPqr;FAEg;@;5GF zIQK`gufi7>>B7Lu-?!PZ!w7l89gQIWl(^nVY^r8Ry#lntv*rHKt;1$pwC*f5CywK< zxz1ekJYK*jK`$=KQZF`Np95ifu^9SoA3GRt6*fY%S7hVb;8tsror-}M{hcg;CW4liG0(qTn7kU-UT zY?4}-yK(gf7(J|@i}N3cQ<^I@y{C#ry+U842!X&zt{~CtJJH(M=778uelYYapRaH_=A_fCA^rUybf+zu~H(T!LQK=SBTBf0Q4qHt%Q|C_I_N;SQrWGnSGL zXmNeCl8<3oiJb+16mJ zGthx_fnUSdX)!f*??y)Q+hbQp)>zXCwP zR{K}t!Glyk^9jjnjW>{+p8FDGLX=GYmTR!rB7aQ2Q=*xG61J#D-`mgls6~-*ds)46Qs7 z2-sE8r(=nI(1<`ZODR{97je=cEg-s>?Rn77^*N_N(>HHPL4I3C19PUFbN-St#!;!Y z_ll^Q%-kRB5F8+WT!%0nffWD<^-OymUzzZo1Fnu`)5AxQv0z0^^pyP?R&064us?wR zM=N*lTc+Sf0auCppz1-P`({#>?951Oy*4<^U5`)f`E)2hVRk*mEY=XnY=rL^1P^Gs zhDS18Q#=In&nhDPZT1HL!2(CMxIcYAQezZ$Od*-HU7c66WK%>g`zH2a;rTCXs{dT1 z9vREDxL(PdJJyMP z&$;+YgFJCW%b}!Z@21#nkKa5A7D;^}pm@Z%7NG+x{IMjUibMUjnu<>ChT$u;L; z%I?b?3L$$3WsFaAE`lEM6-Eo^JB|q3S_Wdk3dX&(p_VihgmE~q8%||{Sk2+hMtL7( z%tx)%tdiXjQp#F2f4@pbyWD}2L2ZO*1Dh%&wDlG630lZt|oQml&xshP*^>9S!ddA3!?|3($YX+$Zyo0lq0v?DuMnI zteF%G*@V|vn)mz=nNo4bCb`8O?>y;IsHlyqQ9K1BG zog=Dm@j&#Y)0zk=O&S9RD^1~ejRdB33(2h5ivoz>bf<3CD@&;r;tn(}YZO)rw1A?m z0H*!xQY@$`Llur(k*j#q`3q}jN%oKwHA%3=u}7r(A}r{hi{JVi-6y$?Y@MG~XTk`C zE2qnW-y!f=E>*btwMUuPP2Vqs>nyv0rKbjMWuhD zcNlER4W`(kvadTu_zW2uBYS=@F7GnGU-#GP_M)Pj&-44q!p6Y)SjC5UJnKB&WAr-l zPB=LV9c17nWj_$B_{LCaa6n4K*SJet71Jv+B?9;N3>MH#__Kugb}7xrQlU=Ps*u zK#)2ndDANz8115dH`dXXf{1X)W0Xd9@u)dw5a8Gi5_3QyA0B66ARso}6$6u2;4_s* z2s!lNT@Li3D$y%=20HAyl~^Jd4waT-tCG%8)#{V~=Ez^SDlF4@SWHJ`Ivv8`c0yPd z;Gw2_(Np_iy;kv_YQ*mpdD!2b+09o&X7Bn2f9AL$(Qzo}@2a!#$c}nH8@Dg>)}kfx z`9p8SRqrisU}{$!oCk2l^E3=p#Tb6DZJ4m4_efndxMs0t^hjMYxfW^Cyd7Y&n*N;uu&9c!Z>lYDc4Qxx z5(1ug(7H!Mpd2;1ykqSv)(`aMrRMT}KL7q@gU}46RAychgQRoVL0R{%W}Y6Ima&50 z1isG@WKXv|CDmsA>B1E8eqEM**>K+y{czs>jK+VQMy%*EYmCX z43o_TbbJ}h(gkoi9w`2Vp@ssAOcq!D5Na_4}B2 z=}EZnXk+jpi*9-KH@QgfCU0jXq_3eEzdgpG(~u9DuNse&cId#o2nKR^YdiMk|40l- z{Q5{K+ZnHWgexm_I}sXwH|b3D-vudUadAHwY^(CmDK%x3-q>=_L;kbEnsw zB%8sTtr3@SN>TOPB_uiwa6X+MJ^R1PN|qE6+LwXk`V)B|#HFIs+=DUAQ_uHkXVMRW zI%UowEExALpmGAe&6{RDe1L_2^J@Dh{#|)zSSQ)fYB~8ti;~#ixJFqN6+MY(!tY@gFSjXi?iss z@>b&$!?{}cq|6t`f(+);tR#JH>!X5zSuy@B>DbCps5`=bw(RJ@a-gkQ zMJrOL1xEr$-i^qD1+uhS3Vsyk$0qxSeJeM5*8f_BsJ=iRY~(YJ#u{s${jeKg6g^9| zFh#TZEtTp-)As$_A=1dAiSqtRN8|KZkqy$f5N!xS0xOGsWj`fZ zA4A@bLIcNRTfXmq51Yw?TfoXM+4?gT^s;Qhr|v>%LaCsxf&oO(ck_#fI3kv`luX)@ zw>+hGvt7aPhKhpBXAl%$0f&74pB!uxiBeNC{b?( zR9@BI>uFhk{#7`}nmR&;mk}KN3<&G0bWHGY#NGS&Hve*@9IL2kYeOalo%cE28npH^ z)s9LO{`v|Q2SA?;IdW!%o?;PtRG6E;+6}akquI3(?+Kxto~Js*(b>$|GI@sT1jP1^ zY}%Qs;Q>|}HReQPe){ezTWHpG``|-JGb&QxYN8ziRE|X%s$6N9YwpgJ^QP6{QxLoJK(}#ubbr73vY)Nc00#DShSl0{;m( z!?z$~aKJQLT(coQR{nVOW&$s_3$(0i&=hf;Lng0sJ3uPWw+)}|8H1x7g|-r7`v-F4 zstFR(I>B8Z5E3;kzd4#!r~6B7R2^sXMA>=$FK6Oe>>VM?c%f}Ca&>`t(Ur0pOmNYL zruG2nB;T8p^-g{Xl!;=4OSE=#MMYR?Dn4mr58#|FTNWQbe@UZ75B)FBV~*3DBD}uT zsTF;BtsfhakTLxM4Pn-WKbmDp^fXp`m1KkpKAFm&&n!tZTdre=NhFKvpO6rxvaBJb zq2Ul-Bw}-KsPu-RX!H^RuV>Q;Dr(!jt4-Q_IUYuf;soq7MAk+%fk|?IW$66YmsmcF z2#9-12t{i%-uQ!hg)8iL99mks=-SC?b)j;J{jW81luiCv;snO@>+Cp27Mrtc-y-P< zrlRVf&;=JJcX!x_TR4|nwoHN8no}CZr%qjUJalB>mwl;f6$4&g4f6@x=D1zNEBgY4 zk#A!=ry}V?^oZ@R?!JBj@{RJWTiav!L|_*Kd{pTdn+x5jMGC`&*q@!xs(I--5?9Wx zb_J%HomRZzZ{==}i`d=$X=mL+yShF`8JjrkhXtW;@~)2`c~Y!)W)spoXdxXO-6^pz`fW7L|2lIxh1E3V}vQP71jH~R7=W-BswM)WMN7TM(rz< z=2Ia47wM0e7dNF_ecfZ4ao&#Yi2hN6OS3pPMEAVTRb}83|2>y?jdxv^&6U{$B-zeQ zCtA!E3O?&27OQwtY~dDGF5vRq0r0Yihd+!SB)YCHSjW&~ z3){Xk)mx}y%k=jHUBDu7kw{@o*rk;p%O4a?5GF&yT)yvi%i(=vw;reu)y?!3=Fgsq zKh;hNCgq*|W2`;e-V}v2o?gKyVXI@h#JR~lrD@mjlpWgKb~Ey8II9AIC%c@k`(h2w zOu6ZUpv3y_cAYsO2{=D>-c^=L)|AaIxi)ZytR2QU*0+|* z%vw@4NW%0ppDgs7q`7C1b;OQOC-ZmQ3`kd!Sb+{i3z_87lRo73jX^CTLPZdYdI-vp zQn4YyL+P|!FV-V*Tx}FOrJb%mMpc)Fso`hNO1Lr(*#nw#e82)Dj8FFUV61PzR7ED) z>vGU~rf}!pM?I!Y^cOi{w*6U$X-MX_w$GU2E{1h>9)fd&p&r}h7$h?dUk6`HmI7Sa zAO7uPE0Z2{a6jwnhHRCoQgti0uL>vRG1FDrA5#AdOhB{0O{;5M0Xa-yhxVeH z)x}mmxl9jk=?*NQf*;_20?qV@XFp`!?Yq4@_xiWD?%%oBzyNSo?{@D#mAo5g2fWDf zcen+L`a{R^eAL?W_G-)o|LJyHjToZIBSAlwmR}mgsv-l6V9Kr;+-Do)!LC(1vs&R= zOn^bIUq_Zh)rCp4sKAZ0GY?QIj_eZyv7BD9j|Ug?$ZwhoFb{(uM5jbqRb0 zGehUfd>cUFRcvD6%-J@bzPa9Ue^D!6AW+WW3g2u3*T$%*a=cfat1&JIHSOTGs0$BP z=9SJ1N^X5zaYhIL(aF}}B6x6SVixgHRYM3`H9NlmqMuDl#Ui7*q71i=!&Sg;1@`y5 zHRmv#eA*vSq8`?N5S#`i1{$tga$*$5!tAyf>h=u7NKA~AUsQV?VhJ0P@VO%5h~aa4 z&tE)0K7ouhCY(K93m%DA7`3IJ=By6UrlW7Wu{65yIN@RDWwO;sfAP-4Kd8ghcKr2{ zT@LvV9$*ZEce;NqCeuCyYpThF7a!81BHJs@re>bR;KpWu3OqpJ7gCkD&SPGs7zEI*x|l=euz-VNTF_O}j{aDtE}qV#sM z^;TPMULD@ti%Ew>4fNN1!DgM0K&wqViykU}Omnls_ML2hF;9D4+{siYX=#9fA=W^> zd3SEp+n-K6rdigXTZ>^i^y$@=AmC2tU+{zyg zuz6j5P(cbS0JxF;S>xtZn7b9~avZDR^@We0*p8I;KnokMChSMs{TekB_@kE&8U>CG zq7N7n6eYbEcT0SKGIg(iv8EUbG-apY_cvx%;^J-NZ7Rr}d#dB9AGCw!TbUelo3Ir% zbncOVV~M(-(5i9@d>=27&PJVa#s%O07$CQ(D`T!iv(vmc5<{kSPP4PSXK-|J=-FT{4GD(AWUiA%lQ(c^@`}P9N18tziObArd9cpUuybdS z&q^^Oo}{O1Pv9C4qNd1a1Ze?6`WOKpj>wej}n|1fni~ z^c(}zOG=U?m%d(4{aHkRcDoQ`T40o71nK+PyUQOhP+agWFV1J%XZmXJbgpIb7UrrY z`b>2mmuF|X%rE+U75D8${-L~_T~hcfq$uxgA}(mhzApy7OGt00x%YLU7^<8qBTzxg zwt8C|zJU_Ruk;kU#Gz7SQ54ETr(gbm96BpdrSn&%$+vr3_c!lv|MZi`G$IEVo(@{a zsvF7KYsnVK8u}RcIa&_37`r>!;POWdjzvxc$w;hV%07H`4Du9WS}&^65OPcule1zl zRX^Wzjv6`^zw_K+*=A@qdz*LMSO!OYI@ZF1js>F{rKo$LEN;wvnK7csHB^0n)F*)K zpgGow?o6{?vXt3jZLq{#OUsp{gGY6SvL9U+x7ZC8O_CGG+Eum#6u( z$=%iL{QD*y8{T}U7Vyc{q#7t~^hlq)`-D3jY>jsK*lhul*k#a;zWM1vw#FY=%C6Cw z#jwpZeY;&L*1n4ua)k_~!wk=n*?hY~iuKN9esllvL9WL|KitmZ6ivZ@^Ejn$LaO6} zOyaoOoc`CJ)l@`MmE4T~N|Su~J|?#qoEK3_ka}v|OE|8o>_V*tz^<8AyyjAPLceq$ zg>?EZdxnPUsj|$jGn;qTvF+0f4yFWJ`Km!Yj29Dl?VK6ShFa9HYxMB6aNmS9b|slP z)xL_sq+2yvCBoKLww98AW{bRZAm~P;<3cgc2^(oe4f@&) zTBt*Hqidg|gZXs@l$K1U=WRt)+71b)rTHVV?1u4wu7J|8>`W&4e4R`SXu3lYCVYK3 zesw)%u*28ya3G3vZ9}_#I74a4j-oZVxpYdA90IG%Ks6g*@trt-p4ge)krP1lW}HdC z5PH4@Ch&y|glTg{vpEHyz=R#yqG^gA|xybdipEt}E{F1Hz1l!Y~- z#=dF&w%5Aik>AVdg)t42{6`nX{VV1RMB_VSp$mip;9CRFwykGRj#wt(% zEwG123|GshzU6qxwsw9y>fXEErmcwS-Od1uikdekC4?7S(@P`xC68%&yBJX6TrJ*()mHlr4X_)+Ozp)G0QbwKNddkGt!D3|Su~nDZm~4A) zK--c-z2(YX>~@bJ)rUg+Nq^IxE5zKrxNe~P?FsvM?mXUQAVuIsTdx#`rX2dCoKUa! zPqFPI-5Z8PG~`|+QYVSO!2iB{mt8VvS%+|{Qf#SKKOmj{j$wpc9e{OK*2SK^;h0W0yFZa3>QUp--P9M`TAj=3ie=vxNA6z*@Qsx}hi4#E3^FA!4k*upZq_8zF+8 zl-_#X-xD{II&>*SJx#&5bR-QpK-kgqU)QO{?lDZ^8wa1|mS7v(y7vGH zxj$ydF+zC3W)A6JM@Ba_2+b5{MkOEFgY0`|*)Q(6bw_($Pq;O|$;i`aQ(y7DmAEZ` zm;p!1PMlU!RFEVYRNXYB(p48a<{T;1Ab3(|(-%sN8jFGK zUUAtqf}uvRLYRKx>R=jO8N|%XFJ2DVY4Z=ZAPDW9S7=@7ya8Wk;EO6o*PQS%o@LDc zn05;d`v>9x!|47 zdvd-_qro27NFR_`bihkjfD7{G=EMt}yt$iIbmRuJ{05*`I~*baG#(J?-rWo;G#(Ja z3X%RdM{kRwEm%pEZY=@1d|a%-`EokEC43&Zq5WBqT5`I#C=uE1Zje$v$_y zoDc9cDKmKFn%A(f%(p@?ZKZH|9R=Z~UGZSJ{;jWT$qdz>?+eIxl4oW}!z0eri^kxM z#|DyRjk}wdI2~`<={T=uE_fiBD{4@lEGcQ4akCilNMw{#zEc0KQ{7!!crDYDSXjtX z9oa(@^ovlZi0W^}X>2nKHp}RLt}?LVm<{LOg}mWPdgJ&(2!W_UGK=NSlzP829=gX) zLXpmJ9U%qvAwK}WHoh2Yg@$7-5GW2Ld1gy~=+SYOtbZpS&GQAk5P(^Y8{qlJ;|TpM zlHBk#NN+h3IGUhaA`@GJYYJbUChhMy zk{E**8Tw|Fiky!$n1~I=_ylPH+|7^VYJk?i=0cILxEc^&ae*V8epG1tEjS$4T<>Q- z8dcZ3#&b?3Z!fjDNSxx~20l6_zq|^N<(Fv)i$vY%dJ8;|FoBaU6Hg1yzziyU)g<0? zW_;S@tqBHw74{1nG46?fWHavEX+vh-8Ia@V3~jInfmej{`5BN?3;-`4U@AYA$NFFr=h$-4c(ZtxV0zrE(FfS`8tfc#3r4etV1Q z>4gLWt7!z|o=e?-+DEMN^=uG3zrV84z|A!8z8kY)m8JGRjlQ{NH8kHN9SN6tOeDNX z^|UZMLY#{Y4AY2w@#Ii+Vb!Q>;c3yw$LvI4IG!&dGEoiO_96Z5%I!G59TeFQBoN$1 zBugUTf0+hcKZkx+KIfz9XAHVOkb<#|MW&(t^yO6a4}3^}2+;+f5^Oi82170A=rLCu zM<$bX{jVZ3M0>;XlV+=lc3t0 zpwU*7Fhbx|BhEx$u9a}Ae=AWeg89Bw7_TawG^t|p$q9UvjWx?BkNQGF#YzkL)Jj4% zEp(QbQ3hI*lrn$NpRMe>OomZXJsqfKI-WcNjlO>be1vIoy@f}&i_wh6W5Eihq!@fE zv*hA`getXJegx$BO7^cK@m!Eio6ONbIe1#|Mqg|b^ZMsT)*p)Jrp~e^vD{$NI!y#C zMpsh@1*M?(r%Xi0PCtNrSX=Yxt=p5a1@tPG1=jfzPcp|1;eSw|p}6y^%0x4a`(MXv z0huJ8rn?eT{W6BD_iZ_By~=Jtb~}u3fRh7%>?Ge-ZIHmKa6ZMq#2KE&3=P#6&WoGr zYdeJ6%v^X@b|)^J!3aIQyT(J%?PiClIBN|K_4-sx+a9($SJ}yCTNO zEo&U<%Ss#TMOh}o1DKM^jz82;jAcpT7t)FwWk+ zMb6lMAy`s|pO zm^ksQRijZ5ZxX185=|&2MuBi*$tV+dOO8rc3_7#(@Zj}s_Vn=J)njA>=$5`thrsJ! z@$Tra3%ZiVi55#pyI+~5$}#4D{sZa28OJ$CHU6!0lV5U*Kv8TFTfw7+T6t+U;4iGe ze&cr2TV2sZt~RAu5AZN&>xEdhn-toFK*NM&vIl--+(2bmaraB;|qEbI-&f> zj8*z}4gYDfYz?l;ynSZ$*{S-=nd4dv!d*fn0qA}9*YRJ+&mgHgrE&*<$6#GjSV~@3gpba0UQ?3DtLmHlA9{Ar=27>Yi-=&M_s0?3Gh5BqUW3`P{;qL8^Cc=1DIlb6kDl z2p=`I?z9mlEhuzz{l*N$-=gE$4fI@kH5PsdUPf3MIE}cs!QbP^>*O*!>2i@S?Hjsq zj#js^JLh0K1Y)UR@pM|`iu@Q0eVM;2vU)bbb=N$*t|srk^B44glj2Oly*SK=W%ZD% zw)5#kDyCgJv}7lsl+l2~woV9JaWj)#jZ+v^F_dkDS2VTRD|4FZ4fKbO_hG6kb{w~w zb|O;vnLxyYxnPak?Q+oitj65s#ouSecu*FQ!iaXVI(QfIDF+G8#!%3QVsb$M0H0V; z;nlMzPb}>CY8RM)AL}cGz3$I0&Z5}sCrmP}02OYdj9p^N69npU3T*|Uj8tzku@@5P z^_LOo{YnIS{lx?dAbd3fJ$dmZ^f|j+fjmx=t5C-Wuqtu7-NC5H$Jy+Pg($V>779^_ zNvRG?IDttE=ju70#T~qRTq<#HH~FQmID0gJTh!Ic z@%SPizpKB~rFq#db4?&Pax~~<6TK?{t6pWMV0A{y-vxt#1uq3Ky_d2G)`daU0XQi} z`Lujr2$1Fiu6lNAvsQHc#(g(1eSKD_aZoEsoBM&^=nx2qyuW~RD6oUA*M!3&8^V9a$yCwE=K@>5C?e;?`8iSye_Ey*J@1F^n1XW9c)$&2k#BK z-E@<(JlIScZXug|Cf3HwVsfPztQ^cn`N9U32Es2_W%gsX)v9@~N`Q=#GS~UU_-y5f z4wW(Lk9fyJ-yhcrx$0H}=Fq~297~eowAKka1IbK(`u8_g$C(7e&SQAL1nv>j(DvO; zNZ5ftg*0%=Al$Q2rA$J8_h-0a`A4q2*}JphxA-7DYG%Oow?sqqr;Y<*H26zQ8daB9 zd0juG2>`@C>rfUHMQ%e(c&&$pZU_X!Q;~n0Yi!b_gEq@4*A6Z&bX#gpiE9*)aT5DlFaJEqt=vv z)`df2+b@#d4;tugFw%eZdg;tjNN1Pae;u!NJd74n&y;ROK;3K285C&)bYqNV=#2%l zASBC$mJAD8Bf&!buYXp(MgJ1l_K*%nDUDrQG~n?gl)!!E|DB!NHnN$%84#fL^>;hDUtf){QG*OSHWS}Xyj(<>y0stQlg*Sf|v&PzgQ8k$; z3ur16=YZ=?Erb;8+6iEG8F(>p>R*)a0^2mvdv6@o;y{5N;j(g|OzL58?_gT(?O|bm z)f%b1H$GR;wKX=aXndf)f!xWq{X2ItnnX{5^GQtz`cPgxJv>@xr1qwj{Mmq`vi9zz z4K<6iSA;wo&&Ow#W@`nUy%leNbVHHQXi+bE$fL>n0Ik>CI?H~0_Azs93=0)~YCobr z-dGOmizcWu1NDXhpIruUBP%PT>=IHlF$-q6Lvw;|Xxhi_oPbX%Sh(WBhUX^MT@Bq+ zdP6Y80#TQAM-7cn0NfDyn)ItPvJ5$euLcutT&)B+Y3)SigADIsf;jYlGl@rMZp4k4 zz&758fT3APnx0Z`>Nq1A8bn3mnoTN-7jB{p3f`}~IX!uOsS|mAwpqqC8*xL5F_!}* zHipXaU^G)kJZd|#9)dlf7RxAq`Sr

E@#m!LY2S9fON<_nWGko&9Klm@-*VE1I_- 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