From b9fa2f937eeb157511a2bde91a2ab259b5636408 Mon Sep 17 00:00:00 2001 From: RexAttaque Date: Sun, 7 Jan 2024 00:56:49 +0100 Subject: [PATCH 1/2] Cleaned up code (local variables, fixed typos, used pairs for loops to have something more compact and modular, added logging) --- CTLD.lua | 66 ++++++++++++++++++++++++++------------------------------ 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/CTLD.lua b/CTLD.lua index 2fb734d..f443219 100644 --- a/CTLD.lua +++ b/CTLD.lua @@ -789,44 +789,43 @@ ctld.jtacUnitTypes = { -- **************** Mission Editor Functions ********************* -- *************************************************************** -function AddPlayerAircraftByType() - _bluePlayers = coalition.getPlayers(2) - _redPlayers = coalition.getPlayers(1) +function ctld.AddPlayerAircraftByType() - --> Blue Players - for i = 1, #_bluePlayers do - for i_2 = 1, #ctld.aircraftTypeTable do - if ctld.aircraftTypeTable[i_2] == Unit.getTypeName(_bluePlayers[i]) then - _match = 0 - for i_3 = 1, #ctld.transportPilotNames do + ctld.logTrace("ctld.AddPlayerAircraftByType()") - if ctld.transportPilotNames[i_3] == Unit.getName(_bluePlayers[i]) then - _match = match + 1 + local coalitions = { + ["red"] = coalition.getPlayers(1), + ["blue"] = coalition.getPlayers(2) + } + + ctld.logTrace("Got following players in coalitions :" .. ctld.p(coalitions)) + + for _, _players in pairs(coalitions) do + for _,_player in pairs(_players) do + local playerTypeName = _player:getTypeName() + local playerUnitName = _player:getName() + + ctld.logTrace("Player : " .. ctld.p(_player) .. " has unit name : " .. playerUnitName .. " and type : " .. playerTypeName) + + if _player ~= nil then + local notFound = true + + for _,transportPilotName in pairs(ctld.transportPilotNames) do + if transportPilotName == playerUnitName then + + ctld.logTrace("Player is already a transport pilot, skipping...") + notFound = false + break end end - if _match == 0 then - ctld.transportPilotNames[#ctld.transportPilotNames+1] = Unit.getName(_bluePlayers[i]) - end - end - end - end - - --> Red Players - for i = 1, #_redPlayers do - for i_2 = 1, #ctld.aircraftTypeTable do - if ctld.aircraftTypeTable[i_2] == Unit.getTypeName(_redPlayers[i]) then - _match = 0 - for i_3 = 1, #ctld.transportPilotNames do - - if ctld.transportPilotNames[i_3] == Unit.getName(_redPlayers[i]) then - _match = match + 1 + if notFound then + for _,aircraftType in pairs(ctld.aircraftTypeTable) do + if aircraftType == playerTypeName then + table.insert(ctld.transportPilotNames, playerUnitName) + end end end - if _match == 0 then - ctld.transportPilotNames[#ctld.transportPilotNames+1] = Unit.getName(_redPlayers[i]) - end - end end end @@ -4635,7 +4634,6 @@ end -- are we in pickup zone function ctld.inPickupZone(_heli) - ctld.logDebug(string.format("ctld.inPickupZone(_heli=%s)", ctld.p(_heli))) if ctld.inAir(_heli) then return { inZone = false, limit = -1, index = -1 } @@ -4644,7 +4642,6 @@ function ctld.inPickupZone(_heli) local _heliPoint = _heli:getPoint() for _i, _zoneDetails in pairs(ctld.pickupZones) do - ctld.logTrace(string.format("_zoneDetails=%s", ctld.p(_zoneDetails))) local _triggerZone = trigger.misc.getZone(_zoneDetails[1]) @@ -4665,7 +4662,6 @@ function ctld.inPickupZone(_heli) --get distance to center local _dist = ctld.getDistance(_heliPoint, _triggerZone.point) - ctld.logTrace(string.format("_dist=%s", ctld.p(_dist))) if _dist <= _triggerZone.radius then local _heliCoalition = _heli:getCoalition() if _zoneDetails[4] == 1 and (_zoneDetails[5] == _heliCoalition or _zoneDetails[5] == 0) then @@ -5065,7 +5061,7 @@ function ctld.addF10MenuOptions() timer.scheduleFunction(ctld.addF10MenuOptions, nil, timer.getTime() + 10) if ctld.addPlayerAircraftByType == true then - AddPlayerAircraftByType() + ctld.AddPlayerAircraftByType() end for _, _unitName in pairs(ctld.transportPilotNames) do From e5a18716737f4742e2f061e41898c641542c2ced Mon Sep 17 00:00:00 2001 From: RexAttaque Date: Fri, 19 Jan 2024 23:40:53 +0100 Subject: [PATCH 2/2] Transitionned to using the MIST database to add transport pilots at CTLD init --- CTLD.lua | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/CTLD.lua b/CTLD.lua index f443219..8a05b1c 100644 --- a/CTLD.lua +++ b/CTLD.lua @@ -793,27 +793,33 @@ function ctld.AddPlayerAircraftByType() ctld.logTrace("ctld.AddPlayerAircraftByType()") - local coalitions = { - ["red"] = coalition.getPlayers(1), - ["blue"] = coalition.getPlayers(2) - } + for _, _countries in pairs(mist.DBs.units) do + for _, _categories in pairs(_countries) do + for _category, _groups in pairs(_categories) do - ctld.logTrace("Got following players in coalitions :" .. ctld.p(coalitions)) + if type(_groups) == "table" and _category ~= nil and (_category == "helicopter" or _category == "plane") then - for _, _players in pairs(coalitions) do - for _,_player in pairs(_players) do - local playerTypeName = _player:getTypeName() - local playerUnitName = _player:getName() + if _groups ~= nil then - ctld.logTrace("Player : " .. ctld.p(_player) .. " has unit name : " .. playerUnitName .. " and type : " .. playerTypeName) + for _,_group in pairs(_groups) do + + if _group ~= nil and _group.units ~= nil then + + for _,_unit in pairs(_group.units) do + + if _unit ~= nil then + local playerTypeName = _unit.type + local playerUnitName = _unit.unitName + + ctld.logTrace("Unit : " .. ctld.p(_unit)) + ctld.logDebug("Has name : " .. playerUnitName .. " and type : " .. playerTypeName) - if _player ~= nil then local notFound = true for _,transportPilotName in pairs(ctld.transportPilotNames) do if transportPilotName == playerUnitName then - ctld.logTrace("Player is already a transport pilot, skipping...") + ctld.logDebug("Unit is already a transport pilot, skipping...") notFound = false break end @@ -822,7 +828,14 @@ function ctld.AddPlayerAircraftByType() if notFound then for _,aircraftType in pairs(ctld.aircraftTypeTable) do if aircraftType == playerTypeName then + ctld.logDebug("Adding unit as transport pilot...") table.insert(ctld.transportPilotNames, playerUnitName) + end + end + end + end + end + end end end end @@ -5060,10 +5073,6 @@ function ctld.addF10MenuOptions() timer.scheduleFunction(ctld.addF10MenuOptions, nil, timer.getTime() + 10) - if ctld.addPlayerAircraftByType == true then - ctld.AddPlayerAircraftByType() - end - for _, _unitName in pairs(ctld.transportPilotNames) do local status, error = pcall(function() @@ -6568,6 +6577,10 @@ function ctld.initialize(force) assert(mist ~= nil, "\n\n** HEY MISSION-DESIGNER! **\n\nMiST has not been loaded!\n\nMake sure MiST 3.6 or higher is running\n*before* running this script!\n") + if ctld.addPlayerAircraftByType == true then + ctld.AddPlayerAircraftByType() + end + ctld.addedTo = {} ctld.spawnedCratesRED = {} -- use to store crates that have been spawned ctld.spawnedCratesBLUE = {} -- use to store crates that have been spawned