mirror of
https://github.com/ciribob/DCS-CTLD.git
synced 2025-08-15 06:17:22 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38128b65c0 | ||
|
|
ee6977aa96 | ||
|
|
dc214da0d6 | ||
|
|
ee41e86628 | ||
|
|
fdc24a32c5 | ||
|
|
cb63b37494 | ||
|
|
cefd92f720 |
178
CTLD.lua
178
CTLD.lua
@@ -12,11 +12,15 @@
|
||||
|
||||
Contributors:
|
||||
- Steggles - https://github.com/Bob7heBuilder
|
||||
- mvee - https://github.com/mvee
|
||||
- jmontleon - https://github.com/jmontleon
|
||||
- emilianomolina - https://github.com/emilianomolina
|
||||
|
||||
Version: 1.62 - 01/08/2016
|
||||
- Changed staticBugWorkaround to false as the bug is fixed
|
||||
- Sling load crates will now be destroyed when deployed - THIS IS GREAT! :D
|
||||
|
||||
Version: 1.64 - 10/12/2016
|
||||
- Added new sling load crates
|
||||
- Fixed bug where crates and / or groups would disappear
|
||||
- Fixed bug where count in zone wouldn't work for mission crates
|
||||
- Delayed config of F10 menu and other scheduled functions so they can be overwritten by mission if a user wants
|
||||
]]
|
||||
|
||||
ctld = {} -- DONT REMOVE!
|
||||
@@ -474,6 +478,22 @@ ctld.jtacUnitTypes = {
|
||||
"SKP", "Hummer" -- there are some wierd encoding issues so if you write SKP-11 it wont match as the - sign is encoded differently...
|
||||
}
|
||||
|
||||
|
||||
ctld.nextUnitId = 1;
|
||||
ctld.getNextUnitId = function()
|
||||
ctld.nextUnitId = ctld.nextUnitId + 1
|
||||
|
||||
return ctld.nextUnitId
|
||||
end
|
||||
|
||||
ctld.nextGroupId = 1;
|
||||
|
||||
ctld.getNextGroupId = function()
|
||||
ctld.nextGroupId = ctld.nextGroupId + 1
|
||||
|
||||
return ctld.nextGroupId
|
||||
end
|
||||
|
||||
-- ***************************************************************
|
||||
-- **************** Mission Editor Functions *********************
|
||||
-- ***************************************************************
|
||||
@@ -1171,7 +1191,7 @@ function ctld.spawnCrateAtZone(_side, _weight,_zone)
|
||||
local _alt = land.getHeight(_pos2)
|
||||
local _point = { x = _pos2.x, y = _alt, z = _pos2.y }
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
|
||||
local _name = string.format("%s #%i", _crateType.desc, _unitId)
|
||||
|
||||
@@ -1206,7 +1226,7 @@ function ctld.spawnCrateAtPoint(_side, _weight,_point)
|
||||
_country = 2
|
||||
end
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
|
||||
local _name = string.format("%s #%i", _crateType.desc, _unitId)
|
||||
|
||||
@@ -1278,12 +1298,12 @@ function ctld.spawnCrateStatic(_country, _unitId, _point, _name, _weight,_side)
|
||||
local _spawnedCrate
|
||||
|
||||
if ctld.staticBugWorkaround and ctld.slingLoad == false then
|
||||
local _groupId = mist.getNextGroupId()
|
||||
local _groupId = ctld.getNextGroupId()
|
||||
local _groupName = "Crate Group #".._groupId
|
||||
|
||||
local _group = {
|
||||
["visible"] = false,
|
||||
["groupId"] = _groupId,
|
||||
-- ["groupId"] = _groupId,
|
||||
["hidden"] = false,
|
||||
["units"] = {},
|
||||
-- ["y"] = _positions[1].z,
|
||||
@@ -1308,10 +1328,10 @@ function ctld.spawnCrateStatic(_country, _unitId, _point, _name, _weight,_side)
|
||||
|
||||
if ctld.slingLoad then
|
||||
_crate = {
|
||||
["category"] = "Cargo",
|
||||
["shape_name"] = "ab-212_cargo",
|
||||
["type"] = "Cargo1",
|
||||
["unitId"] = _unitId,
|
||||
["category"] = "Cargos", --now plurar
|
||||
["shape_name"] = "bw_container_cargo", --new slingloadable container
|
||||
["type"] = "container_cargo", --new type
|
||||
-- ["unitId"] = _unitId,
|
||||
["y"] = _point.z,
|
||||
["x"] = _point.x,
|
||||
["mass"] = _weight,
|
||||
@@ -1323,11 +1343,55 @@ function ctld.spawnCrateStatic(_country, _unitId, _point, _name, _weight,_side)
|
||||
-- ["cargoDisplayName"] = "cargo123",
|
||||
-- ["CargoDisplayName"] = "cargo123",
|
||||
}
|
||||
else
|
||||
|
||||
--[[ Placeholder for different type of cargo containers. Let's say pipes and trunks, fuel for FOB building
|
||||
["shape_name"] = "ab-212_cargo",
|
||||
["type"] = "uh1h_cargo" --new type for the container previously used
|
||||
|
||||
["shape_name"] = "ammo_box_cargo",
|
||||
["type"] = "ammo_cargo",
|
||||
|
||||
["shape_name"] = "barrels_cargo",
|
||||
["type"] = "barrels_cargo",
|
||||
|
||||
["shape_name"] = "bw_container_cargo",
|
||||
["type"] = "container_cargo",
|
||||
|
||||
["shape_name"] = "f_bar_cargo",
|
||||
["type"] = "f_bar_cargo",
|
||||
|
||||
["shape_name"] = "fueltank_cargo",
|
||||
["type"] = "fueltank_cargo",
|
||||
|
||||
["shape_name"] = "iso_container_cargo",
|
||||
["type"] = "iso_container",
|
||||
|
||||
["shape_name"] = "iso_container_small_cargo",
|
||||
["type"] = "iso_container_small",
|
||||
|
||||
["shape_name"] = "oiltank_cargo",
|
||||
["type"] = "oiltank_cargo",
|
||||
|
||||
["shape_name"] = "pipes_big_cargo",
|
||||
["type"] = "pipes_big_cargo",
|
||||
|
||||
["shape_name"] = "pipes_small_cargo",
|
||||
["type"] = "pipes_small_cargo",
|
||||
|
||||
["shape_name"] = "tetrapod_cargo",
|
||||
["type"] = "tetrapod_cargo",
|
||||
|
||||
["shape_name"] = "trunks_long_cargo",
|
||||
["type"] = "trunks_long_cargo",
|
||||
|
||||
["shape_name"] = "trunks_small_cargo",
|
||||
["type"] = "trunks_small_cargo",
|
||||
]]--
|
||||
else
|
||||
_crate = {
|
||||
["shape_name"] = "GeneratorF",
|
||||
["type"] = "GeneratorF",
|
||||
["unitId"] = _unitId,
|
||||
-- ["unitId"] = _unitId,
|
||||
["y"] = _point.z,
|
||||
["x"] = _point.x,
|
||||
["name"] = _name,
|
||||
@@ -1361,7 +1425,7 @@ function ctld.spawnFOBCrateStatic(_country, _unitId, _point, _name)
|
||||
["category"] = "Fortifications",
|
||||
["shape_name"] = "konteiner_red1",
|
||||
["type"] = "Container red 1",
|
||||
["unitId"] = _unitId,
|
||||
-- ["unitId"] = _unitId,
|
||||
["y"] = _point.z,
|
||||
["x"] = _point.x,
|
||||
["name"] = _name,
|
||||
@@ -1385,7 +1449,7 @@ function ctld.spawnFOB(_country, _unitId, _point, _name)
|
||||
local _crate = {
|
||||
["category"] = "Fortifications",
|
||||
["type"] = "outpost",
|
||||
["unitId"] = _unitId,
|
||||
-- ["unitId"] = _unitId,
|
||||
["y"] = _point.z,
|
||||
["x"] = _point.x,
|
||||
["name"] = _name,
|
||||
@@ -1398,10 +1462,10 @@ function ctld.spawnFOB(_country, _unitId, _point, _name)
|
||||
local _spawnedCrate = StaticObject.getByName(_crate["name"])
|
||||
--local _spawnedCrate = coalition.addStaticObject(_country, _crate)
|
||||
|
||||
local _id = mist.getNextUnitId()
|
||||
local _id = ctld.getNextUnitId()
|
||||
local _tower = {
|
||||
["type"] = "house2arm",
|
||||
["unitId"] = _id,
|
||||
-- ["unitId"] = _id,
|
||||
["rate"] = 100,
|
||||
["y"] = _point.z + -36.57142857,
|
||||
["x"] = _point.x + 14.85714286,
|
||||
@@ -1471,7 +1535,7 @@ function ctld.spawnCrate(_arguments)
|
||||
|
||||
local _point = ctld.getPointAt12Oclock(_heli, 30)
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
|
||||
local _side = _heli:getCoalition()
|
||||
|
||||
@@ -1675,7 +1739,7 @@ end
|
||||
function ctld.insertIntoTroopsArray(_troopType,_count,_troopArray)
|
||||
|
||||
for _i = 1, _count do
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
table.insert(_troopArray, { type = _troopType, unitId = _unitId, name = string.format("Dropped %s #%i", _troopType, _unitId) })
|
||||
end
|
||||
|
||||
@@ -1748,13 +1812,13 @@ function ctld.generateTroopTypes(_side, _countOrTemplate, _country)
|
||||
end
|
||||
end
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
|
||||
_troops[_i] = { type = _unitType, unitId = _unitId, name = string.format("Dropped %s #%i", _unitType, _unitId) }
|
||||
end
|
||||
end
|
||||
|
||||
local _groupId = mist.getNextGroupId()
|
||||
local _groupId = ctld.getNextGroupId()
|
||||
local _details = { units = _troops, groupId = _groupId, groupName = string.format("Dropped Group %i", _groupId), side = _side, country = _country }
|
||||
|
||||
return _details
|
||||
@@ -1848,13 +1912,13 @@ function ctld.generateVehiclesForTransport(_side, _country)
|
||||
|
||||
for _i, _type in ipairs(_list) do
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
|
||||
_vehicles[_i] = { type = _type, unitId = _unitId, name = string.format("Dropped %s #%i", _type, _unitId) }
|
||||
end
|
||||
|
||||
|
||||
local _groupId = mist.getNextGroupId()
|
||||
local _groupId = ctld.getNextGroupId()
|
||||
local _details = { units = _vehicles, groupId = _groupId, groupName = string.format("Dropped Group %i", _groupId), side = _side, country = _country }
|
||||
|
||||
return _details
|
||||
@@ -1894,11 +1958,11 @@ function ctld.loadUnloadFOBCrate(_args)
|
||||
|
||||
local _side = _heli:getCoalition()
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
|
||||
local _name = string.format("FOB Crate #%i", _unitId)
|
||||
|
||||
local _spawnedCrate = ctld.spawnFOBCrateStatic(_heli:getCountry(), mist.getNextUnitId(), { x = _point.x + _xOffset, z = _point.z + _yOffset }, _name)
|
||||
local _spawnedCrate = ctld.spawnFOBCrateStatic(_heli:getCountry(), ctld.getNextUnitId(), { x = _point.x + _xOffset, z = _point.z + _yOffset }, _name)
|
||||
|
||||
if _side == 1 then
|
||||
ctld.droppedFOBCratesRED[_name] = _name
|
||||
@@ -2779,7 +2843,7 @@ function ctld.unpackCrates(_arguments)
|
||||
local _cratePoint = _crate.crateUnit:getPoint()
|
||||
local _crateName = _crate.crateUnit:getName()
|
||||
|
||||
-- ctld.spawnCrateStatic( _heli:getCoalition(),mist.getNextUnitId(),{x=100,z=100},_crateName,100)
|
||||
-- ctld.spawnCrateStatic( _heli:getCoalition(),ctld.getNextUnitId(),{x=100,z=100},_crateName,100)
|
||||
|
||||
--remove crate
|
||||
-- if ctld.slingLoad == false then
|
||||
@@ -2897,7 +2961,7 @@ function ctld.unpackFOBCrates(_crates, _heli)
|
||||
|
||||
timer.scheduleFunction(function(_args)
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
local _name = "Deployed FOB #" .. _unitId
|
||||
|
||||
local _fob = ctld.spawnFOB(_args[2], _unitId, _args[1], _name)
|
||||
@@ -2957,7 +3021,7 @@ function ctld.dropSlingCrate(_args)
|
||||
|
||||
local _point = _heli:getPoint()
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
|
||||
local _side = _heli:getCoalition()
|
||||
|
||||
@@ -3106,20 +3170,20 @@ end
|
||||
|
||||
function ctld.spawnRadioBeaconUnit(_point, _country, _type)
|
||||
|
||||
local _groupId = mist.getNextGroupId()
|
||||
local _groupId = ctld.getNextGroupId()
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
|
||||
local _radioGroup = {
|
||||
["visible"] = false,
|
||||
["groupId"] = _groupId,
|
||||
-- ["groupId"] = _groupId,
|
||||
["hidden"] = false,
|
||||
["units"] = {
|
||||
[1] = {
|
||||
["y"] = _point.z,
|
||||
["type"] = "2B11 mortar",
|
||||
["name"] = _type .. " Radio Beacon Unit #" .. _unitId,
|
||||
["unitId"] = _unitId,
|
||||
-- ["unitId"] = _unitId,
|
||||
["heading"] = 0,
|
||||
["playerCanDrive"] = true,
|
||||
["skill"] = "Excellent",
|
||||
@@ -3753,7 +3817,7 @@ end
|
||||
|
||||
function ctld.spawnCrateGroup(_heli, _positions, _types)
|
||||
|
||||
local _id = mist.getNextGroupId()
|
||||
local _id = ctld.getNextGroupId()
|
||||
|
||||
local _groupName = _types[1] .. " #" .. _id
|
||||
|
||||
@@ -3761,7 +3825,7 @@ function ctld.spawnCrateGroup(_heli, _positions, _types)
|
||||
|
||||
local _group = {
|
||||
["visible"] = false,
|
||||
["groupId"] = _id,
|
||||
-- ["groupId"] = _id,
|
||||
["hidden"] = false,
|
||||
["units"] = {},
|
||||
-- ["y"] = _positions[1].z,
|
||||
@@ -3772,7 +3836,7 @@ function ctld.spawnCrateGroup(_heli, _positions, _types)
|
||||
|
||||
if #_positions == 1 then
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
local _details = { type = _types[1], unitId = _unitId, name = string.format("Unpacked %s #%i", _types[1], _unitId) }
|
||||
|
||||
_group.units[1] = ctld.createUnit(_positions[1].x + 5, _positions[1].z + 5, 120, _details)
|
||||
@@ -3781,7 +3845,7 @@ function ctld.spawnCrateGroup(_heli, _positions, _types)
|
||||
|
||||
for _i, _pos in ipairs(_positions) do
|
||||
|
||||
local _unitId = mist.getNextUnitId()
|
||||
local _unitId = ctld.getNextUnitId()
|
||||
local _details = { type = _types[_i], unitId = _unitId, name = string.format("Unpacked %s #%i", _types[_i], _unitId) }
|
||||
|
||||
_group.units[_i] = ctld.createUnit(_pos.x + 5, _pos.z + 5, 120, _details)
|
||||
@@ -3815,7 +3879,7 @@ function ctld.spawnDroppedGroup(_point, _details, _spawnBehind, _maxSearch)
|
||||
|
||||
local _group = {
|
||||
["visible"] = false,
|
||||
["groupId"] = _details.groupId,
|
||||
-- ["groupId"] = _details.groupId,
|
||||
["hidden"] = false,
|
||||
["units"] = {},
|
||||
-- ["y"] = _positions[1].z,
|
||||
@@ -4012,7 +4076,7 @@ function ctld.createUnit(_x, _y, _angle, _details)
|
||||
["y"] = _y,
|
||||
["type"] = _details.type,
|
||||
["name"] = _details.name,
|
||||
["unitId"] = _details.unitId,
|
||||
-- ["unitId"] = _details.unitId,
|
||||
["heading"] = _angle,
|
||||
["playerCanDrive"] = true,
|
||||
["skill"] = "Excellent",
|
||||
@@ -4530,8 +4594,10 @@ function ctld.addF10MenuOptions()
|
||||
|
||||
if ctld.enabledFOBBuilding or ctld.enableCrates then
|
||||
local _crateCommands = missionCommands.addSubMenuForGroup(_groupId, "CTLD Commands", _rootPath)
|
||||
if ctld.hoverPickup == false or ctld.slingLoad == true then
|
||||
missionCommands.addCommandForGroup(_groupId, "Load Nearby Crate", _crateCommands, ctld.loadNearbyCrate, _unitName )
|
||||
if ctld.hoverPickup == false then
|
||||
if ctld.slingLoad == false then
|
||||
missionCommands.addCommandForGroup(_groupId, "Load Nearby Crate", _crateCommands, ctld.loadNearbyCrate, _unitName )
|
||||
end
|
||||
end
|
||||
|
||||
missionCommands.addCommandForGroup(_groupId, "Unpack Any Crate", _crateCommands, ctld.unpackCrates, { _unitName })
|
||||
@@ -4562,6 +4628,9 @@ function ctld.addF10MenuOptions()
|
||||
missionCommands.addCommandForGroup(_groupId, "List Beacons", _radioCommands, ctld.listRadioBeacons, { _unitName })
|
||||
missionCommands.addCommandForGroup(_groupId, "Drop Beacon", _radioCommands, ctld.dropRadioBeacon, { _unitName })
|
||||
missionCommands.addCommandForGroup(_groupId, "Remove Closet Beacon", _radioCommands, ctld.removeRadioBeacon, { _unitName })
|
||||
elseif ctld.deployedRadioBeacons ~= {} then
|
||||
local _radioCommands = missionCommands.addSubMenuForGroup(_groupId, "Radio Beacons", _rootPath)
|
||||
missionCommands.addCommandForGroup(_groupId, "List Beacons", _radioCommands, ctld.listRadioBeacons, { _unitName })
|
||||
end
|
||||
|
||||
ctld.addedTo[tostring(_groupId)] = true
|
||||
@@ -5720,18 +5789,22 @@ if ctld.allowRandomAiTeamPickups == true then
|
||||
end
|
||||
|
||||
|
||||
-- Scheduled functions (run cyclically)
|
||||
-- Scheduled functions (run cyclically) -- but hold execution for a second so we can override parts
|
||||
|
||||
timer.scheduleFunction(ctld.refreshSmoke, nil, timer.getTime() + 5)
|
||||
timer.scheduleFunction(ctld.addF10MenuOptions, nil, timer.getTime() + 5)
|
||||
timer.scheduleFunction(ctld.checkAIStatus, nil, timer.getTime() + 1)
|
||||
timer.scheduleFunction(ctld.checkTransportStatus, nil, timer.getTime() + 5)
|
||||
timer.scheduleFunction(ctld.refreshRadioBeacons, nil, timer.getTime() + 5)
|
||||
|
||||
if ctld.enableCrates == true and ctld.slingLoad == false and ctld.hoverPickup == true then
|
||||
timer.scheduleFunction(ctld.checkHoverStatus, nil, timer.getTime() + 1)
|
||||
end
|
||||
timer.scheduleFunction(function()
|
||||
|
||||
timer.scheduleFunction(ctld.refreshRadioBeacons, nil, timer.getTime() + 5)
|
||||
timer.scheduleFunction(ctld.refreshSmoke, nil, timer.getTime() + 5)
|
||||
timer.scheduleFunction(ctld.addF10MenuOptions, nil, timer.getTime() + 5)
|
||||
|
||||
if ctld.enableCrates == true and ctld.slingLoad == false and ctld.hoverPickup == true then
|
||||
timer.scheduleFunction(ctld.checkHoverStatus, nil, timer.getTime() + 1)
|
||||
end
|
||||
|
||||
end,nil, timer.getTime()+1 )
|
||||
|
||||
--event handler for deaths
|
||||
--world.addEventHandler(ctld.eventHandler)
|
||||
@@ -5780,9 +5853,10 @@ for _coalitionName, _coalitionData in pairs(env.mission.coalition) do
|
||||
for _groupId, _group in pairs(_objectTypeData.group) do
|
||||
if _group and _group.units and type(_group.units) == 'table' then
|
||||
for _unitNum, _unit in pairs(_group.units) do
|
||||
if _unit.type == "Cargo1" and _unit.canCargo == true then
|
||||
ctld.missionEditorCargoCrates[_unit.name] = _unit.name
|
||||
env.info("Crate Found: " .. _unit.name)
|
||||
if _unit.canCargo == true then
|
||||
local _cargoName = env.getValueDictByKey(_unit.name)
|
||||
ctld.missionEditorCargoCrates[_cargoName] = _cargoName
|
||||
env.info("Crate Found: " .. _unit.name.." - Unit: ".._cargoName)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -5804,4 +5878,4 @@ env.info("CTLD READY")
|
||||
-- for key, value in pairs(getmetatable(_spawnedCrate)) do
|
||||
-- env.info(tostring(key))
|
||||
-- env.info(tostring(value))
|
||||
-- end
|
||||
-- end
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
test-fob.miz
BIN
test-fob.miz
Binary file not shown.
Binary file not shown.
BIN
test-mission.miz
BIN
test-mission.miz
Binary file not shown.
Reference in New Issue
Block a user