Merge pull request #2256 from FlightControl-Master/master

CTLD
This commit is contained in:
Thomas 2025-02-17 07:01:08 +01:00 committed by GitHub
commit 913b2c6d3f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3333,6 +3333,7 @@ function CTLD:_ListCargo(Group, Unit)
local maxloadable = self:_GetMaxLoadableMass(Unit) local maxloadable = self:_GetMaxLoadableMass(Unit)
local finddist = self.CrateDistance or 35 local finddist = self.CrateDistance or 35
--local _,_,loadedgc,loadedno = self:_FindCratesNearby(Group,Unit,finddist,true) --local _,_,loadedgc,loadedno = self:_FindCratesNearby(Group,Unit,finddist,true)
if self.Loaded_Cargo[unitname] then if self.Loaded_Cargo[unitname] then
local no_troops = loadedcargo.Troopsloaded or 0 local no_troops = loadedcargo.Troopsloaded or 0
local no_crates = loadedcargo.Cratesloaded or 0 local no_crates = loadedcargo.Cratesloaded or 0
@ -3346,7 +3347,7 @@ function CTLD:_ListCargo(Group, Unit)
local cargo = _cargo -- #CTLD_CARGO local cargo = _cargo -- #CTLD_CARGO
local type = cargo:GetType() -- #CTLD_CARGO.Enum local type = cargo:GetType() -- #CTLD_CARGO.Enum
if (type == CTLD_CARGO.Enum.TROOPS or type == CTLD_CARGO.Enum.ENGINEERS) and (not cargo:WasDropped() or self.allowcratepickupagain) then if (type == CTLD_CARGO.Enum.TROOPS or type == CTLD_CARGO.Enum.ENGINEERS) and (not cargo:WasDropped() or self.allowcratepickupagain) then
report:Add(string.format("Troop: %s size %d",cargo:GetName(),cargo:GetCratesNeeded())) report:Add(string.format("Troop: %s size %d", cargo:GetName(), cargo:GetCratesNeeded()))
end end
end end
if report:GetCount() == 4 then if report:GetCount() == 4 then
@ -3355,18 +3356,25 @@ function CTLD:_ListCargo(Group, Unit)
report:Add("------------------------------------------------------------") report:Add("------------------------------------------------------------")
report:Add(" -- CRATES --") report:Add(" -- CRATES --")
local cratecount = 0 local cratecount = 0
local accumCrates = {}
for _,_cargo in pairs(cargotable or {}) do for _,_cargo in pairs(cargotable or {}) do
local cargo = _cargo -- #CTLD_CARGO local cargo = _cargo -- #CTLD_CARGO
local type = cargo:GetType() -- #CTLD_CARGO.Enum local type = cargo:GetType() -- #CTLD_CARGO.Enum
if (type ~= CTLD_CARGO.Enum.TROOPS and type ~= CTLD_CARGO.Enum.ENGINEERS and type ~= CTLD_CARGO.Enum.GCLOADABLE) and (not cargo:WasDropped() or self.allowcratepickupagain) then if (type ~= CTLD_CARGO.Enum.TROOPS and type ~= CTLD_CARGO.Enum.ENGINEERS and type ~= CTLD_CARGO.Enum.GCLOADABLE) and (not cargo:WasDropped() or self.allowcratepickupagain) then
report:Add(string.format("Crate: %s size 1",cargo:GetName())) local cName = cargo:GetName()
cratecount = cratecount + 1 local needed = cargo:GetCratesNeeded() or 1
accumCrates[cName] = accumCrates[cName] or {count=0, needed=needed}
accumCrates[cName].count = accumCrates[cName].count + 1
end end
if type == CTLD_CARGO.Enum.GCLOADABLE and not cargo:WasDropped() then if type == CTLD_CARGO.Enum.GCLOADABLE and not cargo:WasDropped() then
report:Add(string.format("GC loaded Crate: %s size 1",cargo:GetName())) report:Add(string.format("GC loaded Crate: %s size 1", cargo:GetName()))
cratecount = cratecount + 1 cratecount = cratecount + 1
end end
end end
for cName, data in pairs(accumCrates) do
cratecount = cratecount + data.count
report:Add(string.format("Crate: %s %d/%d", cName, data.count, data.needed))
end
if cratecount == 0 then if cratecount == 0 then
report:Add(" N O N E") report:Add(" N O N E")
end end
@ -3387,13 +3395,12 @@ function CTLD:_ListCargo(Group, Unit)
report:Add("------------------------------------------------------------") report:Add("------------------------------------------------------------")
report:Add("Total Mass: ".. loadedmass .. " kg. Loadable: "..maxloadable.." kg.") report:Add("Total Mass: ".. loadedmass .. " kg. Loadable: "..maxloadable.." kg.")
local text = report:Text() local text = report:Text()
self:_SendMessage(text, 30, true, Group) self:_SendMessage(text, 30, true, Group)
else else
self:_SendMessage(string.format("Nothing loaded!\nTroop limit: %d | Crate limit %d | Weight limit %d kgs",trooplimit,cratelimit,maxloadable), 10, false, Group) self:_SendMessage(string.format("Nothing loaded!\nTroop limit: %d | Crate limit %d | Weight limit %d kgs", trooplimit, cratelimit, maxloadable), 10, false, Group)
end end
return self return self
end end
--- (Internal) Function to list loaded cargo. --- (Internal) Function to list loaded cargo.
-- @param #CTLD self -- @param #CTLD self
-- @param Wrapper.Group#GROUP Group -- @param Wrapper.Group#GROUP Group
@ -4391,7 +4398,6 @@ function CTLD:_RefreshLoadCratesMenu(Group, Unit)
MENU_GROUP_COMMAND:New(Group, "No crates found! Rescan?", Group.MyLoadCratesMenu, function() self:_RefreshLoadCratesMenu(Group, Unit) end) MENU_GROUP_COMMAND:New(Group, "No crates found! Rescan?", Group.MyLoadCratesMenu, function() self:_RefreshLoadCratesMenu(Group, Unit) end)
return return
end end
MENU_GROUP_COMMAND:New(Group, "Rescan?", Group.MyLoadCratesMenu, function() self:_RefreshLoadCratesMenu(Group, Unit) end)
MENU_GROUP_COMMAND:New(Group, "Load ALL", Group.MyLoadCratesMenu, self._LoadCratesNearby, self, Group, Unit) MENU_GROUP_COMMAND:New(Group, "Load ALL", Group.MyLoadCratesMenu, self._LoadCratesNearby, self, Group, Unit)
local cargoByName = {} local cargoByName = {}
for _, crate in pairs(nearby) do for _, crate in pairs(nearby) do
@ -4408,6 +4414,7 @@ function CTLD:_RefreshLoadCratesMenu(Group, Unit)
if found >= needed then if found >= needed then
line = string.format("Load %s", cName) line = string.format("Load %s", cName)
else else
MENU_GROUP_COMMAND:New(Group, "Rescan?", Group.MyLoadCratesMenu, function() self:_RefreshLoadCratesMenu(Group, Unit) end)
line = string.format("Load %s (%d/%d)", cName, found, needed) line = string.format("Load %s (%d/%d)", cName, found, needed)
end end
MENU_GROUP_COMMAND:New(Group, line, Group.MyLoadCratesMenu, self._LoadSingleCrateSet, self, Group, Unit, cName) MENU_GROUP_COMMAND:New(Group, line, Group.MyLoadCratesMenu, self._LoadSingleCrateSet, self, Group, Unit, cName)