mirror of
https://github.com/ciribob/DCS-CTLD.git
synced 2025-08-15 06:17:22 +00:00
New Version 1.34
Added 2 new AA systems that can be deployed By default the HAWK is currently disabled due to bugs in 1.5 and has been replaced by the KUB You can also comment in the BUK system and build that
This commit is contained in:
261
CTLD.lua
261
CTLD.lua
@@ -13,7 +13,9 @@
|
|||||||
Contributors:
|
Contributors:
|
||||||
- Steggles - https://github.com/Bob7heBuilder
|
- Steggles - https://github.com/Bob7heBuilder
|
||||||
|
|
||||||
Version: 1.32 - 14/10/2015 - Bug fix for Waypoint after troops dropped
|
Version: 1.34 - 19/10/2015 - Added ctld.unloadInProximityToEnemy - can be used with a continuous trigger
|
||||||
|
- Added KUB launcher system instead of HAWK for Red side
|
||||||
|
- Added optional BUK launcher system
|
||||||
|
|
||||||
|
|
||||||
]]
|
]]
|
||||||
@@ -362,14 +364,28 @@ ctld.spawnableCrates = {
|
|||||||
{ weight = 210, desc = "Stinger", unit = "Stinger manpad", side = 2 },
|
{ weight = 210, desc = "Stinger", unit = "Stinger manpad", side = 2 },
|
||||||
{ weight = 215, desc = "Igla", unit = "SA-18 Igla manpad", side = 1 },
|
{ weight = 215, desc = "Igla", unit = "SA-18 Igla manpad", side = 1 },
|
||||||
|
|
||||||
{ weight = 1000, desc = "HAWK Launcher", unit = "Hawk ln" },
|
-- HAWK System
|
||||||
{ weight = 1010, desc = "HAWK Search Radar", unit = "Hawk sr" },
|
-- { weight = 1000, desc = "HAWK Launcher", unit = "Hawk ln", side = 2},
|
||||||
{ weight = 1020, desc = "HAWK Track Radar", unit = "Hawk tr" },
|
-- { weight = 1010, desc = "HAWK Search Radar", unit = "Hawk sr", side = 2 },
|
||||||
{ weight = 1021, desc = "HAWK Repair", unit = "HAWK Repair" },
|
-- { weight = 1020, desc = "HAWK Track Radar", unit = "Hawk tr", side = 2 },
|
||||||
--
|
-- { weight = 1021, desc = "HAWK Repair", unit = "HAWK Repair" , side = 2 },
|
||||||
|
-- End of HAWK
|
||||||
|
|
||||||
{ weight = 505, desc = "Strela-1 9P31", unit = "Strela-1 9P31", side = 1, cratesRequired = 4 },
|
-- BUK System
|
||||||
{ weight = 506, desc = "M1097 Avenger", unit = "M1097 Avenger", side = 2, cratesRequired = 4 },
|
-- { weight = 1022, desc = "BUK Launcher", unit = "SA-11 Buk LN 9A310M1"},
|
||||||
|
-- { weight = 1023, desc = "BUK Search Radar", unit = "SA-11 Buk SR 9S18M1"},
|
||||||
|
-- { weight = 1024, desc = "BUK CC Radar", unit = "SA-11 Buk CC 9S470M1"},
|
||||||
|
-- { weight = 1025, desc = "BUK Repair", unit = "BUK Repair"},
|
||||||
|
-- END of BUK
|
||||||
|
{ weight = 1026, desc = "KUB Launcher", unit = "Kub 2P25 ln"},
|
||||||
|
{ weight = 1027, desc = "KUB Radar", unit = "Kub 1S91 str" },
|
||||||
|
{ weight = 1025, desc = "KUB Repair", unit = "KUB Repair"},
|
||||||
|
-- KUB System
|
||||||
|
|
||||||
|
-- End of KUB
|
||||||
|
|
||||||
|
{ weight = 505, desc = "Strela-1 9P31", unit = "Strela-1 9P31", side = 1, cratesRequired = 3 },
|
||||||
|
{ weight = 506, desc = "M1097 Avenger", unit = "M1097 Avenger", side = 2, cratesRequired = 3 },
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,7 +603,6 @@ function ctld.createRadioBeaconAtZone(_zone, _coalition, _batteryLife, _name)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
------------------------ Steggles Functions-----------------------
|
|
||||||
-- Activates a pickup zone
|
-- Activates a pickup zone
|
||||||
-- Activates a pickup zone when called from a trigger
|
-- Activates a pickup zone when called from a trigger
|
||||||
-- EG: ctld.activatePickupZone("pickzone3")
|
-- EG: ctld.activatePickupZone("pickzone3")
|
||||||
@@ -663,6 +678,41 @@ function ctld.deactivatePickupZone(_zoneName)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Continuous Trigger Function
|
||||||
|
-- Causes an AI unit with the specified name to unload troops / vehicles when
|
||||||
|
-- an enemy is detected within a specified distance
|
||||||
|
-- The enemy must have Line or Sight to the unit to be detected
|
||||||
|
function ctld.unloadInProximityToEnemy(_unitName,_distance)
|
||||||
|
|
||||||
|
local _unit = ctld.getTransportUnit(_unitName)
|
||||||
|
|
||||||
|
if _unit ~= nil and _unit:getPlayerName() == nil then
|
||||||
|
|
||||||
|
-- no player name means AI!
|
||||||
|
-- the findNearest visible enemy you'd want to modify as it'll find enemies quite far away
|
||||||
|
-- limited by ctld.JTAC_maxDistance
|
||||||
|
local _nearestEnemy = ctld.findNearestVisibleEnemy(_unit,"all",_distance)
|
||||||
|
|
||||||
|
if _nearestEnemy ~= nil then
|
||||||
|
|
||||||
|
if ctld.troopsOnboard(_unit, true) then
|
||||||
|
ctld.deployTroops(_unit, true)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if ctld.unitCanCarryVehicles(_unit) and ctld.troopsOnboard(_unit, false) then
|
||||||
|
ctld.deployTroops(_unit, false)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- ***************************************************************
|
-- ***************************************************************
|
||||||
-- **************** BE CAREFUL BELOW HERE ************************
|
-- **************** BE CAREFUL BELOW HERE ************************
|
||||||
-- ***************************************************************
|
-- ***************************************************************
|
||||||
@@ -1957,17 +2007,18 @@ function ctld.getClosestCrate(_heli, _crates, _type)
|
|||||||
return _closetCrate
|
return _closetCrate
|
||||||
end
|
end
|
||||||
|
|
||||||
function ctld.findNearestHawk(_heli)
|
function ctld.findNearestAASystem(_heli,_type)
|
||||||
|
|
||||||
local _closestHawkGroup = nil
|
local _closestHawkGroup = nil
|
||||||
local _shortestDistance = -1
|
local _shortestDistance = -1
|
||||||
local _distance = 0
|
local _distance = 0
|
||||||
|
|
||||||
for _groupName, _hawkDetails in pairs(ctld.completeHawkSystems) do
|
for _groupName, _hawkDetails in pairs(ctld.completeAASystems) do
|
||||||
|
|
||||||
local _hawkGroup = Group.getByName(_groupName)
|
local _hawkGroup = Group.getByName(_groupName)
|
||||||
|
|
||||||
if _hawkGroup ~= nil and _hawkGroup:getCoalition() == _heli:getCoalition() then
|
-- env.info(_groupName..": "..mist.utils.tableShow(_hawkDetails))
|
||||||
|
if _hawkGroup ~= nil and _hawkGroup:getCoalition() == _heli:getCoalition() and _hawkDetails[1].groupType == _type then
|
||||||
|
|
||||||
local _units = _hawkGroup:getUnits()
|
local _units = _hawkGroup:getUnits()
|
||||||
|
|
||||||
@@ -1989,6 +2040,7 @@ function ctld.findNearestHawk(_heli)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if _closestHawkGroup ~= nil then
|
if _closestHawkGroup ~= nil then
|
||||||
|
|
||||||
return { group = _closestHawkGroup, dist = _shortestDistance }
|
return { group = _closestHawkGroup, dist = _shortestDistance }
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
@@ -2658,20 +2710,24 @@ end
|
|||||||
function ctld.isMultiCrate(_crateDetails)
|
function ctld.isMultiCrate(_crateDetails)
|
||||||
|
|
||||||
if string.match(_crateDetails.desc, "HAWK")
|
if string.match(_crateDetails.desc, "HAWK")
|
||||||
or (_crateDetails.cratesRequired ~= nil and _crateDetails.cratesRequired > 1) then
|
or (_crateDetails.cratesRequired ~= nil and _crateDetails.cratesRequired > 1)
|
||||||
|
or string.match(_crateDetails.desc,"BUK")
|
||||||
|
or string.match(_crateDetails.desc,"KUB") then
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ctld.rearmHawk(_heli, _nearestCrate, _nearbyCrates)
|
function ctld.rearmAASystem(_heli, _nearestCrate, _nearbyCrates,_type)
|
||||||
|
|
||||||
-- are we adding to existing hawk system?
|
-- are we adding to existing hawk system?
|
||||||
if _nearestCrate.details.unit == "Hawk ln" then
|
if _nearestCrate.details.unit == "Hawk ln"
|
||||||
|
or string.match(_nearestCrate.details.unit, "Buk LN 9A310M1")
|
||||||
|
or string.match(_nearestCrate.details.unit,"Kub 2P25 ln") then
|
||||||
|
|
||||||
-- find nearest COMPLETE hawk system
|
-- find nearest COMPLETE hawk system
|
||||||
local _nearestHawk = ctld.findNearestHawk(_heli)
|
local _nearestHawk = ctld.findNearestAASystem(_heli,_type)
|
||||||
|
|
||||||
if _nearestHawk ~= nil and _nearestHawk.dist < 300 then
|
if _nearestHawk ~= nil and _nearestHawk.dist < 300 then
|
||||||
|
|
||||||
@@ -2695,19 +2751,20 @@ function ctld.rearmHawk(_heli, _nearestCrate, _nearbyCrates)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if ctld.countTableEntries(_uniqueTypes) == 3 and #_points >= 3 then
|
if (_type == "kub" and ctld.countTableEntries(_uniqueTypes) == 2 and #_points >= 2)
|
||||||
|
or (ctld.countTableEntries(_uniqueTypes) == 3 and #_points >= 3) then
|
||||||
|
|
||||||
-- rearm hawk
|
-- rearm hawk
|
||||||
-- destroy old group
|
-- destroy old group
|
||||||
ctld.completeHawkSystems[_nearestHawk.group:getName()] = nil
|
ctld.completeAASystems[_nearestHawk.group:getName()] = nil
|
||||||
|
|
||||||
_nearestHawk.group:destroy()
|
_nearestHawk.group:destroy()
|
||||||
|
|
||||||
local _spawnedGroup = ctld.spawnCrateGroup(_heli, _points, _types)
|
local _spawnedGroup = ctld.spawnCrateGroup(_heli, _points, _types)
|
||||||
|
|
||||||
ctld.completeHawkSystems[_spawnedGroup:getName()] = ctld.getHawkDetails(_spawnedGroup)
|
ctld.completeAASystems[_spawnedGroup:getName()] = ctld.getAASystemDetails(_spawnedGroup,_type)
|
||||||
|
|
||||||
trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully rearmed a full HAWK AA System in the field", 10)
|
trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully rearmed a full "..string.upper(_type).." AA System in the field", 10)
|
||||||
|
|
||||||
if _heli:getCoalition() == 1 then
|
if _heli:getCoalition() == 1 then
|
||||||
ctld.spawnedCratesRED[_nearestCrate.crateUnit:getName()] = nil
|
ctld.spawnedCratesRED[_nearestCrate.crateUnit:getName()] = nil
|
||||||
@@ -2728,14 +2785,14 @@ function ctld.rearmHawk(_heli, _nearestCrate, _nearbyCrates)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function ctld.getHawkDetails(_hawkGroup)
|
function ctld.getAASystemDetails(_hawkGroup,_type)
|
||||||
|
|
||||||
local _units = _hawkGroup:getUnits()
|
local _units = _hawkGroup:getUnits()
|
||||||
|
|
||||||
local _hawkDetails = {}
|
local _hawkDetails = {}
|
||||||
|
|
||||||
for _, _unit in pairs(_units) do
|
for _, _unit in pairs(_units) do
|
||||||
table.insert(_hawkDetails, { point = _unit:getPoint(), unit = _unit:getTypeName(), name = _unit:getName() })
|
table.insert(_hawkDetails, { point = _unit:getPoint(), unit = _unit:getTypeName(), name = _unit:getName(), groupType=_type})
|
||||||
end
|
end
|
||||||
|
|
||||||
return _hawkDetails
|
return _hawkDetails
|
||||||
@@ -2758,27 +2815,50 @@ function ctld.countTableEntries(_table)
|
|||||||
return _count
|
return _count
|
||||||
end
|
end
|
||||||
|
|
||||||
function ctld.unpackHawk(_heli, _nearestCrate, _nearbyCrates)
|
function ctld.unpackAASystem(_heli, _nearestCrate, _nearbyCrates,_type)
|
||||||
|
|
||||||
if ctld.rearmHawk(_heli, _nearestCrate, _nearbyCrates) then
|
if ctld.rearmAASystem(_heli, _nearestCrate, _nearbyCrates,_type) then
|
||||||
-- rearmed hawk
|
-- rearmed hawk
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- are there all the pieces close enough together
|
-- are there all the pieces close enough together
|
||||||
local _hawkParts = { ["Hawk ln"] = false, ["Hawk tr"] = false, ["Hawk sr"] = false }
|
local _hawkParts = nil
|
||||||
|
|
||||||
|
if _type == "hawk" then
|
||||||
|
_hawkParts = { ["Hawk ln"] = false, ["Hawk tr"] = false, ["Hawk sr"] = false }
|
||||||
|
elseif _type == "buk" then
|
||||||
|
_hawkParts = { ["Buk SR 9S18M1"] = false, ["Buk CC 9S470M1"] = false, ["Buk LN 9A310M1"] = false }
|
||||||
|
else
|
||||||
|
_hawkParts = { ["Kub 2P25 ln"] = false, ["Kub 1S91 str"] = false }
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
for _, _nearbyCrate in pairs(_nearbyCrates) do
|
for _, _nearbyCrate in pairs(_nearbyCrates) do
|
||||||
|
|
||||||
if _nearbyCrate.dist < 500 then
|
if _nearbyCrate.dist < 500 then
|
||||||
|
|
||||||
if _nearbyCrate.details.unit == "Hawk ln" or _nearbyCrate.details.unit == "Hawk sr" or _nearbyCrate.details.unit == "Hawk tr" then
|
if _type == "hawk" then
|
||||||
|
if _nearbyCrate.details.unit == "Hawk ln" or _nearbyCrate.details.unit == "Hawk sr" or _nearbyCrate.details.unit == "Hawk tr" then
|
||||||
|
_hawkParts[_nearbyCrate.details.unit] = _nearbyCrate
|
||||||
|
else
|
||||||
|
-- not part of hawk
|
||||||
|
end
|
||||||
|
elseif _type == "buk" then
|
||||||
|
if string.match(_nearbyCrate.details.unit, "Buk SR 9S18M1") then
|
||||||
|
_hawkParts["Buk SR 9S18M1"] = _nearbyCrate
|
||||||
|
elseif string.match(_nearbyCrate.details.unit, "Buk CC 9S470M1") then
|
||||||
|
_hawkParts["Buk CC 9S470M1"] = _nearbyCrate
|
||||||
|
elseif string.match(_nearbyCrate.details.unit, "Buk LN 9A310M1") then
|
||||||
|
_hawkParts["Buk LN 9A310M1"] = _nearbyCrate
|
||||||
|
end
|
||||||
|
elseif _type == "kub" then
|
||||||
|
if _nearbyCrate.details.unit == "Kub 2P25 ln" or _nearbyCrate.details.unit == "Kub 1S91 str" then
|
||||||
|
_hawkParts[_nearbyCrate.details.unit] = _nearbyCrate
|
||||||
|
end
|
||||||
|
|
||||||
_hawkParts[_nearbyCrate.details.unit] = _nearbyCrate
|
|
||||||
|
|
||||||
else
|
|
||||||
-- not part of hawk
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2791,17 +2871,40 @@ function ctld.unpackHawk(_heli, _nearestCrate, _nearbyCrates)
|
|||||||
|
|
||||||
if _hawkPart == false then
|
if _hawkPart == false then
|
||||||
|
|
||||||
if _name == "Hawk ln" then
|
if _type == "hawk" then
|
||||||
_txt = "Missing HAWK Launcher\n"
|
if _name == "Hawk ln" then
|
||||||
elseif _name == "Hawk sr" then
|
_txt = "Missing HAWK Launcher\n"
|
||||||
_txt = _txt .. "Missing HAWK Search Radar\n"
|
elseif _name == "Hawk sr" then
|
||||||
else
|
_txt = _txt .. "Missing HAWK Search Radar\n"
|
||||||
_txt = _txt .. "Missing HAWK Track Radar\n"
|
else
|
||||||
|
_txt = _txt .. "Missing HAWK Track Radar\n"
|
||||||
|
end
|
||||||
|
elseif _type == "buk" then
|
||||||
|
if string.match(_name, "Buk SR 9S18M1") then
|
||||||
|
_txt = "Missing BUK Search Radar\n"
|
||||||
|
elseif string.match(_name, "Buk CC 9S470M1") then
|
||||||
|
_txt = _txt .. "Missing BUK CC Radar\n"
|
||||||
|
else
|
||||||
|
_txt = _txt .. "Missing BUK Launcher\n"
|
||||||
|
end
|
||||||
|
elseif _type == "kub" then
|
||||||
|
if string.match(_name, "Kub 1S91 str") then
|
||||||
|
_txt = "Missing KUB Radar\n"
|
||||||
|
else
|
||||||
|
_txt = _txt .. "Missing KUB Launcher\n"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
|
-- add back REAL buk part names as the - doesnt match for some reason
|
||||||
|
if _type == "buk" then
|
||||||
|
_name = "SA-11 ".._name
|
||||||
|
end
|
||||||
|
|
||||||
--handle multiple launchers from one crate
|
--handle multiple launchers from one crate
|
||||||
if _name == "Hawk ln" and ctld.hawkLaunchers > 1 then
|
if (_name == "Hawk ln" or string.match(_name, "Buk LN 9A310M1") or string.match(_name,"Kub 2P25 ln")) and ctld.hawkLaunchers > 1 then
|
||||||
|
|
||||||
--add multiple launchers
|
--add multiple launchers
|
||||||
for _i = 1, ctld.hawkLaunchers do
|
for _i = 1, ctld.hawkLaunchers do
|
||||||
@@ -2816,7 +2919,7 @@ function ctld.unpackHawk(_heli, _nearestCrate, _nearbyCrates)
|
|||||||
_point = { x = _point.x + _xOffset, y = _point.y, z = _point.z + _yOffset }
|
_point = { x = _point.x + _xOffset, y = _point.y, z = _point.z + _yOffset }
|
||||||
|
|
||||||
table.insert(_posArray, _point)
|
table.insert(_posArray, _point)
|
||||||
table.insert(_typeArray, "Hawk ln")
|
table.insert(_typeArray, _name)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
table.insert(_posArray, _hawkPart.crateUnit:getPoint())
|
table.insert(_posArray, _hawkPart.crateUnit:getPoint())
|
||||||
@@ -2826,9 +2929,7 @@ function ctld.unpackHawk(_heli, _nearestCrate, _nearbyCrates)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if _txt ~= "" then
|
if _txt ~= "" then
|
||||||
|
ctld.displayMessageToGroup(_heli, "Cannot build "..string.upper(_type).."\n" .. _txt .. "\n\nOr the crates are not close enough together", 20)
|
||||||
ctld.displayMessageToGroup(_heli, "Cannot build Hawk\n" .. _txt .. "\n\nOr the crates are not close enough together", 20)
|
|
||||||
|
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
|
|
||||||
@@ -2847,23 +2948,25 @@ function ctld.unpackHawk(_heli, _nearestCrate, _nearbyCrates)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- HAWK READY!
|
-- HAWK / BUK READY!
|
||||||
local _spawnedGroup = ctld.spawnCrateGroup(_heli, _posArray, _typeArray)
|
local _spawnedGroup = ctld.spawnCrateGroup(_heli, _posArray, _typeArray)
|
||||||
|
|
||||||
ctld.completeHawkSystems[_spawnedGroup:getName()] = ctld.getHawkDetails(_spawnedGroup)
|
ctld.completeAASystems[_spawnedGroup:getName()] = ctld.getAASystemDetails(_spawnedGroup,_type)
|
||||||
|
|
||||||
|
trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully deployed a full "..string.upper(_type).." AA System to the field", 10)
|
||||||
|
|
||||||
trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully deployed a full HAWK AA System to the field", 10)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ctld.repairHawk(_heli, _nearestCrate)
|
|
||||||
|
|
||||||
-- find nearest COMPLETE hawk system
|
function ctld.repairAASystem(_heli, _nearestCrate,_type)
|
||||||
local _nearestHawk = ctld.findNearestHawk(_heli)
|
|
||||||
|
-- find nearest COMPLETE AA system
|
||||||
|
local _nearestHawk = ctld.findNearestAASystem(_heli,_type)
|
||||||
|
|
||||||
if _nearestHawk ~= nil and _nearestHawk.dist < 300 then
|
if _nearestHawk ~= nil and _nearestHawk.dist < 300 then
|
||||||
|
|
||||||
local _oldHawk = ctld.completeHawkSystems[_nearestHawk.group:getName()]
|
local _oldHawk = ctld.completeAASystems[_nearestHawk.group:getName()]
|
||||||
|
|
||||||
--spawn new one
|
--spawn new one
|
||||||
|
|
||||||
@@ -2876,14 +2979,14 @@ function ctld.repairHawk(_heli, _nearestCrate)
|
|||||||
end
|
end
|
||||||
|
|
||||||
--remove old system
|
--remove old system
|
||||||
ctld.completeHawkSystems[_nearestHawk.group:getName()] = nil
|
ctld.completeAASystems[_nearestHawk.group:getName()] = nil
|
||||||
_nearestHawk.group:destroy()
|
_nearestHawk.group:destroy()
|
||||||
|
|
||||||
local _spawnedGroup = ctld.spawnCrateGroup(_heli, _points, _types)
|
local _spawnedGroup = ctld.spawnCrateGroup(_heli, _points, _types)
|
||||||
|
|
||||||
ctld.completeHawkSystems[_spawnedGroup:getName()] = ctld.getHawkDetails(_spawnedGroup)
|
ctld.completeAASystems[_spawnedGroup:getName()] = ctld.getAASystemDetails(_spawnedGroup,_type)
|
||||||
|
|
||||||
trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully repaired a full HAWK AA System in the field", 10)
|
trigger.action.outTextForCoalition(_heli:getCoalition(), ctld.getPlayerNameOrType(_heli) .. " successfully repaired a full "..string.upper(_type).." AA System in the field", 10)
|
||||||
|
|
||||||
if _heli:getCoalition() == 1 then
|
if _heli:getCoalition() == 1 then
|
||||||
ctld.spawnedCratesRED[_nearestCrate.crateUnit:getName()] = nil
|
ctld.spawnedCratesRED[_nearestCrate.crateUnit:getName()] = nil
|
||||||
@@ -2896,20 +2999,29 @@ function ctld.repairHawk(_heli, _nearestCrate)
|
|||||||
_nearestCrate.crateUnit:destroy()
|
_nearestCrate.crateUnit:destroy()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
ctld.displayMessageToGroup(_heli, "Cannot repair a HAWK System. No damaged HAWK systems within 300m", 10)
|
ctld.displayMessageToGroup(_heli, "Cannot repair a "..string.upper(_type).." System. No damaged "..string.upper(_type).." systems within 300m", 10)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ctld.unpackMultiCrate(_heli, _nearestCrate, _nearbyCrates)
|
function ctld.unpackMultiCrate(_heli, _nearestCrate, _nearbyCrates)
|
||||||
|
|
||||||
if string.match(_nearestCrate.details.desc, "HAWK") then
|
local _type = nil
|
||||||
|
|
||||||
|
if string.match(_nearestCrate.details.desc, "BUK") then
|
||||||
|
_type = "buk"
|
||||||
|
elseif string.match(_nearestCrate.details.desc, "HAWK") then
|
||||||
|
_type = "hawk"
|
||||||
|
elseif string.match(_nearestCrate.details.desc, "KUB") then
|
||||||
|
_type = "kub"
|
||||||
|
end
|
||||||
|
|
||||||
|
if _type ~= nil then
|
||||||
|
|
||||||
if string.match(_nearestCrate.details.desc, "Repair") then
|
if string.match(_nearestCrate.details.desc, "Repair") then
|
||||||
ctld.repairHawk(_heli, _nearestCrate)
|
ctld.repairAASystem(_heli, _nearestCrate,_type)
|
||||||
else
|
else
|
||||||
ctld.unpackHawk(_heli, _nearestCrate, _nearbyCrates)
|
ctld.unpackAASystem(_heli, _nearestCrate, _nearbyCrates,_type)
|
||||||
end
|
end
|
||||||
|
|
||||||
return -- stop processing
|
return -- stop processing
|
||||||
@@ -3147,7 +3259,7 @@ function ctld.findNearestEnemy(_side, _point, _searchDistance)
|
|||||||
-- no enemy - move to random point
|
-- no enemy - move to random point
|
||||||
if _closestEnemy ~= nil then
|
if _closestEnemy ~= nil then
|
||||||
|
|
||||||
-- env.info("found enemy")
|
-- env.info("found enemy")
|
||||||
return _closestEnemy
|
return _closestEnemy
|
||||||
else
|
else
|
||||||
|
|
||||||
@@ -3256,15 +3368,15 @@ function ctld.orderGroupToMoveToPoint(_leader, _destination)
|
|||||||
|
|
||||||
-- delayed 2 second to work around bug
|
-- delayed 2 second to work around bug
|
||||||
timer.scheduleFunction(function(_arg)
|
timer.scheduleFunction(function(_arg)
|
||||||
local _grp = ctld.getAliveGroup(_arg[1])
|
local _grp = ctld.getAliveGroup(_arg[1])
|
||||||
|
|
||||||
if _grp ~= nil then
|
if _grp ~= nil then
|
||||||
local _controller = _grp:getController();
|
local _controller = _grp:getController();
|
||||||
Controller.setOption(_controller, AI.Option.Ground.id.ALARM_STATE, AI.Option.Ground.val.ALARM_STATE.AUTO)
|
Controller.setOption(_controller, AI.Option.Ground.id.ALARM_STATE, AI.Option.Ground.val.ALARM_STATE.AUTO)
|
||||||
Controller.setOption(_controller, AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.OPEN_FIRE)
|
Controller.setOption(_controller, AI.Option.Ground.id.ROE, AI.Option.Ground.val.ROE.OPEN_FIRE)
|
||||||
_controller:setTask(_arg[2])
|
_controller:setTask(_arg[2])
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
end
|
||||||
, {_group:getName(), _mission}, timer.getTime() + 2)
|
, {_group:getName(), _mission}, timer.getTime() + 2)
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -4111,8 +4223,9 @@ 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)
|
function ctld.findNearestVisibleEnemy(_jtacUnit, _targetType,_distance)
|
||||||
|
|
||||||
|
local _maxDistance = _distance or ctld.JTAC_maxDistance
|
||||||
local _x = 1
|
local _x = 1
|
||||||
local _i = 1
|
local _i = 1
|
||||||
|
|
||||||
@@ -4120,7 +4233,7 @@ function ctld.findNearestVisibleEnemy(_jtacUnit, _targetType)
|
|||||||
local _groupName = nil
|
local _groupName = nil
|
||||||
|
|
||||||
local _nearestUnit = nil
|
local _nearestUnit = nil
|
||||||
local _nearestDistance = ctld.JTAC_maxDistance
|
local _nearestDistance = _maxDistance
|
||||||
|
|
||||||
local _enemyGroups
|
local _enemyGroups
|
||||||
|
|
||||||
@@ -4147,8 +4260,14 @@ function ctld.findNearestVisibleEnemy(_jtacUnit, _targetType)
|
|||||||
|
|
||||||
for _x = 1, #_units do
|
for _x = 1, #_units do
|
||||||
|
|
||||||
--check to see if a JTAC has already targeted this unit
|
--check to see if a JTAC has already targeted this unit only if a distance
|
||||||
local _targeted = ctld.alreadyTarget(_jtacUnit, _units[_x])
|
--wasnt passed in
|
||||||
|
local _targeted = false
|
||||||
|
if not _distance then
|
||||||
|
_targeted = ctld.alreadyTarget(_jtacUnit, _units[_x])
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local _allowedTarget = true
|
local _allowedTarget = true
|
||||||
|
|
||||||
if _targetType == "vehicle" then
|
if _targetType == "vehicle" then
|
||||||
@@ -4166,7 +4285,7 @@ function ctld.findNearestVisibleEnemy(_jtacUnit, _targetType)
|
|||||||
_tempPoint = _units[_x]:getPoint()
|
_tempPoint = _units[_x]:getPoint()
|
||||||
_tempDist = ctld.getDistance(_tempPoint, _jtacPoint)
|
_tempDist = ctld.getDistance(_tempPoint, _jtacPoint)
|
||||||
|
|
||||||
if _tempDist < ctld.JTAC_maxDistance and _tempDist < _nearestDistance then
|
if _tempDist < _maxDistance and _tempDist < _nearestDistance then
|
||||||
|
|
||||||
local _offsetEnemyPos = { x = _tempPoint.x, y = _tempPoint.y + 2.0, z = _tempPoint.z }
|
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 }
|
||||||
@@ -4574,7 +4693,7 @@ ctld.droppedFOBCratesBLUE = {}
|
|||||||
|
|
||||||
ctld.builtFOBS = {} -- stores fully built fobs
|
ctld.builtFOBS = {} -- stores fully built fobs
|
||||||
|
|
||||||
ctld.completeHawkSystems = {} -- stores complete spawned groups from multiple crates
|
ctld.completeAASystems = {} -- stores complete spawned groups from multiple crates
|
||||||
|
|
||||||
ctld.fobBeacons = {} -- stores FOB radio beacon details, refreshed every 60 seconds
|
ctld.fobBeacons = {} -- stores FOB radio beacon details, refreshed every 60 seconds
|
||||||
|
|
||||||
|
|||||||
BIN
Pickup-Dropoff-Demo.miz
Normal file
BIN
Pickup-Dropoff-Demo.miz
Normal file
Binary file not shown.
BIN
test-mission.miz
BIN
test-mission.miz
Binary file not shown.
Reference in New Issue
Block a user