7 Commits
1.62 ... v1.64

Author SHA1 Message Date
Ciaran Fisher
38128b65c0 Release 1.64
Fixed bug where count in zone wouldn't work for Mission editor added
crates
Delayed config by a second so you can easily override options without
editing the file
2016-12-11 09:09:20 +00:00
Ciaran Fisher
ee6977aa96 Version bump 2016-12-07 22:26:01 +00:00
Ciaran Fisher
dc214da0d6 Added New Cargos
Added new cargos
Fixed bug where units / groups would disappear
Updating MIST
Updated all missions
2016-12-07 22:20:41 +00:00
Ciaran Fisher
ee41e86628 Merge pull request #24 from emilianomolina/master
List radio beacons when enabledRadioBeaconDrop is false.
2016-12-03 10:57:25 +00:00
Ciaran Fisher
fdc24a32c5 Merge pull request #25 from mvee/patch-1
Cargo objects were updated
2016-12-03 10:56:18 +00:00
mvee
cb63b37494 Cargo objects were updated
Quickfix for the cargo container hence the catergory and type was changed after Mi8 release
2016-12-02 18:58:49 +02:00
Emiliano Molina
cefd92f720 List radio beacons when enabledRadioBeaconDrop is false.
When radio beacons are programmatically generated, if option to allow
the player to create beacons is not set then there was no way for the
player to get the operating frequency of the programmatically generated
beacons.

This patch modifies addF10MenuOptions to give the user to list radio
beacons when enabledRadioBaconDrop is false.  If enabledRadioBeaconDrop
is true then there is no change to the behaviour of the program.

However if it is false then a check is made to see if
deployedRadioBeacons is empty.  If it is not the the user is given the
option to list radio beacons but not modify them.
2016-12-03 00:16:32 +11:00
7 changed files with 5627 additions and 4847 deletions

178
CTLD.lua
View File

@@ -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.

10296
mist.lua

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.