Compare commits

...

10 Commits

Author SHA1 Message Date
Ciaran Fisher b5436bd6d2 Update 1.71 2018-01-18 21:54:27 +00:00
Ciaran Fisher a10de260c7 Merge pull request #36 from ciribob/crateMove
Merge pull request #35 from ciribob/master
2018-01-18 21:50:48 +00:00
Ciaran Fisher 4d3ae4b5ee Update missions 2018-01-18 21:49:40 +00:00
Ciaran Fisher f6efa0ec58 Merge pull request #34 from ciribob/jtac-optimisation
JTAC Target Optimisation
2018-01-18 21:47:12 +00:00
Ciaran Fisher 5452bc7539 Merge pull request #35 from ciribob/master
Merge pull request #33 from ciribob/crateMove
2018-01-18 21:47:03 +00:00
Ciaran Fisher 58acfbc152 JTAC Target Optimisation
Possible Fixes for JTAC priority
JTAC search optimised for high unit missions
Added JTAC "visual on" report
2018-01-18 21:45:13 +00:00
Ciaran Fisher 2a4c9ed91a Merge pull request #33 from ciribob/crateMove
Added force crate to be moved
2018-01-18 20:42:16 +00:00
Ciaran Fisher a78dd40688 Added force crate to be moved
Added Wait time for requesting crates

Added per unit type optional group limits

