Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 31 additions & 8 deletions mist.lua
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ mist = {}
-- don't change these
mist.majorVersion = 4
mist.minorVersion = 5
mist.build = 126
mist.build = 127

-- forward declaration of log shorthand
local log
Expand Down Expand Up @@ -1072,6 +1072,10 @@ do -- the main scope

newTable.units[unitId].type = unitData:getTypeName()
newTable.units[unitId].unitId = tonumber(unitData:getID())

if unitData:getPlayerName() ~= "" and not mist.DBs.MEunitsByName[newTable.units[unitId].unitName] then
newTable.dynamicSlot = timer.getTime()
end


newTable.units[unitId].groupName = newTable.groupName
Expand All @@ -1092,7 +1096,11 @@ do -- the main scope
mistAddedObjects[index] = nil
end
if found == false then
newTable.units[unitId].skill = "High"
if newTable.dynamicSlot then
newTable.units[unitId].skill = "Client"
else
newTable.units[unitId].skill = "High"
end
newTable.units[unitId].alt_type = "BARO"
end
if newTable.units[unitId].alt_type == "RADIO" then -- raw postition MSL was grabbed for group, but spawn is AGL, so re-offset it
Expand Down Expand Up @@ -1155,6 +1163,7 @@ do -- the main scope
newTable.timeAdded = timer.getAbsTime() -- only on the dynGroupsAdded table. For other reference, see start time
--mist.debug.dumpDBs()
--end
--dbLog:warn(newTable)
--dbLog:info('endDbUpdate')
return newTable
end
Expand Down Expand Up @@ -1342,6 +1351,13 @@ do -- the main scope
--dbLog:info('byId')
mist.DBs.unitsById[tonumber(newUnitData.unitId)] = ldeepCopy(newUnitData)
end

