Merge pull request #19 from mrSkortch/development

Development
This commit is contained in:
mrSkortch 2015-10-15 00:06:25 -06:00
commit 838855ed2b
3 changed files with 134 additions and 84 deletions

104
mist.lua
View File

@ -15,7 +15,7 @@ mist = {}
-- don't change these -- don't change these
mist.majorVersion = 4 mist.majorVersion = 4
mist.minorVersion = 0 mist.minorVersion = 0
mist.build = 55 mist.build = 57
-------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------
-- the main area -- the main area
@ -492,6 +492,7 @@ do
newObj.name = staticObj.name newObj.name = staticObj.name
newObj.dead = staticObj.dead newObj.dead = staticObj.dead
newObj.country = staticObj.country newObj.country = staticObj.country
newObj.countryId = staticObj.countryId
newObj.clone = staticObj.clone newObj.clone = staticObj.clone
newObj.shape_name = staticObj.shape_name newObj.shape_name = staticObj.shape_name
newObj.canCargo = staticObj.canCargo newObj.canCargo = staticObj.canCargo
@ -508,21 +509,22 @@ do
newObj.name = staticObj.units[1].name newObj.name = staticObj.units[1].name
newObj.dead = staticObj.units[1].dead newObj.dead = staticObj.units[1].dead
newObj.country = staticObj.units[1].country newObj.country = staticObj.units[1].country
newObj.countryId = staticObj.units[1].countryId
newObj.shape_name = staticObj.units[1].shape_name newObj.shape_name = staticObj.units[1].shape_name
newObj.canCargo = staticObj.units[1].canCargo newObj.canCargo = staticObj.units[1].canCargo
newObj.mass = staticObj.units[1].mass newObj.mass = staticObj.units[1].mass
newObj.categoryStatic = staticObj.units[1].categoryStatic newObj.categoryStatic = staticObj.units[1].categoryStatic
end end
newObj.country = staticObj.country
if not newObj.country then if not newObj.country then
return false return false
end end
local newCountry local newCountry = newObj.country
for countryName, countryId in pairs(country.id) do if newObj.countryId then
newCountry = newObj.countryId
end
for countryId, countryName in pairs(country.name) do
if type(newObj.country) == 'string' then if type(newObj.country) == 'string' then
if tostring(countryName) == string.upper(newObj.country) then if tostring(countryName) == string.upper(newObj.country) then
newCountry = countryName newCountry = countryName
@ -577,12 +579,17 @@ do
-- --
--env.info('dynAdd')
--mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua')
local cntry = newGroup.country local cntry = newGroup.country
if newGroup.countryId then
cntry = newGroup.countryId
end
local groupType = newGroup.category local groupType = newGroup.category
local newCountry = '' local newCountry = ''
-- validate data -- validate data
for countryName, countryId in pairs(country.id) do for countryId, countryName in pairs(country.name) do
if type(cntry) == 'string' then if type(cntry) == 'string' then
if tostring(countryName) == string.upper(cntry) then if tostring(countryName) == string.upper(cntry) then
newCountry = countryName newCountry = countryName
@ -616,7 +623,6 @@ do
newCat = 'AIRPLANE' newCat = 'AIRPLANE'
end end
end end
local typeName local typeName
if newCat == 'GROUND_UNIT' then if newCat == 'GROUND_UNIT' then
typeName = ' gnd ' typeName = ' gnd '
@ -629,7 +635,6 @@ do
elseif newCat == 'BUILDING' then elseif newCat == 'BUILDING' then
typeName = ' bld ' typeName = ' bld '
end end
if newGroup.clone or not newGroup.groupId then if newGroup.clone or not newGroup.groupId then
mistDynAddIndex = mistDynAddIndex + 1 mistDynAddIndex = mistDynAddIndex + 1
mistGpId = mistGpId + 1 mistGpId = mistGpId + 1
@ -662,8 +667,9 @@ do
newGroup.start_time = 0 newGroup.start_time = 0
end end
end end
for unitIndex, unitData in pairs(newGroup.units) do for unitIndex, unitData in pairs(newGroup.units) do
local originalName = newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name local originalName = newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name
if newGroup.clone or not unitData.unitId then if newGroup.clone or not unitData.unitId then
mistUnitId = mistUnitId + 1 mistUnitId = mistUnitId + 1
@ -720,7 +726,6 @@ do
mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newGroup.units[unitIndex]) mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newGroup.units[unitIndex])
end end
mistAddedGroups[#mistAddedGroups + 1] = mist.utils.deepCopy(newGroup) mistAddedGroups[#mistAddedGroups + 1] = mist.utils.deepCopy(newGroup)
if newGroup.route and not newGroup.route.points then if newGroup.route and not newGroup.route.points then
if not newGroup.route.points and newGroup.route[1] then if not newGroup.route.points and newGroup.route[1] then
local copyRoute = newGroup.route 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 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.humansByName[unit_data.unitName] = mist.utils.deepCopy(unit_data)
mist.DBs.humansById[unit_data.unitId] = 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
@ -2158,7 +2167,10 @@ do
val['objectPos'] = pos.p val['objectPos'] = pos.p
end end
val['objectType'] = mist.DBs.aliveUnits[val.object.id_].category 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 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') --print('object found in old_alive_units')
val['objectData'] = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) val['objectData'] = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_])
@ -2200,22 +2212,22 @@ do
mist.addEventHandler(addDeadObject) mist.addEventHandler(addDeadObject)
--[[
--[[local function addClientsToActive(event) local function addClientsToActive(event)
if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT then if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT or event.id == world.event.S_EVENT_BIRTH then
if not mist.DBs.activeHumans[Unit.getName(event.initiator)] 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)]) local newU = mist.utils.deepCopy(mist.DBs.unitsByName[Unit.getName(event.initiator)])
if Unit.getPlayerName(event.initiator) then newU.playerName = Unit.getPlayerName(event.initiator)
newU.playerName = Unit.getPlayerName(event.initiator)
end
mist.DBs.activeHumans[Unit.getName(event.initiator)] = newU mist.DBs.activeHumans[Unit.getName(event.initiator)] = newU
--trigger.action.outText('added: ' .. Unit.getName(event.initiator), 20)
end 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 if mist.DBs.activeHumans[Unit.getName(event.initiator)] then
mist.DBs.activeHumans[Unit.getName(event.initiator)] = nil mist.DBs.activeHumans[Unit.getName(event.initiator)] = nil
-- trigger.action.outText('removed via control: ' .. Unit.getName(event.initiator), 20)
end end
elseif event.id == world.event.S_EVENT_BIRTH then -- do client check
end end
end end
@ -3054,6 +3066,7 @@ function mist.flagFunc.units_in_moving_zones(vars)
interval = {'number', 'nil'}, interval = {'number', 'nil'},
toggle = {'boolean', 'nil'}, toggle = {'boolean', 'nil'},
unitTableDef = {'table', 'nil'}, unitTableDef = {'table', 'nil'},
zUnitTableDef = {'table', 'nil'},
} }
local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_moving_zones', type_tbl, vars) 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 interval = vars.interval or 1
local toggle = vars.toggle or nil local toggle = vars.toggle or nil
local unitTableDef = vars.unitTableDef local unitTableDef = vars.unitTableDef
local zUnitTableDef = vars.zUnitTableDef
if not units.processed then if not units.processed then
unitTableDef = mist.utils.deepCopy(units) unitTableDef = mist.utils.deepCopy(units)
end end
if not zone_units.processed then
zUnitTableDef = mist.utils.deepCopy(zone_units)
end
if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts
units = mist.makeUnitTable(unitTableDef) units = mist.makeUnitTable(unitTableDef)
end end
if (zone_units.processed and zone_units.processed < mist.getLastDBUpdateTime()) or not zone_units.processed then -- run unit table short cuts
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 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 end
-- do another check in case stopflag was set true by this function -- 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 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
end end
@ -3199,11 +3221,11 @@ toggle = boolean or nil
end end
if (unitset1.processed and unitset1.processed < mist.getLastDBUpdateTime()) or not unitset1.processed then -- run unit table short cuts 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 end
if (unitset2.processed and unitset2.processed < mist.getLastDBUpdateTime()) or not unitset2.processed then -- run unit table short cuts 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 end
@ -3919,7 +3941,7 @@ mist.groupRandomDistSelf = function(gpData, dist, form, heading, speed)
local pos = mist.getLeadPos(gpData) local pos = mist.getLeadPos(gpData)
local fakeZone = {} local fakeZone = {}
fakeZone.radius = dist or math.random(300, 1000) 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) mist.groupToRandomZone(gpData, fakeZone, form, heading, speed)
return return
@ -4080,21 +4102,23 @@ do
local caSlots = false local caSlots = false
local caMSGtoGroup = false local caMSGtoGroup = false
for index, value in pairs(env.mission.groundControl) do if env.mission.groundControl then -- just to be sure?
if type(value) == 'table' then for index, value in pairs(env.mission.groundControl) do
for roleName, roleVal in pairs(value) do if type(value) == 'table' then
for rIndex, rVal in pairs(roleVal) do for roleName, roleVal in pairs(value) do
if rIndex == 'red' or rIndex == 'blue' then for rIndex, rVal in pairs(roleVal) do
if env.mission.groundControl[index][roleName][rIndex] > 0 then if rIndex == 'red' or rIndex == 'blue' then
caSlots = true if env.mission.groundControl[index][roleName][rIndex] > 0 then
break caSlots = true
break
end
end end
end end
end end
elseif type(value) == 'boolean' and value == true then
caSlots = true
break
end end
elseif type(value) == 'boolean' and value == true then
caSlots = true
break
end end
end end
@ -4193,7 +4217,6 @@ do
end end
if msgTableText['BLUE'] then if msgTableText['BLUE'] then
trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText['BLUE'].text), msgTableText['BLUE'].displayTime, true) trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText['BLUE'].text), msgTableText['BLUE'].displayTime, true)
end end
end end
@ -4339,8 +4362,6 @@ do
if string.lower(forIndex) == 'coa' or string.lower(forIndex) == 'ca' then if string.lower(forIndex) == 'coa' or string.lower(forIndex) == 'ca' then
if listData == string.lower(coaData) or listData == 'all' then if listData == string.lower(coaData) or listData == 'all' then
newMsgFor = msgSpamFilter(newMsgFor, coaData) newMsgFor = msgSpamFilter(newMsgFor, coaData)
--table.insert(newMsgFor, coaData)
-- added redca or blueca to list
end end
end 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 if string.lower(newGroupData.category) == 'static' then
return mist.dynAddStatic(newGroupData) return mist.dynAddStatic(newGroupData)
end end
return mist.dynAdd(newGroupData) return mist.dynAdd(newGroupData)
end end

