From d6981550a8d74000c6006243739525ea8e1d6f18 Mon Sep 17 00:00:00 2001 From: Khopa Date: Mon, 14 Dec 2020 22:23:21 +0100 Subject: [PATCH] C-130 Plugin by Plob --- qt_ui/windows/QLiberationWindow.py | 2 +- .../plugins/herculescargo/Hercules_Cargo.lua | 864 ++++++++++++++++++ resources/plugins/herculescargo/plugin.json | 12 + resources/plugins/plugins.json | 3 +- 4 files changed, 879 insertions(+), 2 deletions(-) create mode 100644 resources/plugins/herculescargo/Hercules_Cargo.lua create mode 100644 resources/plugins/herculescargo/plugin.json diff --git a/qt_ui/windows/QLiberationWindow.py b/qt_ui/windows/QLiberationWindow.py index 69101818..b1104f47 100644 --- a/qt_ui/windows/QLiberationWindow.py +++ b/qt_ui/windows/QLiberationWindow.py @@ -284,7 +284,7 @@ class QLiberationWindow(QMainWindow): "

Authors

" + \ "

DCS Liberation was originally developed by shdwp, DCS Liberation 2.0 is a partial rewrite based on this work by Khopa." \ "

Contributors

" + \ - "shdwp, Khopa, ColonelPanic, Roach, Wrycu, calvinmorrow, JohanAberg, Deus, root0fall, Captain Cody, steveveepee, pedromagueija, parithon, bwRavencl, davidp57" + \ + "shdwp, Khopa, ColonelPanic, Roach, Wrycu, calvinmorrow, JohanAberg, Deus, root0fall, Captain Cody, steveveepee, pedromagueija, parithon, bwRavencl, davidp57, Plob" + \ "

Special Thanks :