if newTable.dynamicSlot then
mist.DBs.humansByName[newTable.units[1].unitName] = ldeepCopy(newUnitData)
if newUnitData.unitId then
mist.DBs.humansById[newTable.units[1].unitId] = ldeepCopy(newUnitData)
end
end
mist.DBs.unitsByName[newUnitData.unitName] = ldeepCopy(newUnitData)
end
-- this is a really annoying DB to populate. Gotta create new tables in case its missing
Expand Down Expand Up @@ -1384,6 +1400,9 @@ do -- the main scope
--dbLog:info('add to dynGroups')
mist.DBs.dynGroupsAdded[#mist.DBs.dynGroupsAdded + 1] = ldeepCopy(newTable)
--dbLog:info('clear entry')



updateChecker[newTable.name] = nil
--dbLog:info('return')
return true
Expand Down Expand Up @@ -1437,14 +1456,15 @@ do -- the main scope
-- dont need to add units spawned in at the start of the mission if mist is loaded in init line
if event.id == world.event.S_EVENT_BIRTH and timer.getTime0() < timer.getAbsTime() then

if Object.getCategory(event.initiator) == 1 and not Unit.getPlayerName(event.initiator) then -- simple player check, will need to later check to see if unit was spawned with a player in a flight
if Object.getCategory(event.initiator) == 1 then
--log:info('Object is a Unit')
if Unit.getGroup(event.initiator) then
local g = Unit.getGroup(event.initiator)
if g and event.initiator:getPlayerName() ~= "" and not mist.DBs.MEunitsByName[event.initiator:getName()] then
-- log:info(Unit.getGroup(event.initiator):getName())
local g = Unit.getGroup(event.initiator)
if not tempSpawnedGroups[g:getName()] then
--log:info('added')
tempSpawnedGroups[g:getName()] = {type = 'group', gp = g}
local gName = g:getName()
if not tempSpawnedGroups[gName] then
--log:warn('addedTo tempSpawnedGroups: $1', gName)
tempSpawnedGroups[gName] = {type = 'group', gp = g}
tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1
end
else
Expand Down Expand Up @@ -4800,6 +4820,9 @@ do -- group functions scope
highNum = secondNum
end
local total = 1
if highNum > 50 then
return math.random(lowNum, highNum)
end
if math.abs(highNum - lowNum + 1) < 50 then -- if total values is less than 50
total = math.modf(50/math.abs(highNum - lowNum + 1)) -- make x copies required to be above 50
end
Expand Down
77 changes: 64 additions & 13 deletions mist_4_5_126.lua → mist_4_5_127.lua
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ mist = {}
-- don't change these
mist.majorVersion = 4
mist.minorVersion = 5
mist.build = 125
mist.build = 127

-- forward declaration of log shorthand
local log
Expand Down Expand Up @@ -982,6 +982,7 @@ do -- the main scope
local newObject
if Group.getByName(event) then
newObject = Group.getByName(event)
objType = "group"
elseif StaticObject.getByName(event) then
newObject = StaticObject.getByName(event)
objType = "static"
Expand Down Expand Up @@ -1072,6 +1073,10 @@ do -- the main scope

newTable.units[unitId].type = unitData:getTypeName()
newTable.units[unitId].unitId = tonumber(unitData:getID())

if unitData:getPlayerName() ~= "" and not mist.DBs.MEunitsByName[newTable.units[unitId].unitName] then
newTable.dynamicSlot = timer.getTime()
end


newTable.units[unitId].groupName = newTable.groupName
Expand All @@ -1092,7 +1097,11 @@ do -- the main scope
mistAddedObjects[index] = nil
end
if found == false then
newTable.units[unitId].skill = "High"
if newTable.dynamicSlot then
newTable.units[unitId].skill = "Client"
else
newTable.units[unitId].skill = "High"
end
newTable.units[unitId].alt_type = "BARO"
end
if newTable.units[unitId].alt_type == "RADIO" then -- raw postition MSL was grabbed for group, but spawn is AGL, so re-offset it
Expand Down Expand Up @@ -1155,6 +1164,7 @@ do -- the main scope
newTable.timeAdded = timer.getAbsTime() -- only on the dynGroupsAdded table. For other reference, see start time
--mist.debug.dumpDBs()
--end
--dbLog:warn(newTable)
--dbLog:info('endDbUpdate')
return newTable
end
Expand Down Expand Up @@ -1342,6 +1352,13 @@ do -- the main scope
--dbLog:info('byId')
mist.DBs.unitsById[tonumber(newUnitData.unitId)] = ldeepCopy(newUnitData)
end

if newTable.dynamicSlot then
mist.DBs.humansByName[newTable.units[1].unitName] = ldeepCopy(newUnitData)
if newUnitData.unitId then
mist.DBs.humansById[newTable.units[1].unitId] = ldeepCopy(newUnitData)
end
end
mist.DBs.unitsByName[newUnitData.unitName] = ldeepCopy(newUnitData)
end
-- this is a really annoying DB to populate. Gotta create new tables in case its missing
Expand Down Expand Up @@ -1384,6 +1401,9 @@ do -- the main scope
--dbLog:info('add to dynGroups')
mist.DBs.dynGroupsAdded[#mist.DBs.dynGroupsAdded + 1] = ldeepCopy(newTable)
--dbLog:info('clear entry')



updateChecker[newTable.name] = nil
--dbLog:info('return')
return true
Expand All @@ -1393,7 +1413,8 @@ do -- the main scope
-- object is static object or group.
-- call dbUpdate to get the table

local tbl = dbUpdate(object)
local tbl = {}
tbl.data = dbUpdate(object)
if tbl then
local res = writeDBTables(tbl)
if not res then
Expand All @@ -1402,8 +1423,32 @@ do -- the main scope
end
-- call writeDBTables with that table.
end

local function updateDBTables()
------------------------------------------------------------------------------------------
function mist.updateMISTDBsDynSpwans(params, t) -- Update mist.DBs tables with planes & helos dynamic slots spwaned
-- to allow dynamic slots to access MIST functions
if t == nil then t = timer.getTime() end

local table1 = {}
table1 = mist.mergeTables(coalition.getGroups(1,0), coalition.getGroups(2,0)) -- detect red & blue planes
table1 = mist.mergeTables(table1, coalition.getGroups(1,1)) -- detect red helos
table1 = mist.mergeTables(table1, coalition.getGroups(2,1)) -- detect blue helos

local grps = {}
for i=1, #table1 do
grps[#grps+1] = table1[i]:getName()
end

if grps ~= nil then
for k,v in pairs(grps) do
mist.forceAddToDB(v)
end
end
timer.scheduleFunction(mist.updateMISTDBsDynSpwans, nil, t + 5)
end
--mist.updateMISTDBsDynSpwans(nil, timer.getTime()) -- run need be located in mist.init()
end

local function updateDBTables()
local i = #writeGroups

local savesPerRun = math.ceil(i/10)
Expand Down Expand Up @@ -1437,14 +1482,15 @@ do -- the main scope
-- dont need to add units spawned in at the start of the mission if mist is loaded in init line
if event.id == world.event.S_EVENT_BIRTH and timer.getTime0() < timer.getAbsTime() then

if Object.getCategory(event.initiator) == 1 and not Unit.getPlayerName(event.initiator) then -- simple player check, will need to later check to see if unit was spawned with a player in a flight
if Object.getCategory(event.initiator) == 1 then
--log:info('Object is a Unit')
if Unit.getGroup(event.initiator) then
local g = Unit.getGroup(event.initiator)
if g and event.initiator:getPlayerName() ~= "" and not mist.DBs.MEunitsByName[event.initiator:getName()] then
-- log:info(Unit.getGroup(event.initiator):getName())
local g = Unit.getGroup(event.initiator)
if not tempSpawnedGroups[g:getName()] then
--log:info('added')
tempSpawnedGroups[g:getName()] = {type = 'group', gp = g}
local gName = g:getName()
if not tempSpawnedGroups[gName] then
--log:warn('addedTo tempSpawnedGroups: $1', gName)
tempSpawnedGroups[gName] = {type = 'group', gp = g}
tempSpawnGroupsCounter = tempSpawnGroupsCounter + 1
end
else
Expand Down Expand Up @@ -1661,8 +1707,10 @@ do -- the main scope
-- call main the first time therafter it reschedules itself.
mist.main()
--log:msg('MIST version $1.$2.$3 loaded', mist.majorVersion, mist.minorVersion, mist.build)

mist.scheduleFunction(verifyDB, {}, timer.getTime() + 1)

mist.updateMISTDBsDynSpwans(nil, timer.getTime())

mist.scheduleFunction(verifyDB, {}, timer.getTime() + 1)
return
end

Expand Down Expand Up @@ -4800,6 +4848,9 @@ do -- group functions scope
highNum = secondNum
end
local total = 1
if highNum > 50 then
return math.random(lowNum, highNum)
end
if math.abs(highNum - lowNum + 1) < 50 then -- if total values is less than 50
total = math.modf(50/math.abs(highNum - lowNum + 1)) -- make x copies required to be above 50
end
Expand Down