View File

@ -15,7 +15,7 @@ mist = {}
-- don't change these -- don't change these
mist.majorVersion = 4 mist.majorVersion = 4
mist.minorVersion = 0 mist.minorVersion = 0
mist.build = 55 mist.build = 57
-------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------
-- the main area -- the main area
@ -492,6 +492,7 @@ do
newObj.name = staticObj.name newObj.name = staticObj.name
newObj.dead = staticObj.dead newObj.dead = staticObj.dead
newObj.country = staticObj.country newObj.country = staticObj.country
newObj.countryId = staticObj.countryId
newObj.clone = staticObj.clone newObj.clone = staticObj.clone
newObj.shape_name = staticObj.shape_name newObj.shape_name = staticObj.shape_name
newObj.canCargo = staticObj.canCargo newObj.canCargo = staticObj.canCargo
@ -508,21 +509,22 @@ do
newObj.name = staticObj.units[1].name newObj.name = staticObj.units[1].name
newObj.dead = staticObj.units[1].dead newObj.dead = staticObj.units[1].dead
newObj.country = staticObj.units[1].country newObj.country = staticObj.units[1].country
newObj.countryId = staticObj.units[1].countryId
newObj.shape_name = staticObj.units[1].shape_name newObj.shape_name = staticObj.units[1].shape_name
newObj.canCargo = staticObj.units[1].canCargo newObj.canCargo = staticObj.units[1].canCargo
newObj.mass = staticObj.units[1].mass newObj.mass = staticObj.units[1].mass
newObj.categoryStatic = staticObj.units[1].categoryStatic newObj.categoryStatic = staticObj.units[1].categoryStatic
end end
newObj.country = staticObj.country
if not newObj.country then if not newObj.country then
return false return false
end end
local newCountry local newCountry = newObj.country
for countryName, countryId in pairs(country.id) do if newObj.countryId then
newCountry = newObj.countryId
end
for countryId, countryName in pairs(country.name) do
if type(newObj.country) == 'string' then if type(newObj.country) == 'string' then
if tostring(countryName) == string.upper(newObj.country) then if tostring(countryName) == string.upper(newObj.country) then
newCountry = countryName newCountry = countryName
@ -577,12 +579,17 @@ do
-- --
--env.info('dynAdd')
--mist.debug.writeData(mist.utils.serialize,{'msg', newGroup}, 'newGroupOrig.lua')
local cntry = newGroup.country local cntry = newGroup.country
if newGroup.countryId then
cntry = newGroup.countryId
end
local groupType = newGroup.category local groupType = newGroup.category
local newCountry = '' local newCountry = ''
-- validate data -- validate data
for countryName, countryId in pairs(country.id) do for countryId, countryName in pairs(country.name) do
if type(cntry) == 'string' then if type(cntry) == 'string' then
if tostring(countryName) == string.upper(cntry) then if tostring(countryName) == string.upper(cntry) then
newCountry = countryName newCountry = countryName
@ -616,7 +623,6 @@ do
newCat = 'AIRPLANE' newCat = 'AIRPLANE'
end end
end end
local typeName local typeName
if newCat == 'GROUND_UNIT' then if newCat == 'GROUND_UNIT' then
typeName = ' gnd ' typeName = ' gnd '
@ -629,7 +635,6 @@ do
elseif newCat == 'BUILDING' then elseif newCat == 'BUILDING' then
typeName = ' bld ' typeName = ' bld '
end end
if newGroup.clone or not newGroup.groupId then if newGroup.clone or not newGroup.groupId then
mistDynAddIndex = mistDynAddIndex + 1 mistDynAddIndex = mistDynAddIndex + 1
mistGpId = mistGpId + 1 mistGpId = mistGpId + 1
@ -662,8 +667,9 @@ do
newGroup.start_time = 0 newGroup.start_time = 0
end end
end end
for unitIndex, unitData in pairs(newGroup.units) do for unitIndex, unitData in pairs(newGroup.units) do
local originalName = newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name local originalName = newGroup.units[unitIndex].unitName or newGroup.units[unitIndex].name
if newGroup.clone or not unitData.unitId then if newGroup.clone or not unitData.unitId then
mistUnitId = mistUnitId + 1 mistUnitId = mistUnitId + 1
@ -720,7 +726,6 @@ do
mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newGroup.units[unitIndex]) mistAddedObjects[#mistAddedObjects + 1] = mist.utils.deepCopy(newGroup.units[unitIndex])
end end
mistAddedGroups[#mistAddedGroups + 1] = mist.utils.deepCopy(newGroup) mistAddedGroups[#mistAddedGroups + 1] = mist.utils.deepCopy(newGroup)
if newGroup.route and not newGroup.route.points then if newGroup.route and not newGroup.route.points then
if not newGroup.route.points and newGroup.route[1] then if not newGroup.route.points and newGroup.route[1] then
local copyRoute = newGroup.route 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 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.humansByName[unit_data.unitName] = mist.utils.deepCopy(unit_data)
mist.DBs.humansById[unit_data.unitId] = 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
@ -2158,7 +2167,10 @@ do
val['objectPos'] = pos.p val['objectPos'] = pos.p
end end
val['objectType'] = mist.DBs.aliveUnits[val.object.id_].category 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 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') --print('object found in old_alive_units')
val['objectData'] = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_]) val['objectData'] = mist.utils.deepCopy(mist.DBs.removedAliveUnits[val.object.id_])
@ -2200,22 +2212,22 @@ do
mist.addEventHandler(addDeadObject) mist.addEventHandler(addDeadObject)
--[[
--[[local function addClientsToActive(event) local function addClientsToActive(event)
if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT then if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT or event.id == world.event.S_EVENT_BIRTH then
if not mist.DBs.activeHumans[Unit.getName(event.initiator)] 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)]) local newU = mist.utils.deepCopy(mist.DBs.unitsByName[Unit.getName(event.initiator)])
if Unit.getPlayerName(event.initiator) then newU.playerName = Unit.getPlayerName(event.initiator)
newU.playerName = Unit.getPlayerName(event.initiator)
end
mist.DBs.activeHumans[Unit.getName(event.initiator)] = newU mist.DBs.activeHumans[Unit.getName(event.initiator)] = newU
--trigger.action.outText('added: ' .. Unit.getName(event.initiator), 20)
end 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 if mist.DBs.activeHumans[Unit.getName(event.initiator)] then
mist.DBs.activeHumans[Unit.getName(event.initiator)] = nil mist.DBs.activeHumans[Unit.getName(event.initiator)] = nil
-- trigger.action.outText('removed via control: ' .. Unit.getName(event.initiator), 20)
end end
elseif event.id == world.event.S_EVENT_BIRTH then -- do client check
end end
end end
@ -3054,6 +3066,7 @@ function mist.flagFunc.units_in_moving_zones(vars)
interval = {'number', 'nil'}, interval = {'number', 'nil'},
toggle = {'boolean', 'nil'}, toggle = {'boolean', 'nil'},
unitTableDef = {'table', 'nil'}, unitTableDef = {'table', 'nil'},
zUnitTableDef = {'table', 'nil'},
} }
local err, errmsg = mist.utils.typeCheck('mist.flagFunc.units_in_moving_zones', type_tbl, vars) 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 interval = vars.interval or 1
local toggle = vars.toggle or nil local toggle = vars.toggle or nil
local unitTableDef = vars.unitTableDef local unitTableDef = vars.unitTableDef
local zUnitTableDef = vars.zUnitTableDef
if not units.processed then if not units.processed then
unitTableDef = mist.utils.deepCopy(units) unitTableDef = mist.utils.deepCopy(units)
end end
if not zone_units.processed then
zUnitTableDef = mist.utils.deepCopy(zone_units)
end
if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts if (units.processed and units.processed < mist.getLastDBUpdateTime()) or not units.processed then -- run unit table short cuts
units = mist.makeUnitTable(unitTableDef) units = mist.makeUnitTable(unitTableDef)
end end
if (zone_units.processed and zone_units.processed < mist.getLastDBUpdateTime()) or not zone_units.processed then -- run unit table short cuts
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 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 end
-- do another check in case stopflag was set true by this function -- 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 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
end end
@ -3199,11 +3221,11 @@ toggle = boolean or nil
end end
if (unitset1.processed and unitset1.processed < mist.getLastDBUpdateTime()) or not unitset1.processed then -- run unit table short cuts 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 end
if (unitset2.processed and unitset2.processed < mist.getLastDBUpdateTime()) or not unitset2.processed then -- run unit table short cuts 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 end
@ -3919,7 +3941,7 @@ mist.groupRandomDistSelf = function(gpData, dist, form, heading, speed)
local pos = mist.getLeadPos(gpData) local pos = mist.getLeadPos(gpData)
local fakeZone = {} local fakeZone = {}
fakeZone.radius = dist or math.random(300, 1000) 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) mist.groupToRandomZone(gpData, fakeZone, form, heading, speed)
return return
@ -4080,21 +4102,23 @@ do
local caSlots = false local caSlots = false
local caMSGtoGroup = false local caMSGtoGroup = false
for index, value in pairs(env.mission.groundControl) do if env.mission.groundControl then -- just to be sure?
if type(value) == 'table' then for index, value in pairs(env.mission.groundControl) do
for roleName, roleVal in pairs(value) do if type(value) == 'table' then
for rIndex, rVal in pairs(roleVal) do for roleName, roleVal in pairs(value) do
if rIndex == 'red' or rIndex == 'blue' then for rIndex, rVal in pairs(roleVal) do
if env.mission.groundControl[index][roleName][rIndex] > 0 then if rIndex == 'red' or rIndex == 'blue' then
caSlots = true if env.mission.groundControl[index][roleName][rIndex] > 0 then
break caSlots = true
break
end
end end
end end
end end
elseif type(value) == 'boolean' and value == true then
caSlots = true
break
end end
elseif type(value) == 'boolean' and value == true then
caSlots = true
break
end end
end end
@ -4193,7 +4217,6 @@ do
end end
if msgTableText['BLUE'] then if msgTableText['BLUE'] then
trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText['BLUE'].text), msgTableText['BLUE'].displayTime, true) trigger.action.outTextForCoalition(coalition.side.BLUE, table.concat(msgTableText['BLUE'].text), msgTableText['BLUE'].displayTime, true)
end end
end end
@ -4339,8 +4362,6 @@ do
if string.lower(forIndex) == 'coa' or string.lower(forIndex) == 'ca' then if string.lower(forIndex) == 'coa' or string.lower(forIndex) == 'ca' then
if listData == string.lower(coaData) or listData == 'all' then if listData == string.lower(coaData) or listData == 'all' then
newMsgFor = msgSpamFilter(newMsgFor, coaData) newMsgFor = msgSpamFilter(newMsgFor, coaData)
--table.insert(newMsgFor, coaData)
-- added redca or blueca to list
end end
end 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 if string.lower(newGroupData.category) == 'static' then
return mist.dynAddStatic(newGroupData) return mist.dynAddStatic(newGroupData)
end end
return mist.dynAdd(newGroupData) return mist.dynAdd(newGroupData)
end end

View File

@ -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 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'. -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'.