" \ "rp- for the pydcs framework
"\ "Grimes (mrSkortch) & Speed for the MIST framework
"\ diff --git a/resources/plugins/herculescargo/Hercules_Cargo.lua b/resources/plugins/herculescargo/Hercules_Cargo.lua new file mode 100644 index 00000000..4aae96c0 --- /dev/null +++ b/resources/plugins/herculescargo/Hercules_Cargo.lua @@ -0,0 +1,864 @@ + +-- Hercules Cargo Drop Events by Anubis Yinepu + +-- This script will only work for the Herculus mod by Anubis +-- Payloads carried by pylons 11, 12 and 13 need to be declared in the Herculus_Loadout.lua file +-- Except for Ammo pallets, this script will spawn whatever payload gets launched from pylons 11, 12 and 13 +-- Pylons 11, 12 and 13 are moveable within the Herculus cargobay area +-- Ammo pallets can only be jettisoned from these pylons with no benefit to DCS world +-- To benefit DCS world, Ammo pallets need to be off/on loaded using DCS arming and refueling window +-- Cargo_Container_Enclosed = true: Cargo enclosed in container with parachute, need to be dropped from 100m (300ft) or more, except when parked on ground +-- Cargo_Container_Enclosed = false: Open cargo with no parachute, need to be dropped from 10m (30ft) or less + +Hercules_Cargo = {} +Hercules_Cargo.Hercules_Cargo_Drop_Events = {} +local GT_DisplayName = "" +local GT_Name = "" +local Cargo_Drop_initiator = "" +local Cargo_Container_Enclosed = false +local SoldierGroup = false +local ParatrooperCount = 1 +local ParatrooperGroupSpawnInit = false +local ParatrooperGroupSpawn = false + +local Herc_j = 0 +local Herc_Cargo = {} +Herc_Cargo.Cargo_Drop_Direction = 0 +Herc_Cargo.Cargo_Contents = "" +Herc_Cargo.Cargo_Type_name = "" +Herc_Cargo.Cargo_over_water = false +Herc_Cargo.Container_Enclosed = false +Herc_Cargo.offload_cargo = false +Herc_Cargo.all_cargo_survive_to_the_ground = false +Herc_Cargo.all_cargo_gets_destroyed = false +Herc_Cargo.destroy_cargo_dropped_without_parachute = false +Herc_Cargo.scheduleFunctionID = 0 + +local CargoHeading = 0 +local Cargo_Drop_Position = {} + +local SoldierUnitID = 12000 +local SoldierGroupID = 12000 +local GroupSpacing = 0 + +function Hercules_Cargo.Soldier_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country, GroupSpacing) + SoldierUnitID = SoldierUnitID + 30 + SoldierGroupID = SoldierGroupID + 1 + local Herc_Soldier_Spawn = + { + ["visible"] = false, + ["tasks"] = + { + }, -- end of ["tasks"] + ["uncontrollable"] = false, + ["task"] = "Ground Nothing", + ["taskSelected"] = true, + ["groupId"] = SoldierGroupID, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["type"] = Cargo_Type_name, + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 0.5 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 0.5 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [1] + [2] = + { + ["type"] = Cargo_Type_name, + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 1.0 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 1.0 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [2] + [3] = + { + ["type"] = Cargo_Type_name, + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 1.5 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 1.0 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [3] + [4] = + { + ["type"] = Cargo_Type_name, + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 2.0 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 2.0 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [4] + [5] = + { + ["type"] = Cargo_Type_name, + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 2.5 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 2.5 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [5] + [6] = + { + ["type"] = Cargo_Type_name, + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 3.0 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 3.0 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [6] + [7] = + { + ["type"] = "Soldier M249", + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 3.5 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 3.5 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [7] + [8] = + { + ["type"] = "Soldier M249", + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 4.0 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 4.0 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [8] + [9] = + { + ["type"] = Cargo_Type_name, + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 4.5 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 4.5 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [9] + [10] = + { + ["type"] = "Paratrooper RPG-16", + ["transportable"] = + { + ["randomTransportable"] = true, + }, -- end of ["transportable"] + ["unitId"] = SoldierUnitID + 1, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z + 5.0 + GroupSpacing, + ["x"] = Cargo_Drop_Position.x + 5.0 + GroupSpacing, + ["name"] = "Soldier Unit "..SoldierUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = false, + }, -- end of [10] + }, -- end of ["units"] + ["y"] = Cargo_Drop_Position.z, + ["x"] = Cargo_Drop_Position.x, + ["name"] = "Soldier_Group_"..SoldierGroupID, + ["start_time"] = 0, + } + coalition.addGroup(Cargo_Country, Group.Category.GROUND, Herc_Soldier_Spawn) +end + +local CargoUnitID = 10000 +local CargoGroupID = 10000 +local CargoStaticGroupID = 11000 + +function Hercules_Cargo.Cargo_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country) + CargoUnitID = CargoUnitID + 1 + CargoGroupID = CargoGroupID + 1 + local Herc_Cargo_Spawn = + { + ["visible"] = false, + ["tasks"] = + { + }, -- end of ["tasks"] + ["uncontrollable"] = false, + ["task"] = "Ground Nothing", + ["groupId"] = CargoGroupID, + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["type"] = Cargo_Type_name, + ["transportable"] = + { + ["randomTransportable"] = false, + }, -- end of ["transportable"] + ["unitId"] = CargoUnitID, + ["skill"] = "Excellent", + ["y"] = Cargo_Drop_Position.z, + ["x"] = Cargo_Drop_Position.x, + ["name"] = "Cargo Unit "..CargoUnitID, + ["heading"] = CargoHeading, + ["playerCanDrive"] = true, + }, -- end of [1] + }, -- end of ["units"] + ["y"] = Cargo_Drop_Position.z, + ["x"] = Cargo_Drop_Position.x, + ["name"] = "Cargo Group "..CargoUnitID, + ["start_time"] = 0, + } + coalition.addGroup(Cargo_Country, Group.Category.GROUND, Herc_Cargo_Spawn) +end + +function Hercules_Cargo.Cargo_SpawnStatic(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, dead, Cargo_Country) + CargoStaticGroupID = CargoStaticGroupID + 1 + local Herc_CargoObject_Spawn = + { + ["type"] = Cargo_Type_name, + ["y"] = Cargo_Drop_Position.z, + ["x"] = Cargo_Drop_Position.x, + ["name"] = "Cargo Static Group "..CargoStaticGroupID, + ["heading"] = CargoHeading, + ["dead"] = dead, + } + coalition.addStaticObject(Cargo_Country, Herc_CargoObject_Spawn) +end + +function Hercules_Cargo.Cargo_SpawnObjects(Cargo_Drop_Direction, Cargo_Content_position, Cargo_Type_name, Cargo_over_water, Container_Enclosed, ParatrooperGroupSpawn, offload_cargo, all_cargo_survive_to_the_ground, all_cargo_gets_destroyed, destroy_cargo_dropped_without_parachute, Cargo_Country) + if offload_cargo == true then + ------------------------------------------------------------------------------ + if CargoHeading >= 3.14 then + CargoHeading = 0 + Cargo_Drop_Position = {["x"] = Cargo_Content_position.x - (30.0 * math.cos(Cargo_Drop_Direction - 1.0)), + ["z"] = Cargo_Content_position.z - (30.0 * math.sin(Cargo_Drop_Direction - 1.0))} + else + if CargoHeading >= 1.57 then + CargoHeading = 3.14 + Cargo_Drop_Position = {["x"] = Cargo_Content_position.x - (20.0 * math.cos(Cargo_Drop_Direction + 0.5)), + ["z"] = Cargo_Content_position.z - (20.0 * math.sin(Cargo_Drop_Direction + 0.5))} + else + if CargoHeading >= 0 then + CargoHeading = 1.57 + Cargo_Drop_Position = {["x"] = Cargo_Content_position.x - (10.0 * math.cos(Cargo_Drop_Direction + 1.5)), + ["z"] = Cargo_Content_position.z - (10.0 * math.sin(Cargo_Drop_Direction + 1.5))} + end + end + end + ------------------------------------------------------------------------------ + if ParatrooperGroupSpawn == true then + Hercules_Cargo.Soldier_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country, 0) + Hercules_Cargo.Soldier_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country, 5) + Hercules_Cargo.Soldier_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country, 10) + else + Hercules_Cargo.Cargo_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country, 0) + end + else + ------------------------------------------------------------------------------ + CargoHeading = 0 + Cargo_Drop_Position = {["x"] = Cargo_Content_position.x - (20.0 * math.cos(Cargo_Drop_Direction)), + ["z"] = Cargo_Content_position.z - (20.0 * math.cos(Cargo_Drop_Direction))} + ------------------------------------------------------------------------------ + if all_cargo_gets_destroyed == true or Cargo_over_water == true then + if Container_Enclosed == true then + Hercules_Cargo.Cargo_SpawnStatic(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, true, Cargo_Country) + if ParatrooperGroupSpawn == false then + Hercules_Cargo.Cargo_SpawnStatic(Cargo_Drop_Position, "Hercules_Container_Parachute_Static", CargoHeading, true, Cargo_Country) + end + else + Hercules_Cargo.Cargo_SpawnStatic(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, true, Cargo_Country) + end + else + ------------------------------------------------------------------------------ + if all_cargo_survive_to_the_ground == true then + if ParatrooperGroupSpawn == true then + Hercules_Cargo.Cargo_SpawnStatic(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, true, Cargo_Country) + else + Hercules_Cargo.Cargo_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country) + end + if Container_Enclosed == true then + if ParatrooperGroupSpawn == false then + Hercules_Cargo.Cargo_SpawnStatic({["z"] = Cargo_Drop_Position.z + 10.0,["x"] = Cargo_Drop_Position.x + 10.0}, "Hercules_Container_Parachute_Static", CargoHeading, false, Cargo_Country) + end + end + end + ------------------------------------------------------------------------------ + if destroy_cargo_dropped_without_parachute == true then + if Container_Enclosed == true then + if ParatrooperGroupSpawn == true then + Hercules_Cargo.Soldier_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country, 0) + else + Hercules_Cargo.Cargo_SpawnGroup(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country) + Hercules_Cargo.Cargo_SpawnStatic({["z"] = Cargo_Drop_Position.z + 10.0,["x"] = Cargo_Drop_Position.x + 10.0}, "Hercules_Container_Parachute_Static", CargoHeading, false, Cargo_Country) + end + else + Hercules_Cargo.Cargo_SpawnStatic(Cargo_Drop_Position, Cargo_Type_name, CargoHeading, true, Cargo_Country) + end + end + ------------------------------------------------------------------------------ + end + end +end + +function Hercules_Cargo.Calculate_Object_Height_AGL(object) + return object:getPosition().p.y - land.getHeight({x = object:getPosition().p.x, y = object:getPosition().p.z}) +end + +function Hercules_Cargo.Check_SurfaceType(object) + -- LAND,--1 SHALLOW_WATER,--2 WATER,--3 ROAD,--4 RUNWAY--5 + return land.getSurfaceType({x = object:getPosition().p.x, y = object:getPosition().p.z}) +end + +function Hercules_Cargo.Cargo_Track(Arg, time) + local status, result = pcall( + function() + local next = next + if next(Arg[1].Cargo_Contents) ~= nil then + if Hercules_Cargo.Calculate_Object_Height_AGL(Arg[1].Cargo_Contents) < 5.0 then--pallet less than 5m above ground before spawning + if Hercules_Cargo.Check_SurfaceType(Arg[1].Cargo_Contents) == 2 or Hercules_Cargo.Check_SurfaceType(Arg[1].Cargo_Contents) == 3 then + Arg[1].Cargo_over_water = true--pallets gets destroyed in water + end + Arg[1].Cargo_Contents:destroy()--remove pallet+parachute before hitting ground and replace with Cargo_SpawnContents + Hercules_Cargo.Cargo_SpawnObjects(Arg[1].Cargo_Drop_Direction, Object.getPoint(Arg[1].Cargo_Contents), Arg[1].Cargo_Type_name, Arg[1].Cargo_over_water, Arg[1].Container_Enclosed, Arg[1].ParatrooperGroupSpawn, Arg[1].offload_cargo, Arg[1].all_cargo_survive_to_the_ground, Arg[1].all_cargo_gets_destroyed, Arg[1].destroy_cargo_dropped_without_parachute, Arg[1].Cargo_Country) + timer.removeFunction(Arg[1].scheduleFunctionID) + Arg[1] = {} + end + return time + 0.1 + end + end) -- pcall + if not status then + env.error(string.format("Cargo_Spawn: %s", result)) + else + return result + end +end + +function Hercules_Cargo.Calculate_Cargo_Drop_initiator_NorthCorrection(point) --correction needed for true north + if not point.z then --Vec2; convert to Vec3 + point.z = point.y + point.y = 0 + end + local lat, lon = coord.LOtoLL(point) + local north_posit = coord.LLtoLO(lat + 1, lon) + return math.atan2(north_posit.z - point.z, north_posit.x - point.x) +end + +function Hercules_Cargo.Calculate_Cargo_Drop_initiator_Heading(Cargo_Drop_initiator) + local Heading = math.atan2(Cargo_Drop_initiator:getPosition().x.z, Cargo_Drop_initiator:getPosition().x.x) + Heading = Heading + Hercules_Cargo.Calculate_Cargo_Drop_initiator_NorthCorrection(Cargo_Drop_initiator:getPosition().p) + if Heading < 0 then + Heading = Heading + (2 * math.pi)-- put heading in range of 0 to 2*pi + end + return Heading + 0.06 -- rad +end + +function Hercules_Cargo.Cargo_Initialize(initiator, Cargo_Contents, Cargo_Type_name, Container_Enclosed) + local status, result = pcall( + function() + Cargo_Drop_initiator = Unit.getByName(initiator:getName()) + local next = next + if next(Cargo_Drop_initiator) ~= nil then + if ParatrooperGroupSpawnInit == true then + if (ParatrooperCount == 1 or ParatrooperCount == 2 or ParatrooperCount == 3) then + Herc_j = Herc_j + 1 + Herc_Cargo[Herc_j] = {} + Herc_Cargo[Herc_j].Cargo_Drop_Direction = Hercules_Cargo.Calculate_Cargo_Drop_initiator_Heading(Cargo_Drop_initiator) + Herc_Cargo[Herc_j].Cargo_Contents = Cargo_Contents + Herc_Cargo[Herc_j].Cargo_Type_name = Cargo_Type_name + Herc_Cargo[Herc_j].Container_Enclosed = Container_Enclosed + Herc_Cargo[Herc_j].ParatrooperGroupSpawn = ParatrooperGroupSpawnInit + Herc_Cargo[Herc_j].Cargo_Country = initiator:getCountry() + ------------------------------------------------------------------------------ + if Hercules_Cargo.Calculate_Object_Height_AGL(Cargo_Drop_initiator) < 5.0 then--aircraft on ground + Herc_Cargo[Herc_j].offload_cargo = true + ParatrooperCount = 0 + ParatrooperGroupSpawnInit = false + else + ------------------------------------------------------------------------------ + if Hercules_Cargo.Calculate_Object_Height_AGL(Cargo_Drop_initiator) < 10.0 then--aircraft less than 10m above ground + Herc_Cargo[Herc_j].all_cargo_survive_to_the_ground = true + else + ------------------------------------------------------------------------------ + if Hercules_Cargo.Calculate_Object_Height_AGL(Cargo_Drop_initiator) < 100.0 then--aircraft more than 10m but less than 100m above ground + Herc_Cargo[Herc_j].all_cargo_gets_destroyed = true + else + ------------------------------------------------------------------------------ + Herc_Cargo[Herc_j].destroy_cargo_dropped_without_parachute = true--aircraft more than 100m above ground + end + end + end + ------------------------------------------------------------------------------ + Herc_Cargo[Herc_j].scheduleFunctionID = timer.scheduleFunction(Hercules_Cargo.Cargo_Track, {Herc_Cargo[Herc_j]}, timer.getTime() + 0.1) + ParatrooperCount = ParatrooperCount + 1.0 + else + if (ParatrooperCount == 30) then + ParatrooperGroupSpawnInit = false + ParatrooperCount = 1 + else + ParatrooperCount = ParatrooperCount + 1.0 + end + end + else + Herc_j = Herc_j + 1 + Herc_Cargo[Herc_j] = {} + Herc_Cargo[Herc_j].Cargo_Drop_Direction = Hercules_Cargo.Calculate_Cargo_Drop_initiator_Heading(Cargo_Drop_initiator) + Herc_Cargo[Herc_j].Cargo_Contents = Cargo_Contents + Herc_Cargo[Herc_j].Cargo_Type_name = Cargo_Type_name + Herc_Cargo[Herc_j].Container_Enclosed = Container_Enclosed + Herc_Cargo[Herc_j].ParatrooperGroupSpawn = ParatrooperGroupSpawnInit + Herc_Cargo[Herc_j].Cargo_Country = initiator:getCountry() + ------------------------------------------------------------------------------ + if Hercules_Cargo.Calculate_Object_Height_AGL(Cargo_Drop_initiator) < 5.0 then--aircraft on ground + Herc_Cargo[Herc_j].offload_cargo = true + else + ------------------------------------------------------------------------------ + if Hercules_Cargo.Calculate_Object_Height_AGL(Cargo_Drop_initiator) < 10.0 then--aircraft less than 10m above ground + Herc_Cargo[Herc_j].all_cargo_survive_to_the_ground = true + else + ------------------------------------------------------------------------------ + if Hercules_Cargo.Calculate_Object_Height_AGL(Cargo_Drop_initiator) < 100.0 then--aircraft more than 10m but less than 100m above ground + Herc_Cargo[Herc_j].all_cargo_gets_destroyed = true + else + ------------------------------------------------------------------------------ + Herc_Cargo[Herc_j].destroy_cargo_dropped_without_parachute = true--aircraft more than 100m above ground + end + end + end + ------------------------------------------------------------------------------ + Herc_Cargo[Herc_j].scheduleFunctionID = timer.scheduleFunction(Hercules_Cargo.Cargo_Track, {Herc_Cargo[Herc_j]}, timer.getTime() + 0.1) + end + end + end) -- pcall + if not status then + env.error(string.format("Cargo_Initialize: %s", result)) + else + return result + end +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + -- EventHandlers +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +function Hercules_Cargo.Hercules_Cargo_Drop_Events:onEvent(Cargo_Drop_Event) + if Cargo_Drop_Event.id == world.event.S_EVENT_SHOT then + GT_DisplayName = Weapon.getDesc(Cargo_Drop_Event.weapon).typeName:sub(15, -1)--Remove "weapons.bombs." from string + -- trigger.action.outTextForCoalition(coalition.side.BLUE, string.format("Cargo_Drop_Event: %s", Weapon.getDesc(Cargo_Drop_Event.weapon).typeName), 10) + -- trigger.action.outTextForCoalition(coalition.side.RED, string.format("Cargo_Drop_Event: %s", Weapon.getDesc(Cargo_Drop_Event.weapon).typeName), 10) + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "Squad 30 x Soldier [7950lb]") then + GT_Name = "Soldier M4 GRG" + SoldierGroup = true + ParatrooperGroupSpawnInit = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, SoldierGroup) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "ATGM M1045 HMMWV TOW [7183lb]") then + GT_Name = "M1045 HMMWV TOW" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "APC M1043 HMMWV Armament [7023lb]") then + GT_Name = "M1043 HMMWV Armament" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "SAM Avenger M1097 [7200lb]") then + GT_Name = "M1097 Avenger" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "APC Cobra [10912lb]") then + GT_Name = "Cobra" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "APC M113 [21624lb]") then + GT_Name = "M-113" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "Tanker M978 HEMTT [34000lb]") then + GT_Name = "M978 HEMTT Tanker" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "HEMTT TFFT [34400lb]") then + GT_Name = "HEMTT TFFT" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "SPG M1128 Stryker MGS [33036lb]") then + GT_Name = "M1128 Stryker MGS" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "AAA Vulcan M163 [21666lb]") then + GT_Name = "Vulcan" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "APC M1126 Stryker ICV [29542lb]") then + GT_Name = "M1126 Stryker ICV" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "ATGM M1134 Stryker [30337lb]") then + GT_Name = "M1134 Stryker ATGM" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "APC LAV-25 [22514lb]") then + GT_Name = "LAV-25" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "M1025 HMMWV [6160lb]") then + GT_Name = "Hummer" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV M2A2 Bradley [34720lb]") then + GT_Name = "M-2 Bradley" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV MCV-80 [34720lb]") then + GT_Name = "MCV-80" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV BMP-1 [23232lb]") then + GT_Name = "BMP-1" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV BMP-2 [25168lb]") then + GT_Name = "BMP-2" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV BMP-3 [32912lb]") then + GT_Name = "BMP-3" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "ARV BRDM-2 [12320lb]") then + GT_Name = "BRDM-2" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "APC BTR-80 [23936lb]") then + GT_Name = "BTR-80" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "SAM ROLAND ADS [34720lb]") then + GT_Name = "Roland Radar" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "SAM ROLAND LN [34720b]") then + GT_Name = "Roland ADS" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "SAM SA-13 STRELA [21624lb]") then + GT_Name = "Strela-10M3" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "AAA ZSU-23-4 Shilka [32912lb]") then + GT_Name = "ZSU-23-4 Shilka" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "SAM SA-19 Tunguska 2S6 [34720lb]") then + GT_Name = "2S6 Tunguska" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "Transport UAZ-469 [3747lb]") then + GT_Name = "UAZ-469" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "Armed speedboat [2000lb]") then + GT_Name = "speedboat" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "AAA GEPARD [34720lb]") then + GT_Name = "Gepard" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "SAM CHAPARRAL [21624lb]") then + GT_Name = "M48 Chaparral" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "SAM LINEBACKER [34720lb]") then + GT_Name = "M6 Linebacker" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "Transport URAL-375 [14815lb]") then + GT_Name = "Ural-375" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "Transport M818 [16000lb]") then + GT_Name = "M 818" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV MARDER [34720lb]") then + GT_Name = "Marder" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "Transport Tigr [15900lb]") then + GT_Name = "Tigr_233036" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV TPZ FUCH [33440lb]") then + GT_Name = "TPZ" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV BMD-1 [18040lb]") then + GT_Name = "BMD-1" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "IFV BTR-D [18040lb]") then + GT_Name = "BTR_D" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "EWR SBORKA [21624lb]") then + GT_Name = "Dog Ear radar" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "ART 2S9 NONA [19140lb]") then + GT_Name = "SAU 2-C9" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "ART GVOZDIKA [34720lb]") then + GT_Name = "SAU Gvozdika" + Cargo_Container_Enclosed = false + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + if (GT_DisplayName == "APC MTLB [26000lb]") then + GT_Name = "MTLB" + Cargo_Container_Enclosed = true + Hercules_Cargo.Cargo_Initialize(Cargo_Drop_Event.initiator, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed) + end + --------------------------------------------------------------------------------------------------------------------------------- + end +end +world.addEventHandler(Hercules_Cargo.Hercules_Cargo_Drop_Events) + +-- trigger.action.outTextForCoalition(coalition.side.BLUE, string.format("Cargo_Drop_Event.weapon: %s", Weapon.getDesc(Cargo_Drop_Event.weapon).typeName), 10) +-- trigger.action.outTextForCoalition(coalition.side.BLUE, tostring('Calculate_Object_Height_AGL: ' .. aaaaa), 10) +-- trigger.action.outTextForCoalition(coalition.side.BLUE, string.format("Speed: %.2f", Calculate_Object_Speed(Cargo_Drop_initiator)), 10) +-- trigger.action.outTextForCoalition(coalition.side.BLUE, string.format("Russian Interceptor Patrol scrambled from Nalchik"), 10) + +-- function basicSerialize(var) + -- if var == nil then + -- return "\"\"" + -- else + -- if ((type(var) == 'number') or + -- (type(var) == 'boolean') or + -- (type(var) == 'function') or + -- (type(var) == 'table') or + -- (type(var) == 'userdata') ) then + -- return tostring(var) + -- else + -- if type(var) == 'string' then + -- var = string.format('%q', var) + -- return var + -- end + -- end + -- end +-- end + +-- function tableShow(tbl, loc, indent, tableshow_tbls) --based on serialize_slmod, this is a _G serialization + -- tableshow_tbls = tableshow_tbls or {} --create table of tables + -- loc = loc or "" + -- indent = indent or "" + -- if type(tbl) == 'table' then --function only works for tables! + -- tableshow_tbls[tbl] = loc + -- local tbl_str = {} + -- tbl_str[#tbl_str + 1] = indent .. '{\n' + -- for ind,val in pairs(tbl) do -- serialize its fields + -- if type(ind) == "number" then + -- tbl_str[#tbl_str + 1] = indent + -- tbl_str[#tbl_str + 1] = loc .. '[' + -- tbl_str[#tbl_str + 1] = tostring(ind) + -- tbl_str[#tbl_str + 1] = '] = ' + -- else + -- tbl_str[#tbl_str + 1] = indent + -- tbl_str[#tbl_str + 1] = loc .. '[' + -- tbl_str[#tbl_str + 1] = basicSerialize(ind) + -- tbl_str[#tbl_str + 1] = '] = ' + -- end + -- if ((type(val) == 'number') or (type(val) == 'boolean')) then + -- tbl_str[#tbl_str + 1] = tostring(val) + -- tbl_str[#tbl_str + 1] = ',\n' + -- elseif type(val) == 'string' then + -- tbl_str[#tbl_str + 1] = basicSerialize(val) + -- tbl_str[#tbl_str + 1] = ',\n' + -- elseif type(val) == 'nil' then -- won't ever happen, right? + -- tbl_str[#tbl_str + 1] = 'nil,\n' + -- elseif type(val) == 'table' then + -- if tableshow_tbls[val] then + -- tbl_str[#tbl_str + 1] = tostring(val) .. ' already defined: ' .. tableshow_tbls[val] .. ',\n' + -- else + -- tableshow_tbls[val] = loc .. '[' .. basicSerialize(ind) .. ']' + -- tbl_str[#tbl_str + 1] = tostring(val) .. ' ' + -- tbl_str[#tbl_str + 1] = tableShow(val, loc .. '[' .. basicSerialize(ind).. ']', indent .. ' ', tableshow_tbls) + -- tbl_str[#tbl_str + 1] = ',\n' + -- end + -- elseif type(val) == 'function' then + -- if debug and debug.getinfo then + -- local fcnname = tostring(val) + -- local info = debug.getinfo(val, "S") + -- if info.what == "C" then + -- tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', C function') .. ',\n' + -- else + -- if (string.sub(info.source, 1, 2) == [[./]]) then + -- tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')' .. info.source) ..',\n' + -- else + -- tbl_str[#tbl_str + 1] = string.format('%q', fcnname .. ', defined in (' .. info.linedefined .. '-' .. info.lastlinedefined .. ')') ..',\n' + -- end + -- end + -- else + -- tbl_str[#tbl_str + 1] = 'a function,\n' + -- end + -- else + -- tbl_str[#tbl_str + 1] = 'unable to serialize value type ' .. basicSerialize(type(val)) .. ' at index ' .. tostring(ind) + -- end + -- end + -- tbl_str[#tbl_str + 1] = indent .. '}' + -- return table.concat(tbl_str) + -- end +-- end + + + + +-- function F10CargoDrop(GroupId, Unitname) + -- local rootPath = missionCommands.addSubMenuForGroup(GroupId, "Cargo Drop") + -- missionCommands.addCommandForGroup(GroupId, "Drop direction", rootPath, CruiseMissilesMessage, {GroupId, Unitname}) + -- missionCommands.addCommandForGroup(GroupId, "Drop distance", rootPath, ForwardConvoy, nil) + -- local measurementsSetPath = missionCommands.addSubMenuForGroup(GroupId,"Set measurement units",rootPath) + -- missionCommands.addCommandForGroup(GroupId, "Set to Imperial (feet, knts)",measurementsSetPath,setMeasurements,{GroupId, "imperial"}) + -- missionCommands.addCommandForGroup(GroupId, "Set to Metric (meters, km/h)",measurementsSetPath,setMeasurements,{GroupId, "metric"}) +-- end + +-- function Calculate_Object_Speed(object) + -- return math.sqrt(object:getVelocity().x^2 + object:getVelocity().y^2 + object:getVelocity().z^2) * 3600 / 1852 -- knts +-- end + +-- function vecDotProduct(vec1, vec2) + -- return vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z +-- end + +-- function Calculate_Aircraft_ForwardVelocity(Drop_initiator) + -- return vecDotProduct(Drop_initiator:getPosition().x, Drop_initiator:getVelocity()) +-- end + + + diff --git a/resources/plugins/herculescargo/plugin.json b/resources/plugins/herculescargo/plugin.json new file mode 100644 index 00000000..e80a5af0 --- /dev/null +++ b/resources/plugins/herculescargo/plugin.json @@ -0,0 +1,12 @@ +{ + "nameInUI": "Include C130 Cargo script (Anubis Hercules mod)", + "defaultValue": false, + "specificOptions": [], + "scriptsWorkOrders": [ + { + "file": "Hercules_Cargo.lua", + "mnemonic": "Hercules_Cargo" + } + ], + "configurationWorkOrders": [] +} \ No newline at end of file diff --git a/resources/plugins/plugins.json b/resources/plugins/plugins.json index 6dcac3ae..377cda18 100644 --- a/resources/plugins/plugins.json +++ b/resources/plugins/plugins.json @@ -1,5 +1,6 @@ [ "base", "jtacautolase", - "skynetiads" + "skynetiads", + "herculescargo" ]