diff --git a/mist.lua b/mist.lua index 5f1c5b4..9599d51 100644 --- a/mist.lua +++ b/mist.lua @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/mist_4_5_126.lua b/mist_4_5_127.lua similarity index 99% rename from mist_4_5_126.lua rename to mist_4_5_127.lua index 243bcca..da027b7 100644 --- a/mist_4_5_126.lua +++ b/mist_4_5_127.lua @@ -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 @@ -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" @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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) @@ -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 @@ -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 @@ -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