Added per unit type allowable actions
2017-07-24 21:06:53 +01:00
Ciaran Fisher 44ff4d61da Version 2017-06-25 21:06:51 +01:00
Ciaran Fisher 196efb7bcb Added ability to set maximum group size
You can now set the maximum group size that'll fit in a helicopter.
Larger groups cant be picked up
2017-06-25 21:03:33 +01:00
6 changed files with 310 additions and 139 deletions
+294 -123
View File
@@ -16,7 +16,10 @@
- jmontleon - https://github.com/jmontleon - jmontleon - https://github.com/jmontleon
- emilianomolina - https://github.com/emilianomolina - emilianomolina - https://github.com/emilianomolina
Version: 1.64 - 10/12/2016 Version: 1.71 - 18/01/2018
- Improved JTAC Performance - priority & targeting
- Added JTAC report for in view
- Added ability to set maximum group size that can be carried
- Added new sling load crates - Added new sling load crates
- Fixed bug where crates and / or groups would disappear - Fixed bug where crates and / or groups would disappear
- Fixed bug where count in zone wouldn't work for mission crates - Fixed bug where count in zone wouldn't work for mission crates
@@ -49,6 +52,7 @@ ctld.maximumSearchDistance = 4000 -- max distance for troops to search for enemy
ctld.maximumMoveDistance = 2000 -- max distance for troops to move from drop point if no enemy is nearby ctld.maximumMoveDistance = 2000 -- max distance for troops to move from drop point if no enemy is nearby
ctld.numberOfTroops = 10 -- default number of troops to load on a transport heli or C-130 ctld.numberOfTroops = 10 -- default number of troops to load on a transport heli or C-130
-- also works as maximum size of group that'll fit into a helicopter unless overridden
ctld.enableFastRopeInsertion = true -- allows you to drop troops by fast rope ctld.enableFastRopeInsertion = true -- allows you to drop troops by fast rope
ctld.fastRopeMaximumHeight = 18.28 -- in meters which is 60 ft max fast rope (not rappell) safe height ctld.fastRopeMaximumHeight = 18.28 -- in meters which is 60 ft max fast rope (not rappell) safe height
@@ -74,6 +78,10 @@ ctld.troopPickupAtFOB = true -- if true, troops can also be picked up at a creat
ctld.buildTimeFOB = 120 --time in seconds for the FOB to be built ctld.buildTimeFOB = 120 --time in seconds for the FOB to be built
ctld.crateWaitTime = 120 -- time in seconds to wait before you can spawn another crate
ctld.forceCrateToBeMoved = true -- a crate must be picked up at least once and moved before it can be unpacked. Helps to reduce crate spam
ctld.radioSound = "beacon.ogg" -- the name of the sound file to use for the FOB radio beacons. If this isnt added to the mission BEACONS WONT WORK! ctld.radioSound = "beacon.ogg" -- the name of the sound file to use for the FOB radio beacons. If this isnt added to the mission BEACONS WONT WORK!
ctld.radioSoundFC3 = "beaconsilent.ogg" -- name of the second silent radio file, used so FC3 aircraft dont hear ALL the beacon noises... :) ctld.radioSoundFC3 = "beaconsilent.ogg" -- name of the second silent radio file, used so FC3 aircraft dont hear ALL the beacon noises... :)
@@ -389,6 +397,49 @@ ctld.vehicleTransportEnabled = {
"C-130", "C-130",
} }
-- ************** Maximum Units SETUP for UNITS ******************
-- Put the name of the Unit you want to limit group sizes too
-- i.e
-- ["UH-1H"] = 10,
--
-- Will limit UH1 to only transport groups with a size 10 or less
-- Make sure the unit name is exactly right or it wont work
ctld.unitLoadLimits = {
-- Remove the -- below to turn on options
-- ["SA342Mistral"] = 4,
-- ["SA342L"] = 4,
-- ["SA342M"] = 4,
}
-- ************** Allowable actions for UNIT TYPES ******************
-- Put the name of the Unit you want to limit actions for
-- NOTE - the unit must've been listed in the transportPilotNames list above
-- This can be used in conjunction with the options above for group sizes
-- By default you can load both crates and troops unless overriden below
-- i.e
-- ["UH-1H"] = {crates=true, troops=false},
--
-- Will limit UH1 to only transport CRATES but NOT TROOPS
--
-- ["SA342Mistral"] = {crates=fales, troops=true},
-- Will allow Mistral Gazelle to only transport crates, not troops
ctld.unitActions = {
-- Remove the -- below to turn on options
-- ["SA342Mistral"] = {crates=true, troops=true},
-- ["SA342L"] = {crates=false, troops=true},
-- ["SA342M"] = {crates=false, troops=true},
}
-- ************** INFANTRY GROUPS FOR PICKUP ****************** -- ************** INFANTRY GROUPS FOR PICKUP ******************
-- Unit Types -- Unit Types
-- inf is normal infantry -- inf is normal infantry
@@ -1275,6 +1326,9 @@ ctld.AASystemTemplate = {
} }
ctld.crateWait = {}
ctld.crateMove = {}
---------------- INTERNAL FUNCTIONS ---------------- ---------------- INTERNAL FUNCTIONS ----------------
function ctld.getTransportUnit(_unitName) function ctld.getTransportUnit(_unitName)
@@ -1528,7 +1582,16 @@ function ctld.spawnCrate(_arguments)
local _position = _heli:getPosition() local _position = _heli:getPosition()
-- check crate spam
if _heli:getPlayerName() ~= nil and ctld.crateWait[_heli:getPlayerName()] and ctld.crateWait[_heli:getPlayerName()] < timer.getTime() then
ctld.displayMessageToGroup(_heli,"Sorry you must wait "..(ctld.crateWait[_heli:getPlayerName()] - timer.getTime()).. " seconds before you can get another crate", 20)
return
end
if _heli:getPlayerName() ~= nil then
ctld.crateWait[_heli:getPlayerName()] = timer.getTime() + ctld.crateWaitTime
end
-- trigger.action.outText("Spawn Crate".._args[1].." ".._args[2],10) -- trigger.action.outText("Spawn Crate".._args[1].." ".._args[2],10)
local _heli = ctld.getTransportUnit(_args[1]) local _heli = ctld.getTransportUnit(_args[1])
@@ -1543,6 +1606,9 @@ function ctld.spawnCrate(_arguments)
local _spawnedCrate = ctld.spawnCrateStatic(_heli:getCountry(), _unitId, _point, _name, _crateType.weight,_side) local _spawnedCrate = ctld.spawnCrateStatic(_heli:getCountry(), _unitId, _point, _name, _crateType.weight,_side)
-- add to move table
ctld.crateMove[_name] = _name
ctld.displayMessageToGroup(_heli, string.format("A %s crate weighing %s kg has been brought out and is at your 12 o'clock ", _crateType.desc, _crateType.weight), 20) ctld.displayMessageToGroup(_heli, string.format("A %s crate weighing %s kg has been brought out and is at your 12 o'clock ", _crateType.desc, _crateType.weight), 20)
else else
@@ -2179,8 +2245,21 @@ function ctld.extractTroops(_args)
_extractTroops = ctld.findNearestGroup(_heli, ctld.droppedTroopsBLUE) _extractTroops = ctld.findNearestGroup(_heli, ctld.droppedTroopsBLUE)
end end
if _extractTroops ~= nil then if _extractTroops ~= nil then
local _limit = ctld.getTransportLimit(_heli:getTypeName())
local _size = #_extractTroops.group:getUnits()
if _limit < #_extractTroops.group:getUnits() then
ctld.displayMessageToGroup(_heli, "Sorry - The group of ".._size.." is too large to fit. \n\nLimit is ".._limit.." for ".._heli:getTypeName(), 20)
return
end
_onboard.troops = _extractTroops.details _onboard.troops = _extractTroops.details
trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " extracted troops in " .. _heli:getTypeName() .. " from combat", 10) trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " extracted troops in " .. _heli:getTypeName() .. " from combat", 10)
@@ -2357,6 +2436,9 @@ function ctld.checkHoverStatus()
ctld.hoverStatus[_transUnit:getName()] = nil ctld.hoverStatus[_transUnit:getName()] = nil
ctld.displayMessageToGroup(_transUnit, "Loaded " .. _crate.details.desc .. " crate!", 10,true) ctld.displayMessageToGroup(_transUnit, "Loaded " .. _crate.details.desc .. " crate!", 10,true)
--crates been moved once!
ctld.crateMove[_crate.crateUnit:getName()] = nil
if _transUnit:getCoalition() == 1 then if _transUnit:getCoalition() == 1 then
ctld.spawnedCratesRED[_crate.crateUnit:getName()] = nil ctld.spawnedCratesRED[_crate.crateUnit:getName()] = nil
else else
@@ -2417,6 +2499,8 @@ function ctld.loadNearbyCrate(_name)
ctld.spawnedCratesBLUE[_crate.crateUnit:getName()] = nil ctld.spawnedCratesBLUE[_crate.crateUnit:getName()] = nil
end end
ctld.crateMove[_crate.crateUnit:getName()] = nil
_crate.crateUnit:destroy() _crate.crateUnit:destroy()
local _copiedCrate = mist.utils.deepCopy(_crate.details) local _copiedCrate = mist.utils.deepCopy(_crate.details)
@@ -2819,6 +2903,12 @@ function ctld.unpackCrates(_arguments)
return return
end end
if ctld.forceCrateToBeMoved and ctld.crateMove[_crate.crateUnit:getName()] then
ctld.displayMessageToGroup(_heli,"Sorry you must move this crate before you unpack it!", 20)
return
end
local _aaTemplate = ctld.getAATemplate(_crate.details.unit) local _aaTemplate = ctld.getAATemplate(_crate.details.unit)
if _aaTemplate then if _aaTemplate then
@@ -4511,6 +4601,26 @@ function ctld.checkAIStatus()
end end
function ctld.getTransportLimit(_unitType)
if ctld.unitLoadLimits[_unitType] then
return ctld.unitLoadLimits[_unitType]
end
return ctld.numberOfTroops
end
function ctld.getUnitActions(_unitType)
if ctld.unitActions[_unitType] then
return ctld.unitActions[_unitType]
end
return {crates=true,troops=true}
end
-- Adds menuitem to all heli units that are active -- Adds menuitem to all heli units that are active
function ctld.addF10MenuOptions() function ctld.addF10MenuOptions()
@@ -4534,6 +4644,11 @@ function ctld.addF10MenuOptions()
local _rootPath = missionCommands.addSubMenuForGroup(_groupId, "CTLD") local _rootPath = missionCommands.addSubMenuForGroup(_groupId, "CTLD")
local _unitActions = ctld.getUnitActions(_unit:getTypeName())
if _unitActions.troops then
local _troopCommandsPath = missionCommands.addSubMenuForGroup(_groupId, "Troop Transport", _rootPath) local _troopCommandsPath = missionCommands.addSubMenuForGroup(_groupId, "Troop Transport", _rootPath)
missionCommands.addCommandForGroup(_groupId, "Unload / Extract Troops", _troopCommandsPath, ctld.unloadExtractTroops, { _unitName }) missionCommands.addCommandForGroup(_groupId, "Unload / Extract Troops", _troopCommandsPath, ctld.unloadExtractTroops, { _unitName })
@@ -4543,9 +4658,13 @@ function ctld.addF10MenuOptions()
-- local _loadPath = missionCommands.addSubMenuForGroup(_groupId, "Load From Zone", _troopCommandsPath) -- local _loadPath = missionCommands.addSubMenuForGroup(_groupId, "Load From Zone", _troopCommandsPath)
for _,_loadGroup in pairs(ctld.loadableGroups) do for _,_loadGroup in pairs(ctld.loadableGroups) do
if not _loadGroup.side or _loadGroup.side == _unit:getCoalition() then if not _loadGroup.side or _loadGroup.side == _unit:getCoalition() then
-- check size & unit
if ctld.getTransportLimit(_unit:getTypeName()) >= _loadGroup.total then
missionCommands.addCommandForGroup(_groupId, "Load ".._loadGroup.name, _troopCommandsPath, ctld.loadTroopsFromZone, { _unitName, true,_loadGroup,false }) missionCommands.addCommandForGroup(_groupId, "Load ".._loadGroup.name, _troopCommandsPath, ctld.loadTroopsFromZone, { _unitName, true,_loadGroup,false })
end end
end end
end
if ctld.unitCanCarryVehicles(_unit) then if ctld.unitCanCarryVehicles(_unit) then
@@ -4561,8 +4680,10 @@ function ctld.addF10MenuOptions()
missionCommands.addCommandForGroup(_groupId, "Check Cargo", _vehicleCommandsPath, ctld.checkTroopStatus, { _unitName }) missionCommands.addCommandForGroup(_groupId, "Check Cargo", _vehicleCommandsPath, ctld.checkTroopStatus, { _unitName })
end end
end
if ctld.enableCrates then
if ctld.enableCrates and _unitActions.crates then
if ctld.unitCanCarryVehicles(_unit) == false then if ctld.unitCanCarryVehicles(_unit) == false then
@@ -4592,7 +4713,8 @@ function ctld.addF10MenuOptions()
end end
end end
if ctld.enabledFOBBuilding or ctld.enableCrates then if (ctld.enabledFOBBuilding or ctld.enableCrates) and _unitActions.crates then
local _crateCommands = missionCommands.addSubMenuForGroup(_groupId, "CTLD Commands", _rootPath) local _crateCommands = missionCommands.addSubMenuForGroup(_groupId, "CTLD Commands", _rootPath)
if ctld.hoverPickup == false then if ctld.hoverPickup == false then
if ctld.slingLoad == false then if ctld.slingLoad == false then
@@ -5093,144 +5215,153 @@ end
-- Find nearest enemy to JTAC that isn't blocked by terrain -- Find nearest enemy to JTAC that isn't blocked by terrain
function ctld.findNearestVisibleEnemy(_jtacUnit, _targetType,_distance) function ctld.findNearestVisibleEnemy(_jtacUnit, _targetType,_distance)
--local startTime = os.clock()
local _maxDistance = _distance or ctld.JTAC_maxDistance local _maxDistance = _distance or ctld.JTAC_maxDistance
local _x = 1
local _i = 1
local _units = nil
local _groupName = nil
local _nearestUnit = nil
local _nearestDistance = _maxDistance local _nearestDistance = _maxDistance
local _enemyGroups local _jtacPoint = _jtacUnit:getPoint()
local _coa = _jtacUnit:getCoalition()
local _offsetJTACPos = { x = _jtacPoint.x, y = _jtacPoint.y + 2.0, z = _jtacPoint.z }
local _volume = {
id = world.VolumeType.SPHERE,
params = {
point = _offsetJTACPos,
radius = _maxDistance
}
}
local _unitList = {}
local _search = function(_unit, _coa)
pcall(function()
if _unit ~= nil
and _unit:getLife() > 0
and _unit:isActive()
and _unit:getCoalition() ~= _coa
and not _unit:inAir()
and not ctld.alreadyTarget(_jtacUnit,_unit) then
local _tempPoint = _unit:getPoint()
local _offsetEnemyPos = { x = _tempPoint.x, y = _tempPoint.y + 2.0, z = _tempPoint.z }
if land.isVisible(_offsetJTACPos,_offsetEnemyPos ) then
local _dist = ctld.getDistance(_offsetJTACPos, _offsetEnemyPos)
if _dist < _maxDistance then
table.insert(_unitList,{unit=_unit, dist=_dist})
if _jtacUnit:getCoalition() == 1 then
_enemyGroups = coalition.getGroups(2, Group.Category.GROUND)
else
_enemyGroups = coalition.getGroups(1, Group.Category.GROUND)
end end
end
end
end)
return true
end
world.searchObjects(Object.Category.UNIT, _volume, _search, _coa)
--log.info(string.format("JTAC Search elapsed time: %.4f\n", os.clock() - startTime))
-- generate list order by distance & visible
-- first check
-- hpriority
-- priority
-- vehicle
-- unit
local _sort = function( a,b ) return a.dist < b.dist end
table.sort(_unitList,_sort)
-- sort list
-- check for hpriority
for _, _enemyUnit in ipairs(_unitList) do
local _enemyName = _enemyUnit.unit:getName()
if string.match(_enemyName, "hpriority") then
return _enemyUnit.unit
end
end
for _, _enemyUnit in ipairs(_unitList) do
local _enemyName = _enemyUnit.unit:getName()
if string.match(_enemyName, "priority") then
return _enemyUnit.unit
end
end
for _, _enemyUnit in ipairs(_unitList) do
local _enemyName = _enemyUnit.unit:getName()
if (_targetType == "vehicle" and ctld.isVehicle(_enemyUnit.unit)) or _targetType == "all" then
return _enemyUnit.unit
elseif (_targetType == "troop" and ctld.isInfantry(_enemyUnit.unit)) or _targetType == "all" then
return _enemyUnit.unit
end
end
return nil
end
function ctld.listNearbyEnemies(_jtacUnit)
local _maxDistance = ctld.JTAC_maxDistance
local _jtacPoint = _jtacUnit:getPoint() local _jtacPoint = _jtacUnit:getPoint()
local _jtacPosition = _jtacUnit:getPosition() local _coa = _jtacUnit:getCoalition()
local _tempPoint = nil
local _tempPosition = nil
local _tempDist = nil
-- finish this function
local _vhpriority = false
local _vpriority = false
local _thpriority = false
local _tpriority = false
for _i = 1, #_enemyGroups do
if _enemyGroups[_i] ~= nil then
_groupName = _enemyGroups[_i]:getName()
_units = ctld.getGroup(_groupName)
if #_units > 0 then
for _y = 1, #_units do
local _targeted = false
if not _distance then
_targeted = ctld.alreadyTarget(_jtacUnit, _units[_x])
end
-- calc distance
_tempPoint = _units[_y]:getPoint()
_tempDist = ctld.getDistance(_tempPoint, _jtacPoint)
if _tempDist < _maxDistance and _tempDist < _nearestDistance then
local _offsetEnemyPos = { x = _tempPoint.x, y = _tempPoint.y + 2.0, z = _tempPoint.z }
local _offsetJTACPos = { x = _jtacPoint.x, y = _jtacPoint.y + 2.0, z = _jtacPoint.z }
-- calc visible
if land.isVisible(_offsetEnemyPos, _offsetJTACPos) and _targeted == false then
if (string.match(_units[_y]:getName(), "hpriority") ~= nil) and ctld.isVehicle(_units[_y]) then
_vhpriority = true
elseif (string.match(_units[_y]:getName(), "priority") ~= nil) and ctld.isVehicle(_units[_y]) then
_vpriority = true
elseif (string.match(_units[_y]:getName(), "hpriority") ~= nil) and ctld.isInfantry(_units[_y]) then
_thpriority = true
elseif (string.match(_units[_y]:getName(), "priority") ~= nil) and ctld.isInfantry(_units[_y]) then
_tpriority = true
end
end
end
end
end
end
end
for _i = 1, #_enemyGroups do
if _enemyGroups[_i] ~= nil then
_groupName = _enemyGroups[_i]:getName()
_units = ctld.getGroup(_groupName)
if #_units > 0 then
for _x = 1, #_units do
--check to see if a JTAC has already targeted this unit only if a distance
--wasnt passed in
local _targeted = false
if not _distance then
_targeted = ctld.alreadyTarget(_jtacUnit, _units[_x])
end
local _allowedTarget = true
if _targetType == "vehicle" and _vhpriority == true then
_allowedTarget = (string.match(_units[_x]:getName(), "hpriority") ~= nil) and ctld.isVehicle(_units[_x])
elseif _targetType == "vehicle" and _vpriority == true then
_allowedTarget = (string.match(_units[_x]:getName(), "priority") ~= nil) and ctld.isVehicle(_units[_x])
elseif _targetType == "vehicle" then
_allowedTarget = ctld.isVehicle(_units[_x])
elseif _targetType == "troop" and _thpriority == true then
_allowedTarget = (string.match(_units[_x]:getName(), "hpriority") ~= nil) and ctld.isInfantry(_units[_x])
elseif _targetType == "troop" and _tpriority == true then
_allowedTarget = (string.match(_units[_x]:getName(), "priority") ~= nil) and ctld.isInfantry(_units[_x])
elseif _targetType == "troop" then
_allowedTarget = ctld.isInfantry(_units[_x])
elseif _vhpriority == true or _thpriority == true then
_allowedTarget = (string.match(_units[_x]:getName(), "hpriority") ~= nil)
elseif _vpriority == true or _tpriority == true then
_allowedTarget = (string.match(_units[_x]:getName(), "priority") ~= nil)
else
_allowedTarget = true
end
if _units[_x]:isActive() == true and _targeted == false and _allowedTarget == true then
-- calc distance
_tempPoint = _units[_x]:getPoint()
_tempDist = ctld.getDistance(_tempPoint, _jtacPoint)
if _tempDist < _maxDistance and _tempDist < _nearestDistance then
local _offsetEnemyPos = { x = _tempPoint.x, y = _tempPoint.y + 2.0, z = _tempPoint.z }
local _offsetJTACPos = { x = _jtacPoint.x, y = _jtacPoint.y + 2.0, z = _jtacPoint.z } local _offsetJTACPos = { x = _jtacPoint.x, y = _jtacPoint.y + 2.0, z = _jtacPoint.z }
local _volume = {
id = world.VolumeType.SPHERE,
params = {
point = _offsetJTACPos,
radius = _maxDistance
}
}
local _enemies = nil
-- calc visible local _search = function(_unit, _coa)
if land.isVisible(_offsetEnemyPos, _offsetJTACPos) then pcall(function()
_nearestDistance = _tempDist if _unit ~= nil
_nearestUnit = _units[_x] and _unit:getLife() > 0
end and _unit:isActive()
end and _unit:getCoalition() ~= _coa
end and not _unit:inAir() then
end
end local _tempPoint = _unit:getPoint()
end local _offsetEnemyPos = { x = _tempPoint.x, y = _tempPoint.y + 2.0, z = _tempPoint.z }
if land.isVisible(_offsetJTACPos,_offsetEnemyPos ) then
if not _enemies then
_enemies = {}
end end
if _nearestUnit == nil then _enemies[_unit:getTypeName()] = _unit:getTypeName()
return nil
end
end
end)
return true
end end
world.searchObjects(Object.Category.UNIT, _volume, _search, _coa)
return _nearestUnit return _enemies
end end
-- tests whether the unit is targeted by another JTAC -- tests whether the unit is targeted by another JTAC
@@ -5319,6 +5450,18 @@ function ctld.getJTACStatus(_args)
if _enemyUnit ~= nil and _enemyUnit:getLife() > 0 and _enemyUnit:isActive() == true then if _enemyUnit ~= nil and _enemyUnit:getLife() > 0 and _enemyUnit:isActive() == true then
_message = _message .. "" .. _jtacGroupName .. " targeting " .. _enemyUnit:getTypeName() .. " CODE: " .. _laserCode .. ctld.getPositionString(_enemyUnit) .. "\n" _message = _message .. "" .. _jtacGroupName .. " targeting " .. _enemyUnit:getTypeName() .. " CODE: " .. _laserCode .. ctld.getPositionString(_enemyUnit) .. "\n"
local _list = ctld.listNearbyEnemies(_jtacUnit)
if _list then
_message = _message.."Visual On: "
for _,_type in pairs(_list) do
_message = _message.._type.." "
end
_message = _message.."\n"
end
else else
_message = _message .. "" .. _jtacGroupName .. " searching for targets" .. ctld.getPositionString(_jtacUnit) .. "\n" _message = _message .. "" .. _jtacGroupName .. " searching for targets" .. ctld.getPositionString(_jtacUnit) .. "\n"
end end
@@ -5788,6 +5931,34 @@ if ctld.allowRandomAiTeamPickups == true then
end end
end end
-- add total count
for _,_loadGroup in pairs(ctld.loadableGroups) do
_loadGroup.total = 0
if _loadGroup.aa then
_loadGroup.total = _loadGroup.aa + _loadGroup.total
end
if _loadGroup.inf then
_loadGroup.total = _loadGroup.inf + _loadGroup.total
end
if _loadGroup.mg then
_loadGroup.total = _loadGroup.mg + _loadGroup.total
end
if _loadGroup.at then
_loadGroup.total = _loadGroup.at + _loadGroup.total
end
if _loadGroup.mortar then
_loadGroup.total = _loadGroup.mortar + _loadGroup.total
end
end
-- Scheduled functions (run cyclically) -- but hold execution for a second so we can override parts -- Scheduled functions (run cyclically) -- but hold execution for a second so we can override parts
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.