diff --git a/mist.lua b/mist.lua index 2238ac8..ce94a48 100644 --- a/mist.lua +++ b/mist.lua @@ -15,7 +15,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 0 -mist.build = 55 +mist.build = 57 -------------------------------------------------------------------------------------------------------------- -- the main area @@ -492,6 +492,7 @@ do 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 @@ -508,21 +509,22 @@ do 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 - - - newObj.country = staticObj.country if not newObj.country then return false end - local newCountry - for countryName, countryId in pairs(country.id) do + 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 @@ -577,12 +579,17 @@ do -- - --env.info('dynAdd') + + --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 countryName, countryId in pairs(country.id) do + for countryId, countryName in pairs(country.name) do if type(cntry) == 'string' then if tostring(countryName) == string.upper(cntry) then newCountry = countryName @@ -616,7 +623,6 @@ do newCat = 'AIRPLANE' end end - local typeName if newCat == 'GROUND_UNIT' then typeName = ' gnd ' @@ -629,7 +635,6 @@ do elseif newCat == 'BUILDING' then typeName = ' bld ' end - if newGroup.clone or not newGroup.groupId then mistDynAddIndex = mistDynAddIndex + 1 mistGpId = mistGpId + 1 @@ -662,8 +667,9 @@ do 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 @@ -720,7 +726,6 @@ do 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 @@ -2034,6 +2039,10 @@ for coa_name, coa_data in pairs(mist.DBs.units) do 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 @@ -2158,7 +2167,10 @@ do 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_]) @@ -2200,22 +2212,22 @@ do mist.addEventHandler(addDeadObject) - - --[[local function addClientsToActive(event) - if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT then - if not mist.DBs.activeHumans[Unit.getName(event.initiator)] then + --[[ + 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)]) - if Unit.getPlayerName(event.initiator) then - newU.playerName = Unit.getPlayerName(event.initiator) - end + 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 or event.id == world.event.S_EVENT_DEATH then + 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 - elseif event.id == world.event.S_EVENT_BIRTH then -- do client check - end end @@ -3054,6 +3066,7 @@ function mist.flagFunc.units_in_moving_zones(vars) 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) @@ -3068,14 +3081,23 @@ function mist.flagFunc.units_in_moving_zones(vars) 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 @@ -3088,7 +3110,7 @@ function mist.flagFunc.units_in_moving_zones(vars) 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}}, timer.getTime() + interval) + 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 @@ -3199,11 +3221,11 @@ toggle = boolean or nil end if (unitset1.processed and unitset1.processed < mist.getLastDBUpdateTime()) or not unitset1.processed then -- run unit table short cuts - units = mist.makeUnitTable(unitTableDef1) + unitset1 = mist.makeUnitTable(unitTableDef1) end if (unitset2.processed and unitset2.processed < mist.getLastDBUpdateTime()) or not unitset2.processed then -- run unit table short cuts - units = mist.makeUnitTable(unitTableDef2) + unitset2 = mist.makeUnitTable(unitTableDef2) end @@ -3919,7 +3941,7 @@ 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} + fakeZone.point = {x = pos.x, y = pos.y, z = pos.z} mist.groupToRandomZone(gpData, fakeZone, form, heading, speed) return @@ -4080,21 +4102,23 @@ do local caSlots = false local caMSGtoGroup = false - 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 + 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 - elseif type(value) == 'boolean' and value == true then - caSlots = true - break end end @@ -4193,7 +4217,6 @@ do end if msgTableText['BLUE'] then trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText['BLUE'].text), msgTableText['BLUE'].displayTime, true) - end end @@ -4339,8 +4362,6 @@ 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) - --table.insert(newMsgFor, coaData) - -- added redca or blueca to list end end end @@ -5279,7 +5300,6 @@ mist.teleportToPoint = function(vars) -- main teleport function that all of tele if string.lower(newGroupData.category) == 'static' then return mist.dynAddStatic(newGroupData) end - return mist.dynAdd(newGroupData) end diff --git a/mist_4_0_55.lua b/mist_4_0_57.lua similarity index 98% rename from mist_4_0_55.lua rename to mist_4_0_57.lua index 2238ac8..ce94a48 100644 --- a/mist_4_0_55.lua +++ b/mist_4_0_57.lua @@ -15,7 +15,7 @@ mist = {} -- don't change these mist.majorVersion = 4 mist.minorVersion = 0 -mist.build = 55 +mist.build = 57 -------------------------------------------------------------------------------------------------------------- -- the main area @@ -492,6 +492,7 @@ do 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 @@ -508,21 +509,22 @@ do 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 - - - newObj.country = staticObj.country if not newObj.country then return false end - local newCountry - for countryName, countryId in pairs(country.id) do + 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 @@ -577,12 +579,17 @@ do -- - --env.info('dynAdd') + + --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 countryName, countryId in pairs(country.id) do + for countryId, countryName in pairs(country.name) do if type(cntry) == 'string' then if tostring(countryName) == string.upper(cntry) then newCountry = countryName @@ -616,7 +623,6 @@ do newCat = 'AIRPLANE' end end - local typeName if newCat == 'GROUND_UNIT' then typeName = ' gnd ' @@ -629,7 +635,6 @@ do elseif newCat == 'BUILDING' then typeName = ' bld ' end - if newGroup.clone or not newGroup.groupId then mistDynAddIndex = mistDynAddIndex + 1 mistGpId = mistGpId + 1 @@ -662,8 +667,9 @@ do 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 @@ -720,7 +726,6 @@ do 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 @@ -2034,6 +2039,10 @@ for coa_name, coa_data in pairs(mist.DBs.units) do 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 @@ -2158,7 +2167,10 @@ do 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_]) @@ -2200,22 +2212,22 @@ do mist.addEventHandler(addDeadObject) - - --[[local function addClientsToActive(event) - if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT then - if not mist.DBs.activeHumans[Unit.getName(event.initiator)] then + --[[ + 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)]) - if Unit.getPlayerName(event.initiator) then - newU.playerName = Unit.getPlayerName(event.initiator) - end + 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 or event.id == world.event.S_EVENT_DEATH then + 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 - elseif event.id == world.event.S_EVENT_BIRTH then -- do client check - end end @@ -3054,6 +3066,7 @@ function mist.flagFunc.units_in_moving_zones(vars) 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) @@ -3068,14 +3081,23 @@ function mist.flagFunc.units_in_moving_zones(vars) 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 @@ -3088,7 +3110,7 @@ function mist.flagFunc.units_in_moving_zones(vars) 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}}, timer.getTime() + interval) + 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 @@ -3199,11 +3221,11 @@ toggle = boolean or nil end if (unitset1.processed and unitset1.processed < mist.getLastDBUpdateTime()) or not unitset1.processed then -- run unit table short cuts - units = mist.makeUnitTable(unitTableDef1) + unitset1 = mist.makeUnitTable(unitTableDef1) end if (unitset2.processed and unitset2.processed < mist.getLastDBUpdateTime()) or not unitset2.processed then -- run unit table short cuts - units = mist.makeUnitTable(unitTableDef2) + unitset2 = mist.makeUnitTable(unitTableDef2) end @@ -3919,7 +3941,7 @@ 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} + fakeZone.point = {x = pos.x, y = pos.y, z = pos.z} mist.groupToRandomZone(gpData, fakeZone, form, heading, speed) return @@ -4080,21 +4102,23 @@ do local caSlots = false local caMSGtoGroup = false - 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 + 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 - elseif type(value) == 'boolean' and value == true then - caSlots = true - break end end @@ -4193,7 +4217,6 @@ do end if msgTableText['BLUE'] then trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText['BLUE'].text), msgTableText['BLUE'].displayTime, true) - end end @@ -4339,8 +4362,6 @@ 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) - --table.insert(newMsgFor, coaData) - -- added redca or blueca to list end end end @@ -5279,7 +5300,6 @@ mist.teleportToPoint = function(vars) -- main teleport function that all of tele if string.lower(newGroupData.category) == 'static' then return mist.dynAddStatic(newGroupData) end - return mist.dynAdd(newGroupData) end diff --git a/rev changelog.txt b/rev changelog.txt index c3a8ff9..7b5e9bb 100644 --- a/rev changelog.txt +++ b/rev changelog.txt @@ -1,3 +1,13 @@ +v57 +-fixed bug with groupRandomDistSelf improperly declaring the y variable +-fixed flagFunc.units_in_moving_zones not checking for a unitNameTable for the zone_units +-fixed bug in flagFunc.units_LOS when given a unitNameTable for both entries. + +v56 +-fixed bug with dynAdd and dynAddStatic not recognizing new countries in dcs 1.5 + +v55 +- Release v4 v54 -added a check when adding unitTypes for messages to figure out the correct in-game unit name for a given unit. For example the Mi-8 helicopter is always displayed as 'Mi-8MTV2', however its actual in game name is 'Mi-8MT', this feature allows for you to list 'Mi-8MTV2', 'Mi-8MTV', or 'Mi-8' to get messages sent to the Mi-8. Shortcut also works for the relevant aircraft 'Mig-21', 'Mig-15', 'FW-190', and 'Bf-109'.