mirror of
https://github.com/ciribob/DCS-CTLD.git
synced 2026-07-16 14:25:10 +00:00
Added new cratesRequired option
Added new cratesRequired option - easy to make a unit require more than one crate to build
This commit is contained in:
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
See https://github.com/ciribob/DCS-CTLD for a user manual and the latest version
|
See https://github.com/ciribob/DCS-CTLD for a user manual and the latest version
|
||||||
|
|
||||||
Version: 1.02 - 17/05/2015
|
Version: 1.03 - 19/05/2015
|
||||||
|
|
||||||
]]
|
]]
|
||||||
|
|
||||||
@@ -229,10 +229,13 @@ ctld.spawnableCrates = {
|
|||||||
-- weight in KG
|
-- weight in KG
|
||||||
-- Desc is the description on the F10 MENU
|
-- Desc is the description on the F10 MENU
|
||||||
-- unit is the model name of the unit to spawn
|
-- unit is the model name of the unit to spawn
|
||||||
|
-- cratesRequired - if set requires that many crates of the same type within 100m of each other in order build the unit
|
||||||
|
-- dont use that option with the HAWK Crates
|
||||||
{ weight = 1400, desc = "HMMWV - TOW", unit = "M1045 HMMWV TOW" },
|
{ weight = 1400, desc = "HMMWV - TOW", unit = "M1045 HMMWV TOW" },
|
||||||
{ weight = 1200, desc = "HMMWV - MG", unit = "M1043 HMMWV Armament" },
|
{ weight = 1200, desc = "HMMWV - MG", unit = "M1043 HMMWV Armament" },
|
||||||
{ weight = 1100, desc = "HMMWV - JTAC", unit = "Hummer" }, -- used as jtac and unarmed, not on the crate list if JTAC is disabled
|
{ weight = 1100, desc = "HMMWV - JTAC", unit = "Hummer" }, -- used as jtac and unarmed, not on the crate list if JTAC is disabled
|
||||||
{ weight = 200, desc = "2B11 Mortar", unit = "2B11 mortar" },
|
{ weight = 200, desc = "2B11 Mortar", unit = "2B11 mortar" },
|
||||||
|
-- { weight = 500, desc = "M-109", unit = "M-109", cratesRequired = 3 },
|
||||||
},
|
},
|
||||||
|
|
||||||
["AA Crates"] = {
|
["AA Crates"] = {
|
||||||
@@ -241,6 +244,8 @@ ctld.spawnableCrates = {
|
|||||||
{ weight = 1000, desc = "HAWK Launcher", unit = "Hawk ln" },
|
{ weight = 1000, desc = "HAWK Launcher", unit = "Hawk ln" },
|
||||||
{ weight = 1010, desc = "HAWK Search Radar", unit = "Hawk sr" },
|
{ weight = 1010, desc = "HAWK Search Radar", unit = "Hawk sr" },
|
||||||
{ weight = 1020, desc = "HAWK Track Radar", unit = "Hawk tr" },
|
{ weight = 1020, desc = "HAWK Track Radar", unit = "Hawk tr" },
|
||||||
|
-- { weight = 505, desc = "M6 Linebacker", unit = "M6 Linebacker", cratesRequired = 3 },
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
@@ -651,37 +656,37 @@ function ctld.loadUnloadTroops(_args)
|
|||||||
|
|
||||||
-- first check for extractable troops regardless of if we're in a zone or not
|
-- first check for extractable troops regardless of if we're in a zone or not
|
||||||
|
|
||||||
-- if not ctld.troopsOnboard(_heli,_troops) then
|
-- if not ctld.troopsOnboard(_heli,_troops) then
|
||||||
--
|
--
|
||||||
-- local _extract
|
-- local _extract
|
||||||
--
|
--
|
||||||
-- if _troops then
|
-- if _troops then
|
||||||
-- if _heli:getCoalition() == 1 then
|
-- if _heli:getCoalition() == 1 then
|
||||||
--
|
--
|
||||||
-- _extract = ctld.findNearestGroup(_heli, ctld.droppedTroopsRED)
|
-- _extract = ctld.findNearestGroup(_heli, ctld.droppedTroopsRED)
|
||||||
-- else
|
-- else
|
||||||
--
|
--
|
||||||
-- _extract = ctld.findNearestGroup(_heli, ctld.droppedTroopsBLUE)
|
-- _extract = ctld.findNearestGroup(_heli, ctld.droppedTroopsBLUE)
|
||||||
-- end
|
-- end
|
||||||
-- else
|
-- else
|
||||||
--
|
--
|
||||||
-- if _heli:getCoalition() == 1 then
|
-- if _heli:getCoalition() == 1 then
|
||||||
--
|
--
|
||||||
-- _extract = ctld.findNearestGroup(_heli, ctld.droppedVehiclesRED)
|
-- _extract = ctld.findNearestGroup(_heli, ctld.droppedVehiclesRED)
|
||||||
-- else
|
-- else
|
||||||
--
|
--
|
||||||
-- _extract = ctld.findNearestGroup(_heli, ctld.droppedVehiclesBLUE)
|
-- _extract = ctld.findNearestGroup(_heli, ctld.droppedVehiclesBLUE)
|
||||||
-- end
|
-- end
|
||||||
--
|
--
|
||||||
-- end
|
-- end
|
||||||
--
|
--
|
||||||
-- if _extract ~= nil then
|
-- if _extract ~= nil then
|
||||||
-- -- search for nearest troops to pickup
|
-- -- search for nearest troops to pickup
|
||||||
-- ctld.extractTroops(_heli,_troops)
|
-- ctld.extractTroops(_heli,_troops)
|
||||||
--
|
--
|
||||||
-- return -- stop
|
-- return -- stop
|
||||||
-- end
|
-- end
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
if _inZone == true and ctld.troopsOnboard(_heli,_troops) then
|
if _inZone == true and ctld.troopsOnboard(_heli,_troops) then
|
||||||
|
|
||||||
@@ -981,19 +986,19 @@ function ctld.unpackCrates(_args)
|
|||||||
if ctld.isMultiCrate(_crate.details) then
|
if ctld.isMultiCrate(_crate.details) then
|
||||||
-- multicrate
|
-- multicrate
|
||||||
|
|
||||||
ctld.unpackMultiCrate(_heli,_crate,_crates)
|
ctld.unpackMultiCrate(_heli,_crate,_crates)
|
||||||
|
|
||||||
else
|
else
|
||||||
-- single crate
|
-- single crate
|
||||||
local _cratePoint = _crate.crateUnit:getPoint()
|
local _cratePoint = _crate.crateUnit:getPoint()
|
||||||
local _crateName = _crate.crateUnit:getName();
|
local _crateName = _crate.crateUnit:getName()
|
||||||
|
|
||||||
-- ctld.spawnCrateStatic( _heli:getCoalition(),mist.getNextUnitId(),{x=100,z=100},_crateName,100)
|
-- ctld.spawnCrateStatic( _heli:getCoalition(),mist.getNextUnitId(),{x=100,z=100},_crateName,100)
|
||||||
|
|
||||||
--remove crate
|
--remove crate
|
||||||
_crate.crateUnit:destroy()
|
_crate.crateUnit:destroy()
|
||||||
|
|
||||||
local _spawnedGroups = ctld.spawnCrateGroup(_heli, { _cratePoint }, { _crate.details.unit })
|
local _spawnedGroups = ctld.spawnCrateGroup(_heli, { _cratePoint }, { _crate.details.unit })
|
||||||
|
|
||||||
if _heli:getCoalition() == 1 then
|
if _heli:getCoalition() == 1 then
|
||||||
ctld.spawnedCratesRED[_crateName] = nil
|
ctld.spawnedCratesRED[_crateName] = nil
|
||||||
@@ -1006,7 +1011,7 @@ function ctld.unpackCrates(_args)
|
|||||||
if _crate.details.unit == "Hummer" and ctld.JTAC_dropEnabled then
|
if _crate.details.unit == "Hummer" and ctld.JTAC_dropEnabled then
|
||||||
|
|
||||||
local _code = table.remove(ctld.jtacGeneratedLaserCodes,1)
|
local _code = table.remove(ctld.jtacGeneratedLaserCodes,1)
|
||||||
--put to the end
|
--put to the end
|
||||||
table.insert(ctld.jtacGeneratedLaserCodes,_code)
|
table.insert(ctld.jtacGeneratedLaserCodes,_code)
|
||||||
|
|
||||||
ctld.JTACAutoLase(_spawnedGroups:getName(),_code) --(_jtacGroupName, _laserCode, _smoke, _lock, _colour)
|
ctld.JTACAutoLase(_spawnedGroups:getName(),_code) --(_jtacGroupName, _laserCode, _smoke, _lock, _colour)
|
||||||
@@ -1023,7 +1028,8 @@ end
|
|||||||
|
|
||||||
function ctld.isMultiCrate(_crateDetails)
|
function ctld.isMultiCrate(_crateDetails)
|
||||||
|
|
||||||
if string.match(_crateDetails.desc, "HAWK") then
|
if string.match(_crateDetails.desc, "HAWK")
|
||||||
|
or (_crateDetails.cratesRequired ~= nil and _crateDetails.cratesRequired > 1) then
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
@@ -1031,7 +1037,7 @@ function ctld.isMultiCrate(_crateDetails)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function ctld.unpackMultiCrate(_heli,_nearestCrate,_nearbyCrates)
|
function ctld.rearmHawk(_heli,_nearestCrate,_nearbyCrates)
|
||||||
|
|
||||||
-- 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" then
|
||||||
@@ -1076,12 +1082,19 @@ function ctld.unpackMultiCrate(_heli,_nearestCrate,_nearbyCrates)
|
|||||||
|
|
||||||
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 HAWK AA System in the field", 10)
|
||||||
|
|
||||||
return -- all done so quit
|
return true -- all done so quit
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
function ctld.unpackHawk(_heli,_nearestCrate,_nearbyCrates)
|
||||||
|
|
||||||
|
if ctld.rearmHawk(_heli,_nearestCrate,_nearbyCrates) then
|
||||||
|
-- rearmed hawk
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -1153,6 +1166,71 @@ function ctld.unpackMultiCrate(_heli,_nearestCrate,_nearbyCrates)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ctld.unpackMultiCrate(_heli,_nearestCrate,_nearbyCrates)
|
||||||
|
|
||||||
|
if string.match(_nearestCrate.details.desc, "HAWK") then
|
||||||
|
ctld.unpackHawk(_heli,_nearestCrate,_nearbyCrates)
|
||||||
|
|
||||||
|
return -- stop processing
|
||||||
|
end
|
||||||
|
|
||||||
|
-- unpack multi crate
|
||||||
|
local _nearbyMultiCrates = {}
|
||||||
|
|
||||||
|
for _, _nearbyCrate in pairs(_nearbyCrates) do
|
||||||
|
|
||||||
|
if _nearbyCrate.dist < 300 then
|
||||||
|
|
||||||
|
if _nearbyCrate.details.unit == _nearestCrate.details.unit then
|
||||||
|
|
||||||
|
table.insert(_nearbyMultiCrates, _nearbyCrate)
|
||||||
|
|
||||||
|
if #_nearbyMultiCrates == _nearestCrate.details.cratesRequired then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- check crate count
|
||||||
|
if #_nearbyMultiCrates == _nearestCrate.details.cratesRequired then
|
||||||
|
|
||||||
|
local _point = _nearestCrate.crateUnit:getPoint()
|
||||||
|
|
||||||
|
-- destroy crates
|
||||||
|
for _, _crate in pairs(_nearbyMultiCrates) do
|
||||||
|
|
||||||
|
if _point == nil then
|
||||||
|
_point = _crate.crateUnit:getPoint()
|
||||||
|
end
|
||||||
|
|
||||||
|
if _heli:getCoalition() == 1 then
|
||||||
|
ctld.spawnedCratesRED[_crate.crateUnit:getName()] = nil
|
||||||
|
else
|
||||||
|
ctld.spawnedCratesBLUE[_crate.crateUnit:getName()] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
--destroy
|
||||||
|
_crate.crateUnit:destroy()
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local _spawnedGroup = ctld.spawnCrateGroup(_heli,{_point} ,{_nearestCrate.details.unit})
|
||||||
|
|
||||||
|
local _txt = string.format("%s successfully deployed %s to the field using %d crates",ctld.getPlayerNameOrType(_heli),_nearestCrate.details.desc,#_nearbyMultiCrates)
|
||||||
|
|
||||||
|
trigger.action.outTextForCoalition(_heli:getCoalition(), _txt, 10)
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
local _txt = string.format("Cannot build %s!\n\nIt requires %d crates and there are %d \n\nOr the crates are not within 300m of each other",_nearestCrate.details.desc,_nearestCrate.details.cratesRequired,#_nearbyMultiCrates)
|
||||||
|
|
||||||
|
ctld.displayMessageToGroup(_heli, _txt, 20)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function ctld.spawnCrateGroup(_heli, _positions, _types)
|
function ctld.spawnCrateGroup(_heli, _positions, _types)
|
||||||
|
|
||||||
@@ -1811,11 +1889,11 @@ function ctld.JTACAutoLase(_jtacGroupName, _laserCode, _smoke, _lock, _colour)
|
|||||||
-- work out smoke colour
|
-- work out smoke colour
|
||||||
if _colour == nil then
|
if _colour == nil then
|
||||||
|
|
||||||
if _jtacUnit:getCoalition() == 1 then
|
if _jtacUnit:getCoalition() == 1 then
|
||||||
_colour = ctld.JTAC_smokeColour_RED
|
_colour = ctld.JTAC_smokeColour_RED
|
||||||
else
|
else
|
||||||
_colour = ctld.JTAC_smokeColour_BLUE
|
_colour = ctld.JTAC_smokeColour_BLUE
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -2462,4 +2540,4 @@ env.info("CTLD READY")
|
|||||||
-- for key, value in pairs(getmetatable(_spawnedCrate)) do
|
-- for key, value in pairs(getmetatable(_spawnedCrate)) do
|
||||||
-- env.info(tostring(key))
|
-- env.info(tostring(key))
|
||||||
-- env.info(tostring(value))
|
-- env.info(tostring(value))
|
||||||
-- end
|
-- end
|
||||||
@@ -62,7 +62,9 @@ ctld.vehiclesForTransport = { "M1045 HMMWV TOW", "M1043 HMMWV Armament" } -- veh
|
|||||||
ctld.spawnRPGWithCoalition = true --spawns a friendly RPG unit with Coalition forces
|
ctld.spawnRPGWithCoalition = true --spawns a friendly RPG unit with Coalition forces
|
||||||
```
|
```
|
||||||
|
|
||||||
To change what units can be dropped from crates modify the spawnable crates section
|
To change what units can be dropped from crates modify the spawnable crates section. An extra parameter, ```cratesRequired = NUMBER``` can be added so you need more than one crate to build a unit. This parameter cannot be used for the HAWK system as that is already broken into 3 crates.
|
||||||
|
|
||||||
|
```--``` in lua means ignore this line :)
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
|
|
||||||
@@ -79,10 +81,13 @@ ctld.spawnableCrates = {
|
|||||||
-- weight in KG
|
-- weight in KG
|
||||||
-- Desc is the description on the F10 MENU
|
-- Desc is the description on the F10 MENU
|
||||||
-- unit is the model name of the unit to spawn
|
-- unit is the model name of the unit to spawn
|
||||||
|
-- cratesRequired - if set requires that many crates of the same type within 100m of each other in order build the unit
|
||||||
|
-- dont use that option with the HAWK Crates
|
||||||
{ weight = 1400, desc = "HMMWV - TOW", unit = "M1045 HMMWV TOW" },
|
{ weight = 1400, desc = "HMMWV - TOW", unit = "M1045 HMMWV TOW" },
|
||||||
{ weight = 1200, desc = "HMMWV - MG", unit = "M1043 HMMWV Armament" },
|
{ weight = 1200, desc = "HMMWV - MG", unit = "M1043 HMMWV Armament" },
|
||||||
{ weight = 1100, desc = "HMMWV - JTAC", unit = "Hummer" }, -- used as jtac and unarmed, not on the crate list if JTAC is disabled
|
{ weight = 1100, desc = "HMMWV - JTAC", unit = "Hummer" }, -- used as jtac and unarmed, not on the crate list if JTAC is disabled
|
||||||
{ weight = 200, desc = "2B11 Mortar", unit = "2B11 mortar" },
|
{ weight = 200, desc = "2B11 Mortar", unit = "2B11 mortar" },
|
||||||
|
-- { weight = 500, desc = "M-109", unit = "M-109", cratesRequired = 3 },
|
||||||
},
|
},
|
||||||
|
|
||||||
["AA Crates"] = {
|
["AA Crates"] = {
|
||||||
@@ -91,12 +96,18 @@ ctld.spawnableCrates = {
|
|||||||
{ weight = 1000, desc = "HAWK Launcher", unit = "Hawk ln" },
|
{ weight = 1000, desc = "HAWK Launcher", unit = "Hawk ln" },
|
||||||
{ weight = 1010, desc = "HAWK Search Radar", unit = "Hawk sr" },
|
{ weight = 1010, desc = "HAWK Search Radar", unit = "Hawk sr" },
|
||||||
{ weight = 1020, desc = "HAWK Track Radar", unit = "Hawk tr" },
|
{ weight = 1020, desc = "HAWK Track Radar", unit = "Hawk tr" },
|
||||||
|
-- { weight = 505, desc = "M6 Linebacker", unit = "M6 Linebacker", cratesRequired = 3 },
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Example showing what happens if you dont have enough crates:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
**Make sure that after making any changes to the script you remove and re-add the script to the mission. **
|
**Make sure that after making any changes to the script you remove and re-add the script to the mission. **
|
||||||
|
|
||||||
###Other Script Functions
|
###Other Script Functions
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user